문제
AI 에이전트에게 “이 코드 리뷰해줘”라고 하면, 분석만 하는 게 아니라 바로 코드를 수정해버리는 경우가 있음. 리뷰를 요청한 건데 리팩토링을 시작하는 상황.
특히 보안 검증 시에는 더 위험함. “이 부분 취약점 있어?”라고 물었는데 에이전트가 “고쳐놨어요”라고 하면, 뭘 바꿨는지 확인하는 데 더 시간이 걸림.
해결: 읽기전용 분석 에이전트
Kiro의 Custom Agent는 allowedTools로 사용 가능한 도구를 제한할 수 있음. 이걸 활용해서 절대 코드를 수정하지 못하는 분석 전용 에이전트를 만듦.
에이전트 구성
1
2
3
4
5
.kiro/agents/
├── analyst-code.json # 코드 분석 전용
├── analyst-design.json # 설계 리뷰 전용
├── analyst-security.json # 보안 검증 전용
└── ebt-dashboard.json # 메인 개발 에이전트
analyst-code.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "analyst-code",
"description": "코드 분석 전용 (읽기 전용, 수정 불가)",
"prompt": "너는 코드 분석 전문 에이전트다. 코드를 읽고 분석 결과만 리포트하라. 절대 코드를 수정하지 마라.\n\n분석 관점: 버그 가능성, 로직 오류, 타입 불일치, 에러 핸들링 누락, 엣지케이스",
"allowedTools": [
"read",
"@sequential-thinking",
"@serena/find_*",
"@serena/read_*",
"@serena/list_*",
"@serena/get_*",
"@serena/search_for_pattern"
]
}
핵심은 allowedTools에 write, shell, replace 같은 수정 도구를 아예 넣지 않는 것. 읽기 계열 도구만 허용하면 에이전트가 아무리 수정하고 싶어도 물리적으로 불가능함.
analyst-security.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"name": "analyst-security",
"description": "보안 검증 전용 (읽기 전용, 수정 불가)",
"prompt": "너는 보안 검증 전문 에이전트다. 코드를 읽고 보안 이슈만 리포트하라. 절대 코드를 수정하지 마라.\n\n분석 관점: 인증/인가 우회, 인젝션, 하드코딩된 시크릿, CORS 설정, 입력 검증, 권한 상승",
"allowedTools": [
"read",
"@sequential-thinking",
"@serena/find_*",
"@serena/read_*",
"@serena/list_*",
"@serena/get_*",
"@serena/search_for_pattern"
]
}
보안 에이전트는 분석 관점을 보안에 특화시킴. 같은 코드를 봐도 “인증 우회 가능성”, “하드코딩된 시크릿” 같은 관점에서만 리포트함.
analyst-design.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"name": "analyst-design",
"description": "설계 리뷰 전용 (읽기 전용, 수정 불가)",
"prompt": "너는 설계 리뷰 전문 에이전트다. 코드와 아키텍처를 읽고 설계 이슈만 리포트하라. 절대 코드를 수정하지 마라.\n\n분석 관점: 데이터 정합성, 스키마 설계, API 계약, 상태 관리, 확장성, 기존 코드와의 일관성",
"allowedTools": [
"read",
"@context7",
"@sequential-thinking",
"@serena/find_*",
"@serena/read_*",
"@serena/list_*",
"@serena/get_*",
"@serena/search_for_pattern"
]
}
설계 에이전트에는 @context7(문서 검색)을 추가로 허용. 라이브러리 공식 문서와 비교하며 설계 적합성을 판단할 수 있게 함.
사용 방법
1
2
3
4
5
6
7
8
9
10
11
# 코드 분석 요청
kiro chat --agent analyst-code
> handler.js의 에러 핸들링 누락 지점 분석해줘
# 보안 검증
kiro chat --agent analyst-security
> auth.js와 관련 미들웨어의 인증 우회 가능성 점검해줘
# 설계 리뷰
kiro chat --agent analyst-design
> 현재 DynamoDB 스키마가 조직개편 시나리오를 커버하는지 검토해줘
메인 에이전트와의 역할 분리
| 에이전트 | 역할 | 쓰기 권한 | 용도 |
|---|---|---|---|
| ebt-dashboard | 개발 | ✅ | 코드 작성, 수정, 배포 준비 |
| analyst-code | 분석 | ❌ | 버그/로직 오류 탐지 |
| analyst-design | 설계 | ❌ | 아키텍처/스키마 적합성 |
| analyst-security | 보안 | ❌ | 취약점 탐지 |
개발할 때는 메인 에이전트, 리뷰할 때는 분석 에이전트. 이렇게 분리하면 “리뷰해달라고 했는데 코드를 바꿔버렸다” 사고가 구조적으로 불가능해짐.
정리
allowedTools로 도구 접근을 제한하면 에이전트의 행동 범위를 물리적으로 통제할 수 있음- 분석 관점을 프롬프트로 특화시키면 같은 코드에서도 다른 인사이트를 얻을 수 있음
- “수정 권한이 없는 리뷰어”라는 개념은 사람 조직에서도 당연한 건데, AI에게도 동일하게 적용하면 됨