ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Claude Code 写完代码就完了?我用一个自研 Skill 编排了 7 阶段严谨开发工作流,拦下 10 个 Critical Bug

Claude Code 写完代码就完了?我用一个自研 Skill 编排了 7 阶段严谨开发工作流,拦下 10 个 Critical Bug 1. 为什么 Claude Code 单次生成代码后必须补上验证闭环Claude Code 写完代码就完了这个疑问背后其实藏着一个被很多人忽略的事实模型把需求转成可运行代码的能力已经足够强但“能编译、过单测”离“可以合并到主干”之间还隔着一条很宽的沟。我做过一个订单改单幂等重试的特性12 个 task 由 Claude 逐个写完编译通过、单测全绿、自测也没问题按过去的节奏就该 merge 了。后来顺手让一个完全不知道设计方案的独立 reviewer agent 看一眼30 分钟后它甩回一份报告——10 个 Critical / High 级别缺陷其中两个会直接造成重复扣款或订单永久卡死。这不是 Claude Code 不够强而是我把“Claude 写完代码”当成了“这事做完了”。对一个涉及并发、资金、状态机的关键特性来说这个认知差得太远。Claude Code 原生只覆盖了“写代码”这一步而严谨的特性开发还包括设计阶段有没有考虑并发、失败、幂等实施中每个 task 有没有独立 review实施后能不能发现自己的盲点改动有没有意外改变原有业务逻辑影响没影响其他仓库简化代码时有没有踩陷阱文档和代码还对不对齐。每一步都是潜在的事故源。所以真正的问题不是“要不要用 Claude Code”而是“怎么把 Claude Code 编排进一个严谨的开发工作流”。我把自己踩坑后沉淀下来的做法固化成了一个自研 Skill用 7 个阶段把需求澄清、方案设计、编码、自测、审查、回归、交付串起来并用 4 种独立视角交叉验证。下面我会给出这个 Skill 的可复制配置片段、触发规则以及怎么用真实缺陷样例验证它对 10 个 Critical Bug 的拦截效果。模型调用统一走 TaoToken 的 Key/API 通道官网入口在 https://taotoken.net/?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content API 地址是 https://taotoken.net/api 这样团队里每个人不用各自维护多套凭证。先说清楚这套工作流适合谁。它不适合纯 UI 调整、无状态机语义的 CRUD、一次性数据脚本也不适合总工作量小于一人日的小修小补。它适合的是那种“如果这段代码出 bug后果包含资金损失、数据错乱、订单卡死、权限越权、生产事故之一”的复杂特性。判定方法很简单把“如果这段代码出 bug 会怎样”写成一句话如果这句话让你不敢直接 merge就上这套流程。代价是总工作量大约增加 40% 到 60%换来的是关键缺陷在合并前被拦住。2. TaoToken 前置准备统一 Key 与 API 通道接入 Claude Code在讲 Skill 配置之前先把模型调用通道理顺。团队协作里最烦的一件事就是每个人的 Key、Base URL、模型 ID 各不一样出了问题很难定位是配置问题还是代码问题。TaoToken 的作用就是把这层统一起来一个 Key、一个 API 入口Claude Code、Cline、Codex 这些工具都指向同一处排查时只需要确认三件套——Base URL、Key、Model ID。先拿 Key。打开 https://taotoken.net/api-keys 登录后创建一个 API Key复制出来形如sk-xxxxxxxx。这个 Key 只显示一次建议直接存进密码管理器。注意不要把它硬编码进仓库后面配置里我们用环境变量引用。接着确认 API 入口。TaoToken 的 API 地址是 https://taotoken.net/api 不带任何查询参数。Claude Code 走的是 Anthropic 兼容协议所以 Base URL 填https://taotoken.net/api不要自己拼/v1之类的后缀工具会按协议补全。如果你用的是 Cline 或 Codex同样填这个地址只是配置文件位置不同。模型 ID 这块Claude Code 场景下常用的是claude-sonnet-4-5这类标识具体以控制台模型列表为准。你可以在 https://taotoken.net/console 里看到当前账号可用的模型复制准确的 Model ID不要凭记忆写。三件套里最容易错的就是 Model ID写错了会直接报模型不存在。验证通道是否通最直接的办法是用 curl 打一次对话接口。把下面的命令里的 Key 换成你自己的curl https://taotoken.net/api/v1/messages \ -H x-api-key: $TAOTOKEN_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d { model: claude-sonnet-4-5, max_tokens: 64, messages: [{role: user, content: 只回复 ok}] }返回里能看到content字段带ok说明 Key、Base URL、Model ID 三件套都对。如果返回 401先检查 Key 有没有复制完整、有没有多余空格如果返回模型不存在回控制台核对 Model ID。这一步过了再往下配 Claude Code。Claude Code 的配置可以走环境变量也可以走 settings 文件。环境变量方式最省事export ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_API_KEYsk-你的Key export ANTHROPIC_MODELclaude-sonnet-4-5如果你希望项目级固定下来就在项目根目录建.claude/settings.json内容如下{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_API_KEY: sk-你的Key, ANTHROPIC_MODEL: claude-sonnet-4-5 } }注意这个文件含密钥务必加进.gitignore。团队协作更推荐用环境变量注入或者用 CI 的 secret 管理不要把 Key 提交进仓库。配好之后启动 Claude Code随便问一句“你现在用的模型是什么”能正常回话就说明通道打通了。这一步是整个工作流的地基地基不稳后面全是玄学问题。3. 可复制配置自研 Skill 的目录结构与触发规则这套工作流的核心载体是一个 Claude Code Skill。Skill 的本质是一份带 YAML frontmatter 的 Markdown 主文件加若干按需加载的参考文件Claude 根据 description 字段判断什么时候该用它。目录结构长这样cross-verified-feature-development/ ├── SKILL.md └── references/ ├── cross-verification-techniques.md ├── anti-patterns.md └── doc-sync-playbook.mdSKILL.md是主文件控制在 300 行以内只讲 what / when / how 的骨架始终在 Claude 的 context 里。references/下的文件按需加载进入交叉验证阶段才读cross-verification-techniques.md准备简化代码前才读anti-patterns.md交付阶段才读doc-sync-playbook.md。这种渐进式加载的好处是不会一次性把 context 塞满关键信息不会被淹没。SKILL.md的 frontmatter 是触发机制写法如下--- name: cross-verified-feature-development description: 严谨多轮交叉验证的通用特性开发工作流。适用于任何失败代价高、bug 会造成资金损失/数据损坏/生产事故/业务卡单的复杂特性开发。当用户任务涉及以下任一信号时即使没有显式要求也应主动建议本工作流并发控制、分布式锁、数据一致性、幂等重试、状态机改造、资金、库存、权限、订单等关键业务流程、跨微服务接口、异步消息、核心数据模型或协议重构、在线 DDL、数据迁移、双写切换。 ---description 写得越具体触发越准。写得太模糊要么到处触发要么永远不触发。上面这段把“并发控制、分布式锁、幂等重试、状态机改造”这些信号都列进去了所以当用户说“我要做一个改单幂等”时Claude 会主动想起这个 Skill而不是干等显式命令。主文件正文里定义 7 个阶段的全景## 7 阶段工作流 1. Brainstorm → 需求澄清与方案设计产出 spec 文档 2. Plan → 拆解为可执行 task 清单文件/行号精确到位 3. Implement → 逐 task 实施每个 task 独立 review 4. Cross-verify → 41 种独立视角交叉验证核心 5. Fix → 发现问题后重走 plan implement 6. Simplify → 带怀疑的优化随时准备回滚可选 7. Doc-sync → 回填 evolution log文档与代码对齐每个阶段的心态完全不同阶段 1-2 是系统性思考把模糊需求变成可执行 task阶段 3 是小步慢跑每个 task 用 fresh context不积累 bias阶段 4 是刻意制造独立性不让 reviewer 被作者思路污染阶段 5 按严重性分批修复每个修复独立 commit 便于回滚阶段 6 怀疑一切简化冲动阶段 7 诚实记录失败教训比成功更有价值。触发方式有两种。显式触发是输入/cross-verified-feature-development 需求描述。隐式触发靠 description 里的信号词Claude 在识别到高风险特性时会主动建议。如果你用 Cline可以把同样的 SKILL.md 放进 Cline 的 rules 目录配合 MCP 把验证步骤暴露成工具如果用 Codex则把三件套写进~/.codex/auth.json同级的配置里Base URL 填https://taotoken.net/apiKey 和 Model ID 与前面一致。无论哪个工具Base URL、Key、Model ID 三件套必须齐全缺一个都会在调用时报错。打包分发用 skill-creator 自带的脚本python -m scripts.package_skill \ ~/.claude/skills/cross-verified-feature-development \ /tmp/ # 生成 /tmp/cross-verified-feature-development.skill这个.skill文件本质是个 zip 包接收方解压到~/.claude/skills/就能用。也可以扔进内部 Git 仓库团队 clone 后软链接到个人 skills 目录配合git pull同步迭代。方法论本身也能被 git 管理、被 PR review改一次全员受益。4. 验证请求与成功结果用真实缺陷样例验证 10 个 Critical Bug 拦截配置好之后怎么证明这套工作流真的能拦住 bug我用那次改单幂等特性的真实缺陷做了回归验证。背景是跨两个微服务订单、履约涉及分布式锁、多状态机转换APPLIED → MODIFYING → FINISH、多次外部 RPC、MQ 发布、Redis 缓存一致性、多 pod 重试调度。任何一个环节出错都能卡死订单或重复扣款。阶段 4 的交叉验证用了 4 种独立视角每种产出的信号几乎不重叠视角是否看设计文档关注点典型产出Systematic Debugging自查看自己代码的潜在 bug1-3 个次要问题Cold-Context Review严格不看代码实际做什么 vs 应该做什么5-15 个 critical/highBehavior Diffmaster vs feature只看 diff原业务逻辑是否被改变2-5 处副作用变化Cross-Repo Scan看其他仓库是否受影响0-3 个跨团队确认点Cold-Context Review 是信号最独立的一轮。prompt 里明确写DO NOT read the design document. Your value comes from NOT knowing what the author intended.越严格地限制 reviewer 的信息输入它的发现越有价值。听起来反直觉但 bug hunting 场景下信息越少越独立。验证时我让 cold-context reviewer 只看分支名加一句话目标30 分钟后它列出 10 个 Critical/High 缺陷。举两个真实的第一个是 APPLIED 并发 race。原设计加了分布式锁但只加在 MODIFYING 状态重试入口理由是“首次执行不会并发”。Reviewer 一眼看穿两个并发的首次请求都能读到 APPLIED 状态都执行无条件的UPDATE statusmodifying WHERE id?都成功各自走全量副作用导致重复退款加重复建履约单。修复方案是把锁提到入口覆盖 APPLIED 和 MODIFYING 两个分支并在 APPLIED→MODIFYING 转换上加 CASWHERE id? AND statusapplied作为 DB 层兜底。第二个是 UnlockOrder 其实不幂等。retry 逻辑里调用了现有的UnlockOrderForAmendRPC假设它幂等。实际底层 SQL 是UPDATE order_basic SET amendment_status 0 WHERE order_id ? AND amendment_status 1 AND pending_amendment_no ?代码检查RowsAffected 0否则报错。第一次调用成功后amendment_status已变成 0第二次调用匹配 0 行RowsAffected 0RPC 返回错误结果 retry 永远失败订单永久卡死在 MODIFYING。修复方案是在调用方做预检查先GetOrderBasicByOrderID如果amendment_status 0或pending_amendment_no不是本次的说明已解锁或是别人的锁跳过调用。验证成功的结果是这 10 个缺陷全部在 merge 前被拦截其中两个会直接造成重复扣款或订单卡死的并发漏洞被提前修复。整个特性从计划到真正 ready-to-merge 用了 2.5 周比“让 Claude 一口气写完”多出约 60% 时间换来的是关键缺陷零泄漏到生产。如果你只想快速验证通道和 Skill 是否生效可以用模型对话入口 https://taotoken.net/chat 发一句“帮我 review 这段并发代码”看它是否按 cold-context 的方式只基于代码本身给结论。5. 本篇常见错排查401、local proxy failed、reading choices 与 OAuth配置和验证过程中最容易撞到几类报错逐个说清楚怎么定位。第一类是 401。返回401 Unauthorized或invalid api key九成是 Key 的问题。先确认ANTHROPIC_API_KEY有没有复制完整、有没有前后空格、有没有被 shell 转义。如果你把 Key 写进了.claude/settings.json检查 JSON 有没有语法错误导致整个 env 没生效。还有一种情况是环境变量和 settings 文件同时存在且值不一致Claude Code 的优先级可能和你预期不同建议只保留一处。排查命令echo $ANTHROPIC_API_KEY | head -c 8 curl -s -o /dev/null -w %{http_code} https://taotoken.net/api/v1/messages \ -H x-api-key: $ANTHROPIC_API_KEY \ -H anthropic-version: 2023-06-01 \ -H content-type: application/json \ -d {model:claude-sonnet-4-5,max_tokens:8,messages:[{role:user,content:hi}]}返回 200 说明 Key 和通道没问题问题在 Claude Code 的配置读取返回 401 就是 Key 本身的问题。第二类是local proxy failed或连接被拒。这类报错通常出现在 Base URL 写错的时候。确认ANTHROPIC_BASE_URL是https://taotoken.net/api不要多写/v1也不要写成带路径的完整接口地址。有些工具会自动补/v1/messages你手动加了就变成/api/v1/v1/messages直接 404 或连接异常。另外检查本机有没有残留的代理环境变量HTTP_PROXY、HTTPS_PROXY它们会劫持请求导致连接失败清掉再试。第三类是reading choices或响应解析失败。这个报错说明请求发出去了、也返回了但返回结构不是工具预期的格式。常见原因是 Model ID 写错比如把claude-sonnet-4-5写成了别的名字服务端返回了错误结构。回 https://taotoken.net/console 核对准确的 Model ID。还有一种情况是 max_tokens 设得过大或过小导致返回被截断调成合理值再试。第四类是 OAuth 相关报错。如果你之前用官方登录方式配过 Claude Code本地可能残留 OAuth 凭证和现在的 API Key 方式冲突。表现是明明 Key 是对的却提示认证失败。解决办法是清理旧的凭证缓存改用纯 API Key 模式。检查~/.claude/下有没有旧的凭证文件必要时备份后移除重新用环境变量启动。第五类是三件套不齐。如果你用 Cline 配 MCP或者用 Codex 的auth.jsonBase URL、Key、Model ID 必须同时存在。只填了 Key 没填 Base URL工具会走默认官方地址自然失败只填了 Base URL 没填 Model ID会报模型不存在。建议把三件套写在一起改的时候一起改。排障时优先看 API Keys 页面 https://taotoken.net/api-keys 确认 Key 状态再看接入文档 https://taotoken.net/doc 核对当前推荐的配置格式两处对照基本能覆盖九成问题。6. 把工作流用起来从单次生成到可复用的工程闭环回到最开始那个问题Claude Code 写完代码就完了吗不是。真正被低估的用法不是“让它更快写代码”而是把它编排进一个严谨的工程流程。AI 写代码的能力已经超过大多数人能有效审查的速度瓶颈不在“写”在“验证”。而验证是可以被系统化、Skill 化、团队化的。这套 7 阶段工作流的价值在于它把“独立视角交叉验证”这个思路固化了下来。Cold-context reviewer 之所以能找出我自己 review 找不到的 bug不是因为它更强而是因为它不知道我是怎么设计的。设计文档代表作者相信系统应该如何工作熟悉设计的 reviewer 会默认作者的假设是对的从而看不到“这个假设本身就是错的”。Cold-context reviewer 只看代码实际做什么反而能发现设计层面的漏洞。推广成一条原则就是用 N 个互不知情的 reviewer 轮询一个特性发现的 bug 集合接近并集而不是重复。把工作流做成 Skill 之后下次做关键特性不用再靠记忆走流程Claude 会带着你走。同事也不用被动 onboard拿到.skill文件一键安装即可。方法论的迭代和代码的迭代一样可以被 git 管理、被 PR review、被团队共建。这比“我学会了某个 prompt 模板”高一个维度。如果你团队里有人正在做涉及并发、资金、状态机或复杂系统架构的特性这套流程可以直接复用。长期做编码和 Agent 编排的话Coding Plan 入口在 https://taotoken.net/coding-plan?utm_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_content 把 Key、通道、模型统一起来剩下的就是把 7 个阶段跑扎实。最后留一个实用技巧每次准备简化代码前先对每个“看似冗余”的字段、缓存、变量问三个问题——这个值源头是什么、如果用 DB 字段代替它那个字段还可能被谁写、那个字段的类型语义是唯一的还是依赖另一个字段。你无法确定某个写入路径的语义时就不要简化。我那次删了 154 行缓存代码、所有测试都通过结果差点把 PaymentID 当 refund_id 泄漏给下游当场 revert。这个教训比任何成功案例都值钱。
返回列表