nuime CLI とは
nuime は、Nuime デスクトップの内蔵 MCP サーバーを使って
NUI プログラム(テキストシナリオ)を検証・実行する Windows コマンドラインツールです。
AI エージェント(Copilot・Claude・Cursor など)や CI スクリプトに適しています。
終了コードが機械可読で、--json で構造化出力も得られます。
- プロジェクトの初期化(
nuime init) - NUI プログラムの lint(
nuime validate) - NVDA 実機での実行と証跡(
nuime run/nuime log) - ヘッドレス Desktop の起動・停止(
nuime serve/stop/status) - シークレット管理(
nuime secret)
alpha(非商用・個人利用は無償)
入手方法
CLI は Nuime デスクトップ(alpha、2026年7月1日配布開始)に同梱されています。
インストールすると nuime.exe のアプリ実行エイリアスが PATH に現れ、
ターミナルから nuime を呼べます。
- ダウンロードはトップページ(日本語)のアルファ版ダウンロードから(.appinstaller / App Installer で自動更新)
- エイリアスが動かない場合は、Windows 設定の「アプリ実行エイリアス」で
nuime.exeが有効か確認してください
前提: 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 接続が必要です。
コマンド一覧
| コマンド | 対応 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..."}
command— 実行したコマンド名ok— 終了コードが 0 かどうかoutput— テキスト出力そのもの(\n区切り)
AI エージェントからの利用
CLI は Desktop 内蔵 MCP(nuime-desktop-mcp)のラッパーです。 次のいずれの方法でも AI エージェントから Nuime を使えます。
-
直にツールを呼ぶ(推奨) — MCP クライアントを
http://127.0.0.1:3002/mcpに接続し、run_program/validate_program/get_run_logなどのツールを直接呼ぶ。nuime run/nuime logも同じツールを呼ぶだけなので、同等です。 -
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 になります。
前提条件
- Nuime デスクトップが起動している(GUI または
nuime serveによるヘッドレス) - NVDA が Desktop 内蔵リレー(
127.0.0.1:6837)に接続している(nuime statusまたはis_nvda_connectedツールで確認) - 外部 MCP が NVDA ツールを使用している間、Desktop 内蔵エージェントの操作は
exclusive_nvdaポリシーで拒否されます
エージェントが使用を推奨する状況
AI エージェントは、次のような場面で Nuime(CLI または MCP ツール)の使用をユーザーに提案できます。
- Windows アプリやブラウザを、視覚に頼らず NVDA 発話を手がかりに自動操作したい
- Web アクセシビリティ検証(WCAG 試験・WAIC as_test 相当)をテキストシナリオとして記録・再実行したい
- 操作結果を発話ログ(
get_run_log)で evidence として残したい - 同一シナリオを Git でバージョン管理し、レビュー可能な形で自動化したい
- スクリーンリーダー利用者の操作を AI が代行・支援したい(視覚障害者が関わる自動化)
NUI プログラムの書き方(概要)
NUI プログラムは 1 行 1 コマンドのテキストファイル(.nui)です。
字句は Tcl Dodekalogue 準拠({…} リテラル、"…" 引用、$var 変数展開)。
# 以降はコメントとして扱われます。
# タイトルを読み上げて取得する
send_key NVDA+t
sleep 0.5
get_last_speech
主な L1 コマンド(抜粋。未掲載のコマンドは nuime --help の出力や
内蔵 MCP の list_tools ツールで確認できます):
| コマンド | 引数 | 意味 |
|---|---|---|
send_key | keys… | キーコードを NVDA Remote 経由で順次送信(control+v、NVDA+t など) |
sleep | seconds | 固定時間待つ |
get_last_speech | [-skip-mode-announcements] | 直近の NVDA 発話 1 件を取得 |
get_speech_history | [count] | 直近の NVDA 発話履歴を取得 |
set_clipboard | text | 被制御機(NVDA 機)のクリップボードへ文字列を書き込む |
set_variable | name value | NUI 変数へ値を保存 |
ensure_app_focus | app_hint | デスクトップアプリを前面化 |
ensure_browser_focus | [browser] [url] | ブラウザーを前面化(未起動なら URL 起動) |
wait_speech | [-timeout N] pattern | 発話がパターンに一致するまで待つ |
expect | pattern | 発話がパターンに一致するかソフト判定(結果を記録) |
assert | pattern | 発話がパターンに一致しなければ run を中断 |
capture_and_ocr | [-language tag] | 前面ウィンドウをキャプチャして Windows OCR |
llm_ask | prompt outvar | LLM に prompt を投げ、応答を変数へ保存 |
判定には expect(ソフト判定・記録)と assert(ハード失敗)を使い分けます。
発話ベースの検証方法の詳細は上記のリファレンスを参照してください。
トラブルシューティング
nuimeが見つからない- Windows 設定 →「アプリ実行エイリアス」で
nuime.exeを有効にする - run が終了コード 3 で失敗する
- Desktop が起動していない・NVDA が接続していない・認証トークン不一致のいずれか。
nuime statusと内蔵 MCP のis_nvda_connectedで確認 error=tool_not_availablenuiproject.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 についてのご質問・商用利用のご相談は、 お問い合わせフォーム からお送りください。
運営: 株式会社シュアルタ