Skip to Content
工程化实践3. Agent HarnessHooks 确定性约束

Hooks 确定性约束

不靠 agent 自觉,而是强制执行

定位:声明式 vs 确定性

prompt / Rules / AGENTS.md 都是声明式约束——它们「告诉」 agent 应该怎么做,最终靠 agent 自觉遵循。Hooks 则是确定性约束:策略、格式化、审计、危险操作拦截变成 agent loop 中的可执行步骤,由脚本监听 agent 行为并强制介入。

Harness 视角:Hooks 属于「控制与验证」层。声明式约束回答「应该做什么」,确定性约束回答「必须做什么、不能做什么」。两者互补——AGENTS.md 写清规范,Hooks 保证关键规范不被绕过。

配置

Hooks 用自定义脚本观察、控制、扩展 agent loop,通过 stdio + JSON 通信。配置位置有三处:

  • 项目级.cursor/hooks.json(随仓库提交,团队共享);
  • 用户级:全局 hooks 配置;
  • Plugins:插件自带的 hooks。
    • hooks.json
{ "hooks": { "beforeShellExecution": [{ "matcher": "rm -rf *", "hooks": [{ "type": "command", "command": "node .cursor/hooks/guard.mjs" }] }] } }

Hook 面分类

主要 hook 面可分为三类(节选):

文件 / 工具面

Hook触发时机典型用途
preToolUse工具调用前拦截危险操作、审批门禁
postToolUse工具调用后记录、审计工具结果
beforeShellExecutionshell 命令执行前拦截 destructive 命令(rm -rf 等)
afterFileEdit文件编辑后跑 formatter、lint、策略检查

生命周期面

Hook触发时机典型用途
beforeSubmitPrompt提交 prompt 前改写 prompt、注入约束
afterAgentResponseagent 回复后审计回复、记录
stopagent 停止时触发 repair loop、上报失败
preCompact上下文压缩前保存状态、归档关键信息

子代理面

Hook触发时机典型用途
subagentStart子代理启动时注入策略、记录委派
subagentStop子代理停止时聚合结果、审计子代理工作

典型用途

拦截 destructive 命令

beforeShellExecution 可以匹配 rm -rfgit push --force 等危险命令,命中即拒绝或要求确认——这是把「别乱删文件」从建议变成硬约束的关键手段。

afterFileEdit 跑 formatter / lint

afterFileEdit 在每次文件编辑后自动执行格式化与 lint:

{ "hooks": { "afterFileEdit": [{ "matcher": "*.{ts,tsx,js,jsx}", "hooks": [{ "type": "command", "command": "prettier --write" }] }] } }

stop 触发 repair loop

当 agent 停止时(尤其失败后),stop hook 可以检查最近的工作是否通过验证;未通过则触发 repair loop 或上报。配合代码库里的 Skills 修复流程,可以把「失败 → 读错误 → 再试」变成自动化的闭环。

Repair Loop:失败 → 读错误 → 再试

确定性约束的最终目的是支撑一个可靠的 repair loop

Hooks 在其中扮演「验证入口的触发器」:afterFileEdit 即时反馈格式问题、stop 兜底检查整体验证状态。完整的 Plan → Execute → Verify 叙事见 验证闭环

Cloud Agents 与 hooks

Cloud Agents 运行在隔离 VM 中,会执行仓库内 .cursor/hooks.json 中的 command hooks——这意味着云端运行与本地策略保持一致:同样的格式化、审计和拦截规则,无论任务跑在哪里都生效(Enterprise 还可配置 team / enterprise hooks 做策略控制)。

下一步

Hooks 提供了「确定性约束」这一层,Subagents 则是「编排层」的独立代理能力;两者配合 验证闭环 构成完整的执行-验证体系。

参考来源

  • materials/03-cursor-official/cursor-docs-hooks.md
  • materials/06-engineering-loop/hooks-and-repair-loop.md
最后更新于: