メインコンテンツへスキップ

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 spawnsessions_spawn({ runtime: "acp" })、background task、ランタイム制御
エディターやクライアント向けに、OpenClaw GatewayセッションをACPサーバーとして公開するopenclaw acpブリッジモード。IDE/クライアントがstdio/WebSocket経由でACPを使ってOpenClawと通信
ローカルAI CLIをテキスト専用のフォールバックモデルとして再利用するCLI BackendsACPではありません。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ランブックが欲しいときは、これを使ってください:
  1. セッションをspawnします:
    • /acp spawn codex --bind here
    • /acp spawn codex --mode persistent --thread auto
  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(セッションを閉じてバインディングを削除)

人間向けクイックスタート

自然な依頼の例:
  • 「このDiscordチャンネルをCodexにバインドして。」
  • 「ここでスレッド内に永続的なCodexセッションを開始して、集中させて。」
  • 「これをワンショットのClaude Code ACPセッションとして実行して、結果を要約して。」
  • 「このiMessageチャットをCodexにバインドして、追加入力も同じworkspaceで続けて。」
  • 「このタスクにはGemini CLIをスレッドで使って、その後の追加入力も同じスレッドで続けて。」
OpenClawが行うべきこと:
  1. runtime: "acp"を選択します。
  2. 要求されたハーネスターゲット(agentId、たとえばcodex)を解決します。
  3. 現在の会話へのバインドが要求されており、アクティブなチャンネルがそれをサポートしている場合は、ACPセッションをその会話にバインドします。
  4. それ以外で、スレッドバインドが要求されており、現在のチャンネルがそれをサポートしている場合は、ACPセッションをそのスレッドにバインドします。
  5. フォーカス解除/クローズ/期限切れになるまで、その後のバインド済みメッセージを同じ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(デフォルトランタイム)
関連: Sub-agents

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

ACP経由でClaude Codeを使う場合、スタックは次のとおりです:
  1. OpenClaw ACPセッション制御プレーン
  2. バンドル済みacpxランタイムプラグイン
  3. Claude ACPアダプター
  4. 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期限切れでバインディングは削除されます。
スレッドバインディングサポートはアダプター依存です。アクティブなチャンネルアダプターがスレッドバインディングをサポートしていない場合、OpenClawは明確な未対応/利用不可メッセージを返します。 スレッドバインドACPに必要な機能フラグ:
  • acp.enabled=true
  • acp.dispatch.enabledはデフォルトでオンです(ACPディスパッチを一時停止するにはfalseに設定)
  • チャンネルアダプターのACPスレッドspawnフラグを有効化(アダプター固有)
    • Discord: channels.discord.threadBindings.spawnAcpSessions=true
    • Telegram: channels.telegram.threadBindings.spawnAcpSessions=true

スレッド対応チャンネル

  • セッション/スレッドバインディング機能を公開する任意のチャンネルアダプター。
  • 現在の組み込みサポート:
    • 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:*を推奨します。
  • bindings[].agentIdは所有するOpenClawエージェントidです。
  • 任意のACP上書きはbindings[].acp配下に置きます:
    • modepersistentまたはoneshot
    • label
    • cwd
    • backend

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

agents.list[].runtimeを使って、エージェントごとに一度ACPデフォルトを定義します:
  • agents.list[].runtime.type="acp"
  • agents.list[].runtime.acp.agent(ハーネスid、たとえばcodexまたはclaude
  • agents.list[].runtime.acp.backend
  • agents.list[].runtime.acp.mode
  • agents.list[].runtime.acp.cwd
ACPバインド済みセッションの上書き優先順位:
  1. bindings[].acp.*
  2. agents.list[].runtime.acp.*
  3. グローバルACPデフォルト(たとえばacp.backend
例:
{
  agents: {
    list: [
      {
        id: "codex",
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
      },
      {
        id: "claude",
        runtime: {
          type: "acp",
          acp: { agent: "claude", backend: "acpx", mode: "persistent" },
        },
      },
    ],
  },
  bindings: [
    {
      type: "acp",
      agentId: "codex",
      match: {
        channel: "discord",
        accountId: "default",
        peer: { kind: "channel", id: "222222222222222222" },
      },
      acp: { label: "codex-main" },
    },
    {
      type: "acp",
      agentId: "claude",
      match: {
        channel: "telegram",
        accountId: "default",
        peer: { kind: "group", id: "-1001234567890:topic:42" },
      },
      acp: { cwd: "/workspace/repo-b" },
    },
    {
      type: "route",
      agentId: "main",
      match: { channel: "discord", accountId: "default" },
    },
    {
      type: "route",
      agentId: "main",
      match: { channel: "telegram", accountId: "default" },
    },
  ],
  channels: {
    discord: {
      guilds: {
        "111111111111111111": {
          channels: {
            "222222222222222222": { requireMention: false },
          },
        },
      },
    },
    telegram: {
      groups: {
        "-1001234567890": {
          topics: { "42": { requireMention: false } },
        },
      },
    },
  },
}
動作:
  • OpenClawは、使用前に設定されたACPセッションが存在することを保証します。
  • そのチャンネルまたはトピック内のメッセージは、設定されたACPセッションへルーティングされます。
  • バインド済み会話では、/new/resetは同じACPセッションキーをその場でリセットします。
  • 一時的なランタイムバインディング(たとえばthread-focusフローで作成されたもの)は、存在する場合は引き続き適用されます。
  • 明示的なcwdなしのクロスエージェントACP spawnでは、OpenClawはエージェント設定から対象エージェントworkspaceを継承します。
  • 継承されたworkspaceパスが存在しない場合は、バックエンドのデフォルトcwdへフォールバックします。存在するがアクセス失敗する場合は、spawnエラーとして表面化します。

ACPセッションを開始する(インターフェース)

sessions_spawnから

エージェントターンまたはツール呼び出しからACPセッションを開始するにはruntime: "acp"を使用します。
{
  "task": "Open the repo and summarize failing tests",
  "runtime": "acp",
  "agentId": "codex",
  "thread": true,
  "mode": "session"
}
補足:
  • 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するため、以前の完全な文脈を引き継いで再開できます。
{
  "task": "Continue where we left off — fix the remaining test failures",
  "runtime": "acp",
  "agentId": "codex",
  "resumeSessionId": "<previous-session-id>"
}
よくある用途:
  • ノートPC上のCodexセッションをスマートフォンへ引き継ぐ — エージェントに中断した場所から再開するよう依頼する
  • CLIで対話的に開始したコーディングセッションを、今度はエージェント経由でヘッドレスに継続する
  • Gateway再起動やidle timeoutで中断した作業を再開する
補足:
  • resumeSessionIdruntime: "acp"を必要とします — sub-agentランタイムで使用するとエラーを返します。
  • resumeSessionIdは上流ACPの会話履歴を復元します。threadmodeは、作成する新しいOpenClawセッションに対して通常どおり適用されるため、mode: "session"は依然としてthread: trueを必要とします。
  • 対象エージェントはsession/loadをサポートしている必要があります(CodexとClaude Codeはサポートしています)。
  • セッションIDが見つからない場合、spawnは明確なエラーで失敗します — 新しいセッションへの暗黙フォールバックはありません。

オペレータースモークテスト

Gatewayデプロイ後に、unitテストが通るだけでなく、ACP spawn が本当にエンドツーエンドで動作しているかをすばやくlive確認したい場合に使ってください。 推奨ゲート:
  1. 対象ホスト上で、デプロイされたGatewayのバージョン/コミットを確認します。
  2. デプロイされたソースに、src/gateway/sessions-patch.ts内のACP lineage acceptance (subagent:* or acp:* sessions)が含まれていることを確認します。
  3. liveエージェント(たとえば jpclawhq上のrazor(main))への一時的なACPXブリッジセッションを開きます。
  4. そのエージェントに、以下でsessions_spawnを呼ぶよう依頼します:
    • runtime: "acp"
    • agentId: "codex"
    • mode: "run"
    • task: Reply with exactly LIVE-ACP-SPAWN-OK
  5. エージェントが次を報告することを確認します:
    • accepted=yes
    • 実際のchildSessionKey
    • validatorエラーなし
  6. 一時的なACPXブリッジセッションをクリーンアップします。
liveエージェントへのプロンプト例:
Use the sessions_spawn tool now with runtime: "acp", agentId: "codex", and mode: "run".
Set the task to: "Reply with exactly LIVE-ACP-SPAWN-OK".
Then report only: accepted=<yes/no>; childSessionKey=<value or none>; error=<exact text or none>.
補足:
  • このスモークテストでは、意図的にスレッドバインドされた永続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_spawnsandbox: "require"をサポートしません。
    • エラー: sessions_spawn sandbox="require" is unsupported for runtime="acp" because ACP sessions run outside the sandbox. Use runtime="subagent" or sandbox="inherit".
sandboxで強制された実行が必要な場合はruntime: "subagent"を使用してください。

/acpコマンドから

チャットから明示的なオペレーター制御が必要な場合は/acp spawnを使います。
/acp spawn codex --mode persistent --thread auto
/acp spawn codex --mode oneshot --thread off
/acp spawn codex --bind here
/acp spawn codex --thread here
主なフラグ:
  • --mode persistent|oneshot
  • --bind here|off
  • --thread auto|here|off
  • --cwd <absolute-path>
  • --label <name>
Slash Commandsを参照してください。

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

ほとんどの/acpアクションは、任意のセッションターゲット(session-keysession-id、またはsession-label)を受け付けます。 解決順序:
  1. 明示的なターゲット引数(または/acp steer--session
    • まずkeyを試す
    • 次にUUID形式のsession id
    • 次にlabel
  2. 現在のスレッドバインディング(この会話/スレッドがACPセッションにバインドされている場合)
  3. 現在のリクエスターセッションへのフォールバック
現在の会話バインディングとスレッドバインディングの両方が、手順2に参加します。 ターゲットが解決できない場合、OpenClawは明確なエラーを返します(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
  • 子スレッドを作らずに現在の会話を固定したい場合は--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 spawnACPセッションを作成。任意で現在バインドまたはスレッドバインド。/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-keysession-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組み込みハーネスエイリアス:
  • claude
  • codex
  • copilot
  • cursor(Cursor CLI: cursor-agent acp
  • droid
  • gemini
  • iflow
  • kilocode
  • kimi
  • kiro
  • openclaw
  • opencode
  • pi
  • qwen
OpenClawがacpxバックエンドを使う場合、acpx設定でカスタムagentエイリアスを定義していない限り、agentIdにはこれらの値を優先して使用してください。 ローカルのCursorインストールがまだACPをagent acpとして公開している場合は、組み込みデフォルトを変更するのではなく、acpx設定内でcursorエージェントコマンドを上書きしてください。 直接のacpx CLI使用では、--agent <command>で任意のアダプターも対象にできますが、このraw escape hatchはacpx CLIの機能であり(通常のOpenClaw agentId経路ではありません)。

必要な設定

コアACPベースライン:
{
  acp: {
    enabled: true,
    // 任意。デフォルトはtrue。/acp controlsを維持したままACP dispatchを一時停止するにはfalseに設定します。
    dispatch: { enabled: true },
    backend: "acpx",
    defaultAgent: "codex",
    allowedAgents: [
      "claude",
      "codex",
      "copilot",
      "cursor",
      "droid",
      "gemini",
      "iflow",
      "kilocode",
      "kimi",
      "kiro",
      "openclaw",
      "opencode",
      "pi",
      "qwen",
    ],
    maxConcurrentSessions: 8,
    stream: {
      coalesceIdleMs: 300,
      maxChunkChars: 1200,
    },
    runtime: {
      ttlMinutes: 120,
    },
  },
}
スレッドバインディング設定はチャンネルアダプター固有です。Discordの例:
{
  session: {
    threadBindings: {
      enabled: true,
      idleHours: 24,
      maxAgeHours: 0,
    },
  },
  channels: {
    discord: {
      threadBindings: {
        enabled: true,
        spawnAcpSessions: true,
      },
    },
  },
}
スレッドバインドACP spawnが動作しない場合は、まずアダプター機能フラグを確認してください:
  • Discord: channels.discord.threadBindings.spawnAcpSessions=true
現在の会話バインドでは子スレッド作成は不要です。必要なのは、アクティブな会話コンテキストと、ACP会話バインディングを公開するチャンネルアダプターです。 Configuration Referenceを参照してください。

acpxバックエンド用プラグインセットアップ

新規インストールにはバンドル済みacpxランタイムプラグインがデフォルトで含まれているため、ACPは通常、 手動でプラグインをインストールしなくても動作します。 まずは次から始めてください:
/acp doctor
acpxを無効にしている、plugins.allow / plugins.denyで拒否している、または ローカルの開発チェックアウトへ切り替えたい場合は、明示的なプラグイン経路を使用してください:
openclaw plugins install acpx
openclaw config set plugins.entries.acpx.enabled true
開発中のローカルworkspaceインストール:
openclaw plugins install ./path/to/local/acpx-plugin
その後、バックエンド健全性を確認します:
/acp doctor

acpxコマンドとバージョン設定

デフォルトでは、バンドル済みacpxバックエンドプラグイン(acpx)はプラグインローカルに固定されたバイナリを使用します:
  1. コマンドは、ACPXプラグインパッケージ内のプラグインローカルnode_modules/.bin/acpxがデフォルトです。
  2. 期待バージョンは、拡張機能のpinがデフォルトです。
  3. 起動時、ACPバックエンドは即座にnot-readyとして登録されます。
  4. バックグラウンドのensureジョブがacpx --versionを検証します。
  5. プラグインローカルバイナリが存在しない、または不一致の場合、次を実行します: npm install --omit=dev --no-save acpx@<pinned>して再検証します。
プラグイン設定でcommand/versionを上書きできます:
{
  "plugins": {
    "entries": {
      "acpx": {
        "enabled": true,
        "config": {
          "command": "../acpx/dist/cli.js",
          "expectedVersion": "any"
        }
      }
    }
  }
}
補足:
  • commandは絶対パス、相対パス、またはコマンド名(acpx)を受け付けます。
  • 相対パスはOpenClaw workspaceディレクトリから解決されます。
  • expectedVersion: "any"は厳密なバージョン一致を無効化します。
  • commandがカスタムバイナリ/パスを指している場合、プラグインローカルの自動インストールは無効になります。
  • バックエンド健全性チェック実行中も、OpenClaw起動は非ブロッキングのままです。
Pluginsを参照してください。

自動依存関係インストール

npm install -g openclawでOpenClawをグローバルインストールすると、acpx ランタイム依存関係(プラットフォーム固有バイナリ)はpostinstallフックにより自動インストールされます。自動インストールに失敗しても、gatewayは通常どおり起動し、 不足している依存関係はopenclaw acp doctorを通じて報告されます。

プラグインツールMCPブリッジ

デフォルトでは、ACPXセッションはOpenClawに登録されたプラグインツールをACPハーネスへ公開しません CodexやClaude CodeのようなACPエージェントに、memory recall/storeのような インストール済みOpenClawプラグインツールを呼ばせたい場合は、 専用ブリッジを有効にしてください:
openclaw config set plugins.entries.acpx.config.pluginToolsMcpBridge true
これが行うこと:
  • openclaw-plugin-toolsという名前の組み込みMCPサーバーをACPXセッション ブートストラップへ注入します。
  • インストールされ、有効になっているOpenClaw プラグインによってすでに登録されているプラグインツールを公開します。
  • この機能を明示的かつデフォルトオフのままに保ちます。
セキュリティと信頼に関する補足:
  • これはACPハーネスのツールサーフェスを拡張します。
  • ACPエージェントは、gatewayですでに有効なプラグインツールにのみアクセスできます。
  • これは、それらのプラグインを OpenClaw自体で実行させるのと同じ信頼境界として扱ってください。
  • 有効化する前に、インストール済みプラグインを確認してください。
カスタムmcpServersは従来どおり引き続き動作します。組み込みのplugin-toolsブリッジは 追加のオプトイン利便機能であり、汎用MCPサーバー設定の置き換えではありません。

ランタイムタイムアウト設定

バンドル済みacpxプラグインは、埋め込みランタイムターンに対してデフォルトで120秒の タイムアウトを使用します。これにより、Gemini CLIのような低速なハーネスでもACP起動と初期化を完了するのに十分な時間を確保できます。ホストで別の ランタイム制限が必要な場合は上書きしてください:
openclaw config set plugins.entries.acpx.config.timeoutSeconds 180
この値を変更した後はgatewayを再起動してください。

権限設定

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セッションでは常にそうです)に何をするかを制御します。
動作
failAcpRuntimeErrorでセッションを中断します。(デフォルト)
deny権限を黙って拒否して継続します(穏やかな劣化)。

設定

プラグイン設定経由で設定します:
openclaw config set plugins.entries.acpx.config.permissionMode approve-all
openclaw config set plugins.entries.acpx.config.nonInteractivePermissions fail
これらの値を変更した後はgatewayを再起動してください。
重要: OpenClawは現在、デフォルトでpermissionMode=approve-readsおよびnonInteractivePermissions=failです。 非対話的ACPセッションでは、権限プロンプトを引き起こす書き込みまたはexecは、AcpRuntimeError: Permission prompt unavailable in non-interactive modeで失敗する場合があります。 権限を制限する必要がある場合は、セッションがクラッシュする代わりに穏やかに劣化するよう、nonInteractivePermissionsdenyに設定してください。

トラブルシューティング

症状原因の可能性修正
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 modepermissionModeが非対話的ACPセッションで書き込み/execをブロックしています。plugins.entries.acpx.config.permissionModeapprove-allに設定し、gatewayを再起動してください。権限設定を参照してください。
ACPセッションがほとんど出力なく早期に失敗する権限プロンプトがpermissionMode/nonInteractivePermissionsでブロックされています。AcpRuntimeErrorについてgatewayログを確認してください。完全な権限が必要ならpermissionMode=approve-allを、穏やかな劣化が必要ならnonInteractivePermissions=denyを設定してください。
ACPセッションが作業完了後も無期限に停止したままになるハーネスプロセスは終了したが、ACPセッションが完了を報告しませんでした。ps aux | grep acpxで監視し、古いプロセスを手動でkillしてください。