Ch5. Hooks 시스템
이벤트 기반 자동화, askAgent와 runCommand 타입, 실전 레시피
Hooks는 Kiro의 특정 이벤트 시점에 자동으로 실행되는 액션입니다. 파일 변경, 프롬프트 제출, 에이전트 실행 완료 등의 이벤트에 반응하여 자동화된 워크플로우를 구성할 수 있습니다.
이벤트 종류
주요 이벤트:
fileEdited: 파일 저장 시fileCreated: 새 파일 생성 시fileDeleted: 파일 삭제 시promptSubmit: 프롬프트 제출 시agentStop: 에이전트 실행 완료 시userTriggered: 사용자 수동 트리거
Hook 액션 타입
askAgent 타입
새로운 에이전트 세션을 시작합니다.
{
"id": "lint-on-save",
"name": "저장 시 린트 실행",
"description": "TypeScript 파일 저장 시 자동으로 린트 검사",
"eventType": "fileEdited",
"hookAction": "askAgent",
"filePatterns": "**/*.{ts,tsx}",
"outputPrompt": "방금 수정된 파일에 대해 eslint를 실행하고 발견된 문제들을 수정해주세요."
}runCommand 타입
쉘 명령을 직접 실행합니다. (promptSubmit, agentStop 이벤트에서만 사용 가능)
{
"id": "auto-format",
"name": "자동 포매팅",
"description": "에이전트 실행 완료 후 자동으로 Prettier 실행",
"eventType": "agentStop",
"hookAction": "runCommand",
"command": "npm run format"
}Hook 설정 위치
프로젝트 레벨
.kiro/hooks/
├── lint-on-save.json
├── auto-test.json
└── deploy-check.json글로벌 레벨
~/.kiro/hooks/
├── global-format.json
└── backup.json파일 패턴 매칭
filePatterns는 glob 패턴을 지원합니다:
| 패턴 | 매칭 대상 |
|---|---|
**/*.ts | 모든 TypeScript 파일 |
src/**/*.{js,jsx} | src 디렉토리의 JavaScript 파일 |
*.md | 루트의 마크다운 파일 |
!node_modules/** | node_modules 제외 |
실전 레시피
1. TypeScript 파일 저장 시 자동 린트
{
"id": "typescript-lint",
"name": "TypeScript 린트 검사",
"description": "TS/TSX 파일 저장 시 자동으로 ESLint 실행 및 수정",
"eventType": "fileEdited",
"hookAction": "askAgent",
"filePatterns": "**/*.{ts,tsx}",
"outputPrompt": "방금 수정된 TypeScript 파일에 대해 `npm run lint:fix`를 실행하고, 자동으로 수정되지 않는 문제가 있다면 코드를 직접 수정해주세요."
}2. 테스트 파일 생성 시 자동 실행
{
"id": "run-new-tests",
"name": "새 테스트 실행",
"description": "테스트 파일 생성 시 자동으로 해당 테스트 실행",
"eventType": "fileCreated",
"hookAction": "askAgent",
"filePatterns": "**/*.test.{ts,tsx,js,jsx}",
"outputPrompt": "새로 생성된 테스트 파일을 실행해서 정상 동작하는지 확인해주세요. 실패하는 테스트가 있다면 수정해주세요."
}3. 프롬프트 제출 후 자동 포매팅
{
"id": "format-after-prompt",
"name": "프롬프트 후 포매팅",
"description": "프롬프트 제출 후 자동으로 Prettier 실행",
"eventType": "promptSubmit",
"hookAction": "runCommand",
"command": "npx prettier --write . --ignore-path .gitignore"
}4. 에이전트 완료 후 Git 커밋 준비
{
"id": "prepare-commit",
"name": "커밋 준비",
"description": "에이전트 실행 완료 후 변경사항 스테이징",
"eventType": "agentStop",
"hookAction": "runCommand",
"command": "git add . && git status"
}5. 컴포넌트 파일 생성 시 스토리북 파일 생성
{
"id": "create-storybook",
"name": "스토리북 파일 생성",
"description": "React 컴포넌트 생성 시 자동으로 스토리북 파일 생성",
"eventType": "fileCreated",
"hookAction": "askAgent",
"filePatterns": "src/components/**/*.tsx",
"outputPrompt": "새로 생성된 React 컴포넌트에 대응하는 Storybook 스토리 파일(.stories.tsx)을 생성해주세요. 컴포넌트의 주요 props와 상태를 보여주는 기본적인 스토리들을 포함해주세요."
}6. 수동 트리거 - 전체 프로젝트 검토
{
"id": "project-review",
"name": "프로젝트 전체 검토",
"description": "수동으로 트리거하여 프로젝트 전체 코드 품질 검토",
"eventType": "userTriggered",
"hookAction": "askAgent",
"outputPrompt": "프로젝트 전체를 검토하여 다음 사항들을 확인해주세요: 1) 코드 품질 및 일관성 2) 보안 취약점 3) 성능 최적화 기회 4) 문서화 누락 부분. 발견된 문제점들과 개선 제안을 정리해주세요."
}Hook 관리 명령어
VS Code 명령 팔레트에서
Ctrl/Cmd + Shift + P
> Kiro: Manage Hooks
> Kiro: Create New Hook
> Kiro: Trigger HookHook UI 패널
Ctrl/Cmd + Shift + P
> Kiro: Open Hook UITask Hooks (v0.10+)
v0.10부터 태스크 실행 전후에 트리거되는 Hook이 추가되었습니다.
Pre Task Execution
태스크 시작 전 셋업 스크립트나 전제조건을 검증합니다.
{
"id": "pre-task-setup",
"name": "태스크 전 환경 확인",
"description": "태스크 시작 전 의존성 및 환경 검증",
"eventType": "preTaskExecution",
"hookAction": "runCommand",
"command": "npm run typecheck && npm run lint"
}Post Task Execution
태스크 완료 후 테스트, 린팅, 외부 시스템 알림 등을 실행합니다.
{
"id": "post-task-notify",
"name": "태스크 완료 알림",
"description": "태스크 완료 후 Slack 알림 전송",
"eventType": "postTaskExecution",
"hookAction": "runCommand",
"command": "curl -X POST $SLACK_WEBHOOK -d '{\"text\": \"Task completed\"}'"
}Tool Invocation Hooks (v0.9+)
v0.9부터 특정 도구 사용 전후에 트리거되는 Hook이 추가되었습니다. 도구 카테고리(read/write/shell/web) 또는 와일드카드 이름 필터를 지원합니다.
Pre Tool Use
특정 도구를 차단하거나 실행 전 추가 컨텍스트를 제공합니다.
{
"id": "pre-write-check",
"name": "파일 쓰기 전 검증",
"eventType": "preToolUse",
"hookAction": "runCommand",
"toolCategory": "write",
"command": "echo 'Validating write operation...'"
}Post Tool Use
도구 사용 후 로깅, 코드 포맷팅, 후속 지시를 실행합니다.
{
"id": "post-shell-log",
"name": "쉘 명령 로깅",
"eventType": "postToolUse",
"hookAction": "runCommand",
"toolCategory": "shell",
"command": "echo \"$(date): Shell command executed\" >> .kiro/audit.log"
}주의사항
보안 주의
Hooks는 현재 사용자 권한으로 실행됩니다. 외부에서 가져온 훅 설정은 반드시 검토하세요.
성능 고려
너무 많은 Hook이 설정되면 성능에 영향을 줄 수 있습니다. 필요한 Hook만 활성화하세요.
참고 문서
- Kiro 공식 사이트: https://kiro.dev
- Hooks 문서: https://kiro.dev/docs/hooks/
- Kiro 문서: https://kiro.dev/docs