
Kiro Hooks 实用场景大全以下按使用频率和实用性分类整理每个 Hook 都给出完整的 JSON 配置。一、代码质量类1. 写入前禁止引入新依赖防止 AI 随意引入项目中未使用的第三方库。{enabled:true,name:禁止引入未审批依赖,version:1.0.0,description:在写入 pom.xml 或 build.gradle 前检查是否引入了项目中未使用的新依赖。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:如果即将写入的文件是 pom.xml 或 build.gradle请检查\n1. 是否引入了项目中尚未使用的新依赖\n2. 如果是新依赖是否能用项目已有的库替代\n3. 新依赖是否使用了固定版本号禁止 LATEST/RELEASE\n4. 是否与项目现有依赖版本冲突\n如果引入了不必要的新依赖请使用项目已有的库替代。}}2. SQL 安全审查防止生成有 SQL 注入风险的代码。{enabled:true,name:SQL 安全审查,version:1.0.0,description:写入 MyBatis XML 或包含 SQL 的 Java 代码时检查是否存在 SQL 注入风险。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:如果即将写入的内容包含 SQL 或 MyBatis XML请检查\n1. 是否使用了 ${} 拼接应使用 #{}\n2. 动态表名/列名是否做了白名单校验\n3. LIKE 查询是否正确转义了 % 和 _\n4. IN 语句是否使用了 foreach 而非字符串拼接\n5. ORDER BY 动态字段是否做了白名单限制\n如有安全风险请修正后再写入。}}3. 写入后自动 CheckStyle文件写入后自动运行 CheckStyle 检查。{enabled:true,name:写入后 CheckStyle,version:1.0.0,description:Java 文件被 AI 写入后自动运行 CheckStyle 检查。,when:{type:postToolUse,toolTypes:[write]},then:{type:runCommand,command:mvn checkstyle:check -q 21 | tail -20}}4. 禁止 System.out 和 e.printStackTrace{enabled:true,name:禁止控制台直接输出,version:1.0.0,description:检查写入的代码是否包含 System.out 或 e.printStackTrace应使用 Slf4j 日志框架。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:检查即将写入的 Java 代码\n1. 是否包含 System.out.println 或 System.err.println应使用 log.info/log.error\n2. 是否包含 e.printStackTrace()应使用 log.error(\msg\, e)\n3. 是否包含 System.currentTimeMillis() 用于计时应使用 StopWatch\n如有违规请替换为正确写法后再写入。}}注博客https://blog.csdn.net/badao_liumang_qizhi二、架构守护类5. 分层依赖方向检查防止出现逆向依赖如 Entity 引用 Controller 层的类。{enabled:true,name:分层架构依赖方向检查,version:1.0.0,description:检查代码是否违反分层架构的依赖方向Controller → Service → Repository禁止反向引用。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:检查即将写入代码的 import 语句和类引用\n1. Service 层是否引用了 Controller 层的类禁止\n2. Repository/Mapper 层是否引用了 Service 层的类禁止\n3. Entity/Model 层是否引用了 Service 或 Controller 的类禁止\n4. DTO 是否引用了 Entity应通过 Converter 转换\n5. Controller 是否直接操作 Repository应通过 Service\n合法方向Controller → Service → Repository → Entity\n如有违反请调整后再写入。}}6. API 路径规范检查{enabled:true,name:API 路径规范,version:1.0.0,description:检查新增的 API 路径是否符合项目 RESTful 命名规范。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:如果写入的代码包含 RequestMapping/GetMapping/PostMapping 等注解请检查\n1. 路径是否使用小写字母和连字符禁止驼峰\n2. 路径是否以 /api/ 开头\n3. 资源名是否使用名词复数形式\n4. 是否避免了动词出现在路径中动作用 HTTP Method 表达\n5. 路径层级是否不超过 4 级\n如不符合请修正路径后再写入。}}三、安全防护类7. 敏感信息泄露防护{enabled:true,name:敏感信息检查,version:1.0.0,description:防止 AI 在代码中硬编码密码、密钥、Token 等敏感信息。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:检查即将写入的内容是否包含\n1. 硬编码的密码、密钥、Token、Secret\n2. 明文的数据库连接字符串含用户名密码\n3. 内网 IP 地址或真实域名\n4. 手机号、身份证号等 PII 数据测试数据也不行\n5. 私钥或证书内容\n如发现以上内容请替换为配置引用如 ${xxx} 占位符或脱敏后再写入。}}8. 事务注解完整性检查{enabled:true,name:事务注解检查,version:1.0.0,description:确保数据库写操作方法都正确使用了事务注解。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:如果写入的 Service 方法涉及数据库写操作insert/update/delete请检查\n1. 是否添加了 Transactional(rollbackFor Exception.class)\n2. 多表操作是否在同一事务中\n3. 只读查询方法是否使用了 Transactional(readOnly true)\n4. 是否存在事务方法内调用本类其他事务方法会导致事务失效\n5. 是否有事务提交后才能执行的操作应使用 TransactionSynchronization\n如有遗漏请补充后再写入。}}四、开发效率类9. 提交消息前自动检查未保存的编译错误{enabled:true,name:提交前编译检查,version:1.0.0,description:在 AI 执行完成后自动编译确保没有引入编译错误。,when:{type:agentStop},then:{type:runCommand,command:mvn compile -q 21 | tail -30}}10. 新建 Java 文件时自动补充类注释{enabled:true,name:新文件自动添加类注释,version:1.0.0,description:新建 Java 文件时提醒 AI 添加标准类注释头。,when:{type:fileCreated,patterns:[*.java]},then:{type:askAgent,prompt:检测到新建了 Java 文件请确保文件包含标准类注释\n/**\n * 类功能描述.\n *\n * author AI-Generated\n * since 当前日期\n */\n如果缺少请补充。}}11. Spec 任务完成后自动跑单测{enabled:true,name:任务完成后跑测试,version:1.0.0,description:Spec 任务完成后自动运行单元测试确保改动未破坏现有功能。,when:{type:postTaskExecution},then:{type:runCommand,command:mvn test -q 21 | tail -30}}12. 对话提交时提醒上下文限制{enabled:true,name:对话提交上下文提醒,version:1.0.0,description:每次提交消息时提醒 AI 只关注 src/main 目录避免分析无关文件。,when:{type:promptSubmit},then:{type:askAgent,prompt:请注意分析代码时只关注 src/main/java 和 src/main/resources 目录。忽略 test、node_modules、target、build、.idea 等目录。不要主动扫描整个代码库。}}五、团队协作类13. 写入前国际化检查{enabled:true,name:国际化 key 检查,version:1.0.0,description:确保异常信息和提示文案使用国际化 key 而非硬编码中文字符串。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:检查即将写入的 Java 代码\n1. 抛出异常时是否使用了国际化 key如 throw new BaDaoException(\order.not.found\)而非中文字符串\n2. 返回给前端的 message 是否使用 i18n key\n3. 日志中的中文是可以保留的日志不需要国际化\n如果异常或返回消息中硬编码了中文请替换为对应的 i18n key。}}14. Git 提交信息规范{enabled:true,name:Commit Message 规范,version:1.0.0,description:执行 shell 命令时如果是 git commit检查提交信息是否符合 Conventional Commits 规范。,when:{type:preToolUse,toolTypes:[shell]},then:{type:askAgent,prompt:如果即将执行的命令是 git commit请检查提交信息是否符合规范\n格式type(scope): description\n\ntype 必须是以下之一feat/fix/docs/style/refactor/perf/test/chore/ci\nscope 是可选的模块名\ndescription 使用中文不超过 50 字\n\n示例feat(order): 新增订单批量导出功能\n\n如不符合请修正 commit message。}}六、性能与资源类15. 循环中的性能陷阱检查{enabled:true,name:循环性能检查,version:1.0.0,description:检查代码中是否存在循环内数据库查询、远程调用等性能陷阱。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:检查即将写入的代码是否存在以下性能问题\n1. 循环内执行数据库查询N1 问题应改为批量查询\n2. 循环内调用 Feign/HTTP 远程服务应批量接口或并行调用\n3. 循环内创建大对象或连接应提到循环外\n4. 未分页的全表查询\n5. Stream 中执行 IO 操作\n6. 字符串在循环中用 拼接应用 StringBuilder\n如发现问题请优化后再写入。}}16. 资源关闭检查{enabled:true,name:资源关闭检查,version:1.0.0,description:确保 IO 流、数据库连接等资源在使用后正确关闭。,when:{type:preToolUse,toolTypes:[write]},then:{type:askAgent,prompt:检查即将写入的代码中的资源使用\n1. InputStream/OutputStream 是否使用 try-with-resources\n2. Connection/Statement/ResultSet 是否正确关闭\n3. Redis 连接是否归还连接池\n4. 线程池是否有优雅关闭逻辑\n5. 定时任务中的资源是否有清理\n如有资源泄漏风险请用 try-with-resources 或 finally 修正。}}七、文档类17. 接口变更时提醒更新文档{enabled:true,name:接口文档同步提醒,version:1.0.0,description:修改 Controller 文件后提醒检查 Swagger/OpenAPI 注解是否同步更新。,when:{type:fileEdited,patterns:[*Controller.java]},then:{type:askAgent,prompt:检测到 Controller 文件被修改请检查\n1. 新增/修改的接口是否添加了 Operation(summary) 注解\n2. 请求参数是否添加了 Parameter 或 Schema 注解\n3. 返回值 DTO 的字段是否有 Schema(description) 注解\n4. 废弃的接口是否标注了 Deprecated\n如有遗漏请补充。}}八、Hook 选择建议项目阶段推荐 Hook项目初期命名规范 分层检查 敏感信息防护快速迭代期编译检查 单测 性能陷阱团队协作期Commit 规范 国际化 文档同步安全审计期SQL 安全 事务检查 资源关闭全部阶段通用禁止 System.out 依赖管控 上下文限制九、注意事项不要贪多Hook 越多每次写入前的检查时间越长。建议选 3-5 个核心 Hook 即可。preToolUse 的 prompt 要具体模糊的指令效果差列出明确的检查项和正反例效果最好。runCommand 注意超时编译、测试命令可能耗时较长确保命令本身不会阻塞。可用enabled: false临时关闭调试或赶进度时可以快速禁用而不删除配置。避免 Hook 之间冲突多个 preToolUse write 的 Hook 会依次执行确保它们的指令不矛盾。