좋은 에이전트 시스템은 보통 화려한 기능보다 지루한 경계선에서 버틴다.
입력 계약, 권한 구분, 세션 수명주기, 로그, cleanup. 이런 거 말이다.
사람이 보기에 재미없는 부분인데, 실제로는 여기서 런타임 품질이 갈린다.
Quick Answer
- 에이전트 런타임이 망가질 때는 대개 모델이 갑자기 멍청해져서가 아니라 capability 경계가 흐려져서다.
- 가장 흔한 실수는
read와 write를 한 칸에 넣기,외부 write를 local write처럼 다루기,긴 세션을 한 몸으로 끌기,cleanup 없는 상태 축적,실패 후 복구 경로 부재다.
런타임은 똑똑함보다 경계선으로 산다.
이 글이 필요한 사람
- Claude Code, Codex, Cursor, 자체 에이전트를 운영해본 사람
- 프롬프트보다 운영 구조에서 더 자주 망하는 걸 느낀 사람
- capability, permission, lifecycle 문서를 아직 대충 적고 있는 사람
지금 결론
| 실수 | 왜 위험한가 |
|---|---|
| read/write 혼합 | 사고 범위 예측이 어려움 |
| external write 축소평가 | 되돌리기 어려움 |
| 세션 비만 | 규칙이 흐려짐 |
| cleanup 부재 | 상태 오염 누적 |
| 복구 경로 없음 | 실패가 장기 장애가 됨 |
실수 1. read와 write를 같은 capability처럼 다루는 것
많은 시스템이 여기서 이미 미끄러진다.
- 파일 읽기
- 파일 수정
- 원격 발행
- 삭제/이동
이걸 다 “도구 사용” 한 단어로 묶어버린다.
그러면 어떤 일이 생기냐.
- 승인 정책이 흐려진다
- 로그 해석이 어려워진다
- 사고 시 원인 추적이 늦어진다
read는 정보 수집이고, write는 상태 변경이다. 이 둘은 애초에 다른 capability다.
실수 2. external write를 local write처럼 보는 것
이건 특히 자주 나온다.
로컬 파일 수정과 외부 발행을 같은 write로 두면 편해 보인다.
근데 실제론 다르다.
- 로컬 수정은 되돌리기 쉽다
- 외부 write는 이미 세상에 흔적이 남는다
워드프레스 발행, 배포, 시트 수정, 거래 API 호출은 같은 write가 아니다.
이걸 따로 안 빼면 시스템은 편해지고 운영은 불안해진다.
실수 3. 긴 세션을 하나의 뇌로 계속 끌고 가는 것
데모에선 한 세션이 다 한다.
실전은 다르다.
- 조사
- 수정
- 리뷰
- 발행
이걸 한 세션에서 오래 끌면 컨텍스트도 비만해지고 규칙도 흐려진다.
처음엔 “이 세션은 조사만”이었는데 끝날 땐 발행까지 해버리는 식이다.
긴 세션이 문제라기보다 단계 분리 없는 긴 세션이 문제다.
실수 4. cleanup 없는 상태 축적
좋은 런타임은 시작보다 종료가 중요할 때가 많다.
근데 많은 시스템은 시작만 설계하고 끝은 비워둔다.
- temp 파일 정리 안 함
- lock 해제 안 함
- 세션 로그 종료 처리 안 함
- 미완료 작업 상태가 어정쩡하게 남음
이게 쌓이면 다음 실행이 오염된다.
그리고 이건 눈에 안 띄어서 더 짜증난다. 조용히 품질을 갉아먹는다.
실수 5. 실패 후 복구 경로를 문서화하지 않는 것
에이전트 시스템은 실패한다. 이건 전제다.
문제는 실패 자체가 아니라 실패했을 때 어디로 돌아오느냐다.
최소한 아래는 있어야 한다.
- 중단 시 상태 파일 위치
- 재시도 가능한 단계
- 사람이 이어받는 방법
- cleanup 기준
이게 없으면 실패가 곧 장애가 된다.
capability 경계를 지키는 최소 표
이런 표 하나만 있어도 운영이 꽤 쉬워진다.
| capability | read | write | external side effect | cleanup |
|---|---|---|---|---|
| search vault | 있음 | 없음 | 없음 | 불필요 |
| edit draft | 있음 | 있음 | 없음 | git/diff |
| publish post | 있음 | 있음 | 있음 | URL/시트 sync |
| trade order | 있음 | 있음 | 매우 큼 | 강한 로그/승인 |
이 표의 좋은 점은 도구 이름보다 행동 구조가 먼저 보인다는 거다.
런타임이 무너지는 신호
아래 신호가 보이면 capability 경계를 다시 봐야 한다.
1. 왜 승인 요청이 뜨는지 설명이 안 된다
권한 모델이 불명확하단 뜻이다.
2. 같은 세션이 조사, 수정, 발행을 다 한다
lane이 무너진 거다.
3. 실패 후 temp나 lock이 자꾸 남는다
cleanup이 설계되지 않았다.
4. 로그는 있는데 복구 순서가 없다
기록은 있는데 운영 절차가 없는 상태다.
실수 TOP 5 요약
- read/write 혼합
- external write 축소평가
- 세션 단계 분리 실패
- cleanup 부재
- 복구 문서 부재
이 다섯 개는 사실 별거 아닌 것처럼 보이는데, 별거 아닌 것치고 시스템을 꽤 잘 부순다.
FAQ
Q. capability 문서는 얼마나 자세해야 하나
처음엔 read, write, external side effect, cleanup 네 칸만 있어도 충분히 도움이 된다.
Q. 세션을 꼭 여러 개로 나눠야 하나
무조건은 아니지만, 조사와 발행은 분리하는 게 대체로 낫다.
Q. Claude Code 사례에서 제일 배운 건 뭔가
도구를 함수가 아니라 계약 묶음처럼 보는 관점이다.
다음에 읽을 글
- Claude Code 소스맵 유출에서 개발자가 진짜 배워야 할 것 2026 — 2.1.88·kairos·buddy보다 중요한 운영 체크리스트
- Claude Code 권한 설계 체크리스트 2026 — hooks·subagents·세션 분리 어디서부터 막아야 하나
- Claude Code 팀 보안 운영 룰 2026 — 승인 루프·로그·비밀정보 경계선 정리
출처와 전제
- 이 글은 Claude Code 소스맵 이슈에서 읽힌 capability/lifecycle 관점을 런타임 실수 패턴으로 다시 묶은 후속이다.
- 특정 제품 내부 구현 재현이 아니라 운영 구조 학습용 정리다.