15.5 Hook 系统(53 个 Hook 详解)
模型: claude-opus-4-6 (anthropic/claude-opus-4-6) 生成日期: 2026-02-17
oh-my-opencode 的 Hook 系统是其最精密的子系统之一。53 个 Hook 构成了一张密集的"防护网",覆盖了 Agent 行为的方方面面——从上下文窗口管理到错误恢复,从任务持续执行到 Agent 行为矫正。
15.5.1 Hook 分类
53 个 Hook 可以按功能分为 8 大类:
上下文注入类(4 个)
directory-agents-injector
将项目 AGENTS.md 文件内容注入到 Agent 消息中
directory-readme-injector
将项目 README.md 注入到 Agent 上下文
rules-injector
注入 .opencode/rules/ 目录下的规则文件
compaction-context-injector
在上下文压缩后注入关键上下文(防止压缩导致信息丢失)
这些 Hook 的核心思想是:自动向 Agent 提供项目特定的上下文信息,而不需要用户每次手动粘贴。
错误恢复类(4 个)
edit-error-recovery
编辑工具失败时注入恢复指令
json-error-recovery
JSON 解析错误时注入修正指令
anthropic-context-window-limit-recovery
Anthropic API 上下文窗口溢出时自动恢复
session-recovery
会话异常中断时的恢复机制
Agent 管理类(3 个)
agent-usage-reminder
提醒 Agent 正确使用委托协议和工具
category-skill-reminder
提醒 Agent 在委托时选择正确的 Category 和 Skill
unstable-agent-babysitter
监控不稳定的子 Agent,在超时或异常时介入
会话管理类(4 个)
context-window-monitor
监控上下文窗口使用率,发出警告
preemptive-compaction
在上下文窗口接近满时,先发制人地触发压缩
compaction-todo-preserver
压缩时保留 Todo 状态
session-notification
会话状态变更通知
输出控制类(3 个)
tool-output-truncator
截断过长的工具输出以节省 Token
thinking-block-validator
验证思考块格式的正确性
think-mode
控制扩展思考模式的启用/禁用
任务管理类(4 个)
todo-continuation-enforcer
强制 Agent 继续执行未完成的 Todo 任务
task-reminder
提醒 Agent 当前任务的状态和要求
task-resume-info
提供任务恢复所需的上下文信息
tasks-todowrite-disabler
在特定场景下禁用 TodoWrite 工具
自动化类(4 个)
auto-slash-command
自动检测并执行斜杠命令
ralph-loop
自我驱动的持续工作循环
start-work
从 Prometheus 计划启动工作流
stop-continuation-guard
防止意外停止续接机制
环境适配类(2 个)
non-interactive-env
非交互式环境(CI/CD)的适配
interactive-bash-session
交互式 Bash 会话的管理
其他类
keyword-detector
检测用户消息中的关键词(如 "ultrawork")
comment-checker
检查 AI 生成代码中的过多注释
hashline-read-enhancer
为 Read 工具的输出附加行号哈希
write-existing-file-guard
防止误写已存在的文件
question-label-truncator
截断过长的问题标签
background-notification
后台任务完成通知
delegate-task-retry
委托任务失败时的重试逻辑
anthropic-effort
Anthropic API effort 等级注入
prometheus-md-only
限制 Prometheus 只编辑 .md 文件
sisyphus-junior-notepad
Sisyphus Junior 的笔记本功能
atlas
Atlas Agent 的特殊处理
claude-code-hooks
Claude Code 兼容层的 Hook
auto-update-checker
自动更新检查
startup-toast
启动提示
empty-task-response-detector
检测空的任务响应
15.5.2 核心 Hook 实现剖析
preemptive-compaction:先发制人的上下文压缩
preemptive-compaction:先发制人的上下文压缩这是 oh-my-opencode 中最关键的 Hook 之一。它解决了一个根本性问题:当 Agent 的上下文窗口快要满时,如果不及时压缩,下一次 API 调用就会失败。
工作原理:
Token 缓存更新:通过
eventHook 监听message.updated事件,每当 LLM 完成一次响应时,缓存该会话的 Token 使用量阈值检查:在每次工具执行完成后(
tool.execute.after),检查当前会话的 Token 使用率是否超过 78%触发压缩:如果超过阈值,调用 OpenCode SDK 的
session.summarize()方法,让 LLM 将对话历史压缩为一段摘要去重保护:使用
compactionInProgress和compactedSessions两个 Set 防止重复压缩
context-window-monitor:上下文窗口监控
context-window-monitor:上下文窗口监控与先发制人压缩不同,上下文窗口监控器的作用是告知 Agent 当前的上下文使用状态:
注意两个 Hook 的阈值不同:监控器在 70% 时发出警告,压缩器在 78% 时触发压缩。这个 8% 的缓冲区给了 Agent 一个"预警期"——先知道上下文正在变满,然后在真正触发压缩之前有机会自行减少上下文消耗。
ralph-loop:自我驱动的持续工作循环
ralph-loop:自我驱动的持续工作循环Ralph Loop 是 oh-my-opencode 最具标志性的特性。它实现了一个自我驱动的工作循环——Agent 完成一次响应后,如果任务未完成,系统自动发送一条继续提示,让 Agent 继续工作。
Ralph Loop 的架构由 6 个子模块组成:
工作流程:
用户输入 "ultrawork" 或执行
/ralph-loop命令startLoop()激活循环,记录初始状态Agent 开始执行任务
当 Agent 完成一次响应(
session.idle事件)completion-promise-detector检查响应是否包含"完成承诺"如果未完成,
continuation-prompt-builder构建继续提示通过 API 发送继续提示,Agent 继续工作
重复 4-7,直到任务完成或达到最大迭代次数
todo-continuation-enforcer:Todo 任务持续执行保障
todo-continuation-enforcer:Todo 任务持续执行保障这是"让 Sisyphus 继续推石头"的核心机制。当 Agent 在有未完成 Todo 的情况下停止工作时,这个 Hook 会强制 Agent 继续。
工作原理:
当 Agent 的 Session 进入
idle状态时Hook 检查该 Session 是否有未完成的 Todo 项
如果有,启动一个倒计时
倒计时结束后,注入一条系统提醒消息:
这条消息触发 Agent 继续执行
edit-error-recovery:编辑失败自动恢复
edit-error-recovery:编辑失败自动恢复这个 Hook 简洁但高效——当 Edit 工具失败时,在输出中注入恢复指令:
这个 Hook 解决了 LLM 的一个常见问题:编辑失败后的"盲目重试"。没有这个 Hook 时,LLM 在编辑失败后可能会尝试相同的操作,导致重复失败。通过注入"先重新读取文件再尝试"的指令,强制 LLM 更新对文件状态的认知。
unstable-agent-babysitter:不稳定子 Agent 保姆监控
unstable-agent-babysitter:不稳定子 Agent 保姆监控这是一个"监工"级别的 Hook——它监控后台运行的子 Agent,如果子 Agent 长时间没有活动或产出空响应,保姆 Hook 会介入:
保姆 Hook 的工作原理:
监听后台任务的完成事件
获取子 Agent 的最后几条消息
分析响应是否"不稳定"(空响应、超时、异常终止)
如果不稳定,构建一条提醒消息发送给主 Session 的 Agent
进入冷却期(5 分钟内不再重复提醒)
衍生解释:什么是"防御式编程"?
防御式编程(Defensive Programming)是一种编程范式,其核心理念是:假设一切都可能出错,并为每种可能的错误预先准备恢复策略。
在传统软件工程中,防御式编程体现为:输入校验、异常处理、边界检查、错误日志等。在 AI Agent 系统中,防御式编程有了新的含义:
Agent 可能"忘记"正在做什么 → Todo Continuation Enforcer 强制继续
Agent 可能在错误的假设下编辑文件 → Edit Error Recovery 强制重新读取
Agent 可能耗尽上下文窗口 → Preemptive Compaction 先发制人压缩
子 Agent 可能超时或返回空响应 → Unstable Agent Babysitter 介入
Agent 可能添加过多注释 → Comment Checker 检测并警告
oh-my-opencode 的 53 个 Hook 本质上就是一套针对 AI Agent 行为的防御式编程框架。每个 Hook 都假设某种特定的失败模式会发生,并预先定义了恢复策略。
这也是 oh-my-opencode 命名的哲学基础——西西弗斯的石头会滚回来,但他会继续推。Agent 的任务会失败,但 Hook 系统确保它会恢复并继续。
本节小结
oh-my-opencode 的 53 个 Hook 构成了一个密集的行为控制和故障恢复网络。它们按功能分为 8 大类,覆盖了上下文管理、错误恢复、任务持续执行、Agent 行为监控等各个方面。
六个核心 Hook 的设计思路:
Preemptive Compaction(78% 阈值):在上下文窗口溢出之前主动压缩,比被动等待错误更可靠
Context Window Monitor(70% 阈值):比压缩更早发出警告,给 Agent 预警期
Ralph Loop:通过"响应 → 检测 → 继续提示 → 响应"的循环,实现自驱动的持续执行
Todo Continuation Enforcer:在 Agent 空闲时检查未完成任务,强制继续
Edit Error Recovery:拦截编辑错误,注入"先读取再重试"的恢复指令
Unstable Agent Babysitter:监控子 Agent 的健康状态,在异常时介入
Last updated
