防 Agent 乱改全仓:提示写死允许/禁止路径,用 @文件收窄,就近 AGENTS/globs 约束,再用 git diff 验收。

要点
- Codex 启动时会组装指令链:全局
~/.codex/AGENTS.md(或 override)+从仓库根走到当前工作目录路径上的各层AGENTS.md/AGENTS.override.md;更靠近当前目录的内容排在后面、优先覆盖;合并体积默认约 32 KiB 封顶(Custom instructions with AGENTS.md,核验日 2026-10-29)。 - Codex 不会继续往当前目录以下的子树自动加载 AGENTS.md——工作目录选错,包级规则可能根本进不了提示(官方 discovery;社区 monorepo 实测作旁证)。
- Cursor:可用根/子目录
AGENTS.md,或.cursor/rules/*.mdc的globs把规则绑到路径;也可用 Always/Intelligent/Manual/@规则(Cursor Docs|Rules,核验日 2026-10-29)。 - 聊天侧:用 @文件/@文件夹(或先打开目标文件再开 Agent)把上下文钉在相关路径;规则正文里的
@模板文件是“需要时再读”,不会整文件内联进提示(Cursor Docs)。 - 可抄硬约束句式:
只修改:…;禁止修改/创建:…;需要读但不要改:…;完成后列变更文件清单。 - 证据强度:AGENTS 发现顺序与 32KiB、Cursor globs/嵌套 AGENTS 来自官方文档;“乱扫全仓”反例来自社区踩坑归纳(二手),非单一产品错误码。
正文
场景
你只想改 src/utils/date.ts 里一个时区 bug,Agent 却去“顺手”改了 lint 配置、重写了相邻模块的导出,再跑一遍全仓格式化。diff 刷屏,review 成本比手改还高。编码代理的价值在收窄作用域,不在展示它能摸到多少文件。
下文给一条可跟做下法:提示写死路径 → 上下文用 @/打开文件钉住 → 规则文件就近放置 → git 验收。覆盖 Codex(含文档所述 CLI/TUI)与 Cursor Agent;具体按钮文案以当前界面为准。
可跟做步骤/可抄工作流
证据强度:高(Codex AGENTS 官方+Cursor Rules 官方,核验日 2026-10-29);UI 入口名标待核。
- 开干前先选对工作目录(Codex)
官方:指令链从仓库根走到当前工作目录为止。在 monorepo 里要改 packages/api,先 cd packages/api 再启动,或使用文档中的 --cd 类方式(以当前 CLI 帮助为准),让该包的 AGENTS.md 进入合并结果。站在仓库根却指望深层包规则自动生效,容易落空。
- 首条提示写成“变更合同”(可直接复制)
目标:【一句话】
只允许修改这些路径:
- path/a.ts
- path/b.ts
禁止修改/创建:
- package.json、锁文件、CI 配置、无关包
可以只读、不要改:
- path/types.ts(查类型用)
完成定义:
1) 列出实际改动的文件;
2) 说明每个文件为什么必须改;
3) 跑【项目里已有的最小检查命令】;
4) 若发现范围外也要动才能过检查——先停下来问我,不要擅自扩大。
- 用 @ 与打开文件收窄“看见什么”
在 Cursor/同类 Agent 聊天里 @ 目标文件或文件夹,避免只丢一句“修一下登录”。Cursor 文档写明:规则里的 @文件 提示 Agent 需要时再读,内容默认不内联;必须始终在上下文的短约束,直接写进规则正文或首条提示。
- 把“别乱动”写进就近的规则文件
– Codex:仓库根写共享约定;包目录写窄规则;临时强覆盖用同级 AGENTS.override.md。控制根文件体积,避免占满 32KiB 把深层规则挤掉。
– Cursor:对散落路径用 .mdc+globs(如 packages/api/**/*.ts,alwaysApply: false);对整包习惯,用该包下 AGENTS.md 并在该作用域开聊。官方建议规则短、可执行,风格类重复问题交给 linter,不要把整本 style guide 贴进提示。
- 可抄 AGENTS 片段(放在你正在改的包下)
## 变更边界
- 默认只改用户在提示里点名的路径。
- 未经确认不要改:构建配置、共享类型大爆炸式重命名、其他 package。
- 需要额外文件才能修完时:先列出拟改路径并等待确认。
- 验收:git 是法官
git status/git diff --stat 对照“允许列表”。多出来的文件:回滚或拆成第二次、带新合同的对话。不要在同一条已经跑偏的线程里继续“再顺手修一下”。
真实用户诀窍/反例
- 诀窍:允许列表+禁止列表一起写。 只写“请小改”模型仍可能扩 scope;路径级禁止更硬。
- 诀窍:嵌套 AGENTS 用放置表达作用域。 官方与社区共识:规则属于哪个目录,就放在哪个目录,少写“如果在前端则……”长条件句。
- 诀窍:Cursor globs 规则在未命中文件时等于未加载。 需要“一进包就生效”,用该包
AGENTS.md或alwaysApply(团队策略另议)。 - 反例:根目录塞 20KB 百科再指望包级规则生效。 Codex 合并有字节上限,根文件过大可能截断后续层。
- 反例:空仓开 Agent 说“优化整个项目”。 无路径合同=默许全仓扫描与大范围写入。
- 反例:把格式化/全量 lint 当 Agent 完成定义。 官方 Cursor 建议:格式与 lint 交给 CI/本地工具;Agent 完成定义应绑在行为与测试上(与上篇规则踩坑一致)。
适用边界
- 本稿覆盖:用提示路径合同、AGENTS/Rules 就近作用域、@ 文件收窄、git 验收来降低乱改全仓概率。不保证某一 Agent 版本永不越权;沙箱/审批开关另见终端命令类选题。
- Codex 与 Cursor 的发现规则相近但不完全同一实现;Claude Code 默认读
CLAUDE.md而非AGENTS.md(第三方对照,移植时改文件名)。 - UI 中的 Exact 菜单名、云端 Agent 是否同等尊重本地 AGENTS:以当前产品界面与文档为准(待核)。
【来源与编译】
- Custom instructions with AGENTS.md|ChatGPT Learn/Codex|https://learn.chatgpt.com/docs/agent-configuration/agents-md|核验日 2026-10-29(发现顺序、override、32KiB、工作目录)
- Rules|Cursor Docs|https://cursor.com/docs/rules|核验日 2026-10-29(Project Rules、globs、AGENTS.md 嵌套、@ 引用不内联、最佳实践)
- Monorepos: scoping instructions to a subtree|dsplce.co|https://dsplce.co/agentic-engineering/core/monorepos|二手实测旁证(Codex 不加载 cwd 以下;Cursor globs 行为)
- 本文说明:中文编译“路径合同+就近规则+git 验收”;社区 monorepo 文仅作旁证;未把第三方博客的按钮坐标写成官方事实;UI 标待核。