openclaw acp 是一个由 Gateway 支持的 ACP 桥接,不是完整的 ACP 原生编辑器运行时。
它专注于会话路由、提示传递以及基础的流式更新。
如果你希望外部 MCP 客户端直接与 OpenClaw 通道对话,而不是托管一个 ACP harness 会话,请改用
openclaw mcp serve。
这不是做什么
这一页经常与 ACP harness 会话混淆。openclaw acp 的含义是:
- OpenClaw 作为 ACP 服务器
- IDE 或 ACP 客户端连接到 OpenClaw
- OpenClaw 将该工作转发到 Gateway 会话中
acpx 运行
诸如 Codex 或 Claude Code 之类的外部 harness。
快速规则:
- 编辑器/客户端想通过 ACP 与 OpenClaw 通信:使用
openclaw acp - OpenClaw 应该启动 Codex/Claude/Gemini 作为 ACP harness:使用
/acp spawn和 ACP Agents
兼容性矩阵
| ACP area | Status | Notes |
|---|---|---|
initialize, newSession, prompt, cancel | 已实现 | 通过 stdio 到 Gateway chat/send + abort 的核心桥接流程。 |
listSessions, slash commands | 已实现 | 会话列表针对 Gateway 会话状态工作,支持有限游标分页和 cwd 过滤;当 Gateway 会话行携带工作区元数据时;命令通过 available_commands_update 进行通告。 |
| Session lineage metadata | 已实现 | 会话列表和会话信息快照会在 _meta 中包含 OpenClaw 父/子谱系,因此 ACP 客户端无需私有 Gateway 侧通道即可渲染子代理图。 |
resumeSession, closeSession | 已实现 | 恢复会将一个 ACP 会话重新绑定到现有 Gateway 会话,而不会回放历史。关闭会取消当前桥接工作,将待处理提示解析为已取消,并释放桥接会话状态。 |
loadSession | 部分支持 | 将 ACP 会话重新绑定到 Gateway 会话键,并为桥接创建的会话回放 ACP 事件账本历史。较旧/无账本的会话会回退到存储的用户/助手文本。 |
提示内容(text、嵌入式 resource、图片) | 部分支持 | 文本/资源会被展平为聊天输入;图片会成为 Gateway 附件。 |
| 会话模式 | 部分支持 | 支持 session/set_mode,并且桥接会暴露由 Gateway 支持的初始会话控制项,包括思考级别、工具详细程度、推理、使用详情和提升权限操作。更广泛的 ACP 原生模式/配置界面仍不在范围内。 |
| 会话信息和使用量更新 | 部分支持 | 桥接会从缓存的 Gateway 会话快照发出 session_info_update 和尽力而为的 usage_update 通知。使用量是近似值,并且仅在 Gateway 将 token 总数标记为最新时发送。 |
| 工具流式输出 | 部分支持 | 当 Gateway 工具参数/结果暴露原始 I/O、文本内容以及尽力而为的文件位置时,tool_call / tool_call_update 事件会包含这些信息。嵌入式终端和更丰富的、原生 diff 输出仍未暴露。 |
| Exec approvals | 部分支持 | 活跃 ACP 提示轮次中的 Gateway exec 审批提示会通过 session/request_permission 转发给 ACP 客户端。 |
每会话 MCP 服务器(mcpServers) | 不支持 | 桥接模式会拒绝每会话 MCP 服务器请求。请在 OpenClaw Gateway 或 agent 侧配置 MCP。 |
客户端文件系统方法(fs/read_text_file, fs/write_text_file) | 不支持 | 桥接不会调用 ACP 客户端文件系统方法。 |
客户端终端方法(terminal/*) | 不支持 | 桥接不会创建 ACP 客户端终端,也不会通过工具调用流式传递终端 id。 |
| 会话计划 / 思考流式输出 | 不支持 | 桥接当前输出的是文本和工具状态,而不是 ACP 计划或思考更新。 |
已知限制
loadSession仅能为桥接创建的会话回放完整的 ACP 事件账本历史。较旧/无账本的会话仍会使用转录回退,并且不会重建历史工具调用或系统通知。- 如果多个 ACP 客户端共享同一个 Gateway 会话键,事件和取消路由最多只是尽力而为,而不是严格按客户端隔离。需要干净的编辑器本地轮次时,请优先使用默认隔离的
acp:<uuid>会话。 - Gateway 停止状态会被转换为 ACP 停止原因,但这种映射不如完整的 ACP 原生运行时那样具有表现力。
- 初始会话控制项当前只暴露了 Gateway 按钮的一部分:思考级别、工具详细程度、推理、使用详情和提升权限操作。模型选择和 exec-host 控制尚未作为 ACP 配置选项暴露。
session_info_update和usage_update取自 Gateway 会话快照,而不是实时的 ACP 原生运行时记账。使用量是近似值,不包含成本数据,并且仅在 Gateway 将总 token 数据标记为最新时发出。- 工具跟随数据是尽力而为的。桥接可以暴露出已知工具参数/结果中出现的文件路径,但目前还不会发出 ACP 终端或结构化文件 diff。
- Exec 审批转发仅限于当前活跃的 ACP 提示轮次;来自其他 Gateway 会话的审批会被忽略。
用法
ACP 客户端(调试)
使用内置的 ACP 客户端在不依赖 IDE 的情况下快速检查桥接是否正常。 它会启动 ACP 桥接,并允许你交互式输入提示。- 自动批准基于允许列表,并且只适用于受信任的核心工具 ID。
read的自动批准仅限于当前工作目录范围内(设置了--cwd时以其为准)。- ACP 仅自动批准狭义的只读类别:活动 cwd 下范围内的
read调用,以及只读搜索工具(search、web_search、memory_search)。未知/非核心工具、超出范围的读取、可执行工具、控制平面工具、会修改状态的工具以及交互式流程始终需要显式的提示批准。 - 服务器提供的
toolCall.kind会被视为不受信任的元数据(不是授权来源)。 - 该 ACP 桥接策略独立于 ACPX harness 权限。如果你通过
acpx后端运行 OpenClaw,plugins.entries.acpx.config.permissionMode=approve-all是该 harness 会话的“破玻璃”式“yolo”开关。
协议冒烟测试
对于协议级调试,请启动一个带隔离状态的 Gateway,并通过 ACP JSON-RPC 客户端在 stdio 上驱动openclaw acp。覆盖 initialize、
session/new、带绝对 cwd 的 session/list、session/resume、
session/close、重复关闭以及缺失的恢复。
证明应包含所通告的生命周期能力、一个由 Gateway 支持的
会话行、更新通知,以及 Gateway 的 sessions.list 日志:
openclaw gateway call sessions.list 作为唯一的 ACP 证明。该
CLI 路径可能会请求一个新的 token 运维范围升级;ACP 桥接
正确性应通过 ACP stdio 帧以及 Gateway 的 sessions.list 日志来证明。
如何使用
当某个 IDE(或其他客户端)使用 Agent Client Protocol 进行通信,并且你希望它驱动一个 OpenClaw Gateway 会话时,请使用 ACP。- 确保 Gateway 正在运行(本地或远程)。
- 配置 Gateway 目标(配置或标志)。
- 让你的 IDE 通过 stdio 运行
openclaw acp。
选择 agent
ACP 不会直接选择 agent。它是按 Gateway 会话键进行路由的。 使用按 agent 作用域划分的会话键来定位特定 agent:acp:<uuid> 会话,除非你覆盖
该键或标签。
桥接模式不支持每会话 mcpServers。如果 ACP 客户端在 newSession 或 loadSession 期间发送它们,
桥接会返回清晰的错误,而不是静默忽略。
如果你希望基于 ACPX 的会话看到 OpenClaw 插件工具或某些
内置工具(例如 cron),请启用 gateway 侧的 ACPX MCP 桥接,
而不是尝试传递每会话 mcpServers。请参阅
ACP Agents 和
OpenClaw tools MCP bridge。
从 acpx 使用(Codex、Claude 及其他 ACP 客户端)
如果你想让像 Codex 或 Claude Code 这样的编码代理通过 ACP 与你的
OpenClaw 机器人通信,请使用带有内置 openclaw 目标的 acpx。
典型流程:
- 运行 Gateway,并确保 ACP bridge 可以访问它。
- 将
acpx openclaw指向openclaw acp。 - 指定你希望编码代理使用的 OpenClaw 会话键。
acpx openclaw 每次都指向特定的 Gateway 和会话键,
请在 ~/.acpx/config.json 中覆盖 openclaw 代理命令:
Zed 编辑器设置
在~/.config/zed/settings.json 中添加一个自定义 ACP agent(或使用 Zed 的设置界面):
会话映射
默认情况下,ACP 会话会获得一个带有acp: 前缀的独立 Gateway 会话键。
要复用已知会话,请传入会话键或标签:
--session <key>:使用特定的 Gateway 会话键。--session-label <label>:通过标签解析现有会话。--reset-session:为该键生成一个新的会话 id(相同的键,新的记录)。
选项
--url <url>:Gateway WebSocket URL(在已配置时默认为 gateway.remote.url)。--token <token>:Gateway 认证令牌。--token-file <path>:从文件读取 Gateway 认证令牌。--password <password>:Gateway 认证密码。--password-file <path>:从文件读取 Gateway 认证密码。--session <key>:默认会话键。--session-label <label>:默认要解析的会话标签。--require-existing:如果会话键/标签不存在则失败。--reset-session:在首次使用前重置会话键。--no-prefix-cwd:不要在提示前加上工作目录前缀。--provenance <off|meta|meta+receipt>:包含 ACP 溯源元数据或收据。--verbose, -v:将详细日志输出到 stderr。
- 在某些系统上,
--token和--password可能会在本地进程列表中可见。 - 建议优先使用
--token-file/--password-file或环境变量(OPENCLAW_GATEWAY_TOKEN、OPENCLAW_GATEWAY_PASSWORD)。 - Gateway 认证解析遵循其他 Gateway 客户端使用的共享约定:
- 本地模式:env(
OPENCLAW_GATEWAY_*)->gateway.auth.*-> 仅在gateway.auth.*未设置时回退到gateway.remote.*(已配置但未解析的本地 SecretRefs 会关闭失败) - 远程模式:
gateway.remote.*,并按照远程优先级规则回退到 env/config --url可安全覆盖,并且不会复用隐式配置/env 凭据;请传入显式的--token/--password(或文件变体)
- 本地模式:env(
- ACP 运行时后端子进程会接收
OPENCLAW_SHELL=acp,可用于基于上下文的 shell/profile 规则。 openclaw acp client会在启动的 bridge 进程上设置OPENCLAW_SHELL=acp-client。
acp client 选项
--cwd <dir>:ACP 会话的工作目录。--server <command>:ACP 服务器命令(默认:openclaw)。--server-args <args...>:传递给 ACP 服务器的额外参数。--server-verbose:在 ACP 服务器上启用详细日志。--verbose, -v:详细的客户端日志。