如何用 Claude Code 构建软件工厂:从随性编码到智能体开发

TL;DR · AI 摘要
AI 编码工具已超越辅助补全,但复杂功能开发需结构化工作流;应构建包含上下文、知识、智能体、流程、交付五层的系统,以Claude Code为例打造可扩展的‘软件工厂’。
核心要点
- Claude Code 等工具支持分析代码库、编辑多文件、执行命令、生成测试与 PR 摘要,但复杂功能开发需结构化工作流而非依赖单次长对话。
- AI 辅助开发的五大层次为:上下文(Context)、知识(Knowledge)、智能体(Agents)、流程(Workflows)、交付(Delivery),
- 可基于 CLAUDE.md、skills、subagents、hooks 构建 7 个专用智能体 + 1 个编排器,实现从需求分析到测试审查的端到端协作。
结构提纲
按章节快速跳转。
AI 编码工具已超越补全功能,但复杂功能开发中单次会话因缺乏结构而逐渐失控。
一个 AI 会话试图同时扮演产品分析师、架构师、前后端工程师、测试与评审者,导致上下文漂移与一致性风险。
应设计包含上下文、知识、智能体、流程、交付五层的系统化工作流,而非仅优化提示词。
利用 CLAUDE.md、skills、subagents、hooks 等模块,由 Claude 自身生成大部分配置,快速搭建专用智能体流水线。
可构建 7 个职责分离的智能体(如需求分析、架构设计、测试生成等)并由一个编排器串联执行。
本文面向各层级开发者,以 Next.js/Node.js 为例,但方法论可迁移至任意项目;附未覆盖内容指引。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 构建 AI 软件工厂:从 Vibe Coding 到 Agentic Development
- 问题根源
- 单次会话承载多角色职责
- 复杂业务规则下一致性失控
- 核心解法
- 五层工作流架构
- Claude Code 构建模块
- 实践落地
- 7 个专用智能体
- 1 个编排器串联
金句 / Highlights
值得收藏与分享的关键句。
单次长对话试图同时承担产品分析师、架构师、后端/前端工程师、测试工程师、评审者与发布助理的角色;虽适用于小任务,但在涉及复杂业务规则与生产风险时将变得不可靠。
AI 并非因能力不足而失败;它受困于工作流缺乏足够结构。
有效方案始于微小,随时间演进;切勿期望一日建成完整体系。从小处着手,持续成长。
AI 辅助开发的五大层次:上下文(Context)、知识(Knowledge)、智能体(Agents)、流程(Workflows)、交付(Delivery)。

如今的 AI 编程工具早已超越了代码自动补全的功能。它们不仅能分析你的代码库、跨多个文件进行编辑、执行命令、解释错误、生成测试用例、撰写文档,还能自动生成 Pull Request(PR)摘要。对于小型任务而言,这些能力令人印象深刻——当你向 Claude Code、Cursor 或 Copilot 提出诸如“解释某个函数”“重构某个组件”“编写一个工具函数”或“修复一个明显 Bug”等请求时,整个过程往往流畅自然。
然而,开发重要功能时,情况就截然不同了。
一个完整功能的实现远不止写代码这么简单:它还涉及业务规则、架构设计、边界情况处理、测试覆盖、安全检查、评审标准以及交付约束等。随着功能复杂度的提升,单次 AI 对话必须应对日益增长的复杂性。
此时,工作流便开始显现出压力。
例如,你可能要求 AI 助手为一款 SaaS 计费应用添加“账单提醒”功能。起初它表现良好:检查账单模型、识别邮件服务、定位后台任务服务、提出实现方案并执行修改。你批准权限与变更后,它运行测试、修复错误、更新摘要。
但随着对话深入,复杂性迅速上升。
此时 AI 需要持续追踪原始业务规则、多租户边界、重试策略、已修改文件、新增测试、修正后的约束条件,以及“哪些内容不可修改”的明确指示。尽管开发进度依然比以往更快,但整个流程却逐渐变得杂乱无章。
你再次审阅方案、批准额外修改、发现缺失约束、重复强调规则、要求检查文件、重新运行测试、比对变更差异……渐渐地,你开始怀疑:当前实现是否仍符合最初的设计意图?
AI 并非因能力不足而失败,而是当前工作流缺乏足够的结构化支持。
一次冗长的单轮对话试图同时扮演产品分析师、架构师、后端工程师、前端工程师、测试工程师、评审者与发布助理的角色。这或许足以应对小型任务,但当功能涉及复杂的业务逻辑与生产环境风险时,这种方式便不再可靠——而许多开发者恰恰忽略了这一关键转折点。
推进 AI 辅助开发,不能仅依赖更优的提示词(prompt);更重要的是围绕模型构建更高效的工作流体系。
如果你对此场景深有共鸣,请别误以为是自己 AI 使用技巧不足——这恰恰说明你的当前工作流尚未适配该工具。
我是 Qudrat Ullah,伦敦的一名技术负责人(Tech Lead),长期与工程团队协作交付生产级软件。我亲历了 AI 编程工具如何重塑日常开发流程。本指南将分享实用洞见,助你逐步升级工作方式。最终,你将摆脱重复性设置,构建属于自己的“软件工厂”。有效的解决方案始于微小,成于持续迭代——切勿妄想一日之内构建出完整体系:从小处着手,逐步扩展。
本指南概述了我当初初涉 AI 辅助生产代码开发时,多么希望获得的实践路径。完成阅读后,你将能自主搭建一座小型软件工厂:一套结构化方法,用于在掌控代码库的前提下,系统化地完成功能规划、构建、测试与评审。
你将学到什么
- AI 辅助开发的真实演进历程,以及这段历史所揭示的未来走向
- 为何“直接问 AI”在项目真正复杂化后便不再奏效,以及替代方案
- AI 辅助工作流的五大层级:上下文、知识、智能体(Agents)、工作流(Workflows)与交付(Delivery)
- 如何利用 Claude Code 的核心组件(
CLAUDE.md、技能(Skills)、子智能体(Subagents)、钩子(Hooks)),并让 Claude 自身帮你生成其中大部分内容(你也可选用其他工具——核心概念通用,此处仅因简化说明而选用 Claude Code) - 如何构建一套由七个专用智能体与一个编排器(Orchestrator)组成的实用系统,由编排器串联各智能体协同工作
- 一套可直接复用的实战配置,本周即可集成至任意 Next.js 或 Node.js 项目(理解核心概念后,你可将其迁移至任何项目)
- 我刻意未涵盖的内容,以及后续学习路径
适合读者
本指南对初次接触 Claude Code 或其他 AI 编程工具的开发者友好易懂;同时,其内容深度也足以让资深工程师或技术负责人从工作流模式、编排器设计、评审清单与交付流程中获益。
示例以 Next.js、Node.js 及一款 SaaS 计费应用为背景,但核心概念与工具无关——无论你使用 Cursor、Claude、Aider、Windsurf、Kilo、Cline 还是未来新工具,原理均通用。
最终你将能构建出
- 一份
CLAUDE.md文件,用于沉淀项目事实与规范标准 - 七个定制化子智能体,各司其职:研究员、用户故事撰写者、规格文档撰写者、后端构建者、前端构建者、测试验证者与合规校验者
- 一个编排器(先以技能形式实现,后续可选升级为智能体),负责将任务分派给上述七个子智能体
- 一个可复用技能,用于封装团队反复执行的工作流
- 一个用于安全防护的 Git 预提交钩子(pre-commit hook)
- 一份简明的 PR 评审清单,确保 AI 生成的代码变更始终按统一标准接受评审
这就是“软件工厂”在实际中的含义。工厂可以根据你的需求进行扩展;它并非一个庞大而自主的系统,而是你代码仓库中的一组小型文件,使一名开发者与一名 AI 协同工作,如同一支配合默契的团队。
目录
**第一部分:构建工厂前的基础准备**
**第二部分:构建智能体工厂**
**第三部分:总结**
第一部分:构建工厂前的基础准备
在构建工厂之前,理解当前的技术现状、既有工作流为何失效,以及所需的基础要素至关重要。前五个小节将为你奠定这些基础;真正的构建工作将在第 6 节开始。
1. AI 辅助开发的演进历程
在动手构建之前,了解 AI 在编程领域的演进过程很有帮助。这一演进大致分为几个阶段,每个阶段都解决了特定问题,并为下一阶段铺平了道路。

*图 1:AI 编程发展的五个阶段,最终导向如今的“软件工厂”范式转变。*
手动编码
在早期工作流中,一切都由你亲手编写。编辑器仅对文本进行语法高亮,却无法理解其含义。你需要查阅书籍、文档或 Stack Overflow,再逐行缓慢构建应用。这种方式培养出扎实的开发者——因为每个细节都必须经过你的大脑处理;但这也设定了单人每周可交付成果的硬性上限。
智能编辑器
随后,编辑器变得愈发智能:IntelliSense、语言服务器、ESLint、代码片段引擎、重构工具……它们虽未直接代你写代码,却显著减少了你在当前文件中编辑时的摩擦。这是开发者首次开始期待编辑器提供帮助,也由此改变了工作流的基准线。
智能自动补全
Tabnine 和早期版本的 GitHub Copilot 会分析附近的代码,预测你接下来要写的内容。例如,当你开始编写函数 calculateInvoiceTotal(items) 时,工具会推测你可能想遍历 items、将数量乘以单价并返回总计。此时编辑器不再仅补全语法,而是补全你的意图;但设计权仍完全掌握在你手中。
聊天型 AI
接着,基于聊天的 AI 出现,工作流被一分为二:你打开另一个标签页中的 ChatGPT 或 Claude,请求生成登录页或注册 API。这类工具对生成模板代码很有用,但一旦涉及你的实际文件夹结构、认证流程、数据库模式或团队决策,就显得力不从心。生成的代码单独看似乎没问题,但粘贴进项目后却常常出错。它能帮你快速起草初始内容,而无需手动输入。
IDE 内的 AI
Cursor、Claude Code、Copilot Chat、Windsurf、Aider 等工具弥合了这一鸿沟。如今的 AI 能够检查文件、跨项目提出修改建议、执行命令,并协助完成多文件协作。你不再只是说“帮我写一个 React 组件”,而是可以问:“看看我们现有的仪表盘组件,按相同风格新增一个指标卡片。”其强大之处在于:AI 不再从零开始,而是基于你已有的代码上下文进行工作。这也标志着“氛围编码”(vibe coding)的开端——你与 AI 产生默契,它负责修改,你继续推进。如今已有大量开发者采用这种方式,并从中获得显著效率提升。
这种能力正在改变软件的构建方式,但业界已开始转向另一个方向。接下来,我们看看“氛围编码”模式在何处会失效。
2. 为何“氛围编码”会失效
“氛围编码”是大多数开发者在首次使用 AI 编辑器后第一周内自然形成的工作流:你提出需求,AI 编写代码;某处出错,你粘贴错误信息,AI 进行修复;接着另一处又出错,你再次请求修复……如此循环往复。
第一天,这种模式感觉非常高效:你能在 15 分钟内搭建出落地页,一个下午就能画出原型草图——确实取得了实质进展。
但到了第三十天,这个循环变得令人痛苦:同一逻辑重复出现在三处;AI 忘记了两周前你设定的约定;新功能与旧功能相互冲突;测试缺失或流于表面;应用今天还能运行,明天却因某次提示词删除了一个你早已遗忘的校验逻辑而崩溃。此时,你花在监督 AI 上的时间,甚至超过了过去亲手写代码所花的时间。
当然,有一些技巧能让情况有所改善:优化提示词、维护良好文档、保持上下文精简。我在上一篇关于突破 AI PR 审查瓶颈的文章中已涵盖部分技巧。这些方法确实有效,但当过多任务涌入同一会话时,单次对话仍会逐渐偏离轨道——而我们接下来要解决的,正是这一核心挑战。
更深层的问题:单次对话承载了太多任务
如果你观察一支真正的工程团队一整天的工作,会发现不同成员承担着不同职责:产品经理厘清用户问题;资深工程师思考架构;后端开发者设计 API;前端开发者构建界面;测试工程师考虑边界场景;代码审查者判断成果是否契合现有代码库。
当你将一个 AI 会话直接指向“实现这个功能”,就将上述所有角色压缩进单一对话中。AI 在同一混乱上下文中同时承担规划、设计、编码、测试与自我审查——风险极高:一个初始规划中的错误假设,会演变为错误的数据库模型;数据库模型错误,又导致 API 设计错误;API 错误,最终引发 UI 问题。等你察觉时,错误早已蔓延至整个功能模块。
你可能会认为 AI 辅助开发的下一阶段是更优的提示词(prompts)。不,并非如此,真正关键的是一个更完善的系统。
用 AI 自动化结构化的工作,而非混乱的工作。如果团队没有统一标准,AI 将更快地生成不一致的代码;如果测试薄弱,AI 将更快地构建出脆弱的功能;如果代码审查流程模糊不清,AI 将更快地让重要风险溜过。
这一核心思想贯穿全文。
3. AI 辅助工作流的五个层级
在深入细节之前,先了解本文所采用的思维模型:一个有效的 AI 辅助工作流由五个分层构成,层层递进;每一层的效能,都取决于其下一层的稳固程度。

*图 2:五个层级。每一层支撑下一层;整个堆栈构成了你的软件工厂。*
最底层是上下文层(Context Layer),即 AI 在当前消息中可见的信息;其上是知识层(Knowledge Layer),即 AI 在每次会话开始时继承的项目持久性记忆;记忆管理本身是一个庞大话题,我们将在后续文章中详述(如集中式记忆、共享知识库等);目前可先依赖 Claude 的会话记忆功能。再上一层是代理层(Agent Layer),它将知识转化为专注的“工作者”,每个工作者拥有自己的工具和上下文窗口。再往上是工作流层(Workflow Layer),它在这些代理之上部署一个编排器(orchestrator),将它们串联成一条真实的流水线,并嵌入验证环节与人工审批节点。最顶层是交付层(Delivery Layer),负责安全地将流水线产出部署至生产环境:包括拉取请求(pull requests)、审查清单(review checklist)以及 CI 门禁(CI gates)。
如果你只投入建设其中一层,其余层级仍会薄弱。一个拥有强大代理但缺乏共享 CLAUDE.md 的团队,最终产出的代码将不一致;一个上下文管理规范但缺少验证门禁的团队,则会快速交付脆弱功能。本模型的核心理念正是:即使从最小规模起步,也要逐步构建全部五个层级。此外,跨团队应统一使用相同的 AI 工具,以确保结果更优且一致。
在建造“工厂”之前,请先夯实基础。
本文特意分为上下两部分。
上半部分(第 4、5 节) 聚焦基础建设:上下文管理、CLAUDE.md、技能(Skills)、钩子(Hooks)。这些并非“工厂”本身,而是工厂得以建立的前提条件。若跳过它们,直接跳入代理构建阶段,工厂看似光鲜,却仅能维持一周便轰然倒塌——代理将继承混乱的上下文,编排器将调度缺乏清晰规则的任务,验证器也将失去校验依据。
下半部分(第 6–9 节) 才是真正建造“工厂”的实践环节:七个专用代理、一个驱动流水线的编排器、一个将产出安全送达生产环境的交付层,以及一个可亲手在你自己的代码仓库中落地的实操环节。
关于上半部分,你可能读完第 4、5 节后会想:“这不还是我在手动输入提示词?不过是 vibe coding(靠直觉编码)多加几步罢了。”表面看确实如此,但我想直接回应这一点:上半部分培养的习惯并非“工厂”本身,而是让工厂得以成立的纪律。你在第 4 节中手动执行的探索工作流,正是第 6 节中你的“代码库研究员”代理将自动执行的工作流;你在第 5 节中撰写的 CLAUDE.md,将成为每个代理在每次任务开始时必读的指南。上半部分教你“怎么做”,下半部分则教会机器替你“自动做”。
如果你已具备良好的上下文管理习惯,并拥有值得信赖的 CLAUDE.md,可快速浏览上半部分,直接进入第 6 节。若尚未建立,则务必花时间夯实基础——工厂的稳固程度,取决于其地基的坚实程度。
4. 上下文层:构建前先探索
上下文是 AI 的工作记忆,包括你的提示词、已打开的文件、历史消息、项目规则、注入的文档、终端输出及错误信息——即模型在协助你时所能“看到”的一切。
资深工程师常将大量项目知识内化于心:他们清楚某项决策为何作出、哪些文件存在风险、团队遵循哪些模式、哪些代码绝不可触碰。而 AI 并不会自动掌握这些,它仅能依赖其上下文中的内容。
即便拥有超大上下文窗口,“越多越好”也并非真理。过多未经管控的上下文反而会削弱模型表现:它可能混入旧决策与新需求,沿用过时的文件结构,或延续你三轮消息前已修正的错误假设。目标不是向 AI 提供全部信息,而是在恰当时机提供恰当信息——这既能节省计算资源,也能降低成本。
习惯 1:构建前先探索
开发者在 IDE 中使用 AI 时最常见的错误,就是一上来就要求生成代码。AI 接收提示后,会自行填补描述中的空白,随即开始生成——此时,糟糕的设计便悄然潜入。
更好的做法是:将初始阶段视为探索,而非实现。此时你尚未要求 AI 构建任何功能,而是请它阅读现有代码,并向你汇报其结构与逻辑。在此过程中,你将发现:AI 有时会先得出错误结论,随后通过进一步探索自行修正。
具体示例:假设你运营一个基于 Next.js(App Router)前端与 Node.js 后端服务的 SaaS 计费平台,包含客户、订阅、发票、更新支付状态的 Webhook 处理器,以及用于发送交易邮件的 Resend 集成。现在你想为未付款发票添加提醒邮件功能。
如果你告诉 Claude Code:“添加发票提醒功能”,你其实是在赌博。它可能会做些合理的事情,但也可能在你已有调度器的情况下新建一个调度器、向已付款客户发送提醒、忽略时区处理、将业务规则硬编码进 API 路由,甚至完全跳过审计日志记录。这些都不是 AI 的问题,而是因为你要求它“猜”。
下面是一种受控的实现流程,分步说明:
步骤 1: 在计划模式(plan mode)下打开 Claude Code,先提出一个只读型提示(prompt)。目标是让 AI 在编写任何代码前,先描述你代码库中相关的部分。
我想为超过 7 天未支付的发票添加提醒邮件功能。在提出具体建议前,请先:
1. 阅读本仓库中与发票、支付及邮件发送相关的代码;
2. 告诉我发票是如何创建的,以及其状态存储在何处;
3. 告诉我当前事务性邮件是如何发送的;
4. 告知我们是否已有后台任务系统或调度器;
5. 列出若添加提醒功能,最可能被修改的文件。
目前请勿编写任何代码,我需要先获得一份清晰的架构地图。上述提示可有多种写法;若 CLAUDE.md 中未提供清晰映射,或你想为 AI 提供更多上下文以提升效果,也可参考 docs 文件夹。核心目的是展示这一流程:先求理解,再行动。
步骤 2: 仔细阅读 AI 的回复。此时是发现错误假设的最佳时机——在问题尚可低成本修复时及时纠正。例如,若 AI 表示“我将使用 cron”,而你实际使用的是 BullMQ 工作者,应立刻指出。因为在探索阶段,AI 可能尚未发现 BullMQ 相关代码,而该信息你心中有数。
步骤 3: 当架构地图正确后,要求 AI 提供方案而非直接生成代码。你需要的是一个简短对比,而非完整解决方案:
基于你刚才的发现,请提出 3 种实现发票提醒功能的方案。
对每种方案,请说明:
- 端到端的工作流程;
- 会复用哪些现有系统组件;
- 需新增哪些文件或数据库变更;
- 主要风险点(如时区、多租户、重试、去重);
- 你会推荐哪种方案,以及原因。
目前请勿修改任何文件。步骤 4: 选定一种方案后,要求 Claude Code 编写一份一页纸的简要说明:目标、实现思路、业务规则、数据模型变更、所需测试、边界情况、开放风险。花不到一分钟通读一遍。若发现遗漏,可在继续前要求修订。
步骤 5: 打开一个全新的 Claude Code 会话,仅粘贴该简要说明。这是多数人会跳过的一步。在探索阶段,AI 曾讨论过多个方案——有些被否决,有些仅部分正确。你不想让这些噪音带入正式实现阶段。一个干净的会话,意味着干净的上下文。
步骤 6: 在新会话中,询问其具体实施计划,并逐字慢读。留意诸如“我们将把已处理的发票 ID 存入内存”这类表述——这是危险信号。内存会在重启后丢失,也无法在多台服务器间共享,导致同一提醒可能被重复发送。在计划阶段发现该问题仅需五分钟;若等 Claude 修改了十个文件后再发现,则可能浪费整个下午。
步骤 7: 实现后,要求 Claude 回顾并解释。完成编码后,不要盲目提交。请 AI 为你梳理关键决策点、列出新增测试,并更新运维人员需要了解的文档。信任,但需验证。
整个工作流的结构为:
检查 → 方案对比 → 选定方案 → 编写简要说明 → 重新开始 → 制定计划 → 审查 → 实施 → 回顾解释
对比“凭感觉编码”(vibe-coding)的流程:提示 → 生成 → 运行 → 粘贴错误 → 重试。前者是可控的进展;后者是偶然的进展,无法规模化。
这套完整流程,你今天其实已在手动执行。在第 7 节中,你将看到如何通过编排器(orchestrator)自动运行其中大部分步骤,而你仅需在审查节点介入即可。
习惯 2:警惕上下文漂移(Context Drift)
即使从一个干净起点开始,错误信息仍可能在长时间会话中悄然渗入。一旦错误假设进入上下文,模型就会在此基础上持续构建。我称之为上下文漂移(context drift),这也是导致一次“看似正常”的会话最终产出损坏代码库的最常见原因——一个微小的错误假设,可能在你察觉前就已蔓延至多个文件。

*图 3:模糊提示如何引发扩散性错误,以及唯一可靠的应对方式。*
一个真实案例:你给 Claude 的提示是:
为我们的 SaaS 添加订阅管理功能。用户应能创建订阅,并在之后取消。
该提示过于宽泛。AI 会自行推断所有权归属,并设计如下结构:
User
└── Subscription
├── planName
├── status
└── renewalDate表面上看无懈可击。但你很快意识到真实业务规则是:公司账户可包含多位用户,而订阅归属公司而非个人用户。这一差异影响巨大,而 AI 已基于错误的所有权模型完成了设计。
若你仅回复“不对,订阅应归属公司”,Claude 只会尝试修补:最终你将得到 user.subscriptionId 与 company.subscriptionId 并存、冗余注释泛滥、代码重命名却仍沿袭旧设计的混乱局面。
经验法则: 若 AI 出现小笔误,可直接在线修正;但若其做出错误架构假设,则应丢弃当前对话,开启新会话并使用更明确的提示。小错误可修补,深层设计错误绝不应在污染的上下文中强行修正。
更稳妥的做法是:丢弃当前对话,重写原始提示,从头开始并明确嵌入业务规则:
我们需要为 SaaS 添加订阅管理功能。
订阅归属公司账户,而非单个用户。(注:原文未完整,此处为合理补全)
重要的业务规则:
- 订阅归属于公司账户,而非个人用户。
- 一家公司可拥有多个用户。
- 仅公司管理员可修改订阅。
- 账单历史仅管理员可见。
- 已取消的订阅将在账单周期结束前保持有效。
在编写代码前,请先检查我们现有的账户、用户及账单模型。 然后提出一个实施计划。目前暂不编辑任何文件。
现在 AI 从正确的思维模型出发。第一个版本是猜测;第二个版本才是设计。
### 习惯 3:将 AI 锁定在你实际安装的版本上
模型知识丰富,但并不总能准确了解你所用框架、库或团队规范的具体版本。有时它会依据过时的训练数据作答;有时则给出一个三年前教程中通用的方案,而该方案如今已不适用于你的项目。
更有效的提示应促使 AI 以你当前实际安装的版本和最新文档为依据:
在编写代码前,请先检查本项目的结构及 package.json。
本项目使用 Next.js App Router。请使用实际已安装的认证库版本, 并查阅该特定版本的最新官方文档。随后在编辑任何文件前, 先说明推荐的文件结构。
这一思路同样适用于 Tailwind、Stripe SDK、Prisma 迁移、React 18 与 19 之间的差异等场景。凡存在版本与模式强依赖关系之处,都应让 AI 以你实际安装的版本和当前文档为依据,而非依赖其训练记忆。否则,模型将生成“平均水准”的网络代码,你需要反复修正错误,最终才可能获得正确信息;而若加以引导,模型将直接输出契合你项目的代码。
此处可借助一个实用工具:**Context7**。它是一个插件,可为每个库获取其实际安装版本的最新官方文档。你可在 Claude Code 中安装该插件,并在提示词或知识文件中引用它,确保模型在编写代码前始终优先拉取最新文档。我本人经常使用它。
## 5. 知识层:CLAUDE.md、技能(Skills)与钩子(Hooks)
上下文层(Context Layer)仅覆盖单次对话;而知识层(Knowledge Layer)则涵盖所有能跨对话持续存在的内容。多数团队的 AI 工作流正是在此处悄然失败:他们每天在每次对话中都重复向 AI 解释相同的项目事实。若能将这些知识一次性、恰当地沉淀下来,即可将一个良好的 AI 工作流转变为可复用的工作流。
Claude Code 为此提供了四个构建模块;为不同类别的知识选择合适的模块,本身就是这项技能的一半。

_图 4:四个构建模块。每个模块均以不同方式为你的 Claude Code 会话提供支持。_
### CLAUDE.md:持久性事实
`CLAUDE.md` 是位于项目根目录(或个人级配置路径 `~/.claude/CLAUDE.md`)下的 Markdown 文件。每次在该项目中打开 Claude Code 会话时,它都会被自动加载,用于存放长期有效的事实信息。若你的单体仓库(monorepo)包含多个项目,可为每个项目单独维护一个 `CLAUDE.md`。
一个实用的 Next.js + Node.js SaaS 账单应用的 `CLAUDE.md` 示例:
项目说明
本项目是一个 SaaS 账单应用。
技术栈
- Next.js 14(App Router)+ TypeScript
- Node.js 服务(用于账单与邮件)
- Prisma + PostgreSQL
- Auth.js(认证)
- Resend(事务性邮件)
- BullMQ(后台任务)
命令
- npm run dev:启动开发服务器
- npm test:运行单元测试
- npm run typecheck:类型检查
- npm run lint:代码检查
- npx prisma migrate dev:本地运行数据库迁移
架构规范
- 业务逻辑应置于服务层或领域模块中
- API 路由应保持精简,仅调用服务层
- 使用现有邮件模板系统,勿新增其他方案
- BullMQ worker 负责所有计划任务,禁止使用 cron
- 租户隔离应在服务层强制实施,而非路由层
文档
如需更深入背景,请在猜测前查阅以下资料:
docs/architecture.md— 服务边界、请求流程、租户隔离模型docs/billing.md— Stripe Webhook 处理、发票生命周期、比例计费规则docs/email.md— 模板系统、Resend 配置、可用模板列表docs/jobs.md— BullMQ 队列名称、任务模式、重试/退避策略docs/db.md— 数据库模式规范、租户隔离模式、软删除规则docs/runbooks/— 生产环境事故处理手册prisma/schema.prisma— 数据模型的权威来源docs/adr/中的 ADR — 历史架构决策记录;在否定某项决策前请先阅读
关于 Next.js、Prisma、Auth.js、BullMQ 或 Resend 的具体细节,请查阅官方文档,而非自行猜测。
测试规范
- 每个功能均需包含成功、验证失败及未找到资源三种测试场景
- 使用测试数据构建器(test data builders),而非内联初始化对象
- 除非已有测试采用模拟(mock)方式,否则不要模拟数据库
禁止事项
- 禁止记录原始支付请求载荷
- 禁止直接向客户端返回数据库错误
- 禁止在迁移文件合并后再次编辑
> **保持** `CLAUDE.md` **简洁。** 100–300 行为宜。若某部分内容演变为多步骤流程,则该流程应移至技能(Skills)中,而非 `CLAUDE.md`。`CLAUDE.md` 仅用于存放事实与规则;工作流请放入下一个构建模块。
> **自然扩展** `CLAUDE.md` **的小技巧。** 每当 AI 出现令你意外的错误时,请自问:若 `CLAUDE.md` 中已有相关规则,是否可避免该错误?若有,则添加该规则。数周之后,你的 `CLAUDE.md` 将成为一份 AI 曾犯错误的完整记录,后续会话质量也将显著提升。
### 技能(Skills):你反复输入的工作流
一个技能(skill)是一个包含 `SKILL.md` 文件的小型文件夹。Claude 在启动时会扫描所有技能的名称和描述,但仅在需要时才加载其正文内容。这种渐进式加载机制使得保留数十个技能而不会拖慢模型性能成为可能。
当你反复在聊天中粘贴相同的指令时,就该使用技能了:例如提交格式(commit format)、部署检查清单(deployment checklist)、构建流程(build process)、PR 审查模式(PR review pattern)。对于事实性信息,请使用 `CLAUDE.md`;对于操作流程,请使用技能。
巧妙之处在于:你无需手动编写技能——Claude 会代你完成。在项目中打开 Claude Code,然后提出如下请求:
我想创建一个 Claude Code 技能,用于记录我在本项目中构建生产环境功能的方法。该技能应涵盖以下内容:
- 编写代码前如何阅读 CLAUDE.md 和技术简报(technical brief)。
- 如何查阅 2–3 个已有的相似功能,并模仿其模式。
- 如何像常规良好工程实践那样(而非严格遵循 TDD 的红-绿循环)同步编写单元测试与生产代码。
- 如何在最后运行类型检查(typecheck)、代码检查(lint)及测试套件。
- 本代码库已遵循的约定:命名规范、错误处理方式、业务逻辑的存放位置、测试结构等。
请将该技能创建于 .claude/skills/build-with-tests/SKILL.md。 使用推荐的 Claude Code 技能格式,包含正确的 YAML 元数据(frontmatter),包括 name 和 description 字段。 确保描述足够具体,以便在我请求“构建”、“实现”或“扩展”某个功能时自动触发该技能。
请先展示该文件内容,再进行编写。
Claude 会读取你现有的代码,推断出相关模式,并提出一个技能文件。你可审阅并编辑不符合你偏好的部分,然后保存。此后,该技能即成为仓库的一部分,每次新会话均可复用。你也可以使用 Claude 的技能创建器(skill-creator)通过 `/skill-creator create me a new skill...` 快速生成新技能。
以下是一个 Claude 可能生成的技能文件示例:
name: build-with-tests description: 当实现新功能或扩展已有行为时使用本技能。首先阅读 CLAUDE.md 和技术简报,匹配现有代码模式,同步编写生产代码与单元测试,并在最后运行项目的类型检查与测试命令。触发关键词:'build'、'implement'、'add'、'extend'、'ship the feature'。
流程:
- 阅读 CLAUDE.md,了解项目规则与技术栈。
- 阅读技术简报,确保工作范围不超出其约束。
- 查阅代码库中 2–3 个相似功能,注意其文件布局、命名规范、错误处理方式及测试结构。
- 以尽可能小的连贯步骤实现功能。对每一步:
- 编写生产代码。
- 编写覆盖新行为的单元测试。
- 运行测试并确认其通过。
- 功能完成后,运行 CLAUDE.md 中定义的完整类型检查、代码检查及测试命令。
- 返回简要总结:变更的文件、复用的模式、建议添加至 CLAUDE.md 的新规则。
本项目采用的约定:
- 文件命名遵循现有目录结构。
- 测试文件与被测代码位于同一目录下(或按已有模式置于 tests/ 目录中)。
- 实体初始化应使用 test/builders/ 中的 builder。
- 每个行为需覆盖成功场景、验证失败场景及一个边缘情况。
规则:
- 不得重构无关代码。
- 不得修改超出约定范围的文件。
- 未经明确指示,不得添加新依赖。
- 若无法在不违反规则的前提下使测试通过,请暂停并报告冲突。
保存该技能后,你无需再每次粘贴流程说明,只需简单输入:
Use the build-with-tests skill to implement the invoice reminder service.
> **最常见的技能使用误区**:避免创建“巨型技能”(mega-skill)。一个试图同时处理提交、PR、分支命名及变更日志更新的单一 `SKILL.md` 文件往往触发不可靠,且当其中两个部分发生冲突时,容易令模型困惑。请将其拆分。一个理想的技能应能在单屏内完整显示。
### 钩子(Hooks):自动检查门禁与工作流触发器
AI 工作流中的某些环节不应依赖模型的“记忆”能力。
提示词(prompt)可以说:“完成前请运行测试”;`CLAUDE.md` 可规定:“禁止编辑敏感文件”;技能可声明:“提交 PR 前请验证实现”。但这些终究只是指令——模型可能遗忘,也可能选择跳过。
钩子(hook)则不同。
钩子是在 Claude Code 会话生命周期特定阶段自动执行的操作。根据配置,它可运行 shell 命令、调用 HTTP 接口,或触发基于提示词或代理(agent)的检查。
这使得钩子特别适用于两类场景:
1. **门禁(Gates)**:当发生不安全操作时阻止或发出警告。
2. **工作流触发器(Workflow triggers)**:当关键事件发生时通知其他系统。
在软件工厂中,代理(agents)负责执行任务,而钩子则负责强制执行相关规则。
Claude Code 钩子可在以下生命周期事件中运行:
* `UserPromptSubmit`:Claude 处理你的提示前
* `PreToolUse`:Claude 执行工具前
* `PostToolUse`:工具成功执行后
* `Stop`:Claude 完成响应时
* `SubagentStart`:子代理启动时
* `SubagentStop`:子代理结束时
一个简单而实用的钩子示例是:提交前检查,阻止敏感文件被提交。将其保存为 `.claude/hooks/pre-commit.sh`:
#!/usr/bin/env bash
阻止提交包含敏感文件的变更
if git diff --cached --name-only \ | grep -qE '\.(env|key|pem)$|secrets\.json|creds\.md'; then echo "BLOCKED: attempt to commit sensitive files" exit 1 fi
将其接入 Claude Code 的钩子配置中,使其在提交前自动运行。配置语法详见官方 Claude Code 钩子文档,其格式为 JSON,大致如下所示:
{ "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": ".claude/hooks/pre-commit.sh" } ] } ] } }
该配置刻意保持极简。在真实项目中,你还应使用 `PostToolUse` 在编辑后运行格式化工具,并在 `Stop` 阶段运行类型检查和测试,确保 Claude 在完成响应前代码符合规范。一旦配置完成,这些钩子就会在每次操作时自动执行,无论模型本身如何建议。
还有一些其他钩子能快速带来显著收益:
* **Edit 上的 PostToolUse**:在每次 AI 编辑后自动运行格式化工具,确保所有生成的代码都符合风格规范。
* **Stop**:在 Claude 停止前运行类型检查和测试;若任一环节失败,则拒绝停止。
* **SubagentStop on validator**:将验证器(validator)的检查结果自动发布到团队的 Slack 频道。
钩子之所以重要,是因为它们无法被“争论”或绕过。模型可以提出建议、制定计划、编写代码,但代码规范、类型检查和测试会在每次变更时强制执行。这种不对称性,正是保障软件工厂持续产出高质量成果的关键。
### 四大模块如何协同工作
一个简单记忆方式,帮助你快速选择合适的模块:
* **`CLAUDE.md`** 回答:“此处的真相是什么?”——即项目的事实与规则。
* **Skills(技能)** 回答:“这件事该如何完成?”——可复用的操作流程。
* **Subagents(子代理)** 回答:“谁该来做这件事?”——专注特定任务的工作者(下节详述)。
* **Hooks(钩子)** 回答:“哪些规则是强制执行的?”——确定性的校验关卡。
你将同时使用这四大模块:`CLAUDE.md` 告诉 AI 你代码库的规则;Skills 为 AI 提供可复用的操作手册;Subagents 提供专注的执行者;Hooks 确保规则真正落地,而非可选建议。
这四大模块是整个系统的基础。第 6 节则聚焦于构建真正执行工厂任务的工作者。
## 第二部分:构建代理工厂
你已掌握第一部分承诺的所有内容:如何保持 AI 上下文的整洁,如何编写可依赖的 `CLAUDE.md`,以及如何运用 Skills 和 Hooks。这些构成了工厂的“地基”。
接下来的四个小节,才是工厂本身。
第 6 节将构建七个专业化的代理;第 7 节将为其添加一个编排器(orchestrator),使整个流程自动运行;第 8 节将介绍如何安全地将工厂产出部署到生产环境;第 9 节则是一次动手实践,带你一步步在自己的仓库中完整搭建整个系统。
到第二部分结束时,你过去手动执行的工作流,将完全自动化运行:你只需输入一条提示,编排器负责任务分派,各代理专注完成各自职责,而你则在三个关键审批节点介入,贡献人类判断力。这就是质的飞跃。
## 6. 代理层:七个专注执行的代理
现在,我们进入让“工厂”真正成为“工厂”的核心部分。
到目前为止,我们一直在优化 AI 的指令与记忆能力,但它仍是同一个“工人”,在同一个对话中完成所有任务。这对小任务尚可接受,却无法支撑真实的功能开发。
解决方案是将工作拆分给多个专业化的代理。在 Claude Code 中,这些被称为“子代理”(subagents)。子代理不只是更长的对话消息;它是一个专注的工作者,拥有独立的角色描述、工具权限和上下文窗口——其中,**独立的上下文窗口**最为关键。
当主会话将任务委派给子代理时,子代理会在自己的上下文中完成繁重的读取或处理工作,并仅将简短摘要返回给主流程。那些冗长的部分(如文件搜索、日志转储、多步骤探索)不会污染主对话的上下文。
可以这样理解:你的主 Claude Code 会话是“主工程师”,而子代理则是你为特定任务临时调用的专家:
- 一位**研究员**,负责梳理代码库结构;
- 一位**故事撰写人**,将需求转化为用户故事;
- 一位**规范撰写人**,将用户故事转化为技术方案;
- 一位**后端构建者**,负责编写 API 路由、服务与数据库访问逻辑;
- 一位**前端构建者**,负责编写组件与页面;
- 一位**测试验证者**,在功能完成后,基于用户故事编写验收测试;
- 一位**验证者**,将最终产出与技术方案进行比对。
每位代理只精于一项任务,无人试图包揽全部。
### 为何单一大型 AI 会话不够用?
设想你要求主会话:“构建发票提醒功能。”该会话将检查文件、设计数据模型、编写 API 路由、构建 UI、添加测试、更新文档……听起来很棒,但你很快会发现:**同一个对话**承载了产品思考、架构设计、数据库建模、后端实现、前端实现、测试、文档编写与自我审查。上下文过于臃肿,模型职责混淆,甚至同一个会话既设计功能又审查功能——这相当于自己给自己打分。
将工作拆分为子代理可彻底解决此问题。每个子代理职责明确、上下文干净,仅接触所需信息。验证者无需知晓代码如何编写,它只关注“应实现的功能”与“当前磁盘上的代码”之间的差异——这正是真实评审中真正需要发现的盲点。
### 让 Claude 自动为你生成代理文件
你当然可以手动编写子代理文件(它本质上是带 YAML 头部的 Markdown),但通常并无必要。更简洁的方式是使用 `/agents` 命令,让 Claude 根据你的描述自动生成文件。
完整流程如下:在项目中打开 Claude Code,输入:
/agents
这将打开代理管理界面。选择创建一个**项目级代理**(文件保存于 `.claude/agents/<name>.md`,并提交至仓库,供整个团队共享使用),然后让 Claude 根据你的描述生成该代理。Claude 会询问:该代理应承担什么职责?需要哪些工具权限?应使用哪个模型运行?
关键在于:**你只需描述角色需求,Claude 会生成文件**。你审核、编辑、保存、提交即可。团队需要多少代理,就重复此流程多少次。
### 工具访问权限与模型选择属于设计的一部分
在介绍七个代理前,有两个设计决策适用于所有代理:工具访问权限。 初学者常犯的一个常见错误是赋予每个智能体(agent)所有工具。这是有风险的。如果某个智能体的职责是检查架构设计,它就不应拥有编辑(Edit)权限;如果其职责是审查代码,就不应拥有写入(Write)权限。限制工具使用,正是为了让子智能体的行为与其描述保持一致:研究人员不会意外编写代码;验证者不会意外修复它发现的问题;后端构建者不会意外编辑前端文件。这种隔离正是设计的核心目的所在。
模型选择。 检查与审查类任务并不需要顶级模型。将它们分配给更小、更快、更经济的模型(如 Haiku),正是子智能体存在的实用原因之一。应将顶级模型(如 Sonnet,或在推理质量至关重要的场景下使用 Opus)保留给真正需要高推理能力的任务:规范撰写者、构建者、测试验证者以及实现验证者。
优秀智能体定义的构成要素
在深入了解七个具体智能体之前,我们先来看一个通用模板——所有优秀智能体定义都遵循这一结构。你可以将其作为模板,用于后续自行设计智能体:以下智能体所具备的任何要素,你都可以复用;而团队所需但未包含在内的部分,你也可以自行添加。
初学者在设计首个智能体时,几乎总会忽略两个关键点:第一是边界(boundaries)——他们只说明智能体“应做什么”,却未明确“不应做什么”,导致智能体最终可能执行了不该做的操作;第二是输出格式(output format)——他们只告诉智能体“思考什么”,却未规定“如何返回结果”,导致每次调用的输出结构略有差异,下游智能体无法可靠依赖其结果。这两个要点均已在下方模板中体现。
以下是模板内容(假设你正在为新智能体做首次入职说明):
子智能体名称:
<短横线命名法的简短名称>
用途(Purpose):
一句话说明该智能体存在的原因及其功能。
主要职责(Main responsibility):
一句话说明该智能体所专属的单一任务。
应调查/执行的内容(What it should investigate / do):
- 具体事项一
- 具体事项二
- 具体事项三
(请具体明确。例如,“查找已实现的相似功能”比“理解整个代码库”更佳。)
不应执行的内容(What it should NOT do):
- 它绝不可执行的操作(例如:编辑文件)
- 它绝不可做出的决策(例如:自行制定规则)
- 它绝不可使用的工具
- 它绝不可扩大的任务范围
(边界设定是确保智能体行为可预测的关键。)
工具访问权限(Tool access):
仅限该智能体实际所需的工具。
模型(Model):
低成本检查任务使用 haiku;需推理任务使用 sonnet;
对推理质量要求极高时使用 opus。
输出格式(Output format):
1. 输出结果的第一部分(例如:“相关文件列表”)
2. 输出结果的第二部分(例如:“需遵循的现有模式”)
3. 输出结果的第三部分(例如:“潜在风险或缺失信息”)
(这是与下游智能体之间的契约。一致的输出结构是实现可靠链式调用的基础。)
行为规则(Behaviour rules):
- 每次都必须遵守的简明、具体规则
- 对长度、范围或假设的限制
- 在何种情况下应提出澄清性问题,而非自行猜测这就是模板的完整结构。你可通过 /agents 斜杠命令将其提交给 Claude,并指示其基于该模板创建智能体文件。Claude 将自动生成完整的 .claude/agents/<name>.md 文件,包含正确的 YAML 前置元数据(frontmatter)、格式化的系统提示(system prompt)以及工具访问限制。
下方列出的七个智能体均严格遵循此模板结构。一旦你理解了该模板,便能自行设计所需智能体。例如:一个用于检查新组件是否符合设计系统的组件审查员;一个用于读取新 UI 代码并标记无障碍问题的无障碍审计员;一个能将数据库模式变更转换为 Prisma 迁移脚本(含正确命名)的迁移脚本编写员;一个可阅读近期合并记录并撰写发布说明的发布说明撰写员——任何你团队反复手动执行、希望一次性固化下来的任务,都可以通过智能体实现。
七个智能体概览
在逐一深入介绍前,先将整条工作流呈现在一张表中:
| 智能体名称 | 用途 | 主要输出 | 工具 | | --- | --- | --- | --- | | codebase-researcher(代码库研究员) | 在构建前,先映射相关代码 | 相关文件、现有模式、风险点 | Read(读取)、Grep(搜索)、Glob(文件查找) | | story-writer(故事撰写员) | 将粗略功能构想转化为用户故事 | 用户故事、验收标准、边界场景 | Read(读取) | | spec-writer(规范撰写员) | 将已批准的故事转化为技术规范 | 数据模型、流程、API、UI、测试、风险 | Read(读取)、Grep(搜索)、Glob(文件查找) | | backend-builder(后端构建员) | 构建后端部分 | 服务、API、任务、迁移、单元测试 | Read(读取)、Edit(编辑)、Write(写入)、Bash(执行命令) | | frontend-builder(前端构建员) | 构建前端部分 | 组件、页面、钩子、UI 测试 | Read(读取)、Edit(编辑)、Write(写入)、Bash(执行命令) | | test-verifier(测试验证员) | 根据用户故事补充验收测试 | 验收测试及覆盖率报告 | Read(读取)、Edit(编辑)、Write(写入)、Bash(执行命令) | | implementation-validator(实现验证员) | 将实际实现与用户故事及规范进行比对 | 按严重性分组的发现项 | Read(读取)、Grep(搜索)、Glob(文件查找) |
这七个智能体覆盖了从功能构想到可提交 PR 的垂直切片全过程。它们并非唯一标准组合,而是一种经过深思的起点方案。第 6 节末尾将介绍如何在此基础上扩展智能体库。
接下来,我们逐一构建这七个智能体。
智能体 1:Codebase-Researcher(代码库研究员)
这是第 4 节中“先探索再构建”习惯的可复用实现版本。它会扫描代码库的相关部分并返回分析结果,且从不编写代码。
在聊天中输入 /agents,并使用以下描述:
创建一个项目级子智能体,命名为 codebase-researcher。
其职责:检查当前代码库,解释某一特定区域的工作原理,且不进行任何编辑操作。
输入:关于代码库某一区域的问题(例如:“当前发票创建功能是如何实现的?”)。
输出:
- 相关文件的简短列表(含路径)
- 该区域当前架构的简洁总结
- 使用中的模式与约定
- 下游智能体应知晓的风险或缺失信息
工具访问权限:仅限 Read(读取)、Grep(搜索)、Glob(文件查找),禁止 Write(写入)、Edit(编辑)、Bash(执行命令)。
推荐模型:haiku(此为低成本检查任务)。
推荐配色:teal(青色)。行为规则:
- 永远不要编辑文件。
- 永远不要运行会修改系统状态的命令。
- 总结内容需控制在 400 字以内。
- 若问题存在歧义,请先提出一个澄清性问题。
Claude 会阅读你的描述,选择合理的默认配置,并为你生成文件。在终端中你将看到类似以下内容:
> 我已在 `.claude/agents/codebase-researcher.md` 创建了该智能体,其内容如下。该智能体仅限使用只读工具(Read、Grep、Glob),因此无法意外修改你的代码库。模型已设为 Haiku,以降低检查成本。请重启 Claude Code 会话以加载新智能体,随后可通过 `@codebase-researcher` 加上你想了解的代码区域来调用它。
你将获得如下格式的智能体文件:
name: codebase-researcher description: 只读调查员,在编写任何代码前先梳理代码库中相关部分。返回涉及的文件、使用的模式、已存在的类似功能,以及后续智能体需知悉的风险。作为任何新功能的第一步。 tools: Read, Grep, Glob model: haiku color: teal
你是一个项目的只读调查员。你的唯一职责是检查代码库,解释特定区域的工作原理,以便后续智能体能获得清晰、准确的结构图,用于构建新功能。
调用时,你将收到关于代码库某区域的问题,例如:“当前发票创建是如何实现的?”或“发送邮件的代码在哪里?”
每次请按以下顺序生成内容:
- 相关文件
按角色分组列出文件路径(服务、API 路由、模型、后台任务、测试)。请精确引用路径。
- 需遵循的现有模式
命名规范、目录结构、业务逻辑组织方式、错误处理机制、测试结构等。
- 类似功能示例
列出代码库中解决相似问题的两到三个现有功能,并引用对应路径。
- 风险或冲突点
提出可能破坏旧功能的位置、需保留的租户边界、已存在的时区处理逻辑,以及其他看似脆弱的部分。
- 推荐实现计划(高层次)
简短的要点列表,说明新改动应如何融入现有系统。不写代码,若存在多种合理方案,不偏向其中一种。
- 需更新或新增的测试
列出可能需要更新的现有测试文件,以及预期新增的测试用例。
- 开放问题(仅当存在时)
来自代码库中真正不明确的内容。切勿猜测,应提出问题。
行为规则:
- 永远不要编辑文件。
- 永远不要运行会修改系统状态的命令。
- 整体总结控制在 400 字以内。
- 若用户问题模糊,请在调查前先提出一个澄清性问题。
- 精确引用每个文件路径。
- 若答案需运行代码或查看实时数据,请如实说明,不要仅凭文件名猜测。
以下每个智能体都将遵循相同的流程:你通过 `/agents` 斜杠命令描述角色,Claude 生成实际文件,你审核后提交至代码仓库。若你希望跳过 `/agents` 流程,可直接将生成的文件粘贴至 `.claude/agents/<name>.md`,效果完全一致。
### 智能体 2:Story-Writer(故事撰写者)
将粗略的功能想法转化为包含验收标准、边界情况及范围外事项的用户故事。这是在编写任何代码前发现潜在问题的智能体。
创建一个名为 story-writer 的项目级子智能体。
职责:接收用户提出的粗略功能想法,结合 codebase-researcher 的探索结果,生成清晰的用户故事。
输入:
- 用户提供的粗略功能描述
- codebase-researcher 智能体的探索结果
- 已知的产品或业务规则(如有)
输出:
- 一条用户故事,格式为:“作为 <角色>,我希望 <行为>,以便 <结果>。”
- 可被测试直接验证的验收标准,覆盖正常路径、明显失败路径及简报中的规则。
- 值得思考的边界情况列表。
- 明确排除在范围外的事项列表。
工具访问权限:仅只读。 推荐模型:sonnet。 推荐颜色:紫色。
行为规则:
- 使用通俗语言,避免术语。
- 不自行编造产品规则;若存在不明确之处,请列为开放问题而非猜测。
- 整体内容控制在一页以内。
Claude 回复:
> 我已在 `.claude/agents/story-writer.md` 创建了该智能体,其内容如下。请重启会话以加载它。可通过 `@story-writer` 加上功能想法(最好附上 codebase-researcher 的结果)来调用它。
name: story-writer description: 将粗略功能想法与代码库探索结果转化为清晰的用户故事,包含验收标准、边界情况及范围外事项。仅只读。在 codebase-researcher 完成探索后、编写技术简报前使用。 tools: Read model: sonnet color: purple
你是一个项目的用户故事撰写者。你的职责是将粗略功能想法转化为清晰、可测试的用户故事,供后续流程构建使用。
调用时,你将收到:
- 用户提供的粗略功能描述
- codebase-researcher 智能体的探索结果
- 可选:已知的产品或业务规则
每次请按以下顺序生成内容:
- 用户故事
一句话格式:“作为 <角色>,我希望 <行为>,以便 <结果>。”
- 验收标准
可被测试直接验证的陈述。覆盖正常路径、明显失败路径及简报中的规则。
- 值得思考的边界情况
边界条件、重试机制、多租户关注点、权限边界等常出问题的场景。
4. **范围外内容**
本故事明确不涵盖的内容,以便团队明确**不需要**构建的部分。
5. **开放问题**(仅当存在时)
来自输入中真正不明确的内容。切勿自行编造答案,始终应提出问题以求澄清。
行为准则:
- 使用通俗易懂的语言,避免产品或框架术语。
- 切勿编造业务规则;若规则缺失,请提出疑问。
- 整个故事应控制在一页以内。
- 不编写代码或技术设计;那是规格说明撰写者的职责。
Agent 3:规格说明撰写者(Spec-Writer)
将已批准的用户故事与探索结果转化为技术简报(technical brief),包括数据模型变更、后台流程、API 变更、前端变更、所需测试及风险点等。此代理为只读模式,不可编辑代码。
创建一个名为 spec-writer 的项目级子代理。
其职责:基于已批准的用户故事及代码库探索结果,生成一份技术简报,供后端构建者、前端构建者及测试验证者遵循。
输入:
- 已批准的用户故事
- 来自 codebase-researcher 的探索结果
- CLAUDE.md 及项目相关规则
输出(一份简短的 Markdown 文档):
- 数据模型变更
- 后台流程 / 业务流程
- API 变更(如有)
- 前端变更(如有)
- 所需测试(成功、失败、边界场景)
- 风险与开放问题
- 将变更的文件列表
工具访问权限:Read(读取)、Grep(搜索)、Glob(文件查找)
推荐模型:sonnet
推荐颜色:靛蓝色(indigo)
行为准则:
- 编写简报前务必阅读 CLAUDE.md。
- 优先复用现有基础设施;如需新增调度器、数据库或第三方依赖,须明确指出并说明理由。
- 显式强调多租户隔离(tenant isolation)与时区(timezone)相关问题。
- 永远不得编辑文件。Claude 回复:
我已在
.claude/agents/spec-writer.md创建该代理,内容如下。该代理为只读模式,并配置为在每次生成简报前读取CLAUDE.md,以确保简报与项目架构规范保持一致。
---
name: spec-writer
description: 将已批准的用户故事与探索结果转化为一份简明技术简报,供构建与验证代理遵循。只读模式,每次撰写前必读 CLAUDE.md。在用户故事获批后使用。
tools: Read, Grep, Glob
model: sonnet
color: indigo
---
你负责为本项目撰写技术简报。你的任务是将已批准的用户故事与代码库探索结果,转化为一份简明、可执行的简报,供下游代理无歧义地遵循。
撰写前请完成以下步骤:
1. 阅读 CLAUDE.md,了解项目技术栈、架构规范及“禁止事项”清单。
2. 阅读用户故事及探索结果。
3. 若关键内容缺失或模糊,请明确列出为开放问题;切勿猜测。
输出一份简短 Markdown 文档,按以下顺序组织各章节:
**数据模型变更**
- 哪些模型会变更?涉及哪些字段及类型?
- 是否涉及数据迁移?如有,请说明。
**后台流程 / 业务流程**
- 分步骤描述行为实现流程。
- 明确说明复用了哪些现有基础设施。
**API 变更**
- 新增或变更的接口路径、请求与响应格式。
- 认证与授权要求。
**前端变更**
- 新增或变更的组件、钩子(hooks)或页面。
- 其如何调用 API,以及如何处理加载与错误状态。
**所需测试**
- 成功场景。
- 失败场景。
- 边界场景(边界值、重试、去重等)。
- 用户故事级别的验收测试。
**风险与开放问题**
- 多租户隔离相关风险,请显式说明。
- 时区相关风险,请显式说明。
- 其他需在编码前由团队决策的问题。
**将变更的文件**
- 按后端 / 前端 / 测试分组,以项目符号列出文件路径。
行为准则:
- 优先复用现有基础设施;任何新增调度器、数据库或第三方依赖,须明确指出并附理由。
- 多租户隔离与时区处理问题必须始终被考虑,即使仅需声明“本功能不涉及租户边界”或“本功能与时区无关”。
- 永远不得编辑文件。
- 尽量将简报控制在一页以内。Agent 4:后端构建者(Backend-Builder)
这是构建类代理中的第一个,负责实现功能的后端部分:API 路由、服务层、数据库访问、后台任务及所写代码的单元测试。它不处理前端文件。
重要提示:在代理定义中声明“仅编辑后端文件”仅为指导性建议,而非硬性安全边界。代理通常会遵守,但最强保障机制来自 Claude Code 的权限控制、拦截特定路径编辑的钩子(hooks),以及 CI 中对 PR 超出声明范围即报错的检查。建议用提示词(prompt)进行引导,用钩子与 CI 进行强制执行。
创建一个名为 backend-builder 的项目级子代理。
其职责:根据技术简报实现功能的后端部分,包括 API 路由、服务层、数据库访问、后台任务,以及所写代码的单元测试。
输入:
- 已批准的技术简报
- 来自 codebase-researcher 的探索结果
- CLAUDE.md 及项目相关规则
- build-with-tests 技能(项目级技能)
输出:
- 实现简报要求的后端代码
- 覆盖新行为的单元测试
- 简要总结:变更文件列表、复用模式、建议新增至 CLAUDE.md 的规则
工具访问权限:Read(读取)、Edit(编辑)、Write(写入)、Bash(执行命令)
限制范围:仅限后端目录(services、API routes、workers、migrations、服务端辅助函数及其测试)
推荐模型:sonnet
推荐颜色:绿色(green)行为规则:
- 使用
build-with-tests技能来遵循项目约定。 - 在编辑任何内容前,先阅读
CLAUDE.md和技术简报。 - 仅编辑前端文件。不要触碰服务、API 路由、后台任务或数据库迁移。
- 严格使用后端构建者(backend builder)提供的 API,不得自行发明接口或响应结构。
- 匹配现有组件模式:包括样式、可访问性、加载与错误状态处理。
- 未经明确指示,不得添加新依赖。
- 最终运行类型检查、代码规范检查及测试套件,并报告通过/失败情况及任何意外失败。
- 若发现某项有助于项目的规则未包含在
CLAUDE.md中,请将其作为建议补充项提出。
Claude 回复:
> 我已在 `.claude/agents/frontend-builder.md` 创建了该子代理,其内容如下。该代理拥有对前端目录的完整编辑与 Bash 访问权限,并严格使用后端构建者所生成的 API 合约,不会自行发明接口。
name: frontend-builder description: 实现功能的前端部分:组件、页面、钩子、客户端状态及组件测试。阅读 CLAUDE.md、技术简报、后端构建者的总结,并匹配现有组件模式。使用 build-with-tests 技能。仅限前端目录。 tools: Read, Edit, Write, Bash model: sonnet color: blue
你作为本项目前端实现的执行者。 你的任务是根据已批准的技术简报,实现该功能的前端部分, 并使用后端构建者已实现的 API。
在开始编辑前,请完成以下步骤:
- 阅读
CLAUDE.md,了解项目规则与技术栈。 - 阅读技术简报,确保工作范围不超出其定义。
- 阅读后端构建者的总结,明确已实现的接口及其返回数据结构。
- 加载
build-with-tests技能以遵循项目约定。 - 查看代码库中 2–3 个相似的组件或页面,匹配其现有模式。
实现规则:
- 仅编辑前端文件:组件(components)、页面(pages)、自定义钩子(hooks)、客户端辅助函数(client-side helpers)及其测试。
- 永远不要编辑服务(services)、API 路由(API routes)、工作器(workers)或迁移文件(migrations)。这些属于后端开发者的职责。
- 严格按照后端开发者提供的 API 规范进行调用。若 API 数据结构与 UI 需求不匹配,请将该问题作为反馈提出,而非绕过问题进行临时修复。
- 遵循现有组件模式:样式(styling)、可访问性(accessibility)、加载状态(loading states)及错误处理(error handling)应与项目其余部分保持一致。
- 不对非相关代码进行重构。
- 未经明确指示,不得添加新依赖项。
- 编写生产代码时,同步编写组件或单元测试。
完成编辑后:
- 运行项目类型检查(typecheck)、代码规范检查(lint)及测试命令(test)(参见
CLAUDE.md)。 - 确认所有测试均已通过。
- 返回简要总结:
- 新增/修改的文件(仅限前端)
- 复用的模式与组件
- 任何建议补充至
CLAUDE.md规则中的事项
若无法在不违反上述任一规则的前提下完成任务,请立即停止并报告冲突。
### Agent 6:测试验证器(Test-Verifier)
在功能端到端构建完成后,测试验证器负责编写验收测试(acceptance tests),直接验证用户故事(user story)的实现。单元测试与被测代码同处一处(由构建代理编写),而验收测试则由本代理负责,用于证明该功能确实满足用户故事中所述的行为要求。
创建一个项目级子代理,命名为 test-verifier。
其职责:在用户提供已批准的用户故事、技术方案(technical brief)及已完成端到端构建的功能基础上,编写验收测试,验证用户故事的实现,并确认每一项验收标准(acceptance criterion)均已满足。
输入:
- 已批准的用户故事(含验收标准)
- 已批准的技术方案
- 后端构建代理与前端构建代理的总结报告
- build-with-tests 技能(项目级技能)
输出:
- 一个验收测试文件(或对现有测试文件的扩展),覆盖用户故事中的全部验收标准
- 一份简短报告(仅当存在未覆盖或不可测试的标准时):说明哪些标准已覆盖、哪些未覆盖
工具权限:Read(读取)、Edit(编辑)、Write(写入,仅限测试文件)、Bash(执行命令) 推荐模型:sonnet 推荐颜色:黄色
行为规则:
- 编写前先阅读用户故事与技术方案。
- 遵循 build-with-tests 技能中定义的约定。
- 覆盖用户故事中列出的所有验收标准及边缘场景。
- 仅修改测试目录内的文件,不得修改后端或前端其他代码。
- 编写完成后,运行一次新增测试。报告测试通过/失败情况,以及任何未能清晰覆盖的验收标准。
Claude 回复:
> 我已在 `.claude/agents/test-verifier.md` 创建该代理,其作用域限定于测试文件。该代理使用 build-with-tests 技能,并在后端构建代理与前端构建代理完成工作后运行,因此具备可测试的完整功能。
name: test-verifier description: 在构建代理完成工作后,依据用户故事编写验收测试,验证功能是否满足全部验收标准。使用 build-with-tests 技能。在 backend-builder 与 frontend-builder 之后运行。 tools: Read, Edit, Write, Bash model: sonnet color: yellow
您是本项目的验收测试撰写者,职责是通过测试验证端到端构建完成的功能是否满足用户故事中的全部验收标准。
编写前准备:
- 阅读已批准的用户故事,明确全部验收标准;
- 阅读已批准的技术方案,了解功能内部实现逻辑;
- 阅读后端与前端构建代理的总结报告,掌握已实现的接口、组件及行为;
- 加载 build-with-tests 技能,了解测试约定;
- 查阅项目中 2–3 个现有验收测试,匹配其风格。
编写规则:
- 覆盖用户故事中的全部验收标准;
- 覆盖用户故事中列出的边缘场景;
- 使用项目测试数据构建器(test data builders),而非内联(inline)初始化;
- 遵循项目现有验收测试的目录结构;
- 仅编辑测试文件,不得修改任何业务代码。
编写后:
- 运行新增测试;
- 若测试失败,说明功能未满足用户故事要求。请明确报告失败的标准及原因,不得修改代码(应由构建代理在下一轮中修复);
- 若某标准无法被清晰覆盖(例如技术方案未提供可观测方式),请予以说明,不得自行设计变通方案;
- 返回简要总结:已覆盖标准、失败标准、需进一步澄清的标准。
### Agent 7:实现验证器(Implementation-Validator)
将当前实现状态与已批准的用户故事及技术方案进行比对,报告其中的缺失项。该代理**从不修复问题**,其职责是发现构建代理与测试验证器遗漏的所有问题。
创建一个项目级子代理,命名为 implementation-validator。
其职责:将当前实现与已批准的用户故事及技术方案进行比对,并报告缺失项。不执行任何修复操作。
输入:
- 已批准的用户故事
- 已批准的技术方案
- 当前实现状态(磁盘上的文件)
- 测试验证器的报告
输出(按严重性分组):
- 关键(critical):合并前必须修复
- 重要(important):合并前应修复
- 次要(minor):建议修复
- 后续建议(recommended next agent)
始终检查:
- 是否遗漏验收标准
- 是否缺少失败路径(failure paths)的测试
- 安全问题(如认证检查缺失、租户隔离不足、原始错误信息暴露、日志中含密钥等)
- 是否修改了超出约定范围的文件
- 与
CLAUDE.md及现有代码相比,是否存在项目模式不一致 - 应复用但重复实现的逻辑
- 技术方案中提及的时区或多租户需求是否被实现遗漏
工具权限:Read(读取)、Grep(搜索)、Glob(文件匹配) 推荐模型:sonnet(需谨慎推理) 推荐颜色:红色
行为规则:
- 永远不要编辑文件。
- 永远不要运行破坏性命令。
- 对每项发现,必须注明文件路径和行号。
- 若某项发现属于主观意见而非真实风险,
请明确标注为“(主观意见)”。
Claude 回复:
我已在
.claude/agents/implementation-validator.md创建该代理。请重启 Claude Code 会话以加载它。随后,当链式流程生成待审查的实现代码后,你可通过@implementation-validator调用它。
---
name: implementation-validator
description: 严格审查者,将当前实现与已批准的用户故事和技术简报进行比对,并按严重程度分组报告缺失或错误之处。绝不编辑文件。应在构建代理和验证代理完成之后、提交 PR 之前调用。
tools: Read, Grep, Glob
model: sonnet
color: red
---
你作为本项目的实现审查者,唯一职责是将磁盘上的代码与已批准的用户故事和技术简报进行比对,报告其中缺失或错误的部分。你无需修复任何问题。
预期输入内容如下:
- 已批准的用户故事。
- 已批准的技术简报。
- 当前实现状态(磁盘上的文件)。
- 测试验证器的报告。
每次审查必须检查以下内容:
- 用户故事中尚未实现的验收标准。
- 技术简报中未被测试覆盖的失败路径。
- 安全问题:缺失身份验证检查、租户隔离缺陷、原始错误信息暴露、日志中包含密钥、对敏感端点缺少速率限制等。
- 超出既定范围的文件变更。
- 与 CLAUDE.md 中记录或现有代码库中体现的项目模式不一致之处。
- 应复用现有辅助函数却重复实现的逻辑。
- 技术简报中提及但实现中遗漏的时区或多租户相关考虑。
每次输出格式如下:
**严重(必须在合并前修复)**
- <一项发现,含文件路径和行号>
- ...
**重要(建议在合并前修复)**
- <发现>
- ...
**次要(可选优化)**
- <发现,若属主观意见请标注“(主观意见)”>
- ...
**推荐后续代理**
- <例如:“backend-builder 修复 X 中的租户隔离问题,随后由 test-verifier 补充对应验收测试”>
行为规则:
- 永远不要编辑文件。
- 永远不要运行破坏性命令。
- 每项发现必须注明文件路径和行号。
- 对主观意见类发现务必明确标注,以便审查者安全忽略。
- 若未发现严重或重要问题,请如实说明,切勿为显得严谨而虚构问题。以下七类仅为示例,并非标准固定集合
七个代理已足以交付真实功能。这并非上限。该模式的核心在于:你的团队应根据自身需求构建所需的代理,复用本节前文所述的“代理结构模板”。想象空间无限,大胆构建吧。
根据团队当前开发中遇到的瓶颈,你接下来可考虑添加的代理示例如下:
- accessibility-reviewer:读取新增 UI 代码,依据项目标准检查缺失标签、对比度问题、键盘操作陷阱等无障碍问题。
- security-reviewer:在实现审查者之前运行,检查身份验证缺失、租户隔离缺陷、不安全的反序列化操作及依赖项风险。
- migration-writer:将技术简报中的数据库结构变更转换为 Prisma(或你所用 ORM)迁移脚本,并遵循项目的命名规范与回滚策略。
- design-system-reviewer:在新组件上线前,检查其是否符合项目的视觉设计令牌(design tokens)、间距规范及现有组件库。
- docs-updater:读取最终代码差异,自动更新 README、功能文档或运维说明。
- release-note-writer:阅读近期合并记录,按团队风格撰写面向用户的变更摘要。
- payments-integration:深入掌握 Stripe Webhook 机制,使任何工程师在开发涉及计费的功能时,无需依赖支付专家介入即可安全交付。
每个代理均遵循统一结构:明确职责、受限工具集、清晰的输入/输出契约、行为规则。使用结构模板,将指令交付 Claude(通过 /agents 命令),审查生成文件并提交。随着代码库演进,工厂也将同步扩展——持续添加那些你反复手动执行的任务,移除那些不再带来价值的代理。
若觉得七个太多,可从更少开始
若在一个周末内搭建七个代理让你感到压力过大,无需强求。该模式的最小可用版本仅需三个代理:
codebase-researcher → build-with-tests skill → implementation-validator研究者负责映射代码结构;build-with-tests 技能确保构建代理不偏离轨道;审查者则补全你遗漏的问题。先用这三件套跑几个功能,观察瓶颈所在,再针对性添加能避免该瓶颈的下一个代理。大多数团队在初期并不需要全部七个代理。
你已内置的子代理
在构建上述七个代理前,请先了解并善用 Claude Code 内置的几个子代理(若适用):
- Explore:仅读取操作,专为代码库搜索与理解优化,轻量、快速。你可直接调用,或在需要更严格输出格式时,将其封装为自定义的
codebase-researcher。
- Plan:在计划模式下收集上下文,于任何文件变更前提出实现方案。
- 通用型代理:适用于需同时探索与修改的任务。
当内置代理满足需求时,请优先选用;仅在你需要更严格的输入/输出契约,或需强制执行特定行为规则时,才构建自定义代理。
七个代理已足以支撑一个真实运行的开发工厂。而令它们协同工作的第八个关键组件,将在下一节介绍——编排器(Orchestrator)。
在“氛围编码”(vibe-coding)工作流中,答案是“由人类输入提示”。这种方式可行,但会让人成为流程的编排者——你必须在脑海中记住整个链路:先调用研究员,再暂停以供审阅,最后调用验证器……一旦漏掉其中一步,整个流程就会中断。
而工厂的核心理念恰恰是:流程能自动运行。人类只需在需要判断的关键环节参与(例如批准故事、批准设计brief、批准PR),而代理之间的流转则完全自动化。
这就是编排器(orchestrator)的作用。
编排器是什么
编排器是工厂中的另一组件,其唯一职责是:按正确顺序将任务委派给其他代理,传递正确的输入,恰当地暂停以等待人类审批,并在某个代理报告问题时进行恢复。
在 Claude Code 中有几种方式构建它,我将为你展示两种:
- 作为技能(Skill)或斜杠命令(Slash Command)
这是入门版本:可以是 .claude/skills/feature-factory/SKILL.md 文件(当其描述与用户请求匹配时自动触发),或 .claude/commands/feature-factory.md Markdown 文件(当你输入 /feature-factory 时运行)。两者内容相同,只是触发方式不同。简单直观,无需新增概念,易于阅读和编辑。
- 作为子代理(Subagent)
这是进阶升级版:它在独立的上下文窗口中运行,可利用 Claude Code 的子代理调用机制委派给其余七个代理。更简洁、更强大,但会引入一个新概念。
建议先构建技能/命令版本,使用一周后再升级为代理版本——前提是,你已充分理解整个流程,从而能实现更强的自动化。
流程本身
以下是编排器所执行的完整流程:

流程中有三个关键的人类审批点:
- 故事完成后:这是正确的问题吗?验收标准是否合理?
- brief 完成后:设计方案是否安全?在编码前是否有潜在风险?
- 验证完成后:该 PR 是否已准备好上线?
其余所有步骤均由编排器自动在各代理间流转任务。
版本 1:将编排器作为技能(Skill)
在 .claude/skills/feature-factory/SKILL.md 创建一个技能,并让 Claude 帮你生成它:
Create a Claude Code skill at .claude/skills/feature-factory/SKILL.md that orchestrates a feature build using seven existing subagents: codebase-researcher, story-writer, spec-writer, backend-builder, frontend-builder, test-verifier, implementation-validator.
The skill should:
- Trigger when the user asks to build, ship, or implement a
feature with phrases like "build a feature", "ship a
feature", "feature factory", "run the full chain".
- Run the chain in the order described below.
- Pause for human approval after the story and after the brief.
At each approval point, handle three outcomes: approved,
changes requested, or rejected.
- Run backend-builder first, then frontend-builder, then
test-verifier.
- Invoke implementation-validator at the end and report
critical, important, and minor findings.
- If the validator reports critical gaps, loop back to the
appropriate builder (backend or frontend), then re-run
test-verifier and the validator.
Order:
1. codebase-researcher: map the area of code involved.
2. story-writer: produce a user story.
3. ASK HUMAN: approve the story.
- Approved: continue.
- Changes requested: re-invoke story-writer with the human's
feedback. Repeat this step until approved or rejected.
- Rejected: stop the chain. Summarise what was explored so
the human can decide what to do next.
4. spec-writer: produce a technical brief.
5. ASK HUMAN: approve the brief.
- Approved: continue.
- Changes requested: re-invoke spec-writer with the human's
feedback. Repeat this step until approved or rejected.
- Rejected: stop the chain. Keep the approved story so the
human can resume later with a different technical
approach.
6. backend-builder: implement backend + unit tests.
7. frontend-builder: implement frontend + component tests.
8. test-verifier: write acceptance tests against the story.
9. implementation-validator: report findings.
10. If critical findings: route back to backend-builder or
frontend-builder, then re-run test-verifier and the
validator.
11. ASK HUMAN: final review before opening PR.
Show me the skill file before saving it.Claude 将生成类似如下内容:
---
name: feature-factory
description: Use this skill when the user asks to build, ship,
or implement a feature end to end. Runs the full chain of
seven subagents with human approval points after the story
and the brief, runs the build agents in order (backend,
frontend, test-verifier), then validates. Triggers on:
"build a feature", "ship a feature", "run the factory",
"feature factory".
---
Process:
1. Invoke the codebase-researcher subagent. Pass the feature
idea and the relevant area of code. Wait for findings.
2. Invoke the story-writer subagent. Pass the feature idea
and the researcher's findings. Wait for the user story.
3. Show the story to the user. Ask: "Does this match what
you want? Reply 'approved' to continue, describe what
to change, or reply 'reject' to stop the chain."
- If approved, continue.
- If changes requested, invoke story-writer again with
the user's feedback. Repeat this step until approved
or rejected.
- If rejected, stop the chain. Summarise what was
explored so the user can decide what to do next.
4. Invoke the spec-writer subagent. Pass the approved story
and the researcher's findings. Wait for the technical brief.- 将简报展示给用户,并询问:“设计上是否存在任何隐患?
回复 ‘approved’(已批准)以继续,描述需要修改的内容, 或回复 ‘reject’(拒绝)以终止流程。”
- 若批准,则继续下一步;
- 若要求修改,则再次调用 spec-writer,并附上用户的反馈。重复此步骤,直至用户批准或拒绝;
- 若被拒绝,则终止流程。保留已批准的故事内容,以便用户后续可换用其他技术方案继续。
- 调用 backend-builder 子代理。传递简报及研究员的调研结果。等待后端实现及其摘要。
- 调用 frontend-builder 子代理。传递简报、研究员的调研结果以及后端构建器的摘要(使其了解 API 合约)。等待前端实现及其摘要。
- 调用 test-verifier 子代理。传递已批准的故事、简报以及两位构建器的摘要。等待验收测试及验证报告。
- 调用 implementation-validator 子代理。传递已批准的故事、已批准的简报、测试验证报告以及当前实现代码。等待验证结果。
- 若验证器报告了严重问题,则将问题分派至对应的构建代理(backend-builder 或 frontend-builder),并附上来自 test-verifier 的相关测试用例。随后重新运行 test-verifier 和 validator。
- 向用户展示验证器的发现,并询问:“是否准备好创建 PR?”
规则:
- 永远不要跳过人类审批环节;
- 永远不要在 backend-builder 完成前调用 frontend-builder;
- 永远不要在两位构建器均完成前调用 test-verifier;
- 永远不要在流程尚未产出任何实现且 verifier 尚未运行前调用 validator;
- 各代理均在其独立的子代理上下文中运行,仅传递该代理所需输入;
- 若任一代理报告无法完成任务,则应停止流程,并向用户说明原因。
以上即为完整的编排器(orchestrator)。它是一个单独的 Markdown 文件,会调用另外七个 Markdown 文件。这些文件共同构成一个“工厂”。你或许会想:如果我只需要创建后端接口而无需前端,或反之,该如何处理?这完全取决于你的实际需求,按需定制即可。上述内容仅为示例,具体构建内容需由你自行决定。
### 运行流程:一个紧凑的端到端示例
你在 Claude Code 中输入:
/feature-factory
我想为逾期超过7天未支付的发票添加自动提醒邮件功能。
接下来按步骤发生的事情如下:
**步骤1**:编排器将任务委派给 `codebase-researcher`。研究员在其独立上下文中运行,读取发票、支付及邮件相关文件后返回:
> 发票创建逻辑位于 `services/invoices/create.ts`;状态存储于 Invoice 模型中;事务性邮件通过 `services/email/send.ts` 调用 Resend 模板发送;BullMQ 工作器位于 `workers/` 目录下,已用于处理定时任务;目前尚无提醒逻辑;管理后台位于 `app/(admin)/invoices/`;可能需修改的文件包括:Invoice 模型、新增提醒服务、邮件模板注册表、新增用于手动触发提醒的管理页面。
**步骤2**:编排器将任务委派给 `story-writer`,传递功能需求及调研结果。返回内容如下:
> _作为账户管理员,我希望逾期发票能自动发送提醒邮件,以便客户能被及时提醒,无需人工跟进。_
>
>
> 验收标准:
>
>
> 1. 发票逾期超过7天时,自动发送提醒邮件;
> 2. 已支付发票不发送提醒;
> 3. 同一时间段内不重复发送提醒;
> 4. 邮件发送失败不应标记为已发送;
> 5. 管理员可查看上次提醒发送时间;
> 6. 管理员可对特定发票手动触发提醒。
>
>
>
> 边界情况:发票恰好逾期7天、重试机制、多租户隔离、时区处理。不在范围内的功能:短信提醒、客户侧偏好设置。
**步骤3**:编排器暂停,提供三个选项:批准、请求修改或拒绝。你阅读故事后确认其符合预期,因此选择批准。
**步骤4**:编排器将任务委派给 `spec-writer`,传递已批准的故事及研究员的调研结果。返回简报如下:数据模型变更(新增 `lastReminderSentAt` 字段)、BullMQ 流程、用于手动触发的管理端点、管理后台展示上次发送时间的卡片、所需测试项、潜在风险(多租户、时区)。
**步骤5**:你阅读简报后发现其中提到“我们将把已处理的发票 ID 存储在内存中”,这是一处隐患。你回复:
修改去重逻辑:不要使用内存状态。 请改用 lastReminderSentAt 字段。
编排器再次调用 `spec-writer`,简报更新后你批准了修订版。
**步骤6**:编排器将任务委派给 `backend-builder`,传递简报及研究员的调研结果。构建器完成以下工作:为 Invoice 模型添加 `lastReminderSentAt` 字段;编写新的提醒服务;将其接入现有 BullMQ 工作器;添加用于手动触发的管理端点;为各部分编写单元测试;运行类型检查、代码规范检查及测试套件,全部通过。返回摘要如下:
> 后端实现已完成。
>
>
> 新增文件:
>
>
> * `services/reminders/send-overdue.ts`
>
> * `app/api/admin/invoices/[id]/remind/route.ts`
>
> * `workers/reminders.worker.ts`
>
>
>
> 修改文件:
>
>
> * `prisma/schema.prisma`(新增 `lastReminderSentAt` 字段)
>
>
> 复用内容:`prisma`、`sendEmail`、`daysAgo`、现有 `invoice-reminder` 邮件模板、现有 BullMQ `redisConnection`。多租户隔离通过手动触发端点中已有的 `requireSameTenant` 辅助函数强制执行。
>
>
> 新增单元测试:7 项,全部通过。建议 `CLAUDE.md` 规则:“提醒类字段统一采用 `last<Action>SentAt` 命名模式。”
**步骤 7**:编排器将任务委托给 `frontend-builder`,传递需求简报、研究员的调研结果以及后端构建器的摘要。前端构建器从摘要中读取 API 合约,为管理员发票表格添加“最后提醒发送时间”列,为每行添加“发送提醒”按钮(该按钮向手动触发端点发起 POST 请求),处理加载与错误状态,并编写组件测试。随后运行类型检查、代码规范检查及测试套件,全部通过。返回摘要如下:
> 前端实现已完成。
>
> 新增文件:
>
> * `app/(admin)/invoices/_components/ReminderColumn.tsx`
> * `app/(admin)/invoices/_components/SendReminderButton.tsx`
>
> 修改文件:
>
> * `app/(admin)/invoices/page.tsx`(添加了列与按钮)
>
> 复用内容:现有管理员 `DataTable` 组件、用于 API 调用的 `useMutation` 钩子、用于成功/错误状态提示的 `Toast` 组件。API 调用方式严格遵循后端摘要中的描述。
>
> 新增组件测试:5 个,全部通过。
**步骤 8**:编排器将任务委托给 `test-verifier`,传递已批准的故事、需求简报及两位构建器的摘要。验证器编写一个验收测试文件,覆盖全部六项验收标准及边缘情况。运行新测试后报告如下:
> 验收测试编写完成:8 个(每项验收标准 1 个,外加 2 个边缘情况)。
>
> 7 个通过,1 个失败:“跨租户手动触发被拒绝”返回 200 而非 403。看起来管理员端点在发送提醒前未校验租户归属。建议由验证器确认。
**步骤 9**:编排器将任务委托给 `implementation-validator`。验证器返回:
> **严重问题**:手动触发端点未校验管理员是否属于发票所属租户。公司 A 的管理员可为公司 B 的发票触发提醒。(`app/api/admin/invoices/[id]/remind/route.ts` 第 14 行)`requireSameTenant` 辅助函数已被导入,但从未被调用。
>
> **重要问题**:无测试覆盖 `lastReminderSentAt` 恰好为 7 天前的情形。请明确规则是 `>` 还是 `>=`。
>
> **次要问题**:新增的 `ReminderColumn` 可复用现有的 `RelativeTime` 组件,而非自行实现格式化逻辑。
**步骤 10**:检测到严重问题后,编排器回退流程,将验证器的发现及验证器报告的失败测试一并交由 `backend-builder` 处理。后端构建器修复问题,在手动触发端点中调用 `requireSameTenant`,并重新运行单元测试。随后编排器再次运行 `test-verifier`,全部 8 个验收测试通过。最后再次运行 `implementation-validator`,结果干净无误。
**步骤 11**:编排器暂停,等待您的最终审核,并询问是否需要为您创建 PR。
这是一个可运行的工厂:一条提示启动整个流程,7 个代理各司其职,编排器负责调度流程并在三个关键节点暂停,等待您的人工决策。
### 版本 2:将编排器作为子代理(高级用法)
在长期使用技能版编排器后,您可能希望让编排器在独立的上下文窗口中运行。技能版编排器会继承您主会话的上下文,这对短小功能尚可接受,但对较长功能而言,主会话上下文会因流程中间状态的累积而迅速膨胀。
将编排器提升为子代理,可实现上下文隔离。输入 `/agents`,使用以下描述创建:
创建一个名为 feature-orchestrator 的项目级子代理。
职责:接收用户提出的功能构想,执行完整的七代理流程(codebase-researcher、story-writer、spec-writer、backend-builder、frontend-builder、test-verifier、implementation-validator),并在故事与简报阶段暂停以等待人工批准;随后按顺序运行构建代理(后端 → 前端 → 验证器),再执行验证,若验证器发现严重缺陷,则回退至对应构建代理重新处理。严格遵循 feature-factory 技能定义的步骤顺序,包括各人工审批点的 approve(批准)、changes-requested(需修改)、rejected(驳回)路径。
输入:
- 用户提出的粗略功能构想
输出:
- 工作目录中完成的实现代码
- 最终摘要:包含所构建内容、新增测试及用户在最终审核时选择忽略的验证器发现项
工具访问权限:Task(用于调用其他子代理)、Read、Bash 推荐模型:sonnet(需进行推理以完成路由) 推荐颜色:gray
行为规则:
- 以 feature-factory 技能为标准步骤顺序
- 始终通过子代理调用方式调用其他代理,而非内联其工作
- 在技能定义的人工审批点始终暂停,并严格按 approve、changes requested、rejected 三种路径处理
- 若任一代理失败,明确报告失败代理名称并终止流程,不得静默重试
- 永远不直接编辑代码,必须通过对应构建代理执行
其行为与技能版几乎一致,唯一区别在于编排器现在运行于独立上下文中。您通过 `@feature-orchestrator` 加功能构想来启动它,其上下文在整个流程中持续保留,而您的主会话保持整洁。
任选一版本,用若干真实功能进行测试。该工厂将根据您的代码库特性,暴露出需要调优之处。
### 为何有效?
每一步都消除了不同维度的模糊性:故事消除业务层面的模糊性,简报消除技术层面的模糊性,后端构建器消除 API 层面的模糊性,前端构建器消除 UI 层面的模糊性,测试验证器确保用户故事实际成立,验证器则捕获他人遗漏的问题。当流程抵达验证器阶段时,该功能已被前述所有环节严格约束。此时验证器只需比对简报要求与实际代码之间的差异,即可完成校验。
编排器将“你记得要运行的工作流”转变为“一个能自动运行的工作流,而你只在关键节点参与其中”。
这标志着从“凭感觉编码”转向“工厂式思维”,也是本文中最重要的思维转变。
### 扩展工作流链
七个智能体与三个人工审批节点只是起点,而非上限。一旦基础工作流链稳定运行,你就可以在需要更高严谨性的环节添加更多智能体:例如,在验证器之前加入安全审查智能体;在新代码路径中运行性能审计智能体,标记出慢查询;由文档撰写智能体根据代码变更自动更新 README;或由迁移审查智能体在合并前对 Prisma 变更进行合理性检查。模式始终如一:使用智能体模板定义其能力,限制其工具权限,将其接入编排器的步骤顺序,并决定是否需要人工复核其输出结果。
此外,若团队对某些环节足够信任,也可将部分人工审批节点替换为智能体。例如,故事审批(story approval)难以完全自动化,因为业务意图本质上是人类的判断;而简要审批(brief approval)在低风险功能中,有时可由第二个规范审查智能体替代;但最终的 PR 审批应始终保留人工环节。
一个“工厂”应像真实代码库一样自然演进:从小处起步,逐步添加团队反复手动执行的任务;移除不再带来回报的环节。
### 并行执行读操作,串行执行写操作
最后一条设计原则,能显著减少诸多麻烦。
仅执行读取操作的智能体(如 `Read`、`Grep`、`Glob`)可并行运行——它们不修改磁盘上的文件,因此多个智能体同时运行不会产生冲突。并行执行读操作是本体系中最简单高效的加速方式之一。例如,假设你维护四个服务,每次季度评审前需刷新各服务的文档。你可以并行启动四个 `codebase-researcher` 子智能体,每个负责一个服务:各自独立读取代码库、总结变更内容并返回结果;随后四个 `docs-updater` 智能体分别读取对应结果,同步并行更新各服务的 README。由于每个文档更新智能体操作的是不同仓库,不会发生文件冲突。如此一来,四次并行读取 + 四次并行写入,原本耗时漫长的任务便能迅速完成。
而执行写入操作的智能体(如 `backend-builder`、`frontend-builder`、`test-verifier`)必须串行运行——它们会修改文件。若两个智能体同时操作同一文件,会导致部分写入、编辑丢失、测试失败及混乱的 Git 状态。更糟的是,此类错误往往静默发生,直到你发现 diff 异常才察觉问题,而追溯哪个智能体写了什么内容又成了新的调试任务。
只要编排器配置得当,它会自动帮你规避此类问题:在构建阶段,`backend-builder` 必须先完成,`frontend-builder` 才能开始;`frontend-builder` 完成后,`test-verifier` 才能启动;而在构建阶段之外,读取类任务则可自由并行。
经验法则:仅拥有 `Read`、`Grep` 或 `Glob` 权限的智能体可安全并行运行;而拥有 `Edit`、`Write` 或 `Bash` 权限的智能体必须独占其执行通道。
### 预期中的故障模式
每个团队在运行此类工作流链的前两周,都会遇到相似的几类问题。它们并不会摧毁整个“工厂”,但值得警惕,并附上快速解决方案:
* **编排器跳过人工审批步骤**:在技能或智能体定义中显式添加审批步骤(例如:`ASK HUMAN: approve the story`)。
* **智能体静默省略部分工作内容**:在其输出格式中加入“已覆盖 / 已跳过”的检查清单。
* **验证器遗漏了人工审查者后续发现的问题**:向验证器的行为规则中新增一条规则。随着功能迭代,验证器会越来越精准。
* **会话在链执行中途超出上下文长度**:保持 `CLAUDE.md` 精简,并为每个主要功能开启新的主会话。
* **工作流运行顺利,但规范误解了业务规则**:这恰恰说明为何“故事审批”必须是强制的人工检查点。
* **前端构建器生成了后端构建器未实现的接口**:强化前端构建器“必须严格依据后端摘要”的规则,并将不匹配项作为反馈而非补丁暴露出来。
一个优秀的“工厂”应让错误更容易被发现,而非更难被察觉。
## 8. 交付层:PR、代码审查与新的软件开发生命周期(SDLC)
截至目前,本文聚焦于“键盘层面”的细节。现在,让我们拉远视角。
当 AI 承担了大量编码、测试与文档工作后,软件变更的生产成本显著下降。但这并不意味着软件变得“免费”——只是瓶颈发生了转移。过去耗时的部分是敲代码、拼接逻辑和检索信息;如今真正的瓶颈在于:选择正确的功能方向、定义恰当的约束条件、验证行为正确性,以及决定哪些内容应上线交付。
这将深刻影响团队组织方式、代码审查流程以及交付流水线的设计。

*图 6:当编排器接管编码工作后,SDLC 的结构随之重塑。交接环节大幅减少,而审查与决策仍由人类主导。*
### 单个工程师现在可独立完成完整垂直功能
当工作流链承担了繁重任务后,SDLC 的形态也随之改变。
过去,一个功能需依次经过多个专家的处理:前端工程师等待后端工程师提供新 API 接口;后端工程师等待前端工程师完成 UI;一个新功能可能需辗转三到四人之手才能上线,而其中大部分时间都卡在他人待审队列中,工作处于停滞状态。
现在,同一位工程师启动 `/feature-factory`,整个流程端到端运行(包括后端、前端、验收测试与验证),最终产出一个完整的垂直功能切片,并以单个 PR 的形式提交。整条路径上仅需一人操作,零次交接。第 11 节将再次回到这一主题,并探讨这对团队乃至整个行业意味着什么。就目前而言,关键在于工作单元已发生变化:功能以完整形态从流水线中产出,而非零散拼凑。
### 堆叠功能,而非堆叠单个功能的内部切片
一旦交接环节被消除,下一个问题便是:“当我上一个 PR 正在等待评审时,我该做什么?”答案是:开始第二个功能;接着是第三个。
适配这一模式的是 **堆叠式 PR(stacked PRs)**,但堆叠的单位是“每个功能对应一个 PR”,而非“每个功能切片对应一个 PR”。每个 PR 都是由一次流水线运行生成的完整垂直切片。
实际操作中,其流程如下:你完成功能 A 后,从 `feature-a` 分支向 `main` 提交 PR A。在 A 等待评审期间,你并不停下脚步,而是基于 `feature-a`(而非 `main`)创建 `feature-b` 分支,再次触发 `/feature-factory` 启动下一个功能,并向 `feature-a` 提交 PR B。当 A 和 B 同时处于评审阶段时,你再基于 `feature-b` 创建 `feature-c` 分支,启动第三个功能。
顺序至关重要:A 必须首先合并;随后 B 重新基于 `main` 进行 rebase 并合并;最后 C 同样基于 `main` 重新 rebase 并合并。Graphite、Sapling 或 Git 自带的 `git rebase --onto` 等工具可在上游 PR 合并时自动处理 rebase 操作,通常你无需手动干预。
为保障该流程的安全性,需遵守两条规则:
第一,**尊重依赖链**。若 C 依赖于 B,则不要试图在 B 之前合并 C。虽然分支图谱本身已强制执行此依赖关系,但强调这一点仍很有必要——尤其当早期 PR 的评审耗时过长时,跳过等待的诱惑确实存在。
第二,**避免将单个功能拆分至多个 PR 中**。一个功能应仅对应一个 PR。如果你发现自己打算把数据库迁移放在 PR 1、后端逻辑放在 PR 2、UI 放在 PR 3,这通常意味着流水线一次运行产出的内容过多。此时应回退并按用户故事级别重新拆分(参见第 7 节),改为运行两个更小的流水线。每个流水线依然产出一个完整功能,每个功能仍以单个 PR 的形式交付。
工厂设计的核心目标,正是让一名工程师无需等待他人即可独立完成一个功能。而堆叠式 PR 则是实现跨多个功能持续交付、且不被自身评审队列阻塞的关键手段。
这正是软件行业正在奔赴的方向:更小的团队、更少的交接环节、每位工程师都能端到端交付完整功能。率先实现这一目标的团队,并非拥有最先进 AI 工具的团队,而是那些围绕自身已有 AI 工具构建出最简洁高效工厂的团队。
### 添加 PR 评审代理
采用 AI 的团队,需要一套适用于人类与 AI 评审员的统一 PR 评审流程。实现该一致性的最有效工具,是一份简明、明确的检查清单(checklist),所有 PR 均依据此清单进行评审。缺少它,评审将变得主观;有了它,每次评审都会覆盖相同的关键点。
我在 [《如何突破 AI PR 评审瓶颈》](https://www.freecodecamp.org/news/how-to-unblock-ai-pr-review-bottleneck-handbook/) 一文中已详细探讨了 AI 辅助 PR 评审的相关内容,包括我实际使用的完整检查清单、行之有效的规则,以及那些看似有用实则收效甚微的规则。若你尚未阅读,建议优先完成该文。而你刚刚构建的工厂,正是该工作流的上游部分;PR 评审则属于其下游环节。
针对本工厂,将检查清单嵌入另一个代理(agent)是最简洁的方式。通过 `/agents` 斜杠命令,像第 6 节中创建那七个代理一样,创建一个名为 `pr-reviewer` 的项目级子代理:
创建一个名为 pr-reviewer 的项目级子代理。
职责:依据本项目的评审检查清单对 PR 进行评审,并按严重程度分组报告发现的问题。 该代理不修改文件,也不合并 PR。
输入:
- 待评审的 PR 或 diff 内容
- CLAUDE.md 与任何项目级规则
输出(按严重程度分组):
- critical(合并前必须修复)
- important(合并前应修复)
- minor(可选优化)
始终检查以下方面:
- 范围:目标明确单一,无无关重构,无无关文件。
- 测试:单元测试覆盖核心行为,包含失败场景,原有测试仍通过。
- 安全与租户隔离:身份验证检查到位,租户隔离未被破坏,日志或错误响应中无敏感信息。
- 架构:业务逻辑不嵌入 UI 或 API 路由处理器,遵循 CLAUDE.md 中既定模式,无未经论证的新依赖引入。
- 文档:用户可见变更已更新 README 或功能文档;技术债务已在 PR 描述中说明。
工具访问权限:Read(读取)、Grep(搜索)、Glob(文件查找)、Bash(仅限 git 命令)。 推荐模型:sonnet(需细致推理)。 推荐颜色:orange(橙色)。
行为规则:
- 永不修改文件。
- 永不合并或关闭 PR。
- 每项发现均需注明文件路径与行号。
- 对主观性意见应明确标注,以便评审者安全忽略。
Claude 将生成该文件,你审阅后提交即可,此时你的项目便拥有了一个统一的评审代理——人类与 AI 均可通过 `@pr-reviewer review this PR` 命令调用它。你甚至可将其接入 CI 流水线,让每位开发者在人类评审介入前先自行处理反馈,从而显著降低评审负担。
这一模式之所以重要,在于该代理成为唯一权威依据:人类在合并前会参考其结果;第 7 节中的编排器可在打开 PR 前将其作为最后一步调用;CI 可在每次推送时自动运行它。检查清单集中于一处维护与更新。当团队识别出新的失败模式时,只需将其加入代理的行为规则中,后续评审将自动纳入该检查项。
### 云评审员是函数,而非同事
AI 正逐渐融入 CI 流水线:PR 审核机器人、安全扫描器、发布说明生成器、问题分拣器。这些功能确实非常实用,但措辞至关重要。
如果你说“Claude 批准了这个 PR”,那你已经犯了一个小错误。基于云的 AI 并非团队成员,不是开发者,也不对决策负责。正确的说法应是:“Claude 运行了针对项目审查清单的审查流程,并汇报了发现的问题;最终由人类判断该 PR 可以安全合并。”责任始终在人类身上。
这种严谨表述背后有其实际原因:云上审查者擅长执行其提示词中明确要求检查的内容——例如缺失测试、命名不一致、重复辅助函数等。但它们会忽略清单之外的问题。如果你的审查清单没有明确指示审查者检查发票下载接口中的租户隔离逻辑,那么 AI 审查者可能仍会放过一个漏洞:A 公司用户竟能下载 B 公司的发票。因此,项目专属的审查清单远比通用 AI 审查者更有价值。
### 人类擅长之处
AI 审查 ≠ AI 批准。AI 可以帮助发现潜在问题、总结复杂变更、将代码与清单比对、建议测试用例,但关键决策仍需人类把控:是否解决了正确的问题?是否做出了可接受的权衡?是否应立即上线?是否应通过功能开关(feature flag)逐步发布?是否需要先收集更多用户数据?
这些判断力仍是人类的核心工作。最优秀的 AI 辅助团队,并非试图移除人类,而是将人类安排在最能发挥其判断力的位置上。
## 9. 构建你的首个 Claude 驱动软件工厂
理论部分已结束。以下是为你在自身项目中搭建该工厂的检查清单,每一步都对应解释其原理的章节。
| # | 步骤 | 对应章节 |
| --- | --- | --- |
| 1 | 从官方文档安装 Claude Code | [https://code.claude.com/docs/en/desktop](https://code.claude.com/docs/en/desktop) |
| 2 | 创建目录结构(`.claude/agents`、`.claude/skills/feature-factory`、`.claude/skills/build-with-tests`、`.claude/hooks`、`CLAUDE.md`) | 第 5 节 |
| 3 | 编写 `CLAUDE.md`(100–300 行,包含项目事实与规则) | 第 5 节 |
| 4 | 通过 `/agents` 创建七个子代理 | 第 6 节 |
| 5 | 创建 `feature-factory` 编排器技能 | 第 7 节 |
| 6 | 创建 `build-with-tests` 技能 | 第 5 节 |
| 7 | 添加 pre-commit 钩子并赋予其可执行权限 | 第 5 节 |
| 8 | 创建 `pr-reviewer` 代理 | 第 8 节 |
| 9 | 让一个真实功能走完整条流水线 | 见下文 |
总耗时:首版搭建约需 2–3 小时。
### 首次运行真实功能时
选择一个小功能,例如一个管理工具或带微型 UI 图块的新 API 接口。打开 Claude Code:
/feature-factory
我想实现:<用一句话描述该功能>
流水线将自动运行。批准故事描述、批准简要方案、阅读验证报告、打开 PR。
首次运行不会完美无缺。过程中请注意以下事项:
* 研究员输出内容过于浅显?强化其描述指令。
* 故事撰写者遗漏了某个边缘情况?为其描述添加一条规则。
* 规格说明遗漏了某个风险?将该规则添加至 `CLAUDE.md`。
* 后端构建者误触了前端文件?收紧其作用域规则。
* 前端构建者自行发明了一个接口?收紧其 API 调用规则。
* 验证器遗漏了某项人类后续发现的问题?为其规则添加对应检查项。
* 钩子本应更早发现问题?将其补充进钩子逻辑中。
运行三到四个功能后,整个工厂将趋于自适应优化。你将减少监督时间,更多地投入到“接下来该构建什么”的战略决策中。
## 第三部分:总结
## 10. 本文未覆盖的内容(及后续学习方向)
AI 辅助开发是一个庞大而多元的领域,单篇文章无法面面俱到。以下是我刻意略过、但建议你后续深入探索的主题,按优先级排序:
### 跨会话的集中式记忆管理
当你开始并行运行多个会话(每个功能/分支/同事各一个)时,你自然会希望 AI 能在这些会话间共享记忆。Claude 的项目级记忆、基于 MCP 的共享知识库、以及团队级向量存储均属此范畴。这是发展迅速的领域,值得专门阅读。
### 并行运行多个代理
Claude Code 的子代理可在单个会话内并行运行;借助封装 Claude Code 的工具(如 Nimbalyst),多个工作树中的会话也可并行运行。一旦工厂稳定运行,引入并行机制将带来显著提速。但需注意合并冲突与 CI 成本。
### 基于云端的无人值守代理
在服务器上运行 Claude Code 或类似代理,由事件触发(Webhook、定时任务、新 GitHub Issue 等),可实现工厂“无人值守”运行。截至 2026 年,该方案在 PR 审核与问题分拣等窄域任务中已较为成熟;但若用于无人值守的功能开发,仍需强验证门控才能确保可靠。
### 为业务定制 MCP 服务器
MCP(Model Context Protocol,模型上下文协议)可将内部系统(如计费数据、客户支持工单、设计系统)暴露为 Claude 可调用的工具。一个设计良好的 MCP 服务器,能让 Claude 从编程助手升级为“了解你业务的初级同事”。待基础工厂搭建完毕后,值得深入研究。
### 大规模场景下的成本优化
当团队每日高频使用该工作流后,Token 消耗将成为实际预算项。最简单的优化方式是:将检查与审查任务分配给 Haiku,推理类任务分配给 Sonnet,仅将最重的规划任务留给 Opus。其次可考虑缓存、批量处理与上下文精简。
### 向产品、设计与支持领域延伸
本文面向开发者,但同样的模式同样适用于产品负责人、设计师和支持工程师。他们也能从技能(skills)、子代理(subagents)和钩子(hooks)中获益。当这些角色也构建自己领域的“工厂”模块,并且开发团队能够调用这些模块时,团队层面的收益才会最大化。
如果你想深入了解,官方的 Claude Code 文档是了解子代理、技能、钩子和 MCP 的最新权威资料。Anthropic 还发布了一门免费的“子代理入门”课程,与本文内容高度互补。
## 11. 结语
本文开篇提出一个核心理念:**用 AI 自动化结构化工作,而非混乱无序的工作**。中间的十一节内容,正是这一理念在实践中的具体体现。
因此,在自动化任何任务之前,请先定义系统:在 `CLAUDE.md` 中写下规则;生成团队反复输入的技能脚本;创建专注执行特定任务的代理;连接编排器;加入检查门禁;并在需要人类判断的地方保留人工参与,而非在仅需打字的地方强加人工干预。
软件工厂并非一夜之间自动构建产品的巨型自治机器,而是你代码仓库中的一组小型文件,将一名开发者 + 一名 AI 转化为一支可控的团队。代理是核心资产,而工厂则是你组织这些资产的方式。
### 新型工作模式
第 8 节曾提出一个观点:**一名工程师即可交付完整垂直功能模块**。请暂时离开键盘,从团队视角重新审视这一变化的意义,而不仅限于单个开发者。
软件开发始终依赖于“交接”:产品负责人撰写用户故事,技术负责人将其转化为规格说明,后端工程师实现 API,前端工程师构建 UI,支付专家负责集成。当功能最终上线时,往往已有四至五人参与其中,每人需等待前一人完成。每一次交接,都意味着工作停滞等待。

*图 7:旧有模式。每条箭头代表一次交接,每一次交接都是一次等待。*
而工厂模式则消解了大部分交接环节——因为专业能力不再局限于个体,而是以代理的形式被共享。
一位从未编写过 Stripe webhook 的前端工程师,依然可以交付需要该功能的模块,因为团队的支付专家已提前构建并优化了 `payments-integration` 代理;一位从未使用 Recharts 构建仪表盘的后端工程师,也能交付相关功能,因为前端负责人已构建了 `dashboard-component-builder` 代理;QA 工程师的 `regression-suite-writer` 代理、DevOps 工程师的 `ci-pipeline-updater` 代理、安全工程师的 `auth-checker` 代理,均对全团队开放,并可作为链式流程的一部分自动运行。
其结果是:**一名工程师即可独立完成完整垂直功能模块的开发与交付**。

*图 8:新模式。每位工程师均可调用同一份代理库。专家依然存在,但其专业能力已沉淀于他们维护的代理中,而非受限于其可投入交接的时间。*
观察变化所在:专家依然存在——前端负责人仍负责设计系统,支付专家仍负责 Stripe 集成,DevOps 工程师仍负责 CI 流水线。他们依然贡献着团队中无人可替代的品味与判断力。所不同的是,**他们的专业能力现在具备了可移植性**,可封装进代理中,供团队任意成员调用。
这一转变带来三重复利效应:
**迭代周期缩短**:过去需等待三位工程师依次参与的功能,如今一名工程师即可端到端完成;PR 可在同一天打开,而非跨周等待。
**专家专注高价值工作**:此前,资深支付工程师每周需花费大量时间协助他人解决 Stripe 集成问题;如今,他们可将时间投入优化 `payments-integration` 代理本身——杠杆效应显著提升:代理的每一次改进,都将惠及团队后续所有相关功能。
**团队扩展方式转变**:过去,新增第十名工程师意味着新增第十组交接环节;如今,新增第十名工程师意味着新增一名全栈贡献者,他可立即复用前九人构建的所有代理。入职效率提升,协调成本下降。
这正是本文所指向的更深层变革:**软件工厂不仅是提升单人效率的技巧,更是工程团队向“全栈贡献者社群”演进的路径——他们将专业能力编码共享,而非像接力赛般,每一次交接都耗费一天时间**。
率先实现这一转变的团队,未必是人员最多或 AI 预算最高的团队,而是那些**代理库充分反映团队集体品味、持续更新、精简高效、高度协同的团队**。代理是核心资产,工厂则是你组织这些资产的方式。
### 补充说明
随着工具持续演进,该工作流形态也将不断演进;每个团队都有其独特的工作方式。本文所呈现的是:**在真实生产环境中经受住交付压力考验的最小可行版本**。它并非最终答案,而是一个可依据你团队、技术栈与偏好进行适配的起点。
若你在团队中实践了类似方案,欢迎分享哪些做法奏效、哪些未达预期——**优化工作流最快的方式,就是学习他人的失败经验**。祝你构建自己的工厂顺利!
### 资源链接
**Claude Code**
* Claude Code 概览:[code.claude.com/docs/en/overview](https://code.claude.com/docs/en/overview)
* 子代理文档:[code.claude.com/docs/en/sub-agents](https://code.claude.com/docs/en/sub-agents)
* 技能文档:[docs.anthropic.com/en/docs/claude-code/slash-commands](https://docs.anthropic.com/en/docs/claude-code/slash-commands)
* 记忆功能与 `CLAUDE.md`:[docs.anthropic.com/en/docs/claude-code/memory](https://docs.anthropic.com/en/docs/claude-code/memory)
* Hook 参考文档:[code.claude.com/docs/en/hooks](https://code.claude.com/docs/en/hooks)
* Hook 使用指南:[code.claude.com/docs/en/hooks-guide](https://code.claude.com/docs/en/hooks-guide)
**其他 AI 集成开发环境(适用相同模式)**
* Cursor:[cursor.com](https://cursor.com/)
* Aider:[aider.chat](https://aider.chat/)
* Cline:[cline.bot](https://cline.bot/)
**本文提及的工具**
* MCP 文档:[modelcontextprotocol.io](https://modelcontextprotocol.io/)
* Context7(当前文档插件):[context7.com](https://context7.com/)
* Nimbalyst(用于并行运行多个 Claude Code 会话的可视化工作区):[nimbalyst.com](https://nimbalyst.com/)
* Graphite(堆叠式 Pull Request 管理):[graphite.dev](https://graphite.dev/)
* Sapling(堆叠式 Pull Request 管理):[sapling-scm.com](https://sapling-scm.com/)
* * *
* * *
免费学习编程。freeCodeCamp 的开源课程已帮助超过 40,000 人成功入职开发者岗位。[开始学习](https://www.freecodecamp.org/learn)