ACPエージェント
Agent Client Protocol (ACP) セッションにより、OpenClawはACPバックエンドpluginを通じて外部のコーディングハーネス(たとえば Pi、Claude Code、Codex、Cursor、Copilot、OpenClaw ACP、OpenCode、Gemini CLI、およびその他の対応ACPXハーネス)を実行できます。 平文で「これをCodexで実行して」や「このスレッドでClaude Codeを起動して」とOpenClawに頼んだ場合、OpenClawはそのリクエストをACPランタイム(ネイティブのsub-agentランタイムではなく)へルーティングするべきです。各ACPセッション起動は background task として追跡されます。 CodexやClaude Codeを、既存のOpenClawチャネル会話に直接接続する外部MCPクライアントとして使いたい場合は、 ACPではなくopenclaw mcp serve を使用してください。
どのページを見ればよいですか?
近くにある次の3つの機能は混同しやすいです。| したいこと | 使用するもの | 補足 |
|---|---|---|
| Codex、Claude Code、Gemini CLI、または別の外部ハーネスをOpenClaw 経由で 実行する | このページ: ACPエージェント | チャットに紐づくセッション、/acp spawn、sessions_spawn({ runtime: "acp" })、background task、ランタイム制御 |
| OpenClaw Gatewayセッションを、エディターやクライアント向けのACPサーバー として 公開する | openclaw acp | ブリッジモード。IDE/クライアントがstdio/WebSocket経由でOpenClawとACPで通信します |
| ローカルAI CLIをテキスト専用のフォールバックモデルとして再利用する | CLI Backends | ACPではありません。OpenClawツールなし、ACP制御なし、ハーネスランタイムなし |
これはそのまま使えますか?
通常は使えます。- 新規インストールでは、同梱の
acpxランタイムpluginがデフォルトで有効になっています。 - 同梱の
acpxpluginは、pluginローカルに固定されたacpxバイナリを優先します。 - 起動時に、OpenClawはそのバイナリをprobeし、必要に応じて自己修復します。
- 準備状況をすばやく確認したいなら、まず
/acp doctorから始めてください。
- 対象ハーネス用アダプターが、そのハーネスの初回利用時に
npxでオンデマンド取得されることがあります。 - ベンダー認証は、そのハーネスのためにホスト上に存在している必要があります。
- ホストにnpm/ネットワークアクセスがない場合、初回のアダプター取得は、キャッシュを事前に温めるか別の方法でアダプターをインストールするまで失敗することがあります。
/acp spawn codex: OpenClawはacpxをブートストラップできる状態のはずですが、Codex ACPアダプターは初回取得が必要な場合があります。/acp spawn claude: Claude ACPアダプターについても同様で、さらにそのホスト上でClaude側認証も必要です。
実運用向けの簡易フロー
実用的な/acp の運用手順が欲しい場合はこれを使ってください。
- セッションを起動します:
/acp spawn codex --bind here/acp spawn codex --mode persistent --thread auto
- バインドされた会話またはスレッドで作業します(またはそのセッションキーを明示的に指定します)。
- ランタイム状態を確認します:
/acp status
- 必要に応じてランタイムオプションを調整します:
/acp model <provider/model>/acp permissions <profile>/acp timeout <seconds>
- コンテキストを置き換えずに、アクティブなセッションに指示を追加します:
/acp steer logging をもっと絞って続けて
- 作業を停止します:
/acp cancel(現在のターンを停止)、または/acp close(セッションを閉じてバインドを削除)
人向けクイックスタート
自然言語での依頼例:- 「このDiscordチャネルをCodexにバインドして。」
- 「ここでスレッド内に永続的なCodexセッションを開始して、集中させて。」
- 「これを単発のClaude Code ACPセッションとして実行して、結果を要約して。」
- 「このiMessageチャットをCodexにバインドして、以後のやり取りも同じworkspaceで続けて。」
- 「このタスクにはGemini CLIをスレッドで使って、その後のやり取りも同じスレッドで続けて。」
runtime: "acp"を選択する。- 要求されたハーネスターゲット(
agentId、たとえばcodex)を解決する。 - 現在の会話へのバインドが要求され、かつアクティブチャネルがそれをサポートしているなら、ACPセッションをその会話にバインドする。
- そうでなければ、スレッドバインドが要求され、かつ現在のチャネルがそれをサポートしているなら、ACPセッションをそのスレッドにバインドする。
- その後のバインド済みメッセージを、フォーカス解除・クローズ・期限切れになるまで同じACPセッションへルーティングする。
ACPとsub-agentの違い
外部ハーネスランタイムが必要ならACPを使います。OpenClawネイティブの委譲実行が必要ならsub-agentを使います。| 領域 | ACPセッション | sub-agent実行 |
|---|---|---|
| ランタイム | ACPバックエンドplugin(たとえば acpx) | OpenClawネイティブのsub-agentランタイム |
| セッションキー | agent:<agentId>:acp:<uuid> | agent:<agentId>:subagent:<uuid> |
| 主なコマンド | /acp ... | /subagents ... |
| 起動ツール | sessions_spawn with runtime:"acp" | sessions_spawn(デフォルトランタイム) |
ACPがClaude Codeを実行する仕組み
ACP経由のClaude Codeでは、スタックは次のとおりです。- OpenClaw ACPセッション制御プレーン
- 同梱の
acpxランタイムplugin - Claude ACPアダプター
- Claude側のランタイム/セッション機構
- ACP Claudeは、直接の
claude-cli/...フォールバックランタイムとは別物です。 - ACP Claudeは、ACP制御、セッション再開、background task追跡、および任意の会話/スレッドバインドを備えたハーネスセッションです。
claude-cli/...はテキスト専用のローカルCLIバックエンドです。CLI Backends を参照してください。
/acp spawn、バインド可能なセッション、ランタイム制御、または永続的なハーネス作業が欲しい: ACPを使う- 生のCLI経由で単純なローカルテキストフォールバックが欲しい: CLIバックエンドを使う
バインド済みセッション
現在の会話へのバインド
現在の会話を子スレッドを作らずに永続的なACP workspaceにしたい場合は、/acp spawn <harness> --bind here を使います。
挙動:
- OpenClawはチャネルトランスポート、認証、安全性、配信を引き続き管理します。
- 現在の会話は、起動されたACPセッションキーに固定されます。
- その会話での以後のメッセージは、同じACPセッションへルーティングされます。
/newと/resetは、同じバインド済みACPセッションをその場でリセットします。/acp closeはセッションを閉じ、現在の会話バインドを削除します。
--bind hereは同じチャット画面を維持します。Discordでは、現在のチャネルはそのまま現在のチャネルです。--bind hereは、新しい作業を起動する場合には新しいACPセッションを作成することがあります。バインドはそのセッションを現在の会話に接続します。--bind here自体はDiscordの子スレッドやTelegramトピックを作成しません。- ACPランタイムは、独自の作業ディレクトリ(
cwd)やバックエンド管理workspaceをディスク上に持つことができます。そのランタイムworkspaceはチャット画面とは別であり、新しいメッセージスレッドを意味するものではありません。 - 別のACPエージェントに起動し、
--cwdを渡さない場合、OpenClawはデフォルトで要求元ではなく 対象エージェントの workspaceを継承します。 - 継承されたworkspaceパスが存在しない場合(
ENOENT/ENOTDIR)、OpenClawは誤ったツリーを黙って再利用するのではなく、バックエンドのデフォルトcwdにフォールバックします。 - 継承されたworkspaceが存在していてもアクセスできない場合(たとえば
EACCES)、起動はcwdを捨てずに実際のアクセスエラーを返します。
- チャット画面: 人が会話を続ける場所(
Discord channel、Telegram topic、iMessage chat) - ACPセッション: OpenClawがルーティング先とする、永続的なCodex/Claude/Geminiランタイム状態
- 子スレッド/トピック:
--thread ...によってのみ作成される任意の追加メッセージ画面 - ランタイムworkspace: ハーネスが実行されるファイルシステム上の場所(
cwd、リポジトリcheckout、バックエンドworkspace)
/acp spawn codex --bind here: このチャットを維持し、Codex ACPセッションを起動または接続し、以後のメッセージをここからそこへルーティングする/acp spawn codex --thread auto: OpenClawが子スレッド/トピックを作成し、そこにACPセッションをバインドすることがあります/acp spawn codex --bind here --cwd /workspace/repo: 上と同じチャットバインドですが、Codexは/workspace/repoで実行されます
- 現在の会話バインド対応を公開しているチャット/メッセージチャネルでは、共有の会話バインド経路を通じて
--bind hereを使用できます。 - 独自のスレッド/トピック意味論を持つチャネルでも、同じ共有インターフェースの背後でチャネル固有の正規化を提供できます。
--bind hereは常に「現在の会話をその場でバインドする」を意味します。- 汎用の現在会話バインドは、共有のOpenClawバインドストアを使用し、通常のGateway再起動でも維持されます。
/acp spawnでは--bind hereと--thread ...は相互排他的です。- Discordでは、
--bind hereは現在のチャネルまたはスレッドをその場でバインドします。spawnAcpSessionsが必要なのは、--thread auto|here用にOpenClawが子スレッドを作成する必要がある場合だけです。 - アクティブチャネルが現在会話のACPバインドを公開していない場合、OpenClawは明確な未対応メッセージを返します。
resumeと「新しいセッション」についての問いはACPセッションの問いであり、チャネルの問いではありません。現在のチャット画面を変えずにランタイム状態を再利用または置き換えることができます。
スレッドにバインドされたセッション
チャネルアダプターでスレッドバインドが有効になっている場合、ACPセッションはスレッドにバインドできます。- OpenClawはスレッドを対象ACPセッションにバインドします。
- そのスレッドでの以後のメッセージは、バインド済みACPセッションへルーティングされます。
- ACPの出力は同じスレッドに返されます。
- フォーカス解除/クローズ/アーカイブ/アイドルタイムアウトまたは最大有効期間の期限切れでバインドは削除されます。
acp.enabled=trueacp.dispatch.enabledはデフォルトでオンです(ACP dispatchを一時停止するにはfalseに設定)- チャネルアダプターのACPスレッド起動フラグが有効(アダプター固有)
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
スレッド対応チャネル
- セッション/スレッドバインド機能を公開する任意のチャネルアダプター。
- 現在の組み込みサポート:
- Discordスレッド/チャネル
- Telegramトピック(group/supergroupのforum topicとDM topic)
- pluginチャネルも同じバインドインターフェースを通じてサポートを追加できます。
チャネル固有設定
非エフェメラルなワークフローでは、トップレベルのbindings[] エントリで永続的なACPバインドを設定します。
バインディングモデル
bindings[].type="acp"は永続的なACP会話バインドを示します。bindings[].matchは対象会話を識別します:- Discordチャネルまたはスレッド:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Telegram forum topic:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - BlueBubbles DM/group chat:
match.channel="bluebubbles"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"安定したgroupバインドにはchat_id:*またはchat_identifier:*を優先してください。 - iMessage DM/group chat:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"安定したgroupバインドにはchat_id:*を優先してください。
- Discordチャネルまたはスレッド:
bindings[].agentIdは所有するOpenClawエージェントIDです。- 任意のACP上書きは
bindings[].acpの下に置きます:mode(persistentまたはoneshot)labelcwdbackend
エージェントごとのランタイムデフォルト
エージェントごとに一度だけACPデフォルトを定義するにはagents.list[].runtime を使います。
agents.list[].runtime.type="acp"agents.list[].runtime.acp.agent(ハーネスID、たとえばcodexまたはclaude)agents.list[].runtime.acp.backendagents.list[].runtime.acp.modeagents.list[].runtime.acp.cwd
bindings[].acp.*agents.list[].runtime.acp.*- グローバルACPデフォルト(たとえば
acp.backend)
- OpenClawは、設定されたACPセッションが使用前に存在することを保証します。
- そのチャネルまたはトピック内のメッセージは、設定されたACPセッションへルーティングされます。
- バインド済み会話では、
/newと/resetは同じACPセッションキーをその場でリセットします。 - 一時的なランタイムバインド(たとえばスレッドfocusフローで作成されたもの)も、存在する場合は引き続き適用されます。
- 明示的な
cwdなしでエージェント間ACP起動を行うと、OpenClawはエージェント設定から対象エージェントworkspaceを継承します。 - 継承workspaceパスが存在しない場合はバックエンドデフォルトcwdにフォールバックし、実際のアクセス失敗は起動エラーとして表面化します。
ACPセッションを開始する(インターフェース)
sessions_spawn から
エージェントターンまたはツール呼び出しからACPセッションを開始するには runtime: "acp" を使います。
runtimeのデフォルトはsubagentなので、ACPセッションでは明示的にruntime: "acp"を設定してください。agentIdが省略された場合、設定されていればOpenClawはacp.defaultAgentを使います。mode: "session"は、永続的なバインド会話を維持するためにthread: trueを必要とします。
task(必須): ACPセッションへ送信される初期プロンプト。runtime(ACPでは必須):"acp"でなければなりません。agentId(任意): ACP対象ハーネスID。設定されていればacp.defaultAgentにフォールバックします。thread(任意、デフォルトfalse): サポートされる場合にスレッドバインドフローを要求します。mode(任意):run(単発)またはsession(永続)。- デフォルトは
run thread: trueでmode省略時は、ランタイム経路ごとにOpenClawが永続挙動をデフォルトにすることがありますmode: "session"はthread: trueを必要とします
- デフォルトは
cwd(任意): 要求するランタイム作業ディレクトリ(バックエンド/ランタイムポリシーで検証されます)。省略時、設定されていればACP起動は対象エージェントworkspaceを継承します。継承パスが存在しない場合はバックエンドデフォルトにフォールバックし、実際のアクセスエラーは返されます。label(任意): セッション/バナー文言で使われる運用者向けラベル。resumeSessionId(任意): 新規作成ではなく既存のACPセッションを再開します。エージェントはsession/load経由で会話履歴を再生します。runtime: "acp"が必要です。streamTo(任意):"parent"は、初期ACP実行の進捗サマリーをシステムイベントとして要求元セッションへストリームします。- 利用可能な場合、受理されたレスポンスには
streamLogPathが含まれ、セッション単位JSONLログ(<sessionId>.acp-stream.jsonl)を指します。完全な中継履歴を追跡できます。
- 利用可能な場合、受理されたレスポンスには
既存セッションを再開する
新しく開始する代わりに以前のACPセッションを続けるにはresumeSessionId を使います。エージェントは session/load 経由で会話履歴を再生するため、それまでの完全な文脈を持って再開できます。
- Codexセッションをラップトップからスマートフォンへ引き継ぐ — エージェントに中断地点から再開するよう伝える
- CLIで対話的に始めたコーディングセッションを、今度はエージェント経由でヘッドレスに継続する
- Gateway再起動やアイドルタイムアウトで中断した作業を再開する
resumeSessionIdにはruntime: "acp"が必要です。sub-agentランタイムで使うとエラーを返します。resumeSessionIdは上流ACP会話履歴を復元します。threadとmodeは新しく作成するOpenClawセッションに通常どおり適用されるため、mode: "session"には引き続きthread: trueが必要です。- 対象エージェントは
session/loadをサポートしている必要があります(CodexとClaude Codeはサポートします)。 - セッションIDが見つからない場合、起動は明確なエラーで失敗します。新規セッションへの黙示的フォールバックは行われません。
運用者向けスモークテスト
Gatewayデプロイ後、単にunit testが通るだけでなく、ACP起動が本当にエンドツーエンドで動作していることをすばやく確認したいときに使います。 推奨ゲート:- 対象ホスト上でデプロイ済みGatewayのバージョン/コミットを確認する。
- デプロイ済みソースに
src/gateway/sessions-patch.tsのACP系統受け入れ (subagent:* or acp:* sessions)が含まれていることを確認する。 - 実際のエージェント(たとえば
jpclawhq上のrazor(main))へ一時的なACPXブリッジセッションを開く。 - そのエージェントに、次の内容で
sessions_spawnを呼ぶよう依頼する:runtime: "acp"agentId: "codex"mode: "run"- task:
Reply with exactly LIVE-ACP-SPAWN-OK
- エージェントが次を報告することを確認する:
accepted=yes- 実在する
childSessionKey - バリデーターエラーなし
- 一時的なACPXブリッジセッションをクリーンアップする。
- このスモークテストは、意図的にスレッドにバインドされた永続ACPセッションを試しているのでない限り、
mode: "run"のままにしてください。 - 基本ゲートでは
streamTo: "parent"を必須にしないでください。その経路は要求元/セッション機能に依存するため、別の統合チェックです。 - スレッドにバインドされた
mode: "session"テストは、実際のDiscordスレッドやTelegramトピックからの第2段階の、より充実した統合パスとして扱ってください。
サンドボックス互換性
ACPセッションは現在、OpenClawサンドボックス内ではなくホストランタイム上で実行されます。 現在の制限:- 要求元セッションがサンドボックス化されている場合、
sessions_spawn({ runtime: "acp" })と/acp spawnの両方でACP起動はブロックされます。- エラー:
Sandboxed sessions cannot spawn ACP sessions because runtime="acp" runs on the host. Use runtime="subagent" from sandboxed sessions.
- エラー:
runtime: "acp"を使うsessions_spawnはsandbox: "require"をサポートしません。- エラー:
sessions_spawn sandbox="require" is unsupported for runtime="acp" because ACP sessions run outside the sandbox. Use runtime="subagent" or sandbox="inherit".
- エラー:
runtime: "subagent" を使用してください。
/acp コマンドから
必要に応じてチャットから明示的に運用制御するには /acp spawn を使います。
--mode persistent|oneshot--bind here|off--thread auto|here|off--cwd <absolute-path>--label <name>
セッション対象の解決
ほとんどの/acp アクションは、任意のセッション対象(session-key、session-id、または session-label)を受け付けます。
解決順序:
- 明示的な対象引数(または
/acp steer用の--session)- まずkeyを試す
- 次にUUID形のsession idを試す
- 次にlabelを試す
- 現在のスレッドバインド(この会話/スレッドがACPセッションにバインドされている場合)
- 現在の要求元セッションへのフォールバック
Unable to resolve session target: ...)。
起動バインドモード
/acp spawn は --bind here|off をサポートします。
| モード | 挙動 |
|---|---|
here | 現在アクティブな会話をその場でバインドします。アクティブな会話がない場合は失敗します。 |
off | 現在の会話バインドを作成しません。 |
--bind hereは「このチャネルまたはチャットをCodex対応にする」ための最も簡単な運用経路です。--bind hereは子スレッドを作成しません。--bind hereは、現在の会話バインド対応を公開しているチャネルでのみ利用可能です。--bindと--threadは同じ/acp spawn呼び出しでは併用できません。
起動スレッドモード
/acp spawn は --thread auto|here|off をサポートします。
| モード | 挙動 |
|---|---|
auto | アクティブなスレッド内ではそのスレッドをバインドします。スレッド外では、サポートされている場合に子スレッドを作成/バインドします。 |
here | 現在アクティブなスレッドを必須とします。スレッド内でない場合は失敗します。 |
off | バインドしません。セッションは未バインドで開始されます。 |
- スレッドバインドのない画面では、デフォルト挙動は実質的に
offです。 - スレッドにバインドされた起動にはチャネルポリシーサポートが必要です:
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
- 子スレッドを作らずに現在の会話を固定したい場合は
--bind hereを使ってください。
ACP制御
利用可能なコマンド群:/acp spawn/acp cancel/acp steer/acp close/acp status/acp set-mode/acp set/acp cwd/acp permissions/acp timeout/acp model/acp reset-options/acp sessions/acp doctor/acp install
/acp status は有効なランタイムオプションを表示し、利用可能な場合はランタイムレベルとバックエンドレベルの両方のセッション識別子を表示します。
一部の制御はバックエンド機能に依存します。バックエンドがその制御をサポートしない場合、OpenClawは明確な未対応制御エラーを返します。
ACPコマンド早見表
| コマンド | 役割 | 例 |
|---|---|---|
/acp spawn | ACPセッションを作成します。任意で現在バインドまたはスレッドバインド。 | /acp spawn codex --bind here --cwd /repo |
/acp cancel | 対象セッションの進行中ターンをキャンセルします。 | /acp cancel agent:codex:acp:<uuid> |
/acp steer | 実行中セッションに指示を送ります。 | /acp steer --session support inbox failing tests を優先 |
/acp close | セッションを閉じ、スレッド対象とのバインドを解除します。 | /acp close |
/acp status | バックエンド、モード、状態、ランタイムオプション、機能を表示します。 | /acp status |
/acp set-mode | 対象セッションのランタイムモードを設定します。 | /acp set-mode plan |
/acp set | 汎用ランタイム設定オプションを書き込みます。 | /acp set model openai/gpt-5.4 |
/acp cwd | ランタイム作業ディレクトリ上書きを設定します。 | /acp cwd /Users/user/Projects/repo |
/acp permissions | 承認ポリシープロファイルを設定します。 | /acp permissions strict |
/acp timeout | ランタイムタイムアウト(秒)を設定します。 | /acp timeout 120 |
/acp model | ランタイムモデル上書きを設定します。 | /acp model anthropic/claude-opus-4-6 |
/acp reset-options | セッションのランタイムオプション上書きを削除します。 | /acp reset-options |
/acp sessions | ストアから最近のACPセッションを一覧表示します。 | /acp sessions |
/acp doctor | バックエンドの健全性、機能、実行可能な修正を表示します。 | /acp doctor |
/acp install | 決定的なインストール手順と有効化手順を表示します。 | /acp install |
/acp sessions は、現在バインドされたセッションまたは要求元セッションのストアを読み取ります。session-key、session-id、または session-label トークンを受け付けるコマンドは、エージェントごとのカスタム session.store ルートを含め、Gatewayセッション検出を通じて対象を解決します。
ランタイムオプション対応
/acp には便利コマンドと汎用setterがあります。
等価な操作:
/acp model <id>はランタイム設定キーmodelに対応します。/acp permissions <profile>はランタイム設定キーapproval_policyに対応します。/acp timeout <seconds>はランタイム設定キーtimeoutに対応します。/acp cwd <path>はランタイムcwd上書きを直接更新します。/acp set <key> <value>は汎用経路です。- 特別扱い:
key=cwdはcwd上書き経路を使います。
- 特別扱い:
/acp reset-optionsは対象セッションのすべてのランタイム上書きを消去します。
acpxハーネスサポート(現在)
現在のacpx組み込みハーネス別名:claudecodexcopilotcursor(Cursor CLI:cursor-agent acp)droidgeminiiflowkilocodekimikiroopenclawopencodepiqwen
agentId にはこれらの値を優先してください。
ローカルのCursorインストールでACPがまだ agent acp として公開されている場合は、組み込みデフォルトを変更するのではなく、acpx設定で cursor エージェントコマンドを上書きしてください。
直接のacpx CLI利用では --agent <command> を介して任意のアダプターを対象にすることもできますが、その生のescape hatchはacpx CLI機能であり、通常のOpenClaw agentId 経路ではありません。
必須設定
コアACPベースライン:- Discord:
channels.discord.threadBindings.spawnAcpSessions=true
acpxバックエンドのplugin設定
新規インストールでは同梱のacpx ランタイムpluginがデフォルトで有効なため、ACPは通常、手動pluginインストールなしで動作します。
まず次を実行してください:
acpx を無効化した、plugins.allow / plugins.deny で拒否した、またはローカル開発checkoutへ切り替えたい場合は、明示的なplugin経路を使用します。
acpxコマンドとバージョン設定
デフォルトでは、同梱のacpxバックエンドplugin(acpx)はpluginローカルに固定されたバイナリを使用します。
- コマンドは、ACPX pluginパッケージ内のpluginローカル
node_modules/.bin/acpxをデフォルトにします。 - 期待バージョンはextensionの固定値をデフォルトにします。
- 起動時にACPバックエンドを即座に準備未完了として登録します。
- バックグラウンドensureジョブが
acpx --versionを検証します。 - pluginローカルバイナリが存在しないか不一致の場合、次を実行します:
npm install --omit=dev --no-save acpx@<pinned>を実行して再検証します。
commandは絶対パス、相対パス、またはコマンド名(acpx)を受け付けます。- 相対パスはOpenClaw workspaceディレクトリから解決されます。
expectedVersion: "any"は厳密なバージョン一致を無効化します。commandがカスタムバイナリ/パスを指す場合、pluginローカル自動インストールは無効になります。- バックエンド健全性チェックの実行中も、OpenClaw起動は非ブロッキングのままです。
依存関係の自動インストール
npm install -g openclaw でOpenClawをグローバルインストールすると、acpx
ランタイム依存関係(プラットフォーム固有バイナリ)はpostinstallフック経由で自動的にインストールされます。自動インストールに失敗しても、gatewayは通常どおり起動し、不足依存関係は openclaw acp doctor を通じて報告されます。
pluginツールMCPブリッジ
デフォルトでは、ACPXセッションはOpenClawのplugin登録ツールをACPハーネスへ公開しません。 CodexやClaude CodeなどのACPエージェントから、memory recall/storeのようなインストール済み OpenClaw pluginツールを呼び出せるようにしたい場合は、専用ブリッジを有効にしてください。openclaw-plugin-toolsという名前の組み込みMCPサーバーをACPXセッション ブートストラップに注入します。- インストール済みかつ有効なOpenClaw pluginsによってすでに登録されているpluginツールを公開します。
- この機能を明示的なデフォルトオフのままに保ちます。
- これによりACPハーネスのツール対象範囲が広がります。
- ACPエージェントがアクセスできるのは、gateway内ですでに有効なpluginツールだけです。
- これは、それらのpluginsをOpenClaw自身で実行させるのと同じ信頼境界として扱ってください。
- 有効化前にインストール済みpluginsを確認してください。
mcpServers は従来どおり動作します。組み込みplugin-toolsブリッジは
追加のオプトイン利便機能であり、汎用MCPサーバー設定の置き換えではありません。
権限設定
ACPセッションは非対話型で実行されます。ファイル書き込みやshell実行の権限プロンプトを承認または拒否するためのTTYはありません。acpx pluginは、権限処理を制御する2つの設定キーを提供します。 これらのACPXハーネス権限は、OpenClawのexec承認や、Claude CLI--permission-mode bypassPermissions のようなCLIバックエンドのベンダー回避フラグとは別物です。ACPXの approve-all はACPセッション用のハーネスレベル緊急解除スイッチです。
permissionMode
ハーネスエージェントがプロンプトなしで実行できる操作を制御します。
| 値 | 挙動 |
|---|---|
approve-all | すべてのファイル書き込みとshellコマンドを自動承認します。 |
approve-reads | 読み取りのみ自動承認します。書き込みとexecはプロンプトが必要です。 |
deny-all | すべての権限プロンプトを拒否します。 |
nonInteractivePermissions
権限プロンプトが表示されるはずだが、対話型TTYが利用できない場合(ACPセッションでは常にこれに該当)に何が起こるかを制御します。
| 値 | 挙動 |
|---|---|
fail | AcpRuntimeError でセッションを中止します。(デフォルト) |
deny | 権限を黙って拒否して継続します(穏当な劣化)。 |
設定
plugin設定経由で設定します。重要: OpenClawの現在のデフォルトはpermissionMode=approve-readsとnonInteractivePermissions=failです。非対話型ACPセッションでは、権限プロンプトを発生させる書き込みやexecはAcpRuntimeError: Permission prompt unavailable in non-interactive modeで失敗する可能性があります。 権限を制限したい場合は、セッションがクラッシュする代わりに穏当に劣化するようnonInteractivePermissionsをdenyに設定してください。
トラブルシューティング
| 症状 | 考えられる原因 | 修正 |
|---|---|---|
ACP runtime backend is not configured | バックエンドpluginが不足しているか無効です。 | バックエンドpluginをインストールして有効化し、その後 /acp doctor を実行してください。 |
ACP is disabled by policy (acp.enabled=false) | ACPがグローバルに無効です。 | acp.enabled=true を設定してください。 |
ACP dispatch is disabled by policy (acp.dispatch.enabled=false) | 通常スレッドメッセージからのdispatchが無効です。 | acp.dispatch.enabled=true を設定してください。 |
ACP agent "<id>" is not allowed by policy | エージェントがallowlistにありません。 | 許可済み agentId を使うか、acp.allowedAgents を更新してください。 |
Unable to resolve session target: ... | key/id/labelトークンが不正です。 | /acp sessions を実行して正確なkey/labelをコピーし、再試行してください。 |
--bind here requires running /acp spawn inside an active ... conversation | --bind here がアクティブなバインド可能会話なしで使われました。 | 対象チャット/チャネルへ移動して再試行するか、未バインド起動を使ってください。 |
Conversation bindings are unavailable for <channel>. | アダプターに現在会話のACPバインド機能がありません。 | サポートされている場合は /acp spawn ... --thread ... を使うか、トップレベル bindings[] を設定するか、対応チャネルへ移動してください。 |
--thread here requires running /acp spawn inside an active ... thread | --thread here がスレッドコンテキスト外で使われました。 | 対象スレッドへ移動するか、--thread auto/off を使ってください。 |
Only <user-id> can rebind this channel/conversation/thread. | 別ユーザーがアクティブなバインド対象を所有しています。 | 所有者として再バインドするか、別の会話またはスレッドを使ってください。 |
Thread bindings are unavailable for <channel>. | アダプターにスレッドバインド機能がありません。 | --thread off を使うか、対応アダプター/チャネルへ移動してください。 |
Sandboxed sessions cannot spawn ACP sessions ... | ACPランタイムはホスト側であり、要求元セッションがサンドボックス化されています。 | サンドボックス化セッションからは runtime="subagent" を使うか、非サンドボックス化セッションからACP起動を実行してください。 |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... | ACPランタイムに対して sandbox="require" が要求されました。 | 必須サンドボックスには runtime="subagent" を使うか、非サンドボックス化セッションから sandbox="inherit" でACPを使ってください。 |
| バインド済みセッションのACPメタデータが見つからない | ACPセッションメタデータが古いか削除されています。 | /acp spawn で再作成し、その後スレッドを再バインド/再focusしてください。 |
AcpRuntimeError: Permission prompt unavailable in non-interactive mode | permissionMode が非対話型ACPセッションで書き込み/execをブロックしています。 | plugins.entries.acpx.config.permissionMode を approve-all に設定し、gatewayを再起動してください。権限設定 を参照してください。 |
| ACPセッションが初期段階でほとんど出力なく失敗する | 権限プロンプトが permissionMode/nonInteractivePermissions によってブロックされています。 | AcpRuntimeError がないかgatewayログを確認してください。完全権限には permissionMode=approve-all、穏当な劣化には nonInteractivePermissions=deny を設定してください。 |
| 作業完了後もACPセッションが無期限に停止したままになる | ハーネスプロセスは終了したが、ACPセッションが完了を報告しませんでした。 | ps aux | grep acpx で監視し、古いプロセスを手動でkillしてください。 |