$ cat zh/blog/claude-code-hooks-vs-session-monitoring

Claude Code Hooks 与持续会话监控有什么区别

Hook 记录某个生命周期时刻,持续监控器重建此刻的会话状态。两者能证明的事情并不相同。

Claude Code Hooks 很适合回答“刚才发生了什么”,持续会话监控则更适合回答“现在是什么状态”。这不是实现偏好,而是两类信号的时间语义不同。

Hooks 擅长观察离散事件

Hook 由工具在特定生命周期节点触发,例如工具调用前后、权限请求或回合停止。它天然适合运行脚本、记录审计信息、执行格式化,或者把一次明确事件发送到其他系统。它的优势是事件语义清楚,缺点是只看到被配置和成功触发的那一刻。

持续监控重建当前上下文

监控器会读取本地持久记录,维护每个会话的最新事件、回合标识和新鲜度。即使监控器晚于会话启动、应用刚刚重启,或者同时存在多个终端,它仍可从现有记录恢复当前视图。

问题Hooks持续监控
某个事件刚发生
应用重启后恢复需要另存状态可从记录重建
同时查看多个会话需要额外聚合天然适合
发现漏掉的事件可通过重扫恢复
触发自定义动作通常不是重点

Stop Hook 不能单独证明“现在已完成”

停止事件只能证明某个回合在某个时刻结束。它之后可能立即出现新的用户输入、权限请求或另一个回合。如果界面需要持续显示“轮到你”,就必须判断事件是否仍然新鲜、是否已被后续活动覆盖。

什么时候选哪一种

当“事件本身就是契约”时选 Hooks,例如运行检查或记录一次工具调用。当目标是显示当前上下文、恢复状态、管理多个会话时,选择持续监控。可靠的系统也可以组合二者:Hooks 提供高质量语义事件,本地记录负责恢复与校验。

实现清单

  • 为事件保留稳定的会话和回合标识。
  • 明确哪个时间戳代表语义发生时间。
  • 定义重复事件、乱序事件和缺失事件的处理方式。
  • 在重启、多个会话、部分写入和长时间静默下测试。
  • 说明原始内容是否离开本机。

Agent Island 的选择

Agent Island 采用本地持续监控路线:读取 Claude Code 和 Codex 已写入磁盘的会话记录,按会话保留状态,再聚合到状态栏。它不会要求用户为了基本监控去改写现有 CLI 工作流。相关的状态定义见七状态分类与测试清单