openclaw acp 通过 stdio 讲 ACP 协议,供 IDE 使用,并通过 WebSocket 将提示转发到 Gateway,同时将 ACP 会话映射到 Gateway 会话键。它是一个由 Gateway 支持的 ACP 桥接,而不是完整的原生 ACP 编辑器运行时:它专注于会话路由、提示传递和流式更新。
如果你希望外部 MCP 客户端直接与 OpenClaw channel 对话,而不是托管一个 ACP harness 会话,请改用 openclaw mcp serve。
这不是做什么
openclaw acp 意味着 OpenClaw 作为一个 ACP 服务器运行:一个 IDE 或 ACP 客户端连接到 OpenClaw,然后 OpenClaw 将该工作转发到一个 Gateway 会话中。
这与 ACP Agents 不同,在后者中,OpenClaw 通过 acpx 运行诸如 Codex 或 Claude Code 之类的外部 harness。
快速规则:
- 编辑器/客户端想通过 ACP 与 OpenClaw 通信:使用
openclaw acp - OpenClaw 应该启动 Codex/Claude/Gemini 作为 ACP harness:使用
/acp spawn和 ACP Agents
兼容性矩阵
已知限制
loadSession仅对由 bridge 创建的会话回放完整的 ACP 事件账本历史。较早的/无账本会话使用 transcript 回退方式,无法重建历史工具调用或系统通知。- 如果多个 ACP 客户端共享同一个 Gateway 会话密钥,事件和取消路由只能尽力而为,无法严格做到按客户端隔离。需要干净的编辑器本地轮次时,优先使用默认隔离的
acp-bridge:<uuid>会话。 - Gateway 的停止状态会转换为 ACP 停止原因,但这种映射不如完全原生的 ACP 运行时那样丰富。
- 会话控制只暴露 Gateway 参数中的一个聚焦子集:思考级别、工具详细程度、推理、使用详情和提升操作。模型选择和 exec-host 控制不会作为 ACP 配置选项暴露出来。
session_info_update和usage_update来源于 Gateway 会话快照,而不是实时的 ACP 原生运行时计量。用量是近似值,不包含成本数据,并且只有在 Gateway 标记总 token 数据为最新时才会发出。- 工具跟随数据属于尽力而为:bridge 会暴露在已知工具参数/结果中出现的文件路径,但不会发出 ACP 终端或结构化文件差异。
- 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,并通过 stdio 结合 ACP JSON-RPC 客户端驱动openclaw acp。覆盖 initialize、session/new、带有绝对 cwd 的 session/list、session/resume、session/close、重复关闭以及缺失恢复。
证明材料应包含所宣告的生命周期能力、一个由 Gateway 支持的会话行、更新通知,以及 Gateway 的 sessions.list 日志:
openclaw gateway call sessions.list 作为唯一的 ACP 证明。该 CLI 路径可能会请求一次 fresh-token operator scope 升级;ACP bridge 的正确性应通过 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-bridge:<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 bot 交互,请使用带有内置 openclaw 目标的 acpx。
典型流程:
- 运行 Gateway,并确保 ACP bridge 可以访问它。
- 将
acpx openclaw指向openclaw acp。 - 指定你希望编码代理使用的 OpenClaw 会话键。
acpx openclaw 每次都指向特定的 Gateway 和会话键,可以在 ~/.acpx/config.json 中覆盖 openclaw 代理命令:
validate=false
Zed 编辑器设置
在~/.config/zed/settings.json 中添加一个自定义 ACP agent(或使用 Zed 的设置界面):
会话映射
默认情况下,ACP bridge 会话会获得一个带有acp-bridge: 前缀的隔离 Gateway 会话键。这些普通模型 bridge 会话是合成的且可丢弃:它们会受到过期条目清理的影响,并且不被视为受保护的人工对话界面。若要复用一个已知会话,请传入会话键或标签:
--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 provenance 元数据或收据。--verbose, -v:将详细日志输出到 stderr。
--token和--password在某些系统上可能会在本地进程列表中可见。建议优先使用--token-file/--password-file或环境变量(OPENCLAW_GATEWAY_TOKEN、OPENCLAW_GATEWAY_PASSWORD)。- Gateway 认证解析遵循其他 Gateway 客户端使用的共享契约:
- 本地模式:先查找
gateway.auth.*,然后是环境变量(OPENCLAW_GATEWAY_*);仅当gateway.auth.*未设置时才回退到gateway.remote.*(已配置但未解析的本地 SecretRef 会直接失败,而不会静默回退) - 远程模式:
gateway.remote.*,并按远程优先级规则进行环境/配置回退 --url可安全覆盖配置,不会复用隐式配置/环境凭据;请显式传入--token/--password(或其文件版本)
- 本地模式:先查找
acp client 选项
--cwd <dir>:ACP 会话的工作目录。--server <command>:ACP 服务器命令(默认:openclaw)。--server-args <args...>:传递给 ACP 服务器的额外参数。--server-verbose:启用 ACP 服务器上的详细日志。--verbose, -v:详细的客户端日志。openclaw acp client会在启动的桥接进程上设置OPENCLAW_SHELL=acp-client,可用于特定上下文的 shell/profile 规则。