Skip to main content
Agent Client Protocol (ACP) セッションを使用すると、 OpenClaw は ACP バックエンド Plugin を介して、外部コーディングハーネス(Claude Code、Cursor、Copilot、Droid、 OpenClaw ACP、OpenCode、Gemini CLI、およびその他の対応 ACPX ハーネス)を 実行できます。各起動は バックグラウンドタスクとして追跡されます。
ACP は外部ハーネス用の経路であり、デフォルトの Codex 経路ではありません。 ネイティブの Codex app-server Plugin は /codex ... コントロールと、エージェントターン用のデフォルトの openai/gpt-* 組み込みランタイムを所有します。一方、ACP は /acp ... コントロール と sessions_spawn({ runtime: "acp" }) セッションを所有します。Codex または Claude Code を外部 MCP クライアントとして既存の OpenClaw チャンネル会話に直接接続するには、ACP ではなく openclaw mcp serve を使用します。

どのページを選べばよいですか?

そのまま使えますか?

はい。公式 ACP ランタイム Plugin をインストールすると使用できます。
ソースチェックアウトでは、pnpm install の後にローカルの extensions/acpx ワークスペース Plugin を使用できます。準備状況を確認するには /acp doctor を実行します。 OpenClaw がエージェントに ACP 起動を案内するのは、ACP が実際に使用可能な場合のみです。 ACP が有効であること、ディスパッチが無効化されていないこと、現在のセッションが サンドボックスによってブロックされていないこと、ランタイムバックエンドが読み込まれて正常であることが 必要です。いずれかの条件を満たさない場合、エージェントが利用できないバックエンドを提案しないよう、 ACP Skills と sessions_spawn ACP ガイダンスは非表示のままになります。
  • plugins.allow が設定されている場合、それは制限付き Plugin インベントリであり、acpx必ず含める必要があります。含まれていない場合、インストール済み ACP バックエンドは意図的にブロックされます(/acp doctor は許可リストにエントリがないことを報告します)。
  • Codex ACP アダプターは acpx Plugin に同梱され、可能な場合はローカルで起動します。
  • Codex ACP は分離された CODEX_HOME で実行されます。OpenClaw は、信頼済みプロジェクトの信頼エントリと、安全なモデル/プロバイダーのルーティング設定(modelmodel_providermodel_reasoning_effortsandbox_mode、および安全な model_providers.<name> フィールド)をホストの Codex 設定からコピーします。認証、通知、フックはホスト設定にのみ保持されます。
  • その他の対象ハーネスアダプターは、初回使用時に npx を使用してオンデマンドで取得される場合があります。
  • そのハーネスのベンダー認証は、ホスト上にあらかじめ存在している必要があります。
  • ホストで npm またはネットワークにアクセスできない場合、キャッシュを事前にウォームアップするか、別の方法でアダプターをインストールするまで、初回実行時のアダプター取得は失敗します。
ACP は実際の外部ハーネスプロセスを起動します。OpenClaw はルーティング、 バックグラウンドタスクの状態、配信、バインディング、ポリシーを所有し、ハーネスは プロバイダーへのログイン、モデルカタログ、ファイルシステムの動作、ネイティブツールを所有します。OpenClaw に原因があると判断する前に、次を確認してください。
  • /acp doctor が、有効で正常なバックエンドを報告すること。
  • その許可リストが設定されている場合、対象 ID が acp.allowedAgents で許可されていること。
  • Gateway ホスト上でハーネスコマンドを起動できること。
  • そのハーネス用のプロバイダー認証が存在すること(claudecodexgeminiopencodedroid など)。
  • 選択したモデルがそのハーネスに存在すること。モデル ID はハーネス間で移植できません。
  • 要求した cwd が存在し、アクセス可能であること。または cwd を省略し、バックエンドのデフォルトを使用すること。
  • 権限モードが作業内容に合っていること。非対話型セッションではネイティブの権限プロンプトをクリックできないため、書き込みや実行を多用するコーディング処理では通常、ヘッドレスで処理を続行できる ACPX 権限プロファイルが必要です。
OpenClaw Plugin ツールと OpenClaw 組み込みツールは、デフォルトでは ACP ハーネスに公開されません。ハーネスがこれらのツールを直接呼び出す必要がある場合にのみ、 ACP エージェント - セットアップで明示的な MCP ブリッジを有効にしてください。

対応ハーネス対象

acpx バックエンドでは、次の ID を /acp spawn <id> または sessions_spawn({ runtime: "acp", agentId: "<id>" }) の対象として使用します。 pi(pi-acp)も acpx バックエンドに登録されていますが、上記の他のものと 同じ意味でのコーディングハーネスではありません。 カスタム acpx エージェントエイリアスは acpx 自体で設定できますが、OpenClaw ポリシーはディスパッチ前に、引き続き acp.allowedAgentsagents.entries.*.runtime.acp.agent のマッピングを確認します。

運用者向け手順書

チャットからの簡単な /acp の流れ:
1

起動

/acp spawn claude --bind here/acp spawn gemini --mode persistent --thread auto、または明示的な /acp spawn codex --bind here
2

作業

バインドされた会話またはスレッドで続行します(またはセッションキーを 明示的に指定します)。
3

状態を確認

/acp status
4

調整

/acp model <provider/model>/acp permissions <profile>/acp timeout <seconds>
5

方向修正

コンテキストを置き換えずに:/acp steer tighten logging and continue
6

停止

/acp cancel(現在のターン)または /acp close(セッション+バインディング)。
  • 生成処理では、ACP ランタイムセッションを作成または再開し、OpenClaw セッションストアに ACP メタデータを記録します。また、実行が親によって所有されている場合は、バックグラウンドタスクを作成することがあります。
  • 親所有の ACP セッションは、ランタイムセッションが永続的であってもバックグラウンド処理として扱われます。完了通知とサーフェス間の配信は、通常のユーザー向けチャットセッションのようには動作せず、親タスクの通知機構を通じて行われます。
  • タスクのメンテナンスでは、終了済みまたは孤立した親所有のワンショット ACP セッションを閉じます。永続 ACP セッションは、有効な会話バインディングが残っている間は保持されます。有効なバインディングがない古い永続セッションは、所有タスクの完了後やタスクレコードの消失後に暗黙的に再開されないよう閉じられます。
  • バインドされた後続メッセージは、バインディングが閉じられる、フォーカスが解除される、リセットされる、または期限切れになるまで、ACP セッションへ直接送られます。
  • Gateway コマンドはローカルに留まります。/acp .../status/unfocus が、バインドされた ACP ハーネスへ通常のプロンプトテキストとして送信されることはありません。
  • cancel は、バックエンドがキャンセルをサポートしている場合にアクティブなターンを中止します。バインディングやセッションメタデータは削除しません。
  • close は、OpenClaw から見た ACP セッションを終了し、バインディングを削除します。ハーネスが再開をサポートしている場合、ハーネス側では独自のアップストリーム履歴を保持することがあります。
  • acpx Plugin は、close 後に OpenClaw 所有のラッパーおよびアダプタープロセスツリーをクリーンアップし、Gateway 起動時に古い OpenClaw 所有の ACPX 孤立プロセスを回収します。
  • アイドル状態のランタイムワーカーは、組み込みのアイドル期間を過ぎるとクリーンアップ対象になります。保存されたセッションメタデータは、/acp sessions で引き続き利用できます。
有効な場合に ネイティブ Codex Plugin へルーティングされるべき 自然言語トリガー:
  • 「この Discord チャンネルを Codex にバインドしてください。」
  • 「このチャットを Codex スレッド <id> に接続してください。」
  • 「Codex スレッドを表示してから、これをバインドしてください。」
ネイティブ Codex の会話バインディングが、チャット制御のデフォルト経路です。 OpenClaw の動的ツールは引き続き OpenClaw を通じて実行されますが、シェルや apply-patch などの Codex ネイティブツールは Codex 内で実行されます。Codex ネイティブのツールイベントに対して、OpenClaw はターンごとのネイティブフック リレーを挿入します。これにより、Plugin フックは before_tool_call をブロックし、 after_tool_call を監視し、Codex の PermissionRequest イベントを OpenClaw の 承認経由でルーティングできます。Codex の Stop フックは OpenClaw の before_agent_finalize に中継され、そこで Plugin は Codex が回答を 確定する前に、モデルをもう一度実行するよう要求できます。このリレーは意図的に 保守的な動作を維持します。Codex ネイティブツールの引数を変更したり、Codex スレッドレコードを書き換えたりすることはありません。ACP ランタイム/セッション モデルを使用したい場合にのみ、明示的な ACP を使用してください。組み込み Codex のサポート境界については、 Codex ハーネス v1 サポート契約 を参照してください。
  • 従来の Codex モデル参照 - doctor によって修復される、従来の Codex OAuth/サブスクリプションモデル経路。
  • openai/* - OpenAI エージェントターン用のネイティブ Codex app-server 組み込みランタイム。
  • /codex ... - ネイティブ Codex の会話制御。
  • /acp ... または runtime: "acp" - 明示的な ACP/acpx 制御。
ACP ランタイムへルーティングされるべきトリガー:
  • 「これをワンショットの Claude Code ACP セッションとして実行し、結果を要約してください。」
  • 「このタスクにはスレッド内で Gemini CLI を使用し、その後のやり取りも同じスレッドで続けてください。」
  • 「バックグラウンドスレッドで ACP 経由の Codex を実行してください。」
OpenClaw は runtime: "acp" を選択し、ハーネス agentId を解決し、 サポートされている場合は現在の会話またはスレッドにバインドして、閉じられるか 期限切れになるまで後続メッセージをそのセッションへルーティングします。Codex が この経路を使用するのは、ACP/acpx が明示されている場合、または要求された操作で ネイティブ Codex Plugin を利用できない場合のみです。sessions_spawn では、ACP が有効であり、リクエスト元がサンドボックス化されて おらず、ACP ランタイムバックエンドが読み込まれている場合にのみ runtime: "acp" が提示されます。acp.dispatch.enabled=false は ACP スレッドの自動 ディスパッチを一時停止しますが、明示的な sessions_spawn({ runtime: "acp" }) 呼び出しを非表示に したりブロックしたりはしません。対象には codexclaudedroidgeminiopencode などの ACP ハーネス ID を指定します。agents_list の通常の OpenClaw 設定エージェント ID は、その エントリに agents.entries.*.runtime.type="acp" が明示的に設定されていない限り渡さないでください。 それ以外の場合は、デフォルトのサブエージェントランタイムを使用します。OpenClaw エージェントに runtime.type="acp" が設定されている場合、OpenClaw は基盤となる ハーネス ID として runtime.acp.agent を使用します。

ACP とサブエージェントの比較

外部ハーネスランタイムを使用する場合は ACP を使用します。codex Plugin が有効な場合、Codex の会話バインディング/制御には ネイティブ Codex app-server を使用します。OpenClaw ネイティブの委任実行を使用する場合は、 サブエージェントを使用します。 サブエージェントも参照してください。

ACP が Claude Code を実行する仕組み

ACP 経由の Claude Code では、スタックは次のとおりです。
  1. OpenClaw ACP セッション制御プレーン。
  2. 公式 @openclaw/acpx ランタイム Plugin。
  3. Claude ACP アダプター。
  4. Claude 側のランタイム/セッション機構。
ACP Claude は、ACP 制御、セッション再開、バックグラウンドタスク追跡、および オプションの会話/スレッドバインディングを備えた ハーネスセッションです。 CLI バックエンドは、独立したテキスト専用のローカルフォールバックランタイムです。 CLI バックエンドを参照してください。 運用者向けの実用的な原則は次のとおりです。
  • /acp spawn、バインド可能なセッション、ランタイム制御、または永続的なハーネス処理が必要ですか? ACP を使用します。
  • 生の CLI を通じた単純なローカルテキストフォールバックが必要ですか? CLI バックエンドを使用します。

バインドされたセッション

基本概念

  • チャットサーフェス - ユーザーが会話を続ける場所(Discord チャンネル、Telegram トピック、iMessage チャット)。
  • ACP セッション - OpenClaw がルーティングする、永続的な Codex/Claude/Gemini ランタイム状態。
  • 子スレッド/トピック - --thread ... によってのみ作成される、オプションの追加メッセージングサーフェス。
  • ランタイムワークスペース - ハーネスが実行されるファイルシステム上の場所(cwd、リポジトリのチェックアウト、バックエンドワークスペース)。チャットサーフェスとは独立しています。

現在の会話へのバインド

/acp spawn <harness> --bind here は、現在の会話を生成された ACP セッションに固定します。 子スレッドは作成されず、同じチャットサーフェスを使用します。OpenClaw は引き続き トランスポート、認証、安全性、配信を管理します。その会話内の後続メッセージは 同じセッションへルーティングされます。/new/reset は セッションをその場でリセットし、/acp close はバインディングを削除します。 例:
  • --bind here--thread ... は同時に指定できません。
  • --bind here は、現在の会話へのバインディング対応を提示するチャンネルでのみ機能します。それ以外の場合、OpenClaw は未対応であることを示す明確なメッセージを返します。バインディングは Gateway の再起動後も保持されます。
  • Discord では、spawnSessions が制御するのは --thread auto|here の子スレッド作成であり、--bind here ではありません。
  • --cwd を指定せずに別の ACP エージェントを生成すると、OpenClaw はデフォルトで 対象エージェントの ワークスペースを継承します。継承対象のパス(ENOENTENOTDIR)が存在しない場合はバックエンドのデフォルトにフォールバックします。それ以外のアクセスエラー(例:EACCES)は生成エラーとして提示されます。
  • Gateway 管理コマンドは、バインドされた会話内でもローカルに留まります。通常の後続テキストがバインドされた ACP セッションへルーティングされる場合でも、/acp ... コマンドは OpenClaw が処理します。また、そのサーフェスでコマンド処理が有効な場合、/status/unfocus も常にローカルに留まります。
チャンネルアダプターでスレッドバインディングが有効な場合:
  • OpenClaw はスレッドを対象 ACP セッションにバインドします。
  • そのスレッド内の後続メッセージは、バインドされた ACP セッションへルーティングされます。
  • ACP の出力は同じスレッドへ返されます。
  • フォーカス解除、クローズ、アーカイブ、アイドルタイムアウト、または最大存続期間の満了により、バインディングが削除されます。
  • /acp close/acp cancel/acp status/status/unfocus は Gateway コマンドであり、ACP ハーネスへのプロンプトではありません。
スレッドにバインドされた ACP に必要な機能フラグ:
  • acp.enabled=true
  • acp.dispatch.enabled はデフォルトで有効です(ACP スレッドの自動ディスパッチを一時停止するには false を設定します。明示的な sessions_spawn({ runtime: "acp" }) 呼び出しは引き続き機能します)。
  • チャンネルアダプターによるスレッドセッション生成が有効(デフォルト:true):
    • Discord/Telegram:session.threadBindings.spawnSessions=true
スレッドバインディングの対応状況はアダプターごとに異なります。アクティブな チャンネルアダプターがスレッドバインディングをサポートしていない場合、 OpenClaw は未対応または利用不可であることを示す明確なメッセージを返します。
  • セッション/スレッドバインディング機能を公開するすべてのチャンネルアダプター。
  • 現在の組み込み対応:Discord のスレッド/チャンネル、Telegram のトピック(グループ/スーパーグループのフォーラムトピックおよび DM トピック)。
  • Plugin チャンネルは、同じバインディングインターフェースを通じて対応を追加できます。

永続チャンネルバインディング

一時的ではないワークフローでは、トップレベルの bindings[] エントリに 永続 ACP バインディングを設定します。

バインディングモデル

"acp"
永続 ACP 会話バインディングであることを示します。
object
対象の会話を識別します。チャンネルごとの形式:
  • Discord チャンネル/スレッド: match.channel="discord" + match.peer.id="<channelOrThreadId>"
  • Slack チャンネル/DM: match.channel="slack" + match.peer.id="<channelId|channel:<channelId>|#<channelId>|userId|user:<userId>|slack:<userId>|<@userId>>"。安定した Slack ID を優先してください。チャンネルバインディングは、そのチャンネルのスレッド内の返信にも一致します。
  • Telegram フォーラムトピック: match.channel="telegram" + match.peer.id="<chatId>:topic:<topicId>"
  • WhatsApp DM/グループ: match.channel="whatsapp" + match.peer.id="<E.164|group JID>"。ダイレクトチャットには +15555550123 のような E.164 番号を、グループには 120363424282127706@g.us のような WhatsApp グループ JID を使用します。
  • iMessage DM/グループ: match.channel="imessage" + match.peer.id="<handle|chat_id:*|chat_guid:*|chat_identifier:*>"。安定したグループバインディングには chat_id:* を優先してください。
string
所有する OpenClaw エージェント ID。
"persistent" | "oneshot"
オプションの ACP オーバーライド。
string
オプションのオペレーター向けラベル。
string
オプションのランタイム作業ディレクトリ。
string
オプションのバックエンドオーバーライド。

エージェントごとのランタイムデフォルト

agents.entries.*.runtime を使用して、エージェントごとに ACP デフォルトを一度定義します。
  • agents.entries.*.runtime.type="acp"
  • agents.entries.*.runtime.acp.agent(ハーネス ID。例: codex または claude
  • agents.entries.*.runtime.acp.backend
  • agents.entries.*.runtime.acp.mode
  • agents.entries.*.runtime.acp.cwd
ACP バインド済みセッションのオーバーライド優先順位:
  1. bindings[].acp.*
  2. agents.entries.*.runtime.acp.*
  3. グローバル ACP デフォルト(例: acp.backend

動作

  • OpenClaw は、チャンネル固有の受け入れ判定後かつ使用前に、設定された ACP セッションが存在することを保証します。
  • そのチャンネル、トピック、またはチャット内のメッセージは、設定された ACP セッションにルーティングされます。
  • 設定された ACP バインディングは、そのセッションルートを所有します。チャンネルのブロードキャストファンアウトは、一致したバインディングに設定された ACP セッションを置き換えません。
  • バインド済みの会話では、/new/reset は、同じ ACP セッションキーをその場でリセットします。
  • 一時的なランタイムバインディング(たとえば、スレッドフォーカスフローによって作成されたもの)は、存在する場合には引き続き適用されます。
  • 明示的な cwd を指定しないエージェント間 ACP スポーンでは、OpenClaw はエージェント設定から対象エージェントのワークスペースを継承します。
  • 継承されたワークスペースパスが存在しない場合は、バックエンドのデフォルト cwd にフォールバックします。存在するパスへのアクセス失敗は、スポーンエラーとして表示されます。

ACP セッションを開始する

ACP セッションを開始する方法は 2 つあります。
エージェントターンまたはツール呼び出しから ACP セッションを開始するには、 runtime: "acp" を使用します。
runtime のデフォルトは subagent なので、ACP セッションでは runtime: "acp" を明示的に設定してください。agentId を省略すると、 設定されている場合は OpenClaw が acp.defaultAgent を使用します。 mode: "session" で永続的なバインド済み会話を維持するには、 thread: true が必要です。

sessions_spawn のパラメーター

string
必須
ACP セッションに送信される最初のプロンプト。
"acp"
必須
ACP セッションでは "acp" である必要があります。
string
ACP 対象ハーネス ID。acp.defaultAgent が設定されている場合は、これにフォールバックします。
boolean
デフォルト:"false"
サポートされている場合にスレッドバインディングフローを要求します。
"run" | "session"
デフォルト:"run"
"run" はワンショット、"session" は永続的です。thread: truemode が省略された場合、OpenClaw はランタイムパスに応じて デフォルトで永続的な動作を使用することがあります。mode: "session" には thread: true が必要です。
string
要求するランタイム作業ディレクトリ(バックエンド/ランタイムポリシーによって検証されます)。 省略した場合、ACP スポーンは、設定されていれば対象エージェントのワークスペースを継承します。 継承されたパスが存在しない場合はバックエンドのデフォルトにフォールバックし、 実際のアクセスエラーは返されます。
string
セッション/バナーテキストで使用されるオペレーター向けラベル。
string
新しい ACP セッションを作成する代わりに、既存のセッションを再開します。エージェントは session/load を介して会話履歴を再生します。 runtime: "acp" が必要です。
"parent"
"parent" は、最初の ACP 実行の進捗概要をシステムイベントとして要求元 セッションにストリーミングします。OpenClaw は完全なリレー履歴を子エージェントの SQLite 状態に記録し、子セッションとともに削除します。streaming.progress.commentary=false でない限り、 親の進捗ストリームにはデフォルトでアシスタントのコメントと ACP ステータス進捗が表示されます。 ストリームモードが設定されていない場合、Discord もデフォルトで親プレビューに 進捗モードを使用します。ステータス進捗では引き続き acp.stream.tagVisibility が適用されるため、 plan のようなタグは明示的に有効にしない限り非表示のままです。
ACP sessions_spawn の実行では、デフォルトの子ターン上限として agents.defaults.subagents.runTimeoutSeconds を使用します。このツールは呼び出しごとの タイムアウトオーバーライドを受け付けません(runTimeoutSeconds/timeoutSeconds は、 デフォルトを設定するよう求めるエラーで拒否されます)。
string
ACP 子セッションの明示的なモデルオーバーライド。Codex ACP スポーンでは、 openai/gpt-5.4 のような OpenAI 参照を、session/new の前に Codex ACP 起動設定へ正規化します。openai/gpt-5.4/high のようなスラッシュ形式では、 Codex ACP の推論強度も設定されます。省略した場合、sessions_spawn({ runtime: "acp" }) は、 設定されていれば既存のサブエージェントモデルデフォルト(agents.defaults.subagents.model または agents.entries.*.subagents.model)を使用します。それ以外の場合は、ACP ハーネス独自の デフォルトモデルを使用させます。その他のハーネスは ACP models を通知し、 session/set_model をサポートする必要があります。そうでなければ、OpenClaw/acpx は 対象エージェントのデフォルトへ暗黙的にフォールバックせず、明確に失敗します。
string
明示的な思考/推論強度。Codex ACP では、minimal は低い強度にマッピングされ、 low/medium/high/xhigh はそのままマッピングされ、 off では推論強度の起動オーバーライドが省略されます。省略した場合、 ACP スポーンは既存のサブエージェントの思考デフォルトと、選択されたモデルの モデルごとの agents.defaults.models["provider/model"].params.thinking を使用します。

スポーンのバインドモードとスレッドモード

注意:
  • --bind here は、「このチャンネルまたはチャットを Codex バックエンドにする」ための最も簡単なオペレーターパスです。
  • --bind here は子スレッドを作成しません。
  • --bind here は、現在の会話へのバインディングをサポートするチャンネルでのみ使用できます。
  • --bind--thread は、同じ /acp spawn 呼び出しで併用できません。

配信モデル

ACP セッションは、対話型ワークスペースまたは親が所有するバックグラウンド作業の いずれかです。配信経路はその形態によって異なります。
対話型セッションは、表示されているチャットサーフェス上で会話を継続することを目的としています。
  • /acp spawn ... --bind here は、現在の会話を ACP セッションにバインドします。
  • /acp spawn ... --thread ... は、チャンネルのスレッド/トピックを ACP セッションにバインドします。
  • 永続的に設定された bindings[].type="acp" は、一致する会話を同じ ACP セッションにルーティングします。
バインド済み会話の後続メッセージは ACP セッションに直接ルーティングされ、 ACP の出力は同じチャンネル/スレッド/トピックに返されます。OpenClaw がハーネスに送信する内容:
  • 通常の制限付きフォローアップはプロンプトテキストとして送信され、ハーネス/バックエンドが対応している場合にのみ添付ファイルも送信されます。
  • /acp 管理コマンドとローカル Gateway コマンドは、ACP ディスパッチの前にインターセプトされます。
  • ランタイムが生成する完了イベントは、ターゲットごとに具体化されます。OpenClaw エージェントは OpenClaw の内部ランタイムコンテキストエンベロープを受け取り、外部 ACP ハーネスは子の結果と指示を含むプレーンなプロンプトを受け取ります。生の <<<BEGIN_OPENCLAW_INTERNAL_CONTEXT>>> エンベロープを外部ハーネスに送信したり、ACP ユーザートランスクリプトのテキストとして永続化したりしてはなりません。
  • ACP トランスクリプトのエントリには、ユーザーに表示されるトリガーテキストまたはプレーンな完了プロンプトが使用されます。内部イベントメタデータは可能な限り OpenClaw 内で構造化されたまま維持され、ユーザーが作成したチャットコンテンツとして扱われません。
別のエージェント実行によって生成されたワンショット ACP セッションは、 サブエージェントと同様のバックグラウンドの子です。
  • 親は sessions_spawn({ runtime: "acp", mode: "run" }) を使用して作業を依頼します。
  • 子は独自の ACP ハーネスセッションで実行されます。
  • 子のターンはネイティブのサブエージェント生成と同じバックグラウンドレーンで実行されるため、低速な ACP ハーネスが無関係なメインセッションの作業をブロックすることはありません。
  • 完了はタスク完了通知パスを通じて親に報告されます。OpenClaw は内部完了メタデータをプレーンな ACP プロンプトに変換してから外部ハーネスへ送信するため、ハーネスに OpenClaw 専用のランタイムコンテキストマーカーが表示されることはありません。
  • ユーザー向けの応答が有用な場合、親は子の結果を通常のアシスタントの口調で書き直します。
このパスを、親と子の間のピアツーピアチャットとして扱わないで ください。子にはすでに親へ返す完了チャネルがあります。
sessions_send は生成後に別のセッションをターゲットにできます。通常のピア セッションでは、OpenClaw はメッセージを注入した後に エージェント間(A2A)フォローアップパスを使用します。
  • ターゲットセッションからの応答を待ちます。
  • 必要に応じて、依頼元とターゲットの間で制限された回数のフォローアップターンをやり取りさせます。
  • ターゲットに通知メッセージの生成を依頼します。
  • その通知を表示中のチャネルまたはスレッドに配信します。
この A2A パスは、送信者が表示可能なフォローアップを必要とする ピア送信のフォールバックです。たとえば広範な tools.sessions.visibility 設定の下で、無関係なセッションが ACP ターゲットを参照して メッセージを送信できる場合にも有効なままです。OpenClaw が A2A フォローアップをスキップするのは、依頼元が 自身の親所有ワンショット ACP 子の親である場合のみです。この場合、 タスク完了に加えて A2A を実行すると、子の結果で親を起動し、 親の応答を子へ送り返して、親子間のエコーループを 作成する可能性があります。完了パスがすでに結果を処理するため、 この所有された子の場合、sessions_send の結果は delivery.status="skipped" を報告します。
新規に開始する代わりに、resumeSessionId を使用して以前の ACP セッションを 続行します。エージェントは session/load を介して会話履歴を再生するため、 以前の完全なコンテキストを引き継いで再開します。
一般的なユースケース:
  • Codex セッションをノートパソコンからスマートフォンへ引き継ぎ、エージェントに中断したところから再開するよう指示します。
  • CLI で対話的に開始したコーディングセッションを、今度はエージェントを通じてヘッドレスで続行します。
  • Gateway の再起動またはアイドルタイムアウトによって中断された作業を再開します。
注意事項:
  • resumeSessionIdruntime: "acp" の場合にのみ適用されます。デフォルトのサブエージェントランタイムは、この ACP 専用フィールドを無視します。
  • streamToruntime: "acp" の場合にのみ適用されます。デフォルトのサブエージェントランタイムは、この ACP 専用フィールドを無視します。
  • resumeSessionId はホストローカルの ACP/ハーネス再開 ID であり、OpenClaw チャネルセッションキーではありません。OpenClaw はディスパッチ前に ACP 生成ポリシーとターゲットエージェントポリシーを引き続き確認しますが、その上流 ID を読み込むための認可は ACP バックエンドまたはハーネスが所有します。
  • resumeSessionId は上流 ACP の会話履歴を復元します。threadmode は新しく作成する OpenClaw セッションにも通常どおり適用されるため、mode: "session" には引き続き thread: true が必要です。
  • ターゲットエージェントは session/load をサポートしている必要があります(Codex と Claude Code はサポートしています)。
  • セッション ID が見つからない場合、生成は明確なエラーで失敗します。新しいセッションへの暗黙的なフォールバックはありません。
Gateway のデプロイ後は、単体テストを信頼するだけでなく、 ライブのエンドツーエンドチェックを実行します。
  1. ターゲットホストにデプロイされた Gateway のバージョンとコミットを確認します。
  2. 稼働中のエージェントへの一時的な ACPX ブリッジセッションを開きます。
  3. そのエージェントに、runtime: "acp"agentId: "codex"mode: "run"、およびタスク Reply with exactly LIVE-ACP-SPAWN-OK を指定して sessions_spawn を呼び出すよう依頼します。
  4. accepted=yes、実際の childSessionKey、およびバリデーターエラーがないことを確認します。
  5. 一時的なブリッジセッションをクリーンアップします。
ゲートは mode: "run" に維持し、streamTo: "parent" はスキップします。 スレッドにバインドされた mode: "session" とストリームリレーパスは、 より高度な別個の統合パスです。

サンドボックスの互換性

ACP セッションは現在、OpenClaw サンドボックス内ではなく、 ホストランタイム上で実行されます。
セキュリティ境界:
  • 外部ハーネスは、独自の CLI 権限と選択された cwd に従って読み書きできます。
  • OpenClaw のサンドボックスポリシーは、ACP ハーネスの実行をラップしません
  • OpenClaw は、ACP の機能ゲート、許可されたエージェント、セッション所有権、チャネルバインディング、および Gateway 配信ポリシーを引き続き適用します。
  • サンドボックスが適用される OpenClaw ネイティブの作業には runtime: "subagent" を使用します。
現在の制限事項:
  • 依頼元セッションがサンドボックス化されている場合、sessions_spawn({ runtime: "acp" })/acp spawn の両方で ACP の生成がブロックされます。
  • runtime: "acp" を指定した sessions_spawnsandbox: "require" をサポートしていません。

セッションターゲットの解決

ほとんどの /acp アクションは、任意のセッションターゲット(session-keysession-id、または session-label)を受け入れます。 解決順序:
  1. 明示的なターゲット引数(または /acp steer--session
    • 最初にキーを試行
    • 次に UUID 形式のセッション ID
    • 次にラベル
  2. 現在のスレッドバインディング(この会話/スレッドが ACP セッションにバインドされている場合)。
  3. 現在の依頼元セッションへのフォールバック。
現在の会話のバインディングとスレッドのバインディングは、どちらもステップ 2 に関与します。 ターゲットを解決できない場合、OpenClaw は明確なエラー (Unable to resolve session target: ...)を返します。

ACP コントロール

ランタイムコントロール(spawncancelsteerclosestatusset-modesetcwdpermissionstimeoutmodel、および reset-options)には、 外部チャネルからの所有者 ID と、内部 Gateway クライアントからの operator.admin が必要です。認可された所有者以外の送信者も、sessionsdoctorinstall、および help は引き続き使用できます。所有者以外の送信者の場合、/acp sessions は現在バインドされているセッションまたは依頼元セッションのみを一覧表示します。所有者 ID と operator.admin クライアントは、最近のすべてのセッションを参照できます。 /acp status は、有効なランタイムオプションに加えて、ランタイムレベルおよび バックエンドレベルのセッション識別子を表示します。バックエンドに機能がない場合、 サポートされていないコントロールのエラーが明確に表示されます。ターゲットトークン (session-keysession-id、または session-label)を受け入れるコマンドは、エージェントごとのカスタム session.store ルートを含む、 Gateway のセッション検出を通じてそれらを解決します。/acp sessions は ターゲットトークンを受け入れません。

ランタイムオプションのマッピング

/acp には便利なコマンドと汎用セッターがあります。同等の操作:

acpx ハーネス、Plugin のセットアップ、権限

acpx ハーネスの設定(Claude Code / Codex / Gemini CLI のエイリアス)、 plugin-tools および OpenClaw-tools MCP ブリッジ、ACP 権限モードについては、 ACP エージェントのセットアップを参照してください。

トラブルシューティング

Command blocked by PreToolUse hook: Native hook relay unavailable は、 ACP/acpx ではなくネイティブ Codex フックリレーに属します。バインドされた Codex チャットでは、 /new または /reset で新しいセッションを開始してください。一度は機能しても、 次のネイティブツール呼び出しで再び発生する場合は、/new を繰り返すのではなく、 Codex app-server または OpenClaw Gateway を再起動してください。 Codex ハーネスのトラブルシューティングを参照してください。

関連項目