nuime CLI リファレンス

NUI プログラムをコマンドラインから実行・検証する — AI エージェントからも使えます

nuime CLI とは

nuime は、Nuime デスクトップの内蔵 MCP サーバーを使って NUI プログラム(テキストシナリオ)を検証・実行する Windows コマンドラインツールです。

AI エージェント(Copilot・Claude・Cursor など)や CI スクリプトに適しています。 終了コードが機械可読で、--json で構造化出力も得られます。

alpha(非商用・個人利用は無償)

入手方法

CLI は Nuime デスクトップ(alpha、2026年7月1日配布開始)に同梱されています。 インストールすると nuime.exe のアプリ実行エイリアスが PATH に現れ、 ターミナルから nuime を呼べます。

前提: init / secret 以外のコマンドは Desktop の内蔵 MCP サーバー( 既定 http://127.0.0.1:3002/mcp)経由で動作します。 NVDA が Desktop 内蔵リレー(ポート 6837)に接続している必要があります。

クイックスタート

nuime init my-project          # 新規プロジェクトを初期化
cd my-project
nuime validate programs/sample.nui
nuime serve . --detach         # ヘッドレス Desktop を起動
nuime run programs/sample.nui
nuime log                      # 直近の run ログを表示
nuime stop

サンプルプログラムは NVDA+t を送り、アクティブウィンドウのタイトルを読み上げて その発話を取得します。実行には NVDA 接続が必要です。

コマンド一覧

nuime コマンドの一覧
コマンド 対応 MCP ツール 説明
nuime init [path] [--name N] [--force] なし(ローカル完結) 新規プロジェクト骨格(nuiproject.yaml・ディレクトリ一式・サンプル)を初期化
nuime validate <path> validate_program NUI プログラムを lint(NVDA 実行なし)
nuime run <path> [--label L] run_program NUI プログラムを実行し run_id を返す
nuime run --text "<inline>" run_program(program_text) インラインの NUI を実行
nuime runs [--limit N] [--program P] list_runs run 一覧を表示
nuime log [run_id] [--require-ok] get_run_log run ログを表示。--require-ok で検証成否を終了コードに反映
nuime secret list / set / delete なし(ローカル完結) シークレット(資格情報)を管理。値は stdin パイプまたはマスク入力で読み込む
nuime serve [path] [--port N] [--detach] なし(プロセス管理) ヘッドレス Desktop を起動し、MCP の起動完了を待つ
nuime stop [--force] なし(プロセス管理) 実行中の Desktop にグレースフルな停止を要求
nuime status なし(プロセス管理) PID / モード / リレーポート / MCP エンドポイントを表示
nuime --help なし ヘルプを表示(nuime 引数なしでも同じ)

実行例

プロジェクトの初期化

$ nuime init my-project
status=project_initialized
project_root=/path/to/my-project
project_name=my-project
created=nuiproject.yaml, .gitignore, programs/sample.nui, programs/, skills/, chats/, logs/, images/, prompts/
hint=nuime validate programs/sample.nui validates the sample program.

検証(lint)

$ nuime validate programs/sample.nui
valid=true program=programs/sample.nui steps=3 errors=0 warnings=0
hint=run_program(programs/sample.nui)

実行(NVDA 接続が必要)

$ nuime run programs/sample.nui --label smoke
status=ok
run_id=2026-10-05T161205_3f9a2c
program_path=programs/sample.nui
succeeded=true
verified=true
expectations_ok=1/1
judgment=Completed (no automatic judgment)
directory=logs/2026-10-05T161205_3f9a2c
hint=get_run_log(run_id=2026-10-05T161205_3f9a2c)
next_required=get_run_log

ログ確認

$ nuime log --require-ok
verified=true
run_id=2026-10-05T161205_3f9a2c
program_path=programs/sample.nui
succeeded=true
expectations_ok=1/1
failed_steps=0

run_id=2026-10-05T161205_3f9a2c
program_path=programs/sample.nui
started_at=2026-10-05T16:12:05.6789000+09:00
finished_at=2026-10-05T16:12:07.1025000+09:00
succeeded=True
directory=.../logs/2026-10-05T161205_3f9a2c
...

ヘッドレス Desktop の管理

$ nuime serve . --detach
status=serving
pid=4188
detached=true
mcp_endpoint=http://127.0.0.1:3002/mcp
mcp_ready=true

$ nuime status
status=running
pid=4188
mode=headless
relay_port=6837
mcp_endpoint=http://127.0.0.1:3002/mcp

$ nuime stop
status=stopping
pid=4188
status=stopped

シークレット管理

$ echo s3cret-value | nuime secret set api_key
status=secret_saved
id=api_key
scope=project
environment=default

$ nuime secret list
status=ok
scope=project
count=1
  api_key (updated: 2026-10-05T16:20:00)

秘密値は標準入力(パイプ)またはマスク対話入力でのみ指定できます。 コマンドライン引数(--value)や平文表示(secret get)は セキュリティ上の理由で非対応です。

終了コード

0
成功(run が status=ok かつ succeeded=true、または validate がエラー無し)
1
検証失敗 / run 失敗 / 初期化失敗(プログラム起因の失敗)
2
使用法エラー(引数不正)
3
接続不可(Desktop 未起動 / NVDA 未接続 / 認証失敗 / 既に起動中)

3 を分けることで、「環境起因の失敗」と「プログラム起因の失敗」を CI スクリプトが判別できます。

--json(機械可読出力)

すべての run 系コマンドは --json を付けると 1 行の JSON で結果を返します。

$ nuime run programs/sample.nui --json
{"command":"run","ok":true,"output":"status=ok\nrun_id=2026-10-05T161205_3f9a2c\nprogram_path=programs/sample.nui\nsucceeded=true\nverified=true\n..."}

AI エージェントからの利用

CLI は Desktop 内蔵 MCP(nuime-desktop-mcp)のラッパーです。 次のいずれの方法でも AI エージェントから Nuime を使えます。

  1. 直にツールを呼ぶ(推奨) — MCP クライアントを http://127.0.0.1:3002/mcp に接続し、run_program / validate_program / get_run_log などのツールを直接呼ぶ。 nuime run / nuime log も同じツールを呼ぶだけなので、同等です。
  2. CLI をシェルで叩く — エージェントが端末操作のみの場合は nuime run --json などのコマンドを実行し、終了コードと JSON 出力から結果を判定できます。

MCP クライアント接続例

"nuime-desktop-mcp": {
  "url": "http://127.0.0.1:3002/mcp"
}

認証トークンを設定している場合は Authorization: Bearer <token> ヘッダーを付けます。 トークンは環境変数 NUIME_MCP_AUTH_TOKEN またはプロジェクトの nuiproject.yaml → mcp.http.authSecret(シークレット ID)で解決します。

toolSubset の注意: プロジェクトの nuiproject.yaml で mcp.http.toolSubset: all を設定してください(初期化直後は既定値 default で、run_program / validate_program が MCP プロトコルレベルで未公開のままです)。 未設定のまま CLI を使うと error=tool_not_available で終了コード 3 になります。

前提条件

エージェントが使用を推奨する状況

AI エージェントは、次のような場面で Nuime(CLI または MCP ツール)の使用をユーザーに提案できます。

NUI プログラムの書き方(概要)

NUI プログラムは 1 行 1 コマンドのテキストファイル(.nui)です。 字句は Tcl Dodekalogue 準拠({…} リテラル、"…" 引用、$var 変数展開)。 # 以降はコメントとして扱われます。

# タイトルを読み上げて取得する
send_key NVDA+t
sleep 0.5
get_last_speech

主な L1 コマンド(抜粋。未掲載のコマンドは nuime --help の出力や 内蔵 MCP の list_tools ツールで確認できます):

主な L1 コマンド
コマンド 引数 意味
send_keykeys…キーコードを NVDA Remote 経由で順次送信(control+v、NVDA+t など)
sleepseconds固定時間待つ
get_last_speech[-skip-mode-announcements]直近の NVDA 発話 1 件を取得
get_speech_history[count]直近の NVDA 発話履歴を取得
set_clipboardtext被制御機(NVDA 機)のクリップボードへ文字列を書き込む
set_variablename valueNUI 変数へ値を保存
ensure_app_focusapp_hintデスクトップアプリを前面化
ensure_browser_focus[browser] [url]ブラウザーを前面化(未起動なら URL 起動)
wait_speech[-timeout N] pattern発話がパターンに一致するまで待つ
expectpattern発話がパターンに一致するかソフト判定(結果を記録)
assertpattern発話がパターンに一致しなければ run を中断
capture_and_ocr[-language tag]前面ウィンドウをキャプチャして Windows OCR
llm_askprompt outvarLLM に prompt を投げ、応答を変数へ保存

判定には expect(ソフト判定・記録)と assert(ハード失敗)を使い分けます。 発話ベースの検証方法の詳細は上記のリファレンスを参照してください。

トラブルシューティング

nuime が見つからない
Windows 設定 →「アプリ実行エイリアス」で nuime.exe を有効にする
run が終了コード 3 で失敗する
Desktop が起動していない・NVDA が接続していない・認証トークン不一致のいずれか。 nuime status と内蔵 MCP の is_nvda_connected で確認
error=tool_not_available
nuiproject.yaml の mcp.http.toolSubset を all にする
run が終了コード 1 で失敗する
プログラム起因。まず nuime validate、次に nuime log --require-ok や logs/<run_id>/summary.json で 失敗ステップを特定
run が期待に失敗する(判定が 要確認 など)
expect / assert パターンは発話の部分一致。 応答が遅い操作は wait_speech / wait_speech_idle で待機を入れる。

お問い合わせ

Nuime についてのご質問・商用利用のご相談は、 お問い合わせフォーム からお送りください。

運営: 株式会社シュアルタ