문제

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"
  ]
}

핵심은 allowedToolswrite, 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에게도 동일하게 적용하면 됨