GitHub 用户 ehnruiz 的开源项目 claude-skills 为 Claude Code 提供 skills、子 agent 和 hooks。项目说明面向希望 agent 证明自己工作的工程师:主管把每一步交给当时够用的最便宜模型,同一张工单失败两次后再升一档;关卡凭退出码通过;bug 修复要附带一个在没有该修复时会失败的测试;一次会话结束时写下交接笔记,供下一次接着做。仓库也会检查自己,把 frontmatter、链接、脚本、hooks 和 README 放进 CI,并用碰撞审计避免技能描述抢同一类请求。
插件名为 agent-workflow,位于 ehnruiz 市场。装上之后技能带命名空间,例如 /agent-workflow:handoff 和 /agent-workflow:pick-up。快速开始一节里,碰撞审计脚本对本仓库的输出是「21 skills, 1 overlapping pairs, 0 duplicate names」。
在 Claude Code 内,安装命令是 /plugin marketplace add ehnruiz/claude-skills,然后 /plugin install agent-workflow@ehnruiz。也可以用 npx skills add ehnruiz/claude-skills;该 CLI 还能通过 --agent 装进其他编码 agent。另一种做法是只复制需要的 skills 或 agents 文件。README 写明,脚本和 SessionStart hook 需要 Python 3.9 以上,可选 hooks 需要 Node 20 以上。许可证为 MIT。
skills 表中的 supervisor 把多步任务拆成工单,交给更便宜的子 agent,顺序固定为 clarify、scout、plan、build、verify、review、ship。子 agent 在同一张工单上失败两次,就升一档模型,并附上失败报告。快速开始还写到,计划和判断留在当前会话,工单要写清想要的行为、改动位置、用来证明的命令、涉及的文件,以及必须保持不变的部分。
各子 agent 的模型写在自己的文件里。scout 和 doc-writer 用 Haiku:前者查找并返回 file:line,不改任何文件;后者按给到的事实写文字,缺事实就写 TODO(fact)。implementer、tester 和 researcher 用 Sonnet。implementer 对一张工单先写失败测试再实现,报告每条命令的退出码,并且不提交;tester 只改测试和 fixture;researcher 在后台阅读原始来源,写出每条说法都带出处和日期的笔记。reviewer 用 Opus,对照工单和仓库规范审 diff,每条发现附一个失败场景。
regression-proof 按退出码判定 lint、类型检查、测试和推送,并在合并基点的临时 worktree 中只复制新测试,证明该测试在没有修复时失败。示例文档把这套做法用在本仓库 commit 356016b 上:新测试在父提交上退出码为 1,在修复上退出码为 0。README 称,这是 pull request 的测试计划应带上的结论。
supervisor 自己运行 lint、类型检查和测试,一步一条命令,报告写成 lint=0 typecheck=0 test=0,而不写成 "all green"。审阅之后,主管会修住能成立的问题并重跑这些关卡。
handoff 由使用者自己调用。它把交接笔记写到仓库之外,内容包括目标、已完成项及验证方式、决定、未决问题和后续步骤。下次会话启动时,插件注册的 SessionStart hook handoff_notice.py 会展示该项目最新笔记的开头,并点名 pick-up;没有笔记,或仓库自己已有 handoff skill 时则保持安静。pick-up 加载最新交接笔记,先检查仓库自上次以来的变化,再开始下一步。
README 写明,快速开始中步骤 1 和步骤 2 的提示词只展示请求格式,没有针对它们跑过会话;实际跑过的是脚本、hooks、测试和安装路径。开发一节写明,CI 在 Python 3.9 和 3.12、Node 20 和 22 上运行测试,并检查 frontmatter、链接、脚本、hooks 和 README。