Claude Code In Action
← 所有课程
课程 105Claude Code In Action

Hooks

摘要音频

本节课没有语音摘要。

学习笔记

核心概念:Hooks (钩子)

  • Hooks 的作用 (Function of Hooks):
  • 将 Claude 通常遵循的规则(Rule)转化为 Claude 必须遵循的规则(Deterministic Code)。
  • 确保在未被实时监控的运行中也能保证行为。
  • 主要 Hook 类型 (Key Hook Types):
  • Pre-tool use (工具使用前): 在工具调用之前触发,是执行强制性规则(Enforcement Primitive)的关键。
  • Post-tool use (工具使用后): 在工具调用成功之后触发,常用于自动格式化或自动检查(Auto-formatting/Lint)。
  • Stop (停止): 当 Claude 希望结束当前回合时触发。
  • Refuse (拒绝): 当条件不满足时触发。
  • Subagent stop (子代理停止): 子代理完成任务时触发的信号。
  • Pre-compact / Post-compact (压缩前/后): 在对话压缩(Compaction)前后触发。
  • Instructions loaded (指令加载): 当 Claude. md 或规则文件加载时触发,用于审计上下文内容。
  • Session start (会话开始): 初始化环境,可配合 compact matcher 使用。

关键功能与返回值 (Key Functions and Return Values)

  • Pre-tool use 的响应 (Pre-tool use Responses):
  • 返回 JSON: 必须返回 JSON 格式并以退出码 0 退出,以授予权限(Permission)。
  • 决策字段 (Decision Fields):
  • allow: 允许执行。
  • deny: 拒绝执行。
  • ask: 询问用户。
  • defer: 仅适用于非交互式运行,调用进程暂停并稍后恢复工具。
  • 更新输入 (Updated Input): 可返回更新后的输入对象来修改工具调用(例如,从 bash 命令中移除敏感信息),但需替换整个输入对象。
  • 退出码 (Exit Codes):
  • 0 (Success): 成功。如果标准输出是 JSON,Claude 会解析它。
  • 1 (Non-blocking): 看起来像错误,但实际上不阻塞。Claude 会继续执行命令。
  • 2 (Blocking Error): 阻塞错误。标准错误会被反馈给 Claude 作为上下文。
  • Stop (Blocking Stop): 用于表示“你还没有完成”,阻止 Claude 继续执行。

进阶机制 (Advanced Mechanisms)

  • 上下文保留 (Context Preservation):
  • Session start + compact matcher: 在对话被压缩时,使用此 Hook 重新注入上下文(Context),确保 Claude 能从上次停止的地方继续工作,而不是从头开始。
  • Guardrail 机制 (Guardrail Mechanism):
  • Matcher: 匹配要监控的工具(如 bash),并可选地使用 if 子句缩小范围。
  • **Redaction vs. Blocking:**
  • 返回 deny:阻止危险调用。
  • 返回 updated input:在允许调用时,修改输入(如移除秘密),允许调用继续执行。
  • 忽略阻塞的事件 (Non-blocking Events):
  • 某些事件(如 notification, session start, file change)会忽略阻塞性,直接显示标准错误并继续运行。

Takeaways

  • Hooks的作用是将Claude的规则(Rule)转化为必须遵循的确定性代码(Deterministic Code)。
  • 工具使用前(Pre-tool use)是执行强制性规则的关键,必须返回JSON并使用allow、deny等决策字段来授予或拒绝权限。
  • Guardrail机制通过Matcher监控工具,可选择返回deny阻止调用,或返回updated input进行输入修改(Redaction)。
  • 使用Session start配合compact matcher实现上下文保留,确保对话在被压缩后能从上次停止的地方继续工作。
抽认卡 8 张卡片
问题
点击显示 · ←/→
答案
点击翻回
导出到 Anki (.tsv) ↓
知识检测 0 题

No quiz for this lesson yet.