OpenHands CLI クイックスタート:インストール、フラグ、ヘッドレスモード
CLIインストール、フラグ、ヘッドレス、ローカルモデル
OpenHands は、サンドボックス内でファイルを編集し、コマンドを実行するオープンソースのコーディングエージェントです。本CLIのクイックスタートは、2026年10月26日にパッケージバージョン 1.16.0 に対して検証済みです。
PyPI に公開されているパッケージ openhands のバージョンは 1.16.0 で、2026年5月8日にアップロードされ、openhands-sdk==1.21.0 が固定されています。そのタグの README には、Python 3.12 および uv 0.11.6 以降が必須と記載されています。OpenHands-CLI リポジトリのデフォルトブランチの README には、そのリポジトリはもうアクティブにメンテナンスされていない旨が記載されており、新規インストールには Agent Canvas の利用を促しています。ヘッドレスモードおよび openhands acp は、なお 1.16.0 のコマンドセットの一部として残っています。

AI 開発者ツールガイドでは、当サイトの他のターミナルエージェントを追跡しています。このページでは、OpenHands CLI に特化しています: インストール、設定ファイル、ローカルモデルの URL、そしてスクリプトが実際にパスするフラグについてです。
CLI とは何か
AI コーディングアシスタントは通常、プロンプトからコードを生成または編集します。OpenHands はこれをエージェントループへと拡張します: 計画を立てる、ファイルの書き込みやテストの実行などのアクションを実行する、結果を観察し、処理を継続します。このプロジェクトは以前 OpenDevin と呼ばれていました。OpenHands の論文には、シェルやブラウジング機能を備えた Docker サンドボックスされたランタイムについて記述されており、これは CLI が今もラップしている実行モデルです。
リリース 1.16.0 では、このループを実行するための 5 つの方法が文書化されています。
| モード | コマンド | 用途 |
|---|---|---|
| ターミナル UI | openhands |
インタラクティブセッション。承認フラグを渡さない限り、各アクション実行前に確認します。 |
| ヘッドレス | openhands --headless -t "task" |
CI やスクリプト向け。--task または --file の指定が必須。アクションは常に承認されます。 |
| ACP | openhands acp |
Zed、JetBrains、Toad、および VS Code の ACP 拡張機能向けの Agent Client Protocol サーバー。 |
| ブラウザ TUI | openhands web |
ブラウザ版の同一 CLI。デフォルトのバインドは 0.0.0.0:12000 です。 |
| レガシー GUI | openhands serve |
CLI ランチャーから起動する Docker GUI。デフォルト URL は http://localhost:3000 です。 |
プロジェクトが現在文書化しているインストール対象: Agent Canvas
2026年6月3日、OpenHands の FAQ で、ターミナル UI が 2026年10月1日まではメンテナンス体制に移行することが発表されました。また、ヘッドレスモードと ACP は完全なサポートを継続すると述べられています。ローカル GUI (openhands serve) は、Agent Canvas が分離されたエフェメラルサンドボックスを動作できるようになるまで、メンテナンス体制にとどまるとのことです。FAQ では、メンテナンスとは依存関係の更新、重大なバグ修正、および新しい LLM のサポートを指すと定義しています。主な OpenHands リポジトリは、2026年10月23日に Agent Canvas 1.33.0 をリリースしました。
agent-canvas は、現在の UI とそのバックエンドを起動します。openhands serve はレガシー GUI を起動しますが、Agent Canvas は起動しません。
Agent Canvas には Node.js 24 以降と uv が必要です。グローバルインストールなしでの初回実行の例:
npx @openhands/agent-canvas
このプロセスは http://localhost:8000 で待ち受けします。そのターミナルを閉じると、ローカルバックエンドが停止します。グローバルインストールは npm install -g @openhands/agent-canvas を実行し、その後 agent-canvas とします。npm を使用する場合、エージェントサーバーはユーザーとして実行されるため、エージェントはユーザーのアカウントの権限でローカルファイルに操作を行います。
Docker を使用する場合、ポートはローカルホストにのみ公開され、プロジェクトディレクトリがマウントされます:
mkdir -p ~/projects
docker run -it --rm \
-p 127.0.0.1:8000:8000 \
-v openhands-data:/home/openhands/.openhands \
-v ~/projects:/projects \
ghcr.io/openhands/agent-canvas:latest
コンテナは UI を http://localhost:8000/canvas で配信します。名付きボリューム openhands-data は、--rm 後も設定を保持します。Linux で、~/.openhands をこのイメージにバインドマウントすると、unable to open database file エラーが発生します。これは、コンテナユーザーが UID 10001 であるのに対し、ホストディレクトリは通常、ユーザー自身の UID で所有されているためです。インストールページでは、この理由から名付きボリュームを使用しています。~/.openhands に既に存在する設定は、新しいボリュームにコピーされません。
OpenHands CLI のインストール
引き続き openhands --headless または openhands acp を使用したい場合は、CLI を使用してください。公開されているウィHEELは Python 3.12 のみでインストールできます(PyPI では ==3.12.*)。uv は 0.11.6 以降である必要があります。Windows では、インストールページのコマンドは WSL (Ubuntu) で実行すると記載されています。
uv を使用してインストール
uv tool install openhands --python 3.12
openhands
同じインタープリターピンでアップグレードします:
uv tool upgrade openhands --python 3.12
ローカルセットアップページには、uv が CLI をプロジェクトのバーチャル環境から分離し、デフォルトの MCP サーバーにはそれが必須であると記載されています。
スタンドアロンバイナリをインストール
curl -fsSL https://install.openhands.dev/install.sh | sh
openhands
macOS では、Gatekeeper ダイアログがバイナリの実行をブロックする可能性があります(「Apple が悪性ソフトウェアかどうかを確認できないため、openhands を開くことはできません」)。インストールページに記載されている対応策は、システム設定 > プライバシーとセキュリティ、そしてセキュリティセクションの「とにかく許可」を選択し、再度 openhands を実行することです。
Docker を介して CLI を実行
インストールページのコンテナは、エージェントサーバーイメージ用の AGENT_SERVER_IMAGE_TAG を設定します。コンテナ内での uv tool install openhands は PyPI 版 CLI です。このページ用に確認したタグは 1.26.0-python です。このコマンドの古いコピーは 1.12.0-python を使用していました。
export SANDBOX_VOLUMES="$PWD:/workspace"
docker run -it \
--pull=always \
-e AGENT_SERVER_IMAGE_REPOSITORY=ghcr.io/openhands/agent-server \
-e AGENT_SERVER_IMAGE_TAG=1.26.0-python \
-e SANDBOX_USER_ID=$(id -u) \
-e SANDBOX_VOLUMES=$SANDBOX_VOLUMES \
-v /var/run/docker.sock:/var/run/docker.sock \
-v ~/.openhands:/root/.openhands \
--add-host host.docker.internal:host-gateway \
--name openhands-cli-$(date +%Y%m%d%H%M%S) \
python:3.12-slim \
bash -c "pip install uv && uv tool install openhands --python 3.12 && openhands"
SANDBOX_USER_ID=$(id -u) は、サンドボックスユーザーがホストユーザーと一致するようにし、エージェントがマウントされたワークスペースに root 所有のファイルを置き去りにしないようにします。SANDBOX_VOLUMES は、エージェントがアクセス可能なディレクトリです。
OPENHANDS_VERSION は、openhands serve 用の Docker イメージバージョンを選択します。PyPI 版 CLI のバージョンは変更しません。
設定ファイル
初回起動時、CLI はモデル設定の入力を求め、それを ~/.openhands/ 配下に書き込みます。1.16.0 の README およびコマンドリファレンスでは、これらのファイルを以下の通り呼びます:
| ファイル | 保持される内容 |
|---|---|
~/.openhands/agent_settings.json |
永続化されたエージェントスペック(LLM ブロックとコンデンスター設定を含む) |
~/.openhands/cli_config.json |
CLI の好み(クリチッカーの有効化を含む) |
~/.openhands/mcp.json |
MCP サーバー定義 |
~/.openhands/conversations/ |
会話履歴 |
インストールページでは、Docker ユーザーには依然として ~/.openhands/settings.json を準備するよう指示しています。CLI README と 1.16.0 ツリーの AgentStore は、エージェントスペックを agent_settings.json に永続化します。インストールページのファイル名をスキップし、agent_settings.json を書き込んだ CLI インストールは、そのソースと整合しています。
create_and_save_from_settings は、同一のモデル、API キー、ベース URL から 2 つの LLM オブジェクトを構築します: 1 つはエージェント用、もう 1 つは要約コンデンスター用です。そのため、保存ファイルには llm フィールドが重複して記録されます。任意のエディタでエージェントファイルを編集します:
nano ~/.openhands/agent_settings.json
LLM_API_KEY、LLM_MODEL、LLM_BASE_URL は、オプトインしない限り無視されます。オーバーライドは保存されません:
export LLM_MODEL="gpt-4o"
export LLM_API_KEY="your-api-key"
openhands --override-with-envs
OPENHANDS_CLOUD_URL はデフォルトのクラウドサーバーを設定します。この変数が未設定の場合、cloud および login コマンドはデフォルトで https://app.all-hands.dev を使用します。
1.0.0 より古い CLI からのアップグレードでは、設定を再入力する必要があります。インストールページには、設定フォーマットが 1.0.0 で変更された旨が記載されています。
ローカルモデル
2026年5月21日付のローカル LLM ガイドでは、最初の試行対象として Qwen3.6-35B-A3B を推奨しています。量子化ビルドには最低 24GB の VRAM を備えた GPU、または最低 64GB の統一メモリを備えた Apple Silicon Mac が必要とされています。同ページでは、コンテキスト長を少なくとも 22,000 トークンに設定するよう示し、Ollama のデフォルト 4096 はシステムプロンプトに対して小さすぎると述べています。
エージェントがツールを呼び出さない場合、そのガイドではそれをモデルの制限と捉え、qwen2.5-coder-14b-instruct および qwopus3.5-27b-v3 に関するコミュニティの報告事例を挙げます。Ollama、vLLM、LM Studio、または LocalAI の選択が未確定の場合、ローカルホスティング比較は、サーバーごとの比較表を提供します。
Ollama
ガイドの Ollama 起動コマンドでは、ollama serve の前にコンテキスト長を設定します。Ollama CLI チートシートでは、その変数と並んで serve、run、ps をカバーしています。
OLLAMA_CONTEXT_LENGTH=32768 OLLAMA_HOST=0.0.0.0:11434 OLLAMA_KEEP_ALIVE=-1 ollama serve
ollama pull qwen3.6:35b-a3b
Docker で実行される OpenHands 向けに、ガイドが示す設定は、カスタムモデル openai/qwen3.6:35b-a3b、ベース URL http://host.docker.internal:11434/v1、そして任意のプレースホルダー API キーです。Ollama と同じホスト上で実行される CLI は、host.docker.internal の代わりに http://127.0.0.1:11434/v1 を使用します。Linux 版 LM Studio や他のループバック専用サーバーは、コンテナ内から 127.0.0.1 では到達できません。ガイドが示す確認方法は、ローカルネットワークでの配信を有効にし、コンテナ内で host.docker.internal を curl することです。
ターミナルページでは、その画面を Ctrl+P を押してから Settings で開きます。保存されていた CLI プロファイルでは、ollama/ 形式のモデル ID と /v1 を含まないベース URL が使用されていました:
- カスタムモデル:
ollama/devstral-small-2:24b - ベース URL:
http://localhost:11434

その Devstral-Small-2 セッションは、何度も停止していました。エージェント LLM とコンデンスター LLM の両方に書き込まれたフィールドは以下の通りです:
"llm": {
"model": "ollama/devstral-small-2:24b",
"api_key": "aaa",
"base_url": "http://localhost:11434"
}
llama.cpp と vLLM
llama.cpp は、OpenAI 互換プレフィックスと /v1 ベース URL を使用し、これもまた両方の LLM オブジェクトに設定されました:
"model": "openai/Qwen3.5-35B-A3B-UD-IQ3_S.gguf""base_url": "http://localhost:8080/v1"
llama.cpp クイックスタートでカバーされているフラグを含むサーバーコマンドは、以下の通りです:
./llama.cpp/llama-server \
-m /mnt/ggufs/Qwen3.5-35B-A3B-UD-IQ3_S.gguf \
--ctx-size 70000 \
-ngl 40 \
--temp 0.6 \
--top-p 0.95 \
--top-k 20 \
--min-p 0.00
このサーバーに対して、CLI は Go による IndexNow クライアント(ソース、実行可能ファイル、および README)を完成させました。タスクテキストは create for me a cli tool in Go, that would call bing and other search engines' indexnow endpoints to notify about changes on my website でした。
ローカル LLM ガイドの、より新しい Qwen3.6 モデル向けの vLLM の例は、2 GPU サーブです。vLLM クイックスタートでは、vllm serve のフラグとメモリ不足(OOM)のチェックについて説明しています。ガイドに示される対応する OpenHands モデル文字列は openai/Qwen3.6-35B-A3B で、ベース URL は http://host.docker.internal:8000/v1、サーバー起動時に使用した --api-key(例では mykey)と同一です。
vllm serve Qwen/Qwen3.6-35B-A3B \
--host 0.0.0.0 --port 8000 \
--api-key mykey \
--tensor-parallel-size 2 \
--served-model-name Qwen3.6-35B-A3B \
--enable-prefix-caching
インタラクティブ制御
サブコマンドなしの openhands は、ターミナル UI を開きます。ターミナルページでは、以下の操作がリストされています:
| 操作 | アクション |
|---|---|
Ctrl+P |
コマンドパレット。設定、MCP ステータス、履歴、計画、テーマ、終了。 |
Esc |
実行中のエージェントを一時停止します。 |
Ctrl+Q または /exit |
CLI から離れます。 |
コマンドリファレンスからのスラッシュコマンド: /help、/new、/history、/confirm、/condense、/skills、/feedback、/exit。パレットの Settings 項目からのモデル変更は、再起動なしで適用されます。--exit-without-confirmation は終了ダイアログをスキップします。--exp はテキスト UI を選択しますが、その UI がすでにデフォルトであるため、互換性フラグとして文書化されています。
フラグとサブコマンド
openhands [OPTIONS] [COMMAND]
1.16.0 タグの argparsers/util.py に対して承認と環境フラグを検証した、コマンドリファレンスのグローバルオプション:
| オプション | 効果 |
|---|---|
-v, --version |
バージョンを表示して終了します。 |
-t, --task TEXT |
このタスクで会話を開始します。 |
-f, --file PATH |
ファイルから会話を開始します。 |
--resume [ID] |
その会話を再開します。ID なしの場合、最近の会話をリストします。 |
--last |
--resume と組み合わせて、最新の会話を再開します。 |
--headless |
UI なし。--task または --file が必須。常に承認します。 |
--json |
JSONL イベントストリーム。--headless が必須。 |
--always-approve, --yolo |
すべてのアクションを承認します。--llm-approve とは互換性がありません。 |
--llm-approve |
LLM セキュリティアナライザーが高リスクと判断したアクションのみ確認します。 |
--override-with-envs |
LLM_API_KEY、LLM_MODEL、LLM_BASE_URL をこのプロセスに適用します。 |
--exit-without-confirmation |
確認ダイアログなしで終了します。 |
--always-approve と --llm-approve は併用できません。デフォルトのインタラクティブモードでは、アクション実行前に確認します。
TUI では不十分となった場合に表示されるサブコマンド:
openhands serveは Docker でレガシー GUI を開始します。--mount-cwdは現在のディレクトリを/workspaceにマウントします。--gpuは nvidia-docker をオンにします。openhands webはブラウザで CLI を配信します。--hostのデフォルトは0.0.0.0、--portは12000、--debugはオフです。openhands acpは stdio で Agent Client Protocol を処理します。フラグ:--resume、--last、--always-approve、--llm-approve、--streaming。openhands cloud -t "task"はクラウド会話を開きます。--server-urlはhttps://app.all-hands.devをオーバーライドします。openhands loginとopenhands logoutはそのクラウドアカウントを管理します。--server-urlなしのlogoutは、保存されたすべてのサーバーからログアウトします。openhands mcpはサーバーを管理します:add、list、get、remove、enable、disable。addはhttp、sse、またはstdioの--transportが必要です。
1.16.0 README からの MCP サーバーの例:
openhands mcp list
openhands mcp add tavily --transport stdio \
npx -- -y mcp-remote "https://mcp.tavily.com/mcp/?tavilyApiKey=<your-api-key>"
openhands mcp enable tavily
openhands mcp disable tavily
使用例
インタラクティブタスク
openhands -t "Fix the bug in auth.py and add a regression test"
タスクファイル
cat > task.txt << 'EOF'
Refactor the database connection module.
Add unit tests and ensure the test suite passes.
EOF
openhands -f task.txt
ヘッドレスモード(JSONL 込み)
ヘッドレスモードには --task または --file が必須です。常に always-approve として実行され、--llm-approve はそこで拒否されます。作業ディレクトリは、エージェントが自由に修正可能であるとみなしてください。
openhands --headless -t "Add unit tests for auth.py and run them"
openhands --headless --json -t "Create a simple Flask app with healthcheck endpoint" > openhands-output.jsonl
ヘッドレスページでは、--json はイベントごとに 1 つの JSON オブジェクトとして、JSONL でストリーミングされるものと説明されています。
再開(Resume)
openhands --resume
openhands --resume --last
openhands --resume abc123def456
localhost にバインドしたブラウザ TUI
openhands web のデフォルトは 0.0.0.0:12000 で、ネットワークから到達可能です。CLI ドキュメントでは、そのインターフェースが CLI の全機能を持ちうると述べられているため、ローカル専用バインドの方がより安全なデフォルトになります:
openhands web --host 127.0.0.1 --port 12000
エディター向けの ACP
IDE ページの ACP クライアントには、Zed と JetBrains(ネイティブ)、Toad(ネイティブ)、VS Code(コミュニティ拡張機能)があります。エディターは openhands acp を起動し、stdio 経由で JSON-RPC 2.0 を使用して、CLI に保存された LLM 設定を用いて通信します。
openhands acp
openhands acp --llm-approve
openhands acp --resume --last
承認、終了コード、およびローカルモデルの結果
インタラクティブセッションでは、アクション実行前に確認を行います。/confirm はセッション内のそのポリシーを変更します。--always-approve(別名 --yolo)はすべてを承認します。--llm-approve は、セキュリティアナライザーが高リスクとスコアリングしたアクションのみ確認します。ヘッドレスモードでは、実行全体が always-approve です。
openhands serve --mount-cwd は、レガシー GUI コンテナ内で現在のディレクトリを /workspace にマウントします。Docker CLI のフローでは、同じ境界のために SANDBOX_VOLUMES が使用されます。
コマンドリファレンスの終了コード:
| コード | 意味 |
|---|---|
| 0 | 成功 |
| 1 | エラー、またはタスク失敗 |
| 2 | 無効な引数 |
Ollama 上の Devstral-Small-2 24B は、この CLI で何度も停止しました。

上記の llama.cpp セッション(70,000 トークンコンテキストの Qwen3.5-35B-A3B)は、IndexNow タスクを完了しました。同じマシン上で引き続き作業していたターミナルエージェントにとって、OpenCode クイックスタートが、インストールとプロバイダー設定の手引きになります。