大数跨境
0
0

第三部分-钩子和SDK - 18-另一个有用的钩子

第三部分-钩子和SDK - 18-另一个有用的钩子 NA AI Studio
2025-08-31
2

 

另一个有用的钩子

除了本课程中讨论的 PreToolUse和 PostToolUse钩子之外,还有更多钩子类型:

  • • Notification- 当 Claude Code 发送通知时运行,这发生在 Claude 需要使用工具的权限时,或者在 Claude Code 空闲 60 秒后
  • • Stop- 当 Claude Code 完成响应时运行
  • • SubagentStop- 当子代理(在 UI 中显示为"任务")完成时运行
  • • PreCompact- 在压缩操作发生之前运行,无论是手动还是自动

这里是令人困惑的部分:

  1. 1. 命令的标准输入会根据执行的钩子类型(PreToolUsePostToolUseNotification等)而改变
  2. 2. 其中包含的 tool_input会根据调用的工具而不同(在 PreToolUse和 PostToolUse钩子的情况下)

例如,这是钩子的标准输入样本,其中钩子是监视 TodoWrite工具使用的 PostToolUse。作为参考,这是 Claude 用来跟踪待办事项的工具。

{
  "session_id""9ecf22fa-edf8-4332-ae85-b6d5456eda64",
"transcript_path""<path_to_transcript>",
"hook_event_name""PostToolUse",
"tool_name""TodoWrite",
"tool_input": {
    "todos": [{ "content""write a readme""status""pending""priority""medium""id""1" }]
  },
"tool_response": {
    "oldTodos": [],
    "newTodos": [{ "content""write a readme""status""pending""priority""medium""id""1" }]
  }
}

作为对比,这是 Stop钩子输入的示例:

{
  "session_id""af9f50b6-f042-4773-b3e2-c3a4814765ce",
  "transcript_path""<path_to_transcript>",
  "hook_event_name""Stop",
  "stop_hook_active"false
}

*如你所见,命令的标准输入会根据钩子类型(PreToolUsePostToolUseStop等)以及使用的匹配器(在 PreToolUse和 PostToolUse的情况下)而显著不同。这会使编写钩子变得困难 - 你可能不知道命令输入的确切结构!*

为了处理这个挑战,建议使用这样的钩子:

"PostToolUse": [ // 或者 "PreToolUse" 或 "Stop" 等
  {
    "matcher""*",
    "hooks": [
      {
        "type""command",
        "command""jq . > post-log.json"
      }
    ]
  },
]

注意提供的命令。它会将此钩子的输入写入 post-log.json文件,这允许你检查确切的内容,了解会输入到你的命令中!这使你更容易理解命令应该检查什么数据。

 


【声明】内容源于网络
0
0
NA AI Studio
我们是您的人工智能前沿观察站。在这里,我们致力于分享最新、最深度的AI技术解读、产业洞见与应用实例。无论您是技术开发者、产品经理,还是对AI充满好奇的探索者,NA AI Studio都将为您提供最有价值的参考。
内容 113
粉丝 0
NA AI Studio 我们是您的人工智能前沿观察站。在这里,我们致力于分享最新、最深度的AI技术解读、产业洞见与应用实例。无论您是技术开发者、产品经理,还是对AI充满好奇的探索者,NA AI Studio都将为您提供最有价值的参考。
总阅读58
粉丝0
内容113