HumanLayer Skills:OpenCode 接入指南与响应提取实战技巧
【免费下载链接】skills项目地址: https://gitcode.com/GitHub_Trending/skills53/skills
HumanLayer Skills 是一套面向AI 编程代理的开源技能包,让编码代理(如 OpenCode、Claude Code、Codex)以控制循环方式自动检测问题、修改代码并提交 PR。本指南带你完成 OpenCode 的 CI 接入,并掌握各家代理的响应提取技巧。
项目快速上手
HumanLayer Skills 包含 4 个开箱即用的技能插件,覆盖从代码审查到自动化工作流的完整链路:
| 技能 | 用途 | 入口文件 |
|---|---|---|
| improve-claude-md | 用<important if>块重写 CLAUDE.md,提升指令遵循率 | SKILL.md |
| narrow-react-prop-types | 收窄 React 组件 Prop 类型至真实代码路径 | SKILL.md |
| design-control-loop | 设计并构建"感知-控制-执行"循环 | SKILL.md |
| show-me | 用图表和 HTML 可视化解释当前话题 | SKILL.md |
安装任意技能只需一行命令:
npx skills add humanlayer/skills --skill <skill-name>💡 更多安装说明见 README.md。
OpenCode 接入控制循环:3 步搞定
design-control-loop技能支持 4 种编码代理:Claude Code、Codex、OpenCode、CodeLayer。下面以 OpenCode 为例,展示如何将其接入 CI 工作流。
为什么选择 OpenCode?
OpenCode 是开源的 AI 编程代理 CLI,支持多模型(Anthropic、OpenAI 等),以 JSON 格式输出结构化结果,非常适合在 CI 中做响应提取。
安装与基础配置
在 CI 工作流中,OpenCode 的接入分三步:
- 安装运行时:使用
oven-sh/setup-bun@v2安装 Bun,再全局安装opencode-ai - 配置密钥:根据所选模型设置对应的 API Key 环境变量
- 执行代理命令:以
--format json运行 OpenCode,捕获全部输出
完整配置参考 agent-runner-templates.md,核心配置片段如下:
- uses: oven-sh/setup-bun@v2 - run: bun install -g opencode-ai - name: Run OpenCode env: ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }} run: | opencode run "$PROMPT" \ --dir "$GITHUB_WORKSPACE" \ --model anthropic/claude-sonnet-4-5 \ --format json \ --dangerously-skip-permissions \ 2>&1 | tee /tmp/agent-output.txt⚠️ 切换模型时,
--model和对应的密钥环境变量要一起改。例如改用 OpenAI 模型时,将--model改为openai/...,密钥改为OPENAI_API_KEY。
控制循环的完整执行顺序
OpenCode 接入后,整个循环按以下顺序执行(完整工作流模板见 workflow-template.yml):
| 步骤 | 组件 | 职责 |
|---|---|---|
| 1 | Sensor | 测量代码库当前状态,输出结构化数据 |
| 2 | Controller | 根据测量结果选择本次要处理的目标 |
| 3 | Actuator | OpenCode 执行修改,生成最终响应 |
| 4 | Extract | 从 JSON 输出中提取代理的最终回复 |
| 5 | PR | 用提取的回复作为 PR Body 创建 Pull Request |
各组件的详细设计原则见 control-loop-taxonomy.md。
响应提取实战技巧:4 种代理格式全解析
这是 OpenCode 接入中最容易踩坑的环节。不同代理的输出格式完全不同,用错提取命令会导致 PR Body 为空或内容错乱。
四种代理的输出格式对比
| 代理 | 输出格式 | 提取方式 |
|---|---|---|
| Claude Code | stream-json(JSON Lines) | jq逐行解析,取最后一条 assistant 消息 |
| Codex | --json+ 内置--output-last-message | 无需额外提取,直接写入文件 |
| OpenCode | --format json(结构化 JSON) | jq取.messages中最后一条 assistant 消息 |
| CodeLayer | 纯文本 + ANSI 颜色码 | sed去除 ANSI 转义序列 |
OpenCode 响应提取(重点)
OpenCode 以--format json输出时,JSON 结构中包含messages数组。用jq提取最后一条 assistant 消息即可:
- name: Extract PR body run: | cat /tmp/agent-output.txt \ | jq -r '.messages | map(select(.role == "assistant")) | last | .content' \ > /tmp/pr-body.md关键细节:
map(select(.role == "assistant"))— 只保留代理的回复,过滤掉 user 消息last— 取最后一条,因为代理的最终结论在最后.content— 直接取文本内容- 输出写入
/tmp/pr-body.md,后续 PR 创建步骤会读取此文件
提取失败的兜底策略
agent-runner-templates.md 中明确建议:如果提取失败,工作流应优雅降级——使用原始输出或占位消息,而不是直接报错退出。
[ -s /tmp/pr-body.md ] || cp /tmp/agent-output.txt /tmp/pr-body.md响应模板:让 PR Body 结构化
提取出的内容需要符合 response-template.md 定义的结构,包括:
- 摘要统计:处理了多少问题,分 resolved / ignored / skipped
- 变更明细:每个问题的文件、描述、风险等级
- 验证结果:Typecheck、测试、Lint 是否通过
- 风险标注:高 / 中 / 低风险,高风险附手动验证步骤
模板支持三类任务:修复 / 迁移、生成、重构。按任务类型选择对应模板,评审者可以一目了然。
记忆文件与迭代机制:让循环越跑越好
控制循环不是"一次跑完就结束"。两个机制让循环持续改进:
记忆文件(memory-template.md):版本控制的 Markdown 文件,每次运行时注入 Actuator 上下文。存放永久性的范围排除、已知误报区域、评审者偏好——不是一次性指令。
/iterate指令:维护者在代理 PR 上评论/iterate,对应工作流自动加载 PR 上下文和反馈,代理更新记忆文件并修改 PR。实现脚本见 agent-iteration.ts。
💡 设计哲学:人类始终在循环之上(human-on-the-loop),通过记忆文件和
/iterate持续修正代理行为。
核心文件路径速查
| 文件 | 用途 |
|---|---|
| agent-runner-templates.md | 4 种代理的本地 + CI 命令、密钥、响应提取 |
| workflow-template.yml | 周期性循环工作流骨架 |
| prompt-template.md | Actuator 步骤的嵌入提示词结构 |
| response-template.md | PR Body 格式化模板 |
| memory-template.md | 记忆 / 反馈文件骨架 |
| skill-template.md | 生成的 Actuator 技能骨架 |
| control-loop-taxonomy.md | 控制循环组件分类与设计问题 |
| example-control-loop.md | 完整示例循环(逐组件注释) |
【免费下载链接】skills项目地址: https://gitcode.com/GitHub_Trending/skills53/skills
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考