会话钩子
使用hooks 可以在 Copilot 会话的各个生命周期节点插入处理。
你可以在不修改核心实现的前提下,添加工具执行控制、审计日志、prompt 增强、错误处理等。
钩子流程
基本使用方式
可用的钩子
返回
null 时会继续默认行为。
典型用例
1) Permission control(执行控制)
- 通过
onPreToolUse用 allow-list 方式限制允许的工具 - 破坏性操作用
permissionDecision: 'ask'请求人工确认 - 通过
permissionDecisionReason明确拒绝理由 toolName的候选值请参考 Tools 的列表(例如view、glob、bash)
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_call且recoverable=true时retry - 无法恢复的错误通过
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
工具执行结果的标准对象。最佳实践
- 不要在钩子内直接执行过重的同步处理。如有必要请异步化。
- 不需要修改时返回
null,交给默认行为处理。 - 尽可能显式地设置
permissionDecision。 - 关键错误不要过度抑制,请保留日志 / 通知通道。
- 会话级状态请基于 session id 管理,并在
onSessionEnd时清理。
最新信息请参考 GitHub 仓库。