Superpowers 到底该怎么用
一套会在 AI 动手前先拦它一下的流程:什么时候该让它接管,什么时候它只是负担
📅 更新于 2026-09-13
00先花 3 分钟:什么时候该用它
读完这一篇,你能回答一个很具体的问题:你手上这个任务,该不该让 Superpowers(下面统称 SP)这套流程接管,以及接管到什么程度。先说清两个词:代理就是替你干活的 AI 编程助手(Claude Code、Cursor 这类工具里的那个"它");插件是安装形式——把一组规则文件打包装进你已经在用的工具里。SP 不是"装上就更强"的插件,而是一叠会主动拦住代理的规则文件:你会看到它在什么情况下省下返工,也会看到它在什么情况下纯属拖累。
这一篇回答"该不该用、用到哪一档":14 个技能各治什么毛病、三条路径怎么选、什么时候这套流程反而是负担,以及五天怎么上手。如果你要的是"它内部按什么规则运转"——七步接力、评审契约、账本格式、五轮上限、停机条件——看 《Superpowers 的工作流程》。两篇不重复:这篇讲选型,那篇讲机制。
① 它管的是过程,不是智力:不换模型、不加私有接口,只是让代理在动手前先问、动手后先自证。
② 三条硬规矩撑着整套东西:没得到你点头不写代码;没有先失败的测试不写生产代码;宣布"做完了"必须出示刚跑过的证据。
③ 流程按任务缩放,但有一道关卡不缩放:小改动只给两句话的设计,可"等你点头"这一步永远不能省。
按你现在的处境,直接翻到那一节
| 你现在的处境 | 直接看这一节 | 为什么先看它 |
|---|---|---|
| 还没装,想先看看它到底会做什么 | 04 最小例子 | 一段真实对话走查,比任何功能列表都直观 |
| 已经装了,但代理还是闷头写代码 | 03 装与验证 → 12 三连排查 | 九成是"没重载插件"或"技能没被加载",不是它不听话 |
| 最烦的是它不听需求就开工 | 06 Brainstorming | 这一节讲"批准门禁"和三条路径的取舍 |
| 它总说"测过了"但你不信 | 09 先写测试的铁律 → 10 完工前验证 | 这两节讲"怎么用证据替代口头承诺" |
| 要同时推进好几条独立任务 | 08 子代理 → 11 隔离与收尾 | 并行会打架,这两节讲怎么分区 |
| 担心"杀鸡用牛刀"、开销花太凶 | 13 什么时候不该用 | 给出可以不做、可以显式豁免的清单 |
| 只想抄一条命令或一段开场话术 | 12 速查手册 | 命令表 + 三段可直接粘贴的模板 |
一条能立刻执行的最短路径
别一上来铺开五个工具。只挑你每天真的在用的那个,照着 03 节的一行命令装上。
重载插件或新开会话 → 在 /help 里看到新命令 → 用一条会改代码的真实需求试探它会不会先问。判据见 03.4。
别用玩具例子。挑一个你这两天就得改的小东西,输入 /brainstorm 描述它,一路看完澄清 → 设计 → 计划 → 测试 → 收尾。
设计文档、实施计划、进度台账。看它们有没有写到"换一个不知情的代理也能照做"的细度(07 节给了自检标准)。
这一步刻意放在最后:先用一次真实体验校准"它对你到底是省时间还是浪费时间",再谈扩展。
读完你应该能
01它到底是什么:先把三个错想破掉
如果你只听过名字,最可能把它想成"一套更聪明的提示词"或"某个一键生成代码的命令"。这两种理解都会让你用错它。
一句话:它到底给你装了什么?
SP 是一叠带触发条件的说明书。行业里管这种"代理在特定任务下会自动加载并遵守的说明书"叫技能(skill):每个技能是一份 Markdown 文本文件(文件名通常是 SKILL.md),开头写着"什么时候该用我",正文写着"这类活必须怎么干、干到哪一步才算完"。
你在 Claude Code 这类"AI 程序员"工具里装上它之后,代理不是变聪明了,而是多了一套它必须遵守的作业规程。官方的自我描述就是这个意思——"An agentic skills framework & software development methodology that works."(一套能用的智能体技能框架与软件开发方法论)。
这里有个词值得先分清楚:你用的那个 AI 编程工具(Claude Code、Cursor、Codex、Gemini CLI……)叫宿主;SP 是装在宿主里的内容;让内容生效的机制(技能怎么被找到、怎么被加载)由宿主提供。同一套 SP 内容,装在不同宿主里,"外壳命令"不同,但技能写的东西是同一份。
先打个照面:八个后面会反复出现的词
下面这些词现在只需要"见过一面",看不懂细节完全没关系——每个词在正文里都有专门一节展开。先扫一眼,是为了让你读后面时不会因为一个生词卡住。
| 词 | 一句话是什么意思 | 它在本文哪里被展开 |
|---|---|---|
| 仓库(repository) | 存放一个项目全部文件与改动历史的地方 | 03 节安装、11 节 worktree |
| 分支(branch) | 同一条代码历史的一个平行副本:改动先留在副本上,确认无误再合回去 | 11 节整节 |
| 提交(commit) | 把当前的改动在历史里存成一个有编号的快照 | 05 节的台账样例 |
| 上下文(context) | 模型当前能看到的那一大段对话与文件内容;它有容量上限,装不下时会被压缩 | 05 节"为什么非要把东西写成文件" |
| token | 模型读写文本的计量单位,可以粗略当成"字数"——花得越多越贵 | 08 节末尾(用 token 换正确率) |
| TDD(测试驱动开发) | 先写一段会自动跑的检查代码,再写能让它通过的实现,顺序不能反 | 09 节整节 |
| worktree(工作树) | 把同一个仓库的另一条分支单独摆到另一个文件夹里,两边互不干扰 | 11 节整节 |
| PR(pull request) | 把一条分支上的改动提交给对方评审、等待合并的请求 | 11 节收尾的三个选项 |
它不是"更聪明的提示词"——那它和提示词差在哪?
提示词(包括写在 AGENTS.md 里的背景说明)和技能都是文本,区别不在"写得多好",而在什么时候被读到、违反了会怎样:
| 对比项 | 你的提示词 / AGENTS.md | SP 技能(为什么这条差别要紧) |
|---|---|---|
| 性质 | 给代理的"背景与偏好说明" | 带触发条件的"操作规程"。背景说明可以商量,操作规程只回答"这类活按哪几步做" |
| 生效方式 | 一直在上下文里,靠模型自觉遵守 | 任务命中才加载,加载即按流程执行——所以它不会因为对话变长而被稀释 |
| 违反后果 | 最多算"不听话" | 技能里写着硬门禁(等你批准、先看到测试失败、完工出示证据),越线就叫违规 |
| 可编排性 | 一整段文字,难分阶段 | 可串成流水线:前一个技能的产物是后一个的输入,能被"接力" |
一句话记法:AGENTS.md 回答"我是谁、我们怎么协作",技能回答"这类活按这几步做、做不到就不算完"。两者不冲突,通常一起用。
它不换模型、不加私有接口,那它凭什么起作用?
四个环节咬在一起:
你以插件(plugin,就是把一组技能打包分发的载体)的形式装它,宿主因此认识了一批新技能和斜杠命令。
每次新会话(会话 = 你打开工具之后的一段连续对话)开始,插件注入一段很短的"引导词"(官方叫 bootstrap,意思是"启动时喂给代理的第一口话"),内容是:动手前先想想有没有相关技能要遵守。
代理面对任务时先判断命中了哪条技能——"要实现功能"命中测试驱动,"有 Bug"命中系统性调试——然后打开对应的说明书照做。
技能正文写的是"没有先失败的测试,不许有生产代码"这种带门禁的句子,而不是"建议你试试测试"。这是它和一般提示词最大的手感差别。
顺带解释两个你会在截图里看到的词:门禁指一道"不满足条件就走不过去"的关卡(比如"你点头之前不许写代码");钩子(hook)指宿主在某些固定时点(例如会话开始)自动执行的一小段逻辑——上面第 2 步的引导词就是靠钩子塞进去的。装完没生效,很多时候就是钩子没跑(需要重载插件或新开会话)。
它凭什么能跨十几个工具用?
因为它不依赖任何一家厂商的私有能力,而是建立在各家都开始提供的通用"技能"约定上。截至 2026-09 校对时,官方 README 列出的支持面包括:Claude Code、Codex(App 与 CLI)、Cursor、Devin CLI、Gemini CLI、GitHub Copilot CLI、OpenCode、Kimi Code、Pi、Hermes Agent、Antigravity、Factory Droid、Grok Build CLI。装到不同工具上,触发的外壳不同,技能内容与纪律是同一套。
它真正做的事,是把"工程规范"从人脑、团队 wiki 和口头约定里抽出来,变成每次开新会话都会被加载的文本文件。文本的好处是可版本控制、可评审、可被任何人复制改造——这比任何"记忆型提示词"都可靠。
它给你省什么、不省什么?
最后一句是这套东西最反直觉的地方:它多数时候不让你更快,而是让你更少返工。如果你当下的任务是"5 分钟试个想法",它确实会显得啰嗦——这正是 13 节要处理的情况。
本文只讲"这套做法怎么用、什么时候别用",不重复官方文档的每一条规则。SP 迭代很快(官方 README 自己写着"更新多数情况下会自动进行"),技能名、命令前缀、目录布局都可能变。凡是本文给出的具体命令与路径,都以你装完在 /help 和仓库 Release Notes 里看到的为准。
02它在堵哪个洞:为什么"纪律"比"聪明"更值钱
你的问题其实不是"AI 不会写",而是"过程没纪律"
现在的 AI 编程代理,单看"写某段代码"的能力已经很够用。真正出问题的是它做题的顺序:一句话上来就动手、需求没澄清就先写、为了"看起来完成了"跳过测试、写完不做独立检查就宣布成功。SP 的设计假设非常直白:默认代理会走捷径(take shortcuts),所以把流程做成强制,而不是停在"建议你认真点"。
同一个任务,装与不装差在哪?
需求都是"给注册功能加个邮箱校验":
- 不澄清就写代码,方向理解偏了
- 不写测试,改完说"我测过了"(其实是"它没报错")
- 顺手重构了无关代码,改动范围变大、评审困难
- 没有提交前自查,坏味道留给下一个任务
- 长会话里早期决定被"遗忘",后期自相矛盾
- Brainstorming 先问清"校验规则、错误提示、要不要支持国际邮箱"
- 在独立的分支工作区里开工,不污染主分支
- 先写一个会失败的测试,再写代码让它变绿
- 实现完交给独立评审,按严重级别回报问题
- 收尾时整理分支,让你选合并 / 发 PR / 保留
注意这不是"能力更强",是把人类团队里那套让人不互相糊弄的机制,搬给了代理:写代码的和挑刺的不是同一个人,挑刺才有效。
它专门堵的四类漏洞
| 漏洞 | 典型表现 | SP 用哪一招堵(以及这一招的代价) |
|---|---|---|
| 需求漂移 | 需求没澄清就实现,做完才发现在做错的东西 | Brainstorming 的批准门禁:你没点头它不许写代码。代价是开头多花几轮问答 |
| 测试形同虚设 | 代码先写、测试后补甚至不补,"手动点两下就算测过" | TDD 铁律:没有先失败的测试,就不许有生产代码。代价是前期节奏明显变慢 |
| 上下文丢失 | 长会话里,模型把早期的决定和约束"忘"了 | 把关键产物落盘成文件(设计文档 / 实施计划 / 进度台账)。代价是仓库里多出过程文件 |
| 标准不一 | 每个人、每个会话的提示方式不同,结果忽好忽坏 | 把工程文化写进技能文件,任何会话自动遵守同一套规矩。代价是改规矩要走一次文本评审 |
哪些事它管不了?(说清楚这个才不算吹)
它管的是过程,管不了下面这些:
- 需求本身想错了:Brainstorming 只能帮你把话说清楚,不能替你判断"这功能到底该不该做"。
- 领域知识缺失:流程保证"按纪律实现",不保证模型懂你的业务。
- 一次性的灵感速写:你只想 5 分钟试个想法时,整套流程是负担——这时该显式豁免(走"探针"路径,见 06 节),而不是硬走。
- 人力层面的问题:谁该做决定、团队认不认这套规范——文件管不了人。
能分清"哪些责任交给流程、哪些留给自己",才算真正用对了它。
03怎么装、怎么确认它真的接管了
安装这一步本身只要一分钟,但"装完没生效"是新手最高频的翻车点,所以本节后半段的验证与排查比安装更重要。装之前请确认:你已经在终端里跑通过你要装的那个宿主,并且登录过。
先选一个宿主,别一次装五个
SP 对每个宿主都要单独装一次(官方 README 原话就是 "Installation differs by harness. If you use more than one, install Superpowers separately for each one.")。第一周只装你每天真的在用的那个:装多个不会冲突,但新手的理解成本会翻倍。
方式 A:从 Anthropic 官方插件市场装(Claude Code,最省心)
在 Claude Code 的对话里直接输入一行:
/plugin install superpowers@claude-plugins-official
这是官方插件市场(一个可以搜索、安装、自动更新的插件目录,英文叫 marketplace)里的分发渠道,能跟着官方版本走。
方式 B:从 SP 自己的市场装
如果你的宿主没接官方市场,或者你想跟 SP 仓库的发版节奏更紧,用它自己的市场:
/plugin marketplace add obra/superpowers-marketplace
/plugin install superpowers@superpowers-marketplace
两条命令分别干两件事:把"obra 的插件市场"登记进你的宿主,然后从这个市场里安装 SP。
其他工具分别怎么装?
同一套技能内容,外壳命令不同。挑你手上正在用的那一段,整段复制(每段都能独立粘贴运行):
# Antigravity —— 从仓库直接装插件;重复执行同一条命令即更新
agy plugin install https://github.com/obra/superpowers
# Codex App —— 在侧边栏 Plugins 的 Coding 分类里找到 Superpowers,点 + 号按提示装
# Codex CLI —— 打开插件搜索界面后搜 superpowers,选 Install Plugin
/plugins
superpowers
# Cursor —— 在 Agent 聊天里装,或在插件市场搜 superpowers
/add-plugin superpowers
# Devin CLI —— 装好之后用第二条命令更新
devin plugins install obra/superpowers
devin plugins update superpowers
# Factory Droid —— 先登记市场,再安装
droid plugin marketplace add https://github.com/obra/superpowers
droid plugin install superpowers@superpowers
# Gemini CLI —— 装扩展;第二条命令更新
gemini extensions install https://github.com/obra/superpowers
gemini extensions update superpowers
# GitHub Copilot CLI —— 先登记市场,再安装
copilot plugin marketplace add obra/superpowers-marketplace
copilot plugin install superpowers@superpowers-marketplace
# Grok Build CLI —— xAI 官方市场;或在 TUI 里用 /marketplace 搜着装
grok plugin install superpowers@xai-official --trust
# Kimi Code —— 插件市场里找 Marketplace > Superpowers;也可从仓库直装
/plugins install https://github.com/obra/superpowers
# Hermes Agent —— 装完要重启正在跑的会话(它没有"上下文压缩后重新注入"的钩子)
hermes plugins install obra/superpowers --enable
# Pi —— 作为 Pi 包安装;本地开发时可用第二条把它当临时包加载
pi install git:github.com/obra/superpowers
pi -e /path/to/superpowers
# OpenCode —— 让代理去读并遵循官方安装说明
Fetch and follow instructions from https://raw.githubusercontent.com/obra/superpowers/refs/heads/main/.opencode/INSTALL.md
如果你更想看"哪个工具用哪一行"的速查,这张表跟上面那段是同一份内容:
| 工具 | 安装命令 | 装完要注意什么 |
|---|---|---|
| Claude Code(官方市场) | /plugin install superpowers@claude-plugins-official | 最常见路径;跟随官方版本 |
| Claude Code(自家市场) | /plugin marketplace add obra/superpowers-marketplace 后 /plugin install superpowers@superpowers-marketplace | 分两步,先登记市场再装 |
| Antigravity | agy plugin install https://github.com/obra/superpowers | 它会跑会话启动钩子,所以第一条消息起就生效 |
| Codex App / CLI | 官方 Codex 插件市场里搜 superpowers 安装 | App 里在侧边栏 Plugins;CLI 里先敲 /plugins |
| Cursor | /add-plugin superpowers | 也可以在插件市场里搜 |
| Devin CLI | devin plugins install obra/superpowers | 更新用 devin plugins update superpowers |
| Factory Droid | droid plugin marketplace add … 后 droid plugin install superpowers@superpowers | 同样是"先登记市场"两步式 |
| Gemini CLI | gemini extensions install https://github.com/obra/superpowers | 更新用 gemini extensions update superpowers |
| GitHub Copilot CLI | copilot plugin marketplace add obra/superpowers-marketplace 后 copilot plugin install superpowers@superpowers-marketplace | 与 Claude Code 的市场同源 |
| Grok Build CLI | grok plugin install superpowers@xai-official --trust | 走 xAI 官方市场;--trust 表示信任该来源 |
| Kimi Code | /plugins install https://github.com/obra/superpowers | 也可在市场界面里点装 |
| Hermes Agent | hermes plugins install obra/superpowers --enable | 没有"压缩后重新注入"钩子,超长会话后技能可能不再触发,得新开会话 |
| OpenCode | 让代理读官方 .opencode/INSTALL.md | OpenCode 有自己的插件安装方式,和其他工具分开装 |
| Pi | pi install git:github.com/obra/superpowers | 本地开发可加 pi -e /path/to/superpowers |
先只在你最常用的一个工具上装好、跑通一两个例子,再考虑铺到其他工具。装多个工具不会冲突,但一次只学一个宿主,心智负担最小。
装完怎么验证它真的生效?
不要凭"装的时候没报错"下结论,跑完这三步:
/reload-plugins
插件的"会话启动钩子"要生效通常需要这一步。各版本提示语不同,看到类似 "SessionStart startup hook succeeded" 就算过了。
/help
应能看到新增的斜杠命令,最常见的是 /brainstorm、/write-plan、/execute-plan。部分宿主会以命名空间前缀出现,例如 /superpowers:brainstorm——两种形态都在用,以你 /help 里看到的为准。
随便挑一个真需求(比如"帮我看看项目里邮箱校验这段能不能抽象一下")输入 /brainstorm,看它是开始问问题,还是直接改代码。能问问题 = 工作流已经接管。
装完没反应?先查这张排查表
| 现象 | 最可能的原因 | 怎么处理 |
|---|---|---|
/help 里看不到新命令 | 装了但没重载,或还在旧会话里 | 跑 /reload-plugins,或新开一个会话再看 |
| 命令在,但代理不"接管"流程 | 技能没被加载进上下文 | 直接问它"当前任务命中了哪些技能?",或手动敲一次 /brainstorm |
| 提示缺权限、频繁要你批准 | 代理权限不足以建 worktree、跑测试 | 到宿主的权限设置里放开文件读写与常用命令;只读模式会卡死整条流水线 |
| 升级后行为变了、和文档对不上 | 版本迭代快,技能布局或命令前缀改了 | 看官方 Release Notes 与最新 README;命令以 /help 为准 |
| 长会话后期技能忽然不再触发 | 上下文被压缩后引导词丢了;部分宿主没有"压缩后重新注入"的钩子 | 新开一个会话。Hermes Agent 官方说明里明确提到这个限制 |
| 不想用了 | — | 在插件列表里停用或卸载即可,卸载不会动你的代码 |
权限与遥测要不要动?
| 项 | 要不要管 | 说明(含具体怎么设) |
|---|---|---|
| 权限 / 批准模式 | 建议开 | SP 会频繁创建 worktree、跑测试、读文件。建议给代理足够的文件读写与命令执行权限,否则"每步都要你点允许"会打断整条流程 |
| 遥测(telemetry) | 可选关 | 默认只有 Brainstorming 的可视化伴侣会在加载它自己的 logo 时带上 SP 版本号,不含你的项目、提示词或代理信息。想关就设环境变量 SUPERPOWERS_DISABLE_TELEMETRY 为任意真值;它同时也尊重 Claude Code 的 DISABLE_TELEMETRY 与 CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC |
| 技能仓库位置 | 一般不用管 | 插件自带的技能住在插件目录里,不用你操心。你自己写的个人技能住在宿主的技能目录:Claude Code 是 ~/.claude/skills/;Codex、Copilot CLI、Gemini CLI 也认跨运行时的别名目录 ~/.agents/skills/。想"手工改技能"时再去这些地方找 |
| 自动更新 | 默认自动 | 官方 README 说明更新"多数情况下会自动进行"("often automatic")。你只需要偶尔对一下版本号 |
04最小例子:让它接住一个 10 行的小改动
先用一个几乎人人见过的场景——"给用户名输入加长度校验"——把"流程接管"变成看得见的东西。注意:下面第 3、4 步那段完整对话是根据技能规则还原的示意走查,不是逐字输出;不同宿主、不同版本措辞不同,但节奏一致。
第一步:同一句话,两种宿主
你:帮我把用户名加个长度校验。
AI:好的,我改一下 register.js:
然后它直接给出改好的代码。你没看到它问任何问题,也没人保证它写了测试。
你:帮我把用户名加个长度校验。
AI:我命中 brainstorming 技能,先澄清两个问题:
1) 期望的最小/最大长度是多少?
2) 超界时是报错还是自动裁剪?
同样的指令,代理先停下问问题——这就是被工作流"接管"的最直观信号。
第二步:这条命令代表一次完整的最短闭环
把刚才那几步压缩成你实际输入的东西:
你:/brainstorm
我想给用户名加长度校验,3–20 位,超界返回错误提示,不要自动裁剪。
AI:(澄清后给出简短设计,等你确认)……(进入实现:worktree → TDD → review → 收尾)
你:可以,按这个做。
如果你只想跳过前面的设计讨论(需求已经很清楚了),也可以从计划直接切入:
/write-plan "给用户名加 3–20 位长度校验,TDD 实现"
第三步:把它展开成"你实际会看到"的一段对话
读它的目的不是背流程,而是让"流程接管"变得可见:每一步都是一条能指出出处的技能约束,不是玄学。
你:/brainstorm 给用户名加长度校验:3–20 位,超界报错,别自动裁剪。
AI:我先把这个归到 brainstorming 的 "bounded(有界)" 路径——
它是对现有注册流程的小改动。按规则,在你批准前我不会写任何代码。
先确认两点:
1) 用户名是否允许空格 / 中文?(A 不允许 / B 允许空格 / C 其他)
2) 超界时报错文案由我拟一个,还是你用固定文案?
你:A。文案你拟。
AI:好。这是拟在对话内的简短设计,请过目:
· 改 src/register/validate.ts,新增 validateUsername(name: string): boolean
· 长度 [3, 20] 内返回 true;错误文案 "用户名需 3–20 位"
· 通过一个导出函数暴露,供表单调用
这段设计对吗?批准后我会开 worktree 分支并进入 TDD。
你:可以。
AI:(using-git-worktrees)已在 git@feature/user-length 分支开工,主分支不受影响。
(TDD RED)先写测试——期望它先失败:
第四步:它真的会先写测试吗?
会,而且顺序不能颠倒:先写一条注定失败的测试,跑一遍确认"失败原因是功能不存在",再写实现。
// validate.test.ts
import { describe, it, expect } from 'vitest'
import { validateUsername } from './validate'
describe('validateUsername', () => {
it('rejects a name shorter than 3 chars', () => {
expect(validateUsername('ab')).toBe(false) // 此刻 validateUsername 还不存在 → 必然失败
})
})
AI:(跑测试)红灯确认:失败原因是 "validateUsername is not a function",正是预期的"功能缺失"。
(TDD GREEN)写最小实现让它变绿:
// validate.ts
export function validateUsername(name: string): boolean {
return name.length >= 3 && name.length <= 20
}
这里出现两个你会在全篇反复看到的词:RED 指"测试刚写好、还没实现,所以它必然失败"的那一步;GREEN 指"写了最小实现、测试刚通过"的那一步。它们中间还夹着一步强制动作:亲眼确认红灯的失败原因是对的——不是因为文件名打错、不是因为环境没装好。
第五步:收尾时它会问你什么?
AI:(跑全量测试)绿。补一条超界的测试再走一轮 RED→GREEN 后,
请求独立评审……(requesting-code-review 报告无 Critical)
(finishing-a-development-branch)测试全绿。接下来?
1. Merge back to main locally
2. Push and create a Pull Request
3. Keep the branch as-is (I'll handle it later)
你:1。
AI:已合并,清理了 worktree。本次改动完成。
老版本会给你四个选项(合并 / PR / 保留 / 丢弃);从 v6.2.0 起,"丢弃这条分支"被从菜单里拿掉了,理由与现在的确认方式见 11 节。
怎么判断"装成功了"?
判据只有一个:面对一条会改代码的指令,代理是先问 / 先设计 / 先测,而不是闷头就改。看到它开始"啰嗦"地走流程,就说明它已经装好了。想立刻把它关掉也很简单——从设置里停用该插件即可。
因为流程的价值恰恰在"小事"上最容易看见:小改动省掉的返工比例最大。一个 10 行的校验如果需求理解错了,重写成本是 100%。SP 宁可在开头多问 30 秒,也不愿在结尾多花 10 分钟。
05七步工作流:一次改动是怎么被接力的
SP 把一次开发组织成一条"接力":前一个技能交出的产物(批准过的设计、干净的分支、任务清单、绿测试)成为下一个技能的输入。下面按顺序讲清楚:每一步由哪个技能负责、交出什么、以及你作为人什么时候被要求介入。
七步分别由谁负责?
| 阶段 | 负责技能 | 交给下一步的产物 / 你的介入点 |
|---|---|---|
| ① 想清楚 | brainstorming | 批准过的设计(简单改动就在对话里;架构级写成设计文档存进仓库)。你要回答问题、逐段点头、评审设计文档 |
| ② 隔离 | using-git-worktrees | 干净的独立分支工作区 + 测试基线(先跑一遍确认全是绿的)。你一般无感,偶尔确认目录位置 |
| ③ 切碎 | writing-plans | 一份任务清单:每任务 2–5 分钟、带文件路径与验证步骤。你只需要看一遍并同意 |
| ④ 执行 | subagent-driven-development 或 executing-plans | 已提交、已过评审的代码。批间检查点(executing 模式)或结果汇报 |
| ⑤ 测试 | test-driven-development | 每个新功能对应一个"先失败后变绿"的测试。遇到拿不准的行为时由你拍板 |
| ⑥ 评审 | requesting-code-review | 按严重级别标注问题的评审报告。Critical 级问题会停下来等你处理 |
| ⑦ 收尾 | finishing-a-development-branch | 跑通测试后,进入"合并 / 发 PR / 保留"的选择;由你做最终取舍 |
三份"接力文件"长什么样?
工作流里最容易被忽略的一点:每一步的成果多数要落成文件,而不是只留在对话里。这样即使换会话、换代理、上下文被压缩,接力也不会断。下面三份是最小形态(字段示意,路径与字段以官方和你所用工具为准)。
① 设计文档(brainstorming 走架构级路径时产出,存进仓库):
# docs/superpowers/specs/2026-09-07-user-length-design.md
# 用户名长度校验 · 设计
## 目标与范围
给注册表单的用户名加 3–20 位长度校验,超界报错、不自动裁剪。
## 备选方案(带取舍)
- A. 在 validate.ts 加一个纯函数(推荐:无副作用、易测、表单与后端共用)
- B. 只在表单组件内联校验(不推荐:不可复用、难单测)
- C. 后端再做一次(本次不做,另行排期)
## 组件 / 数据流 / 错误处理 / 测试计划
(……每节讲完向人确认一次……)
② 实施计划(writing-plans 产出,给执行代理照做):
## 任务 1:新增 validateUsername 纯函数(2–3 分钟)
- 文件:src/register/validate.ts
- 代码:导出 (name) => name.length >= 3 && name.length <= 20
- 验证:node 里单测覆盖 2/3/20/21 位四个输入
## 任务 2:接进注册表单(2–3 分钟)
- 文件:src/register/form.tsx
- 代码:调用 validateUsername,失败时展示文案 "用户名需 3–20 位"
- 验证:浏览器输入 "ab" 应看到报错
③ 进度台账(subagent 模式跨任务记账,防止代理"失忆")。从 v6.2.0 起,台账不再是一份随手放的 plan-ledger.md,而是落在每份计划自己的工作区里:<仓库根>/.superpowers/sdd/<计划文件名>/progress.md(这个目录被 git 忽略,属于过程产物):
# SDD ledger — plan: docs/superpowers/plans/user-length.md
- [x] 任务1 validate.ts 提交 a1b2c3d | 评审:PASS
- [x] 任务2 form.tsx 提交 e4f5g6h | 评审:1×Important(已修)→ 复评 PASS
- [x] 任务3 收尾测试 提交 i7j8k9l | 评审:PASS
Ruling: 第2轮 Important 级意见"文案应常量外置"裁定为可延后,记 Minor 待最终评审 — 理由:不影响行为 — 裁错的代价:多一次小改动
最后那行 Ruling: 是官方规定的记账格式:Ruling: <你决定了什么> — <为什么> — <裁错了要付什么代价>。它对应一条很硬的设计原则——"定夺,而不是卡住"(原文 "Rulings, not stalls")。
为什么非要把东西写成文件?
官方在子代理技能里说得直白:"Conversation memory does not survive compaction."——会话记忆扛不住上下文压缩。真实会话里出现过最贵的一种失败:控制器忘了自己进行到哪儿,把已经做完的整串任务重新派发了一遍。文件正是为这件事准备的:台账里记下的提交号在 git 里真实存在,哪怕你的上下文已经完全不记得创建过它们。上下文被压缩后,要相信台账和 git log,而不是自己的回忆。
这不是一条你必须从头走到尾的铁轨
七步是"默认的完整形态",不是每次都全走一遍。常见的几种偏航都是正规用法:
- 改动极小且清楚:Brainstorming 的 bounded 路径(bounded = 有界,指对仓库里已有流程做范围清晰的小改动)会大幅压缩第①步,你可能在第③步之前就进入实现。
- 任务彼此独立、想并行:走 executing-plans 把一批任务交给并行子代理,或用 dispatching-parallel-agents。
- 需求已经很明确:可以直接
/write-plan,甚至直接说"按 TDD 实现 X",技能会从命中的那一步接管。 - 纯探索 / 求证:走 brainstorming 的 spike(探针)路径——产出是一个结论或建议,不留下需要保留的代码。
"装了它 = 所有任务都被迫走七步"是误解吗?
是误解。它是按需命中:只有命中的技能才会被触发。测试驱动、修 Bug 前先复现、重大改动先设计——这些是"默认值";而是否开新分支、是否派子代理,由当前改动的形态决定。真正会让你觉得"被流程绑住"的,通常是 Brainstorming 的盘问与独立评审——那正是它"用 token 换正确率"的地方,取舍见 13 节。
06动手之前,它为什么先跟你抬杠?
Brainstorming 是整个框架的"门卫"技能:新手最容易嫌它烦,老手最离不开它。它要解决的是一句很朴素的话——绝大多数"AI 做错了",不是模型笨,而是它在实现一个没人确认过的假设。
它为什么叫 brainstorming,却不让你发散?
这个名字容易误导。它做的恰恰相反:收敛式地盘问。技能开头直接写死一条硬门禁(原文用 <HARD-GATE> 标签标出):在你被告知"它打算怎么做"并且你点头之前,它不许调用任何实现类技能、不许写任何代码、不许搭任何脚手架。而且官方补了一句非常关键的话——"这份仪式感随任务缩放,批准门禁永不缩放"(the ceremony scales with the task; the approval gate never does)。
所以它有三个常见误解值得当场破掉:
- 它不是头脑风暴会议:不鼓励天马行空,而是把模糊想法压成一份可执行的设计。
- 它不是"写代码前的客套":它产出的每一个问题、每一段设计,都在为"能不能少返工"服务。
- 它不是只有大项目才用:官方明确说,哪怕只是两句话的改动,也要先得到你明确的"可以"。
三条路径怎么选?
技能一开始会把你的请求归入三类之一,并且当众说出分类(这样你可以当场纠正):
| 路径 | 它解决什么问题 | 产出与你的介入点 |
|---|---|---|
| Spike(探针) | "能不能做到?""哪种方案可行?""快速粗糙没关系"这类求证问题 | 先用两三句话说出要试什么 → 你点头 → 用最省的方式查 → 报告一个建议。不写设计文档,做的代码一律标记为"用完即弃" |
| Bounded(有界) | 对仓库里已经存在的流程做范围清晰的小改动(加个开关、加个小接口、单文件修复) | 问该问的问题 → 在对话里给一段简短设计 → 你明确说"可以" → 才开工。不写设计文档、不写实施计划 |
| Architectural(架构级) | 新项目、新子系统,或会改变组件衔接方式、动到别人依赖的接口 | 完整流程:提问 → 给 2–3 个方案及取舍 → 分节展示设计并逐段等你确认 → 写设计文档并提交 → 自查 → 你评审文档 → 交给写计划技能 |
这里的 "有界"是按仓库判定的,不是按你的熟悉程度判定的。官方在红旗表里专门堵了这条借口:"我熟这类应用,所以算有界"——"Bounded measures the repo, not your familiarity. A new project has no existing flow — it is architectural."(有界衡量的是仓库,不是你的熟悉度;新项目没有"已存在的流程",它是架构级。)
拿不准该走哪条路怎么办?
先解释这个词:棘轮是一种只能朝一个方向转的齿轮,倒转会被卡住。规则本身是——官方原话:"When in doubt between two paths, take the heavier one."(两条路拿不准时,选更重的那条。)而且这个棘轮是单向的:任务进行中发现了隐藏复杂度,路径只能升级——停下来告诉你,然后走更重的流程;没有任何情况可以中途降级。
另一条同样重要:简单 ≠ 可以不做设计。bounded 的意思是"设计很短"(几句话到几小段),绝不是"没有设计"。
一次只问一个问题,实际对话是什么样?
它的问题节奏是:一次只问一个、能给选项就不开放、问的都是能改变设计的问题(范围、边界、界面取舍)。下面是一段示意盘问:
你:想给博客加一个"按标签筛选文章"的页面。
AI:(先归类)这是对现有页面结构的改动,我先按 architectural 处理还是 bounded?
先问最影响范围的问题:这个筛选是
A 只筛选"已发布"文章 B 也要筛草稿/定时文章 C 其他
你:A。
AI:好的。第二个问题——标签来源:A 文章自带标签字段(需要在编辑页维护)
B 我选几个固定标签写死在配置里 C 其他
你:A。
AI:那第三个问题,UI:A 顶部一排标签点击切换 B 下拉选择 C 其他
你:A。
AI:清楚了。这轮先给方案草稿(约 150 字,覆盖列表页改造、URL 结构、空结果态、
测试计划),每讲完一节我都会停下来问你"这部分对吗"……
注意这里的顺序很讲究:先归定路径,再问最影响范围的问题。它不是闲聊,是一台把"模糊愿望"压成"精确需求"的机器。另外,架构级路径还有两个细节:设计文档默认写到 docs/superpowers/specs/YYYY-MM-DD-<topic>-design.md(可以被你的偏好覆盖),写完它会先做一遍自查(扫占位符、查前后矛盾、查范围、查歧义),再请你评审文件——不是口头评审。
为什么"改一个常量"也要你点头?
因为门禁拦的不是"改动大小",而是"未经确认的假设"。官方给出的理由值得原样记住:"'Simple' tasks are where unexamined assumptions cause the most wasted work."(恰恰是"简单"任务里,没被检查的假设造成最多浪费。)
一个 10 行的校验,藏着的问题可能是:"校验"到底是拦截还是提示?超界是报错还是自动裁剪?允不允许中文和空格?这些确认一次,抵得上返工十次。它还顺带解决了另一个问题:把设计拆成小节逐步确认,每段都短到你的注意力跟得上。
新手最容易踩的四个坑
| 坑 | 会发生什么 | 更合适的做法 |
|---|---|---|
| 嫌它啰嗦,直接说"别问了快做" | 你暂时绕开了门禁,同时把返工风险请了回来 | 一次把目的、边界、验收标准喂足,让它几轮就收敛 |
| 把 spike 的产物当正式功能 | 验证代码混进主干,无人负责维护 | 探针的产出是"答案"不是代码;正式实现另起炉灶,重新分类 |
| 在"简单需求"上跳过它 | 小改动里藏着歧义("校验"是拦截还是提示?) | 花 30 秒确认。简单给的是短设计,不是免设计 |
| 不纠正它的分类 | 该走架构路径的活被分成了 bounded,后面每一步都建在错误假设上 | 它当众说出分类时当场喊停;中途发现复杂度也可以要求升级 |
07怎么把设计切成"换个代理也能照做"的小步?
设计批准后的下一棒,是把"要做什么"翻译成"具体怎么一步步做"。这一棒由 writing-plans 负责写计划,executing-plans 负责在别的会话里按批执行。
一份合格的计划里必须有哪四样东西?
官方对计划的定义有一句很妙的标准:计划要清楚到"一个热情但品味差、没判断力、不了解项目、还讨厌写测试的初级工程师"也能照着执行(原文:clear enough for an enthusiastic junior engineer with poor taste, no judgement, no project context, and an aversion to testing to follow)。为了达到这个效果,每个任务被刻意切成 2–5 分钟能做完的颗粒,并自带四样东西:
要改哪个文件、新建哪个文件,不含糊。
关键实现直接写进计划,执行时是"照抄 + 跑测试",不是现想。
每个任务做完,怎么确认它真的对了(跑哪条命令、看到什么算过)。
任务之间谁先谁后、哪些可以并行。
这样一份计划像施工图纸:工人(执行代理)不用再想"怎么设计",只按图施工并报告每步结果。它同时让"评审"成为可能——人可以在几百行代码写出来之前,先审一份几十行的计划。
计划该写多细?一条能自检的标准
换一个"什么都不知道"的代理,只给它这份计划,它能不能把活干完?能 → 计划合格;不能 → 计划里还藏着没摊开的决定。计划写得越细,执行时的"临场发挥"(也就是不可控)就越少。
写计划之前先问自己哪三句话?
会,就把必要的背景写进任务本身,而不是指望它的记忆。
没写验证的任务,等于让执行代理自己发明"完成"的定义。
有,说明切得还不够碎。拆不碎往往意味着还有没想清楚的耦合——那正是该回头问设计的地方。
写计划这件事本身,就是一次"逼你把实现细节想明白"的脑力劳动。它往往比执行更有价值。
executing-plans 和子代理模式怎么选?
| 你的处境 | 选哪个技能 | 为什么(以及代价) |
|---|---|---|
| 要把这批任务拿到独立或并行的会话里跑(比如同时开好几个会话各跑一条功能线) | executing-plans | 按批次执行,批与批之间设"人类检查点",你可以随时看进度、纠偏。代价是检查点会打断连续推进 |
| 任务基本独立、且要留在当前会话里完成 | subagent-driven-development | 每任务一个全新子代理 + 两级评审 + 台账,质量门禁更严。代价是明显更啰嗦、token 更多 |
| 手上有多个互不相关的失败要查(不同测试文件、不同子系统) | dispatching-parallel-agents | 一个代理查一个独立问题域,同时开工。代价是必须有"它们真的不相干"这个前提 |
值得一提的是 executing-plans 自己的开场提醒:如果你的宿主支持子代理,就该改用 subagent 模式而不是它。所以它更像是"没有子代理能力时的退路"。
08为什么要一个小任务就换一个代理?
这是 SP 里最能体现工程质量观的一环:主代理不再一口气把整个计划写完,而是每个小任务派一个全新的"子代理"(subagent,由主代理派出去、只干一件事的独立代理)去实现,再派另一个子代理去评审。因为它有明确的"为什么"——
让一个代理从头写到尾,会出什么问题?
两个问题,都很硬:
- 上下文污染:官方原话 "Conversation memory does not survive compaction"(会话记忆扛不住上下文压缩)。让同一个代理连续写 20 个任务,它会把早期的决定"忘"掉、带着前面遗留的坏假设影响后面。
- 自评失效:"自己写自己评"几乎必然自卖自夸。所以评审必须由另一个代理来做。
对策就是重置上下文:每个任务一个新代理,它眼里只有这份任务简报(brief)和代码库当前状态,不继承你的会话历史。
四步循环长什么样?
主代理 ──派发──> 实现子代理(sub-impl)
简报:任务2 form.tsx 接入校验 + 报错文案,路径与代码见计划;写报告到 logs/task2.md
子代理提交 e4f5g6h 后收工(上下文干净,眼里只有任务2)
主代理 ──派发──> 评审子代理(sub-review) ← 独立于实现者
输入:任务2简报 + 实现报告 + 待审 diff
一级(规格):实现是否符合任务要求?
二级(质量):代码质量如何?→ 报 1×Important:"文案应抽成常量,便于表单和后端复用"
主代理:记台账 "任务2: 1×Important"。
↳ 修复轮1:让原实现子代理修(上下文还在)→ 提交 e9f0g1h → 针对性复评 → PASS
↳ 全部任务完成后:派"最强可用模型"做整分支最终评审,清掉台账里的 Minor 悬案
这里出现一个你在团队协作里也见过的词:diff,指"这次改动到底改了哪些行"的那份对照——评审子代理拿到的就是一份待审 diff,而不是整个代码库。
评审到底查什么?
每个任务后做两级评审,顺序不能反:
实现是否符合任务要求?更细一点:该做的都做了吗?有没有做简报里没要求的事?评审要同时给出"规格 ✅/❌"和"质量是否通过"两个结论,缺一个都算评审不完整。
代码本身好不好:命名、重复、可测性、边界。问题按严重级别分档,见下。
严重级别的分档是这套体系的通用语言:Critical(致命,阻塞交付,不修不能往前走)、Important(重要,应修,或明确记账延后)、Minor(轻微,风格命名可读性,记下即可,不当阻断)。
评审意见怎么修?
官方流程写得很具体,而且和很多人的直觉不同:
因为它的上下文还在,改起来最省。每轮结束只做针对性复评——只查这次的修复,不重读整个任务。
连修三轮还没好,通常意味着原来的思路卡住了。换模型是主动升级,不是惩罚。
官方把它叫"五轮熔断器"(circuit breaker)。到顶时控制器做出裁定并记进台账,而不是继续修或原地卡死。
轻微问题记在台账里,留到最后统一处理。主代理绝不自己动手修——那会绕过评审、污染调度上下文。
什么情况才允许它停下来问你?
只有四种,官方逐条列出:
- 遇到不可逆 / 破坏性操作(删数据、强制覆盖之类);
- 遇到安全敏感动作;
- 涉及工作区之外的副作用(合并、推到共享分支、发布);
- 计划烂到每条路都只能靠猜。
除此之外,冲突由主代理自行裁定并记入台账(原文 "Rulings, not stalls"——定夺而非卡住)。官方给的理由很有人味:一个错误的裁定,代价是你能看见、能撤掉的返工;而一个卡在问题上的会话,代价是你的一整天。真实案例里,有一次捐赠的会话在一个"控制器本可以自己决定"的问题上卡了将近九个小时。
进度记在哪个文件里?
记在该计划专属的工作区里。从 v6.2.0 起,每个计划有自己的目录,避免"上一份计划的台账被当成这一份的进度"(这种污染在真实使用里出现过):
# 技能自带的脚本会打印这份计划的工作区路径
scripts/sdd-workspace docs/superpowers/plans/feature-plan.md
# → <仓库根>/.superpowers/sdd/feature-plan/ (被 git 忽略,存放台账、简报、报告、评审包)
# 台账第一行必须写清自己属于哪份计划
# SDD ledger — plan: docs/superpowers/plans/feature-plan.md
恢复规则也很明确:如果台账第一行写的是别的计划文件,那它是别人的进度,别动它,自己新建一份;如果同一份计划里已经有 Task <N>: complete 这一行,那这个任务已经做完了,不要重新派发。
什么任务可以打包给同一个子代理?
从 v6.3.0 起有一条明确的省钱的规则:小而同形的任务要打包。当计划里的一串任务都是"同一种小改动重复在不同文件"(同一处一行修复、同一个常量修改、同一个字段增补),不要一个任务派一个子代理——把每个文件和它的改动写进一份简报,交给一个子代理,把它的 diff 当一整块评审。反过来,"需要自己的判断、自己的测试、自己的评审面"的活,才保持一任务一派发。
三条反直觉但关键的约束
| 约束 | 它到底在防什么 | 你可以在对话里怎么用它 |
|---|---|---|
| 主代理自己绝不改代码 | 会绕过评审、污染调度上下文 | 看到主代理开始自己动手修,就是流程漏了 |
| 实现子代理和评审子代理都不许再派自己的子代理 | 会产生重复的评审席位——一个"由工人自己请来的评审"是要标记的缺陷,不是严谨 | 评审报告里若出现"我又派了个代理复查",那是问题信号 |
| 评审方不被预设立场 | 它不知道你希望它发现什么,所以挑刺才有意义 | 别在派发时暗示"应该没问题" |
它把人类工程里"独立评审"的价值搬给了代理:写代码的和挑刺的不是同一个人,挑刺才有效。代价是明显更啰嗦、token 更多——官方甚至点名批评过一种自我开脱:"评审拖慢循环"("reviews slow the loop down" is a rationalization,没有评审的循环只是没验证的瞎折腾)。它的设计始终在用 token 换正确率。
09TDD:唯一一条几乎不许讨价还价的规则
先解释这个词:TDD 是"测试驱动开发"(Test-Driven Development)的缩写。这里的"测试"指一段自动跑的检查代码——你给它输入,它替你判断结果对不对;"驱动"的意思是先写检查、再写实现,顺序不能反。在整个框架里,这是唯一一条几乎不允许松动的规则。
铁律原文是什么?
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST——没有先失败的测试,就不许有生产代码。
配套的另一句被反复引用:"If you didn't watch the test fail, you don't know if it tests the right thing."(你没亲眼看着测试失败,就不知道它测的是不是对的东西。)另外还有一句总纲式的提醒:"违反规则的字面,就是在违反规则的精神。"——这句话专门用来堵"我知道精神,但这个情况特殊"。
为什么"事后补测试"等于没测?
很多人以为 TDD = 写完代码再补个测试。恰恰相反,在那套规则眼里那是自欺欺人:代码已经写好,测试写出来必然秒过,一个没有失败过的测试什么都证明不了——你不知道它测的是你刚写的行为,还是它本来就通过的旧行为。真正的顺序是"用测试倒逼设计":先写断言,接口的形状就被逼出来了。
红-绿-重构的每一步,具体要做什么?
一个"最小、单一、命名清楚、只测一个行为"的测试。目标是让它因为功能不存在而失败,而不是因为打错字。顺便解释一下你可能见到的 mock:指用假对象替代真实依赖(比如假装数据库已连通),这里的原则是能不用就不用,尽量测真实代码。
真跑一遍,确认它失败的原因正确。如果测试直接通过了,说明你测的是已有行为,得先修测试。
写"能过这个测试的最简单实现"。不加多余的 feature、不做过度设计、不顺手重构无关代码。(你会在文档里看到 YAGNI——"You Aren't Gonna Need It",意思是"你现在并不需要它",用来指这种克制。)
确认这个测试通过、且全量测试没被弄红。若红了,改代码而不是改测试。
重构指"不改行为、只改内部结构"(去重复、改名、抽函数)。红线是:不新增行为、不让测试变红。然后加下一个新测试,循环往复。
一个完整的最小例子:从一条断言里"长"出实现
假设要"把字符串里的空白字符全删掉"。TDD 的走法是先只写断言,让接口形状先立起来:
// collapse.test.ts —— RED:此刻 collapseWhitespace 还不存在
import { it, expect } from 'vitest'
import { collapseWhitespace } from './collapse'
it('removes all whitespace', () => {
expect(collapseWhitespace('a b \t c')).toBe('abc')
})
跑一遍,确认它是因为"功能缺失"而红:
$ npm test
FAIL collapse.test.ts
Error: Cannot find module './collapse' ← 失败原因是"功能缺失",正是想要的 RED
确认红灯原因正确后,写最小实现让它变绿——不要顺手加什么 trim、换行处理:
// collapse.ts —— GREEN:只做"能过这个测试"的事
export function collapseWhitespace(s: string): string {
return s.replace(/\s/g, '')
}
$ npm test
PASS collapse.test.ts ← 绿。再加一条会失败的边界测试(如把换行也算空白),继续循环
然后才是 REFACTOR:绿着的时候改名、抽函数、去重。全程有一条红线:重构不许让测试变红,更不许在重构时夹带新功能。想加功能?回到 RED 再开一轮。
技能给的起步建议:想象你"希望这个 API 长什么样",然后先写断言、再写调用(write the wished-for API, write the assertion first)。先让形状立起来,实现自然跟着长。
"写完代码才发现没写测试"怎么处理?
代码写在了测试之前?官方原话是 "Write code before the test? Delete it. Start over."——删掉,重新来。它还把各种"合理化"借口逐条堵死:"别留着当参考"、"别在写测试时'改造'它"、"别看它"、"删就是删"(Delete means delete)。
常见的五个借口,官方怎么回?
| 心里冒出的那句话 | 官方的回应 | 为什么这句回应站得住 |
|---|---|---|
| "这也太简单了,不用测" | 简单 ≠ 不需要测试;TDD 的颗粒本来就是小的 | 越小的改动越容易漏边界,而边界恰恰是测试的强项 |
| "我之后再补测试" | 事后补的测试秒过,证明不了任何东西 | 没有失败过,就不知道它测的是不是对的行为 |
| "我手动测过了" | 手测不可复现、不可回归,替代不了自动化测试 | 下次改动时,手测的结论不会自动重跑 |
| "TDD 会拖慢我" | 前期慢的每一分钟都在省后期的返工 | 慢的是"想清楚"这一层,省的是"改错方向"这一层 |
| "这个函数全是 mock,没法测" | "难测"往往是接口设计不清的信号 → 简化接口、注入依赖 | 它把测试难写当成设计反馈,而不是测试的错 |
什么时候可以豁免?
官方列的例外只有三类:一次性原型、生成的代码、配置文件。而且它们都得问过你才行(技能里的写法是 "Exceptions (ask your human partner)")。
修 Bug 不属于豁免范围,反而更严:必须先写一个能复现该 Bug 的测试,再谈修复。写不出复现测试,等于还没定位到问题——这也和 10 节的调试铁律扣在一起。
10另外两条铁律:出 Bug 时怎么修,完工时怎么自证
TDD 不是唯一一条铁律。框架里还有两条,同样带"Iron Law"字样——它们分别管"修东西"和"宣布完成"两个最容易糊弄人的时刻。
为什么"改一行碰运气"是最贵的做法?
很多代理遇到 Bug 的行为是:猜一个原因 → 改一行 → 跑一下 → 没好再猜。SP 用 systematic-debugging(系统性调试)把这个过程格式化了。它要消灭的不是"直觉",而是没有记号的瞎试:每次尝试都应该有一个可检验的假设、一条能复现的路径、一个明确的验证方法。
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST——没做完根因调查,不许动手修。根因指真正引发问题的那个源头,而不是问题冒出来的那个位置。原文补了一句:没走完第一阶段(根因调查),你就不能提出修复方案。
四阶段根因流程
别跳过报错和警告——它们经常直接写着答案。目标是拿到稳定复现的步骤,并定位到"哪一行代码在什么输入下出错",而不是停在"页面挂了"这种表象。
先在同一个代码库里找到能正常工作的相似代码,再问"这类错误在哪些地方也会出现?"同一个根因常常在多个入口同时爆发,顺手全查。
一次只立一个假设,说清楚"我认为 X 是根因,因为 Y",然后做一个最小验证去证实或证伪。没验中不是失败,是信息——但不要在没验中的假设上继续叠加修复。
修复以 TDD 方式落地(先写复现测试),跑通后把这条测试留下来当回归测试。回归测试的意思是:以后谁再犯同样的错,它会立刻变红。
同一个 Bug 修 3 次还不好,就该停手
技能里写着:尝试次数 少于 3 次时,带着新信息回到第一阶段重新分析;一旦达到 3 次(≥ 3),就停下来质疑架构,不许在没做架构讨论的情况下动手做第四次修复。
它给出的"架构问题"信号很具体:每次修复都在别的地方暴露新的共享状态 / 新耦合;修复需要"大规模重构"才能落地;每次修复都在别处制造新症状。这条规则专治"在同一个坑里反复横跳"。
两种修法对照
"可能是缓存问题,我清一下缓存。" → 没好。"可能是时区问题,我改一下时区。" → 还没好……
每次猜测都没被记录、没被验证,第三次和第一次一样是瞎猜。运气好蒙对了,但不知道为什么对,过几天同类 Bug 换个马甲又来了。
"先稳定复现 → 定位到打印语句在 22:00 后不输出 → 假设与定时任务有关 → 最小验证:把系统时间拨过 22:00,复现成功 → 根因是日志轮转把文件句柄关了 → 修复 + 留下回归测试。"
连修 3 次没成功还会触发"架构复查"升级条款,而不是继续在表层打转。
怎么逼代理在说"做完了"之前交出证据?
这条铁律来自 verification-before-completion(完工前验证):
# 官方给的"门函数"(The Gate Function):宣布任何状态之前先走完这五步
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
1. IDENTIFY: 哪条命令能证明这个说法?
2. RUN: 完整跑一遍(新跑的、完整的)
3. READ: 读全输出,看退出码,数失败数
4. VERIFY: 输出真的支持这个说法吗?
- 不支持 → 只陈述实际状态 + 证据
- 支持 → 连证据一起说
5. ONLY THEN: 才可以下结论
跳过任何一步 = 在撒谎,不是在验证
它有一句极为锋利的补充:"如果你没有在这条消息里跑过验证命令,你就不能声称它通过了。"换句话说,"它应该没问题"不算数。你在评审代理交付时最有用的那句话就是:"你凭什么说它好了?给我看证据。"
三条铁律的原文并列
# 1. 测试驱动(skills/test-driven-development/SKILL.md)
NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST
# 2. 系统性调试(skills/systematic-debugging/SKILL.md)
NO FIXES WITHOUT ROOT CAUSE INVESTIGATION FIRST
# 3. 完工前验证(skills/verification-before-completion/SKILL.md)
NO COMPLETION CLAIMS WITHOUT FRESH VERIFICATION EVIDENCE
三条放一起看,你会发现它们其实是同一句话的三个时刻:开工前要确认(三条都要求"先有依据")、动手时要有证据(测试/复现)、收工时要有证据(刚跑过的验证)。这就是"纪律而不是智力"的具体含义。
11隔离与收尾:为什么要给每个任务一间独立施工房?
两个技能配成一对:using-git-worktrees 负责在工作流早期建隔离工作区,finishing-a-development-branch 负责收尾。它们合起来保证一件事:主分支永远干净,乱糟糟的中间过程都发生在分支里。
worktree 到底是什么?
你平时用的 git branch 是在同一个目录里切换指针,切来切去目录里的文件跟着变。而 worktree(工作树)允许你把同一个仓库的不同分支同时检出到不同目录,互不干扰。通俗说就是:同一个项目,在两个文件夹里各摆一份,各自停在自己的分支上。
它和普通 git branch 差在哪?
| 对比项 | 普通 git branch + 切换 | worktree(为什么对 AI 更关键) |
|---|---|---|
| 目录 | 一个仓库一个目录,切换分支时目录内容整体变化 | 一个仓库多个目录,每个目录固定停在一个分支上 |
| 并行 | 同一时刻只能处在一个分支状态 | 可以同时开好几个会话,各在一个 worktree 里做一条独立功能线,谁也不踩谁的脚 |
| 中间态 | 改到一半的脏状态留在你正在用的目录里 | 一半测试红着、文件改到一半也都在隔离目录里,主分支毫发无损 |
| 丢弃成本 | 要 stash / reset,动作容易出错 | 整个 worktree 一删了之(但删除有前置检查,见下) |
技能本身还带着一套"先检测、别重复建"的步骤——它会先判断你是不是已经在一个隔离空间里,是的话就不该再建一层:
# 第一步:先检测当前是否已经在隔离工作区里
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
BRANCH=$(git branch --show-current)
# 子模块保护:GIT_DIR != GIT_COMMON 在 git 子模块里也成立,要先排掉
git rev-parse --show-superproject-working-tree 2>/dev/null
# 若 GIT_DIR != GIT_COMMON 且不是子模块 → 你已经在某个 worktree 里,跳过创建,直接做项目初始化
它的核心原则写得很克制:先检测现有隔离,再用宿主原生的 worktree 工具,最后才回退到手工 git 命令——不要跟宿主较劲。
收尾时它会给你哪几个选项?
任务全部完成、测试通过后,finishing-a-development-branch 会把选择摆到你面前。当前版本给的是三个选项:
Implementation complete. What would you like to do?
1. Merge back to <base-branch> locally
2. Push and create a Pull Request
3. Keep the branch as-is (I'll handle it later)
Which option?
如果你处在一个"分离头指针"(detached HEAD,指当前不在任何分支上、由外部工具托管的临时状态)的工作区里,选项减为两个——PR 或保留,因为这里没有"合并回哪条分支"可言。
选合并时,它的动作顺序也值得抄下来:先切回基础分支 → 拉取最新 → 合并 → 在合并结果上再跑一遍测试 → 绿了才清理 worktree、删掉功能分支。如果合并后的测试红了,就停下、把 worktree 和分支原地保留——因为还没推送,这次合并是本地的、可恢复的。
为什么"丢弃分支"被从菜单里拿掉了?
v6.2.0 的发布说明记录了这个改动:原来的四个选项是"合并 / PR / 保留 / 丢弃",而把 "Discard this work" 摆在"Merge"旁边,等于在给"销毁已经做完、测试全绿的工作"做广告。现在丢弃只在你明确要求时才走,而且要先打字确认:
This will permanently delete:
- Branch <name>
- All commits: <commit-list>
- Worktree at <path>
先列出"将永久删除什么",再等你回话——这是它处理破坏性动作的通用姿态。
收尾会顺手删掉你没提交的文件吗?
v6.3.0 修掉了一个真实存在的坏行为:当 git worktree remove 因为"工作区里还有没提交的东西"而拒绝执行时,旧流程会伸手去拿 --force(强制删除)。现在它改成停下、把那些文件名字列出来、问你怎么办。这条修复值得单独讲,因为它是"纪律型工具也会犯错、而且错误会被写进发布说明"的一个例子——你在 18 节可以顺着官方 Release Notes 复核。
如果你还没习惯 Git 分支,先别慌:这些动作都由代理代劳,你只需要在"合并 / 发 PR / 保留"里做一次选择。你要理解的是为什么主分支该保持干净,而不是手敲那些 Git 命令。
1214 个技能地图:谁在什么时候自动出手?
前面已经深入讲了几个重头技能。这一节给两张地图:一张是14 个技能分别管什么,一张是什么场景会自动触发哪个技能、你想绕开时能怎么办。最后一小段是可以直接抄的开场模板。
14 个技能分别管什么?
| 分类 | 技能 | 何时被触发 / 干什么(以及你该知道的边界) |
|---|---|---|
| 测试 | test-driven-development | 实现任何功能时强制执行红绿重构;先有失败测试才有生产代码。唯一的例外是原型、生成代码、配置文件,且要你批准 |
| 调试 | systematic-debugging | 修 Bug 时走四阶段根因流程;连修 3 次失败强制架构复查。别指望它给你"快速猜一个"的许可 |
| 调试 | verification-before-completion | 声称"做完了"之前先出示证据(测试、复现、影响边界)。它管声明,不管实现 |
| 协作 | brainstorming | 任何创造 / 修改工作动手前:澄清需求、设计、批准门禁。仪式随任务缩放,门禁不缩放 |
| 协作 | writing-plans | 把批准的设计切成 2–5 分钟任务、带路径 / 代码 / 验证。它不替你做设计决定 |
| 协作 | executing-plans | 在独立 / 并行会话里分批执行计划,带人类检查点。有子代理能力时官方建议改用 subagent 模式 |
| 协作 | subagent-driven-development | 当前会话内每任务一个全新子代理 + 两级评审 + 台账。最啰嗦也最严的一档 |
| 协作 | dispatching-parallel-agents | 把互为独立的任务同时派给多个并行子代理。有共享状态时别用 |
| 协作 | requesting-code-review | 任务之间请独立评审,按严重级别回报,Critical 阻塞推进。它负责"请评审",不负责"改" |
| 协作 | receiving-code-review | 被评审的一方怎么读意见、怎么回应、什么时候该重提。它治的是"所有权错觉" |
| 协作 | using-git-worktrees | 开工时建隔离分支工作区,并先跑一遍测试基线确认是绿的 |
| 协作 | finishing-a-development-branch | 收尾:验证测试 → 探测环境 → 给选项 → 执行 → 清理。合并 / PR / 保留三选一 |
| 元技能 | using-superpowers | 给代理的"使用说明":整个系统的门禁与心智模型。它就是会话启动时被注入的那段引导的出处 |
| 元技能 | writing-skills | 教你(以及代理)用 TDD 的方式编写并测试新的自定义技能 |
顺带说清两个相关的概念,你会在官方文档里反复看到:自动触发(官方叫 model-invoked)指代理面对某类任务时自己发现"有条规矩要遵守"并加载执行,不需要你敲命令;手动调用(user-invoked)指你用斜杠命令显式发起某个流程。设计意图是:高频的纪律(TDD、复现、评审)尽量自动,低频的、需要你拍板的阶段(澄清、计划)放在命令里,让你保有控制感。
自动触发和手动调用,怎么一眼分清?
| 方式 | 怎么发生的 | 典型例子(以及误判提醒) |
|---|---|---|
| 自动触发(model-invoked) | 代理自己判断命中并加载执行 | 写核心逻辑 → 自动进 TDD;修 Bug → 自动先求复现。它该自动却没自动,才是 bug |
| 手动调用(user-invoked) | 你用斜杠命令显式发起 | /brainstorm、/write-plan、/execute-plan。有些技能本来就得你叫它(例如写自定义技能),别冤枉它 |
什么场景会自动触发哪个技能?
| 你的动作 | 默认触发的技能 | 你想绕开时能怎么办 |
|---|---|---|
| 要加功能 / 改行为 | brainstorming(先澄清) | 把需求一次性说得很具体,走 bounded 轻路径即可——这不是"绕开",是"让它少问几轮" |
| 已批准的设计要落地 | writing-plans → subagent / executing | 改动极小时可以直接说"按 TDD 做 X",从命中的那一步接管 |
| 要写任何核心逻辑 | test-driven-development | 一次性原型和配置文件需要你显式豁免 |
| 有 Bug 要修 | systematic-debugging(先复现) | 豁免面很窄;"先写复现测试"基本不可绕 |
| 一批任务互不影响、想并行 | dispatching-parallel-agents / subagent | 有共享文件就别并行,串行更省事 |
| 一批实现完成、要合并 | finishing-a-development-branch | 它会把选择摆给你:合并 / PR / 保留 |
最高频的命令有哪几条?
| 你想干的事 | 命令 | 会触发 / 进入哪个技能;有什么前置 |
|---|---|---|
| 把一个模糊想法变成可执行设计 | /brainstorm(也可能是 /superpowers:brainstorm) | brainstorming。前置:你愿意回答几个问题 |
| 需求已清楚,直接把活切成任务清单 | /write-plan "…" | writing-plans。前置:需求已经具体到能验证 |
| 在另一 / 并行会话里按计划分批执行 | /execute-plan | executing-plans。前置:手上有一份写好的计划文件 |
| 确认命令与插件是否就位 | /help、/reload-plugins | 本身不是技能,是验证步骤 |
| 新会话里它不按流程走,想手动"请它接管" | 说"请遵循 superpowers 工作流处理",或用上面任一命令 | 回到 using-superpowers 的引导逻辑 |
装成命名空间插件后,命令常带前缀(/superpowers:brainstorm);老版本或简化形态则是裸名(/brainstorm)。以你 /help 里看到的名字为准——它们触发的是同一个技能。
碰到"它没按流程走",按这三步排查
直接问:"针对当前任务,有哪些相关技能?你打算遵守其中哪几条?"答不上来,说明技能没被加载——这不是它不听话,是机制没生效。
/help 里有没有命令?/reload-plugins 后钩子有没有重启?是不是新开的会话?半装的插件是最常见的原因。
有些技能(尤其 writing-skills、写自定义技能)本来就该由你显式发起。别把这两类混为一谈。
可以直接抄的三段开场模板
不确定怎么开口?按你现在的处境挑一段,把方括号里的内容换成你的需求:
# 场景一:需求还模糊 → 让 brainstorming 来澄清
/brainstorm 我想做一个「你的功能一句话」,约束大致是……(欢迎先问我问题)
# 场景二:需求已清楚 → 直接要计划
/write-plan 实现「具体改动」。要求:先按 TDD 走,任务拆小、每步给验证方法。
# 场景三:已有一份计划要跑 → 交给子代理并要证据
请按 superpowers 流程执行这份计划;每个任务完成后独立评审,
并按 severity 汇报;不要自己给自己评审,完工前给出测试通过的证据。
这三段的作用是把"你想走哪条流程"说清楚,剩下的纪律交给技能执行。注意第三段里那句"不要自己给自己评审"——它是整套体系里最值钱的一句约束,见 08 节。另外那句 severity 就是"严重级别"的英文,也就是 08 节讲的那套 Critical / Important / Minor 分档。
13什么时候不该用这一套
这一节是整篇里最该细读的部分。SP 的默认值偏向"多走流程",所以真正会让人吃亏的,不是"用得不够",而是用得太重、用在不该用的地方。
哪三类任务不该上流程?
| 任务类型 | 为什么流程是负担 | 更合适的做法 |
|---|---|---|
| 一次性的灵感速写 / 原型 | 你要的答案是"这条路行不行",不是一个可维护的交付物;写测试、写设计文档都不产生你需要的价值 | 走 Spike 路径:两三句话说清要试什么 → 你点头 → 用最省的方式查 → 拿一个建议。做的代码一律标记"用完即弃" |
| 一行文案、一行常量的修改 | 走完整的 worktree + 设计文档 + 计划,是为了防"大改动做错方向",而一行改动没有那个风险 | 走 bounded 轻路径:对话里一句设计 + 你一个"可以"。官方也这么说:"框架给的是完整形态,不是每次都要走完" |
| 纯探索、纯求证 | 产出是"答案"而不是代码,流程里的评审与收尾都没有对象 | 同样是 Spike。关键纪律是:拿到结论以后,正式实现要另起炉灶重新分类,别把探针代码顺手带进主干 |
一句话总结判据:流程的价值随"改动规模 × 不可逆程度"上升。改动越小、越可逆,"先确认"这一步就越短——但它不归零。
什么信号说明"你过度用流程了"?
- 你发现自己为了避免它盘问,开始故意把需求写得含糊——那说明你在用它不擅长的方式跟它配合。正确做法是一次把目的、边界、验收标准喂足。
- 你被"每步点一次允许"打断到无法工作——那是权限没配好,见 03 节,不是流程本身的问题。
- 你在为一个"半年才用一次"的规矩写自动技能——见下面的"技能通货膨胀"。
什么时候不该写自己的技能?
写自定义技能是 SP 最有杠杆的一点(它教你用 TDD 的方式打磨技能本身),但技能写多了也是负担:每个自动触发的技能都在消耗上下文与判断力。出现下面这些信号时,先别写:
| 信号 | 为什么不该写成技能 | 替代做法 |
|---|---|---|
| 这条规矩半年才用一次 | 自动触发的成本每次会话都要付,收益却极低 | 写进 AGENTS.md 让人记得即可 |
| 现有技能已经覆盖 | 两套规矩并存会互相打架,代理不知道听谁 | 先改现有技能里的一行,别另起炉灶 |
| 你没法用一句触发描述说清"何时该生效" | 说不清触发的技能,要么不触发、要么处处误触发 | 先把它当普通文档用一阵,观察它真的该在什么时候出现 |
| 你想用技能"取代人拍板" | 技能的边界是纪律,不是决策;把该问人的判断硬编码成规则,迟早替你做错决定 | 把判断留给对话,把机械检查交给技能 |
写一个团队技能长什么样?
如果一个技能确实值得写(高频、肉痛、能用一句话说清触发时机),它的形态极小——一个目录加一份 SKILL.md:
skill-name/
└── SKILL.md
# SKILL.md(示意,字段以你所用的宿主约定为准)
---
name: no-debug-prints
description: 在提交前,禁止把 console.log / print 调试输出留进代码。
(代理准备提交代码时自动触发)
---
## 规则
- 扫描本批改动;发现遗留调试输出 → 删除后再提交。
- 若删除会影响功能(本意就是保留的日志),停下来问人类。
- 提交流水:清理 → 确认无残留 → 才允许 commit。
开头两行 --- 包起来的那段叫 frontmatter(文件头部的元信息),其中 description 就是"何时该用我"的触发描述——代理面对提交任务时会读到它、意识到"有条规矩要遵守",于是照章办事。你的工程文化(不许提交调试输出、接口必须用某种命名、报错必须带错误码)都可以这样一条条变成技能。
技能文件的具体字段(是用 description 还是别的键名)、触发写法,会随宿主工具和 SP 版本演进。写之前查一眼你所宿主的"技能"官方文档 + SP 的 writing-skills 技能原文,别照抄本文示例的字段名就完事。
还有一个反直觉但重要的判据:一个好的技能,标准是"换一个不知情的代理照着做,不会跑偏"。所以 writing-skills 主张用真实小任务去演练你的技能,观察它是否真的被触发、措辞是否有歧义——技能本身也要"测试"。它给的核心原则是:"如果你没亲眼看着一个没有该技能的代理失败过,你就不知道这个技能教的是不是对的东西。"
14常见坑:八个真实症状
| 坑 | 你会看到的症状 | 根因与解法 |
|---|---|---|
| 装完没生效,代理照旧"闷头写" | /help 里没新命令,或命令在但行为不变 | 多半没重载 / 没重开会话,插件注入钩子没跑。重载插件或新开会话;仍不行就跑一条 /brainstorm 手动触发验证 |
| 嫌 Brainstorming 烦,养成了"跳过确认"的习惯 | 经常做完才发现方向不对,反复返工 | 先检查自己有没有喂足上下文(目的 / 边界 / 验收标准):这通常能把盘问从五轮压到两轮。真要压缩的是轮数,不是确认本身 |
| 让子代理干完活,主代理直接宣布完成、不评审 | 合并后才发现一堆低级问题 | 两级评审是子代理模式的质量闸门,不是可选项。别让"实现者自评"冒充独立评审 |
| 多个会话 / 代理在同一分支上开工 | 互相覆盖、合并灾难 | 用 worktree 一人一分区。改同一批文件的活别并行,宁可串行 |
| 只信"测试全绿",不信"测试对不对" | 测试绿了但需求没实现(因为它测的是旧行为) | TDD 的灵魂是"先看它为你想要的行为失败"。若测试没失败过,它可能什么都没证明 |
| 把探针(spike)结论直接当正式功能用 | 验证代码混进主干,无人负责维护 | 探针的产出是"答案",不是代码。正式实现要走正式流程重做一遍 |
| 插件一直不更新,用着旧版技能 | 文档 / 命令对不上 | SP 默认自动更新;发现版本异常就查官方 README 与 Release Notes,或重装 |
| 把"流程"本身当目的,为走流程而走流程 | 一个改文案的任务也开 worktree、写正式设计文档 | 流程按规模缩放:一行改动走 bounded 轻路径即可。框架给的是"完整形态",不是"每次都要走完" |
当你犹豫"这算不算过度使用"时,问自己:这道流程在防哪一种具体的失败?答得出(防返工、防污染、防假绿、防自嗨、防失忆),就走;答不出,就降一档。上面八条里,凡是让人难受的,几乎都不是"流程本身错了",而是"流程和被防的那件事没对齐"。
15常见问题
~/.claude/skills/ 或项目里的技能和它并存,互不冲突——它甚至教你怎么写自己的。/brainstorm 还是 /superpowers:brainstorm?/help 里实际看到的为准,两边触发的是同一个技能。/brainstorm,描述一个真实存在的小 Bug 或小需求,完整走一遍并观察它每一步在干什么。一次端到端体验胜过十篇文档。docs/superpowers/specs/,可改位置),这是刻意设计——设计值得版本化、可评审。子代理的进度台账则落在 .superpowers/sdd/<计划名>/,这个目录被 git 忽略,属于过程产物。若你连设计文档都不想留,可以改目录,或接受后删除并把它加进 .gitignore。先确认你的团队是否愿意把设计文档留在仓库。16术语速查表
这套体系里有不少英文黑话。第三列不是翻译,而是"它为什么重要 / 什么时候用 · 别当什么用"——目标是让你能把这些词放进自己的提示词和对话里。
| 术语 | 定义 | 为什么重要 / 何时用 · 别当什么用 |
|---|---|---|
| Skill(技能) | 一份带触发条件的 Markdown 说明书(SKILL.md),告诉代理在某类任务上必须怎么干 | 整个框架的最小积木。用在你希望代理"自动遵守"的规范上;别当成只能手动敲的命令宏——它的威力在自动触发 |
| Bootstrap(引导) | 会话启动时注入的一小段上下文,提醒代理"动手前先查有没有相关技能" | 让"自动"成立的关键一环。别指望每个代理都记得查技能;引导词丢了,技能就可能变摆设(上下文一压缩尤其容易丢) |
| Harness(宿主) | 你实际在用的那个 AI 编程工具,负责提供技能机制与命令外壳 | 决定安装命令与命令前缀。别把宿主和 SP 混为一谈:换宿主只换外壳,纪律内容不变 |
| Brainstorming | 动手前的澄清技能:把模糊需求问成可批准的设计 | 用在任何"会改代码 / 行为"的任务前;别把它当正式需求会议,它产出的是"设计 + 批准",不是"完整方案书" |
| Spike / Bounded / Architectural | Brainstorming 对请求的三条分类路径:求证 / 有界改动 / 架构级设计 | 决定你走多重的流程。拿不准就选更重那条(棘轮只能升不能降);别把"求证型问题"当正式功能一路实现到底 |
| Writing Plan(实施计划) | 把设计切成 2–5 分钟任务、每个任务带路径 / 代码 / 验证的清单 | 让执行可外包、可评审。用在你准备交给子代理或另一会话跑之前;别写"参考性描述",要写到"换个代理照抄就能干" |
| Subagent(子代理) | 主代理派出去专职干一个任务的、上下文干净的独立代理 | 解决长会话记忆丢失与自评失效。用在任务独立、质量要求高的活上;别让多个实现子代理抢同一批文件 |
| Ledger(台账) | 跨任务记录进度、提交号、评审结论、裁定的文件(progress.md) | 给"会失忆"的代理做外部记忆。用在整个批量执行期间;别把裁定只放在会话里,压缩后就没影了 |
| Ruling(裁定) | 控制器对冲突或含糊之处做出的决定,按"决定 — 原因 — 错了的代价"记进台账 | 对应"定夺而非卡住"原则。用在你发现代理纠结于一个它本可自己决定的问题时;别把它当"越权替你做主"——破坏性动作仍然必须停下来问你 |
| Review(评审) | 由独立代理按严重级别(Critical / Important / Minor)检查改动 | 把"写完自查"升级为"别人挑刺"。用在每批实现之后;别让实现者自评冒充评审 |
| Worktree(工作树) | Git 把某个分支单独检出到独立目录的机制 | 让每个任务有干净沙盒、支持并行会话。用在你不想让半成品污染主分支时;别在主分支上让多个代理同时开工 |
| TDD / RED-GREEN-REFACTOR | 先写会失败的测试、再写最小实现、绿了才重构的流程 | 框架里的第一条铁律,保证代码可回归、需求被断言固化。用在一切核心逻辑上;别豁免"这只是个小改动"——Bug 修复反而更要先复现 |
| Verification(完工前验证) | 宣布"完成"前出示测试 / 复现 / 影响边界等证据 | 把"应该没问题"堵在门外。用在你收到任何"做完了"的声明时;别满足于"它没报错",要看证据链条 |
| Hook(钩子) | 宿主在会话开始等固定时点自动执行的一段逻辑 | 是"自动触发"的物理载体。装完没生效,多半是钩子没跑(需重开会话);别指望钩子能替你补齐技能内容 |
| Plugin / Marketplace | 把技能打包分发、可通过市场安装更新的载体 | 让安装、更新、多工具迁移变简单。用官方 / 可信市场装;别从不明来源下载预编译包 |
| Compaction(上下文压缩) | 会话太长时,宿主把早期对话压缩掉以腾出空间的过程 | 它是所有"代理忽然失忆"问题的根源,也是为什么关键产物必须落成文件。别指望任何"记忆型提示词"扛过它 |
17五天练习路线:从"装上"到"用得顺手"
别试图一次学会 14 个技能。给一条按天推进的路线,每一步都有明确的"做完算什么过关"。
Day 1 · 装上并看见它"接管"
按 03 节方式 A 装好;找一个你正在做的真任务走一遍 /brainstorm。过关标准:你能向别人讲清"装了之后,代理拿到改代码的指令会先干什么"。
Day 2 · 只练 TDD 这一步
写一个 30 行的练习函数(校验、格式化都行),严格走红 → 绿 → 重构,包括亲眼看着测试因"功能缺失"而失败。过关标准:你能用自己的话解释"为什么必须先看它失败",而不是只会背口诀。
Day 3 · 学会看产物:设计文档 / 计划 / 台账
让代理做一个稍大的改动(跨 2–3 个文件),然后去读它生成的三份文件。过关标准:你能指出计划里"写得不细、换个代理会卡住"的那一处——这就是评审能力的起点。
Day 4 · 体验子代理与独立评审
用 subagent 模式跑一批 3–5 个独立小任务,留意评审报告里的 Critical / Important / Minor 分级,以及台账里的 Ruling: 行。过关标准:你能说清"为什么不能让写代码的代理自己给自己评审"。
Day 5 · 落地自己的第一个技能
挑一条你们项目最痛的规矩(提交前不许留 console.log 之类),照 13 节写成一个小技能并跑通。过关标准:你能改触发描述,让它只在"该触发时触发"。
用得顺手的标志不是"所有任务都走全流程",而是你能为每个任务选对轻重:该轻的轻、该重的重、该让它自动的别拦、该自己拍板的别甩锅给流程。流程是工具,正确率是目的。
如果你想把这套东西带给团队
个人的顺手,不等于团队的共识。要向别人推这套东西,最有效的不是发文档,而是先解决他自己最痛的那一次返工:找一条他刚被坑过的流程("上次改完没测试就上线结果崩了"),演示"如果当时有这条纪律会怎样"。从单点痛点切入,比从"我们该用 SP"的全景提案容易落地得多。
团队层面再往前一步,就是把沉淀的技能文件纳入仓库、走代码评审——技能是文本,天然可 diff、可回滚、可署名。哪天你想改规矩,改的是能追溯到人的一次提交,而不是某个人脑子里的记忆。
18参考来源与证据边界
本文核对过的来源
- github.com/obra/superpowers —— 官方仓库 README:自我定位原话、各宿主安装命令、七步工作流、14 个技能清单、四条哲学、遥测说明、更新策略。
- skills/brainstorming/SKILL.md —— 三条路径(Spike / Bounded / Architectural)、批准硬门禁原文、"拿不准选更重那条"的棘轮规则、红旗表。
- skills/test-driven-development/SKILL.md —— 第一条铁律原文、"删掉重来"的零容忍条款、三类豁免、红绿重构细则。
- skills/systematic-debugging/SKILL.md —— 第二条铁律原文、四阶段根因流程、"修 3 次失败即质疑架构"的升级条款。
- skills/verification-before-completion/SKILL.md —— 第三条铁律原文与"门函数"五步。
- skills/subagent-driven-development/SKILL.md —— 每任务一个全新子代理、两级评审、修复轮 1–3 续用原代理 / 4–5 换更强模型、五轮熔断、"定夺而非卡住"与四种停止条件、台账工作区路径与恢复规则、小任务打包派发、禁止嵌套派生子代理。
- skills/finishing-a-development-branch/SKILL.md —— 三步选项菜单原文、合并后先跑测试再清理的顺序、丢弃只在你明确要求时出现。
- skills/using-git-worktrees/SKILL.md —— 先检测既有隔离、子模块保护、"不跟宿主较劲"原则。
- RELEASE-NOTES.md —— v6.2.0(2026-07-23)与 v6.3.0(2026-08-12)的变更:计划作用域工作区、五轮熔断、菜单里删掉"丢弃"、worktree 强制删除的修复、小任务打包、禁止嵌套派生。
- GitHub 仓库 API —— 版本与热度数字的抓取口径(见下)。
哪些数字是我实际抓到的
抓取方式是 GitHub 公开 API 的两个端点:api.github.com/repos/obra/superpowers(仓库元信息与 star 数)和 api.github.com/repos/obra/superpowers/releases(版本与发布日期)。你可以自己再跑一遍对照——这也是"热度数字只能当量级参考"的原因:它会持续变化。
证据边界与时效
本文校对时点为 2026-09-13,锚定的最新官方发行为 v6.3.0(2026-08-12)。以下内容属于"快照式"陈述,会随上游演进而变:① star 数、fork 数等热度数字;② 技能清单与目录布局(SP 迭代快且多数更新是自动的);③ 斜杠命令的前缀形态(随插件命名空间约定变化);④ 各宿主的安装命令(v6.x 期间 Devin CLI、Hermes、Grok、Factory Droid、Antigravity 的装法都在变)。动手安装或写作引用前,请以官方仓库最新 README、各技能目录下的 SKILL.md 与 Release Notes 为准。
v6.2.0 的发布说明里记了一件很值得记住的事:他们做过一次"全局压缩"——把技能里所有回顾段、社交证明、"你用了会得到什么"的推销口气都删掉。其中 TDD 的"为什么顺序重要"那一节被整节删除后,测试优先行为在压力测试下明显退化(对照组 8/10,处理后 5/10),于是那些反驳被改写成"常见借口对照表"的一行,重新放回代理真正会撞上它的位置。"能删的都删"不是无条件的——删错了要能测出来,而且改回来。
99一句话总结
SP 不是让 AI"更会写代码"的提示词库,而是把专业软件工程里的几条纪律(先澄清 → 先隔离 → 切计划 → 派执行 → 强制先写测试 → 独立评审 → 干净收尾)自动装进 AI 编程代理的一叠技能文件——它的价值不在"跑得快",而在"不跑偏、可回归、好协作"。
下次你让 AI 改代码时,看它是先问你、先写测试,还是闷头就改:前者说明流程已经接管,你正被一套有纪律的工作方式保护着。而当任务小到不需要保护时,你也有权利把它关掉一小会儿——流程按规模缩放,只有"等你说可以"这一步不缩放。