创作:OpenClaw × Anton
导语
有时候把开发任务交给 Claude Code 就离开了做别的了,回来发现它执行个三五步就停了,不是等你给权限就是问"您看这样可以吗?",哪怕你提前写好了完整的实施计划,它还是会中途停下来等你确认。
要是能让 OpenClaw 使用 Claude Code 进行开发,让小龙虾监督它持续工作直到完全实施完成就好了。
于是我折腾了一整天,试了四种方案,踩了无数个坑,终于打通了这条链路:在飞书里提需求→OpenClaw 自动拆解任务→Claude Code 持续执行→完成后发起 PR 通知验收。中间完全不需要人工介入。
最爽的是,整个过程 Claude Code 始终在同一个会话里,上下文是连续的,它记得之前做了什么,不会出现"我是谁我在哪"的情况。
如果你也想让 AI 真正帮你托管开发,而不是"挤牙膏式"的一轮一轮做,这篇文章就是为你写的。

一、为什么不让 OpenClaw 直接开发?
我试过让 OpenClaw 直接开发,但他对项目的工程级上下文能力还是很欠缺,Claude Code 则有几个不可替代的优势:
第一,它有成熟的项目上下文持续集成优化机制,以项目维度划分工作区,对项目的技术架构、业务逻辑的理解能持续积累。
第二,它是专门为 coding 设计的 agent,工具链更完善,写代码的手感更好。
第三,长期迭代时,Claude Code 能记住之前的决策和改动,不会每次都从零开始。
所以我的目标很明确:用 OpenClaw 当"技术 PM"负责任务拆解和调度,用 Claude Code 当"执行工程师"负责写代码。
在飞书里跟机器人说一声"帮我开发个用户注册功能",然后该干嘛干嘛去。等 OpenClaw 通知我"做完了,PR 已发起",我去验收一下就行。中间不需要我反复确认、反复给指令。
二、架构设计:OpenClaw 当 PM,Claude Code 当工程师
想清楚分工后,架构就清晰了:
scss
飞书用户 → OpenClaw(调度层) → Claude Code(执行层)
飞书是入口,随时随地提需求,不用打开 IDE。
OpenClaw是技术 PM,负责理解需求、拆解任务、调度执行、整合结果。它有 LLM 能力,能跟人自然语言沟通,也能调用各种工具。
Claude Code是执行工程师,负责具体的编码工作。它专业、高效,而且能持续积累项目上下文。
关键设计点:
OpenClaw 通过 exec 命令调用 acpx claude,每 5-10 秒轮询一次输出,识别到"Claude complete"标记就知道任务完成了。如果 Claude Code 遇到问题停下来,OpenClaw 能基于对需求的理解自主决策,告诉它下一步该做什么。只有遇到权限等重大问题时,才会问我。
这样一来,整个链路就活了。

三、核心难点:持续会话是成败关键
整个链路最难的地方,不是配置环境,不是写调度逻辑,而是保持同一个 Claude Code 会话。
为什么这个这么重要?
因为 Claude Code 的上下文记忆是绑定在 session 上的。如果每次调用都是新 session,它就完全不记得之前做了什么,相当于每次都要从零开始。这样的话,OpenClaw 的调度就失去了意义------它得把之前的对话历史重新讲一遍,效率极低。
我卡在这里整整一天。
试了很多种办法,一开始用官方推荐的 OpenClaw ACP 方式,配置了半天,一会儿是这个参数不对,一会儿是那个接口报错。最烦的是,很多配置问题 OpenClaw 自己也排查不到,问它吧,它还可能说谎------工具调用的输入输出有点黑盒,看不到真实证据。
后来我学聪明了,每改一次配置就让 OpenClaw 提供调用工具的真实日志,这才慢慢摸清楚问题在哪。
四、踩坑排查:四种方案对比
我把尝试过的方案整理成表格,一目了然:
| 方案 | 会话复用 | OpenClaw 调度 | 流式输出 | 状态 |
|---|---|---|---|---|
| ACP + resumeSessionId | ❌ | ✅ | ✅ | 失败 |
| ACP + /acp steer | ✅ | ❌ | ❌ | 可用但不推荐 |
| acpx claude -s | ✅ | ❌ | ✅ | 可用但无调度 |
| Agent + exec acpx | ✅ | ✅ | ✅ | 推荐 |
方案一:ACP + resumeSessionId(失败)
官方文档说用 sessions_spawn 加上 resumeSessionId 参数就能复用会话。我配了半天,发现每次都是新会话。
后来仔细研究才发现,resumeSessionId 是 OpenClaw ACP 会话的 ID,不是 Claude Code 的 session ID。复用 OpenClaw 的会话 ID 根本维持不了同一个 Claude 会话。这个参数有点鸡肋,可能在 thread 和 mode=session 下才有用。
方案二:ACP + /acp steer(可用但不推荐)
这个方案能复用会话,但有个致命问题:/acp 指令只能人为发送给 OpenClaw,它自己不能执行。也就是说,每一条指令都需要我手动发布,那直接用 Claude Code 不香吗?
这个方案解决不了核心需求:Claude Code 中断时,OpenClaw 自主决策继续调度。
方案三:acpx claude -s(可用但无调度)
直接用 acpx claude -s 会话名 确实能复用会话,而且很简单直接。但问题是不经过 OpenClaw,无法发挥它的任务拆解和调度能力。
这就相当于绕过了 PM,直接跟工程师对话。简单任务还行,复杂任务就抓瞎了。
方案四:Agent + exec acpx(完美)
最终方案:OpenClaw Agent 通过 exec 调用 acpx claude -s 会话名。
这个方案兼顾了所有需求:
- OpenClaw 可以调度(拆解任务、整合结果)
- acpx claude 持续会话(-s 参数)
- 支持流式输出(--format json + 定期 poll)
- 用户体验好(自动执行,不需要手动指令)

五、最终方案详解
架构
markdown
用户(飞书)
↓
OpenClaw Agent(任务调度层)
- 理解需求(LLM)
- 拆解任务
- exec 调用 acpx claude
- 整合结果
↓
acpx claude(执行层)
- 持续会话(-s <name>)
- 执行编码任务
- NDJSON 流式输出
关键配置
1. 安装依赖
bash
# 安装 Claude Code CLI
npm install -g @anthropic-ai/claude-code
# 安装 acpx CLI(必须)
npm install -g acpx
# 验证安装
claude --version
acpx --version
2. 配置 Claude Code(核心!)
这是最关键的一步,很多人(包括我)都卡在这里。
为什么必须配置 ~/.claude/settings.json?因为 claude-agent-acp 调用 Claude Code CLI 时,环境变量可能不传递。Claude Code CLI 优先读取配置文件中的 model 字段。
bash
# 手动编辑 ~/.claude/settings.json
{
"model": "qwen3.5-plus"
}
注意是 model 字段,不是 Anthropic_model。我用环境变量配了半天没生效,最后发现得改配置文件。

可选的环境变量(用于认证):
bash
export ANTHROPIC_BASE_URL="https://coding.dashscope.aliyuncs.com/apps/anthropic"
export ANTHROPIC_API_KEY="sk-xxx"
3. OpenClaw 配置
最终方案不需要 OpenClaw acpx 插件,因为直接调用 acpx CLI。但为了其他功能,可以保留基础配置:
json
{
"tools": {
"sessions": { "visibility": "all" },
"agentToAgent": { "enabled": true, "allow": ["*"] }
}
}
4. 重启 Gateway
bash
openclaw gateway restart
会话复用
bash
# 创建会话
acpx claude sessions new --name output-manager
# 测试复用
acpx claude -s output-manager "收到请回复数字 11"
# → 输出:11
acpx claude -s output-manager "上一个数字 +2 等于多少"
# → 输出:13 ✅ 成功复用
流式输出
bash
acpx --format json claude -s output-manager "回复数字 11"
输出 NDJSON 格式,每行一个事件。OpenClaw 每 5-10 秒 poll 一次,解析 thinking 和 message 字段,实时发送给用户。
结束判断
Claude Code 执行结束会有一个"Claude complete"的标记语,识别到这个就知道任务完成了。
六、拿走即用
快速开始
1. 安装
bash
npm install -g @anthropic-ai/claude-code
npm install -g acpx
2. 配置
bash
# 编辑 ~/.claude/settings.json
{
"model": "qwen3.5-plus"
}
3. 创建会话
bash
acpx claude sessions new --name my-project
4. 验证
bash
# 第一轮
acpx claude -s my-project "收到请回复 11"
# 第二轮(验证上下文)
acpx claude -s my-project "上一个数字 +2 等于多少"
# 应该输出 13

开源计划
我已经把这套方案封装成了 skill,整理好会开源。到时候可以直接安装使用,不用自己从头配置。
写在最后
虽然现在只能用 exec 方案,有点"曲线救国"的意思,但已经能达到托管开发的目的。如果未来飞书能支持 thread,OpenClaw ACP 能丰富能力,我还是更希望用原生的 ACP 方式------那样等同一个 agent 会话,有 session 记录文件,很方便追溯完整对话过程,可靠性和便捷性都更高。
但在那之前,这个方案已经足够好用了。
创作 :OpenClaw × Anton
创作时间:约 2 小时(素材收集 1 小时 + 写作 1 小时)