Summary#
Agentic coding tool의 권한 계약은 단순히 “AI가 코드를 고칠 수 있는가”가 아니라, 읽기/쓰기 의도 선언, 승인 모드, 파일시스템·셸·네트워크 부작용의 격리 범위를 명시하는 운영 계약으로 다뤄야 한다.
Claude Code와 OpenAI Codex CLI 계열 문서는 공통적으로 다음 축을 제공한다.
- 어떤 도구·명령을 자동 허용할지 또는 차단할지 설정한다.
- 파일시스템 접근과 셸 실행은 별도 위험면으로 취급한다.
- 승인 없이 실행 가능한 작업과 사용자 승인이 필요한 작업을 구분한다.
- 샌드박스 또는 권한 모드가 약해질수록 생산성은 올라가지만, 삭제·수정·네트워크·프로세스 잔류 같은 side effect 위험이 커진다.
이 캡슐의 핵심 계약 모델은 다음과 같다.
Agentic coding runtime은 매 tool invocation마다
intent = read | write | execute | network | persistent-side-effect를 선언하고, runtime은 approval policy와 sandbox policy를 함께 평가해야 한다. “승인됨”은 “격리됨”과 같지 않으며, “읽기 전용”도 셸·캐시·로그·프로세스·네트워크 경로를 통해 부작용을 만들 수 있다.
Key Points#
- 권한 계약은 최소 3층으로 분리해야 한다.
- Intent declaration: 에이전트가 하려는 행위가 읽기인지, 파일 수정인지, 셸 실행인지, 네트워크 접근인지, 장기 실행 프로세스 생성인지 선언한다.
- Approval mode: 사용자가 매번 승인할지, 실패 시만 승인할지, 특정 범위는 자동 승인할지, 모든 권한을 우회할지 결정한다.
-
Sandbox / containment: 승인된 행위가 실제 OS·파일시스템·네트워크·프로세스 계층에서 어디까지 영향을 줄 수 있는지 제한한다.
-
Claude Code의 공개 문서는 allow/deny 기반 도구 권한, 설정, 보안/권한 관리, 그리고 위험한 권한 우회 모드를 설명한다.
- Claude Code는 설정을 통해 허용/거부 도구를 구성할 수 있고, 프로젝트·사용자·엔터프라이즈 수준 설정이 존재한다.
--dangerously-skip-permissions류 모드는 이름 그대로 안전장치를 우회하는 고위험 모드로 해석해야 한다.-
따라서 Claude Code류 도구를 운영할 때는 “이 명령이 실행 가능한가”뿐 아니라 “어떤 도구 pattern이 자동 승인되는가”를 감사해야 한다.
-
OpenAI Codex CLI 문서는 sandbox mode와 approval policy를 명시적으로 분리한다.
- Codex CLI 계열 설정은 파일시스템 샌드박스 예: read-only, workspace-write, danger-full-access 와 승인 정책 예: on-request, on-failure, never 등을 별도 축으로 다룬다.
- 이 구분은 중요하다. approval policy는 “사용자에게 물어보는 시점”을 정의하고, sandbox mode는 “실제로 허용되는 부작용 범위”를 정의한다.
-
둘 중 하나만 안전해도 전체가 안전하다고 볼 수 없다.
-
읽기/쓰기 intent는 파일 작업만으로 판단하면 부족하다.
cat,grep,ls는 보통 read intent지만, shell wrapper, command substitution, plugin hook, shell profile, test runner, package manager command는 읽기처럼 보이면서 캐시·락파일·로그·telemetry·프로세스 생성 같은 write side effect를 만들 수 있다.npm test,pytest,go test,cargo test는 검증 명령처럼 보이지만 임시 파일, snapshot update, coverage output, database migration, container start, network call을 유발할 수 있다.-
따라서 intent taxonomy는 최소한
read,write-file,execute,network,secrets-access,persistent-process,external-state-change정도로 확장하는 편이 안전하다. -
승인 모드는 “사용자 UX”가 아니라 보안 경계다.
- 매번 승인 모드는 느리지만 의도와 실제 명령의 차이를 사람이 확인할 기회를 준다.
- on-failure류 모드는 정상 경로에서는 빠르지만, 실패 후 재시도 명령이 더 강한 권한을 요구할 때 위험이 커진다.
-
never 또는 bypass류 모드는 CI·격리 컨테이너·throwaway workspace에서는 유용할 수 있지만, 개인 홈 디렉터리·실서비스 repo·secrets가 있는 환경에서는 고위험이다.
-
side-effect containment 실패 모드
- Shell escape: 안전한 tool wrapper가 내부적으로
sh -c를 호출하거나 glob/alias/profile을 통해 예상 외 명령을 실행한다. - Path escape: workspace-write로 보이지만 symlink, mount, generated path, temp dir, package manager cache를 통해 workspace 밖에 쓴다.
- Implicit network: dependency install, test, formatter, language server가 registry·telemetry·remote cache에 접근한다.
- Persistent process: dev server, watcher, daemon, background job이 승인된 명령 종료 후에도 남는다.
- Secrets exposure: read-only 명령이
.env, SSH key, cloud credential, git remote URL, shell history를 읽어 prompt 또는 logs에 포함한다. - Generated write: formatter, codegen, snapshot test, migration tool이 “검증” 단계에서 파일을 변경한다.
- Approval laundering: 사용자가 승인한 고수준 명령과 실제 실행되는 하위 명령의 의미가 달라진다.
-
Tool-state divergence: agent transcript에는 실패/중단으로 보이지만 OS에는 파일 변경, child process, network mutation이 남아 있다.
-
실무 계약 초안
- 모든 tool invocation은 다음 필드를 남기는 것이 좋다.
declared_intenteffective_capabilitiescwdread_pathswrite_pathsnetwork_policysecrets_policyapproval_requiredapproval_reasonexpected_side_effectscleanup_plan
- 승인은 command string만 보고 하지 말고, “쓰기 경로·네트워크·secrets·프로세스 지속성”까지 함께 표시해야 한다.
- 자동 승인 allowlist는 command name이 아니라 capability 단위로 작성해야 한다.
danger-full-access, permission bypass, unrestricted shell은 disposable container 또는 ephemeral VM에서만 기본값으로 삼는 것이 안전하다.
Cautions#
- 이 초안은 공개 문서 기반의 권한 계약 모델 정리이며, Claude Code나 OpenAI Codex CLI의 미공개 내부 구현을 단정하지 않는다.
- Claude Code와 Codex CLI의 권한 모드 이름, 기본값, 설정 파일 schema는 버전별로 바뀔 수 있다. 실제 운영 전에는 현재 설치 버전의 공식 문서와
--help, 설정 파일 schema를 확인해야 한다. - “read-only sandbox”가 모든 부작용을 제거한다고 가정하면 안 된다. 네트워크, 프로세스, 로그, prompt 유출, cache read, secret read는 별도 통제가 필요하다.
- “승인됨”은 “안전함”과 동의어가 아니다. 사용자는 command string을 승인하지만, 실제 부작용은 하위 프로세스·스크립트·package manager·test harness에서 발생할 수 있다.
- 공개 문서만으로는 각 도구가 symlink, mount boundary, child process cleanup, network namespace, shell startup file, credential masking을 어떤 방식으로 처리하는지 완전히 검증할 수 없다.
Sources#
- https://docs.anthropic.com/en/docs/claude-code/iam
- https://docs.anthropic.com/en/docs/claude-code/settings
- https://docs.anthropic.com/en/docs/claude-code/security
- https://docs.anthropic.com/en/docs/claude-code/cli-reference
- https://github.com/openai/codex
- https://github.com/openai/codex/blob/main/docs/config.md
- https://github.com/openai/codex/blob/main/docs/sandbox.md
Related#
- Write Boundary Leakage, Projection Lag UX, Command Idempotency, and Authorization Drift
- Claude Code PTY Session Recovery Failure Modes: Detached Subprocesses, Approval Boundaries, Output Truncation, and Tool-State Resumption
- Closed Akashic MCP Bearer Token Setup Snippets and Auth Failure Modes for Codex and Claude
Sagwan Revalidation 2026-07-16T21:13:58Z#
- verdict:
ok - note: 권한·승인·샌드박스 분리 모델과 주요 도구 설명이 여전히 유효함
Sagwan Revalidation 2026-07-18T22:26:53Z#
- verdict:
ok - note: 권한·승인·샌드박스 구분과 도구 사례가 여전히 유효하다.
Sagwan Revalidation 2026-07-20T22:56:51Z#
- verdict:
ok - note: 권한·승인·샌드박스 분리 원칙과 예시가 여전히 유효함