ACPエージェント
Agent Client Protocol (ACP)セッションにより、OpenClawはACPバックエンドプラグインを通じて外部コーディングハーネス(たとえばPi、Claude Code、Codex、Cursor、Copilot、OpenClaw ACP、OpenCode、Gemini CLI、その他のサポートされるACPXハーネス)を実行できます。 OpenClawに平文で「これをCodexで実行して」や「スレッドでClaude Codeを開始して」と依頼した場合、OpenClawはそのリクエストをACPランタイムへルーティングする必要があります(ネイティブのsub-agentランタイムではありません)。各ACPセッションspawnはbackground taskとして追跡されます。 CodexやClaude Codeを、既存のOpenClawチャンネル会話へ外部MCPクライアントとして直接接続したい場合は、 ACPではなくopenclaw mcp serveを使用してください。
どのページを見るべきか
混同しやすい、近い3つのサーフェスがあります:| したいこと… | 使用するもの | 補足 |
|---|---|---|
| OpenClawを_通して_ Codex、Claude Code、Gemini CLI、または別の外部ハーネスを実行する | このページ: ACPエージェント | チャットにバインドされたセッション、/acp spawn、sessions_spawn({ runtime: "acp" })、background task、ランタイム制御 |
| エディターやクライアント向けに、OpenClaw GatewayセッションをACPサーバーとして公開する | openclaw acp | ブリッジモード。IDE/クライアントがstdio/WebSocket経由でACPを使ってOpenClawと通信 |
| ローカルAI CLIをテキスト専用のフォールバックモデルとして再利用する | CLI Backends | ACPではありません。OpenClawツールなし、ACP制御なし、ハーネスランタイムなし |
これはそのままで動きますか
通常は、はい。- 新規インストールでは現在、バンドル済み
acpxランタイムプラグインがデフォルトで有効です。 - バンドル済み
acpxプラグインは、プラグインローカルに固定されたacpxバイナリを優先します。 - 起動時に、OpenClawはそのバイナリをprobeし、必要なら自己修復します。
- 準備状況をすばやく確認したい場合は、まず
/acp doctorから始めてください。
- 対象ハーネスアダプターが、そのハーネスを初めて使用するときに
npxでオンデマンド取得される場合があります。 - そのハーネス用のベンダー認証は、依然としてホスト上に存在している必要があります。
- ホストにnpm/ネットワークアクセスがない場合、初回実行時のアダプター取得は、キャッシュが事前に温められるか、別の方法でアダプターがインストールされるまで失敗することがあります。
/acp spawn codex: OpenClawはacpxのブートストラップ準備ができているはずですが、Codex ACPアダプターは初回実行時の取得がまだ必要な場合があります。/acp spawn claude: Claude ACPアダプターでも同様で、加えてそのホスト上のClaude側認証も必要です。
高速なオペレーターフロー
実用的な/acpランブックが欲しいときは、これを使ってください:
- セッションをspawnします:
/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 tighten logging and continue
- 作業を停止します:
/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バックエンドプラグイン(たとえばacpx) | OpenClawネイティブsub-agentランタイム |
| セッションキー | agent:<agentId>:acp:<uuid> | agent:<agentId>:subagent:<uuid> |
| 主なコマンド | /acp ... | /subagents ... |
| Spawnツール | sessions_spawn with runtime:"acp" | sessions_spawn(デフォルトランタイム) |
ACPがClaude Codeを実行する仕組み
ACP経由でClaude Codeを使う場合、スタックは次のとおりです:- OpenClaw ACPセッション制御プレーン
- バンドル済み
acpxランタイムプラグイン - Claude ACPアダプター
- Claude側ランタイム/セッション機構
- ACP Claudeは、ACP制御、セッションresume、background-task追跡、および任意の会話/スレッドバインディングを備えたハーネスセッションです。
- CLIバックエンドは、別のテキスト専用ローカルフォールバックランタイムです。CLI Backendsを参照してください。
/acp spawn、バインド可能なセッション、ランタイム制御、または永続的なハーネス作業が必要なら: ACPを使う- raw CLIを通じたシンプルなローカルテキストフォールバックが必要なら: CLI backendsを使う
バインド済みセッション
現在の会話へのバインド
子スレッドを作らずに、現在の会話を永続的なACP workspaceにしたい場合は/acp spawn <harness> --bind hereを使用します。
動作:
- OpenClawは、チャンネルトランスポート、認証、安全性、配信の所有を維持します。
- 現在の会話は、spawnされたACPセッションキーに固定されます。
- その会話内の追加入力メッセージは、同じACPセッションへルーティングされます。
/newと/resetは、同じバインド済みACPセッションをその場でリセットします。/acp closeはセッションを閉じ、現在の会話バインディングを削除します。
--bind hereは同じチャットサーフェスを維持します。Discordでは、現在のチャンネルはそのまま現在のチャンネルです。- 新しい作業をspawnしている場合、
--bind hereでも新しいACPセッションを作成できます。バインドはそのセッションを現在の会話へ接続します。 --bind hereは、それ自体では子DiscordスレッドやTelegramトピックを作成しません。- ACPランタイムは、それ自身の作業ディレクトリ(
cwd)やバックエンド管理workspaceをディスク上に持つことができます。そのランタイムworkspaceはチャットサーフェスとは別であり、新しいメッセージスレッドを意味するものではありません。 - 別のACPエージェントへspawnし、
--cwdを渡さない場合、OpenClawはデフォルトでリクエスターのものではなく対象エージェントのworkspaceを継承します。 - その継承されたworkspaceパスが存在しない場合(
ENOENT/ENOTDIR)、OpenClawは誤ったツリーを黙って再利用するのではなく、バックエンドのデフォルトcwdへフォールバックします。 - 継承されたworkspaceが存在していてもアクセスできない場合(たとえば
EACCES)、spawnはcwdを落とすのではなく実際のアクセスエラーを返します。
- チャットサーフェス: 人が会話を続ける場所(
Discord channel,Telegram topic,iMessage chat) - ACPセッション: OpenClawがルーティングする永続的なCodex/Claude/Geminiランタイム状態
- 子スレッド/トピック:
--thread ...によってのみ作成される任意の追加メッセージサーフェス - ランタイムworkspace: ハーネスが実行されるファイルシステム上の場所(
cwd、リポジトリチェックアウト、バックエンドworkspace)
/acp spawn codex --bind here: このチャットを維持し、Codex ACPセッションをspawnまたは接続し、今後のメッセージをここからそこへルーティングします/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出力は同じスレッドへ返送されます。
- unfocus/close/archive/idle-timeoutまたはmax-age期限切れでバインディングは削除されます。
acp.enabled=trueacp.dispatch.enabledはデフォルトでオンです(ACPディスパッチを一時停止するにはfalseに設定)- チャンネルアダプターのACPスレッドspawnフラグを有効化(アダプター固有)
- Discord:
channels.discord.threadBindings.spawnAcpSessions=true - Telegram:
channels.telegram.threadBindings.spawnAcpSessions=true
- Discord:
スレッド対応チャンネル
- セッション/スレッドバインディング機能を公開する任意のチャンネルアダプター。
- 現在の組み込みサポート:
- Discordスレッド/チャンネル
- Telegramトピック(グループ/スーパーグループのフォーラムトピック、およびDMトピック)
- プラグインチャンネルも同じバインディングインターフェースを通じてサポートを追加できます。
チャンネル固有の設定
非エフェメラルなワークフローでは、最上位のbindings[]エントリで永続的なACPバインディングを設定します。
バインディングモデル
bindings[].type="acp"は永続的なACP会話バインディングを示します。bindings[].matchは対象会話を識別します:- Discordチャンネルまたはスレッド:
match.channel="discord"+match.peer.id="<channelOrThreadId>" - Telegramフォーラムトピック:
match.channel="telegram"+match.peer.id="<chatId>:topic:<topicId>" - BlueBubbles DM/グループチャット:
match.channel="bluebubbles"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"安定したグループバインディングにはchat_id:*またはchat_identifier:*を推奨します。 - iMessage DM/グループチャット:
match.channel="imessage"+match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"安定したグループバインディングにはchat_id:*を推奨します。
- Discordチャンネルまたはスレッド:
bindings[].agentIdは所有するOpenClawエージェントidです。- 任意のACP上書きは
bindings[].acp配下に置きます:mode(persistentまたはoneshot)labelcwdbackend
エージェントごとのランタイムデフォルト
agents.list[].runtimeを使って、エージェントごとに一度ACPデフォルトを定義します:
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セッションキーをその場でリセットします。 - 一時的なランタイムバインディング(たとえばthread-focusフローで作成されたもの)は、存在する場合は引き続き適用されます。
- 明示的な
cwdなしのクロスエージェントACP spawnでは、OpenClawはエージェント設定から対象エージェントworkspaceを継承します。 - 継承されたworkspaceパスが存在しない場合は、バックエンドのデフォルトcwdへフォールバックします。存在するがアクセス失敗する場合は、spawnエラーとして表面化します。
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 spawnは設定されていれば対象エージェントworkspaceを継承します。継承パスが存在しない場合はバックエンドデフォルトへフォールバックし、実際のアクセスエラーはそのまま返されます。label(任意): セッション/バナーテキストで使用されるオペレーター向けラベル。resumeSessionId(任意): 新しいACPセッションを作成する代わりに既存のACPセッションをresumeします。エージェントはsession/load経由で会話履歴をreplayします。runtime: "acp"が必要です。streamTo(任意):"parent"は初期ACP実行の進捗サマリーをシステムイベントとしてリクエスターセッションへストリーミングします。- 利用可能な場合、受理されたレスポンスには
streamLogPathが含まれます。これはセッションスコープのJSONLログ(<sessionId>.acp-stream.jsonl)を指し、完全なリレー履歴をtailできます。
- 利用可能な場合、受理されたレスポンスには
既存セッションをresumeする
新規開始ではなく、以前のACPセッションを継続するにはresumeSessionIdを使います。エージェントはsession/load経由で会話履歴をreplayするため、以前の完全な文脈を引き継いで再開できます。
- ノートPC上のCodexセッションをスマートフォンへ引き継ぐ — エージェントに中断した場所から再開するよう依頼する
- CLIで対話的に開始したコーディングセッションを、今度はエージェント経由でヘッドレスに継続する
- Gateway再起動やidle timeoutで中断した作業を再開する
resumeSessionIdはruntime: "acp"を必要とします — sub-agentランタイムで使用するとエラーを返します。resumeSessionIdは上流ACPの会話履歴を復元します。threadとmodeは、作成する新しいOpenClawセッションに対して通常どおり適用されるため、mode: "session"は依然としてthread: trueを必要とします。- 対象エージェントは
session/loadをサポートしている必要があります(CodexとClaude Codeはサポートしています)。 - セッションIDが見つからない場合、spawnは明確なエラーで失敗します — 新しいセッションへの暗黙フォールバックはありません。
オペレータースモークテスト
Gatewayデプロイ後に、unitテストが通るだけでなく、ACP spawn が本当にエンドツーエンドで動作しているかをすばやくlive確認したい場合に使ってください。 推奨ゲート:- 対象ホスト上で、デプロイされたGatewayのバージョン/コミットを確認します。
- デプロイされたソースに、
src/gateway/sessions-patch.ts内のACP lineage acceptance (subagent:* or acp:* sessions)が含まれていることを確認します。 - liveエージェント(たとえば
jpclawhq上のrazor(main))への一時的なACPXブリッジセッションを開きます。 - そのエージェントに、以下で
sessions_spawnを呼ぶよう依頼します:runtime: "acp"agentId: "codex"mode: "run"- task:
Reply with exactly LIVE-ACP-SPAWN-OK
- エージェントが次を報告することを確認します:
accepted=yes- 実際の
childSessionKey - validatorエラーなし
- 一時的なACPXブリッジセッションをクリーンアップします。
- このスモークテストでは、意図的にスレッドバインドされた永続ACPセッションを検証していない限り、
mode: "run"を使ってください。 - 基本ゲートでは
streamTo: "parent"を必須にしないでください。この経路は リクエスター/セッション機能に依存し、別のintegrationチェックです。 - スレッドバインドされた
mode: "session"のテストは、実際のDiscordスレッドまたはTelegramトピックからの、より豊かな第2段階integration として扱ってください。
Sandbox互換性
ACPセッションは現在、OpenClaw sandbox内ではなくホストランタイム上で実行されます。 現在の制限:- リクエスターセッションがsandbox化されている場合、
sessions_spawn({ runtime: "acp" })と/acp spawnの両方でACP spawnはブロックされます。- エラー:
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: ...)。
Spawnバインドモード
/acp spawnは--bind here|offをサポートします。
| モード | 動作 |
|---|---|
here | 現在アクティブな会話をその場でバインドします。アクティブな会話がなければ失敗します。 |
off | 現在の会話バインディングを作成しません。 |
--bind hereは、「このチャンネルまたはチャットをCodex対応にする」ための最も単純なオペレーターパスです。--bind hereは子スレッドを作成しません。--bind hereは、現在の会話バインディングサポートを公開するチャンネルでのみ利用できます。- 同じ
/acp spawn呼び出しで--bindと--threadは併用できません。
Spawnスレッドモード
/acp spawnは--thread auto|here|offをサポートします。
| モード | 動作 |
|---|---|
auto | アクティブなスレッド内では: そのスレッドをバインドします。スレッド外では: サポートされる場合に子スレッドを作成してバインドします。 |
here | 現在アクティブなスレッドを必須とします。スレッド内でなければ失敗します。 |
off | バインディングなし。セッションは未バインドで開始されます。 |
- スレッドバインディングのないサーフェスでは、デフォルト動作は実質的に
offです。 - スレッドバインドspawnにはチャンネルポリシーのサポートが必要です:
- 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は明確なunsupported-controlエラーを返します。
ACPコマンドクックブック
| コマンド | 何をするか | 例 |
|---|---|---|
/acp spawn | ACPセッションを作成。任意で現在バインドまたはスレッドバインド。 | /acp spawn codex --bind here --cwd /repo |
/acp cancel | 対象セッションの進行中ターンをキャンセル。 | /acp cancel agent:codex:acp:<uuid> |
/acp steer | 実行中セッションへsteer指示を送信。 | /acp steer --session support inbox prioritize failing tests |
/acp close | セッションを閉じてスレッドターゲットをunbind。 | /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>で任意のアダプターも対象にできますが、このraw escape hatchはacpx CLIの機能であり(通常のOpenClaw agentId経路ではありません)。
必要な設定
コアACPベースライン:- Discord:
channels.discord.threadBindings.spawnAcpSessions=true
acpxバックエンド用プラグインセットアップ
新規インストールにはバンドル済みacpxランタイムプラグインがデフォルトで含まれているため、ACPは通常、
手動でプラグインをインストールしなくても動作します。
まずは次から始めてください:
acpxを無効にしている、plugins.allow / plugins.denyで拒否している、または
ローカルの開発チェックアウトへ切り替えたい場合は、明示的なプラグイン経路を使用してください:
acpxコマンドとバージョン設定
デフォルトでは、バンドル済みacpxバックエンドプラグイン(acpx)はプラグインローカルに固定されたバイナリを使用します:
- コマンドは、ACPXプラグインパッケージ内のプラグインローカル
node_modules/.bin/acpxがデフォルトです。 - 期待バージョンは、拡張機能のpinがデフォルトです。
- 起動時、ACPバックエンドは即座にnot-readyとして登録されます。
- バックグラウンドのensureジョブが
acpx --versionを検証します。 - プラグインローカルバイナリが存在しない、または不一致の場合、次を実行します:
npm install --omit=dev --no-save acpx@<pinned>して再検証します。
commandは絶対パス、相対パス、またはコマンド名(acpx)を受け付けます。- 相対パスはOpenClaw workspaceディレクトリから解決されます。
expectedVersion: "any"は厳密なバージョン一致を無効化します。commandがカスタムバイナリ/パスを指している場合、プラグインローカルの自動インストールは無効になります。- バックエンド健全性チェック実行中も、OpenClaw起動は非ブロッキングのままです。
自動依存関係インストール
npm install -g openclawでOpenClawをグローバルインストールすると、acpx
ランタイム依存関係(プラットフォーム固有バイナリ)はpostinstallフックにより自動インストールされます。自動インストールに失敗しても、gatewayは通常どおり起動し、
不足している依存関係はopenclaw acp doctorを通じて報告されます。
プラグインツールMCPブリッジ
デフォルトでは、ACPXセッションはOpenClawに登録されたプラグインツールをACPハーネスへ公開しません。 CodexやClaude CodeのようなACPエージェントに、memory recall/storeのような インストール済みOpenClawプラグインツールを呼ばせたい場合は、 専用ブリッジを有効にしてください:openclaw-plugin-toolsという名前の組み込みMCPサーバーをACPXセッション ブートストラップへ注入します。- インストールされ、有効になっているOpenClaw プラグインによってすでに登録されているプラグインツールを公開します。
- この機能を明示的かつデフォルトオフのままに保ちます。
- これはACPハーネスのツールサーフェスを拡張します。
- ACPエージェントは、gatewayですでに有効なプラグインツールにのみアクセスできます。
- これは、それらのプラグインを OpenClaw自体で実行させるのと同じ信頼境界として扱ってください。
- 有効化する前に、インストール済みプラグインを確認してください。
mcpServersは従来どおり引き続き動作します。組み込みのplugin-toolsブリッジは
追加のオプトイン利便機能であり、汎用MCPサーバー設定の置き換えではありません。
ランタイムタイムアウト設定
バンドル済みacpxプラグインは、埋め込みランタイムターンに対してデフォルトで120秒の
タイムアウトを使用します。これにより、Gemini CLIのような低速なハーネスでもACP起動と初期化を完了するのに十分な時間を確保できます。ホストで別の
ランタイム制限が必要な場合は上書きしてください:
権限設定
ACPセッションは非対話的に実行されます — ファイル書き込みやshell-exec権限プロンプトを承認または拒否するためのTTYはありません。acpxプラグインは、権限処理方法を制御する2つの設定キーを提供します: これらのACPXハーネス権限は、OpenClaw exec承認とは別物であり、Claude CLI--permission-mode bypassPermissionsのようなCLI-backendのベンダーバイパスフラグとも別物です。ACPXのapprove-allは、ACPセッション用のハーネスレベルのブレークグラススイッチです。
permissionMode
ハーネスエージェントが、プロンプトなしでどの操作を実行できるかを制御します。
| 値 | 動作 |
|---|---|
approve-all | すべてのファイル書き込みとshellコマンドを自動承認します。 |
approve-reads | 読み取りのみ自動承認します。書き込みとexecはプロンプトが必要です。 |
deny-all | すべての権限プロンプトを拒否します。 |
nonInteractivePermissions
権限プロンプトが表示されるべきだが、対話的TTYが利用できない場合(ACPセッションでは常にそうです)に何をするかを制御します。
| 値 | 動作 |
|---|---|
fail | AcpRuntimeErrorでセッションを中断します。(デフォルト) |
deny | 権限を黙って拒否して継続します(穏やかな劣化)。 |
設定
プラグイン設定経由で設定します:重要: OpenClawは現在、デフォルトでpermissionMode=approve-readsおよびnonInteractivePermissions=failです。 非対話的ACPセッションでは、権限プロンプトを引き起こす書き込みまたはexecは、AcpRuntimeError: Permission prompt unavailable in non-interactive modeで失敗する場合があります。 権限を制限する必要がある場合は、セッションがクラッシュする代わりに穏やかに劣化するよう、nonInteractivePermissionsをdenyに設定してください。
トラブルシューティング
| 症状 | 原因の可能性 | 修正 |
|---|---|---|
ACP runtime backend is not configured | バックエンドプラグインがないか無効です。 | バックエンドプラグインをインストールして有効にし、その後/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が、バインド可能なアクティブ会話なしで使用されました。 | 対象のチャット/チャンネルへ移動して再試行するか、未バインドspawnを使ってください。 |
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ランタイムはホスト側です。リクエスターセッションがsandbox化されています。 | sandbox化セッションではruntime="subagent"を使うか、sandbox化されていないセッションからACP spawnを実行してください。 |
sessions_spawn sandbox="require" is unsupported for runtime="acp" ... | ACPランタイムに対してsandbox="require"が要求されました。 | 必須sandbox化にはruntime="subagent"を使うか、sandbox化されていないセッションからsandbox="inherit"付きACPを使ってください。 |
| Missing ACP metadata for bound session | 古い/削除されたACPセッションメタデータ。 | /acp spawnで再作成し、その後スレッドを再バインド/再フォーカスしてください。 |
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してください。 |