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 次自动停

相关文档

下载 Kition

本地优先的 AI 工作空间。Markdown 文档、结构化数据表、AI Agent,全部跑在你自己的电脑上。