3장

가드레일과 권한 모델

서브에이전트를 만들고 호출하는 법은 4장에서 손으로 익히게 된다. 그 전에, "이 에이전트가 무엇을 해도 되고 무엇은 안 되는가"를 먼저 정하지 않으면 실습 중에도 실무에서도 사고가 난다. 이 장은 2장에서 잠깐 언급했던 "가드레일"을 실제로 어떻게 설계하는지 다룬다.

이 장에서 다루는 것
  • 가드레일이 왜 필요한지(자율성이 커질수록 실수의 파급력도 커진다)
  • 읽기/쓰기/파괴적 작업 세 단계로 위험을 분류하는 방법
  • tools 필드로 서브에이전트에 최소 권한만 부여하는 법
  • 오케스트레이터가 사람의 승인을 반드시 기다려야 하는 지점(게이트) 설계
  • worktree·sandbox로 병렬 작업을 물리적으로 격리하는 이유
  • 사고가 난 뒤 "무슨 일이 있었는지" 추적하기 위한 최소한의 로그 습관

왜 가드레일이 필요한가

2장에서 하네스를 "말이 마음대로 아무 방향으로나 달리지 않도록 잡아 주는 마구"에 비유했다. 가드레일은 그 마구 중에서도 특히 "이 방향으로는 절대 가면 안 된다"는 울타리에 해당한다. 서브에이전트가 파일을 읽고 요약하는 정도라면 실수해도 되돌리기 쉽지만, 파일을 삭제하거나 커밋·배포까지 자동으로 하게 되면 실수 하나가 되돌리기 어려운 결과로 이어진다.

문제는 "능력"과 "위험"이 같은 방향으로 커진다는 점이다. 에이전트에게 더 많은 도구·더 넓은 권한을 줄수록 처리할 수 있는 일은 늘어나지만, 잘못 판단했을 때의 피해 범위도 함께 늘어난다. 가드레일은 이 둘을 분리한다. "할 수 있는 일"은 넓게 열어 두되, "사람 확인 없이 실행해도 되는 일"은 좁게 제한하는 식이다.

가드레일의 목적은 에이전트를 못 미더워하는 것이 아니라, 실수의 파급력을 사람이 감당할 수 있는 크기로 미리 잘라 두는 것이다.

위험 작업을 세 단계로 분류하기

모든 작업을 똑같은 강도로 통제하면 실무에서 쓸 수 없을 만큼 느려진다. 실제로는 작업을 되돌릴 수 있는 정도에 따라 세 단계로 나눠 다르게 다루는 것이 현실적이다.

단계예시기본 정책
읽기(Read)파일 읽기, 코드 검색, 웹 조회대체로 자유롭게 허용(되돌릴 필요가 없다)
쓰기(Write)파일 생성·수정, 로컬 커밋허용하되 결과를 검토(git으로 되돌릴 수 있는 범위)
파괴적/외부 영향(Destructive/External)파일·브랜치 삭제, 강제 푸시, 배포, 결제, 외부 메시지 발송사람의 명시적 승인 없이는 절대 실행 금지
위험 의사결정 흐름도
이 작업은 되돌릴 수 있는가?
Yes — 되돌릴 수 있음
읽기 전용
최소 권한 tools 필드
tools: Read, Grep
쓰기 (가역)
최소 권한 + 감사 로그
git으로 되돌릴 가능
No — 되돌릴 수 없음
파괴적 / 외부 영향
사람 승인 게이트 필수
자동 실행 절대 금지
명시적 확인 후에만 진행

이 3단계 분류는 이 핸드북이 참고한 워크스페이스 문서의 실제 규칙과도 일치한다. 5장에서 다룬 /sync 파이프라인이 .pem·.key·.env 같은 민감 파일을 커밋 직전에 가로막는 "Sensitive File Guard"나, 강제 푸시·--no-verify를 명시적으로 금지하는 규칙이 바로 파괴적 작업 단계에 해당하는 가드레일이다.

최소 권한 원칙 — tools 필드

4장 §2 실습에서 만든 reviewer 서브에이전트의 frontmatter를 다시 떠올려 보자. tools: Read, Grep처럼 허용할 도구를 명시적으로 나열했다. 이것이 서브에이전트 단위의 최소 권한 원칙이다. reviewer는 애초에 Write 도구가 없으므로, 프롬프트가 아무리 애매하게 해석돼도 파일을 수정할 방법 자체가 없다.

이 원칙을 실제 사고 시나리오로 보면 왜 중요한지 분명해진다. 만약 reviewer에게 Write 권한까지 습관적으로 열어 뒀다면, "이 파일을 검토하고 개선해줘"처럼 살짝 모호한 요청을 받았을 때 reviewer가 "개선"을 "직접 수정"으로 해석해 원본을 덮어쓸 수도 있다. tools 필드로 권한을 미리 좁혀 두면, 이런 해석 차이가 애초에 사고로 이어지지 않는다. 프롬프트 품질에 기대는 대신 구조적으로 막는 것이다.

권한은 "이 역할이 최대로 무엇까지 할 수 있는가"가 아니라 "이 역할이 정상 작동하는 데 최소로 무엇이 필요한가"를 기준으로 정한다. 나중에 필요해지면 넓히는 것은 쉽지만, 처음부터 넓게 열어 둔 권한을 사고 이후에 좁히는 것은 이미 늦다.
최소 권한 원칙 — 3단계 권한 레벨 계층도
파괴적 작업 예: git push, rm -rf 배포, 결제, 외부 메시지 쓰기 작업 예: 파일 수정, PR 생성 로컬 커밋, 설정 변경 읽기 작업 예: 파일 읽기, 검색 웹 조회, 로그 열람 ▲ 최소 권한 원칙 (Least Privilege) — 필요한 권한만 부여

사람 승인 게이트

2장에서 오케스트레이터를 "사용자와의 확인이 필요한 지점(게이트)에서 진행을 멈추는 역할"이라고 정의했다. 가드레일 설계에서 가장 중요한 질문은 "그 게이트를 정확히 어디에 둘 것인가"다. 너무 자주 멈추면 에이전트에게 일을 맡기는 의미가 없어지고, 너무 안 멈추면 파괴적 작업까지 조용히 지나가 버린다.

실무에서 검증된 기준은 단순하다. §2의 "파괴적/외부 영향" 단계에 해당하는 작업 직전에는 항상 멈추고, 그 아래 단계는 사후 검토로 충분하다. 예를 들어 /sync 파이프라인은 커밋·푸시·PR 생성까지는 자동으로 진행하지만, PR을 실제로 병합하거나 프로덕션에 배포하는 단계는 별도의 사람 승인을 요구하도록 설계돼 있다. "어디까지는 믿고 맡기고, 어디부터는 반드시 사람이 본다"는 경계선을 명시적으로 그어두는 것이 게이트 설계의 핵심이다.

승인 게이트 동작 흐름도
사용자 요청 에이전트 동작 위험도 분류 자동 판단 위험도 판단? 낮음 자동 실행 Read / Write 높음 승인 대기 사람 확인 실행 승인 결과 응답 반환 ※ 파괴적/외부 영향 작업은 반드시 사람 승인 게이트를 거쳐야 한다

격리 — worktree와 sandbox

4장 §2의 고급 시나리오(P-1)에서 "같은 Workspace에 에이전트 여러 개를 배정하면 인지적 중첩(cognitive overlap)이 생길 수 있다"고 경고했다. 이것도 가드레일의 한 형태다. 여러 에이전트가 같은 파일·같은 git 이력을 동시에 건드리면, 한 에이전트의 실수가 다른 에이전트의 작업 맥락까지 오염시킬 수 있다.

worktree(격리된 git 작업 디렉터리)나 별도 sandbox 환경에서 각 에이전트를 실행하면, 설령 한 에이전트가 잘못된 판단을 하더라도 그 영향이 자기 작업 공간 밖으로 새어 나가지 않는다. 병렬로 여러 에이전트를 굴릴 때는 "같은 공간을 공유하게 둘 것인가, 물리적으로 나눌 것인가"를 항상 먼저 결정해야 한다.

감사 로그와 관측성

가드레일이 사전 예방이라면, 감사 로그는 사후 추적이다. 완벽한 가드레일은 없으므로, 사고가 났을 때 "언제, 어떤 에이전트가, 어떤 도구로, 무엇을 했는지"를 되짚어볼 수 있는 최소한의 기록이 반드시 필요하다. 5장에서 다룬 memory/MEMORY.md가 세션 간 맥락을 기록하는 용도라면, TaskCompleted 훅으로 실행되는 audit.ts 같은 감사 스크립트는 "규칙을 어긴 변경이 있었는지"를 매번 기계적으로 검사하는 관측성 장치다. 참고로 이 워크스페이스의 훅 배선(2026-08-24 기준)을 정리하면, PreToolUse에서는 gateguard-fact-force.ts(Edit|Write|MultiEdit)와 agent-model-gate.ts(Agent)가, PostToolUse(Write|Edit)와 TeammateIdle에서는 post-write-lifecycle-check.ts가 동작하고, audit.ts는 작업 완료 시점(TaskCompleted)에 실행된다.

4장에서 다룰 Claude Desktop App에서는 이런 훅이 발화하지 않는다. Desktop 앱 위주로 작업하는 팀이라면, 감사 로그가 "돌고 있는 줄 알았는데 사실 하나도 안 돌고 있었다"는 상황이 실제로 생길 수 있다. Codex는 훅 메커니즘 자체가 없으므로, CODEX.md 지침을 PM이 매 세션 스스로 인지하고 실행하는 방식(프롬프트 자체 강제)으로 대체한다. 가드레일을 설계할 때는 반드시 "이 정책이 내가 쓰는 도구에서 실제로 발동하는가"까지 확인해야 한다.
감사 로그 구조와 감사 흐름
감사 로그 구조 log_entry timestamp ISO 8601 agent reviewer action Read/Grep result ok / deny context filepath… 감사 흐름 에이전트 동작 tool 호출 로그 기록 audit.ts 검사 / 분석 규칙 위반? 정상 기록 보존 위반 경고 / 알림 사후 검토 팀 리뷰 피드백 루프 — 가드레일 개선 ※ 완벽한 가드레일은 없다 — 사고 발생 시 추적 가능해야 한다
한 문장으로 요약하면: 가드레일은 위험도에 따라 권한을 차등 부여(§2·§3)하고, 돌이킬 수 없는 지점 앞에서는 반드시 사람이 확인(§4)하며, 병렬 작업은 물리적으로 격리(§5)하고, 모든 것이 실패했을 때를 대비해 기록을 남기는(§6) 네 가지 습관이다. 4장부터는 이 원칙을 실제 실습 코드 안에 적용해 가며 진행한다.

참고 영상