에이전트 역할 분리 — 입력을 좁혀 성공 기준을 가른다
언제: 실패를 기계적으로 열거할 수 있고, 그걸 반복해서 고쳐야 할 때.
확인: 리뷰어가 tsc·eslint가 통과시키는 지점을 잡고 있는가. 그게 이 역할의 존재 가치 전부다 — effect 의존성의 의미 변화, 이벤트 핸들러의 eager/lazy, ??와 ||의 단축평가 차이, 리렌더 타이밍, 정리 함수 누락. 린터가 잡을 걸 잡고 있으면 프롬프트가 헐거운 것이다.
에이전트 코딩 환경 — 워크트리·포트·자격증명
언제 — 워크트리를 여럿 띄웠는데 서로의 서버를 죽이거나, 의존성 검증이 거짓 통과하거나, 새 워크트리에서 첫 명령이 실패할 때.
| 질문 | 아니오 | 예 |
|---|---|---|
| 24시간 켜진 별도 호스트가 있나 | R8 폐기 | R8까지 |
| 폰·외부 머신에서 세션을 이어받나 | R4를 localhost 포트 격리로 축소 | R4를 프록시 + tailnet URL로 |
| 네이티브 API(Vision·Swift 바인딩)에 의존하나 | R5의 컨테이너 격리 가능 | 컨테이너 불가 — 호스트 직접 실행 + 토큰 축소로만 |
R1. 워크트리를 프로젝트 밖으로
확인 — 훅에 WorktreeCreate 입력을 직접 넣으면 경로 한 줄만 나온다. 그 워크트리에서 의존성을 resolve 하면 워크트리 안 경로가 나온다 — 밖이면 격리가 안 된 것이다.
R2. 워크트리별 결정적 포트
R3. gitignore 된 파일 승계
R4. 프리뷰 서버 규약
R5. 자격증명 축소가 먼저다
확인 — gh auth status 로 스코프를 본다.
R6·R7. 전역 설정과 설계 결정을 세션 밖으로
확인 — 나중에 “왜 이렇게 했지?“를 물었을 때 리포 안에서 답이 나오면 성공. git log 와 트랜스크립트를 뒤져야 하면 실패.
R8. 원격 호스트 (조건부)
에이전트 신뢰 구축 — 검증 경로부터 자동 머지까지
| # | 원칙 | 위반 신호 |
|---|---|---|
| P1 | 에이전트가 스스로 실행해서 확인할 수 없는 작업은 위임하지 않는다 | 스크린샷을 복붙하고 있다 |
| P2 | 구현자와 검증자는 다른 컨텍스트여야 한다 | “수정 완료했습니다”를 구현자가 말한다 |
| P3 | 소프트 규칙(문서·프롬프트)은 신뢰의 근거가 아니다 | CLAUDE.md 에 적었는데 안 지킨다 |
| P4 | 가장 짧은 경로가 정답 경로가 되도록 설계한다 | 에이전트가 매번 우회로를 찾는다 |
| P5 | 사람이 리뷰로 강제하는 불변식은 전부 코드 스멜이다 | 같은 지적을 두 번 했다 |
R00·R01. 거르고 구간 확정
확인 — “지금 에이전트가 만든 PR 을 읽지 않고 머지한다면, 문제가 생겼을 때 며칠 뒤에 알게 되는가?” “모른다”면 구간 0이다.
R02. 검증 스킬 부트스트랩
{
"verdict": "pass | fail | cannot_verify",
"steps_taken": ["실제 실행한 명령"],
"evidence": ["관찰한 원문 출력"],
"unverified": ["실행으로 확인 못 한 항목"]
}
확인 — 같은 버그를 3번 던졌을 때 steps_taken 이 일관되면 통과.
R03. feature map
R04. 실패 모드를 스킬로 승격
R05. eval 하네스
R06. 강제 계층 배치
R07. 리뷰 코멘트를 하드 제약으로
R08. 그린필드 가드레일
확인 — 새 기능 하나를 시켜보고 몇 개 디렉터리를 건드렸는지 센다. 3개를 넘으면 구조가 잘못됐다.