ACP Claude Code 集成

通过 ACP 从 OpenClaw 中 spawn Claude Code 实例,实现从聊天界面调用 Claude Code 编程能力。

最终成功配置

  • ~/.acpx/config.json → claude override 指向 proxy 脚本
  • ~/.acpx/claude-proxy.sh → 调用 claude-agent-acpnpx -y @zed-industries/claude-agent-acp)+ 设置 ANTHROPIC_BASE_URL=http://127.0.0.1:4819 走本地代理
  • Clawline 插件 → 已补上 resolveInboundConversation(见 clawline-thread-support
  • Spawn 方式sessions_spawn(runtime: "acp", thread: true)
  • 工作目录/Users/leway/Projects/clawline

踩坑记录

1️⃣ 适配器脚本错误

  • claude-proxy.shclaude --bare(普通 CLI),收到 ACP JSON-RPC 握手直接当问题回答
  • ✅ 改成调用 claude-agent-acp

2️⃣ API 余额问题

  • ❌ 删掉 config override 后走了 Anthropic 官方 API,余额不够
  • ✅ proxy 脚本保留 ANTHROPIC_BASE_URL=http://127.0.0.1:4819 走本地 copilot-anthropic-proxy

3️⃣ Clawline thread binding

  • ❌ clawline 插件缺少 resolveInboundConversation,ACP spawn 报 thread_binding_invalid
  • ✅ 补上方法后重启 gateway 生效

4️⃣ agentId 提取失败

  • ❌ ACP 子代理完成后 clawline outbound 无法提取 agentId → 消息发不出去
  • ✅ 新增多策略 fallback + 兜底返回 ‘main’

5️⃣ bashrc 非交互式 guard 吞掉 ANTHROPIC env(2026-04-26)

  • 症状~/.bashrc 已写入 ANTHROPIC_BASE_URL=http://127.0.0.1:4819 + ANTHROPIC_API_KEY,但 ACP claude-code-test spawn 0 token 立即失败(“Internal error” / “Not logged in”)
  • 根因~/.bashrc 顶部有 case $- in *i*) ;; *) return;; esac — 非交互式 shell 直接 return,后面的 export 全部跳过。ACP 子进程用的是非交互式 shell,env 注入失效
  • 修法:把那两行 export 移到 ~/.profile,或放到 bashrc 的 guard 之前;手动 export 后 spawn 直接成功(中文回复正常 ✅)
  • 教训:以后 Claude Code 子进程相关的 env 一律放 ~/.profile 而非 ~/.bashrc

6️⃣ CLI 老版本硬编码 thinking.type: enabled → 4.7/4.6 模型 400(2026-05-09 ottor-laptop)

  • 症状claude --model claude-opus-4.7 --effort high -p ...HTTP 400: "thinking.type.enabled" is not supported for this model. Use "thinking.type.adaptive" and "output_config.effort"。换 claude-sonnet-4.6 同错。一开始误以为 --effort 不被新模型接受 → 错怪 effort
  • 根因:装的是 Claude Code CLI 2.1.114,CLI 内部硬编码往请求里塞 thinking.type: "enabled",但 Opus 4.7 / Sonnet 4.6 这批新模型只接受 adaptiveclaude --help 里只暴露 --effort,没暴露 thinking.type 开关
  • 修法:升级 CLI 到 2.1.138claude updatenpm i -g @anthropic-ai/claude-code@latest),新版按模型自动切 adaptive。升级后同 prompt 重跑 4.7 直接 exit 0
  • 教训:模型相关 400 报错优先看 CLI 版本而不是怀疑 flag;新模型支持需要 CLI 同步升级

Claude Code 运行环境(fires 机器)

04-13 检查发现 4 个活跃 Claude Code 实例:

  • clawline/browser-agent CLI × 2
  • ralph-coding VSCode
  • clawline CLI(40 个 subagent 历史,闲置等待指令)

全局设置:全权限 allow: ["*"]claude-opus-4-6[1m]、Chinese、max effort。

04-16 最新状态

ACP thread 功能正常,测试通过。

Hermes 侧 delegate_task(acp_command=“claude”)(04-13)

Hermes Agent 通过 delegate_task(acp_command="claude") 直接调起 Claude Code 子进程做编码任务。相关 PR:#8241。

当前流程:

  1. delegate_tool.py 检测到 acp_command → 路由到 CopilotACPClient
  2. claude -p "<task>" 启动子进程,走本地 copilot-anthropic-proxy 用 Copilot token
  3. 子进程退出后 Hermes 拿到 stdout JSON,提取 session_id

会话续接: claude -p "<task>" --resume <session_id> 已验证可加载历史对话上下文,等同于多轮会话;Hermes 可自行存 session_id 复用。

踩坑(同步到 hermes-agent-setup):

  • --resume 模式下 stdin 卡死 → 必须 < /dev/null
  • 默认 --max-turns 20 容易 error_max_turns,建议 ≥80
  • notify_on_complete 长跑可能丢通知,要主动 poll
  • 同目录两个 Opus 并发会改冲突
  • 用 Claude Code 改 Copilot Proxy 自己 → 死循环风险(systemd 进程未 restart 反而救场)

相关页面