Hooks 配置、开关与环境
设置事件组与匹配器,通过面板管理,并使用当前 hooksConfig 键。
This page has not been translated into English yet. The original Chinese version is shown below.
配置分两层:事件中的分组定义 matcher 和 sequential,组内 hooks 数组定义每个命令。当前执行引擎只支持 command。
{
"hooks": {
"BeforeTool": [
{
"matcher": "write_file|replace",
"sequential": true,
"hooks": [
{
"name": "security-check",
"type": "command",
"command": "$GEMINI_PROJECT_DIR/.gemini/hooks/security.sh",
"timeout": 5000,
"description": "Check proposed file changes"
}
]
}
]
}
}示例脚本需要自行创建。组内 sequential 为 true 时依次运行,false 时并行;本页显式配置,不从省略值推断执行顺序。timeout 单位毫秒,单个 Hook 默认 60000。
匹配规则
BeforeTool/AfterTool 的 matcher 是工具名称正则;生命周期事件使用精确触发字符串,例如 startup。* 或空字符串匹配全部,不能把生命周期 matcher 当成通用正则。
配置可能来自项目、用户、系统和扩展。Hooks 概览的层级列表与通用 settings 合并说明方向不同;多来源同事件时应在面板核对真实加载结果,不用这一列表推导企业设置可被项目绕过。
开关
当前配置参考的 hooksConfig.enabled 默认 true,改变后需重启;hooksConfig.disabled 默认空数组,用于禁用指定 Hook;hooksConfig.notifications 默认 true。
最佳实践页仍有旧 hooks.disabled 示例,与当前生成配置不一致。新设置采用 hooksConfig.disabled,并通过面板检查。
交互管理
| 命令 | 用途 |
|---|---|
/hooks panel | 查看 Hook、执行状态与最近输出 |
/hooks enable-all | 启用全部 |
/hooks disable-all | 禁用全部 |
/hooks enable <name> | 启用指定名称 |
/hooks disable <name> | 禁用指定名称 |
脚本环境
GEMINI_PROJECT_DIR 为项目根绝对路径,GEMINI_PLANS_DIR 为计划目录,GEMINI_SESSION_ID 为会话 ID,GEMINI_CWD 为当前目录;CLAUDE_PROJECT_DIR 作为兼容别名提供。不要在普通终端检查不到这些变量时就认定 Hook 环境也没有,它们由 CLI 调用时提供。