Skip to content
FunCoding

Search

Search docs, Skills and MCP

会话、通知与压缩 Hooks

处理启动上下文和退出记录,明确哪些事件不能阻止执行。

This page has not been translated into English yet. The original Chinese version is shown below.

会话和系统事件主要服务初始化与观察。它们不具备工具前置 Hook 的全部阻止能力,不能仅返回 deny 就期待生命周期停住。

SessionStart

source 为 startup、resume 或 clear。additionalContext 在交互模式注入为历史第一轮,在无头模式前置到用户提示;systemMessage 显示在会话开头。

continue 与 decision 被忽略,无法用此事件阻止启动。需要校验用户请求时考虑 BeforeAgent,需要校验工具时考虑 BeforeTool。

SessionEnd

reason 可为 exit、clear、logout、prompt_input_exit 或 other。此事件适合尽力清理与最终遥测,CLI 不等待它完成,且忽略流程控制字段。

因此不可把它作为必须成功的唯一状态持久化步骤,也不能承诺 CLI 退出前数据库已写完。systemMessage 可作为关闭期间的用户信息,但脚本的完成情况仍需独立观测。

Notification

参考当前列出的 notification_type 为 ToolPermission,另有 message 和 details(工具、路径等元数据)。systemMessage 与通知一同显示。

这是观察接口,不能自动授予工具权限,也不能阻止系统通知。把它转发到桌面通知与批准实际工具是两件事。

PreCompress

trigger 为 auto 或 manual,在上下文压缩前触发;异步执行,不阻止也不修改压缩。支持显示 systemMessage,忽略流程控制字段。

需要保留关键状态时,记录应尽量简短,并设计压缩继续进行时仍能处理的逻辑,不依赖同步完成保证。

与通用描述的区别

Hooks 概览将 Hook 总体描述为同步;本页按事件参考保留 SessionEnd 不等待和 PreCompress 异步的例外。选择事件时应依据专属协议,不能把通用退出码表套到所有生命周期事件。