Kiro Hooks 实用场景大全

Kiro Hooks 实用场景大全

以下按使用频率和实用性分类整理,每个 Hook 都给出完整的 JSON 配置。


一、代码质量类

1. 写入前禁止引入新依赖

防止 AI 随意引入项目中未使用的第三方库。

json 复制代码
{
  "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 注入风险的代码。

json 复制代码
{
  "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 检查。

json 复制代码
{
  "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 2>&1 | tail -20"
  }
}

4. 禁止 System.out 和 e.printStackTrace

json 复制代码
{
  "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 层的类)。

json 复制代码
{
  "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 路径规范检查

json 复制代码
{
  "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. 敏感信息泄露防护

json 复制代码
{
  "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. 事务注解完整性检查

json 复制代码
{
  "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. 提交消息前自动检查未保存的编译错误

json 复制代码
{
  "enabled": true,
  "name": "提交前编译检查",
  "version": "1.0.0",
  "description": "在 AI 执行完成后自动编译,确保没有引入编译错误。",
  "when": {
    "type": "agentStop"
  },
  "then": {
    "type": "runCommand",
    "command": "mvn compile -q 2>&1 | tail -30"
  }
}

10. 新建 Java 文件时自动补充类注释

json 复制代码
{
  "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 任务完成后自动跑单测

json 复制代码
{
  "enabled": true,
  "name": "任务完成后跑测试",
  "version": "1.0.0",
  "description": "Spec 任务完成后自动运行单元测试,确保改动未破坏现有功能。",
  "when": {
    "type": "postTaskExecution"
  },
  "then": {
    "type": "runCommand",
    "command": "mvn test -q 2>&1 | tail -30"
  }
}

12. 对话提交时提醒上下文限制

json 复制代码
{
  "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. 写入前国际化检查

json 复制代码
{
  "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 提交信息规范

json 复制代码
{
  "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. 循环中的性能陷阱检查

json 复制代码
{
  "enabled": true,
  "name": "循环性能检查",
  "version": "1.0.0",
  "description": "检查代码中是否存在循环内数据库查询、远程调用等性能陷阱。",
  "when": {
    "type": "preToolUse",
    "toolTypes": ["write"]
  },
  "then": {
    "type": "askAgent",
    "prompt": "检查即将写入的代码是否存在以下性能问题:\n1. 循环内执行数据库查询(N+1 问题,应改为批量查询)\n2. 循环内调用 Feign/HTTP 远程服务(应批量接口或并行调用)\n3. 循环内创建大对象或连接(应提到循环外)\n4. 未分页的全表查询\n5. Stream 中执行 IO 操作\n6. 字符串在循环中用 + 拼接(应用 StringBuilder)\n如发现问题,请优化后再写入。"
  }
}

16. 资源关闭检查

json 复制代码
{
  "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. 接口变更时提醒更新文档

json 复制代码
{
  "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 + 依赖管控 + 上下文限制

九、注意事项

  1. 不要贪多:Hook 越多,每次写入前的检查时间越长。建议选 3-5 个核心 Hook 即可。
  2. preToolUse 的 prompt 要具体:模糊的指令效果差,列出明确的检查项和正反例效果最好。
  3. runCommand 注意超时:编译、测试命令可能耗时较长,确保命令本身不会阻塞。
  4. 可用 enabled: false 临时关闭:调试或赶进度时可以快速禁用而不删除配置。
  5. 避免 Hook 之间冲突:多个 preToolUse + write 的 Hook 会依次执行,确保它们的指令不矛盾。