AI Agent
Hooks 入门
Hooks 在工具调用前后插入代码 — 拦截、审计、注入上下文。
Hooks 是什么
Hook 是一段你写的脚本(任意语言,可执行就行),由 Kition 在 Agent 工具调用的特定时机自动触发。它能读到工具的输入,能改输入,能直接 block 调用,能向 Agent 注入额外消息。
把它想成 Express 的 middleware — 只不过这里管的是 AI 工具调用,不是 HTTP 请求。所有合规、审计、自定义工具能力都靠它。
四个 Hook 时机
PreToolUse— 调用工具前,可改 args、可拒绝PostToolUse— 工具返回后,可改返回值、记日志PreCompact— Agent 准备压缩上下文前Stop— Agent 结束这一轮回复后
配置位置
<vault>/.kition/hooks.json 是 Vault 级,跟仓库走(团队共享);全局 hooks 在 ~/.kition/hooks.json,只对你本机生效。两边都存在时,Vault 级先跑。
你也能在 Settings → Agent → Hooks 用 GUI 编辑器配 — 它直接写到同一份 JSON。
一个简单的 Bash 守门 Hook
{
"PreToolUse": [
{
"matcher": "Bash",
"hooks": [
{
"type": "command",
"command": "node .kition/hooks/check-bash.js",
"timeout_ms": 3000
}
]
}
]
}配套的 check-bash.js
const input = JSON.parse(require('fs').readFileSync(0, 'utf8'))
const cmd = input.tool_input.command || ''
const DANGEROUS = [/\brm\s+-rf\b/, /\bsudo\b/, /:\(\)\{/]
if (DANGEROUS.some((rx) => rx.test(cmd))) {
console.log(JSON.stringify({
decision: 'block',
reason: 'Blocked by hook: dangerous pattern in command.',
}))
process.exit(0)
}
console.log(JSON.stringify({ decision: 'allow' }))能玩出什么花样
- 审计日志:把每次 Write 追加到日志文件,事后追溯
- 注入项目规范:每次
Edit前补一段 "保持 2 空格缩进" - 兜底安全:拦截访问
.env或客户数据目录 - 自定义工具:用 PreToolUse 把一个不存在的 tool 截下来自己回
- 成本守门:单次 chat 工具调用超过 50 次自动停