F1|分层对照表:什么进 git,失败时谁说了算
先别把十个开关拧成一份 config.toml
前面 C–E 把说明书、记忆、技能、插件、MCP、hook、子代理、Goal、宠物各讲了一遍。收束时最容易做的错事,是再写一份「全能 AGENTS.md」,或把 --yolo 当总闸。
判断先说清楚:每一层只回答一个问题。 加载时机不同,进 git 的资格不同,失败时拍板的人也不同。表比叙事更不容易混。细节仍回原章;这里只对照。
ExecPolicy / 沙箱 / 审批是 B 的内核旋钮,不进这十行,但「失败时谁说了算」列会指回它们。
1. 十层一张表
| 层 | 加载时机 | 该放 | 不该放 | 进 git? | 失败 / 冲突时谁说了算 |
|---|---|---|---|---|---|
| config B5 | 启动折层:MDM → flags → 项目 → profile → user → enterprise → system | 模型、审批、沙箱默认、feature、MCP launcher | 密钥正文(用 keyring/env_key);仓库决定 API 打到哪(项目 denylist) | 项目 .codex/config.toml 可进 git,默认未信任不生效;CODEX_HOME/config.toml 本机 | overlay 赢;origins() 指出 key 来源;企业 requirements 可锁死 |
| AGENTS.md C1 | 未信任则跳过项目文件;否则 git root→cwd 拼接,每轮差量注入 | 测试命令、禁区、验证方式 | 长教程、密钥、「请不要 sudo」 | 应该(正本);AGENTS.override.md 本机 | 32KiB 截断;同目录 override > AGENTS.md > fallback;更近的目录后出现 |
| Skills D1 | 发现根常驻目录;正文选中才注入 | 某类任务的程序、scripts/references | 每轮都适用的仓库政策;硬拦截 | repo .codex/skills 可进 git;user/admin/system 本机 | $name 点名优先;skills.config / allow_implicit_invocation;未信任仍可能扫到项目 skill 根 |
| Plugins D2 | 用户 config 里 PLUGIN@MARKETPLACE enabled 才加载包装盒 | 要上架的「技能+MCP+hook+app」包 | 项目政策;把安装状态写进仓库当「克隆即安装」 | 包装盒源码可在市场/git;安装状态留用户 config | 整盒 enabled;盒内 MCP 可单独不 spawn |
| MCP D3 | initialize 时 stdio 立刻执行;HTTP 连地址 | 外部工具 RPC | 当 OS 沙箱;把 Codex 自己再当 mcp-server | 用户/受信任项目 config;OAuth 在 keyring | enabled / 白名单 / 超时 / 输出顶;Apps 还要 ChatGPT 后端 |
| Hooks D4 | 生命周期事件;仅同步 handler 能拦住 | 这次 payload 的机械检查、改 input | 风格、流程、前缀黑名单(那是 ExecPolicy) | 项目 hooks.json 可进 git,未信任不加载 | exit 2 或 JSON block;信任哈希变了就是 Modified |
| Subagents D5 | 显式 spawn_agent;默认不主动拆 | 独立只读探索、划清所有权的实现块 | 递归开树;让子代理读 SKILL.md | 角色 toml 可在 $CODEX_HOME/agents 或项目 .codex/agents | 深度默认 1、并发槽;角色只能减权;父收回摘要 |
| Memories C2 | feature 默关;root session 启动时后台抽 | 个人偏好、可复用线索 | 项目政策、密钥、ExecPolicy | 不该($CODEX_HOME/memories/) | 总闸;读/写两开关;额度低/子代理/未闲置则跳过 |
| Goals C5 | thread/goal/set 挂在可持久化 thread | 可验证的完成条件 | 时刻表(那是 E7);Plan mode;仓库 plan.md | Goal 状态在 session/app-server,不进项目 git | ephemeral 不能挂;Complete 是终态;pause/clear 是人 |
| Pets E8 | TUI/App 加载精灵;不进 Session | 余光状态灯皮肤 | 任何智能、任何 tool | 自定义皮肤本机 $CODEX_HOME/pets/ | 终端没 Kitty/Sixel 就画不出;不准进 ToolRouter |
Personality(C4)只剥 # Personality 一节,不进上表——它不是加载层,是指令开关。Chronicle(C3)是 Memories 的采集器,不是第十一种政策。Worktree(E2)隔离的是 checkout,不是第十二层配置。Environment(B6)是执行后端,政策仍走 B3 的 profile,不要做成第十三层 toml。进程内 Extension(B2)是 host 启动时 install() 的贡献点,不是 上表 Plugin 那一行——包装盒是用户安装单元,contributor 是缝。
2. 进 git 还是留本机(再压一刀)
进 git(给克隆仓库的人): AGENTS.md、repo skills、(可选)项目 .codex/config.toml 里 denylist 允许的键、项目 hooks——但后两者默认 未信任不生效。
留本机(CODEX_HOME / keyring): 登录态、rollout、Memories、Pets、插件安装状态、user skills、profile、AGENTS.override.md。
进市场、不进「克隆即运行」: Plugin 包。队友要装,走 codex plugin add,不要靠 git submodule 当安装器。
谁都不该进 git: 密钥、内网地址、--yolo 当仓库默认、把 TrustLevel::trusted 写进项目想自己开门。
3. 冲突时的拇指规则
从上到下问:
- OS / ExecPolicy 已经禁了吗? 禁了就结束,prompt 和 hook 改不回来(除非错误地把 sandbox deny 当成 exit 2 去升级——B3)。
- 同步 Hook 拦了吗? exit 2 赢过模型意愿。
- 人(或 Guardian)批了吗? 同意旋钮。
- 模型看见了哪份说明书? AGENTS.md 每轮在;Skill 要点名;Memories 要开读。
- 装饰层? Pets / Personality 到这里才轮到,而且不该回头改 1–3。
把第 5 层的偏好写进第 1 层,或把第 1 层的禁令写进第 4 层,就是 F2 的反模式。
4. 结语:带走一句话
十层里只有 AGENTS.md 和少数 repo 扩展该进 git;账号、记忆、安装状态留在 CODEX_HOME——机械拦截在 ExecPolicy/Hook/沙箱,说明书在模型眼里,宠物连工具层都不许进。