1. 为什么裸用 Claude Code 写三天代码就开始失控
先说一个我观察到的现象:很多人第一次用 Claude Code 写一个完整功能,前两小时体验极好,代码干净、逻辑清晰、测试也顺手补了。但到了第二天、第三天,同一个项目继续迭代,问题开始冒出来——函数越来越长、边界条件处理前后不一致、某个模块悄悄改了另一个模块依赖的隐式假设,最后跑起来报错,你还得回头翻半天对话记录找是哪一步埋的雷。
这不是模型变笨了,是上下文无记忆这个根本特性在长周期开发里被放大了。Claude 每次生成代码,都是"当前上下文的最优解",但"当前上下文"不等于"完整需求"。它不知道两周前你定过一条规则,也不知道某个看起来多余的状态分支其实是处理异常支付渠道的。没有显式约束覆盖的代码区域,会被后续迭代一点点侵蚀。
Superpowers 这个框架要解决的正是这件事。它不是让 AI 更聪明,是给 AI 一套工程纪律。截至 2026 年 5 月,这个由 Jesse Vincent(obra)维护的框架已经积累了 204K GitHub Stars、18.2K Forks,在 Anthropic 官方插件市场的安装量超过 68 万次,是 Claude Code 生态里增长最快的插件之一。v5.1.0 在 2026 年 4 月 30 日发布,仍在快速迭代。
它的实现方式很朴素:整套框架就是一堆 SKILL.md 文件,每个文件是一套用 Markdown 写成的流程规范,任何人打开都能读懂。没有自己的运行时,不锁定模型,不依赖私有 API。当前版本包含 14 个核心技能,分三类——开发流程类(brainstorming、writing-plans、executing-plans、subagent-driven-development、using-git-worktrees、finishing-a-development-branch)、质量保证类(test-driven-development、requesting-code-review、receiving-code-review、verification-before-completion)、调试与元技能类(systematic-debugging、writing-skills、using-superpowers、dispatching-parallel-agents)。
会话启动时,框架通过 Claude Code 的 hook 机制注入一个小于 2000 tokens 的引导文档,告诉 Claude 开始任何任务前先读取相关 Skill。这个设计让整个框架极度轻量,跨 Claude Code、Cursor、Gemini CLI、GitHub Copilot CLI、Codex CLI 都能工作。
但这里有个已知的取舍:子 Agent 启动时不会自动继承这个上下文注入,导致子 Agent 有时会跳过 TDD 这类约束直接开写。框架目前通过 SubagentStart hook 部分缓解,v5.1.0 里仍是已知问题。遇到时手动触发using-superpowersskill 可以把它拉回来。
这篇文章要交付的是三样东西:一份可复制的 SKILL.md 骨架、子 Agent 协作边界的配置片段、以及如何通过 TaoToken 统一 Key 和 API 通道把整套流程接起来。适合已经在用 Claude Code、但被长周期迭代里的隐蔽工程隐患折磨过的开发者。
2. TaoToken 前置:统一 Key 与 API 通道接入 Claude Code
在讲 SKILL.md 之前,得先把接入通道理清楚。因为 Superpowers 本身不提供模型通道,它只是流程约束层,真正跑推理的还是 Claude Code 背后的模型。如果你同时用 Claude Code、Cursor、Codex CLI 好几个工具,每个工具单独配 Key、单独管额度,很快就会乱。
TaoToken 在这里的作用是提供一个统一的 Key 和 API 通道。官网入口是 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点是 https://taotoken.net/api (这个地址不加 UTM 参数)。你可以在控制台里生成一个 Key,然后在各个工具里复用同一个 Base URL 和 Key。
具体到 Claude Code,配置方式是通过环境变量或者 settings 文件。Claude Code 读取的是ANTHROPIC_BASE_URL和ANTHROPIC_API_KEY这两个变量。如果你想让 Claude Code 走 TaoToken 的通道,可以这样设置:
export ANTHROPIC_BASE_URL="https://taotoken.net/api" export ANTHROPIC_API_KEY="sk-你的TaoToken密钥"Windows 下用 PowerShell:
$env:ANTHROPIC_BASE_URL="https://taotoken.net/api" $env:ANTHROPIC_API_KEY="sk-你的TaoToken密钥"如果你更喜欢写进配置文件而不是每次 export,Claude Code 支持在项目根目录放.claude/settings.json,或者在用户目录放全局配置。项目级的 settings 片段长这样:
{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "sk-你的TaoToken密钥" } }这里有个细节要注意:Base URL 填的是https://taotoken.net/api,不要在后面加/v1或者别的路径,Claude Code 会自己拼接。Key 从控制台的 API Keys 页面生成,生成后只显示一次,记得存好。
模型 ID 这块,Claude Code 默认会请求claude-sonnet-4-5这类模型名。TaoToken 的通道兼容 Anthropic 的模型命名,你不需要在 Claude Code 里额外指定 Model ID,它会按默认的走。如果你在别的工具(比如 Cline、Codex CLI)里需要显式填 Model ID,那就填claude-sonnet-4-5或者你实际要用的那个。
配好之后,验证一下通道是否通。最直接的方式是在 Claude Code 里发一条消息,看它能不能正常回复。如果报 401,说明 Key 不对或者没生效;如果报连接超时,检查 Base URL 有没有写错。这一步先跑通,再往下装 Superpowers,否则后面出问题你分不清是通道问题还是框架问题。
关于 Coding Plan 这类长期编码场景,如果你打算把 Claude Code 当成日常主力工具,可以了解一下 TaoToken 的 Coding Plan,它针对长时间、高频次的编码会话做了额度优化。入口在 https://taotoken.net/api-keys 旁边的套餐页面,具体选哪个档位看你的日均 token 消耗。
3. 可复制配置:SKILL.md 骨架与子 Agent 协作边界
Superpowers 的核心就是 SKILL.md 文件。每个文件定义一套流程规范,Claude 在执行任务前会读取对应的 Skill。你可以直接改官方提供的 Skill,也可以自己写新的。下面给一份 TDD 流程的 SKILL.md 骨架,你可以直接复制到项目里用。
先看目录结构。Superpowers 安装后,Skill 文件通常在~/.claude/plugins/superpowers/skills/下面。如果你想自定义,建议在项目根目录建一个.claude/skills/目录,把自定义的 SKILL.md 放进去,Claude Code 会优先读取项目级的。
一份 TDD 强制流程的 SKILL.md 骨架:
--- name: tdd-enforcement description: 强制测试先行,没有失败的测试不允许写实现代码 --- # TDD 强制执行规范 ## 核心规则 没有失败的测试,就没有实现代码。这不是建议,是硬性约束。 ## 执行流程 ### 第一步:RED 状态 在写任何实现代码之前,先写测试文件。测试必须覆盖: - 正常路径(happy path) - 边界条件(boundary cases) - 错误输入(invalid input) 写完测试后立即运行,确认全部失败。如果测试通过了,说明测试写错了,重写。 ### 第二步:GREEN 状态 写最小实现代码,让测试通过。不要提前优化,不要加测试没覆盖的功能。 运行测试,确认全部通过。 ### 第三步:REFACTOR 状态 在测试保护下重构。每次重构后重新运行测试,确认仍然全绿。 ## 禁止行为 - 禁止在没有失败测试的情况下写实现代码 - 禁止跳过 RED 状态直接写实现 - 禁止在测试未通过时继续添加新功能 - 如果发现实现代码先于测试存在,删除实现代码,回到 RED 状态 ## 覆盖率要求 目标覆盖率 85%-95%。低于 80% 时,第二次迭代 regression 概率显著上升;高于 95% 时,写测试的时间投入超过收益。这份骨架的关键在于"禁止行为"那一段。Superpowers 的 TDD 不是"尽量先写测试",是字面意义上的——如果发现子 Agent 在没有失败测试的情况下写了实现代码,框架要求删掉那段代码,回到测试先行的状态。RED → GREEN → REFACTOR,循环不跳步。
接下来是子 Agent 协作边界的配置。Superpowers 的 subagent-driven-development 技能会把每个原子任务派给一个全新的子 Agent,子 Agent 只知道自己这一个任务的上下文,执行完报告结果给协调 Agent。这个设计的逻辑是:长时间运行的单一 Agent 上下文会腐化,新鲜子 Agent 的上下文是干净的,判断也是干净的。
子 Agent 的配置片段通常写在 Skill 文件里,定义它的职责边界。一份子 Agent 协作边界的配置骨架:
--- name: subagent-boundary description: 定义子 Agent 的职责范围与协作规则 --- # 子 Agent 协作边界 ## 子 Agent 职责 每个子 Agent 只负责一个原子任务,任务颗粒度控制在 2-5 分钟。 子 Agent 启动时必须: 1. 读取当前任务的 spec 文件 2. 确认任务的输入输出定义 3. 检查是否有对应的失败测试 4. 如果没有失败测试,先写测试,再写实现 ## 子 Agent 禁止行为 - 禁止修改任务范围之外的文件 - 禁止跳过 TDD 流程 - 禁止在未确认测试通过的情况下报告任务完成 - 禁止假设其他子 Agent 的上下文 ## 协调 Agent 职责 协调 Agent 负责: 1. 把大任务拆解成原子任务 2. 为每个原子任务生成 spec 3. 派发子 Agent 执行 4. 收集子 Agent 的执行结果 5. 在任务之间触发 Code Review ## 上下文隔离规则 子 Agent 不继承主会话的 Superpowers 引导文档。如果子 Agent 跳过了 TDD 约束,协调 Agent 需要手动触发 using-superpowers skill 把它拉回来。这份配置的核心是"上下文隔离规则"那一段。因为子 Agent 启动时不会自动继承主会话的引导注入,这是 v5.1.0 的已知问题。你需要在协调 Agent 的逻辑里加一步:每次派发子 Agent 之前,确认它是否加载了 TDD 约束;如果没有,手动触发一次using-superpowers。
如果你用的是 Cline 或者 Codex CLI,配置方式略有不同。Cline 的 MCP 配置里需要填 Base URL、Key 和 Model ID 三件套:
{ "mcpServers": { "taotoken": { "url": "https://taotoken.net/api", "apiKey": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-5" } } }Codex CLI 的auth.json配置:
{ "base_url": "https://taotoken.net/api", "api_key": "sk-你的TaoToken密钥", "model": "claude-sonnet-4-5" }这三件套——Base URL、Key、Model ID——在任何工具里都是必须的。Base URL 统一填https://taotoken.net/api,Key 从控制台生成,Model ID 按你实际要用的模型填。
4. 验证请求:从 Brainstorming 到 Code Review 跑通完整流程
配置写好了,得验证它真的能跑。用一个简单但覆盖完整流程的需求来测:写一个 Python 函数,输入月份和日期,返回对应的星座名称。这个需求够简单,但涵盖了边界条件处理、错误输入验证,Superpowers 工作流的每个环节都能展示。
先在 Claude Code 里安装 Superpowers:
/plugin install superpowers@claude-plugins-official这是官方 Anthropic 插件市场的安装命令。安装完成后重启 Claude Code,在新会话中输入/help,能看到 Superpowers 命令列表则安装成功。如果官方市场安装不了,备选方案是社区市场:
/plugin marketplace add obra/superpowers-marketplace /plugin install superpowers@superpowers-marketplace安装完成后,触发 Brainstorming:
/superpowers:brainstorming 我想写一个 Python 函数,输入月份和日期,返回对应的星座名称Claude 不会立刻给你写代码。它会先问一系列澄清问题,比如输入格式是整数还是字符串、非法日期怎么处理、星座边界日期是否需要精确、返回值是中文还是英文。这就是 Brainstorming 的核心价值:它把你的隐式假设逼出来。你回答之后,Claude 有了清晰的合约。
然后生成计划:
/superpowers:writing-plansClaude 会把实现拆成原子任务,每个任务有明确的文件路径、预期改动、验证步骤。重点:在新会话里执行这份计划,不要在同一个会话里直接让 Claude 开始执行。打开新的 Claude Code 会话,把计划粘贴进去再开始。
接下来是 TDD 执行。Claude 的第一动作是写测试文件,不是实现代码:
# test_zodiac.py import pytest from zodiac import get_zodiac class TestGetZodiac: def test_aries(self): assert get_zodiac(4, 1) == "白羊座" def test_boundary_capricorn_to_aquarius(self): assert get_zodiac(1, 19) == "摩羯座" assert get_zodiac(1, 20) == "水瓶座" def test_invalid_month_zero(self): with pytest.raises(ValueError): get_zodiac(0, 1)此时运行测试,全部失败(RED 状态),因为zodiac.py根本不存在:
pytest test_zodiac.py -v # ERROR collecting test_zodiac.py # ModuleNotFoundError: No module named 'zodiac'这是正确的状态。Superpowers 框架要求看到测试失败后,才允许开始写实现代码。然后 Claude 写最小实现:
# zodiac.py ZODIAC_DATES = [ (1, 20, "水瓶座"), (2, 19, "双鱼座"), (3, 21, "白羊座"), # ... 其余星座 ] def get_zodiac(month: int, day: int) -> str: if not (1 <= month <= 12): raise ValueError(f"月份必须在 1-12 之间,收到: {month}") if not (1 <= day <= 31): raise ValueError(f"日期必须在 1-31 之间,收到: {day}") for cutoff_month, cutoff_day, zodiac_name in ZODIAC_DATES: if month < cutoff_month or (month == cutoff_month and day < cutoff_day): return zodiac_name return "摩羯座"再次运行测试,全部通过(GREEN 状态)。然后触发 Code Review:
/superpowers:requesting-code-reviewClaude 会按 critical/warning/info 三个级别对代码做评审。典型输出会指出 day 验证只检查 1-31,但 2 月没有 29-31 日,4/6/9/11 月没有 31 日。如果业务不关心这个精度,可以在 docstring 里注明。没有 critical 问题,可以继续。
整个流程走下来大约 25-30 分钟。这个时间里你不只是得到了一个能跑的函数——你得到了一个有 18 个测试用例覆盖、清晰文档、通过 Code Review 的函数,以及一份记录了所有设计决策的对话历史。
验证通道是否走的是 TaoToken,可以在 Claude Code 里发一条消息,然后去 TaoToken 控制台的用量页面看是否有对应的请求记录。如果有记录,说明通道通了。如果控制台没有记录,检查环境变量是否生效,或者 settings.json 里的配置有没有被覆盖。
5. 本篇常见错排查:401、local proxy failed、reading choices、OAuth
配置和验证过程中,最容易撞上的几类报错,这里逐个对照排查。
401 Unauthorized。这个最常见,通常是 Key 没生效或者写错了。先检查环境变量:
echo $ANTHROPIC_API_KEY echo $ANTHROPIC_BASE_URL如果输出为空,说明 export 没生效,或者你是在新的终端窗口里跑的,环境变量没继承。Windows 下检查 PowerShell 的$env:ANTHROPIC_API_KEY。如果 Key 有值但还是 401,去 TaoToken 控制台确认这个 Key 是否被禁用或者额度耗尽。另外注意 Key 的前缀,TaoToken 的 Key 通常以sk-开头,复制的时候别把前后空格带进去。
local proxy failed。这个报错通常出现在你本地配了代理,但代理没启动或者端口不对。Claude Code 会读取HTTP_PROXY和HTTPS_PROXY环境变量。如果你不需要代理,把这两个变量清掉:
unset HTTP_PROXY unset HTTPS_PROXY如果你确实需要走本地代理,确认代理进程在跑,端口和配置一致。这个报错和 TaoToken 本身无关,是本地网络环境的问题。
reading choices 相关报错。这个通常出现在 API 返回格式不符合预期时。Claude Code 期望的是 Anthropic 格式的响应,如果 Base URL 填错了,比如填成了 OpenAI 兼容的端点,返回的 JSON 结构对不上,就会报 reading choices 之类的错。确认 Base URL 是https://taotoken.net/api,不要填成别的路径。如果你在 Cline 里配置,Cline 可能默认走 OpenAI 格式,需要在设置里切换成 Anthropic 格式,或者确认 TaoToken 的通道支持你要用的格式。
OAuth 相关报错。Claude Code 某些版本会尝试走 OAuth 流程,如果你用的是 API Key 模式,可能会冲突。检查 settings.json 里有没有残留的 OAuth 配置,比如oauthAccount之类的字段。如果有,删掉,只保留env里的 Base URL 和 Key。另外确认你用的 Claude Code 版本支持 API Key 模式,太老的版本可能只支持 OAuth。
子 Agent 跳过 TDD。这个不是报错,是行为异常。表现是子 Agent 直接写了实现代码,没有先写测试。原因是子 Agent 启动时没有继承主会话的 Superpowers 引导文档。解决办法是手动触发using-superpowersskill:
/superpowers:using-superpowers这个 Skill 的作用就是重新激活工程约束。触发后,子 Agent 会重新读取 TDD 规范。如果频繁出现,可以在协调 Agent 的逻辑里加一步:每次派发子 Agent 之前,先确认它是否加载了约束。
测试覆盖率不达标。Superpowers 的目标覆盖率是 85%-95%。如果 Code Review 阶段发现覆盖率低于 80%,说明测试写得不够。回到 RED 状态,补充边界条件和错误输入的测试用例。不要为了凑覆盖率写无意义的测试,测试要覆盖真实的边界场景。
worktree 创建失败。Superpowers 在写代码之前会建一个干净的 worktree 分支。如果创建失败,通常是 git 仓库状态有问题,比如有未提交的改动,或者当前不在 git 仓库里。先git status确认状态,把未提交的改动处理掉,再重试。
排查的顺序建议是:先确认通道通(401 排查),再确认配置对(Base URL 和 Key),再确认框架加载(Superpowers 命令列表),最后确认子 Agent 行为(TDD 约束)。一层一层往下查,别跳步。
6. 把工程纪律编码成文件,而不是锁进平台
Superpowers 最值得借鉴的设计决策,是把工程文化编码成 Markdown 文件,而不是锁进某个平台的私有配置里。你可以改任何 Skill 来适配自己团队的规范,比如把 TDD 的覆盖率要求从 85% 调到 90%,或者在 Brainstorming 的问题列表里加入团队特有的检查项。v5.1.0 还加入了writing-skills这个元技能,帮你规范地写出新的 Skill——框架本身的扩展也要走 TDD 和 Code Review 流程,保证新 Skill 的质量。
如果你打算长期用 Claude Code 做开发,建议把 TaoToken 的 Key 和 Base URL 配成全局环境变量,这样 Claude Code、Cursor、Codex CLI 都能复用同一个通道,不用每个工具单独管。控制台在 https://taotoken.net/api-keys ,生成 Key 之后存到密码管理器里。接入文档在 https://taotoken.net/doc ,里面有各个工具的详细配置步骤。如果你只是想先试试模型对话的效果,可以从 https://taotoken.net/chat 进去发几条消息感受一下通道质量。长期编码场景的话,Coding Plan 的入口在 https://taotoken.net/coding-plan ,按你的日均消耗选档位。
最后留一个实用判断标准:这个改动如果出了问题,修复成本超过 30 分钟吗?是的话,走 Superpowers 流程值得;不是的话,直接用裸 Claude Code 更快。框架是为中大型功能开发优化的,不是为一行代码的快速修改。