← 返回全部文章

用 Claude Code 搭一座软件工厂

一套 7 个 Agent 的 Claude Code 工作流:从代码库调研、用户故事、技术规格,到前后端实现、验收测试和最终校验。

我以为自己在用 AI 写代码。

后来发现,我只是打字更快了。

差别在这里:一套 7 个 Agent 的系统,可以改变 Claude Code 的使用方式。

这套方法能省掉很多弯路。

很少有人说清楚的问题

那种看起来很高效的循环是这样的:

让 Claude 做一个功能
→ 它生成代码
→ 某处报错
→ 把错误贴回去
→ 它打补丁
→ 另一个地方又坏了
→ 继续追问

第一天,这像魔法。

第 30 天,你花在监督 AI 上的时间,已经超过了过去自己写代码的时间。

同一段逻辑出现在 3 个地方。

Claude 忘了两周前定下的约定。

新功能破坏旧功能。

测试缺失,或者只覆盖了表面。

这时你会意识到:问题不在 AI 失灵,问题在工作流。

真正的问题是结构。

当你在 Claude Code 里输入“做这个功能”时,你其实在要求同一个 AI 会话同时扮演这些角色:

产品分析师
→ 架构师
→ 后端工程师
→ 前端工程师
→ 测试工程师
→ 代码审查者

所有角色都挤在同一个混乱对话里。

计划阶段的错误假设,会变成错误的数据模型。

错误的数据模型,会变成错误的 API 。

错误的 API,会变成错误的 UI 。

等你发现时,问题已经蔓延到各处。

这就是 vibe coding 。

它有明显上限。

从 vibe coding 到软件工厂

真正改变结果的是工作方式。

真实工程团队不会在一个大对话里完成所有工作。

不同的人负责不同任务:

有人澄清用户问题
→ 有人思考架构
→ 有人做 API
→ 有人做 UI
→ 有人处理边界情况
→ 有人审查结果

把这些全部压进一个 AI 会话,错误会静默叠加。

修复方法是把工作拆给专门的 Agent 。

每个 Agent 都有:

一个聚焦任务
自己的干净上下文窗口
只开放真正需要的工具
明确的禁止事项

结果就是一座软件工厂。

一个开发者,加上 7 个聚焦 Agent,就能组成一支协调工作的队伍。

下面是这 7 个 Agent 。

7 个 Agent

Agent 1:代码库研究员

开发者使用 AI 时,最常见的错误是上来就要代码。

AI 接受需求,靠猜测补齐空白,然后开始生成。

糟糕设计就是这样混进去的。

代码库研究员负责阻断这件事。

它唯一的任务:在写任何一行代码前,先检查代码库,解释现有系统如何工作。

它要做的事:

梳理相关文件和职责
记录需要遵循的现有模式
找到已经实现过的相似功能
标出风险:时区、多租户、重试逻辑等
列出未知问题

它不能做的事:

编辑文件,只读访问
运行会修改状态的命令
靠猜测推进,有疑问就提出来

工具:ReadGrepGlob

规则:每次先探索,再构建。

研究员永远第一个运行。

Agent 2:用户故事写手

很多功能失败,并非代码写错了。

问题经常出在需求从未被清楚定义。

用户故事写手会把粗略的功能想法整理成真正的用户故事,再进入任何技术决策。

输入:

你的粗略功能描述
代码库研究员的发现

输出:

用户故事:
As a [role], I want [behaviour], so that [outcome].

验收标准:
测试可以直接验证的陈述。包含成功路径、失败路径、业务规则。

边界情况:
边界、重试、多租户相关问题。

不在范围内:
明确不做什么。

开放问题:
确实不知道的事项,绝不猜。

它不能做的事:

编造业务规则
写代码或技术设计
遇到真正不清楚的问题还继续推进

工具:Read

规则:你先阅读并批准这份故事,再进入下一步。

这个人工检查点能保住后面所有环节。

Agent 3:规格写手

用户故事批准后,规格写手会把它转成技术简报。

这是所有构建 Agent 后续遵循的蓝图。

输入:

批准后的用户故事
代码库研究员的发现
项目里的 CLAUDE.md 规则

输出:

数据模型变更:字段、类型、迁移
后台流程或业务流程
API 变更:端点、请求/响应结构
前端变更:组件、页面、hooks
需要的测试:成功路径、失败路径、边界情况

它不能做的事:

编辑文件
编造新基础设施;如果需要,会明确指出
跳过租户隔离或时区问题
留下未回答的问题

工具:ReadGrepGlob

规则:技术简报是第二个人工检查点。

你阅读并批准之后,才允许碰文件。

如果你在这里看到“把 ID 存在内存里”,这就是红旗。

现在抓住它,别等 10 个文件都被改完。

Agent 4:后端构建者

现在才开始构建。

后端构建者只实现功能的后端部分。

输入:

批准后的技术简报
代码库研究员的发现
项目里的 CLAUDE.md

它要构建:

API routes
services 和业务逻辑
数据库访问与迁移
后台任务
它所写代码对应的单元测试

它不能做的事:

碰 React 组件、页面或客户端 hooks,那是 Agent 5 的范围
未经指示引入新依赖
修改约定范围外的文件
没有运行 typecheck 就结束

完成后,它返回摘要:

新增或编辑过的所有文件
复用过的现有 helper 或模式
哪些 CLAUDE.md 规则本可以帮上忙

工具:ReadEditWriteBash,但只限定在后端目录。

拆开的意义就在这里。

后端构建者不会顺手破坏前端。

Agent 5:前端构建者

前端构建者只实现 UI 部分。

它会先读取后端构建者的摘要。

这点很重要。

它完全按后端已经产出的 API 来消费数据。

它不会发明新的端点。

如果 API 结构不适合 UI,它会把不匹配作为反馈提出,避免自己打补丁。

输入:

批准后的技术简报
代码库研究员的发现
后端构建者摘要,也就是 API contract

它要构建:

React 组件和页面
客户端 hooks 与状态
loading 与 error 状态
它所写内容对应的组件测试和单元测试

它不能做的事:

碰 services、API routes、workers 或 migrations,那是 Agent 4 的范围
发明端点或 response shape
未经指示添加依赖
没有运行 typecheck 和测试就结束

工具:ReadEditWriteBash,但只限定在前端目录。

两个构建者。

两个干净上下文窗口。

彼此不会踩到对方的工作。

Agent 6:测试验证员

两个构建者会给自己的代码写单元测试。

这还不够。

测试验证员只做一件事:证明这个功能确实满足用户故事。

它写的是验收测试。

这里写的是验收测试,区别于普通单元测试。

这些测试从外部验证功能,站在真实用户体验的角度看系统。

输入:

批准后的用户故事,包含全部验收标准
批准后的技术简报
两个构建者的摘要

输出:

一个验收测试文件,覆盖每条验收标准
一份报告:哪些标准通过、哪些失败、哪些没法干净覆盖

它不能做的事:

修改任何后端或前端代码
为无法测试的标准编造绕路方案
在标准没有真正覆盖时标记为已覆盖

如果测试失败,说明功能还没满足用户故事。

它会精确报告哪条标准失败。

它不会修代码。

失败项会回到对应的构建者那里。

工具:ReadEditWrite,只限测试文件,另加 Bash

规则:验收测试通过前,这个功能还不算完成。

Agent 7:实现校验员

这个 Agent 会抓住其他环节漏掉的问题。

校验员会把当前实现和批准过的用户故事、技术简报逐项对照,然后报告缺口。

它从不修复。

它只说实话。

每次都会检查:

用户故事里的验收标准是否还没实现
失败路径是否缺少测试覆盖
安全问题:缺少鉴权、租户隔离缺口、日志里有 secret、原始错误暴露给客户端
数据完整性问题:竞态条件、重复记录、时区错误、缺少事务
性能问题:N+1 查询、缺少索引、不必要的加载

输出总是按严重程度分组:

Critical:合并前必须修
Important:合并前应该修
Minor:偏意见项,交给审查者判断

每条发现都要附文件路径和行号。

如果没问题,就直接说没问题。

它不会为了显得全面而发明问题。

工具:ReadGrepGlob

这就是软件工厂可信的原因。

自己给自己打分的试卷没有意义。

只看磁盘现状、不参与写作过程的校验员,才更诚实。

整条链路如何运行

完整流程只需要一个起始提示词。

你打开 Claude Code,输入:

Build invoice reminders for invoices unpaid for more than 7 days.

后面会这样运行:

Step 1 → Researcher 梳理 invoice、payment、email 相关代码,返回文件、现有模式和风险。

Step 2 → Story Writer 产出用户故事和验收标准。

⏸ PAUSE:你阅读并批准用户故事。

Step 3 → Spec Writer 把批准后的故事转成技术简报。

⏸ PAUSE:你阅读并批准技术简报。
在这里抓住 “store IDs in memory” 这种错误。

Step 4 → Backend Builder 实现 service、API route、BullMQ job 和单元测试,返回文件变更、复用模式和绿色测试结果。

Step 5 → Frontend Builder 读取后端 API 摘要,构建 admin UI tile 和 reminder button,写组件测试,测试通过。

Step 6 → Test Verifier 为全部 6 条验收标准写验收测试,报告:7 条通过,1 条失败——manual trigger 没检查 tenant ownership。

Step 7 → Validator 发现问题,按 Critical 报告文件路径和行号。

→ 回到 Backend Builder,修复完成。8 条验收测试全部通过。Validator 再跑一次,干净。

⏸ PAUSE:你 review,然后开 PR。

三个人工检查点。

其他部分自动运行。

基础:Agent 工作前,先准备这些

CLAUDE.md 是每次会话都能继承的记忆。

每次打开 Claude Code,它都从零记忆开始。

CLAUDE.md 解决这个问题。

它是放在 repo 根目录的 Markdown 文件,每次会话会自动加载。

永久项目事实应该放在这里:

技术栈:Next.js App Router、Node.js、Prisma、BullMQ、Resend
命令:npm run dev、npm test、npx prisma migrate dev
架构规则:Business logic lives in services. API routes should stay thin.
禁止事项:不要在 API route 里写业务逻辑,不要把租户 ID 存进内存

控制在 100 到 300 行。

每次 AI 犯了让你意外的错,都问一句:如果 CLAUDE.md 里有一条规则,能不能防住它?

能防住,就加进去。

几周后,CLAUDE.md 会变成 AI 曾经误判过的假设清单,你的会话质量会明显提升。

上下文漂移是安静的杀手。

大多数 Claude Code 会话不会突然失败。

它们会慢慢漂移。

一个错误假设进入上下文。

模型继续在这个假设上构建。

你让 Claude 做订阅管理。

它设计成:

User → Subscription

你想起来:订阅属于公司,不属于用户。

如果你只说“订阅属于公司”,Claude 会打补丁。

现在代码里可能同时出现:

user.subscriptionId
company.subscriptionId

规则:

小拼写错误:就地纠正。
错误架构假设:丢掉当前对话,带着正确假设开一个干净会话。

一个带着正确心智模型的干净会话,胜过一个一路补丁的旧会话。

结果会发生什么变化

软件工厂之前:

vibe coding 循环:prompt → generate → error → patch → repeat
会话上下文塞满噪音
错误假设叠加成坏功能
一个工程师同一时间只能做一件事
专家知识卡在某个人的脑子里

软件工厂之后:

结构化链路:research → story → brief → build → verify → validate
每个 Agent 都有干净上下文,只拿自己需要的内容
错误假设在 brief 审批时被抓住,不会等到代码写完
前后端可以并行推进
测试和校验属于流程的一部分,不靠事后补救
专家知识被编码进 Agent、skills 和 hooks

真正的变化是:

支付专家可以构建一个 payments-integration agent 。

然后团队里每个工程师都能交付涉及 billing 的功能。

不用等人。

不用交接。

前端负责人的组件模式,可以进入 frontend-builder agent 。

DevOps 工程师的 CI 检查,可以进入 hook 。

QA 负责人的边界情况,可以进入 test-verifier 规则。

专家知识变成共享的 Agent 。

不再困在某个人是否有空。

这个周末怎么搭自己的版本

8 步设置清单:

1. 安装 Claude Code:code.claude.com

2. 创建目录结构:
   .claude/agents/
   .claude/skills/feature-factory/
   .claude/skills/build-with-tests/
   .claude/hooks/

3. 写 CLAUDE.md:100–300 行,包含技术栈、命令、架构规则和禁止事项。

4. 在 Claude Code 里用 /agents 命令创建 7 个 Agent。描述每个 Agent 的角色,让 Claude 写文件,你 review 后提交。

5. 创建 feature-factory orchestrator skill。让 Claude 写,它会读取 7 个 Agent 文件并串起整条链。

6. 创建 build-with-tests skill。描述团队如何构建:匹配现有模式,代码旁边写测试,最后运行 typecheck。

7. 添加 pre-commit hook。阻止提交 .env、.key、.pem 或 secrets.json。5 分钟完成,能避免灾难。

8. 用一个真实小功能跑完整链路。观察它在哪里卡住,然后补规则。工厂会自己调优。

总时间:2 到 3 小时。

然后跑几个功能。

跑过 3 到 4 个之后,这座工厂就开始熟悉你的代码库。

你会少花时间盯着 AI 。

把更多时间放在决定下一步该做什么。

7 个 Agent 速查

Researcher
→ 写代码前先梳理代码库,只读。

Story Writer
→ 把想法转成用户故事和验收标准,只读。

Spec Writer
→ 把故事转成技术简报,只读。

Backend Builder
→ 实现后端范围,写对应测试。

Frontend Builder
→ 实现前端范围,写对应测试。

Test Verifier
→ 写验收测试,验证用户故事。

Implementation Validator
→ 对照故事和规格,报告缺口,只读。

3 个人工检查点:

批准用户故事
批准技术简报
批准 PR

其他部分自动运行。

多数开发者用 Claude Code 时,还停留在 vibe coding:

prompt → generate → patch → hope

这条路能用,但会遇到天花板。

软件工厂不会把你从流程里拿掉。

它会把你从不需要你亲自盯着的部分里拿出来。

你仍然留在需要判断力的位置:

问题选对了吗?
设计选对了吗?
这个东西可以发吗?

中间的执行部分,交给 Agent 。

这就是把 AI 当成一把更快的键盘,和把 AI 当成一支协同团队之间的区别。

如果这套方法对你有用,建议先从一个小功能跑通。别先追求完整自动化,先让研究、故事、规格、构建、验证、校验这条链路真实跑一次。

来源:https://x.com/sairahul1/status/2058832033628241931