跳转到内容

Hooks 是什么,为什么不能一上来乱配

Hooks 是什么,为什么不能一上来乱配

Section titled “Hooks 是什么,为什么不能一上来乱配”

学到这里,你已经会把经验放到不同层:

  • 当前提示词:管这一次任务。
  • 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工具调用后
PermissionRequestCodex 请求权限时
PreCompact上下文压缩前

后面实操会先从“查看 Hooks”开始,不会一上来让你写执行脚本。

审批策略回答:

Codex 什么时候需要问你能不能做?

Hooks 回答:

在某个生命周期事件发生时,要不要自动运行额外检查或动作?

它们可以配合,但不是同一个东西。

建议按这个顺序:

  1. 先理解 Hooks 是生命周期自动化。
  2. 先学会判断什么时候不需要 Hooks。
  3. 先用 /hooks 查看当前有没有 Hooks。
  4. 学会审查 Hook 来源、命令和触发事件。
  5. 再做只读或低风险 Hook。
  6. 最后才考虑项目级团队 Hooks。

读完后你应该能说清楚:

  1. Hooks 是在什么时机触发的。
  2. Hooks 和 AGENTS.md、Skills 的区别。
  3. 为什么陌生项目里的 Hooks 不能随便信任。
  4. 为什么新手应该先查看和审查,而不是直接写 Hook。

下一篇看:什么时候应该用 Hooks,什么时候不要用