长任务开工前,先核对五要素
仓库与分支、范围、待拍板的决定、底线、PR 粒度,以及没人写明时用哪些默认值。
「我去睡觉了,明天要看到网站上线哈。」
我发完这句,8 秒以后 Claude Code 回了一段话,第一句是:
好,你去睡吧,明早看结果。这次我按下面的默认值自己做完:
后面列了四条:仓库和分支用哪个,范围包括哪些页面,哪些操作算我授权过的,哪些决定留到明早给我拍板。
这段开场是我在规则文件里要求的。我的全局 CLAUDE.md(Claude Code 每次开工都会读的规则文件)里有一条,大意是:长任务开场先核对五要素,用户没写的按默认值走,并且在开工第一句话里声明用了哪些默认值。
为什么是开场,而不是收尾
人交代长任务的时候,说的通常就一句话。「明天要看到网站上线」,没说用哪个仓库,没说能不能合并 PR,没说除了网站本身别的设置能不能碰。这些空白 agent 总得填上,区别只在于它是悄悄填,还是摆出来填。
悄悄填,你要到第二天看结果才知道它是怎么理解的,理解错了,活就白干一晚上。摆出来填,人还没走远,看一眼觉得不对,说一句就改了。
那天的开场里有一条是这么写的:
授权:部署 Pages 正式环境和合并 PR 都是你给的授权。这次除了 pdd.bot 本身,其他域名和 Cloudflare 设置一律不动。
我其实只说了要看到网站上线,没说可以合并 PR。这一条是它对我那句话的理解,它把这层理解写了出来,后半句还顺手把边界划死了:只动这个站,别的不碰。
五要素各管什么
第一项是仓库与分支。规则写的是:没指明、当前仓库又对不上的时候,先问一句,不要猜着跑。
这条我吃过亏。我公司的主仓库经常有好几个 Claude 会话同时在用,9 月有一次,别的会话在我两条命令之间切了分支,我的 commit 落到了本地 main 上,直到 gh pr create 报「No commits between main and …」才发现。后来改成了每个任务开一个独立的 worktree(同一个仓库的另一份工作目录,分支互不影响)。开场把仓库和分支写出来,至少能让这种错位早一点暴露。
第二项是范围:只做点名的条目,顺手发现的范围外问题记下来汇报,不擅自扩做。长任务最怕的不是没做完,是做多了,你醒来要 review 的东西比交代的多一倍。
第三项是留给人拍板的决定。对外文案、计费定价、拦截或限制用户、删除数据,可以先按推荐方案做,但收尾汇报里必须单列。这一项展开讲比较长,我单独写了一篇:「待否决的决定」:agent 先做,人来拍板。
第四项是底线:没有明确授权,不合并 PR、不部署生产、不写生产库;授权过的,按授权范围走。
「按授权范围走」这半句,也是有来历的。9 月有一晚,我给了一个夜间任务一次性授权:审计、提 PR、合并、上测试环境一条龙。第二天白天一个小改动,agent 提完 PR 也顺手合了。我回它:「让你提 pr,没让你直接合并,这次就这样,下次注意」。一次授权管一次任务,不往后延,这一点不写死,agent 很容易把上一次的许可当成常态。
第五项是 PR 粒度:按风险拆,改模型行为、改计费、改数据结构的各自单独成 PR。那天的开场里写的是「新站只有这一个改动,就不拆了」。不拆也行,关键是它说了为什么不拆。
默认值比提问重要
五要素不是要 agent 开工前问你五个问题。你都要去睡觉了,问了也没人答。
真正起作用的是后半句:用户没写的按默认值走,并且第一句话就声明。默认值写在规则里,是我提前替自己做好的决定;开场那段声明,是它告诉我这次具体按哪些默认值来。第二天的收尾汇报,也就有了一把尺子,拿开场那几条对一下,就知道它有没有越界。
只有第一项例外:仓库和分支对不上的时候,要先问。在错的仓库里跑一晚上,比停下来等一晚上更糟。
可以直接抄的版本
贴进全局或项目的 CLAUDE.md(Codex 读 AGENTS.md):
## 长任务开场
长任务(用户离开、让你自主做完的那种)开场先核对五要素;
用户没写的按默认值走,并在开工第一句话里声明用了哪些默认值:
1. 仓库与分支:没指明且对不上时,先问一句,不要猜着跑
2. 范围:只做点名的条目;范围外的问题记下来汇报,不擅自扩做
3. 待拍板的决定:对外文案、计费、限制用户、删除数据,
先按推荐方案做,收尾汇报里单列「待否决的决定」
4. 底线:未获明确授权不合并 PR、不部署生产、不写生产库;
授权只管这一次任务,不往后延
5. PR 粒度:按风险拆,改模型行为、计费、数据结构的各自单独成 PR
第二天早上那份汇报,第一行是「早上好,pdd.bot 已经上线」,后面单列了 5 条待我否决的决定。前一晚那段开场里说过,会这么交。