diff --git a/docs/zh-CN/tools/acp-agents.md b/docs/zh-CN/tools/acp-agents.md
index 865eb8c15..23f6f32ec 100644
--- a/docs/zh-CN/tools/acp-agents.md
+++ b/docs/zh-CN/tools/acp-agents.md
@@ -1,132 +1,107 @@
---
read_when:
- - 通过 ACP 运行编码 harness
+ - 通过 ACP 运行编码 harnesses
- 在消息渠道上设置绑定到会话的 ACP 会话
- - 将消息渠道会话绑定到持久化 ACP 会话
- - 排查 ACP 后端、插件接线或补全交付问题
+ - 将消息渠道中的会话绑定到持久化的 ACP 会话
+ - 排查 ACP 后端、插件连接或完成结果投递问题
- 在聊天中使用 /acp 命令
sidebarTitle: ACP agents
-summary: 通过 ACP 后端运行外部编码 harness(Claude Code、Cursor、Gemini CLI、显式 Codex ACP、OpenClaw ACP、OpenCode)
+summary: 通过 ACP 后端运行外部编码 harnesses(Claude Code、Cursor、Gemini CLI、显式 Codex ACP、OpenClaw ACP、OpenCode)
title: ACP 智能体
x-i18n:
- generated_at: "2026-04-27T13:49:06Z"
+ generated_at: "2026-04-27T16:46:09Z"
model: gpt-5.4
provider: openai
- source_hash: 399aed931ad19c681049e1345d4636e73a47dfd0448e2699d95e8ce0184f60ed
+ source_hash: 7ddeb50b0941f20588bdb72089c69a4d5d8352bf2e7d09aea77b115f89d7f4b7
source_path: tools/acp-agents.md
workflow: 15
---
-[Agent Client Protocol(ACP)](https://agentclientprotocol.com/) 会话
+[Agent Client Protocol(ACP)](https://agentclientprotocol.com/) 会话让 OpenClaw 能够通过 ACP 后端插件运行外部编码 harnesses(例如 Pi、Claude Code、Cursor、Copilot、Droid、OpenClaw ACP、OpenCode、Gemini CLI,以及其他受支持的 ACPX harnesses)。
-让 OpenClaw 通过 ACP 后端插件运行外部编码 harness(例如 Pi、Claude Code、
-Cursor、Copilot、Droid、OpenClaw ACP、OpenCode、Gemini CLI,以及其他
-受支持的 ACPX harness)。
-
-每次 ACP 会话启动都会被跟踪为一个[后台任务](/zh-CN/automation/tasks)。
+每次 ACP 会话启动都会作为一个[后台任务](/zh-CN/automation/tasks)进行跟踪。
-**ACP 是外部 harness 路径,不是默认的 Codex 路径。** 原生 Codex app-server 插件负责 `/codex ...` 控制以及
-`agentRuntime.id: "codex"` 内嵌运行时;ACP 负责
-`/acp ...` 控制以及 `sessions_spawn({ runtime: "acp" })` 会话。
+**ACP 是外部 harness 路径,不是默认的 Codex 路径。** 原生 Codex app-server 插件负责 `/codex ...` 控制以及 `agentRuntime.id: "codex"` 内嵌运行时;ACP 负责 `/acp ...` 控制以及 `sessions_spawn({ runtime: "acp" })` 会话。
-如果你想让 Codex 或 Claude Code 作为外部 MCP 客户端
-直接连接到现有的 OpenClaw 渠道会话,请使用
-[`openclaw mcp serve`](/zh-CN/cli/mcp) 而不是 ACP。
+如果你想让 Codex 或 Claude Code 作为外部 MCP 客户端,直接连接到现有的 OpenClaw 渠道会话,请使用 [`openclaw mcp serve`](/zh-CN/cli/mcp) 而不是 ACP。
## 我该看哪个页面?
| 你想要… | 使用这个 | 说明 |
| ----------------------------------------------------------------------------------------------- | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
-| 在当前会话中绑定或控制 Codex | `/codex bind`、`/codex threads` | 当启用 `codex` 插件时使用原生 Codex app-server 路径;包括绑定聊天回复、图片转发、模型/快速/权限、停止和引导控制。ACP 是显式回退方案 |
+| 在当前会话中绑定或控制 Codex | `/codex bind`、`/codex threads` | 当启用 `codex` 插件时,使用原生 Codex app-server 路径;包括绑定聊天回复、图片转发、模型/快速/权限、停止和引导控制。ACP 是显式后备方案 |
| 通过 OpenClaw 运行 Claude Code、Gemini CLI、显式 Codex ACP 或其他外部 harness | 本页 | 聊天绑定会话、`/acp spawn`、`sessions_spawn({ runtime: "acp" })`、后台任务、运行时控制 |
-| 将 OpenClaw Gateway 网关会话作为 ACP 服务器暴露给编辑器或客户端 | [`openclaw acp`](/zh-CN/cli/acp) | 桥接模式。IDE/客户端通过 stdio/WebSocket 向 OpenClaw 发送 ACP |
-| 复用本地 AI CLI 作为纯文本回退模型 | [CLI 后端](/zh-CN/gateway/cli-backends) | 不是 ACP。没有 OpenClaw 工具、没有 ACP 控制、没有 harness 运行时 |
+| 将一个 OpenClaw Gateway 网关会话作为 ACP 服务器暴露给编辑器或客户端 | [`openclaw acp`](/zh-CN/cli/acp) | 桥接模式。IDE/客户端 通过 stdio/WebSocket 使用 ACP 与 OpenClaw 通信 |
+| 复用本地 AI CLI 作为纯文本后备模型 | [CLI 后端](/zh-CN/gateway/cli-backends) | 不是 ACP。没有 OpenClaw 工具、没有 ACP 控制、没有 harness 运行时 |
-## 这能开箱即用吗?
+## 开箱即用吗?
-通常可以。全新安装默认启用内置的 `acpx` 运行时插件,
-并带有插件本地固定版本的 `acpx` 二进制文件,OpenClaw 会在启动时探测它
-并自行修复。运行 `/acp doctor` 可进行就绪检查。
+通常可以。全新安装默认启用内置的 `acpx` 运行时插件,并附带插件本地固定版本的 `acpx` 二进制文件,OpenClaw 会在启动时探测并自我修复。运行 `/acp doctor` 进行就绪性检查。
-只有在 ACP **确实可用** 时,OpenClaw 才会向智能体介绍 ACP 启动功能:
-ACP 必须已启用、分发不能被禁用、当前
-会话不能被沙箱隔离阻止,并且必须已加载运行时后端。
-如果这些条件不满足,ACP 插件 Skills 和
-`sessions_spawn` ACP 指引会保持隐藏,这样智能体就不会建议
-一个不可用的后端。
+只有在 ACP **真正可用** 时,OpenClaw 才会向智能体介绍 ACP 启动功能:必须启用 ACP、不能禁用分发、当前会话不能被沙箱阻止,并且必须已加载运行时后端。如果这些条件未满足,ACP 插件 Skills 和 `sessions_spawn` 的 ACP 指引将保持隐藏,这样智能体就不会建议使用不可用的后端。
-
- - 如果设置了 `plugins.allow`,它就是一个限制性的插件清单,并且**必须**包含 `acpx`;否则内置默认项会被有意阻止,`/acp doctor` 会报告缺少 allowlist 条目。
- - 目标 harness 适配器(Codex、Claude 等)可能会在你首次使用时通过 `npx` 按需拉取。
- - 该 harness 对应的供应商认证仍然必须存在于主机上。
- - 如果主机没有 npm 或网络访问能力,首次运行时的适配器拉取会失败,直到预热缓存或通过其他方式安装适配器。
+
+ - 如果设置了 `plugins.allow`,它就是一个限制性的插件清单,并且**必须**包含 `acpx`;否则默认内置插件会被有意阻止,且 `/acp doctor` 会报告缺失 allowlist 条目。
+ - 目标 harness 适配器(Codex、Claude 等)可能会在你首次使用时按需通过 `npx` 获取。
+ - 该 harness 的供应商认证仍然必须已经存在于主机上。
+ - 如果主机没有 npm 或没有网络访问,首次运行时的适配器获取会失败,直到缓存被预热或以其他方式安装适配器。
-
- ACP 会启动一个真实的外部 harness 进程。OpenClaw 负责路由、
- 后台任务状态、交付、绑定和策略;harness
- 负责它自己的提供商登录、模型目录、文件系统行为以及
- 原生工具。
+
+ ACP 会启动一个真实的外部 harness 进程。OpenClaw 负责路由、后台任务状态、结果投递、绑定和策略;harness 负责其 provider 登录、模型目录、文件系统行为和原生工具。
- 在责怪 OpenClaw 之前,请先确认:
+ 在归咎于 OpenClaw 之前,请先确认:
- - `/acp doctor` 报告后端已启用且健康。
- - 当设置了 `acp.allowedAgents` allowlist 时,目标 id 在允许范围内。
+ - `/acp doctor` 报告后端已启用且状态健康。
+ - 设置了 allowlist 时,目标 id 已被 `acp.allowedAgents` 允许。
- harness 命令可以在 Gateway 网关主机上启动。
- - 该 harness 所需的提供商认证已存在(`claude`、`codex`、`gemini`、`opencode`、`droid` 等)。
- - 所选模型对该 harness 确实存在——模型 id 不能在不同 harness 之间通用。
- - 请求的 `cwd` 存在且可访问,或者省略 `cwd` 让后端使用其默认值。
- - 权限模式与工作内容相匹配。非交互式会话无法点击原生权限提示,因此大量写入/执行的编码运行通常需要一个能够无头继续执行的 ACPX 权限配置。
+ - 该 harness 已具备 provider 认证(`claude`、`codex`、`gemini`、`opencode`、`droid` 等)。
+ - 所选模型对该 harness 确实存在 —— 模型 id 不能在不同 harness 之间通用。
+ - 请求的 `cwd` 存在且可访问,或者省略 `cwd`,让后端使用其默认值。
+ - 权限模式与工作内容匹配。非交互式会话无法点击原生权限提示,因此以写入/执行为主的编码运行通常需要一个能够无头继续执行的 ACPX 权限配置文件。
-默认情况下,OpenClaw 插件工具和内置 OpenClaw 工具**不会**暴露给
-ACP harness。只有在 harness
-应该直接调用这些工具时,才在
-[ACP 智能体 — 设置](/zh-CN/tools/acp-agents-setup) 中启用显式 MCP 桥接。
+默认情况下,OpenClaw 插件工具和内置 OpenClaw 工具**不会**暴露给 ACP harnesses。只有在 harness 应该直接调用这些工具时,才在[ACP 智能体 — 设置](/zh-CN/tools/acp-agents-setup)中启用显式 MCP 桥接。
## 支持的 harness 目标
-使用内置 `acpx` 后端时,可将以下 harness id 用作 `/acp spawn `
-或 `sessions_spawn({ runtime: "acp", agentId: "" })` 目标:
+使用内置 `acpx` 后端时,可将以下 harness id 用作 `/acp spawn ` 或 `sessions_spawn({ runtime: "acp", agentId: "" })` 的目标:
| Harness id | 典型后端 | 说明 |
| ---------- | ---------------------------------------------- | ----------------------------------------------------------------------------------- |
-| `claude` | Claude Code ACP 适配器 | 需要主机上有 Claude Code 认证。 |
-| `codex` | Codex ACP 适配器 | 仅当原生 `/codex` 不可用或明确请求 ACP 时,才作为显式 ACP 回退。 |
+| `claude` | Claude Code ACP 适配器 | 需要主机上已配置 Claude Code 认证。 |
+| `codex` | Codex ACP 适配器 | 仅在原生 `/codex` 不可用或明确请求 ACP 时,作为显式 ACP 后备方案。 |
| `copilot` | GitHub Copilot ACP 适配器 | 需要 Copilot CLI/运行时认证。 |
| `cursor` | Cursor CLI ACP(`cursor-agent acp`) | 如果本地安装暴露的是不同的 ACP 入口点,请覆盖 acpx 命令。 |
| `droid` | Factory Droid CLI | 需要 Factory/Droid 认证,或在 harness 环境中设置 `FACTORY_API_KEY`。 |
| `gemini` | Gemini CLI ACP 适配器 | 需要 Gemini CLI 认证或 API 密钥设置。 |
| `iflow` | iFlow CLI | 适配器可用性和模型控制取决于已安装的 CLI。 |
| `kilocode` | Kilo Code CLI | 适配器可用性和模型控制取决于已安装的 CLI。 |
-| `kimi` | Kimi/Moonshot CLI | 需要主机上有 Kimi/Moonshot 认证。 |
+| `kimi` | Kimi/Moonshot CLI | 需要主机上已配置 Kimi/Moonshot 认证。 |
| `kiro` | Kiro CLI | 适配器可用性和模型控制取决于已安装的 CLI。 |
-| `opencode` | OpenCode ACP 适配器 | 需要 OpenCode CLI/提供商认证。 |
-| `openclaw` | 通过 `openclaw acp` 实现的 OpenClaw Gateway 网关桥接 | 让支持 ACP 的 harness 回连到 OpenClaw Gateway 网关会话。 |
+| `opencode` | OpenCode ACP 适配器 | 需要 OpenCode CLI/provider 认证。 |
+| `openclaw` | 通过 `openclaw acp` 的 OpenClaw Gateway 网关桥接 | 让支持 ACP 的 harness 回连到 OpenClaw Gateway 网关会话。 |
| `pi` | Pi/内嵌 OpenClaw 运行时 | 用于 OpenClaw 原生 harness 实验。 |
-| `qwen` | Qwen Code / Qwen CLI | 需要主机上有兼容 Qwen 的认证。 |
+| `qwen` | Qwen Code / Qwen CLI | 需要主机上已配置兼容 Qwen 的认证。 |
-可以在 acpx 本身中配置自定义 acpx 智能体别名,但 OpenClaw
-策略仍会在分发前检查 `acp.allowedAgents` 以及任何
-`agents.list[].runtime.acp.agent` 映射。
+可以在 acpx 本身中配置自定义 acpx 智能体别名,但在分发前,OpenClaw 策略仍会检查 `acp.allowedAgents` 以及任何 `agents.list[].runtime.acp.agent` 映射。
## 运维操作手册
-在聊天中快速使用 `/acp` 的流程:
+在聊天中使用 `/acp` 的快速流程:
`/acp spawn claude --bind here`、
- `/acp spawn gemini --mode persistent --thread auto`,或显式使用
+ `/acp spawn gemini --mode persistent --thread auto`,或者显式使用
`/acp spawn codex --bind here`。
- 继续在已绑定的会话或线程中工作(或者显式
- 指定会话 key)。
+ 在已绑定的会话或线程中继续(或者显式指定会话键)。
`/acp status`
@@ -146,75 +121,58 @@ ACP harness。只有在 harness
- - 启动会创建或恢复一个 ACP 运行时会话,在 OpenClaw 会话存储中记录 ACP 元数据,并且当该运行由父级拥有时,可能会创建一个后台任务。
- - 绑定后的后续消息会直接发送到 ACP 会话,直到绑定被关闭、失焦、重置或过期。
- - Gateway 网关命令会保留在本地。`/acp ...`、`/status` 和 `/unfocus` 永远不会作为普通提示文本发送给已绑定的 ACP harness。
- - 当后端支持取消时,`cancel` 会中止当前活动轮次;它不会删除绑定或会话元数据。
+ - 启动会创建或恢复一个 ACP 运行时会话,在 OpenClaw 会话存储中记录 ACP 元数据,并且当运行由父级拥有时,可能会创建一个后台任务。
+ - 绑定后的后续消息会直接进入 ACP 会话,直到绑定被关闭、失焦、重置或过期。
+ - Gateway 网关命令始终保留在本地。`/acp ...`、`/status` 和 `/unfocus` 永远不会作为普通提示文本发送给已绑定的 ACP harness。
+ - `cancel` 会在后端支持取消时中止当前轮次;它不会删除绑定或会话元数据。
- `close` 会从 OpenClaw 的视角结束 ACP 会话并移除绑定。如果 harness 支持恢复,它仍可能保留自己的上游历史记录。
- - 空闲运行时工作进程在 `acp.runtime.ttlMinutes` 之后可能会被清理;存储的会话元数据仍可通过 `/acp sessions` 使用。
+ - 空闲运行时工作进程在 `acp.runtime.ttlMinutes` 之后有资格被清理;存储的会话元数据仍可用于 `/acp sessions`。
- 当 **原生 Codex 插件** 已启用时,应路由到它的自然语言触发词:
+ 当**原生 Codex 插件**已启用时,应路由到它的自然语言触发词:
- - “把这个 Discord 渠道绑定到 Codex。”
+ - “将这个 Discord 渠道绑定到 Codex。”
- “把这个聊天附加到 Codex 线程 ``。”
- - “显示 Codex 线程,然后绑定这一条。”
+ - “显示 Codex 线程,然后绑定这个。”
原生 Codex 会话绑定是默认的聊天控制路径。
OpenClaw 动态工具仍通过 OpenClaw 执行,而
Codex 原生工具(如 shell/apply-patch)则在 Codex 内部执行。
对于 Codex 原生工具事件,OpenClaw 会注入每轮次的原生
- hook 中继,这样插件钩子就可以阻止 `before_tool_call`、
- 观察 `after_tool_call`,并通过
- OpenClaw 审批来路由 Codex `PermissionRequest` 事件。Codex `Stop` 钩子会被中继到
- OpenClaw `before_agent_finalize`,在这里插件可以请求
- 在 Codex 最终生成答案之前再进行一次模型调用。该中继机制
- 刻意保持保守:它不会修改 Codex 原生工具
- 参数,也不会重写 Codex 线程记录。仅当你想使用 ACP 运行时/会话模型时,
- 才使用显式 ACP。内嵌 Codex 支持边界记录于
- [Codex harness v1 支持契约](/zh-CN/plugins/codex-harness#v1-support-contract)。
+ hook 中继,使插件钩子能够阻止 `before_tool_call`、观察
+ `after_tool_call`,并通过 OpenClaw 审批来路由 Codex 的
+ `PermissionRequest` 事件。Codex 的 `Stop` 钩子会被中继到
+ OpenClaw 的 `before_agent_finalize`,在此插件可以请求再进行一次
+ 模型传递,然后 Codex 再完成其回答。该中继刻意保持保守:
+ 它不会修改 Codex 原生工具参数,也不会重写 Codex 线程记录。
+ 只有在你想使用 ACP 运行时/会话模型时,才使用显式 ACP。内嵌 Codex
+ 支持边界记录在
+ [Codex harness v1 支持契约](/zh-CN/plugins/codex-harness#v1-support-contract)中。
-
- - `openai-codex/*` — PI Codex OAuth/订阅路径。
- - `openai/*` 加上 `agentRuntime.id: "codex"` — 原生 Codex app-server 内嵌运行时。
- - `/codex ...` — 原生 Codex 会话控制。
- - `/acp ...` 或 `runtime: "acp"` — 显式 ACP/acpx 控制。
+
+ - `openai-codex/*` —— PI Codex OAuth/订阅路径。
+ - `openai/*` 加上 `agentRuntime.id: "codex"` —— 原生 Codex app-server 内嵌运行时。
+ - `/codex ...` —— 原生 Codex 会话控制。
+ - `/acp ...` 或 `runtime: "acp"` —— 显式 ACP/acpx 控制。
应路由到 ACP 运行时的触发词:
- - “把这个任务作为一次性 Claude Code ACP 会话运行,并总结结果。”
- - “针对这个任务使用 Gemini CLI 在线程中运行,然后把后续跟进保留在同一线程里。”
+ - “把这个作为一次性 Claude Code ACP 会话运行,并总结结果。”
+ - “针对这个任务使用 Gemini CLI 并放在线程中运行,然后将后续内容保留在同一个线程里。”
- “通过 ACP 在线程后台运行 Codex。”
- OpenClaw 会选择 `runtime: "acp"`,解析 harness `agentId`,
- 在支持时绑定到当前会话或线程,并
- 将后续消息路由到该会话,直到关闭/过期。只有当明确指定 ACP/acpx
- 或所请求操作的原生 Codex
- 插件不可用时,Codex 才会走这一路径。
+ OpenClaw 会选择 `runtime: "acp"`,解析 harness `agentId`,在支持时绑定到当前会话或线程,并将后续消息路由到该会话,直到关闭或过期。只有在显式指定 ACP/acpx,或请求的操作无法使用原生 Codex 插件时,Codex 才会走这条路径。
- 对于 `sessions_spawn`,只有在 ACP
- 已启用、请求方未被沙箱隔离,并且已加载 ACP 运行时
- 后端时,才会公布 `runtime: "acp"`。`acp.dispatch.enabled=false`
- 会暂停自动 ACP 线程分发,但不会隐藏或阻止显式的
- `sessions_spawn({ runtime: "acp" })` 调用。它面向诸如 `codex`、
- `claude`、`droid`、`gemini` 或 `opencode` 这样的 ACP harness id。不要传入普通的
- 来自 `agents_list` 的 OpenClaw 配置智能体 id,除非该条目
- 已明确配置为 `agents.list[].runtime.type="acp"`;
- 否则请使用默认的子智能体运行时。当某个 OpenClaw 智能体
- 配置了 `runtime.type="acp"` 时,OpenClaw 会使用
- `runtime.acp.agent` 作为底层 harness id。
+对于 `sessions_spawn`,只有在 ACP 已启用、请求方未被沙箱隔离、且 ACP 运行时后端已加载时,才会公布 `runtime: "acp"`。`acp.dispatch.enabled=false` 会暂停自动 ACP 线程分发,但不会隐藏或阻止显式的 `sessions_spawn({ runtime: "acp" })` 调用。它面向 ACP harness id,例如 `codex`、`claude`、`droid`、`gemini` 或 `opencode`。不要传入来自 `agents_list` 的普通 OpenClaw 配置智能体 id,除非该条目已显式配置 `agents.list[].runtime.type="acp"`;否则请使用默认子智能体运行时。当某个 OpenClaw 智能体配置了 `runtime.type="acp"` 时,OpenClaw 会使用 `runtime.acp.agent` 作为底层 harness id。
## ACP 与子智能体
-当你需要外部 harness 运行时时,请使用 ACP。当启用 `codex`
-插件时,如需 Codex 会话绑定/控制,请使用**原生 Codex
-app-server**。当你需要 OpenClaw 原生的
-委派运行时,请使用**子智能体**。
+当你需要外部 harness 运行时时,使用 ACP。当启用 `codex` 插件时,如需进行 Codex 会话绑定/控制,请使用**原生 Codex app-server**。当你希望使用 OpenClaw 原生委派运行时,请使用**子智能体**。
| 区域 | ACP 会话 | 子智能体运行 |
| ------------- | ------------------------------------- | ---------------------------------- |
@@ -227,93 +185,87 @@ app-server**。当你需要 OpenClaw 原生的
## ACP 如何运行 Claude Code
-对于通过 ACP 运行的 Claude Code,栈结构如下:
+对于通过 ACP 运行的 Claude Code,其栈结构为:
1. OpenClaw ACP 会话控制平面。
2. 内置 `acpx` 运行时插件。
3. Claude ACP 适配器。
4. Claude 侧运行时/会话机制。
-ACP Claude 是一个**harness 会话**,具有 ACP 控制、会话恢复、
-后台任务跟踪以及可选的会话/线程绑定。
+ACP Claude 是一个**harness 会话**,具有 ACP 控制、会话恢复、后台任务跟踪以及可选的会话/线程绑定。
-CLI 后端是独立的纯文本本地回退运行时——请参见
+CLI 后端则是独立的纯文本本地后备运行时 —— 请参阅
[CLI 后端](/zh-CN/gateway/cli-backends)。
-对运维人员来说,实际规则是:
+对于运维人员,实用规则是:
- **想要 `/acp spawn`、可绑定会话、运行时控制或持久化 harness 工作?** 使用 ACP。
-- **想要通过原始 CLI 获得简单的本地文本回退?** 使用 CLI 后端。
+- **想要通过原始 CLI 获得简单的本地文本后备?** 使用 CLI 后端。
## 绑定会话
### 心智模型
-- **聊天界面**——人们持续交流的地方(Discord 渠道、Telegram 话题、iMessage 聊天)。
-- **ACP 会话**——OpenClaw 路由到的持久 Codex/Claude/Gemini 运行时状态。
-- **子线程/话题**——仅在使用 `--thread ...` 时创建的可选附加消息界面。
-- **运行时工作区**——harness 运行所在的文件系统位置(`cwd`、仓库检出目录、后端工作区)。它独立于聊天界面。
+- **聊天界面** —— 人们持续交谈的地方(Discord 渠道、Telegram 话题、iMessage 聊天)。
+- **ACP 会话** —— OpenClaw 路由到的持久 Codex/Claude/Gemini 运行时状态。
+- **子线程/话题** —— 仅由 `--thread ...` 创建的可选附加消息界面。
+- **运行时工作区** —— harness 运行的文件系统位置(`cwd`、仓库检出目录、后端工作区)。它独立于聊天界面。
### 当前会话绑定
-`/acp spawn --bind here` 会将当前会话固定到
-已启动的 ACP 会话——不创建子线程,使用相同的聊天界面。OpenClaw 继续
-负责传输、认证、安全和交付。该会话中的后续消息
-会路由到同一个会话;`/new` 和 `/reset` 会就地重置该
-会话;`/acp close` 会移除绑定。
+`/acp spawn --bind here` 会将当前会话固定绑定到新启动的 ACP 会话 —— 不创建子线程,仍使用同一个聊天界面。OpenClaw 继续负责传输、认证、安全和结果投递。该会话中的后续消息会路由到同一个会话;`/new` 和 `/reset` 会在原位置重置该会话;`/acp close` 会移除绑定。
示例:
```text
-/codex bind # 原生 Codex 绑定,将后续消息路由到这里
+/codex bind # 原生 Codex 绑定,将未来消息路由到这里
/codex model gpt-5.4 # 调整已绑定的原生 Codex 线程
-/codex stop # 控制当前活动的原生 Codex 轮次
-/acp spawn codex --bind here # 为 Codex 显式使用 ACP 回退
-/acp spawn codex --thread auto # 可能会创建子线程/话题并绑定到那里
+/codex stop # 控制当前活跃的原生 Codex 轮次
+/acp spawn codex --bind here # 用于 Codex 的显式 ACP 后备方案
+/acp spawn codex --thread auto # 可能创建子线程/话题并绑定到那里
/acp spawn codex --bind here --cwd /workspace/repo # 相同聊天绑定,Codex 在 /workspace/repo 中运行
```
-
- - `--bind here` 和 `--thread ...` 互斥。
- - `--bind here` 仅适用于声明支持当前会话绑定的渠道;否则 OpenClaw 会返回清晰的不支持消息。绑定会在 Gateway 网关重启后持续存在。
- - 在 Discord 上,仅当 OpenClaw 需要为 `--thread auto|here` 创建子线程时,才要求 `spawnAcpSessions`——对于 `--bind here` 则不需要。
- - 如果你在未指定 `--cwd` 的情况下启动到不同的 ACP 智能体,OpenClaw 默认会继承**目标智能体的**工作区。缺失的继承路径(`ENOENT`/`ENOTDIR`)会回退到后端默认值;其他访问错误(例如 `EACCES`)会作为启动错误直接显示。
- - Gateway 网关管理命令在已绑定会话中仍保留在本地——即使普通后续文本会路由到已绑定的 ACP 会话,`/acp ...` 命令仍由 OpenClaw 处理;只要该界面启用了命令处理,`/status` 和 `/unfocus` 也始终保留在本地。
+
+ - `--bind here` 与 `--thread ...` 互斥。
+ - `--bind here` 仅适用于声明支持当前会话绑定的渠道;否则 OpenClaw 会返回明确的不支持提示。绑定会在 Gateway 网关重启后继续保留。
+ - 在 Discord 上,仅当 OpenClaw 需要为 `--thread auto|here` 创建子线程时,才需要 `spawnAcpSessions` —— 对于 `--bind here` 则不需要。
+ - 如果你在不指定 `--cwd` 的情况下启动到不同的 ACP 智能体,OpenClaw 默认会继承**目标智能体的**工作区。缺失的继承路径(`ENOENT`/`ENOTDIR`)会回退到后端默认值;其他访问错误(例如 `EACCES`)会作为启动错误抛出。
+ - 在已绑定的会话中,Gateway 网关管理命令始终保留在本地 —— 即使普通后续文本会路由到已绑定的 ACP 会话,`/acp ...` 命令仍由 OpenClaw 处理;只要该界面启用了命令处理,`/status` 和 `/unfocus` 也始终保留在本地。
- 当某个渠道适配器启用了线程绑定时:
+ 当渠道适配器启用了线程绑定时:
- OpenClaw 会将一个线程绑定到目标 ACP 会话。
- 该线程中的后续消息会路由到已绑定的 ACP 会话。
- ACP 输出会回传到同一个线程。
- - 失焦/关闭/归档/空闲超时或最大时长到期时,会移除该绑定。
- - `/acp close`、`/acp cancel`、`/acp status`、`/status` 和 `/unfocus` 是 Gateway 网关命令,不会作为提示发送给 ACP harness。
+ - 失焦/关闭/归档/空闲超时或最大时长过期都会移除绑定。
+ - `/acp close`、`/acp cancel`、`/acp status`、`/status` 和 `/unfocus` 是 Gateway 网关命令,不是发送给 ACP harness 的提示。
线程绑定 ACP 所需的功能标志:
- `acp.enabled=true`
- - `acp.dispatch.enabled` 默认开启(设置为 `false` 可暂停自动 ACP 线程分发;显式的 `sessions_spawn({ runtime: "acp" })` 调用仍可使用)。
- - 已启用渠道适配器的 ACP 线程启动标志(适配器专属):
+ - `acp.dispatch.enabled` 默认开启(设为 `false` 可暂停自动 ACP 线程分发;显式的 `sessions_spawn({ runtime: "acp" })` 调用仍然有效)。
+ - 已启用渠道适配器 ACP 线程启动标志(适配器特定):
- Discord:`channels.discord.threadBindings.spawnAcpSessions=true`
- Telegram:`channels.telegram.threadBindings.spawnAcpSessions=true`
- 线程绑定支持取决于具体适配器。如果当前渠道
- 适配器不支持线程绑定,OpenClaw 会返回清晰的
- 不支持/不可用消息。
+ 线程绑定支持取决于适配器。如果当前渠道
+ 适配器不支持线程绑定,OpenClaw 会返回明确的
+ 不支持/不可用提示。
- 任何暴露会话/线程绑定能力的渠道适配器。
- 当前内置支持:**Discord** 线程/渠道、**Telegram** 话题(群组/超级群组中的论坛话题以及私信话题)。
- - 插件渠道也可通过相同的绑定接口添加支持。
+ - 插件渠道也可以通过同一绑定接口添加支持。
## 持久化渠道绑定
-对于非临时工作流,请在顶层 `bindings[]` 条目中
-配置持久化 ACP 绑定。
+对于非临时工作流,请在顶层 `bindings[]` 条目中配置持久化 ACP 绑定。
### 绑定模型
@@ -321,12 +273,12 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
标记一个持久化 ACP 会话绑定。
- 标识目标会话。按渠道区分的结构如下:
+ 标识目标会话。各渠道的结构如下:
- **Discord 渠道/线程:** `match.channel="discord"` + `match.peer.id=""`
- **Telegram 论坛话题:** `match.channel="telegram"` + `match.peer.id=":topic:"`
-- **BlueBubbles 私信/群组:** `match.channel="bluebubbles"` + `match.peer.id=""`。稳定的群组绑定优先使用 `chat_id:*` 或 `chat_identifier:*`。
-- **iMessage 私信/群组:** `match.channel="imessage"` + `match.peer.id=""`。稳定的群组绑定优先使用 `chat_id:*`。
+- **BlueBubbles 私信/群组:** `match.channel="bluebubbles"` + `match.peer.id=""`。对于稳定的群组绑定,优先使用 `chat_id:*` 或 `chat_identifier:*`。
+- **iMessage 私信/群组:** `match.channel="imessage"` + `match.peer.id=""`。对于稳定的群组绑定,优先使用 `chat_id:*`。
所属的 OpenClaw 智能体 id。
@@ -335,7 +287,7 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
可选的 ACP 覆盖设置。
- 面向运维人员的可选标签。
+ 可选的面向运维人员的标签。
可选的运行时工作目录。
@@ -442,12 +394,12 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
### 行为
-- OpenClaw 会在使用前确保已配置的 ACP 会话存在。
-- 该渠道或话题中的消息会路由到已配置的 ACP 会话。
-- 在已绑定的会话中,`/new` 和 `/reset` 会就地重置同一个 ACP 会话键。
+- OpenClaw 会在使用前确保已存在所配置的 ACP 会话。
+- 该渠道或话题中的消息会路由到所配置的 ACP 会话。
+- 在已绑定会话中,`/new` 和 `/reset` 会在原位置重置同一个 ACP 会话键。
- 临时运行时绑定(例如由线程聚焦流程创建的绑定)在存在时仍然适用。
-- 对于没有显式 `cwd` 的跨智能体 ACP 启动,OpenClaw 会从智能体配置继承目标智能体的工作区。
-- 缺失的继承工作区路径会回退到后端默认 `cwd`;非缺失类访问失败则会作为启动错误直接显示。
+- 对于未显式指定 `cwd` 的跨智能体 ACP 启动,OpenClaw 会从智能体配置中继承目标智能体工作区。
+- 缺失的继承工作区路径会回退到后端默认 `cwd`;非缺失类访问失败会作为启动错误抛出。
## 启动 ACP 会话
@@ -455,12 +407,11 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
- 使用 `runtime: "acp"` 从智能体轮次或
- 工具调用中启动 ACP 会话。
+ 使用 `runtime: "acp"` 从智能体轮次或工具调用中启动 ACP 会话。
```json
{
- "task": "打开仓库并总结失败的测试",
+ "task": "Open the repo and summarize failing tests",
"runtime": "acp",
"agentId": "codex",
"thread": true,
@@ -469,10 +420,7 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
```
- `runtime` 默认是 `subagent`,因此对于 ACP 会话需要显式设置
- `runtime: "acp"`。如果省略 `agentId`,OpenClaw 会在已配置时使用
- `acp.defaultAgent`。`mode: "session"` 需要
- `thread: true` 才能保持持久化的绑定会话。
+ `runtime` 默认为 `subagent`,因此对于 ACP 会话请显式设置 `runtime: "acp"`。如果省略 `agentId`,则在已配置时 OpenClaw 会使用 `acp.defaultAgent`。`mode: "session"` 需要 `thread: true` 才能保持持久化绑定会话。
@@ -494,7 +442,7 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
- `--cwd `
- `--label `
- 参见[斜杠命令](/zh-CN/tools/slash-commands)。
+ 请参阅[斜杠命令](/zh-CN/tools/slash-commands)。
@@ -505,7 +453,7 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
发送到 ACP 会话的初始提示。
- 对于 ACP 会话,必须是 `"acp"`。
+ 对于 ACP 会话,必须为 `"acp"`。
ACP 目标 harness id。如果已设置,则回退到 `acp.defaultAgent`。
@@ -514,50 +462,28 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
在支持时请求线程绑定流程。
- `"run"` 是一次性运行;`"session"` 是持久化会话。如果 `thread: true` 且
- 省略了 `mode`,OpenClaw 可能会根据
- 运行时路径默认使用持久化行为。`mode: "session"` 要求 `thread: true`。
+ `"run"` 是一次性运行;`"session"` 是持久化会话。如果 `thread: true` 且省略 `mode`,OpenClaw 可能会根据运行时路径默认使用持久化行为。`mode: "session"` 需要 `thread: true`。
- 请求的运行时工作目录(由后端/运行时
- 策略验证)。如果省略,ACP 启动会在已配置时继承目标智能体工作区;
- 缺失的继承路径会回退到后端
- 默认值,而真实的访问错误会直接返回。
+ 请求的运行时工作目录(由后端/运行时策略验证)。如果省略,当已配置时,ACP 启动会继承目标智能体工作区;缺失的继承路径会回退到后端默认值,而真实的访问错误会直接返回。
- 用于会话/横幅文本中的面向运维人员标签。
+ 用于会话/横幅文本的面向运维人员的标签。
- 恢复现有 ACP 会话,而不是创建新会话。该
- 智能体会通过 `session/load` 重放其会话历史。
- 需要 `runtime: "acp"`。
+ 恢复现有 ACP 会话,而不是创建新会话。智能体会通过 `session/load` 重放其会话历史。需要 `runtime: "acp"`。
- `"parent"` 会将初始 ACP 运行进度摘要作为系统事件
- 回传到请求方会话。接受的响应可能包含
- 指向会话级 JSONL 日志的 `streamLogPath`
- (`.acp-stream.jsonl`),你可以跟踪它以查看完整的中继历史。
+ `"parent"` 会将初始 ACP 运行的进度摘要作为系统事件流式返回给请求方会话。接受的响应可以包含指向会话范围 JSONL 日志的 `streamLogPath`(`.acp-stream.jsonl`),你可以对其执行 tail 以查看完整的中继历史。
- 在 N 秒后中止 ACP 子轮次。`0` 会让该轮次保持在
- Gateway 网关的无超时路径上。相同的值会同时应用到 Gateway 网关
- 运行和 ACP 运行时,因此卡住或配额耗尽的 harness 不会
- 无限期占用父智能体通道。
+ 在 N 秒后中止 ACP 子轮次。`0` 会让该轮次走 Gateway 网关的无超时路径。相同的值会同时应用于 Gateway 网关运行和 ACP 运行时,这样停滞或配额耗尽的 harness 就不会无限期占用父智能体通道。
- 对 ACP 子会话的显式模型覆盖。Codex ACP 启动
- 会在 `session/new` 之前,将 OpenClaw Codex 引用(例如 `openai-codex/gpt-5.4`)
- 规范化为 Codex ACP 启动配置;诸如
- `openai-codex/gpt-5.4/high` 这样的斜杠形式
- 还会设置 Codex ACP 推理强度。
- 其他 harness 必须公布 ACP `models` 并支持
- `session/set_model`;否则 OpenClaw/acpx 会明确失败,而不是
- 静默回退到目标智能体默认值。
+ ACP 子会话的显式模型覆盖。Codex ACP 启动会在 `session/new` 之前,将 OpenClaw Codex 引用(例如 `openai-codex/gpt-5.4`)标准化为 Codex ACP 启动配置;诸如 `openai-codex/gpt-5.4/high` 这样的斜杠形式还会设置 Codex ACP 的推理强度。其他 harness 必须声明 ACP `models` 并支持 `session/set_model`;否则 OpenClaw/acpx 会明确失败,而不是静默回退到目标智能体默认值。
- 显式思考/推理强度。对于 Codex ACP,`minimal` 会映射为
- 低强度,`low`/`medium`/`high`/`xhigh` 会直接映射,而 `off`
- 会省略推理强度启动覆盖。
+ 显式思考/推理强度。对于 Codex ACP,`minimal` 会映射为低强度,`low`/`medium`/`high`/`xhigh` 会直接映射,而 `off` 会省略推理强度启动覆盖。
## 启动绑定和线程模式
@@ -566,22 +492,22 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
| 模式 | 行为 |
| ------ | ---------------------------------------------------------------------- |
- | `here` | 就地绑定当前活动会话;如果当前没有活动会话则失败。 |
+ | `here` | 就地绑定当前活跃会话;如果当前没有活跃会话则失败。 |
| `off` | 不创建当前会话绑定。 |
说明:
- - `--bind here` 是运维人员实现“让这个渠道或聊天由 Codex 支持”的最简单路径。
+ - `--bind here` 是运维人员实现“让这个渠道或聊天由 Codex 提供支持”的最简单路径。
- `--bind here` 不会创建子线程。
- `--bind here` 仅适用于暴露当前会话绑定支持的渠道。
- - `--bind` 和 `--thread` 不能在同一个 `/acp spawn` 调用中组合使用。
+ - `--bind` 和 `--thread` 不能在同一个 `/acp spawn` 调用中同时使用。
| 模式 | 行为 |
| ------ | --------------------------------------------------------------------------------------------------- |
- | `auto` | 在活动线程中:绑定该线程。在线程外:在支持时创建/绑定一个子线程。 |
- | `here` | 要求当前处于活动线程中;否则失败。 |
+ | `auto` | 在活跃线程中:绑定该线程。在线程外:在支持时创建/绑定一个子线程。 |
+ | `here` | 要求当前处于活跃线程中;否则失败。 |
| `off` | 不绑定。会话以未绑定状态启动。 |
说明:
@@ -595,79 +521,74 @@ CLI 后端是独立的纯文本本地回退运行时——请参见
-## 交付模型
+## 投递模型
-ACP 会话既可以是交互式工作区,也可以是由父级拥有的
-后台工作。交付路径取决于其形态。
+ACP 会话既可以是交互式工作区,也可以是由父级拥有的后台工作。投递路径取决于它的形态。
- 交互式会话旨在持续在可见聊天
- 界面上交流:
+ 交互式会话旨在让对话持续发生在可见的聊天界面上:
- `/acp spawn ... --bind here` 会将当前会话绑定到 ACP 会话。
- `/acp spawn ... --thread ...` 会将渠道线程/话题绑定到 ACP 会话。
- 持久化配置的 `bindings[].type="acp"` 会将匹配的会话路由到同一个 ACP 会话。
已绑定会话中的后续消息会直接路由到
- ACP 会话,ACP 输出也会回传到同一个
+ ACP 会话,而 ACP 输出会回传到同一个
渠道/线程/话题。
OpenClaw 发送给 harness 的内容:
- 普通的已绑定后续消息会作为提示文本发送,附件仅在 harness/后端支持时一并发送。
- `/acp` 管理命令和本地 Gateway 网关命令会在 ACP 分发前被拦截。
- - 运行时生成的 completion 事件会按目标具体实现。OpenClaw 智能体会收到 OpenClaw 的内部运行时上下文 envelope;外部 ACP harness 会收到带有子结果和指令的纯提示。原始 `<<>>` envelope 绝不能发送给外部 harness,也不能作为 ACP 用户 transcript 文本持久化。
- - ACP transcript 条目使用用户可见的触发文本或纯 completion 提示。内部事件元数据会尽可能以结构化形式保留在 OpenClaw 中,不会被视为用户编写的聊天内容。
+ - 运行时生成的完成事件会按目标具体实体化。OpenClaw 智能体会收到 OpenClaw 的内部运行时上下文信封;外部 ACP harness 则会收到包含子结果和指令的普通提示。原始 `<<>>` 信封绝不能发送给外部 harness,也不能作为 ACP 用户转录文本持久化。
+ - ACP 转录条目使用用户可见的触发文本或普通完成提示。内部事件元数据会尽可能以结构化形式保留在 OpenClaw 中,而不会被当作用户编写的聊天内容。
- 由另一个智能体运行启动的一次性 ACP 会话属于后台
+ 由另一个智能体运行启动的一次性 ACP 会话是后台
子项,类似于子智能体:
- 父级通过 `sessions_spawn({ runtime: "acp", mode: "run" })` 请求工作。
- - 子项在它自己的 ACP harness 会话中运行。
- - 子轮次运行在与原生子智能体启动相同的后台通道上,因此缓慢的 ACP harness 不会阻塞无关的主会话工作。
- - 完成情况会通过任务完成通告路径回报。OpenClaw 会在发送到外部 harness 之前,将内部完成元数据转换为纯 ACP 提示,因此 harness 不会看到 OpenClaw 专用的运行时上下文标记。
- - 当需要面向用户的回复时,父级会以普通 assistant 语气重写子结果。
+ - 子项在自己的 ACP harness 会话中运行。
+ - 子轮次与原生子智能体启动共用同一后台通道,因此缓慢的 ACP harness 不会阻塞无关的主会话工作。
+ - 完成结果会通过任务完成公告路径回传。OpenClaw 会先将内部完成元数据转换成普通 ACP 提示,再发送给外部 harness,因此 harness 看不到 OpenClaw 专用的运行时上下文标记。
+ - 当需要面向用户的回复时,父级会以普通助手语气重写子结果。
- **不要**将此路径视为父级
- 与子项之间的点对点聊天。子项已经有一个回传到
- 父级的完成通道。
+ **不要**将这一路径视为父子之间的点对点聊天。
+ 子项已经有一条回传给父级的完成通道。
-
- `sessions_send` 可以在启动后以另一个会话为目标。对于普通
- 对等会话,OpenClaw 在注入消息后会使用
- agent-to-agent(A2A)后续路径:
+
+ `sessions_send` 可以在启动后将目标指向另一个会话。对于普通
+ 对等会话,OpenClaw 会在注入消息后使用智能体到智能体(A2A)的后续路径:
- - 等待目标会话的回复。
- - 可选地让请求方和目标交换有限轮数的后续消息。
- - 要求目标生成一条通告消息。
- - 将该通告投递到可见渠道或线程。
+ - 等待目标会话回复。
+ - 可选地让请求方和目标交换有限数量的后续轮次。
+ - 要求目标生成一条公告消息。
+ - 将该公告投递到可见的渠道或线程。
- 该 A2A 路径是对等发送时的一种回退方案,适用于发送方需要一个
- 可见后续回复的情况。当一个无关会话能够
- 查看并向 ACP 目标发送消息时,它仍然保持启用,例如在宽松的
+ 对于发送方需要一个可见后续回复的对等发送,这条 A2A 路径是
+ 后备方案。当某个无关会话能够看到并向 ACP 目标发送消息时,
+ 它仍然保持启用,例如在较宽松的
`tools.sessions.visibility` 设置下。
- 仅当请求方是其自有的父级拥有的一次性 ACP 子项的
- 父级时,OpenClaw 才会跳过 A2A 后续路径。在这种情况下,
- 如果在任务完成之上再运行 A2A,可能会用
- 子项结果唤醒父级,再将父级回复转发回子项,
- 从而形成父级/子项回声循环。对于该自有子项情况,`sessions_send` 结果会报告
- `delivery.status="skipped"`,
- 因为完成路径已经负责处理结果。
+ 只有当请求方是其自身父级拥有的一次性 ACP 子项的父级时,
+ OpenClaw 才会跳过 A2A 后续流程。在这种情况下,
+ 如果在任务完成之上再运行 A2A,可能会用子项结果唤醒父级,
+ 再把父级回复转发回子项,
+ 从而形成父子回声循环。对于这种自有子项场景,`sessions_send` 结果会报告
+ `delivery.status="skipped"`,因为完成路径已经负责处理结果。
- 使用 `resumeSessionId` 可以继续之前的 ACP 会话,而不是
- 从头开始。该智能体会通过
- `session/load` 重放其会话历史,因此它会带着此前全部上下文继续工作。
+ 使用 `resumeSessionId` 继续之前的 ACP 会话,而不是
+ 从头开始。智能体会通过
+ `session/load` 重放其会话历史,因此它会带着完整的先前上下文继续工作。
```json
{
- "task": "从上次停下的地方继续——修复剩余的测试失败",
+ "task": "Continue where we left off — fix the remaining test failures",
"runtime": "acp",
"agentId": "codex",
"resumeSessionId": ""
@@ -676,110 +597,103 @@ ACP 会话既可以是交互式工作区,也可以是由父级拥有的
常见用例:
- - 将一个 Codex 会话从你的笔记本电脑交接到手机——告诉你的智能体从你停下的地方继续。
- - 继续一个你先前在 CLI 中以交互方式启动、现在想通过智能体以无头方式继续的编码会话。
- - 继续处理因 Gateway 网关重启或空闲超时而中断的工作。
+ - 将一个 Codex 会话从你的笔记本电脑交接到手机上 —— 告诉你的智能体从你上次停下的地方继续。
+ - 继续你先前在 CLI 中以交互方式开始、现在想通过智能体以无头方式继续的编码会话。
+ - 继续因 Gateway 网关重启或空闲超时而中断的工作。
说明:
- - `resumeSessionId` 需要 `runtime: "acp"`——如果与子智能体运行时一起使用,会返回错误。
- - `resumeSessionId` 会恢复上游 ACP 会话历史;`thread` 和 `mode` 仍会正常应用到你正在创建的新 OpenClaw 会话,因此 `mode: "session"` 仍要求 `thread: true`。
+ - `resumeSessionId` 仅在 `runtime: "acp"` 时适用;默认子智能体运行时会忽略这个 ACP 专用字段。
+ - `streamTo` 仅在 `runtime: "acp"` 时适用;默认子智能体运行时会忽略这个 ACP 专用字段。
+ - `resumeSessionId` 是主机本地的 ACP/harness 恢复 id,不是 OpenClaw 渠道会话键;在分发之前,OpenClaw 仍会检查 ACP 启动策略和目标智能体策略,而加载该上游 id 的授权则由 ACP 后端或 harness 自身负责。
+ - `resumeSessionId` 会恢复上游 ACP 会话历史;`thread` 和 `mode` 仍会正常应用于你正在创建的新 OpenClaw 会话,因此 `mode: "session"` 仍然需要 `thread: true`。
- 目标智能体必须支持 `session/load`(Codex 和 Claude Code 支持)。
- - 如果找不到该会话 id,启动会以清晰错误失败——不会静默回退到新会话。
+ - 如果找不到该会话 id,启动会以明确错误失败 —— 不会静默回退为新会话。
- Gateway 网关部署后,请运行一次真实的端到端检查,而不是
- 只相信单元测试:
+ Gateway 网关部署后,请运行一次真实的端到端检查,
+ 而不要只相信单元测试:
- 1. 验证目标主机上已部署的 Gateway 网关版本和提交。
- 2. 打开一个临时 ACPX 桥接会话,连接到一个在线智能体。
- 3. 要求该智能体调用 `sessions_spawn`,并设置 `runtime: "acp"`、`agentId: "codex"`、`mode: "run"`,任务内容为 `Reply with exactly LIVE-ACP-SPAWN-OK`。
- 4. 验证 `accepted=yes`、存在真实的 `childSessionKey`,并且没有校验器错误。
- 5. 清理该临时桥接会话。
+ 1. 在目标主机上验证已部署的 Gateway 网关版本和提交。
+ 2. 打开一个通往在线智能体的临时 ACPX 桥接会话。
+ 3. 让该智能体调用 `sessions_spawn`,参数为 `runtime: "acp"`、`agentId: "codex"`、`mode: "run"`,任务内容为 `Reply with exactly LIVE-ACP-SPAWN-OK`。
+ 4. 验证 `accepted=yes`、存在真实的 `childSessionKey`,且没有验证器错误。
+ 5. 清理临时桥接会话。
- 将门槛保持在 `mode: "run"`,并跳过 `streamTo: "parent"`——
- 线程绑定的 `mode: "session"` 和流中继路径属于单独的、
- 更丰富的集成验证流程。
+ 请将检查限制在 `mode: "run"`,并跳过 `streamTo: "parent"` —
+ 线程绑定的 `mode: "session"` 和流中继路径属于独立且
+ 更丰富的集成验证步骤。
## 沙箱兼容性
-ACP 会话当前运行在主机运行时上,**不会**在
-OpenClaw 沙箱中运行。
+ACP 会话当前运行在主机运行时上,**不**在 OpenClaw 沙箱内运行。
**安全边界:**
-- 外部 harness 可以根据其自身 CLI 权限和所选 `cwd` 进行读写。
-- OpenClaw 的沙箱策略**不会**包装 ACP harness 执行。
-- OpenClaw 仍会强制执行 ACP 功能门禁、允许的智能体、会话所有权、渠道绑定以及 Gateway 网关交付策略。
+- 外部 harness 可以根据其自身 CLI 权限以及所选 `cwd` 进行读写。
+- OpenClaw 的沙箱策略**不会**包裹 ACP harness 执行。
+- OpenClaw 仍然会强制执行 ACP 功能门控、允许的智能体、会话所有权、渠道绑定和 Gateway 网关投递策略。
- 对于受沙箱强制约束的 OpenClaw 原生工作,请使用 `runtime: "subagent"`。
当前限制:
-- 如果请求方会话处于沙箱隔离状态,ACP 启动会被阻止,这同时适用于 `sessions_spawn({ runtime: "acp" })` 和 `/acp spawn`。
+- 如果请求方会话处于沙箱隔离状态,则 `sessions_spawn({ runtime: "acp" })` 和 `/acp spawn` 的 ACP 启动都会被阻止。
- 带 `runtime: "acp"` 的 `sessions_spawn` 不支持 `sandbox: "require"`。
## 会话目标解析
-大多数 `/acp` 操作都接受一个可选会话目标(`session-key`、
-`session-id` 或 `session-label`)。
+大多数 `/acp` 操作都接受可选的会话目标(`session-key`、`session-id` 或 `session-label`)。
**解析顺序:**
1. 显式目标参数(或 `/acp steer` 的 `--session`)
- 先尝试 key
- - 再尝试 UUID 形状的 session id
- - 然后尝试 label
-2. 当前线程绑定(如果此会话/线程已绑定到某个 ACP 会话)。
-3. 当前请求方会话回退。
+ - 再尝试 UUID 形式的 session id
+ - 最后尝试 label
+2. 当前线程绑定(如果此会话/线程已绑定到 ACP 会话)。
+3. 当前请求方会话回退值。
-当前会话绑定和线程绑定都会参与
-步骤 2。
+当前会话绑定和线程绑定都会参与第 2 步。
-如果无法解析任何目标,OpenClaw 会返回清晰错误
+如果无法解析出目标,OpenClaw 会返回明确错误
(`Unable to resolve session target: ...`)。
## ACP 控制
| 命令 | 作用 | 示例 |
| -------------------- | --------------------------------------------------------- | ------------------------------------------------------------- |
-| `/acp spawn` | 创建 ACP 会话;可选当前会话绑定或线程绑定。 | `/acp spawn codex --bind here --cwd /repo` |
-| `/acp cancel` | 取消目标会话中正在进行的轮次。 | `/acp cancel agent:codex:acp:` |
-| `/acp steer` | 向运行中的会话发送引导指令。 | `/acp steer --session support inbox prioritize 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 spawn` | 创建 ACP 会话;可选当前绑定或线程绑定。 | `/acp spawn codex --bind here --cwd /repo` |
+| `/acp cancel` | 取消目标会话中正在进行的轮次。 | `/acp cancel agent:codex:acp:` |
+| `/acp steer` | 向正在运行的会话发送引导指令。 | `/acp steer --session support inbox prioritize 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 status` 会显示生效中的运行时选项,以及运行时级别和
-后端级别的会话标识符。当某个后端缺少某项能力时,不支持控制的错误会清晰显示。`/acp sessions` 会为当前已绑定或请求方会话读取
-存储;目标令牌
-(`session-key`、`session-id` 或 `session-label`)会通过
-Gateway 网关会话发现机制解析,包括自定义的每智能体 `session.store`
-根目录。
+`/acp status` 会显示生效中的运行时选项,以及运行时级别和后端级别的会话标识符。当后端缺少某项能力时,不支持控制的错误会清楚显示。`/acp sessions` 会读取当前已绑定会话或请求方会话的存储;目标令牌(`session-key`、`session-id` 或 `session-label`)会通过 Gateway 网关会话发现来解析,包括自定义的按智能体划分的 `session.store` 根目录。
### 运行时选项映射
-`/acp` 提供便捷命令和一个通用设置器。等价
-操作如下:
+`/acp` 提供便捷命令和通用设置器。等价操作如下:
| 命令 | 映射到 | 说明 |
| ---------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `/acp model ` | 运行时配置键 `model` | 对于 Codex ACP,OpenClaw 会将 `openai-codex/` 规范化为适配器模型 id,并将斜杠推理后缀(例如 `openai-codex/gpt-5.4/high`)映射为 `reasoning_effort`。 |
-| `/acp set thinking ` | 运行时配置键 `thinking` | 对于 Codex ACP,在适配器支持时,OpenClaw 会发送对应的 `reasoning_effort`。 |
+| `/acp model ` | 运行时配置键 `model` | 对于 Codex ACP,OpenClaw 会将 `openai-codex/` 标准化为适配器模型 id,并将斜杠推理后缀(例如 `openai-codex/gpt-5.4/high`)映射为 `reasoning_effort`。 |
+| `/acp set thinking ` | 运行时配置键 `thinking` | 对于 Codex ACP,当适配器支持时,OpenClaw 会发送对应的 `reasoning_effort`。 |
| `/acp permissions ` | 运行时配置键 `approval_policy` | — |
| `/acp timeout ` | 运行时配置键 `timeout` | — |
| `/acp cwd ` | 运行时 `cwd` 覆盖 | 直接更新。 |
@@ -790,35 +704,35 @@ Gateway 网关会话发现机制解析,包括自定义的每智能体 `session
关于 acpx harness 配置(Claude Code / Codex / Gemini CLI
别名)、plugin-tools 和 OpenClaw-tools MCP 桥接,以及 ACP
-权限模式,请参见
+权限模式,请参阅
[ACP 智能体 — 设置](/zh-CN/tools/acp-agents-setup)。
## 故障排除
| 症状 | 可能原因 | 修复方法 |
| --------------------------------------------------------------------------- | ------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
-| `ACP runtime backend is not configured` | 后端插件缺失、被禁用,或被 `plugins.allow` 阻止。 | 安装并启用后端插件;如果设置了 `plugins.allow` allowlist,请将 `acpx` 包含在内,然后运行 `/acp doctor`。 |
+| `ACP runtime backend is not configured` | 后端插件缺失、被禁用,或被 `plugins.allow` 阻止。 | 安装并启用后端插件;如果设置了 `plugins.allow` allowlist,则将 `acpx` 加入其中;然后运行 `/acp doctor`。 |
| `ACP is disabled by policy (acp.enabled=false)` | ACP 已被全局禁用。 | 设置 `acp.enabled=true`。 |
-| `ACP dispatch is disabled by policy (acp.dispatch.enabled=false)` | 已禁用来自普通线程消息的自动分发。 | 设置 `acp.dispatch.enabled=true` 以恢复自动线程路由;显式的 `sessions_spawn({ runtime: "acp" })` 调用仍然可用。 |
+| `ACP dispatch is disabled by policy (acp.dispatch.enabled=false)` | 已禁用来自普通线程消息的自动分发。 | 设置 `acp.dispatch.enabled=true` 以恢复自动线程路由;显式的 `sessions_spawn({ runtime: "acp" })` 调用仍然有效。 |
| `ACP agent "" is not allowed by policy` | 智能体不在 allowlist 中。 | 使用允许的 `agentId`,或更新 `acp.allowedAgents`。 |
-| 启动后立刻运行 `/acp doctor` 报告后端未就绪 | 插件依赖探测或自修复仍在运行。 | 稍等片刻后重新运行 `/acp doctor`;如果仍然不健康,请检查后端安装错误以及插件 allow/deny 策略。 |
-| 找不到 harness 命令 | 适配器 CLI 未安装,或首次运行时的 `npx` 拉取失败。 | 在 Gateway 网关主机上安装/预热该适配器,或显式配置 acpx 智能体命令。 |
-| harness 报告找不到模型 | 该模型 id 对其他提供商/harness 有效,但对当前 ACP 目标无效。 | 使用该 harness 列出的模型,在 harness 中配置该模型,或省略该覆盖项。 |
-| harness 返回提供商认证错误 | OpenClaw 本身健康,但目标 CLI/提供商未登录。 | 在 Gateway 网关主机环境中登录,或提供所需的提供商密钥。 |
+| `/acp doctor` 在启动后立即报告后端未就绪 | 插件依赖探测或自我修复仍在运行。 | 稍等片刻后重新运行 `/acp doctor`;如果仍然不健康,请检查后端安装错误以及插件 allow/deny 策略。 |
+| 找不到 harness 命令 | 适配器 CLI 未安装,或首次运行时的 `npx` 获取失败。 | 在 Gateway 网关主机上安装/预热适配器,或显式配置 acpx 智能体命令。 |
+| harness 返回 model-not-found | 模型 id 对另一个 provider/harness 有效,但对当前 ACP 目标无效。 | 使用该 harness 列出的模型,在 harness 中配置模型,或省略该覆盖。 |
+| harness 返回供应商认证错误 | OpenClaw 状态正常,但目标 CLI/provider 尚未登录。 | 在 Gateway 网关主机环境中登录,或提供所需的 provider 密钥。 |
| `Unable to resolve session target: ...` | key/id/label 令牌错误。 | 运行 `/acp sessions`,复制准确的 key/label,然后重试。 |
-| `--bind here requires running /acp spawn inside an active ... conversation` | 在没有活动且可绑定会话的情况下使用了 `--bind here`。 | 移动到目标聊天/渠道后重试,或使用不绑定的启动方式。 |
+| `--bind here requires running /acp spawn inside an active ... conversation` | 在没有活跃可绑定会话的情况下使用了 `--bind here`。 | 切换到目标聊天/渠道后重试,或使用不绑定的启动方式。 |
| `Conversation bindings are unavailable for .` | 适配器缺少当前会话 ACP 绑定能力。 | 在支持时使用 `/acp spawn ... --thread ...`,配置顶层 `bindings[]`,或切换到受支持的渠道。 |
-| `--thread here requires running /acp spawn inside an active ... thread` | 在线程上下文之外使用了 `--thread here`。 | 移动到目标线程,或使用 `--thread auto`/`off`。 |
-| `Only can rebind this channel/conversation/thread.` | 当前绑定目标属于其他用户。 | 由所有者重新绑定,或使用其他会话或线程。 |
+| `--thread here requires running /acp spawn inside an active ... thread` | 在线程上下文之外使用了 `--thread here`。 | 切换到目标线程,或使用 `--thread auto`/`off`。 |
+| `Only can rebind this channel/conversation/thread.` | 另一个用户拥有当前活跃绑定目标。 | 由所有者重新绑定,或使用其他会话或线程。 |
| `Thread bindings are unavailable for .` | 适配器缺少线程绑定能力。 | 使用 `--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。 |
-| `Cannot apply --model ... did not advertise model support` | 目标 harness 未暴露通用 ACP 模型切换能力。 | 使用公布了 ACP `models`/`session/set_model` 的 harness,使用 Codex ACP 模型引用,或如果该 harness 有自己的启动标志,则直接在其中配置模型。 |
-| 已绑定会话缺少 ACP 元数据 | ACP 会话元数据已过期/被删除。 | 使用 `/acp spawn` 重新创建,然后重新绑定/聚焦线程。 |
-| `AcpRuntimeError: Permission prompt unavailable in non-interactive mode` | `permissionMode` 在非交互式 ACP 会话中阻止了写入/执行。 | 将 `plugins.entries.acpx.config.permissionMode` 设置为 `approve-all` 并重启 Gateway 网关。参见[权限配置](/zh-CN/tools/acp-agents-setup#permission-configuration)。 |
-| ACP 会话很早失败且输出很少 | 权限提示被 `permissionMode`/`nonInteractivePermissions` 阻止。 | 检查 Gateway 网关日志中的 `AcpRuntimeError`。如需完全权限,设置 `permissionMode=approve-all`;如需优雅降级,设置 `nonInteractivePermissions=deny`。 |
-| ACP 会话在完成工作后无限期卡住 | harness 进程已结束,但 ACP 会话未报告完成。 | 使用 `ps aux \| grep acpx` 监控;手动杀掉陈旧进程。 |
-| harness 看到了 `<<>>` | 内部事件 envelope 泄漏到了 ACP 边界之外。 | 更新 OpenClaw 并重新运行 completion 流程;外部 harness 应只接收纯 completion 提示。 |
+| `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。 |
+| `Cannot apply --model ... did not advertise model support` | 目标 harness 未暴露通用 ACP 模型切换能力。 | 使用声明了 ACP `models`/`session/set_model` 的 harness,使用 Codex ACP 模型引用,或如果 harness 有自己的启动标志,则直接在其中配置模型。 |
+| 已绑定会话缺少 ACP 元数据 | ACP 会话元数据已过期或被删除。 | 使用 `/acp spawn` 重新创建,然后重新绑定/聚焦线程。 |
+| `AcpRuntimeError: Permission prompt unavailable in non-interactive mode` | `permissionMode` 在非交互式 ACP 会话中阻止了写入/执行。 | 将 `plugins.entries.acpx.config.permissionMode` 设置为 `approve-all`,然后重启 Gateway 网关。请参阅[权限配置](/zh-CN/tools/acp-agents-setup#permission-configuration)。 |
+| ACP 会话很早失败且几乎没有输出 | 权限提示被 `permissionMode`/`nonInteractivePermissions` 阻止。 | 检查 Gateway 网关日志中的 `AcpRuntimeError`。若需完整权限,设置 `permissionMode=approve-all`;若要优雅降级,设置 `nonInteractivePermissions=deny`。 |
+| ACP 会话在完成工作后无限期卡住 | harness 进程已结束,但 ACP 会话未报告完成。 | 使用 `ps aux \| grep acpx` 监控;手动终止陈旧进程。 |
+| harness 看到了 `<<>>` | 内部事件信封泄漏到了 ACP 边界之外。 | 更新 OpenClaw 并重新运行完成流程;外部 harness 应只接收普通完成提示。 |
## 相关内容