跳转到主要内容

会话钩子

使用 hooks 可以在 Copilot 会话的各个生命周期节点插入处理。 你可以在不修改核心实现的前提下,添加工具执行控制、审计日志、prompt 增强、错误处理等。

钩子流程

基本使用方式

可用的钩子

返回 null 时会继续默认行为。

典型用例

1) Permission control(执行控制)

  • 通过 onPreToolUse 用 allow-list 方式限制允许的工具
  • 破坏性操作用 permissionDecision: 'ask' 请求人工确认
  • 通过 permissionDecisionReason 明确拒绝理由
  • toolName 的候选值请参考 Tools 的列表(例如 viewglobbash

2) Auditing / compliance(审计)

  • 组合生命周期钩子收集审计事件
  • 按 session ID 单位持久化收集的数据

3) Prompt enrichment(输入增强)

  • onSessionStart 中把项目信息(语言、框架、约定)加入 additionalContext
  • onUserPromptSubmitted 中展开快捷方式(/fix/test

4) Result filtering(结果整形)

  • onPostToolUse 中对 API key / token / password 等进行脱敏
  • 对过长的结果进行摘要,仅在需要时返回详细内容

5) Error recovery(故障恢复)

  • onErrorOccurred 中仅在 model_callrecoverable=trueretry
  • 无法恢复的错误通过 userNotification 向用户简明通知

6) Session metrics(度量)

  • onSessionStart 中记录开始时间
  • onPreToolUse / onUserPromptSubmitted 中更新计数器
  • onSessionEnd 中输出耗时、工具调用次数、结束原因

Hook input / output 类型

共通输入(BaseHookInput

PreToolUseHookInput

PreToolUseHookOutput

PostToolUseHookInput

PostToolUseHookOutput

UserPromptSubmittedHookInput

UserPromptSubmittedHookOutput

SessionStartHookInput

SessionStartHookOutput

SessionEndHookInput

SessionEndHookOutput

ErrorOccurredHookInput

ErrorOccurredHookOutput

ToolResultObject

工具执行结果的标准对象。

最佳实践

  1. 不要在钩子内直接执行过重的同步处理。如有必要请异步化。
  2. 不需要修改时返回 null,交给默认行为处理。
  3. 尽可能显式地设置 permissionDecision
  4. 关键错误不要过度抑制,请保留日志 / 通知通道。
  5. 会话级状态请基于 session id 管理,并在 onSessionEnd 时清理。
最新信息请参考 GitHub 仓库
最后修改于 2026年7月18日