山石 SHANSHI

项目规则:把重复纠正固化

项目规则文件是给 agent 看的项目 README。Codex 读 AGENTS.md,Claude Code 读 CLAUDE.md。它们都不是安全边界,而是长期上下文:越具体、越短、越贴近真实项目,越有用。

本章目标

  • 知道哪些内容适合写进规则文件,哪些不适合。
  • 会把重复提醒改成可执行、可验证的规则。
  • 知道如何在 Codex 和 Claude Code 之间保持单一事实源。

规则文件应该写什么

  • 项目结构:核心目录、内容位置、共享组件、生成入口。
  • 常用命令:dev、lint、test、build,以及什么时候跑哪个。
  • 工程约定:代码风格、组件边界、服务端/客户端限制、PR 要求。
  • 验证标准:不同类型改动的最低检查项。
  • 高频坑点:agent 或新人反复踩过、代码本身看不出来的项目事实。

好规则要能触发、能执行、能验证

“注意质量”“代码要优雅”不是好规则。好规则应该让 agent 知道什么时候触发、具体怎么做、做到什么程度算完成。

CASE

把空泛规则改成可执行规则

场景

你想让它修前端时别再漏移动端,但“注意响应式”太泛。

可以这样说

请把这条模糊规则改写成 AGENTS.md 中的可执行规则:修改前端布局时必须用浏览器检查 390px 和 1440px;如果涉及图片、代码块或 SVG,还要确认没有横向溢出。保持简洁,写明触发场景和验证方式。

验收点

  • 有触发场景。
  • 有具体动作。
  • 有验收方式。
  • 没有空泛形容词。

CASE

让它对模糊任务先问再做

场景

它经常拿到需求直接开干,遇到没完全想清的任务就做偏。

可以这样说

请在规则文件里补一条:开始任何非 trivial 任务前,先用 2-3 个问题确认范围和验收标准,得到回答后再动手;任务已经明确时可以跳过。说明触发场景,保持简洁。

验收点

  • 只在非 trivial 任务触发。
  • 要求确认范围和验收。
  • 表达简洁可执行。
  • 不改无关章节。

哪些不要写进去

  • 一次性的当前任务要求,放在 prompt 里。
  • 个人临时偏好,除非后续每次都要遵守。
  • 标准语言常识或代码里能直接看出来的事实。
  • 详细 API 文档,给链接或放到 Skill / docs 里。
  • 过长背景故事;文件越长,关键规则越容易被淹没。

保持单一事实源

如果仓库里同时有 AGENTS.md 和 CLAUDE.md,最大的风险是两份规则各自演化。长期规则应该维护一份主版本,另一份引用或同步,不要在两处写出不同版本。

  • Codex:以 AGENTS.md 作为项目级规则。
  • Claude Code:CLAUDE.md 可以导入 AGENTS.md,再补 Claude 专属内容。
  • 更新规则时:说明新增规则来自哪次复盘、触发场景是什么、如何验证。
  • 规则也要 review:冲突、过期、太长都会降低遵从度。

规则不是安全边界

规则文件是上下文,不是硬约束。它能提高遵守项目习惯的概率,但不能保证 agent 永远不碰某个路径、不运行某条命令、不泄露某段内容。绝不能发生的动作,要用权限、沙箱、deny 规则或 Hook 挡住。

  • 适合规则文件:构建命令、代码风格、项目结构、验收习惯、PR 约定。
  • 适合硬约束:禁止读取 secrets、禁止改生产迁移、禁止联网外发、阻止危险命令。
  • 规则反复失效:先检查是否太长、太泛、太隐晦,再考虑用 Hook 或权限强制。

照着做

请根据最近三次我纠正你的地方,整理出最值得写进规则文件的 3 条规则。每条都要说明触发场景、具体做法和验证方式;一次性偏好不要写进去。