当前位置: 首页 > news >正文

设计Agent 生成代码的 Lint 规则体系,理解 Hook 机制

上一章我们建立了一个关键认知:Rules 文件是概率性的约束——Agent "大概率"会遵守,但不保证。当你告诉 Agent “不要硬编码 API Key”,它在 99 次调用中可能都遵守了,但第 100 次可能因为上下文过长或注意力分散而忽略这条规则。

在 In the Loop 模式中,人类审查是最后的安全网。但在 On the Loop 模式中,我们不希望依赖人类审查——我们希望有一个确定性的机制来自动拦截违规代码。

这就是Hook的价值所在。Hook 是挂载在 Agent 生命周期事件上的确定性脚本——当 Agent 试图执行某个操作时,Hook 脚本会被触发,如果检查不通过,操作会被直接阻止,Agent 无法跳过。

“Hooks guarantee execution; prompts do not.”
—— blakecrosley.com, Agent Architecture Guide


核心概念

传统 Lint 与 Agent Lint 的区别

传统的 Lint 工具(ESLint、Pylint、golangci-lint)是为人类开发者设计的——它们检查代码风格、潜在 Bug、未使用的变量等。当代码不合规时,Lint 会给出警告,但开发者可以选择忽略。

Agent Lint 需要解决一类不同的问题:

维度传统 LintAgent Lint
检查对象人类写的代码AI 生成的代码
关注重点代码风格、最佳实践安全、权限、架构边界
执行方式开发者手动运行或 CI每次操作自动触发,不可跳过
失败处理警告或错误exit code 2 直接阻止操作
检查时机代码写完后代码写之前(PreToolUse)和写之后(PostToolUse)

Agent Lint 的核心差异在于执行时机不可跳过性

  • PreToolUse:在 Agent 执行工具(如 Bash、Write)之前检查——可以在代码生成之前就拦截危险操作
  • 不可跳过:exit code 2 会直接阻止操作,Agent 没有办法绕过

Hook 架构:Agent 生命周期的 12+ 个事件

Claude Code 定义了一组完整的生命周期事件,每个事件都可以挂载 Hook:

Hook 事件触发时机能否阻止?最佳用途
SessionStart会话开始加载上下文、设置环境变量
UserPromptSubmit用户发送消息上下文注入、输入验证
PreToolUse工具执行之前安全阻止、自动审批
PermissionRequest权限对话框出现自动审批/拒绝
PostToolUse工具成功执行后否*自动格式化、Lint、日志
PostToolUseFailure工具执行失败后错误处理
SubagentStart子 Agent 启动子 Agent 初始化
SubagentStop子 Agent 结束子 Agent 验证
StopAgent 完成响应任务完成验证
PreCompact上下文压缩前会话记录备份
Setup–init/–maintenance一次性设置
SessionEnd会话结束清理、日志记录

*PostToolUse 可以向 Agent 提供反馈,但无法撤销已执行的操作。

最核心的两个 Hook 是PreToolUsePostToolUse

  • PreToolUse:在 Agent 执行操作之前运行检查脚本。如果脚本返回 exit code 2,操作被阻止,stderr 的内容会发送给 Agent 作为反馈。
  • PostToolUse:在 Agent 成功执行操作之后运行处理脚本。常用于自动格式化、Lint 检查、审计日志。

Exit Code:控制机制

Hook 通过 exit code 与 Harness 运行时通信:

Exit Code含义行为
0成功Hook 正常运行,stdout 被处理
2阻止操作被停止,stderr 发送给 Agent
其他错误stderr 展示给用户,执行继续

Exit code 2 是你的核心武器。一个返回 exit code 2 的 PreToolUse Hook 可以阻止任何危险操作。一个返回 exit code 2 的 Stop Hook 可以强制 Agent 继续工作。


原理剖析

Hook 配置结构

Hook 在.claude/settings.json中配置:

{"hooks":{"PreToolUse"
http://www.rkmt.cn/news/1545139.html

相关文章:

  • 2026年婚姻家庭新趋势:廖佳律师解读法律保护伞
  • 川源(GSD)基于多年在真空负压产品领域的技术积累,产品线覆盖结构坚固的RSV真空风机、节能静音的IVR永磁变频罗茨真空机组、高效稳定的GVT空气悬浮真空泵,叠加全流程智能监控与远程管理平台,为纸巾生
  • 零成本搭建企业级营销自动化系统:Mautic完整部署与实战指南
  • 电商老板的“续命”神器!实测轻量化智能体,让小微店铺运营成本直降94%
  • 想让你的LED灯带拥有智能大脑吗?
  • 技术解析:辽宁Tracker服务器如何重塑亚洲P2P网络格局
  • 【2026年更新】山东顺坡通风气楼厂家选型指南:聚焦核心优势与避坑要点 - 品牌鉴赏官2026
  • 2026年当下,企业如何精准联系并选择武汉本地的GEO优化服务商? - 品牌鉴赏官2026
  • Android 17正式发布 系统级家长控制功能整合统一管理入口
  • 常识时政弱粉笔怎么备考?
  • UI-TARS Desktop:重新定义桌面自动化的智能工作流
  • AI 应用的隐形电费:为什么你的应用贵在 Token,而不是模型
  • 裸辞亏掉 8 万才明白,餐饮能不能赚钱,从来不靠一时热度
  • 4J36精密合金棒材国内厂家推荐,助力您的项目选材更精准 - 品牌2026
  • 依赖注入:在鸿蒙中实现简单的DI框架(43)
  • 如果有一天AI死了,我还能写代码吗
  • 【2个月 C 语言从入门到精通:零基础系统教程】第十四讲:⾃定义类型:结构体
  • 2026年中台州地区果汁瓶供应厂家信誉评估与选择指南 - 品牌鉴赏官2026
  • 2026年6月云南急速货车收购市场分析与服务商选型指南 - 品牌鉴赏官2026
  • 1985-2023年中国30米逐年森林地上生物量(AGB)数据集|高精度碳汇评估
  • 探索智能 Shell 交互新范式 详解 AI Shell 完整用法
  • 终极指南:如何使用StemRoller一键分离人声与乐器声轨
  • 基于SSM实现的员工管理系统 基于SSM的物业管理系统 基于SSM的网上书城管理系统 基于SSM的线上垃圾回收平台 基于SSM的学生信息管理系统 基于SSM的图书管理系统基于SSM的校园招聘系统
  • Java毕业设计-基于 Spring Boot 的林业资源管理系统的设计与实现 基于 Spring Boot 的林区资源信息统计管理系统(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • 一个就够了!一款All‑in‑One的AI工具,NAS部署AnythingLLM
  • 2026年6月高海拔双头炉OEM厂家的供应链重塑与价值跃迁路径 - 品牌鉴赏官2026
  • 联软科技获CMMI-5级认证:实现从规范化到量化的研发管理跃迁
  • 破解海量遥感数据处理难题,迈向智能化地球科学:AI赋能Python-GEE遥感云大数据分析、可视化与Satellite Embedding创新应用
  • 拒绝材质造假!如何甄别靠谱的HC-276管材与法兰国内生产商 - 品牌2026
  • 1天完成1周的活:基于AutoGPT的临床科研智能体实战,从数据库构建到回归分析全托管