写完一个函数,保存文件的那一刻,后台 Agent 自动帮你生成单元测试。
听起来像未来,但 Kiro 的 Agent Hooks 已经做到了。
先说痛点
我的日常开发流程大概是这样的:
- 写完一个函数
- 手动跑一遍 lint
- 手动写单测(或者偷懒不写)
- 手动更新 README(或者偷懒不更新)
- 提 PR 被 review 说"测试呢?文档呢?"
- 回去补……
这个循环一天重复 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 吗?区别在于:
- 智能程度不同:传统 hook 是规则匹配,Agent Hook 是理解语义。它能"为这个新函数写测试"而不只是"检查有没有测试文件"
- 实时性不同:不用等到 commit 才触发,保存就能跑
- 生成能力:传统 hook 只能检查和格式化,Agent Hook 能创建新内容(测试、文档、代码)
- 自然语言配置:prompt 比正则表达式好写多了
当然,CI 流水线还是要有的。Agent Hook 是开发时的即时反馈,CI 是最终的质量门禁,两者互补。
团队协作
把 .kiro/hooks.json 提交到仓库后,团队所有人 clone 下来就自动生效。
几个实际好处:
- 新人入职不用记"改了 API 要同步文档"这种潜规则
- Code Review 不用再反复说"加个测试"
- 团队代码风格自动统一,不靠自觉
注意事项
用了一段时间总结几点:
- Prompt 要具体:写"生成测试"不如写"用 Jest + React Testing Library 生成,覆盖正常输入和空值边界,mock 外部 API 调用"
- Scope 要精确:别用
**/*全匹配,文件太多 Agent 会很慢 - 先从简单的开始:auto-docs 和 lint-fix 这种低风险的先上,测试生成熟了再开
- 配合 .gitignore:Agent 生成的文件如果是中间产物,记得加到 ignore 里
小结
Agent Hooks 本质上是把"好习惯"自动化了。
写测试是好习惯,但手动写太烦所以经常偷懒。更新文档是好习惯,但改完代码都忘了。加类型注解是好习惯,但存量太多没动力。
现在这些好习惯有个 Agent 替你守着,你负责写核心逻辑就行。
Kiro Agent Hooks 文档:https://kiro.dev/docs/hooks/
Kiro 由亚马逊云科技提供支持。Agent Hooks 功能在 Kiro IDE 和 CLI 版本中均可使用。
