中文 EN

let-it-go 使用指南

AI-driven development workflow — from PRD to shipped code

github.com/9Ashwin/let-it-go

Usage Guide — 六步闭环研发工作流:规划、设计、拆解、实现、审查、交付。

目录

1. 概述

let-it-go 是一套研发工作流技能集:27 个技能,把「想法 → 交付」拆成标准步骤——需求、设计、拆解、实现、审查、交付——每一步由一个技能负责。

它让 AI Agent 能够像一个有经验的工程师一样——从理解需求、拆解任务、编写代码、审查质量,到最终提交合入——全流程自主完成。你只需描述功能想法,剩下的交给工作流。

入口:不用先问该用哪个。27 个技能的 description 就是路由表——它写清了各自管什么、什么时候该用,模型命中就自己加载并直接开始那一步,不需要你手敲。想强制走某一条时才敲它的名字。

/prd

需求文档生成

  • 澄清问题 → 结构化 PRD(可验证的验收标准)
  • 审阅确认后保存到 tasks/prd-*.md
  • 交给 /to-issues 拆解为 Issue

/to-issues

把 PRD 拆成垂直切片 Issue(正文即契约)

  • 垂直切片(tracer bullet),非按层拆分
  • 显式依赖边 + 阻塞者优先创建
  • 支持 GitHub / Local,可独立使用

/triage

把外面进来的原始 issue 分流成可执行卡片

  • 复现 / 理解 → 定角色(ready / needs-info / bug-confirmed / duplicate / wontfix)
  • 把 ready 的补成 agent 可执行卡片
  • 只处理外部条目,不 triage /to-issues 的产出

/goal

DSH 的持久目标命令

  • 模型侧是 create_goal / update_goal——人交来一批长活的那一轮,模型自己就能开
  • 持久目标 + 自动续跑轮次
  • 要求「当前打开的回合里有人类消息」+「调用者是顶层 agent」;子代理开不了。不是 skill,也不是流水线步骤

/review-it

双轴代码审查收尾

  • Spec 轴:diff 有没有做「要求的事」(缺的 / 多做的 / 做错的)
  • Standards 轴:8 个维度查代码质量
  • 两轴分开报告;按波 / 批调用一次

/ship-it

提交 → PR → 合入 → 关闭

  • PR body 的唯一产出者
  • Squash merge + delete branch
  • 一次写出实现总结评论(设计决策 / 偏离 / 权衡 / 待确认)并关闭卡片

/understand

交互式审阅新生成的(AI)改动

  • 把未提交 / 分支变更扫描成网页
  • 文件树 + 语法高亮 diff + 逐段注释
  • 每段配上对应单位需求与代码解释

/svg-diagram

SVG 制图规范与机械校验(vendor)

  • 布局 / 连接线 / 箭头 / 配色 / CJK 字体栈
  • XML 转义、重叠与裁切等硬约束
  • 自带 tools/svg-lint(12 项检查)

/refactor

专家级代码重构(audit / fix 两种模式)

  • audit 只报不改:列出坏味道与架构问题
  • fix(默认):按 Fowler 目录重构
  • 22 种代码坏味道 + 40+ 种重构手法 + 安全协议

/modern-go

Go 代码现代化改造

  • 35+ 条 gofix 风格转换规则
  • Go 1.0 到 1.27+ 全覆盖
  • 自动检测版本 + 安全保护

/loop-it

自动化 Issue 批量实现循环

  • 获取 Issue → 依赖拓扑排序 → 内联实现 → 记 evidence → supervisor 检查 → commit;批末统一评审、走查 + 交付
  • 检查点恢复(.loop-state.json),crash 不丢进度;结构化证据与 follow-up 台账写在同一检查点里
  • 10 类错误分类,结构化恢复策略

/to-design

PRD 转设计文档(Go 提案风格),主线的有条件第 2 步

  • 只在跨两个及以上服务、改数据模型或迁移、涉及两条以上对外契约时写;不命中就跳过
  • 主产物是 Markdown 设计提案
  • HTML 只是可选的呈现层
  • 主动列出被放弃的方案及理由

/graph

任务图并发实现(DAG + 超步)

  • 任务/PRD → DAG → 分层为超步 wave
  • 每波独立节点由子代理并发实现
  • 每节点独立 worktree:内联实现 → commit;波末统一评审、走查 + 交付

/test-first

红 → 绿循环的参考

  • 好测试:通过公开接口验证行为
  • 接缝要预先与用户约定
  • 三个反模式 + 循环规则(红先于绿、一次一片)

/diagnose

难 bug 的排障循环

  • 先拿到一条已经在「这个」bug 上变红的命令
  • 最小化复现 → 3–5 条可证伪假设 → 一次一个变量地埋点
  • 在正确的接缝上补回归测试;不做 review / ship

/conflict

解进行中的 merge / rebase 冲突

  • 查清两边意图 → 逐 hunk 解(能同留就都留)
  • 跑项目门禁,把这次操作做完
  • 永远解,绝不 --abort

/harness-engineering

诊断并重建 agent 周围的 harness

  • 20 条体检清单找坏味道 → 14 种失效形态的诊断与处方
  • 11 组施工法(含仓库即规范 / 最小干预 / 知识固化),每组给"改造前 → 改造后"
  • 覆盖 AGENTS.md、SKILL.md、规则登记表、状态、反馈回路与环境锁定

/open-source-skill

把一个内部技能做成公开开源仓库

  • 照同类成熟仓库搭骨架:双语 README / LICENSE / .claude-plugin / docs
  • 脱敏到 grep 0 命中,并对提炼自他人材料的内容做最长公共子串比对
  • 换个人提交身份、gh repo create 补元数据、推送后逐项读回验证

/find-skills

发现并安装生态里的技能(vendor)

  • 「有没有能做 X 的技能」时用它
  • 检索 open agent skills 生态
  • 来源:vercel-labs/skills

/frontend-design

前端视觉设计方向(vendor)

  • 新 UI 或改造现有界面时的审美取向
  • 排版与视觉决策
  • 避开模板化的默认样式

/humanizer-zh

中文文本去模板化润色(vendor)

  • 删空话、去重复与模板化表达
  • 保留事实、确定程度与作者声音
  • 只润色文本,不做 AI 检测判定

/pptx

PowerPoint 读写与编辑(vendor)

  • 创建、解析、编辑 .pptx / .potx
  • 模板、版式、演讲者备注与评论
  • 拆分 / 合并幻灯片文件

/skill-creator

创建与改进技能(vendor)

  • 从零写一个新技能,或优化现有技能
  • 跑评测、做方差分析
  • 优化 description 的触发准确率

/ui-ux-pro-max

可检索的 UI/UX 设计知识库(vendor)

  • 风格、产品配色与字体搭配
  • UX 规范、图标、GSAP 预设、图表类型
  • 覆盖 22 种技术栈的实现建议

/web-design-guidelines

按 Web Interface Guidelines 审 UI(vendor)

  • 审 UI 代码的无障碍与交互规范
  • 对照最佳实践做设计审计
  • 来源:vercel-labs/agent-skills

/resume-optimizer

简历审计与优化(vendor)

  • 把职责型表述改写成成果型表述,突出量化结果与业务价值
  • 结合目标岗位 JD 调整关键词、项目重点与职业叙事
  • 产出修改后的简历草稿与行动清单,按需压成一页

/teach

以教学方式讲清一个概念(vendor)

  • 把当前目录当教学工作区,学习状态落成文件
  • 每课一份自包含 HTML,围绕 MISSION.md 里的学习动机
  • 按 learning-records 判断最近发展区,跨会话持续推进
技能分组:27 个技能按「在流程里扮演什么角色」分三个桶——flow(流水线本身,8 个)、bonus(中途伸手拿的:出事了、要保证质量、需要一个非代码产物,9 个)、vendor(第三方技能的逐字副本,由 manifest 钉住 commit,10 个)。

2. 安装

作为 skill 目录安装

npx skills add 9Ashwin/let-it-go

# flow 是一套——整套装,别单装其中一个。
# 契约住在 `loop-it/` 里,而 `prd` / `to-issues` / `review-it` 直接执行
# `loop-it/scripts/loop_state.py`,所以单装一个 flow 技能跑不起来。
# `npx skills add 9Ashwin/let-it-go` 一次装齐八个。

# bonus(9 个)与 vendor(10 个)没有这种依赖,可以单装
npx skills add 9Ashwin/let-it-go --skill test-first
npx skills add 9Ashwin/let-it-go --skill triage
npx skills add 9Ashwin/let-it-go --skill diagnose
npx skills add 9Ashwin/let-it-go --skill conflict
npx skills add 9Ashwin/let-it-go --skill refactor
npx skills add 9Ashwin/let-it-go --skill modern-go
npx skills add 9Ashwin/let-it-go --skill understand
npx skills add 9Ashwin/let-it-go --skill harness-engineering
npx skills add 9Ashwin/let-it-go --skill open-source-skill
npx skills add 9Ashwin/let-it-go --skill svg-diagram
npx skills add 9Ashwin/let-it-go --skill find-skills
npx skills add 9Ashwin/let-it-go --skill frontend-design
npx skills add 9Ashwin/let-it-go --skill humanizer-zh
npx skills add 9Ashwin/let-it-go --skill pptx
npx skills add 9Ashwin/let-it-go --skill resume-optimizer
npx skills add 9Ashwin/let-it-go --skill skill-creator
npx skills add 9Ashwin/let-it-go --skill teach
npx skills add 9Ashwin/let-it-go --skill ui-ux-pro-max
npx skills add 9Ashwin/let-it-go --skill web-design-guidelines

# 全局安装(对所有项目生效)
npx skills add 9Ashwin/let-it-go -g

前置要求

工具用途安装
npxnpm package runner(推荐方式)Node.js 自带
ghGitHub CLI (Issue/PR 操作)brew install gh && gh auth login
Tip:安装后输入 /prd、/to-design、/to-issues、/loop-it、/graph、/review-it、/ship-it、/merge-it(flow 8 个)、/test-first、/triage、/diagnose、/conflict、/refactor、/modern-go、/understand、/harness-engineering、/open-source-skill(bonus 9 个)、/svg-diagram、/find-skills、/frontend-design、/humanizer-zh、/pptx、/resume-optimizer、/skill-creator、/teach、/ui-ux-pro-max、/web-design-guidelines(vendor 10 个)即可直接调用对应技能。其中 /goal 是 DSH 的命令(不是 skill):模型侧是 create_goal / update_goal,但一批活开工时模型自己就能开(要求顶层回合里有人类消息),子代理开不了。
模型目录:27 个技能的 description 合计 6335 字符,模型实际看到 6172 字符(DSH 会把每条 description 归一化空白并截到 500 字符)。带 disable-model-invocation 的是 vendor 的 /teach(上游的选择)与 /merge-it(合入不可逆,只有人能敲),两条都不进模型目录,要用手敲名字。

接入到你的仓库

技能装好之后,你的仓库声明四件事——流程读它们,才知道产物放哪、跑哪个门禁。

要声明谁决定说明
作用域根扫仓库需求资料放哪。仓库有约定(requirements/<scope>/、docs/、specs/)就用它的根
门禁扫仓库改动之后必须绿的命令:make check · go build ./... && go test ./... · pnpm lint · mise run check
验收基线人拍板哪些测试是冻结的、新测试写在哪。不声明的话,往现有测试文件里追加也可能被当成「把测试改弱」
只改本仓库内的文件建议防止 agent 写到仓库外去

3. 工作流总览

从需求到交付的闭环工作流:

1 /prd
→
1.5 /to-issues
→
2 /loop-it · /graph
→
3 /review-it
→
4 /ship-it
/prd → [跨两个及以上服务 / 改数据模型或迁移 / 两条以上对外契约 → /to-design] → /to-issues ─┬─→ /loop-it   (实现入口,进来自己判模式)
                                             │        ├─ 一个单元:内联实现 → 门禁自证 → /review-it → /ship-it
                                             │        └─ 一批有依赖:一次一个 Issue,带检查点恢复
                                             └─→ /graph     (真并行:按波次 fan-out,每节点独立 git worktree,波次间 fan-in 屏障)
                                                     节点:内联实现 → 门禁自证 → commit;波末:集成 → /review-it → /ship-it(先写走查件)
Step 1: /prd 描述功能想法 澄清问题 生成 PRD Output: PRD 1.5: /to-issues 读取 PRD 拆解 Issue 创建卡片 Output: Issues Step 2 /loop-it · /graph 读取 Issue / DAG 内联实现 运行测试 Output: Code Step 3: /review-it 自动审查 验证发现 迭代修复 Output: ✓ Review Step 4: /ship-it Commit + Push Create PR Merge + Close Output: Shipped
步骤命令输入输出
1. 规划 /prd 功能描述 / 产品想法 PRD 文档(交给 /to-issues 拆解)
1.5 拆解 /to-issues PRD / 需求描述 Issue 卡片
2. 实现 /loop-it / /graph 一个或多个 Issue 卡片 可运行的代码实现
3. 审查 /review-it 代码变更 (dirty / branch) 通过审查的干净代码
4. 交付 /ship-it 已审查的代码 走查文档(证据)+ 已合入的 PR + 已关闭的 Issue
Tip:这条主线不必按顺序走:一个单元直接 /loop-it(它会判成单单元模式),有 bug / 偶发 flake / 性能回归先 /diagnose,外面进来的原始 issue 先 /triage,正在解 merge / rebase 冲突用 /conflict。选不准就看各技能的 description——它写清了适用场景,模型会自己挑。

4. Step 1: /prd — 需求规划

/prd 将一个模糊的功能想法转化为结构化的产品需求文档(PRD):先把歧义问清楚,再把需求写成可验证的验收条件。它只产出 PRD,不拆 Issue——拆解交给 /to-issues。

触发方式

# 直接输入
/prd 给我们的任务管理系统加一个优先级功能

# 或使用触发词
写PRD:用户注册功能,支持邮箱和手机号
需求分析:为 API 增加限流能力

工作流程

输出示例

# 保存 PRD 后给出的下一步
✅ PRD saved to tasks/prd-priority-system.md

/to-issues    (把 PRD 拆成有阻塞关系的 Issue)
Tip:PRD 里写的是「要什么」,每条需求都要落成可验证的验收条件——这是后面 /review-it 的 Spec 轴能证伪的依据。Issue 粒度由 /to-issues 负责:一个 Issue 应是单个 Agent 在单次会话里能完成的量(通常 1-3 个文件)。

5. Step 1.5: /to-issues — 拆解 Issue 卡片

/to-issues 把 PRD(或任何一段需求描述)拆解为垂直切片的可独立实施 Issue,并创建到你选择的平台。可独立使用,不需要先运行 /prd。

每条 Issue 正文就是契约。目标、非目标、验收条件、必须收集的证据、外部边界、完成定义、未决问题都写在正文里——所以流程里没有「先写一份 SPEC 文档」这一步。一个不共享本次对话上下文的子代理,凭这条正文就能独立开工。
核心原则:垂直切片,而非按层拆分。每个 Issue 是一条贯穿各层(schema + API + UI + 测试)的窄而完整的可演示路径,落地即可单独演示;而不是"后端一张卡、前端一张卡"。检验标准:"完成后我能演示什么?"——答案若是某一层而非一个行为,就要重新切。若整个改动放得下一个上下文窗口,则无需拆 Issue,直接由 agent 内联实现。

触发方式

# 直接输入
/to-issues

# 或使用触发词
创建issue:基于 prd-user-auth.md 创建 Issue
拆解issue:把这段需求拆成可实施的卡片
生成卡片:把 PRD 拆成带阻塞关系的 Issue

输入来源

选项说明
自动检测扫描 tasks/ 目录,列出可用的 PRD
指定 PRD只基于 PRD 的 User Stories 拆解
直接粘贴没有 PRD 时,直接给一段需求描述也能拆

创建平台

平台工具说明
GitHubgh issue create原生依赖边 --blocked-by、子 issue --parent(需 gh v2.94+)
LocalMarkdown 文件一 Issue 一文件、按依赖排序,存于 per-feature 目录

工作流程

可证伪的验收标准:每条验收标准都要能在起始 commit 上为红(fail)。宽范围机械重构(重命名列、改共享类型)走 expand → migrate → contract 序列,作为垂直切片规则的唯一例外。
Note:/to-issues 是从需求到实现的关键桥梁。它可以独立使用——即使你没有用 /prd 生成 PRD,只要有一个需求文档(甚至直接粘贴),就能拆出 Issue。

边界:/triage 只管从外面进来的条目

/to-issues 拆的是你自己的需求,产出已经是 agent-ready 的卡片;从外面进来的 bug 报告、用户反馈、别人提的需求归 /triage——先复现 / 理解,再定角色(ready / needs-info / bug-confirmed / duplicate / wontfix),并把 ready 的补成 agent 可执行的卡片。不要 triage /to-issues 产出的卡片。详见 17. /triage。

6. Step 2: /loop-it · /graph — 功能实现

实现步骤由正在运行的 agent 内联完成:它读取 Issue 的标题、正文与验收标准(含其中引用的 PRD/SPEC),自己写代码、跑测试与 lint,直到验收条件全部满足。/loop-it 是这一步的入口,进来先判规模:只有一个单元时不开循环、直接内联做完;一批有阻塞边的 issue 走串行循环;真并行交给 /graph。

Note:/goal 不再是流水线步骤。「实现 Issue」由 agent 内联完成,不是调用 /goal;想要自动续跑的长目标,开工时开一个持久目标(create_goal)——模型在顶层回合里自己就能开,人也可以直接敲 /goal <objective>。

单单元模式:内联闭环

一条 issue、一张卡片、spec 里的一项——只有一个单元时走这条,闭环是:内联实现 → 项目门禁自证 → /review-it → /ship-it。它明确不建 worktree、不派子代理、不建波分支——那些是串行循环与 /graph 的编排,单点上图或开循环只是多付编排成本。

参考:/test-first — 红 → 绿

需要先把行为定下来再写实现时用它:一个测试 → 一段实现 → 再一个测试,一次一个接缝。它同样是 /loop-it 内部会用到的参考,可以单独调用。

节点作用域:实现 → 自证 → 只 commit

串行模式:一次一个 Issue

适合节点之间大量共享文件、必须串行保证安全的场景;一次只处理一个 Issue。批末 PR 关闭多个 Issue,需按逐项证据表列出每项的 commit、关闭编号、验收证据与人工验收状态。

/graph — 并行实现

适合 DAG 中存在真正并行度(相互独立的子系统)的场景。单节点波没有可集成的对象,跳过 wave 分支与 merge 仪式,直接对该节点分支 review + ship。详见 12. /loop-it 与 14. /graph。

失败节点:原地重试 → 重跑 → 剔除

Tip:「实现」由 agent 内联完成——单个单元走 /loop-it 的单单元模式(内联实现 → 门禁自证 → /review-it → /ship-it,不建 worktree、不派子代理);/goal 是 DSH 的命令而不是 skill:模型侧是 create_goal / update_goal,create_goal 要求「当前打开的回合里有人类消息」+「调用者是顶层 agent」——模型自己就能开,子代理开不了;一批活开工时创建它、批末 complete;/review-it、/ship-it 是真实 skill,由编排器在波级各调用一次。子代理要付出父级完整 prompt、工具 schema 与技能目录的固定成本,所以节点止于 commit、琐碎工作内联做;并发上限默认 3–4,波内节点数建议 2–3。

7. Step 3: /review-it — 代码审查

/review-it 是提交前的审查收尾:先跑门禁自证,再评审 diff,发现真实问题并迭代修复,直到没有可操作的发现。在当前契约里它按波 / 批调用一次,审的是集成后的 diff,而不是每个节点各自审自己刚写完的代码。

双轴:Spec 与 Standards,分开报告

每次评审回答两个不同的问题,分成两节报告,绝不合并成一张排序表——一旦合并,「命名与风格」的意见就会把「漏掉一条验收条件」淹没掉:

#维度看什么
1隐藏副作用是否在非显而易见的地方产生级联影响、改了共享状态或外部依赖的行为
2破坏兼容性API 签名、数据结构、配置文件格式、命令行接口是否被改,现有调用方是否受影响
3边界情况null / 空值 / 空集合、极大极小值、并发竞态、异常路径
4性能风险嵌套循环、N+1 查询、大对象分配、阻塞 I/O、锁竞争
5安全风险注入、越权、敏感信息泄露、不安全反序列化、依赖漏洞
6命名误导名字与实际行为不符、名不副实或语义模糊
7测试不足关键路径、边界条件、错误处理是否缺覆盖,现有测试是否真的验证了期望行为
8未来维护成本不必要的抽象、重复代码、隐式耦合、难追踪的控制流
为什么两轴分开:一个改动可以通过全部 8 个标准,却实现了错的东西;合并排序会让风格意见挤掉缺失的需求。先报 Spec 轴,再报 Standards 轴,各自成节。

评审路径

没有外部 review CLI——/review-it 加载后,由正在运行的 agent 亲自按下面的审查原则审当前 diff,不会 shell out 任何 review 命令。

# 未提交变更(默认):直接审工作树,含未跟踪文件
git status --short
git diff
git diff --cached

# 分支 / PR:先生成相对 base 的 diff,再逐段审
# base 取 PR 的 base,否则取仓库默认分支——不写死 main
base=$(gh pr view --json baseRefName --jq .baseRefName 2>/dev/null || git symbolic-ref -q --short refs/remotes/origin/HEAD | sed 's|^origin/||')
diff_file=$(mktemp)  # 固定 /tmp 名可被预创建,别用
git diff "origin/$base"...HEAD > "$diff_file"

diff 较大、或更看重独立性时,可把 diff 文件交给一个全新的子代理审——它看不到本会话的上下文,因此提示词必须自包含。

审查原则

原则说明
Advisory审查结果视为建议,不盲目应用
Verify每个发现都通过读取真实代码路径验证
Reject noise拒绝不切实际的边界情况、投机性风险、过度重构
Iterate修复后重新审查,直到无可操作发现
Minimal优先小修复,不做不必要的大重构

审查模式

工作树状态模式操作
有未提交变更local由当前 agent 直接审查工作树(含未跟踪文件)
已提交未推送branchgit diff origin/main...HEAD + 审这份 diff
已推送 / PRbranch同上,相对的 base 用 PR 的实际 base
干净工作树skip确实没有可审的内容时跳过

波级评审:一次、逐节点分节

8. Step 4: /ship-it — 提交交付

/ship-it 是实现完成后的标准收尾流程:提交代码、创建 PR、合入、关闭 Issue,并一次写出实现总结评论(设计决策 / 偏离 / 权衡 / 待确认)。它是走查件与 PR body 的唯一产出者:先写走查件(命令、真实输出、可视化、风险点、人工验收状态),再由它一次写进 body。在 /graph 一波或 /loop-it 一批的收尾里,它只调用一次:一个分支、一个 PR、一次 CI、一次 merge,关闭该波 / 该批满足的多个 Issue。

触发方式

# 直接调用
/ship-it

# 或使用触发词
提交代码
创建PR并合入

完整流程

# Step 1: 提交代码(关联 Issue)
git add <related files>
git commit -m "Add priority field to database (#42)"

# Step 2: 推送分支
git push -u origin feat/issue-42-priority-field

# Step 3: 创建 PR(body 包含 Closes #42)
gh pr create --title "Add priority field" \
  --body "Closes #42 ..."

# Step 4: 合入
gh pr merge --squash --delete-branch

# Step 5: 关闭 Issue(如未自动关闭)
gh issue close 42 --reason completed

多个 issue 共用一个 PR(波 / 批末模式)

/graph 一波与 /loop-it 一批默认把多个 Issue 收进同一个 PR(squash 后只剩一个 commit)。此时 PR body 必须逐项列出证据,不能只写一行 Closes #1 #2 #3——否则单项特性既没法审计,也没法单独回滚。

项commit关闭的 issue验收证据(测试名 / 命令)人工验收
节点 3abc1234Closes #12TestFooBar尚未人工验收
节点 4def5678Closes #13mise run check + TestBaz尚未人工验收

单项 PR(一个 Issue 一个 PR)不需要这张表,按上面的「完整流程」即可。

错误处理

场景处理方式
CI checks 失败查看失败原因,修复后追加 commit 推送
Merge conflict交给 /conflict 逐 hunk 按意图解,跑通项目门禁再收尾(绝不 --abort),解决后再 force push
Branch protection确认 required reviews 已满足
Issue 未自动关闭确认 PR body 包含 Closes #N,或手动关闭
Note:解进行中的 merge / rebase 用 /conflict——能同时保留两边意图就都保留,真不兼容时选与本次合并目标一致的一边并把权衡写进 commit message,永远解,不 --abort。详见 19. /conflict。
Note:/ship-it 依赖 gh CLI。确保已通过 gh auth login 完成认证。

9. Vendor: /svg-diagram — SVG 制图规范与机械校验

/svg-diagram 是一套手写 SVG 图的「房屋风格」:把技术感的外观与对 CJK 友好的排版固定下来,并用机械检查证明图确实守了规矩。流程图、架构图、时序图这类「画出来给人看」的图都走它。

触发方式

# 直接输入
/svg-diagram

# 或使用触发词
画架构图:为技能加载流程画一张 SVG 架构图
画流程图:把这个模块的调用流程画成 SVG

规范覆盖

方面约束
布局内容居中、左右视觉平衡、同级块间距 ≥25px、标题按内容中心而非 viewBox 中心对齐
连接线线不穿框、文字不压线(与线留 10–20px)、图例放在图体之外
箭头统一 marker 定义,箭头收在框边而不是扎进框内
配色固定调色板,并给出浅色底的回退色
CJK 字体栈字体栈同时覆盖中文与等宽,避免中文回退成衬线或方框
XML 转义& / < / > 按 XML 规则转义

机械校验:tools/svg-lint

技能自带零依赖的 tools/svg-lint,对 SVG 跑 12 项检查:重叠、块间距、框高、连接线几何、箭头 marker、文字溢出、viewBox 裁切、字体栈、调色板一致性、浅底回退、基线偏移、XML 转义。

工作流程

Tip:一次性出图时从子代理里调用它更省上下文——主上下文不必同时背着技能说明和 SVG XML;需要多轮微调时再在主上下文里直接用。

10. Bonus: /refactor — 专家级代码重构

/refactor 基于 Martin Fowler《重构》第 2 版的完整目录,提供专家级代码重构能力。通过识别代码坏味道并应用经过验证的重构手法,在不改变外部行为的前提下改善代码的可维护性、可读性和结构。

两种模式

模式做什么写代码吗
audit(只报不改)检测代码坏味道、架构反模式与复杂度热点,逐条验证后按严重级别排序,产出 tasks/ 下的 Markdown 报告与重构路线图否
fix(默认)针对一个已命名的坏味道,套用 Fowler 目录里最小的那一步重构,每步一个提交、测试保持绿色是

请求里同时含「找问题」和「改掉」时:先 audit,与用户确认发现,再在确认过的清单上切到 fix。

触发方式

# 直接输入
/refactor

# 或使用触发词
重构:重构 UserManager 类,它太大了
code smell:这个函数有 Feature Envy,修复它
extract method:把这个长方法拆分成更小的函数

代码坏味道目录

共识别 22 种代码坏味道,按五大类别组织:

类别坏味道主要重构手法
臃肿类过长方法Extract Method, Replace Temp with Query
过大的类Extract Class, Extract Subclass
基本类型偏执Replace Data Value with Object
过长参数列表Introduce Parameter Object
数据泥团Extract Class
OO 滥用类Switch 语句Replace Conditional with Polymorphism
临时字段Extract Class, Introduce Null Object
被拒绝的遗赠Replace Inheritance with Delegation
异曲同工的类Rename Method, Extract Superclass
变更阻碍类发散式变化Extract Class
霰弹式修改Move Method, Move Field
平行继承体系Move Method, Move Field
冗余类注释(代码自说明)Extract Method, Rename Variable
重复代码Extract Method, Pull Up Method
冗赘类Inline Class, Collapse Hierarchy
纯数据类Move Method, Encapsulate Field
死代码删除(Git 历史有记录)
夸夸其谈未来性Inline Class, Remove Parameter
耦合类依恋情节Move Method
狎昵关系Move Method, Move Field
消息链Hide Delegate
中间人Remove Middle Man
不完美的库类Introduce Foreign Method

重构手法目录

40+ 种重构手法,分 6 大类,每种附带机械步骤和对比示例:

类别手法数代表性手法
组合方法9Extract Method, Inline Method, Extract Variable, Replace Temp with Query, Substitute Algorithm
移动特性7Move Method, Move Field, Extract Class, Inline Class, Hide Delegate
组织数据13Replace Data Value with Object, Encapsulate Field, Replace Type Code with Subclasses, Replace Magic Number
简化条件8Decompose Conditional, Guard Clauses, Replace Conditional with Polymorphism, Introduce Null Object
方法调用13Rename Method, Separate Query from Modifier, Introduce Parameter Object, Replace Error Code with Exception
泛化9Pull Up Method, Push Down Method, Extract Interface, Form Template Method, Replace Inheritance with Delegation

安全协议

语言专属指南

语言核心建议
Javafinal 局部变量、IDE 自动重构、Records、Sealed Classes
TypeScript解构减少参数、const 优先、Union Types 替代类型码、?. 消除 null 检查
PythonType Hints、dataclasses、@property、Context Managers
Go小接口、命名返回值、表格驱动测试、early returns 消除嵌套
RustResult/Option 替代错误码和 null、Pattern Matching、From trait、Derive macros
Tip:每次重构只需告诉 AI "这个类的这个坏味道,请用对应的重构手法修复",AI 会按安全协议逐步执行,每步提交。

11. Bonus: /modern-go — Go 代码现代化改造

/modern-go 自动将 Go 代码升级为现代写法和 API,类似 go fix。扫描 go.mod 检测 Go 版本,对 Go 源文件批量应用版本适配的转换规则,覆盖从 Go 1.0 到 1.27+ 的 35+ 条规则。

触发方式

# 直接输入
/modern-go

# 或使用触发词
modernize:现代化改造这个项目的 Go 代码
升级Go代码:更新到 Go 1.22 的写法
gofix:扫描 pkg/ 目录并应用转换

工作流程

转换规则目录(按 Go 版本)

版本规则示例(Before → After)
1.0+time.Sincetime.Now().Sub(start) → time.Since(start)
1.8+time.Untildeadline.Sub(time.Now()) → time.Until(deadline)
1.10+strings.Builder循环内 s += item → strings.Builder
1.13+errors.Iserr == io.EOF → errors.Is(err, io.EOF)
1.18+any, strings.Cut, bytes.Cutinterface{} → any, Index+切片 → Cut
1.19+fmt.Appendf, 类型安全原子操作append(buf, fmt.Sprintf(...)...) → fmt.Appendf
1.20+strings.Clone, CutPrefix/CutSuffix, errors.Joinstring([]byte(s)) → strings.Clone(s)
1.21+min/max, clear, slices/maps 包手动循环 → slices.Contains, maps.Clone 等
1.22+range over int, cmp.Or, reflect.TypeForfor i:=0;i<n;i++ → for i:=range n
1.23+迭代器 helpers, SplitSeq/FieldsSeqfor _,p:=range strings.Split(s,sep) → SplitSeq
1.24+t.Context(), omitzero, b.Loop()测试中 context.Background() → t.Context()
1.25+wg.Go()wg.Add(1); go func(){defer wg.Done();fn()}() → wg.Go(fn)
1.26+new(expr), errors.AsTypev:=42; &v → new(42)
1.27+内嵌字段字面量(embedlit)、go fix 自动化改造器冗余的内嵌字段字面量 → 提升字段初始化

安全规则

Tip:可以在触发时指定范围,如 /modern-go pkg/ 仅改造 pkg/ 目录,或 /modern-go main.go 仅改造单个文件。

12. /loop-it(深入)— 自动化 Issue 批量实现循环

/loop-it 获取所有打开的 GitHub Issue,解析依赖顺序,一次一个 Issue 内联实现(读需求 → 写代码 → 跑门禁自证 → 记 evidence → supervisor 检查,判据是证据不是 diff 观感),只在该 Issue 自己的分支上 commit(不 push、不开 PR)。批末把各分支汇总成一条批次分支(failed 的分支不并入),只做一次 /review-it 与一次 /ship-it(它先写走查件)。进度持久化到 .loop-state.json,崩溃或中断后可从断点恢复。每条验收条件对应的观测以结构化 evidence 写进同一检查点,执行中发现的新任务以 followup 进队列——批次可以在跑的过程中长出新 issue,而不是被冻结在拆解那一刻的清单里。

如何调用

# 直接输入
/loop-it

# 或使用触发短语
批量实现: 实现所有issue
循环实现: 批量实现
恢复循环: resume loop

核心特性

流水线集成

# 从 PRD 到代码交付的完整流水线
/prd → /to-issues → /loop-it
                              │
                              └→ 每个 Issue:内联实现 → 门禁自证 → 记 evidence → supervisor 检查 → commit(× N)
                                 批末 ×1:follow-up 收口 → 汇总批次分支 → /review-it → /ship-it(先写走查件)
提示:将 .loop-state.json 添加到 .gitignore。如果循环崩溃,再次运行 /loop-it 即可检测状态文件并恢复。

13. /to-design(深入)— PRD 转设计文档

/to-design 把一份 PRD(或一个粗略想法)转化为 设计文档(design doc),文风借鉴 Go 官方提案:朴素的语言、具体的示例,以及最重要的——诚实地交代为什么选这个方案而不是别的。Markdown 提案是主产物;渲染成单文件 HTML 只是可选的呈现层,默认不渲染。

它和 issue 里的契约字段块有什么区别?契约字段块是给工程师照着实现的实现契约(表结构、接口、Schema),由 /to-issues 写进 issue 正文;设计文档是一份决策文档——它论证一个方向、把取舍摆上桌面,让团队在动手写代码前先就同一套事实达成共识。问题是"应该怎么建、为什么"时产出设计文档;问题是"给我精确的实现契约"时走 /to-issues。

如何调用

# 直接输入
/to-design tasks/prd-priority-system.md

# 或使用触发词
生成设计文档:为优先级系统写一份 design doc
prd转设计文档:基于 prd-user-auth.md

什么时候用

设计文档结构(源自 5 篇 Go 官方提案)

章节作用
Abstract / 摘要一段话讲完全文,并埋入最重要的那个承诺(如向后兼容)
Background / 背景用具体例子或真实 bug 代码讲清"痛在哪",量化而非堆形容词
Design / 设计主体。声明 + 示例 + 边界三件套,从简到繁渐进式教学
Rationale / 取舍最关键章节:主动列出被放弃的备选方案及放弃原因
Compatibility / 兼容性凡破坏性变更正面承认,诚实列出代价与渐进迁移路径
Implementation / 实现用数据和工具支撑"可落地",而非空喊"风险可控"
Appendix / 附录(可选)完整 API、端到端示例、FAQ

工作流程

提示:设计文档的价值不取决于方案是否通过,而取决于它是否让讨论建立在同一套事实和取舍之上。即便方案被否决,把"这条路为什么走不通"记录下来本身就是高价值产物。

14. /graph(深入)— 任务图并发实现

/graph 把一个任务(或 PRD / SPEC / Issue 集合)转化为有向无环图(DAG),按依赖关系分层为若干超步(wave),然后对每一层中相互独立的节点并发实现:每个节点由一个 subagent 在独立的 git worktree 中内联实现并 commit 到自己的分支;层与层之间用栅栏(fan-in barrier)汇聚——泄漏检查、逐节点过 evidence check、只合并 shipped 的节点、在集成后的树上跑门禁,然后评审一次、走查一次、ship 一次,并动态重规划下一层。PR body 与走查件与合并清单都由 /ship-it 唯一产出(它先写走查件,再由 body 采用)。

它和 /loop-it 有什么区别?/loop-it 是严格串行的——单个 worktree,一次处理一个 Issue;/graph 是它的并行版本——把同一层里所有独立节点一次性 fan-out 出去并发实现。当 DAG 中存在真正的并行度(相互独立的子系统)时用 /graph;当节点大量共享文件或必须串行保证安全时用 /loop-it。

设计思想借鉴了当下热议的 graph engineering、LangGraph 的 StateGraph / Pregel-BSP 超步模型,以及动态工作流(dynamic workflow)的编排理念。

如何调用

# 直接输入
/graph tasks/prd-url-shortener.md

# 或使用触发词
并发实现:把这些 issue 变成任务图并行实现
任务图:build a graph 并发跑

核心概念(借自 LangGraph / graph engineering)

概念含义
节点 Node一个可独立实现的工作单元(一个 issue / 子任务)
边 Edge依赖关系:B 依赖 A → 边 A → B
超步 / 波次 Wave依赖已全部满足的一组节点——并发执行
Fan-out为当前波次的每个节点派发一个 subagent
Fan-in(栅栏)等待本波全部节点完成,再开始下一波
状态通道.graph_state.json——波次之间共享的检查点,可断点恢复
实时看板graph.html——浅色风格仪表盘,每次检查点从 .graph_state.json 重新渲染
动态重规划一波结束后,若冒出新工作/新依赖则修订图

工作流程

核心特性

并发执行图

# 每波:fan-out → fan-in 栅栏
Wave 0 (并发×3):  #1 建表   #2 缓存层   #3 日志工具
Wave 1 (并发×2):  #4 API (依赖 #1)   #5 CLI (依赖 #2)
Wave 2 (并发×1):  #6 集成 (依赖 #4,#5)

# 每个节点在自己的 worktree 内:
内联实现 → 门禁自证 → commit 到自己的分支

# 每波末(只做一次):
泄漏检查 → 逐节点 evidence check → 只合并 shipped 节点 → 集成后跑门禁 → /review-it → /ship-it(先写走查件)

流水线集成

/prd → /to-issues ┬→ /loop-it  # 串行:一次一个节点
                                        └→ /graph    # 并行:整波一起跑
提示:把 nodes.json、.graph_state* 和 graph.html 加入 .gitignore(检查点用通配而不是列名字:默认名、改名前的 .graph_state、按次起的 --state .graph_state-prd015、以及写盘时的瞬时 .tmp 全都覆盖;nodes/graph 若用了非默认名,照原样补上),并在第一波之前提交这条忽略规则——/graph 的泄漏检查要求共享检出干净,未提交的 .gitignore 改动会让编排器把自己当成泄漏。派发 subagent 必须在同一个响应内发出多个调用才是并发——分成多个响应会退化为串行。

15. Bonus: /understand — 交互式变更审阅

/understand 把你刚生成的改动(通常是 AI 写的)变成一个单文件、可交互的审阅网页,帮你在审查或交付前真正吃透这次改了什么。它扫描仓库里未提交 / 分支变更,生成一个浅色主题的两栏页面:左侧是按真实项目布局排列的变更文件树,右侧是所选文件的语法高亮 diff,并在右侧边栏逐段给出相关单位需求与代码解释。

如何调用

# 直接输入
/understand

# 或使用触发短语
review 这次改动:解释一下这批新生成的代码
解释代码:带我过一遍刚生成的变更

页面构成

区域内容
左侧文件树按真实项目结构列出变更文件,含每文件 +/− 行数与 A/M/D/R 状态。该栏宽度可拖动调整(双击分隔条恢复默认)。
右侧 diff语法高亮 diff,增删与未变更代码明显区分,行号为文件真实行号。
右侧边栏逐段卡片:对应单位需求(推测时标灰色「推测意图」)+ 大白话代码解释;点击可定位并高亮闪动对应代码行。

工作流程

定位

/understand 是 /review-it 的理解型搭档:/review-it 负责发现并修复问题,/understand 则帮你在决定采纳前,看清新生成代码背后的意图与理由。

Tip:.understand/ 是产物目录,建议加入 .gitignore 以免误提交。解释与需求始终以中文产出。

16. Bonus: /triage — 外部 issue 分诊

/triage 处理从外面进来的原始条目:bug 报告、用户反馈、别人提的需求。它先复现 / 理解,再给每条定一个角色,并把 ready 的补成 agent 可执行的卡片。/to-issues 产出的卡片不要 triage——那些已经 agent-ready。

角色(每条最后必须落到一个)

角色含义动作
ready复现 / 需求清楚,验收条件写得出来补全正文(复现步骤、期望、验收条件、影响面),交给主线
needs-info缺关键信息,现在无法判断按模板发一条评论要信息
bug-confirmed确实是 bug,但根因未定记下症状与最小复现,转 /diagnose
duplicate已有同一条评论指路 → 关闭
wontfix明确不做评论写清理由(对应哪条产品边界)→ 关闭

处理一条

Note:ready 的条目交回主线——一串有依赖关系的用 /loop-it,互不共享文件的用 /graph,只有一个单元就用 /loop-it(它会判成单单元模式)。

17. Bonus: /diagnose — 排障循环

难 bug、偶发 flake 与性能回归的纪律:在有一条已经在「这个」bug 上变红的命令之前,不许开始推理——直接跳到「我觉得是这里」正是这个技能要防的失败。它不做 /review-it / /ship-it,定位清楚后按单点改动回主线。

触发方式

# 直接调用
/diagnose

# 或直接说
排查一下这个偶发失败
这个性能回归怎么回事

循环

Note:排查通常是一个内联单元,不要为它开 /graph。定位清楚之后按单点改动回主线:/loop-it(单单元模式)→ 项目门禁 → /review-it → /ship-it。

18. Bonus: /conflict — 解 merge / rebase 冲突

/conflict 解进行中的 git merge / rebase 冲突:先查清两边意图,再逐 hunk 解,跑项目门禁,把这次操作做完。永远解,不 --abort。

步骤

Note:在 /graph 的节点里解冲突时,冲突在该节点的 worktree 内,用绝对路径与 workdir=;在共享检出上解冲突时,解完确认 git status 除了这次合并没有别的脏东西——共享检出的干净是编排器做泄漏检查的依据。

19. Vendor 技能与一键同步

skills/vendor/ 放的是第三方技能的逐字副本:它们不是这套技能集写的,只是被收进来一起安装。谁、从哪个 commit 收的,由 skills/vendor/vendor.json 这份 manifest 记录,每个技能目录里还有一份 NOTICE.md(来源 / commit / 许可 / 同步日期)。

技能来源钉住的 commit许可
/svg-diagrambybit-exchange/svg-diagramc30c9e3MIT
/skill-creatoranthropics/skills3337550MIT
/frontend-designanthropics/skills3337550未声明
/pptxanthropics/skills3337550未声明
/find-skillsvercel-labs/skills7407f38MIT
/ui-ux-pro-maxnextlevelbuilder/ui-ux-pro-max-skill823b0a1未声明
/web-design-guidelinesvercel-labs/agent-skills063bee9未声明
/humanizer-zhop7418/humanizer-zhf4518a8未声明
/resume-optimizerwyh0626/resume-optimizerfb16670未声明
/teachmattpocock/skillsc55ee46未声明
不要就地编辑。这些目录是逐字副本,就地改会在下次同步时被覆盖。要改就改 manifest,再重新同步;属于这套技能集自己的改动,应该写成一个 flow / bonus 技能。

维护命令

make vendor        # 按 vendor.json 里钉住的 commit 同步
make vendor-check  # 报告上游是否已前进
make vendor-update # 重新钉到上游默认分支 HEAD、同步、再校验
make vendor-list   # 列出已 vendor 的技能与 commit
make vendor-add URL=<git url> SKILL="名字 [名字...]"
make check          # 布局、frontmatter、交叉引用、bundle patch
make test           # 先 check,再跑各脚本自测
Note:vendor 和前两个桶一样,由 cordis.patch.yml 单独列为一个技能根,所以它里面的技能会随 bundle 一起装进 DSH;npx skills add 递归扫描时也会带上它们。

20. FAQ

Q: 必须按顺序使用所有步骤吗?

不必。每个 Skill 都是独立的,可以单独使用。比如你已经有 Issue 了,可以直接从实现开始——单个单元或串行都走 /loop-it(它自己判模式),并行走 /graph;代码已经写好,可以直接用 /review-it 审查。但完整走一遍流程能获得最好的效果。

Q: /goal 是什么?为什么不在 skills 目录中?

/goal 是 DSH 的命令,不是技能,所以不在 ~/.agents/skills 中:人可以直接敲它;模型侧 create_goal 在顶层回合里自己就能开(一批活开工时创建它、批末 complete)。实现那一步与它无关,由 agent 内联完成(见 Step 2: /loop-it · /graph)。

Q: 可以在非 GitHub 项目中使用吗?

可以。/to-issues 支持把 Issue 保存为本地 Markdown 文件。/review-it 只需要本地 git 仓库。/ship-it 目前依赖 GitHub(gh CLI)。

Q: /review-it 和手动 code review 的区别?

/review-it 是自动化的自查(self-review),在提交前发现明显问题。它分两轴报告:Spec 轴查这份 diff 有没有做「要求的事」(缺的 / 多做的 / 做错的,每条引用对应的验收条件),Standards 轴按 8 个维度查代码质量。两轴分开报告、不合并排序。它不替代团队 code review,而是在 PR 创建前提升代码质量,减少 reviewer 需要指出的低级问题。

Q: Issue 粒度应该多大?

每个 Issue 应该是一个 Agent 在单次会话中可以完成的工作量——通常是 1-3 个文件的变更,有明确的验收标准。这个粒度由 /to-issues 把关,拆完你可以调整。

Q: skills/vendor/ 里的技能可以直接改吗?

不要。skills/vendor/ 下都是上游技能的逐字副本,就地编辑会在下次 make vendor 时被覆盖。要改就先改 skills/vendor/vendor.json 里的 manifest,再重新同步;如果你要做的是这套技能集自己的改动,那就写成一个 flow / bonus 技能。详见 21. Vendor 技能与一键同步。

Q: /svg-diagram 的机械校验包含哪些检查?

它自带零依赖的 tools/svg-lint,共 12 项检查:重叠、块间距、框高、连接线几何、箭头 marker、文字溢出、viewBox 裁切、字体栈、调色板一致性、浅底回退、基线偏移、XML 转义。规范本身还覆盖布局、连接线与箭头的画法,以及 CJK 字体栈。