OH10: Hooks OpenHarness · 对标 S10
与 S10 同主题:在工具执行前后插入用户脚本,用于审计、改写或阻断;必须与权限、工具错误路径顺序正确。
上游:HKUDS/OpenHarness · 本仓库快照:reference/rererence_harness/OpenHarness/ · 路径亦见 专题映射表。
course-s10)。🎯 关键路径(读什么)
在 src/openharness/ 下优先打开:
hooks/events.py:PRE_TOOL_USE/POST_TOOL_USE/ session 级事件。hooks/executor.py:聚合多 hook 定义的执行与 block 语义。hooks/loader.py:load_hook_registry从配置构建。
🔍 源码导读
调用顺序(对照源码)
_execute_tool_call:Pre →(通过则)权限 → execute → Post。Pre 返回 blocked 时直接错误型 tool_result,不再做权限询问——与课内「hook 可短路」一致。
与 OH03 的叠加
权限判定依赖已解析的 parsed_input;Hook 收到的 payload 含原始与事件名。思考「谁在何种失败下对用户可见」。
⚖️ 与课内叙事对照
| 维度 | 课内 S10 | OpenHarness |
|---|---|---|
| 事件面 | Pre/Post/Session | 枚举 HookEvent |
| 配置 | hooks JSON | 与 settings / 项目目录约定 |
| 阻断 | permission vs hook | 二者都可拒绝,但提示文案来源不同 |
🤔 思考题
- PostToolUse 若抛异常,工具结果是否仍写入对话历史?
- SessionStart hook 失败应否阻止整个会话启动?当前实现如何?
- 若要在 Pre 阶段做「自动改 tool 参数」,应返回什么结构?(对照
AggregatedHookResult)
📎 延伸阅读
OH01–12 目录 · OH09 · OH11 · S10 · D10