我曾经把 Planning 和 Diagnosis 分别做成 Skill。继续使用后,我发现它们更像每次任务都应遵守的工作纪律,而不是需要单独安装、单独触发的专业能力。

Planning 约束复杂任务如何拆分和验收;Diagnosis 约束遇到故障时如何收集证据、验证假设和确认根因。它们都不依赖特定技术栈,也没有需要携带的脚本或参考资料。与其增加两个 Skill 让 Agent 反复判断是否触发,不如把必要规则压缩进全局 AGENTS.md

我现在把工作配置分成四层:

全局 AGENTS.md       = 稳定的个人工作偏好和安全边界
仓库 AGENTS.md       = 当前项目的结构、命令和交付规则
Skill                = 有独立流程、资料或验证方式的专业能力
docs/ 与 .codex/     = 长期文档与本地任务产物

这样做的目标不是让指令越来越多,而是让每条规则只出现一次,并放在真正拥有它的位置。

哪些规则值得全局保留

全局配置只保存跨仓库稳定成立的内容:

仓库目录、构建命令、业务结构和专项验证不适合放在全局文件里。它们变化更快,也只有进入对应仓库后才成立,应该由仓库自己的 AGENTS.md 管理。

Planning 和 Diagnosis 不需要变成大段流程

Planning 最重要的不是输出一篇计划文档,而是让复杂任务具备可执行边界。每个任务项至少需要回答:改什么、不改什么、依赖什么、如何验证、什么证据代表完成。简单任务则直接执行,不为了形式生成计划。

Diagnosis 也不是固定运行一套命令。它约束的是判断标准:先记录实际症状和预期行为,再建立尽可能小的复现;根据代码、日志和运行结果提出可证伪的假设;一次尽量只改变一个变量;证据不足时明确保留不确定性。只有根因被证据支持后,才进入永久修复和原始失败路径复测。

Codex 本身会规划,也会搜索代码,但默认能力不能替代我的验收标准。全局规则的作用不是教模型“怎么思考”,而是声明我接受什么样的工作过程和完成证据。

模型路由属于结构化配置

AGENTS.md 负责行为边界,不应该同时承担模型选择。模型、推理强度、Plan 模式和子代理默认值都属于 ~/.codex/config.toml;具体角色的模型与权限放在各自的 Agent 配置文件中。这样调整模型时,不会让运行配置和自然语言规则互相冲突。

我当前采用的路由是:

用途 模型与推理强度 选择理由
主 Agent Sol Medium 负责需求判断、协调、验收和最终交付
内置 Plan 模式 Sol High 用于会改变实施方向的复杂规划
默认子代理与 Worker Terra Medium 承担边界明确的日常实施
Explorer Terra Medium 负责较广的调用链和执行路径追踪,而不只是机械搜索
Reviewer Sol High 独立检查正确性、回归和验证缺口
Planner Sol Medium 处理会改变方向的复杂、架构或跨模块规划
Batch Worker Luna High 处理明确、重复、可独立验证的批量工作,并先通过同会话 canary
条件性 Luna Explorer / Worker Luna High 仅在对应角色通过同会话 canary 后处理专项任务

这套分工不是把模型简单排成高、中、低三个等级。模型能力与 reasoning effort 是两个维度,也没有可靠的跨模型等价式。我的实际配置让 Sol 承担主 Agent、规划和独立 Review,让 Terra 承担默认子代理、Worker 和 Explorer,让 Luna 只承担经过同会话 canary 的高强度批处理或条件性专项工作。具体配置仍应由代表性任务验证,而不是假设不同模型或推理强度可以互相等价。

运行默认值也保持保守:普通工具调用需要按请求审批,默认沙箱允许当前工作区内写入;Explorer、Planner 和 Reviewer 使用只读沙箱,Worker 和条件性批处理角色才允许写入。并行线程上限为 3,角色配置中的沙箱只是默认值,实际权限仍受当前会话边界约束。

当前使用的精简版本

下面是我现在使用的核心结构。机器路径和工具偏好带有个人环境特征,复制时应替换成自己的配置。

# 个人工作规范

## Scope And Precedence

- 当前对话中的明确要求优先;更近的 `AGENTS.md` / `AGENTS.override.md` 覆盖全局文件。
- 全局文件只保存跨仓库稳定偏好和安全边界。项目命令、架构、验证与交付约定放项目文档;模型、推理和沙箱等结构化设置放 `~/.codex/config.toml`

## Communication

- 普通问答直接、简洁,只保留必要事实、判断、结果、风险和下一步;长任务仅在状态实质变化时更新。
- 分析、决策、研究和 Review 不默认认同用户前提。检查会改变结论的问题,区分已验证事实、基于证据的推断和未验证项;不为反对而反对。
- Review 先列问题、影响和位置;无问题时说明验证缺口与剩余风险。

## Workspace And Changes

- 未指定目录时,使用约定的默认工作目录,并读取入口文档和生效的 `AGENTS.md`
- 涉及仓库工作时,先确认真实 cwd、Git 根、分支、status、生效指令和最小必要上下文;优先使用 `rg` 和点名文件。
- 修改只限当前任务,保护无关未提交内容,沿用现有结构、工具链和契约,不做顺手重构;需要授权时先完成不受阻塞的工作。

## Planning, Execution And Verification

- 简单线性任务直接完成;大型或模糊任务先解决会改变方向的决策,再以可端到端验证的最小切片推进。
- 只有独立可验收且收益明确时才委派。默认使用一个合适角色;仅在任务独立、无顺序依赖且文件不重叠时并行。
- 故障处理先记录实际与预期并建立最小失败复现;无法建立时说明证据缺口,不做永久修复。确认根因后再修改并复跑原始路径。
- 构建、静态检查和源码扫描只证明其覆盖范围,不替代运行时、浏览器、真机或生产验证。
- 需要任务产物且仓库无约定时,分别放在 Git ignored 的 `.codex/handoffs/``.codex/reviews/``.codex/artifacts/``.codex/tmp/`

## Git And External Actions

- 默认不直接修改 `main`,不创建 PR 或 push;使用仓库约定的任务分支。
- 提交前只暂存相关文件并检查 `git diff --cached`;保留无关改动,不执行未经明确授权的破坏性 Git 操作。
- 浏览器任务默认使用宿主内置浏览器。外部浏览器、发布、生产操作、消息、评论、授权及其他外部写入必须有明确要求。

本机配置和公开文章如何同步

完整个人习惯、真实路径、Provider、权限和受信项目仍保留在本机。~/.codex/AGENTS.md 和结构化配置负责实际生效;本机文档负责解释完整设计。Blog 只发布可公开、可复制的当前版本,不是运行配置的权威源。

我不会为每次本机调整都同步 Blog。只有公开原则、示例或解释发生实质变化时,才从本机来源选择允许公开的内容,删除或泛化机器信息,然后直接覆盖这篇中英文文章。公开前检查差异、敏感信息和站点构建结果,再决定是否提交和推送。

Blog 不保存额外的 workflow 历史版本目录。文章始终展示当前版本,历史由 Git 提交记录承担。同步方向保持单向:本机规则可以生成公开文章,公开文章不能反向覆盖本机配置。

现阶段也没有必要单独建立公开 workflow 仓库。只有公开配置开始需要独立下载、安装、版本兼容、Issue 或 Release 时,才值得把它当成独立产品维护。

继续增加偏好时如何处理

我不会因为出现一个新要求就新增章节。先判断它属于哪一类:

如果同一条规则开始出现例外、解释和多层引用,它通常已经不适合继续塞在全局配置里。全局文件应该短到能够快速读取,但不能为了短而删除授权、Git、未提交内容保护和证据标准。

对我来说,好的个人配置不是完整描述所有工作方式,而是把最容易反复遗漏、又会真实影响结果的边界固定下来。