메인 콘텐츠로 건너뛰기
Claude Code는 에이전트가 수행할 수 있는 작업과 수행할 수 없는 작업을 정확하게 지정할 수 있도록 세분화된 권한을 지원합니다. 권한 설정은 버전 제어에 체크인할 수 있으며 조직의 모든 개발자에게 배포할 수 있을 뿐만 아니라 개별 개발자가 사용자 정의할 수 있습니다.

권한 시스템

Claude Code는 강력함과 안전성의 균형을 맞추기 위해 계층화된 권한 시스템을 사용합니다:
도구 유형예시승인 필요”예, 다시 묻지 않기” 동작
읽기 전용파일 읽기, Grep아니오해당 없음
Bash 명령셸 실행프로젝트 디렉토리 및 명령당 영구적
파일 수정Edit/Write 파일세션 종료까지

권한 관리

/permissions를 사용하여 Claude Code의 도구 권한을 보고 관리할 수 있습니다. 이 UI는 모든 권한 규칙과 이들이 출처한 settings.json 파일을 나열합니다.
  • Allow 규칙을 사용하면 Claude Code가 수동 승인 없이 지정된 도구를 사용할 수 있습니다.
  • Ask 규칙은 Claude Code가 지정된 도구를 사용하려고 할 때마다 확인을 요청합니다.
  • Deny 규칙은 Claude Code가 지정된 도구를 사용하지 못하도록 방지합니다.
규칙은 순서대로 평가됩니다: deny -> ask -> allow. 첫 번째 일치하는 규칙이 우선이므로 deny 규칙이 항상 우선합니다.

권한 모드

Claude Code는 도구 승인 방식을 제어하는 여러 권한 모드를 지원합니다. 권한 모드에서 각 모드를 사용할 시기를 확인합니다. 설정 파일에서 defaultMode를 설정합니다:
모드설명
default표준 동작: 각 도구를 처음 사용할 때 권한을 요청합니다
acceptEdits세션에 대해 파일 편집 권한을 자동으로 수락합니다
planPlan Mode: Claude는 파일을 분석할 수 있지만 수정하거나 명령을 실행할 수 없습니다
auto배경 안전 검사를 통해 도구 호출을 자동으로 승인하여 작업이 요청과 일치하는지 확인합니다. 현재 연구 미리보기입니다
dontAsk/permissions 또는 permissions.allow 규칙을 통해 사전 승인되지 않은 한 도구를 자동으로 거부합니다
bypassPermissions보호된 디렉토리에 대한 쓰기를 제외한 모든 권한 프롬프트를 건너뜁니다(아래 경고 참조)
bypassPermissions 모드는 권한 프롬프트를 건너뜁니다. .git, .claude, .vscode.idea 디렉토리에 대한 쓰기는 여전히 확인을 요청하여 저장소 상태 및 로컬 구성의 실수로 인한 손상을 방지합니다. .claude/commands, .claude/agents.claude/skills에 대한 쓰기는 면제되며 프롬프트하지 않습니다. Claude는 기술, 서브에이전트 및 명령을 만들 때 정기적으로 여기에 씁니다. 컨테이너나 VM과 같은 Claude Code가 손상을 일으킬 수 없는 격리된 환경에서만 이 모드를 사용합니다. 관리자는 관리형 설정에서 disableBypassPermissionsMode"disable"로 설정하여 이 모드를 방지할 수 있습니다.
bypassPermissions 또는 auto 모드가 사용되는 것을 방지하려면 설정 파일에서 permissions.disableBypassPermissionsMode 또는 disableAutoMode"disable"로 설정합니다. 이들은 재정의될 수 없는 관리형 설정에서 가장 유용합니다.

권한 규칙 구문

권한 규칙은 Tool 또는 Tool(specifier) 형식을 따릅니다.

도구의 모든 사용 일치

도구의 모든 사용을 일치시키려면 괄호 없이 도구 이름만 사용합니다:
규칙효과
Bash모든 Bash 명령과 일치합니다
WebFetch모든 웹 가져오기 요청과 일치합니다
Read모든 파일 읽기와 일치합니다
Bash(*)Bash와 동등하며 모든 Bash 명령과 일치합니다.

세분화된 제어를 위해 지정자 사용

괄호 안에 지정자를 추가하여 특정 도구 사용과 일치시킵니다:
규칙효과
Bash(npm run build)정확한 명령 npm run build와 일치합니다
Read(./.env)현재 디렉토리의 .env 파일 읽기와 일치합니다
WebFetch(domain:example.com)example.com으로의 가져오기 요청과 일치합니다

와일드카드 패턴

Bash 규칙은 *를 사용한 glob 패턴을 지원합니다. 와일드카드는 명령의 어느 위치에나 나타날 수 있습니다. 이 구성은 npm 및 git commit 명령을 허용하면서 git push를 차단합니다:
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git commit *)",
      "Bash(git * main)",
      "Bash(* --version)",
      "Bash(* --help *)"
    ],
    "deny": [
      "Bash(git push *)"
    ]
  }
}
* 앞의 공백이 중요합니다: Bash(ls *)ls -la와 일치하지만 lsof와는 일치하지 않으며, Bash(ls*)는 둘 다 일치합니다. 레거시 :* 접미사 구문은 *와 동등하지만 더 이상 사용되지 않습니다.

도구별 권한 규칙

Bash

Bash 권한 규칙은 *를 사용한 와일드카드 일치를 지원합니다. 와일드카드는 명령의 시작, 중간 또는 끝을 포함하여 어느 위치에나 나타날 수 있습니다:
  • Bash(npm run build)는 정확한 Bash 명령 npm run build와 일치합니다
  • Bash(npm run test *)npm run test로 시작하는 Bash 명령과 일치합니다
  • Bash(npm *)npm 로 시작하는 모든 명령과 일치합니다
  • Bash(* install) install로 끝나는 모든 명령과 일치합니다
  • Bash(git * main)git checkout main, git merge main과 같은 명령과 일치합니다
*가 앞에 공백이 있는 끝에 나타날 때(예: Bash(ls *)), 단어 경계를 적용하여 접두사 뒤에 공백이나 문자열 끝이 필요합니다. 예를 들어, Bash(ls *)ls -la와 일치하지만 lsof와는 일치하지 않습니다. 반대로, 공백이 없는 Bash(ls*)는 단어 경계 제약이 없으므로 ls -lalsof 모두와 일치합니다.
Claude Code는 셸 연산자(예: &&)를 인식하므로 Bash(safe-cmd *)와 같은 접두사 일치 규칙은 safe-cmd && other-cmd 명령을 실행할 권한을 부여하지 않습니다.
“예, 다시 묻지 않기”로 복합 명령을 승인하면 Claude Code는 전체 복합 문자열에 대한 단일 규칙이 아니라 승인이 필요한 각 서브명령에 대해 별도의 규칙을 저장합니다. 예를 들어, git status && npm test를 승인하면 npm test에 대한 규칙을 저장하므로 향후 npm test 호출은 && 앞에 무엇이 있든 인식됩니다. cd를 서브디렉토리로 이동하는 것과 같은 서브명령은 해당 경로에 대한 자체 Read 규칙을 생성합니다. 단일 복합 명령에 대해 최대 5개의 규칙이 저장될 수 있습니다.
명령 인수를 제약하려고 시도하는 Bash 권한 패턴은 취약합니다. 예를 들어, Bash(curl http://github.com/ *)는 curl을 GitHub URL로 제한하려고 하지만 다음과 같은 변형과는 일치하지 않습니다:
  • URL 앞의 옵션: curl -X GET http://github.com/...
  • 다른 프로토콜: curl https://github.com/...
  • 리다이렉트: curl -L http://bit.ly/xyz (github로 리다이렉트)
  • 변수: URL=http://github.com && curl $URL
  • 추가 공백: curl http://github.com
더 안정적인 URL 필터링을 위해 다음을 고려합니다:
  • Bash 네트워크 도구 제한: deny 규칙을 사용하여 curl, wget 및 유사한 명령을 차단한 다음 허용된 도메인에 대해 WebFetch(domain:github.com) 권한으로 WebFetch 도구를 사용합니다
  • PreToolUse 훅 사용: Bash 명령의 URL을 검증하고 허용되지 않은 도메인을 차단하는 훅을 구현합니다
  • CLAUDE.md를 통해 Claude Code에 허용된 curl 패턴에 대해 지시합니다
WebFetch만 사용하는 것은 네트워크 액세스를 방지하지 않습니다. Bash가 허용되면 Claude는 여전히 curl, wget 또는 다른 도구를 사용하여 모든 URL에 도달할 수 있습니다.

Read 및 Edit

Edit 규칙은 파일을 편집하는 모든 기본 제공 도구에 적용됩니다. Claude는 Grep 및 Glob과 같이 파일을 읽는 모든 기본 제공 도구에 Read 규칙을 적용하기 위해 최선을 다합니다.
Read 및 Edit deny 규칙은 Claude의 기본 제공 파일 도구에 적용되며, Bash 서브프로세스에는 적용되지 않습니다. Read(./.env) deny 규칙은 Read 도구를 차단하지만 Bash에서 cat .env를 방지하지 않습니다. 경로에 대한 모든 프로세스의 액세스를 차단하는 OS 수준 적용을 위해 샌드박싱을 활성화합니다.
Read 및 Edit 규칙은 모두 gitignore 사양을 따르며 4가지 고유한 패턴 유형이 있습니다:
패턴의미예시일치
//path파일 시스템 루트의 절대 경로Read(//Users/alice/secrets/**)/Users/alice/secrets/**
~/path 디렉토리의 경로Read(~/Documents/*.pdf)/Users/alice/Documents/*.pdf
/path프로젝트 루트에 상대적인 경로Edit(/src/**/*.ts)<project root>/src/**/*.ts
path 또는 ./path현재 디렉토리에 상대적인 경로Read(*.env)<cwd>/*.env
/Users/alice/file과 같은 패턴은 절대 경로가 아닙니다. 프로젝트 루트에 상대적입니다. 절대 경로의 경우 //Users/alice/file을 사용합니다.
Windows에서 경로는 일치하기 전에 POSIX 형식으로 정규화됩니다. C:\Users\alice/c/Users/alice가 되므로 //c/**/.env를 사용하여 해당 드라이브의 어디든 .env 파일과 일치시킵니다. 모든 드라이브에서 일치시키려면 //**/.env를 사용합니다. 예시:
  • Edit(/docs/**): <project>/docs/의 편집 (NOT /docs/ and NOT <project>/.claude/docs/)
  • Read(~/.zshrc): 홈 디렉토리의 .zshrc 읽기
  • Edit(//tmp/scratch.txt): 절대 경로 /tmp/scratch.txt 편집
  • Read(src/**): <current-directory>/src/에서 읽기
gitignore 패턴에서 *는 단일 디렉토리의 파일과 일치하고 **는 디렉토리 전체에서 재귀적으로 일치합니다. 모든 파일 액세스를 허용하려면 괄호 없이 도구 이름만 사용합니다: Read, Edit 또는 Write.

WebFetch

  • WebFetch(domain:example.com)은 example.com으로의 가져오기 요청과 일치합니다

MCP

  • mcp__puppeteerpuppeteer 서버(Claude Code에서 구성된 이름)에서 제공하는 모든 도구와 일치합니다
  • mcp__puppeteer__* 와일드카드 구문은 puppeteer 서버의 모든 도구와도 일치합니다
  • mcp__puppeteer__puppeteer_navigatepuppeteer 서버에서 제공하는 puppeteer_navigate 도구와 일치합니다

Agent (subagents)

Agent(AgentName) 규칙을 사용하여 Claude가 사용할 수 있는 subagents를 제어합니다:
  • Agent(Explore)는 Explore subagent와 일치합니다
  • Agent(Plan)은 Plan subagent와 일치합니다
  • Agent(my-custom-agent)my-custom-agent라는 사용자 정의 subagent와 일치합니다
이러한 규칙을 설정의 deny 배열에 추가하거나 --disallowedTools CLI 플래그를 사용하여 특정 에이전트를 비활성화합니다. Explore 에이전트를 비활성화하려면:
{
  "permissions": {
    "deny": ["Agent(Explore)"]
  }
}

훅으로 권한 확장

Claude Code 훅은 런타임에 권한 평가를 수행하기 위해 사용자 정의 셸 명령을 등록하는 방법을 제공합니다. Claude Code가 도구 호출을 할 때, PreToolUse 훅은 권한 프롬프트 전에 실행됩니다. 훅 출력은 도구 호출을 거부하거나, 프롬프트를 강제하거나, 프롬프트를 건너뛰어 호출을 진행하도록 할 수 있습니다. 프롬프트를 건너뛰는 것은 권한 규칙을 우회하지 않습니다. Deny 및 ask 규칙은 훅이 "allow"를 반환한 후에도 여전히 평가되므로 일치하는 deny 규칙은 여전히 호출을 차단합니다. 이는 권한 관리에서 설명한 deny 우선 우선순위를 유지하며, 관리형 설정에서 설정한 deny 규칙을 포함합니다. 차단 훅은 또한 allow 규칙보다 우선합니다. 종료 코드 2로 종료되는 훅은 권한 규칙이 평가되기 전에 도구 호출을 중지하므로 allow 규칙이 호출을 허용할 수 있는 경우에도 차단이 적용됩니다. 모든 Bash 명령을 프롬프트 없이 실행하되 차단하려는 몇 가지를 제외하려면 allow 목록에 "Bash"를 추가하고 해당 특정 명령을 거부하는 PreToolUse 훅을 등록합니다. 적응할 수 있는 훅 스크립트는 보호된 파일에 대한 편집 차단을 참조합니다.

작업 디렉토리

기본적으로 Claude는 시작된 디렉토리의 파일에 액세스할 수 있습니다. 이 액세스를 확장할 수 있습니다:
  • 시작 중: --add-dir <path> CLI 인수 사용
  • 세션 중: /add-dir 명령 사용
  • 영구 구성: 설정 파일additionalDirectories에 추가
추가 디렉토리의 파일은 원래 작업 디렉토리와 동일한 권한 규칙을 따릅니다: 프롬프트 없이 읽을 수 있게 되며, 파일 편집 권한은 현재 권한 모드를 따릅니다.

권한이 샌드박싱과 상호 작용하는 방식

권한과 샌드박싱은 상호 보완적인 보안 계층입니다:
  • 권한은 Claude Code가 사용할 수 있는 도구와 액세스할 수 있는 파일 또는 도메인을 제어합니다. 모든 도구(Bash, Read, Edit, WebFetch, MCP 등)에 적용됩니다.
  • 샌드박싱은 Bash 도구의 파일 시스템 및 네트워크 액세스를 제한하는 OS 수준 적용을 제공합니다. Bash 명령 및 해당 자식 프로세스에만 적용됩니다.
심층 방어를 위해 둘 다 사용합니다:
  • 권한 deny 규칙은 Claude가 제한된 리소스에 액세스하려고 시도하는 것을 차단합니다
  • 샌드박스 제한은 프롬프트 주입이 Claude의 의사 결정을 우회하더라도 Bash 명령이 정의된 경계 외부의 리소스에 도달하는 것을 방지합니다
  • 샌드박스의 파일 시스템 제한은 Read 및 Edit deny 규칙을 사용하며, 별도의 샌드박스 구성은 사용하지 않습니다
  • 네트워크 제한은 WebFetch 권한 규칙과 샌드박스의 allowedDomains 목록을 결합합니다

관리형 설정

Claude Code 구성에 대한 중앙 집중식 제어가 필요한 조직의 경우, 관리자는 사용자 또는 프로젝트 설정으로 재정의할 수 없는 관리형 설정을 배포할 수 있습니다. 이러한 정책 설정은 일반 설정 파일과 동일한 형식을 따르며 MDM/OS 수준 정책, 관리형 설정 파일 또는 서버 관리형 설정을 통해 전달될 수 있습니다. 전달 메커니즘 및 파일 위치는 설정 파일을 참조합니다.

관리형 전용 설정

일부 설정은 관리형 설정에서만 효과적입니다:
설정설명
allowManagedPermissionRulesOnlytrue일 때, 사용자 및 프로젝트 설정이 allow, ask 또는 deny 권한 규칙을 정의하는 것을 방지합니다. 관리형 설정의 규칙만 적용됩니다
allowManagedHooksOnlytrue일 때, 사용자, 프로젝트 및 플러그인 훅의 로드를 방지합니다. 관리형 훅 및 SDK 훅만 허용됩니다
allowManagedMcpServersOnlytrue일 때, 관리형 설정의 allowedMcpServers만 존중됩니다. deniedMcpServers는 여전히 모든 소스에서 병합됩니다. 관리형 MCP 구성 참조
blockedMarketplaces마켓플레이스 소스의 차단 목록입니다. 차단된 소스는 다운로드 전에 확인되므로 파일 시스템에 닿지 않습니다. 관리형 마켓플레이스 제한 참조
sandbox.network.allowManagedDomainsOnlytrue일 때, 관리형 설정의 allowedDomainsWebFetch(domain:...) allow 규칙만 존중됩니다. 허용되지 않은 도메인은 사용자에게 프롬프트하지 않고 자동으로 차단됩니다. 거부된 도메인은 여전히 모든 소스에서 병합됩니다
sandbox.filesystem.allowManagedReadPathsOnlytrue일 때, 관리형 설정의 allowRead 경로만 존중됩니다. 사용자, 프로젝트 및 로컬 설정의 allowRead 항목은 무시됩니다
strictKnownMarketplaces사용자가 추가할 수 있는 플러그인 마켓플레이스를 제어합니다. 관리형 마켓플레이스 제한 참조
Remote Control웹 세션에 대한 액세스는 관리형 설정 키로 제어되지 않습니다. Team 및 Enterprise 플랜에서 관리자는 Claude Code 관리자 설정에서 이러한 기능을 활성화하거나 비활성화합니다.

자동 모드 분류기 구성

자동 모드는 분류기 모델을 사용하여 각 작업이 프롬프트 없이 안전하게 실행될 수 있는지 결정합니다. 기본적으로 작업 디렉토리와 현재 저장소의 원격(있는 경우)만 신뢰합니다. 회사의 소스 제어 조직으로 푸시하거나 팀 클라우드 버킷에 쓰기와 같은 작업은 잠재적 데이터 유출로 차단됩니다. autoMode 설정 블록을 사용하여 분류기에 조직이 신뢰하는 인프라를 알려줄 수 있습니다. 분류기는 사용자 설정, .claude/settings.local.json 및 관리형 설정에서 autoMode를 읽습니다. 체크인된 저장소가 자체 allow 규칙을 주입할 수 있으므로 .claude/settings.json의 공유 프로젝트 설정에서는 읽지 않습니다.
범위파일사용 대상
한 명의 개발자~/.claude/settings.json개인 신뢰할 수 있는 인프라
한 프로젝트, 한 명의 개발자.claude/settings.local.json프로젝트별 신뢰할 수 있는 버킷 또는 서비스, gitignored
조직 전체관리형 설정모든 개발자에게 적용되는 신뢰할 수 있는 인프라
각 범위의 항목이 결합됩니다. 개발자는 environment, allowsoft_deny를 개인 항목으로 확장할 수 있지만 관리형 설정이 제공하는 항목을 제거할 수 없습니다. allow 규칙이 분류기 내 차단 규칙에 대한 예외로 작동하므로 개발자가 추가한 allow 항목은 조직 soft_deny 항목을 재정의할 수 있습니다: 조합은 추가적이며 하드 정책 경계가 아닙니다. 개발자가 우회할 수 없는 규칙이 필요한 경우 대신 관리형 설정에서 permissions.deny를 사용하여 분류기가 상담되기 전에 작업을 차단합니다.

신뢰할 수 있는 인프라 정의

대부분의 조직의 경우 autoMode.environment는 설정해야 할 유일한 필드입니다. 이는 분류기에 신뢰할 수 있는 저장소, 버킷 및 도메인을 알려주며 기본 제공 차단 및 allow 규칙을 건드리지 않습니다. 분류기는 environment를 사용하여 “외부”가 무엇인지 결정합니다: 나열되지 않은 모든 대상은 잠재적 유출 대상입니다.
{
  "autoMode": {
    "environment": [
      "Source control: github.example.com/acme-corp and all repos under it",
      "Trusted cloud buckets: s3://acme-build-artifacts, gs://acme-ml-datasets",
      "Trusted internal domains: *.corp.example.com, api.internal.example.com",
      "Key internal services: Jenkins at ci.example.com, Artifactory at artifacts.example.com"
    ]
  }
}
항목은 산문이며 정규식이나 도구 패턴이 아닙니다. 분류기는 이들을 자연어 규칙으로 읽습니다. 새로운 엔지니어에게 인프라를 설명하는 방식으로 작성합니다. 철저한 환경 섹션은 다음을 포함합니다:
  • 조직: 회사 이름 및 Claude Code가 주로 사용되는 용도(예: 소프트웨어 개발, 인프라 자동화 또는 데이터 엔지니어링)
  • 소스 제어: 개발자가 푸시하는 모든 GitHub, GitLab 또는 Bitbucket 조직
  • 클라우드 제공자 및 신뢰할 수 있는 버킷: Claude가 읽고 쓸 수 있어야 하는 버킷 이름 또는 접두사
  • 신뢰할 수 있는 내부 도메인: *.internal.example.com과 같은 네트워크 내부의 API, 대시보드 및 서비스에 대한 호스트명
  • 주요 내부 서비스: CI, 아티팩트 레지스트리, 내부 패키지 인덱스, 인시던트 도구
  • 추가 컨텍스트: 규제 산업 제약, 다중 테넌트 인프라 또는 분류기가 위험으로 취급해야 할 규정 준수 요구사항
유용한 시작 템플릿: 괄호로 묶인 필드를 채우고 적용되지 않는 줄을 제거합니다:
{
  "autoMode": {
    "environment": [
      "Organization: {COMPANY_NAME}. Primary use: {PRIMARY_USE_CASE, e.g. software development, infrastructure automation}",
      "Source control: {SOURCE_CONTROL, e.g. GitHub org github.example.com/acme-corp}",
      "Cloud provider(s): {CLOUD_PROVIDERS, e.g. AWS, GCP, Azure}",
      "Trusted cloud buckets: {TRUSTED_BUCKETS, e.g. s3://acme-builds, gs://acme-datasets}",
      "Trusted internal domains: {TRUSTED_DOMAINS, e.g. *.internal.example.com, api.example.com}",
      "Key internal services: {SERVICES, e.g. Jenkins at ci.example.com, Artifactory at artifacts.example.com}",
      "Additional context: {EXTRA, e.g. regulated industry, multi-tenant infrastructure, compliance requirements}"
    ]
  }
}
더 구체적인 컨텍스트를 제공할수록 분류기가 일상적인 내부 작업과 유출 시도를 더 잘 구분할 수 있습니다. 한 번에 모든 것을 채울 필요는 없습니다. 합리적인 롤아웃: 기본값으로 시작하여 소스 제어 조직 및 주요 내부 서비스를 추가합니다. 이는 자신의 저장소로 푸시하는 것과 같은 가장 일반적인 거짓 양성을 해결합니다. 다음으로 신뢰할 수 있는 도메인 및 클라우드 버킷을 추가합니다. 차단이 발생할 때 나머지를 채웁니다.

차단 및 allow 규칙 재정의

두 가지 추가 필드를 사용하여 분류기의 기본 제공 규칙 목록을 바꿀 수 있습니다: autoMode.soft_deny는 차단되는 항목을 제어하고 autoMode.allow는 적용되는 예외를 제어합니다. 각각은 자연어 규칙으로 읽히는 산문 설명의 배열입니다. 분류기 내에서 우선순위는: soft_deny 규칙이 먼저 차단하고, allow 규칙이 예외로 재정의하고, 명시적 사용자 의도가 둘 다 재정의합니다. 사용자의 메시지가 Claude가 수행하려는 정확한 작업을 직접적이고 구체적으로 설명하면 soft_deny 규칙이 일치하더라도 분류기가 허용합니다. 일반적인 요청은 계산되지 않습니다: Claude에게 “저장소 정리”를 요청하는 것은 강제 푸시를 승인하지 않지만 “이 분기를 강제 푸시”를 요청하는 것은 승인합니다. 느슨하게 하려면: 파이프라인이 이미 PR 검토, CI 또는 스테이징 환경으로 보호하는 항목을 차단할 때 soft_deny에서 규칙을 제거하거나, 분류기가 기본 예외가 포함하지 않는 일상적인 패턴을 반복적으로 플래그할 때 allow에 추가합니다. 더 엄격하게 하려면: 기본값이 놓친 환경에 특정한 위험에 대해 soft_deny에 추가하거나 기본 예외를 보류하기 위해 allow에서 제거합니다. 모든 경우에 claude auto-mode defaults를 실행하여 전체 기본 목록을 가져온 다음 복사하여 편집합니다: 빈 목록에서 시작하지 마십시오.
{
  "autoMode": {
    "environment": [
      "Source control: github.example.com/acme-corp and all repos under it"
    ],
    "allow": [
      "Deploying to the staging namespace is allowed: staging is isolated from production and resets nightly",
      "Writing to s3://acme-scratch/ is allowed: ephemeral bucket with a 7-day lifecycle policy"
    ],
    "soft_deny": [
      "Never run database migrations outside the migrations CLI, even against dev databases",
      "Never modify files under infra/terraform/prod/: production infrastructure changes go through the review workflow",
      "...copy full default soft_deny list here first, then add your rules..."
    ]
  }
}
allow 또는 soft_deny를 설정하면 해당 섹션의 전체 기본 목록이 바뀝니다. 단일 항목으로 soft_deny를 설정하면 모든 기본 제공 차단 규칙이 삭제됩니다: 강제 푸시, 데이터 유출, curl | bash, 프로덕션 배포 및 다른 모든 기본 차단 규칙이 허용됩니다. 안전하게 사용자 정의하려면 claude auto-mode defaults를 실행하여 기본 제공 규칙을 인쇄하고, 설정 파일에 복사한 다음, 자신의 파이프라인 및 위험 허용도에 대해 각 규칙을 검토합니다. 인프라가 이미 완화하는 위험에 대해서만 규칙을 제거합니다.
세 섹션은 독립적으로 평가되므로 environment만 설정하면 기본 allowsoft_deny 목록이 그대로 유지됩니다.

기본값 및 효과적인 구성 검사

allow 또는 soft_deny를 설정하면 기본값이 바뀌므로 모든 사용자 정의를 시작할 때 전체 기본 목록을 복사합니다. 세 가지 CLI 서브명령이 검사 및 검증을 도와줍니다:
claude auto-mode defaults  # the built-in environment, allow, and soft_deny rules
claude auto-mode config    # what the classifier actually uses: your settings where set, defaults otherwise
claude auto-mode critique  # get AI feedback on your custom allow and soft_deny rules
claude auto-mode defaults의 출력을 파일에 저장하고, 정책과 일치하도록 목록을 편집한 다음, 결과를 설정 파일에 붙여넣습니다. 저장한 후 claude auto-mode config를 실행하여 효과적인 규칙이 예상한 것인지 확인합니다. 사용자 정의 규칙을 작성한 경우 claude auto-mode critique는 이들을 검토하고 모호하거나 중복되거나 거짓 양성을 일으킬 가능성이 있는 항목을 플래그합니다.

설정 우선순위

권한 규칙은 다른 모든 Claude Code 설정과 동일한 설정 우선순위를 따릅니다:
  1. 관리형 설정: 명령줄 인수를 포함한 다른 수준으로 재정의할 수 없습니다
  2. 명령줄 인수: 임시 세션 재정의
  3. 로컬 프로젝트 설정 (.claude/settings.local.json)
  4. 공유 프로젝트 설정 (.claude/settings.json)
  5. 사용자 설정 (~/.claude/settings.json)
도구가 어느 수준에서든 거부되면 다른 수준은 이를 허용할 수 없습니다. 예를 들어, 관리형 설정 deny는 --allowedTools로 재정의할 수 없으며, --disallowedTools는 관리형 설정이 정의하는 것 이상의 제한을 추가할 수 있습니다. 권한이 사용자 설정에서 허용되지만 프로젝트 설정에서 거부되면, 프로젝트 설정이 우선이며 권한이 차단됩니다.

예시 구성

저장소에는 일반적인 배포 시나리오에 대한 시작 설정 구성이 포함되어 있습니다. 이를 시작점으로 사용하고 필요에 맞게 조정합니다.

참고 항목

  • 설정: 권한 설정 테이블을 포함한 완전한 구성 참조
  • 샌드박싱: Bash 명령에 대한 OS 수준 파일 시스템 및 네트워크 격리
  • 인증: Claude Code에 대한 사용자 액세스 설정
  • 보안: 보안 보호 및 모범 사례
  • : 워크플로우 자동화 및 권한 평가 확장