AI 与工具·

我学习到的一套 Claude Code 做需求的流程

主会话调度子会话,聊久了会变笨、丢上下文。我照组里前辈的做法整理了一套用 Claude Code 做需求的流程:工单是契约,状态写进文件,会话随时可换,拍板直接在子会话里做。

本篇目录21 节
11 月 6 日更新:合并和关工单改成检查过了自己做,回话第一行加了「你要做的」,提交只写明确路径。

今天我发现主会话变笨了

我用桌面版的编程助手干活。遇到大问题,我先开一个主会话,把事情拆成几张工单,再给每张工单开一个子会话并行做,正好claude桌面端更新了,操控父子se很方便。
这套是我十月底定下来的。我的打算是输入都放在主会话。子会话遇到需要我拍板的事,再把内容带回来。主会话先核对,能定的自己定,需要我决定的列出来。我答完,它再把决定送回给子会话。说白了,就是我在父会话里遥控所有子会话。
一开始很省心。我只守着一个窗口,不用在对话之间来回找。
用了一段时间,我发现主会话越来越不对劲。前面说好的事,它会忘。我问它某张工单到哪了,它要重新翻文件才答得上来。回答越来越长,重点却越来越散。聊得越久越明显,变成豆包了。
聊久了降智严重,还给我出各种离谱的方案,我看了都气笑了。

我先让 CC 自己找原因

它给的诊断很直接,问题不在模型,在我安排工作的方式。
子会话把回报全文送进主会话,主会话为了核对,又去读一遍子会话写的文件。同一件事的来龙去脉在主会话里越堆越多。这些内容都占着上下文。
对话要转两手。子会话到主会话,再到我,我答完又经过主会话回到子会话。每转一次,内容就可能被概括一次,细节就跟着变少。
而且最要命的是,哪张工单做到哪、卡住没有、在等谁拍板,都只在聊天记录里。等到上下文被压缩,问题就全冒出来了。我还不敢重开主会话,因为一重开,什么都接不上了哈哈。
CC 当时给了一个方案,用一份看板文件记状态,子会话只报一行。我觉得方向对,但心里也没底,我就让它先别急,去看看组里一位前辈是怎么做的。他同样一个人开很多会话干活,肯定有相关经验可以学习借鉴。学习最快的路线就是模仿。

先说这套流程是什么

这套流程是我照着组里一位前辈的做法和交流沟通整理的,核心就是别让上下文只活在聊天里。
主要记住这三件事。
第一,动手前先让 Claude 建一张工单。要做什么,做到什么程度才算完成,都写清楚。以后换谁接手,都按这张工单来。
第二,做到了哪一步,下一步干什么,为什么这么决定,都让它写进文件。聊天记录就当干活时的草稿,不能只靠聊天记事,这样太容易丢上下文了。
第三,会话可以随时换。会话就是我和 Claude 为了做任务展开的一段对话。聊久了,它变慢了,或者开始忘事,我就关掉,重新开一个。新会话读完文件,就能接着做。
下面我拿一个需求,把整套流程走一遍,方便理解。

一次性准备

我先把下面几条写进全局的 CLAUDE.md。CLAUDE.md 就是给 Claude Code 的工作规矩,全局这份会在每次开会话时读取。
claude.md:
1. 改代码之前,先建工单。描述分四段写:问题、范围、验收、结论。(核心是简短)标题写这次开发的名称,格式是「对象 + 动作」,判据和数字不进标题。 2. 每张没做完的工单,都留一份待办记忆。第一句写清下一步做什么、什么时候做、谁来做。工单做完,这份记忆就挪进归档。 3. 结论和决定要写进工单、待办记忆或仓库文档。只在聊天里说过,不算记下来了。 4. 一个需求用一个独立工作目录,配一个会话。这个独立目录用 git worktree 来建,也就是在同一个代码仓库里,给不同任务各留一份能单独干活的目录。 5. CI 和三道检查(换个模型做代码审查、安全审查、验收机器人回归,不适用的写明为什么)都在 PR 最后一版上过了,就自己合并。只有四种情况先停下来问我:改动风险高(计费、鉴权、删用户数据、迁移这类)、操作不可逆而我没授权过、审查里有别人设的审批闸门、要改这套工作规矩本身。 6. 验收逐条跑完、结论填好,就自己把工单改成完成。只有等第二天的数据或等别人配合,才停在待验收,并在工单上写明卡在什么、什么时候验、谁来验。 7. 往团队群里发消息之前,先把全文贴给我,我说「发」才发。一次同意只管那一条。 8. 每次回我话,第一行写「你要做的:一句话」。没我的事就写「无」,再说接下来会自动发生什么。
接着,我在每个代码仓库的 docs 目录里,按模块放好两份文档,再在仓库根目录放一份总目录。
  1. CURRENT.md 写这个模块现在是什么样。只有架构真的变了才改。
  1. HISTORY.md 记这个模块改过什么。每做完一个需求,就在后面追加一条,旧条目永远不改。
  1. DEVELOPMENT_LOG.md 放在仓库根目录。每个需求占一行,方便我找对应的记录。
这三份管的是代码现在什么样、怎么变成这样。光有这些还不够,AI 改某块代码之前,还得知道那块有什么规矩、踩过什么坑。这一部分我是照另一个大仓库的做法学的,它的文档分得更细。
  1. 根目录的 CLAUDE.md 只当目录。 仓库里每份专题文档,都在这里写一句什么时候该读它,比如改计费之前先读计费那份。这样 AI 不用把所有文档读一遍,碰到哪块再读哪块。
  1. 每个代码目录放一份 AGENTS.md。 把这块代码的规矩和踩过的坑贴在代码旁边,附上当时的工单号。AI 在哪个目录干活,就会读到哪个目录的规矩。
  1. 容易改错的文件配一条按路径自动加载的规则。 规则文件开头写明管哪些路径,一碰到这些文件,AI 就会被提醒先去读对应的 AGENTS.md。
  1. docs 下开一个 adr 目录,放架构决策记录,简称 ADR。 每份写一个重要决定:当时的背景、最后怎么定的、否掉了哪些方案和原因、带来什么后果。编号只往后加,每份标明状态,是提议中、已采纳,还是被哪份新的取代了。
  1. 每条规矩后面标明谁来拦。 有的由自动检查拦,有的由提交前的钩子拦,有的靠代码审查机器人,有的只是约定。看到一条规矩,就知道它是硬约束还是靠自觉。
两套合起来,每种问题都有固定的去处:
想知道什么
去看哪份
现在是什么样
模块的 CURRENT.md
怎么变成这样
HISTORY.md 和 DEVELOPMENT_LOG.md
为什么这么定,否掉了什么
ADR
改这里要守什么规矩,有什么坑
目录里的 AGENTS.md 和按路径的规则
什么时候该读哪份
根目录 CLAUDE.md
想要用的话直接把上面内容发给cc他会帮你把这些搞好的,or直接把文章发给他

例子:给搜索加一个按发布时间排序

假设我负责一个搜索服务,现在只能按相关度排序。用户想看最新发布的内容,我要加一个按发布时间排序的选项。

第一步:开一个新会话,只说一句需求

我开个新会话,告诉它:
给搜索加按发布时间排序。
Claude 先建工单,不急着写代码。标题只写这次做的是什么,格式是「对象 + 动作」,比如「搜索 按时间排序」,判据和数字不往标题里放。描述分四段。
  1. 问题:用户想看最新发布的内容,现在只能按相关度排。
  1. 范围:放一张小表,每行写一个改动,标出在哪个仓库、对应哪个 PR。PR 就是一份请求审查并合并代码改动的记录。这一列先空着,等 PR 开了再填。
  1. 验收:写三到五条能实际跑、能对上数字的检查。比如,传入按时间排序的参数时,第一页按发布时间从新到旧排。不传这个参数时,结果和原来一模一样。翻到第五页,结果仍然有序。
  1. 结论:先空着,收尾时填一行。
工单建好,它把链接给我。我扫一眼,有不对的直接说,没问题就不用回。

第二步:留一份待办记忆

这一步不用我开口。全局 CLAUDE.md 里写了每张没做完的工单都要有一份待办记忆,所以 Claude 建完工单,会自己在记忆目录里建一个小文件,用工单编号命名,写入下面内容
下一步,写提案,今天下午三点前
以后每推进一步,它就自己更新这句话。工单做完,它把这份文件挪进归档。我想知道这个需求接下来该干什么,看这份文件就行。新会话接手时,也是先读它。

第三步:动手前写提案

提案就是动手前写下来的方案,先把打算怎么做说清楚。这次要加一种新的排序方式,算架构上的改动,所以CC会先写提案。
Claude 在对应模块的 docs 目录下建一个带日期的文件,比如 2026-11-06-sort-by-time.md,把三件事写清楚。
  1. 解决什么问题,为什么现在做。
  1. 打算怎么做。数据从哪来,要经过哪些步骤,哪些是新加的,哪些能复用现有的。
  1. 失败了怎么办,怎么验证它真的生效了。
如果只是改个参数,或者修个小 bug,我就跳过这一步。

第四步:开发

Claude 开一个独立工作目录,在里面改代码、提交、开 PR。提交时只写明确的文件路径,不用 git add -A 一把全加,免得把无关文件带进去。
这些事情它自己盯着,我不用一直守着。
PR 开好后先别合,第五步要把文档补进同一个 PR。

第五步:文档补进同一个 PR,再合并

描述这次改动的文档,和代码放在同一个 PR 里,合并前就写好。CC 会先把下面三件事做完:
  1. 在对应模块的 HISTORY.md 里追加一条,写清背景、做了什么、结论,再附上提案和 PR 的链接。
  1. 在 DEVELOPMENT_LOG.md 里加一行。
  1. 看架构有没有真的变。变了才改 CURRENT.md。这次加了一种新的排序方式,所以要改。
如果这次踩了坑,还要多做一件事。比如发现发布时间相同的内容翻页时会重复出现,最后靠加一个固定的次序字段才解决。Claude 就把这个坑写进那个目录的 AGENTS.md,附上工单号,写清怎么避免。如果能用自动检查拦住,就顺手加一条检查,并在规矩后面标明由它来拦。下一个会话改这块代码时会先读到,不会再踩一次。
文档补完,在 PR 最后一版上过三道检查:换一个模型做代码审查、安全审查、让验收机器人跑一遍,不适用的写明为什么。中间又有新提交,就重做。验收机器人在团队群里触发,这条消息照样先贴给我,我说「发」才发。
三道检查和 CI 都过了,它自己合并。以前这里它会停下来问我「合吗?」,我说合它才合。现在照前辈的做法改了,只在四种情况停下来问,后面「我在哪几处要开口」里写了。
只有上线后才知道的事,比如发布的版本号、线上数字、全量还是回滚,才允许合并后再补一个 PR。
同时,Claude 在工单上发一条评论,写清合并了什么、关键数字是多少。
工单评论只在四个时候发:范围变了、PR 合并了、上线验证了、全量放开或回滚了。每条不超过十五行,只写结果,不写过程。另外,工单停在待验收时,也发一条说明卡在哪。

第六步:上线和收尾

上线后,Claude 按验收清单逐条检查。能自己触发的就自己触发,该打接口就打接口,该查数据、看日志就自己查。
验收跑完,它把结果填进工单的结论行,自己把工单改成完成。只有两种情况先停在待验收:要等第二天的数据,或者要等别人配合。停的时候它在工单上写一条评论,说清卡在什么、什么时候验、谁来验。
最后,它删掉独立工作目录,把待办记忆挪进归档。

中途换会话

假设做到第四步,这个会话已经聊了很久。它开始变慢,前面说过的事也记不清了。
我就关掉它,开一个新会话,告诉它:
接着做这张工单。
后面跟上工单编号就行。
新会话先读三样东西。
  1. 工单。看这次要做什么,做到什么样才算完成。
  1. 待办记忆。看下一步该做什么。
  1. 对应模块的 CURRENT.md、HISTORY.md、提案和相关的 ADR。看系统现在是什么样,之前为什么这么决定。
开始改代码时,它还会按根目录 CLAUDE.md 的指引和所在目录的 AGENTS.md,读到这块代码的规矩。
读完就能接着干,我不用再从头解释一遍。
以前我不敢关会话,因为做到哪了、为什么这么做,全在聊天记录里。一关就接不上。现在这些都写进文件,会话随时能换。
我给自己定的换会话时机是:每完成一张票就换。如果一张票很大,就先拆成子票,一张一张往上做,基本上要保证一个会话做完都不会触发对话压缩。

大需求:多一层看板

有些需求比较大,要拆成好几张工单,比如前端、后端、数据各一张。这时候,我会加一层看板。看板就是一张集中记录各张工单当前状态的表。
我先在一个主会话里说需求。它把拆分清单列给我看,每张工单写一个标题、一句话范围,再写清依赖关系。
我认可这个拆法后,它建好工单,每张工单开一个子会话。每个子会话都按前面的六步做到底。

以前是父管子,现在是我直接管子

这是这次改动里我觉得最关键的一点。
以前,我只跟主会话说话。子会话有事先报给主会话,主会话再转给我,我的决定也由主会话转回去。主会话就是个传话筒,所有决策项都从它那儿过一遍,它的上下文自然被撑爆。
现在反过来,我直接去子会话里干活。要拍板、要讨论、要改方向,都在那个子会话里当面说,它手上的上下文是一手的,不用别人转述。子会话回传给主会话的,只有很少上下文更新,比如「后端排序,PR 已合」「索引补字段,卡住了」。决策项的内容不往主会话送,留在子会话和它的文件里。
主会话退成一个很薄的调度员,只负责三件事:读看板、排优先级、叫醒停住的会话。它知道每张票走到哪了,但不替我做决定,也不替我传话。子会话的进展它不转述,也不替我列「该去哪个子会话拍什么」。
主会话还会自己再建一个看板目录,里面放三种文件。
  1. CURRENT.md,也就是看板。每张工单占一行,写状态、卡在哪、下一步。只有状态真的变了才改。CI 跑到哪了、日志、进度百分比,都不用写进来。
  1. 每张工单各有一个文件,相当于这张工单的 HISTORY。子会话只往后追加,第一句就是待办。
  1. 需要先出方案的工单,再加一个提案文件。要我拍板时,六项写全:问题、证据、不同选择的影响、建议和备选、要我做什么、确认的是哪个版本。这份文件我在子会话里看、在子会话里答,主会话只知道「这张票在等我」。
看板里的 CURRENT.md 大概长这样:
工单
状态
卡在哪
下一步
后端排序
PR 已开,CI 通过
无
三道检查过了自己合
前端下拉框
开发中
无
子会话继续写
索引补字段
卡住
线上索引要重建
等我去子会话定重建时间
子会话有进展时,只给主会话发一行:
后端排序,看板已更新,PR 已合。
汇报正文不用发进主会话,决策内容也不发。
我用一个后台小脚本还做了巡检。看板一变,就叫醒主会话。三十分钟没变化,也叫醒一次。
程序才能保证运行,文本约束不一定能。

我在哪几处要开口

整个流程里,Claude 只在下面这些时候停下来问我。
  1. 审查里有别人设的审批闸门。它不替别人批,也不绕过去。
  1. 要改这套工作规矩本身,也就是 CLAUDE.md 里的流程。
  1. 要往团队群里发消息。它先把全文贴给我,我说「发」才发,一次同意只管那一条。
  1. 关键事实确认不了,猜错了会返工。
  1. 风险高,或者排除不了重大风险,比如计费、鉴权、删用户数据、迁移。
  1. 要改范围、改行为、改验收标准。
  1. 需求、我的意见、已经做出来的东西,三者对不上。
  1. 要做不可逆的操作,比如删数据、迁移。
  1. 必要的验证做不了。
  1. 同一个问题修了几轮,还是没好。
其余事情,比如建工单、写评论、写提案、写代码、跑审查、盯 CI、合并、跑验收、把工单改成完成,它都自己做完,最后一次性告诉我结果。
它每次回我话,第一行都写「你要做的:……」。没我的事就写「无」,再说接下来会自动发生什么。第一行就标明了要不要我处理。

几个常见问题

小改动也要走全套吗?

不用。改个参数、修个小 bug,我会跳过提案,也不用改 CURRENT.md。
但工单、待办记忆、HISTORY 里的一条记录,还是要有。这些是三五分钟的事。

CURRENT.md 和 HISTORY.md 有什么区别?

CURRENT.md 写今天是什么样,可以覆盖更新,尽量保持短。
HISTORY.md 写怎么变成今天这样的,只追加,不改旧记录。
新会话默认只读 CURRENT.md。需要追溯原因时,再翻 HISTORY.md。

HISTORY.md 和 ADR 不是重复了吗?

不重复。HISTORY 记发生了什么,每个需求一条。ADR 只在有值得记的取舍时才写,重点是否掉的方案和原因。大部分需求只有 HISTORY,没有 ADR。

规矩写在 AGENTS.md 还是 CLAUDE.md?

只跟某一块代码有关的,写在那个目录的 AGENTS.md。整个仓库都要守的,写在根目录 CLAUDE.md。根目录那份尽量短,主要当目录用。

为什么不让主会话收子会话的完整汇报?

因为汇报全文会一直占着主会话的上下文。来回几轮,主会话里就堆满了旧进度。
我让看板只放现在的状态。以前做过什么、为什么这么做,都留在各张工单的文件里,需要时再点进去看。

评论加载中…