只要托管钩子:allow_managed_hooks_only 只能写进 requirements.toml
写进普通 config.toml 不会生效。用户、项目、会话和插件钩子会被跳过,MDM 脚本还要自己分发。
企业想禁止本机 ~/.codex/hooks.json 和仓库 .codex/hooks.json,只留管理员那一套,把开关写进 requirements.toml(或 MDM 的 requirements_toml_base64),不要写进 ~/.codex/config.toml。官方 config.md 写明:普通配置层里的同名键会被忽略。
# requirements.toml(系统层 / MDM / 云托管),不是用户 config.toml
allow_managed_hooks_only = true
[features]
hooks = true
[hooks]
managed_dir = "/enterprise/hooks"
windows_managed_dir = 'C:\enterprise\hooks'
[[hooks.PreToolUse]]
matcher = "^Bashquot;
[[hooks.PreToolUse.hooks]]
type = "command"
command = "python3 /enterprise/hooks/pre_tool_use_policy.py"
command_windows = "py -3 C:\\enterprise\\hooks\\pre_tool_use_policy.py"
timeout = 30
statusMessage = "Checking managed Bash command"
要点:
- 只跳过用户、项目、会话、插件来源;
requirements.toml和其他托管层仍会加载 - 用户把
[features] hooks = false时,还要在 requirements 里钉hooks = true,否则托管钩子也被关掉 - Codex 不会把
managed_dir里的脚本随安装分发,MDM 必须自己放绝对路径 - 启动时被跳过的本机钩子会打简短警告;用
/debug-config看实际生效层
个人机器不要抄这一段。没有 MDM 时,继续用用户级 hooks.json 并走信任流程。