Openclaw-skill-claude-code-setup use-claude-code
install
source · Clone the upstream repo
git clone https://github.com/rgzn7/openclaw-skill-claude-code-setup
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/rgzn7/openclaw-skill-claude-code-setup "$T" && mkdir -p ~/.claude/skills && cp -r "$T/use-claude-code" ~/.claude/skills/rgzn7-openclaw-skill-claude-code-setup-use-claude-code && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/rgzn7/openclaw-skill-claude-code-setup "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/use-claude-code" ~/.openclaw/skills/rgzn7-openclaw-skill-claude-code-setup-use-claude-code && rm -rf "$T"
manifest:
use-claude-code/SKILL.mdsource content
Use Claude Code
职责
本 skill 负责将适合 Claude Code 处理的任务委托给 Claude Code,并根据任务类型选择正确模式。
适合委托的任务类型:
- 编写、修改、调试代码
- 读写文件、目录操作
- 执行终端命令、脚本
- Git 操作
- 需要访问本地文件系统的任何任务
- 需要独立研究或长期协作的本地工程任务
核心原则
- 一次性研究模式 与 持续协作模式 是两种不同模式,不要混用。
- 两种模式的实现路径和回流机制完全不同:
- 研究模式:ACP run +
,结果直接回到当前会话(仅限有 parent session 的上下文)streamTo=parent - 持续协作模式:direct acpx(因为聊天渠道不支持线程绑定,ACP session/thread 路不通),结果通过 stop hook 回流
- 研究模式:ACP run +
- agentId 说明:ACP run 调用时用
(ACP harness 实际 id),不是"claude"
(OpenClaw agents.list 包装名)"claude-code"
两种推荐模式
模式 A:一次性研究模式
适用于:
- "让 Claude Code 研究一下这个问题"
- "让 Claude Code 看完后把结论带回来"
- "用 Claude Code 分析这个 bug,然后告诉我"
- 仅限从 OpenClaw agent 上下文内发起(有 parent session)
推荐调用:
{ "runtime": "acp", "agentId": "claude", "mode": "run", "thread": false, "streamTo": "parent" }
特点:
- Claude Code 在一次 run-mode ACP 子会话中完成任务
- 进度与结果通过标准 ACP parent-return 回到当前 OpenClaw 会话
- 从聊天渠道直接发起时无 parent session,此模式不适用,应改用持续协作模式
模式 B:持续协作模式
适用于:
- "开个 Claude Code 线程长期做"
- "给 Claude Code 一个独立会话继续做这个项目"
- "后面我还要继续跟它聊"
- 从聊天渠道(Telegram、QQBot 等)发起的任何长期协作
实现方式:direct acpx(ACP session/thread 因聊天渠道不支持线程绑定而不可用)
acpx claude sessions ensure --name <sessionName> echo "<用户消息>" | acpx claude prompt --session <sessionName> --file -
特点:
由 OpenClaw 维护,代管会话身份,全程保持不变sessionName- 每轮任务完成后,Claude Code 通过 stop hook 把结果推回发起渠道
- stop hook 是此模式的结果回流主链路
sessionName 命名规范
持续协作模式中,sessionName 必须以
开头,便于在 acpx session 列表中识别 OpenClaw 调起的会话。oc-
- ✅ 正确:
、oc-<userId>-<timestamp>oc-<openclawSessionId> - ❌ 错误:任何不以
开头的名称oc-
注意:stop.js hook 收到的是 Claude Code 内部的
(UUID),与 acpx 的session_id是不同字段,无法在 hook 里按 name 过滤。全量回调均会送达 OpenClaw。--session <name>
执行流程
阶段一:识别模式
收到用户请求后,先判断属于哪类:
选择一次性研究模式(需满足:从 agent 上下文发起,有 parent session):
- 分析一下 / 看看这个问题 / 跑一轮研究后把结论告诉我
选择持续协作模式(默认用于聊天渠道,或需要长期会话时):
- 开个 Claude Code 会话 / 线程 / 后面我要继续跟它聊 / 让它持续做这个项目
阶段二:一次性研究模式执行
- 用
启动 Claude Code runsessions_spawn(runtime="acp") - 带上:
agentId: "claude"mode: "run"streamTo: "parent"
- 告知用户:已交给 Claude Code 处理,结果会回当前会话
- 等待标准 ACP 回流结果
阶段三:持续协作模式执行
发起任务
- 确定本次对话的
(如已有则复用,否则新建,必须以sessionName
开头)oc- - 先确保 session 存在(幂等,已存在则复用):
- 当前实测
不支持acpx claude sessions ensure
参数--cwd - 若用户指定了项目目录
,应当先切到该目录再执行:<projectDir>cd <projectDir> && acpx claude sessions ensure --name <sessionName> - 否则:
acpx claude sessions ensure --name <sessionName>
- 当前实测
- 将用户需求原文写入 stdin,后台执行:
- 若用户指定了项目目录
:<projectDir>nohup sh -c 'cd <projectDir> && echo "<用户消息>" | acpx claude prompt --session <sessionName> --file -' > /tmp/acpx-<sessionName>.log 2>&1 & - 否则:
nohup sh -c 'echo "<用户消息>" | acpx claude prompt --session <sessionName> --file -' > /tmp/acpx-<sessionName>.log 2>&1 &
- 若用户指定了项目目录
- 命令发出后立即返回,告知用户:已交给 Claude Code,正在处理
处理 hook 回调
当收到 hook 事件时:
Stop 事件
- 取出
字段内容reply - 将
转发给用户reply - 等待用户下一条消息
SessionEnd 事件
- 若
:status: "completed"- 若
不为空,向用户展示总结summary - 告知用户 Claude Code 会话已结束
- 若
- 若
:status: "cleared"- 告知用户会话被清除,如需继续将以新
发起新会话sessionName
- 告知用户会话被清除,如需继续将以新
消息转发原则
一次性研究模式
- 允许 OpenClaw 用正常助手口吻把 Claude Code 的结果带回或转述给用户
- 不要求逐字原样转发,重点是保持结果语义正确、上下文可继续
持续协作模式
- 用户消息原文透传给 Claude Code
- Claude Code 的 reply 尽量原样转发
- 仅在必要时插入简短状态提示
错误处理
| 情况 | 处理方式 |
|---|---|
命令不存在 | 告知用户检查 acpx 是否已加入 PATH(参见 setup-claude-code skill) |
| CLI 未安装或不在 PATH,告知用户检查 Claude Code 安装 |
| direct acpx 进程被超时杀掉,检查是否用了后台执行() |
stop 回调中 为空 | 跳过,继续等待下一个事件 |
| 60 秒内无任何回调 | 提示用户 Claude Code 可能仍在处理,继续等待 |
| session_end 未收到 summary | 仅告知会话已结束,不强行总结 |