Kiro Agent Hooks:文件一保存,AI 自动帮你跑测试、补文档、查规范

写完一个函数,保存文件的那一刻,后台 Agent 自动帮你生成单元测试。

听起来像未来,但 Kiro 的 Agent Hooks 已经做到了。

先说痛点

我的日常开发流程大概是这样的:

  1. 写完一个函数
  2. 手动跑一遍 lint
  3. 手动写单测(或者偷懒不写)
  4. 手动更新 README(或者偷懒不更新)
  5. 提 PR 被 review 说"测试呢?文档呢?"
  6. 回去补……

这个循环一天重复 N 次。每次都是"我知道该做但太烦了"的事。

Agent Hooks 的思路很直接:把这些"该做但烦"的事交给 AI Agent 自动干。你定义好触发条件和任务描述,之后每次触发时 Agent 在后台默默执行,你继续写代码不被打断。

什么是 Agent Hooks

Agent Hooks 是 Kiro 里的事件驱动 Agent 系统。核心概念:

  • 触发器(Trigger):什么时候执行。比如文件保存、Git commit、文件创建等
  • Prompt:让 Agent 干什么。用自然语言描述任务
  • 范围(Scope):在哪些文件/目录上生效

三者组合起来就是一个 Hook。你可以设置多个 Hook 并行运行。

快速上手

在 Kiro 里创建一个 Hook:

kiro hooks add --trigger "on-save" --scope "src/**/*.ts" \
  --prompt "为修改的函数生成或更新对应的单元测试,放在 tests/ 目录下,使用 Jest 框架"

搞定。以后只要 src/ 下的 TypeScript 文件一保存,Agent 就会自动检查哪些函数变了,然后生成或更新测试文件。

也可以通过配置文件来管理,在项目根目录创建 .kiro/hooks.json

{
  "hooks": [
    {
      "name": "auto-test",
      "trigger": "on-save",
      "scope": ["src/**/*.ts", "src/**/*.tsx"],
      "prompt": "为修改的函数生成 Jest 单元测试。覆盖正常路径和边界情况。文件放在 __tests__/ 目录,命名用 {filename}.test.ts"
    },
    {
      "name": "auto-docs",
      "trigger": "on-save",
      "scope": ["src/api/**/*.ts"],
      "prompt": "检查函数的 JSDoc 注释是否与实现一致,不一致则更新。包含参数类型、返回值和简短描述"
    },
    {
      "name": "lint-check",
      "trigger": "on-save",
      "scope": ["**/*.py"],
      "prompt": "检查代码是否符合 PEP 8 规范,如果有明显问题直接修复(如多余空行、import 顺序)。不改变逻辑"
    }
  ]
}

把这个文件提交到 Git,团队所有人都能用同样的自动化规则。

触发器类型

目前 Kiro 支持这些触发事件:

触发器 描述 适用场景
on-save 文件保存时 自动测试、格式化、文档更新
on-create 新文件创建时 自动生成样板代码、初始化配置
on-commit Git commit 时 commit message 生成、changelog 更新
on-error 检测到错误时 自动修复语法错误、类型错误

最常用的是 on-save,基本上覆盖了 80% 的自动化场景。

实战案例

讲几个我实际在用的 Hook 配置:

案例 1:API 路由变更自动更新 OpenAPI Spec

后端加了新接口,经常忘记同步 OpenAPI 文档。设了这个 Hook 后就不用操心了:

{
  "name": "sync-openapi",
  "trigger": "on-save",
  "scope": ["src/routes/**/*.ts"],
  "prompt": "检查路由文件的变更,更新 docs/openapi.yaml 中对应的路径定义。保持 schema 与实际 handler 的入参出参一致"
}

每次改路由文件,Agent 自动去更新 OpenAPI spec。再也不会出现"文档和代码对不上"的问题。

案例 2:新建组件自动生成 Story

前端项目用 Storybook,每个组件都应该有对应的 Story 文件。但手动创建太烦了:

{
  "name": "auto-story",
  "trigger": "on-create",
  "scope": ["src/components/**/*.tsx"],
  "prompt": "为新创建的 React 组件生成 Storybook Story 文件。包含默认 props 的基础渲染和 2-3 个变体。放在同目录下,命名为 {Component}.stories.tsx"
}

新建一个 Button.tsx,Agent 自动在旁边生成 Button.stories.tsx,带上几个默认变体。

案例 3:Python 项目自动 Type Hints

历史项目没有类型注解,想渐进式加上去:

{
  "name": "add-types",
  "trigger": "on-save",
  "scope": ["src/**/*.py"],
  "prompt": "为修改的函数添加 Type Hints。根据函数体的实际使用推断参数和返回值类型。如果已有类型注解则跳过。使用 typing 模块的标准类型"
}

每次改 Python 文件,Agent 自动给你加上类型注解。不用一次性给整个项目加,改到哪里加到哪里。

案例 4:Commit 自动生成 Changelog

{
  "name": "update-changelog",
  "trigger": "on-commit",
  "scope": ["**"],
  "prompt": "根据 commit 内容更新 CHANGELOG.md。使用 Keep a Changelog 格式,自动分类为 Added/Changed/Fixed/Removed。日期用今天"
}

Agent 怎么在后台跑

有个问题你可能会问:Agent 在后台跑,不会影响我写代码吗?

答案是不会。Kiro 的 Hook Agent 运行在独立进程里,和你的编辑体验完全隔离。就算 Agent 在后台分析一个复杂文件花了 30 秒,你的编辑器一点都不会卡。

Agent 完成任务后会通过小通知告诉你:"已为 userService.ts 生成 3 个新测试用例"。你可以选择查看改动、接受、或者忽略。

如果 Agent 生成的东西你不满意,直接 Ctrl+Z 就行。

和 CI/CD 的区别

你可能觉得这不就是本地跑个 pre-commit hook 吗?区别在于:

  1. 智能程度不同:传统 hook 是规则匹配,Agent Hook 是理解语义。它能"为这个新函数写测试"而不只是"检查有没有测试文件"
  2. 实时性不同:不用等到 commit 才触发,保存就能跑
  3. 生成能力:传统 hook 只能检查和格式化,Agent Hook 能创建新内容(测试、文档、代码)
  4. 自然语言配置:prompt 比正则表达式好写多了

当然,CI 流水线还是要有的。Agent Hook 是开发时的即时反馈,CI 是最终的质量门禁,两者互补。

团队协作

.kiro/hooks.json 提交到仓库后,团队所有人 clone 下来就自动生效。

几个实际好处:

  • 新人入职不用记"改了 API 要同步文档"这种潜规则
  • Code Review 不用再反复说"加个测试"
  • 团队代码风格自动统一,不靠自觉

注意事项

用了一段时间总结几点:

  1. Prompt 要具体:写"生成测试"不如写"用 Jest + React Testing Library 生成,覆盖正常输入和空值边界,mock 外部 API 调用"
  2. Scope 要精确:别用 **/* 全匹配,文件太多 Agent 会很慢
  3. 先从简单的开始:auto-docs 和 lint-fix 这种低风险的先上,测试生成熟了再开
  4. 配合 .gitignore:Agent 生成的文件如果是中间产物,记得加到 ignore 里

小结

Agent Hooks 本质上是把"好习惯"自动化了。

写测试是好习惯,但手动写太烦所以经常偷懒。更新文档是好习惯,但改完代码都忘了。加类型注解是好习惯,但存量太多没动力。

现在这些好习惯有个 Agent 替你守着,你负责写核心逻辑就行。

Kiro Agent Hooks 文档:https://kiro.dev/docs/hooks/


Kiro 由亚马逊云科技提供支持。Agent Hooks 功能在 Kiro IDE 和 CLI 版本中均可使用。

posted @ 2026-05-29 20:00  亚马逊云开发者  阅读(7)  评论(0)    收藏  举报