news 2026/10/22 11:12:31

MoAI-ADK Hooks系统完全参考:27个事件×JSON协议,让AI规则可机械执行

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MoAI-ADK Hooks系统完全参考:27个事件×JSON协议,让AI规则可机械执行

【免费下载链接】moai-adk

Agentic development harness for Claude Code — SPEC-driven plan/run/sync, TRUST 5 quality gates, model+effort routing, and Claude×GLM multi-LLM cost control. Single Go binary, 16 languages, zero deps.

项目地址:https://gitcode.com/gh_mirrors/mo/moai-adk
点击查看免费下载

MoAI-ADK Hooks 系统是为 Claude Code 打造的确定性规则执行层:它把"提示词里写了但 AI 可能不遵守"的规则,变成事件触发、必定执行的机械检查。本篇参考覆盖27 个 Hook 事件类型与JSON stdin/stdout 协议,帮你快速理解每个事件何时触发、如何响应、如何拦截危险操作,是 AI 开发框架(Agent Harness)中质量门禁的完整实现。

为什么 Hooks 是 AI 开发中"必定执行"的一层?

在智能体框架里,CLAUDE.md 和提示词是概率型指令——模型可能遵循,也可能忽略。而 Hooks 是确定性指令:事件一到,代码必跑,结果必被 Claude Code 采纳。

这正是 MoAI-ADK 作为 Agent Harness 的核心理念:框架从外部包裹并约束 Claude Code(概率型工作者),而 Hooks 就是这道围栏上真正通电的部分。

Hooks 在 Claude Code 中的位置

Hooks 与 Skills、Plugins、MCP 并列,是 Claude Code 四大官方扩展点之一。与它们不同的是:只有 Hooks 能否决模型的行为。

MoAI-ADK 的实现架构是shell 包装器 + 单个 Go 二进制:

  • .claude/hooks/moai/handle-<event>.sh只是薄转发层,负责把 stdin 的 JSON 交给moai hook <event>子命令
  • 格式化、lint、安全扫描、LSP 诊断等全部逻辑编译在 Go 二进制内部
  • 零 Python 依赖:不需要uv、虚拟环境,moai在 PATH 中即可工作;二进制缺失时包装器安全退出(exit 0),绝不阻塞 Claude Code

27 个 Hook 事件类型总览

事件常量完整定义在 internal/hook/types.go。按用途分为 9 大类:

类别事件触发时机
🔄 生命周期SessionStart/SessionEnd会话开始 / 结束
Stop/SubagentStop/SubagentStart主智能体或子智能体停止 / 启动
StopFailure因 API 错误(限流、鉴权失败)停止
Setup--init/--maintenance启动流程
🔧 工具PreToolUse工具执行前(可拦截)
PostToolUse工具执行后(可反馈)
PostToolUseFailure工具执行失败
📄 上下文PreCompact上下文压缩(/clear)前
PostCompact上下文压缩后
InstructionsLoadedCLAUDE.md / rules 加载完成
⌨️ 输入UserPromptSubmit用户提交提示词时(可改写)
Elicitation/ElicitationResultMCP 服务器请求用户输入 / 用户已响应
🛡️ 安全PermissionRequest权限对话框弹出时(可自动裁决)
PermissionDenied权限被拒后(可触发重试)
👥 团队TeammateIdle/TaskCompleted/TaskCreated团队成员空闲 / 任务完成 / 任务创建
🌳 WorktreeWorktreeCreate/WorktreeRemove隔离工作树创建 / 删除
🌍 环境ConfigChange/CwdChanged/FileChanged配置变更 / 目录切换 / 文件外部变更
📢 UINotificationClaude Code 发送通知时

💡 除上述 27 个已接线事件外,types.go 还声明了PostToolBatch、UserPromptExpansion、MessageDisplay三个观察型预留事件(已识别、暂不注册处理器)。

每个事件可注册多个处理器,按序执行;任一处理器返回block即短路跳过后续处理器(见 internal/hook/registry.go)。

JSON 协议:一个进、一个出

MoAI-ADK 与 Claude Code 的通信契约非常简洁(见 internal/hook/doc.go):

① 输入—— Claude Code 通过stdin推送 JSON。结构定义在 HookInput:

{ "session_id": "abc-123", "cwd": "/path/to/project", "hook_event_name": "PreToolUse", "tool_name": "Bash", "tool_input": { "command": "rm -rf /" }, "permission_mode": "default" }

不同事件携带不同字段:UserPromptSubmit带prompt,PreCompact带trigger,FileChanged带file_path与change_type……字段全部是官方 Claude Code 协议命名。

② 输出—— 处理器通过stdout返回 JSON(结构定义在 HookOutput)。stdout只允许出现 JSON,所有诊断日志走 stderr:

字段适用场景作用
hookSpecificOutput.permissionDecisionPreToolUse"allow"/"deny"/"ask"三态裁决
hookSpecificOutput.decision.behaviorPermissionRequest"allow"/"deny"自动裁决权限请求
hookSpecificOutput.additionalContext多数事件向模型注入额外上下文
hookSpecificOutput.updatedInputPreToolUse / UserPromptSubmit直接改写工具入参或用户提示词
decision: "block"+reasonStop / PostToolUse阻断动作并给出理由
continue: false+stopReason通用终止会话流程
systemMessage通用向用户显示警告

③ 退出码—— 最简单的"拦截协议":

  • 0→ 允许 / 成功
  • 2→拦截,附理由
  • 其他 → 非阻塞错误,记录后继续

⚠️ 默认超时30 秒(DefaultHookTimeout),官方指南建议:安全守卫(pre-tool)控制在 5 秒内,格式化/lint(post-tool)10 秒内,避免拖慢 Claude Code 响应。

实战中最值钱的 3 类 Hooks

🛡️ PreToolUse:安全守卫,拦截危险操作

这是 Hooks 的核心价值所在。MoAI-ADK 的 pre-tool 处理器会:

  • 拦截对secrets/、~/.ssh/*、*.pem、.git/*、~/.aws/*等敏感路径的 Write/Edit
  • 拦截危险 Bash 命令:rm -rf /、git push --force origin main、terraform destroy、docker system prune -a
  • 命中时返回permissionDecision: "deny",Claude Code 立即中止该操作

规则从"提示词里写一句请不要删库"变成"删库命令在机械层面就走不过去"。

🔧 PostToolUse:格式化 → lint → AST-grep → LSP 流水线

每次文件修改后自动执行四步检查(16 种语言支持,如 Go 用gofmt+golangci-lint、Python 用ruff、Rust 用clippy),发现问题通过additionalContext反馈给模型,成为下一轮自动修复的输入——智能体书写,钩子检查,这条流水线承担了反馈循环的一半。

📄 PreCompact / SessionEnd:跨会话的上下文保险

上下文压缩是一次用信息换代币的交易。PreCompact在/clear前把当前 SPEC 状态、任务清单、已改文件、核心决策存入.moai/state/session-memo.md;SessionEnd则保存会话指标与状态快照到~/.moai/state/last-session-state.json。

配置方法:settings.json 中注册 Hooks

Hooks 在项目.claude/settings.json的hooks段注册,最小示例:

{ "hooks": { "PreToolUse": [ { "matcher": "Write|Edit|Bash", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR/.claude/hooks/moai/handle-pre-tool.sh\"", "timeout": 5 } ] } ], "PostToolUse": [ { "matcher": "Write|Edit", "hooks": [ { "type": "command", "command": "\"$CLAUDE_PROJECT_DIR/.claude/hooks/moai/handle-post-tool.sh\"", "timeout": 10 } ] } ] } }

关键配置项:

字段说明示例
matcher工具名正则,收窄触发范围"Write\|Edit"
typeHook 类型(command / prompt / agent / http / mcp_tool)"command"
command要执行的命令shell 包装器路径
timeout超时秒数5

💡 MoAI-ADK 在PreToolUse下为危险命令守卫注册了双匹配器:Write|Edit|Bash与单独的PowerShell,确保无论模型经由哪个工具执行 shell 命令,拦截都同样生效。

延伸阅读:源码与文档路径

资源路径
事件类型与 JSON 协议定义internal/hook/types.go
处理器注册与事件分发internal/hook/registry.go
事件 × 处理器身份表internal/hook/handler_names.go
Hooks 指南(中文文档)docs-site/content/zh/advanced/hooks-guide.md
Hooks 事件完整参考docs-site/content/zh/advanced/hooks-reference.md

总结:提示词决定 AI "应该怎么做",Hooks 决定 AI "被允许做什么"。掌握 27 个事件与 JSON 协议后,你就能把自己的团队规范——安全红线、代码风格、完成标准——全部变成机械执行的确定性规则,这正是一个成熟 Agent Harness 与玩具级提示词工程的分水岭。

【免费下载链接】moai-adk

Agentic development harness for Claude Code — SPEC-driven plan/run/sync, TRUST 5 quality gates, model+effort routing, and Claude×GLM multi-LLM cost control. Single Go binary, 16 languages, zero deps.

项目地址:https://gitcode.com/gh_mirrors/mo/moai-adk
点击查看免费下载

相关推荐

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/21 23:18:46

DesignLife多轴随机振动疲劳分析实战指南

1. 项目概述&#xff1a;这不是又一个软件操作手册&#xff0c;而是一份“失效分析工程师”的实战手记“nCode&#xff1a;DesignLife案例教程八”——光看标题&#xff0c;你可能以为这是某套商业软件的第八个入门练习&#xff0c;点开就等着看界面截图和点击顺序。但如果你在…

作者头像 李华
网站建设 2026/10/22 19:38:45

TTL与CMOS逻辑门电气特性详解:电平匹配、扇出计算与混用避坑指南

1. 为什么还要聊TTL和CMOS这两老古董刚入行那会儿&#xff0c;我总觉得逻辑门这东西早就被FPGA和MCU吞掉了&#xff0c;谁还关心74系列芯片内部用的是TTL还是CMOS。直到有一次做一个工业现场的信号调理板&#xff0c;3.3V的MCU去驱动一个5V的老式继电器驱动芯片&#xff0c;死活…

作者头像 李华
网站建设 2026/10/22 21:43:05

嵌入式综合实训:从零拆解指纹开锁项目全流程

1. 从零拆解一个指纹开锁实训项目&#xff1a;它到底在练什么指纹开锁这四个字&#xff0c;第一次看到的人多半会觉得不过是个小玩具——按一下手指&#xff0c;锁就开了&#xff0c;能有多复杂&#xff1f;但真正上手做过的人心里都清楚&#xff0c;这个项目麻雀虽小&#xff…

作者头像 李华
网站建设 2026/10/21 15:43:07

Simulink 64位 REFPROP 物性调用:S-Function 封装与避坑指南

简介&#xff1a;这份资源面向需要在MATLAB/Simulink环境中进行热物性计算的工程师与研究人员&#xff0c;提供Refprop 9.1数据库与Simulink的64位集成接口&#xff0c;下载后即可在仿真模型中直接调用NIST标准热物性数据&#xff0c;免去手动查表与数据录入的繁琐。压缩包共11…

作者头像 李华