学到这里,你已经会把经验放到不同层:
- 当前提示词:管这一次任务。
AGENTS.md:管项目长期规则。config.toml:管 Codex 运行配置。- MCP:连接外部工具和资料。
- Skills:沉淀可复用工作流程。
Hooks 是另一种更“硬”的能力。
> 前置教程:第一次做一个 instruction-only Skill
> 如果你还不清楚 Skill 是什么,先看前置教程。很多时候先用 Skill 提醒流程即可,不一定需要 Hooks。
``
Hooks 是 Codex 在关键生命周期事件发生前后自动触发的检查或动作。
`
比如:
- Codex 准备调用工具前。
- Codex 请求权限时。
- Codex 调用工具后。
- Codex 准备压缩上下文前。
这比提示词更接近“自动化约束”。
所以它也更需要谨慎。
你在 AGENTS.md 里写:
`
不要把 API Key 写进仓库。
`
这是提醒。
你在 Skill 里写:
`
提交前检查是否包含 API Key、Token、密码。
`
这是流程。
你用 Hook 在文件修改后自动运行一个敏感信息扫描脚本。
这是自动检查。
三者力度不同:
`
提示词/AGENTS.md/Skill:告诉 Codex 应该怎么做。
Hooks:在关键动作前后插入自动检查或动作。
`
Hooks 适合处理:
- 每次工具调用前都要检查的规则。
- 每次权限请求时都要审查的规则。
- 每次文件修改后都要跑的检查。
- 某些高风险命令需要额外拦截或记录。
- 团队希望稳定执行的安全或合规检查。
比如:
- 检查命令是否包含危险删除。
- 检查是否试图读取敏感路径。
- 检查修改后是否引入密钥。
- 在权限请求时输出更清楚的提示。
不要用 Hooks 解决这些:
| 需求 | 更合适的方式 |
| -------------- | ----------- |
| 当前任务只改一个页面 | 当前提示词 |
| 项目写作规则 | AGENTS.md |
| 修 Bug 的标准步骤 | Skill |
| 查询外部文档 | MCP |
| 默认模型配置 | config.toml |
| 只是想让 Codex 更认真 | 好任务描述和验收标准 |
如果只是提醒 Codex 怎么做,用提示词、AGENTS.md 或 Skill 就够。
Hooks 适合“必须自动检查”的地方。
官方手册里,Codex 可以从活动配置层旁边加载 Hooks。
常见形式有两种:
`
hooks.json
`
或者 config.toml 里的:
`
[hooks]
`
常见位置包括:
| 位置 | 作用 |
| ------------------------ | ----------- |
| \~/.codex/hooks.json | 用户级 Hooks |
| 项目里的 .codex/hooks.json | 项目级 Hooks |
| config.toml 里的 \[hooks\] | 内联 Hooks 配置 |
新手不要一上来写项目级 Hooks。
先学会查看、理解、审查。
项目级 Hooks 只在项目 .codex/ 层受信任时加载。
这很重要。
因为 Hooks 核心是可能会运行命令。
如果一个陌生项目里藏着恶意 Hook,而 Codex 不做信任边界,就可能带来风险。
所以你要记住:
`
陌生项目里的 Hooks 不要随便信任。
`
非托管命令 Hooks 在运行前需要你审查并信任。
当 Hook 发生变化后,Codex 会把它当作新的定义,需要重新审查。
这很合理。
因为 Hook 改一行命令,风险就可能完全不同。
不用现在背。
先认识几个名字:
| 事件 | 大概含义 |
| ----------------- | ----------- |
| PreToolUse | 工具调用前 |
| PostToolUse | 工具调用后 |
| PermissionRequest | Codex 请求权限时 |
| PreCompact | 上下文压缩前 |
后面实操会先从“查看 Hooks”开始,不会一上来让你写执行脚本。
审批策略回答:
`
Codex 什么时候需要问你能不能做?
`
Hooks 回答:
`
在某个生命周期事件发生时,要不要自动运行额外检查或动作?
`
它们可以配合,但不是同一个东西。
建议按这个顺序:
- 先理解 Hooks 是生命周期自动化。
- Hooks 是在什么时机触发的。
2. 先学会判断什么时候不需要 Hooks。
3. 先用 /hooks 查看当前有没有 Hooks。
4. 学会审查 Hook 来源、命令和触发事件。
5. 再做只读或低风险 Hook。
6. 最后才考虑项目级团队 Hooks。
读完后你应该能说清楚:
2. Hooks 和 AGENTS.md`、Skills 的区别。
3. 为什么陌生项目里的 Hooks 不能随便信任。
4. 为什么新手应该先查看和审查,而不是直接写 Hook。
下一篇看:什么时候应该用 Hooks,什么时候不要用。