Kiro Agent的Hooks详解
从Kiro的角度看, Agent的Hooks是一组预定义的动作,在给定事件发生时被Agent调用执行,从而减少特定情况下的人为干预,如安全验证、日志转存等重复性的任务,使整个开发过程自动化、流程化。
Hooks的执行分为两个阶段,第一个是检测到匹配的事件类型,第二个是执行Hooks指定的动作。
Hooks的类型
针对触发Hooks执行的不同场景,Kiro CLI支持的Hooks分为如下类型:
- agentSpawn,初始或激活一个Agent时
- userPromptSubmit,用户发出一个Prompt给Agent时
- stop,Agent响应用户的一次请求完毕时
- preToolUse,Agent要调用一个tool时,可以根据matcher属性匹配指定的tools
- postToolUse,Agent调用一个tool完毕时,可以根据matcher匹配指定的tools
Hooks的动作
在Kiro CLI中,Agent Hooks只支持一种动作,那就是执行“shell command”。“shell command”顾名思义就是执行Shell命令,Shell命令执行默认30秒超时。命令结束后如果返回0表示执行成功,命令的stdout输出结果将被加入到Agent的上下文中。命令结束后如果返回其他值表示执行失败,命令的stderr输出结果将通知给Agent。PreToolUse类型的Hooks还会返回2,从而阻止后续Tool的执行。
Kiro IDE中还支持执行“agent prompt”的动作。“agent prompt”就是向Kiro发出一个预先定义好的问题。
Hooks的定义
Hooks是作为Agent的组成部分,在定义Agent时给出Hooks的定义。
{
"name": "taiyangdao",
"description": "Custom agent with hooks",
"hooks": {
"agentSpawn": [
{
"command": "{ echo \"Agent taiyangdao now using the editor of $(EDITOR) at $(date) - Bash command:\"; cat; echo; } >> /myworkspace/bash_audit.log",
"description": "Log agent activation timestamp"
}
],
"userPromptSubmit": [
{
"command": "echo Prompt received",
"max_output_size": 2048
"description": "Log when user submits a prompt"
}
],
"preToolUse": [
{
"matcher": "fs_write",
"command": "echo About to write a file",
"description": "Log before any file write operation"
}
],
"postToolUse": [
{
"matcher": "fs_write",
"command": "echo File write completed",
"description": "Log after file write operation"
}
],
"stop": [
{
"command": "echo We are working",
"timeout_ms": 10000
"description": "Log when assistant finishes responding"
}
]
}
}
注意:对于preToolUse和postToolUse的matcher属性,其匹配的tools的名称可以是Kiro的内部名,也可以是别名。如"fs_read"和"read"都可以。"*"表示任何tools。Kiro内置的工具如下:

在Kiro会话中查看当前Agent的Hooks如下:

我们可以看到对于用户的一个Prompt,Agent taiyangdao执行了两个Hooks,一个是userPromptSubmit,另一个是stop。因为两个Hooks都成功执行了,所以并未将执行Hooks的输出返回给Agent。通常,在定义Hooks时,会将Hooks执行的输出信息重定向到日志文件。
如果Hooks失败,则失败的错误信息会返回给Agent,Agent进而返回给用户。

更多推荐



所有评论(0)