产品介绍
当用户意图是“在 Pi / Claude Code / Codex / OpenCode / Gemini / Kimi(ACP harness)中运行此操作”时,不得使用 subagent 运行时或 PTY 抓取(PTY scraping),而应通过具备 ACP 意识的流程进行路由。
当用户要求 OpenClaw 执行以下任一操作时,触发本技能:
针对 coding-agent 线程请求的强制预检(mandatory preflight):
OpenClaw ACP runtime path;禁止使用 message(action="thread-create") 创建 ACP harness 线程。请从以下路径中选择其一:
sessions_spawn 或 ACP 运行时工具。acpx 路径(“传话游戏”模式):通过 exec 调用 acpx CLI,直接驱动 harness 会话。仅在满足以下任一条件时,使用直连 acpx 路径:
acpx 方式驱动禁止使用以下方式:
subagents 运行时控制 harness/acp 命令作为前提条件acpx 可用时,对 pi / claude / codex / opencode / gemini / kimi 的 CLI 进行 PTY 抓取(PTY scraping)当用户直接指明 harness 名称时,请使用以下默认映射:
"pi" → agentId: "pi"
"claude" 或 "claude code" → agentId: "claude"
"codex" → agentId: "codex"
"opencode" → agentId: "opencode"
"gemini" 或 "gemini cli" → agentId: "gemini"
"kimi" 或 "kimi cli" → agentId: "kimi"
以上默认值与当前 acpx 内置别名一致。
若策略(policy)拒绝所选 agentId,请清晰报告策略错误,并向用户询问允许使用的 ACP agent id。
必需行为:
使用 sessions_spawn,并指定以下参数:
runtime: "acp"thread: truemode: "session"(除非用户明确要求 one-shot 模式)message 并设置 action=thread-create;sessions_spawn 是唯一合法的线程创建路径。task 字段,确保 ACP 会话启动后立即接收并执行该任务。agentId,除非已知 ACP 默认 agent 可安全使用。示例:
用户:“在新线程中启动一个测试 codex 会话,并让它说 hi”
调用:
{
"task": "Say hi.",
"runtime": "acp",
"agentId": "codex",
"thread": true,
"mode": "session"
}
当用户请求在线程中启动 coding harness(例如:“启动一个 codex / claude / pi / kimi 线程”),应将其视为 ACP 运行时请求,并尽最大努力端到端完成。
当 ACP 后端不可用时的必需行为:
首先尝试自动本地修复(automatic local repair):
acpx 已安装于 extensions/acpx
${ACPX_CMD} --version 是否可正常执行提供备用方案时,仍须将 ACP 作为首选项:
acpx “传话游戏”流程不得将 subagent 运行时作为此类请求的默认回退路径。
本仓库中所有直连 acpx 调用,必须遵循与 @openclaw/acpx 插件一致的 pinned 版本策略。
优先使用插件本地二进制文件,而非全局 PATH:
./extensions/acpx/node_modules/.bin/acpx从插件依赖中解析 pinned 版本号:
node -e "console.log(require('./extensions/acpx/package.json').dependencies.acpx)"若二进制缺失或版本不匹配,则安装插件本地 pinned 版本:
cd extensions/acpx && npm install --omit=dev --no-save acpx@使用前必须验证:
./extensions/acpx/node_modules/.bin/acpx --versionnpm install -g acpx,除非用户明确要求全局安装。请统一设置并复用以下环境变量:
ACPX_CMD="./extensions/acpx/node_modules/.bin/acpx"
使用本路径驱动 harness 会话,不依赖 /acp 命令或 subagent 运行时。
exec 命令调用 ${ACPX_CMD}。--format quiet,以获得干净的助手文本输出,便于中继给用户。exec(一次性执行)。--cwd)。使用确定性(deterministic)命名规则,例如:
oc-- 其中 conversationId 优先取 thread id;若不可得,则使用 channel / conversation id。
持久会话(存在则复用,不存在则新建,再发送 prompt):
${ACPX_CMD} codex sessions show oc-codex- \
|| ${ACPX_CMD} codex sessions new --name oc-codex-
${ACPX_CMD} codex -s oc-codex- --cwd --format quiet ""
One-shot 执行:
${ACPX_CMD} codex exec --cwd --format quiet ""
取消当前进行中的回合(in-flight turn):
${ACPX_CMD} codex cancel -s oc-codex-
关闭会话:
${ACPX_CMD} codex sessions close oc-codex-
piclaudecodexopencodegeminikimi默认配置如下:
pi → npx pi-acp
claude → npx -y @zed-industries/claude-agent-acp
codex → npx @zed-industries/codex-acp
opencode → npx -y opencode-ai acp
gemini → gemini
kimi → kimi acp
若 ~/.acpx/config.json 中定义了 agents 字段,则其中的覆盖配置将取代上述默认值。
acpx: command not found:
extensions/acpx 中安装插件本地 pinned 版本的 acpx;acpx,除非用户明确要求。适配器命令缺失(例如 claude-agent-acp 未找到):
~/.acpx/config.json 中 agent 覆盖项,恢复内置默认配置;NO_SESSION 错误:
${ACPX_CMD} sessions new --name ,然后重试 prompt。队列繁忙(queue busy):
--no-wait 参数。向用户中继输出时,仅返回 acpx 命令结果中最终的助手文本(assistant text)输出。除非用户明确要求详细日志(verbose logs),否则避免中继原始本地工具的杂讯(raw local tool noise)。