做产品 PMaker
约束 CLAUDE.md ·整个项目一直生效 写一次,管几个月 规格 docs/specs/*.md ·一个模块内一直生效 写一次,管几周 提示 你打的那段字 ·只管这一次 说完就过去了 同一句话反复说三次,就该往上挪一层

三层的区别只有一个:生效范围有多大、存活多久。放错层,就要么反复重讲,要么到处失灵。

规格、提示、约束的分工

同一句话该写在哪,取决于它要管多久。临时的写在提示里,一个模块内通用的写进规格,整个项目通用的写进约束文件。

你会遇到的现象
  • 每次对话都要重复交代同样的规矩
  • 约束文件越写越长,最后它开始不遵守了
  • 改到第三轮,它推翻了第一轮定好的数据结构

三层各放什么

放在哪写什么典型内容
约束 CLAUDE.md 整个项目一直成立的规矩 组件必须实现四态、间距只用这六个值、权限一律后端校验
规格 docs/specs/模块名.md 某个模块的数据、状态、边界 评论支持两层楼中楼、删除是软删除、超 500 字折叠
提示 你打的那段字 这一次要做的具体事 把这个按钮挪到右上角、这里的间距改成 24
规格这一层是最容易被跳过的。跳过之后,模块内的决定只存在于对话历史里,而对话历史会随着长度变长逐渐失效。

三层之间有个顺序关系:约束是背景,规格是这个模块的设定,提示是当下的动作。生成代码时三层同时生效,冲突时以下层为准——但下层要覆盖上层,最好明确说出来,不要指望它自己判断。

什么时候往上挪

约束不是命令

有一点要清楚:约束文件不是硬性开关。它作为一段普通内容进入上下文,模型是按概率去遵守的,不是保证执行。这意味着两件事。

所以要精简
每一行都问一遍:删掉它会不会导致出错。不会就删。
控制在两百行以内。写得越长,每一条被遵守的概率越低。
所以要复查
关键约束不能只写在文件里,还要在当下这条指令里重申一次。
做完之后让它对照约束自检一遍,成本很低。
「删掉它会不会导致出错」这个筛子很好用。大部分人写的约束文件里,一半内容是在描述项目而不是在约束行为,那一半可以直接删。