LeanX

2계층 안전 모델과 플랜 모드 — 샌드박스 × 승인

코덱스의 안전은 '무엇을 만질 수 있나'를 정하는 샌드박스 계층(Read Only→Workspace Write→Full Access)과 '언제 멈춰 물어보나'를 정하는 승인 계층(Untrusted→On Request→Never→Granular)이라는 독립된 두 손잡이로 결정되며, 기본은 Workspace Write+On Request, 가장 공격적인 --yolo는 반드시 Git과 함께 써야 하고, 큰 변경 전에는 /plan으로 계획부터 받는 것이 안전합니다.

앞선 코스에서 승인 모드(Read Only / Auto / Full Access)를 살짝 맛봤습니다. 이번엔 그 뒤에 숨은 진짜 구조를 파헤칩니다. 코덱스의 안전은 사실 '하나의 스위치'가 아니라 '독립된 두 개의 다이얼'로 돌아갑니다. 이 둘을 나눠 이해하면, 왜 어떤 모드는 안전하고 어떤 모드는 위험한지 한눈에 보입니다.

안전을 결정하는 두 개의 독립 다이얼

계층 1 · 샌드박스

  • '무엇을 만질 수 있나' (공간의 문제)
  • Read Only: 읽기만, 변경 X
  • Workspace Write: 내 폴더만 쓰기 (기본, 네트워크 X)
  • Full Access: 어디든 + 네트워크 (위험)

계층 2 · 승인 정책

  • '언제 멈춰 물어보나' (시점의 문제)
  • Untrusted: 매번 물음 (가장 안전)
  • On Request: 벗어날 때만 물음 (기본)
  • Never: 안 물음 (가장 자율)
  • Granular: 항목별로 따로 (가장 세밀)

샌드박스는 '어디까지 손댈 수 있나(공간)', 승인 정책은 '언제 멈추나(시점)'. 완전히 다른 축입니다.

계층 1 — 샌드박스: 만질 수 있는 범위

  • Read Only(읽기 전용): 파일을 읽기만 하고 아무것도 바꾸지 않습니다. 상담·플랜 모드에서 쓰입니다.
  • Workspace Write(작업 폴더 쓰기, 기본값): 지금 프로젝트 폴더 '안'에서만 파일을 씁니다. 네트워크 접속도, 다른 폴더 접근도 막혀 있습니다. 가장 균형 잡힌 기본값입니다.
  • Full Access(전체 접근): 어디든 쓰고, 네트워크도 열리고, 위험한 명령도 실행합니다. 이름에 'danger'가 붙는 이유가 있습니다.

계층 2 — 승인 정책: 멈춰 묻는 시점

  • Untrusted(불신): 모든 행동마다 멈춰 허락을 구합니다. 가장 안전하지만 가장 손이 많이 갑니다.
  • On Request(요청 시, 기본값): 샌드박스 안에서는 자유롭게 움직이고, 범위를 벗어나거나 위험한 일을 할 때만 물어봅니다.
  • Never(안 물음): 절대 멈추지 않습니다. 자율성은 최고, 통제력은 최소.
  • Granular(세밀): 파일 쓰기·명령 실행·네트워크 등 항목별로 따로 정합니다.

두 계층을 분리해서 보는 게 왜 중요할까요? '많이 물어보게(Untrusted)' 해도 샌드박스가 Full Access면 위험 행동 자체는 가능하고, 반대로 '안 물어보게(Never)' 해도 샌드박스가 Read Only면 애초에 망가뜨릴 수가 없습니다. 진짜 위험은 두 다이얼이 '동시에' 풀렸을 때 생깁니다.

대표 조합과 플래그

조합 / 플래그샌드박스승인성격
기본값Workspace WriteOn Request안전과 자율의 균형 ★
--full-autoWorkspace WriteNever에 가깝게더 관대 (덜 물음)
--yoloFull Access승인 없음가장 공격적·가장 자율 ☠
플랜 모드(/plan)Read Only—계획만, 변경 불가

운전 모드 비유 — Comfort에서 Sport+까지

Comfort [기본값]

  • Workspace Write
  • On Request
  • 안전·차분

Sport [--full-auto]

  • Workspace Write
  • 거의 안 물음
  • 더 관대·빠름

Sport+ [--yolo]

  • Full Access
  • 승인 없음
  • 가장 공격·가장 빠름
  • 실제로 빠르게 출시하는 사람들이 씀 — 단, 반드시 Git으로 언제든 되돌릴 수 있게 해둘 것
  • 참고: Claude Code의 같은 개념 = --dangerously-skip-permissions

YOLO는 빠르지만 브레이크가 없습니다. Git이라는 안전벨트를 맨 사람만 밟아도 되는 페달입니다.

--yolo(또는 --dangerously-skip-permissions)를 켤 거라면, 그 전에 반드시 Git으로 커밋해 두세요. 에이전트가 무언가 망가뜨려도 마지막 세이브포인트로 되돌리면 그만입니다. Git 없이 YOLO는, 안전벨트 없이 레이싱하는 것과 같습니다.

플랜 모드(/plan) — 코드를 쓰기 전에 설계부터

위험을 줄이는 또 하나의 강력한 습관은 '먼저 계획을 받는 것'입니다. /plan 을 입력하면 플랜 모드가 켜집니다. 코덱스는 곧장 코드를 쓰지 않고, 먼저 여러분을 인터뷰합니다. 예를 들어 '모든 파일을 리팩터링할까요, 자주 도는 핵심 경로만 할까요?' 같은 걸 되묻죠. 그다음 코드베이스 전체를 훑어 단계별 계획을 세우고, 여러분이 승인하면 그때 비로소 코드를 씁니다.

플랜 모드에서는 샌드박스가 자동으로 Read Only가 됩니다. 계획을 짜는 동안에는 아무것도 바꿀 수 없으니, 새 프로젝트를 시작하거나 크고 위험한 변경을 앞두었을 때 마음 놓고 쓸 수 있습니다.

플랜 모드의 3박자 — 질문 → 계획 → (승인) 실행

  • 질문 (Interview) 코덱스가 되묻습니다: '전체 파일 다? 핵심 경로만?'
  • 분석 + 계획 (Plan) 코드베이스 전체를 훑고 단계별 계획 작성 (이때 샌드박스는 Read Only, 수정 불가)
  • 검토 후 승인하면 그때 비로소 코드 작성 계획이 별로면 다시 질문 단계로 돌아가 조정

먼저 지도를 그리고(②) 길을 확인한 뒤(③) 출발합니다. 큰 변경일수록 이 순서가 사고를 막습니다.

정리하면, 안전은 '샌드박스(공간) × 승인(시점)' 두 계층으로 이해하고, 빠르게 달릴 땐 Git을 안전벨트로 삼으며, 크고 위험한 일은 /plan으로 설계부터 받습니다. 다음 레슨에서는 이런 에이전트를 여러 명 동시에 부리는 코덱스 데스크톱 앱으로 넘어갑니다.