Deepseek ArtifactsDeepseek Artifacts
Claude Code 가이드 · 12단계 · 2026년 9월 업데이트

Claude Code 권한(permissions) 완전 정리: allow·deny·ask 규칙의 작동 방식

Claude Code가 권한을 묻는 방식을 프레임 단위로 해부합니다: 프롬프트의 세 가지 선택지, settings.local.json에 저장되는 allow 규칙, deny 우선 평가 순서, 권한 모드, 그리고 일상 코딩과 CI에서 확인 창을 줄여 주는 레시피 — 영상이 다 다루지 못한 부분은 공식 문서로 메꿨습니다.

60초 만에 보는 Claude Code 권한

  • Claude Code는 Bash, Edit, WebFetch, Write 앞에서 확인을 요청합니다. Read, Glob, Grep, LS는 묻지 않고 실행됩니다.
  • "Yes, and don't ask again"을 고르면 Bash(git add:*) 같은 규칙이 .claude/settings.local.json에 저장됩니다 — 그 저장소 전용, git에서 자동 제외되는 개인 규칙장입니다.
  • 규칙은 deny → ask → allow 순서로 평가됩니다: 어떤 설정 파일의 deny든 이기고, 어떤 allow 규칙도 거기에 예외를 낼 수 없습니다.
  • 모드로 신뢰의 폭을 조절합니다: 편집이 많으면 acceptEdits(alt+m), 읽기 전용 정찰은 plan, CI는 --permission-mode bypassPermissions — 단, defaultMode의 auto와 bypassPermissions는 사용자 또는 관리 설정에 있어야만 효력이 있습니다.

Claude Code Tutorial #4 - Tools & Permissions

채널:The Net Ninja4:55

열기

Permission Modes Head to Head

채널:ttywood6:20

열기

Permissions — Claude Code documentation

공식 문서:code.claude.com

열기

Settings files — Claude Code documentation

공식 문서:code.claude.com

열기

스틸 컷은 전부 Net Ninja 녹화에서 왔습니다 — 캠도, 겹쳐 그린 자막도 없는 깔끔한 화면 캡처입니다. 권한 모드들을 정면으로 비교한 ttywood 회차는 모드·레시피 섹션의 교차 검증으로 썼지만 프레임은 한 장도 가져오지 않았습니다(번인 자막이 있어서입니다). 규칙 문법, 평가 순서, 모드 동작, 설정 파일 우선순위는 공식 문서 두 페이지로 검증했습니다.

영상 © The Net Ninja, ttywood(링크만 사용). 문서 © Anthropic. 스크린샷은 이 가이드의 해설을 위해 인용했습니다.

Claude Code 권한, 단계별 설정하기

Claude Code가 움직이기 전에 묻는 것들

  1. 1

    어떤 도구가 권한 프롬프트를 띄우는지 보기

    Claude Code는 도구를 스스로 고릅니다 — 파일 열기는 Read, 수정은 Edit, 셸 명령은 Bash. Anthropic 설정 문서는 각 도구에 Permission Required 열을 붙입니다: Bash, Edit, WebFetch, Write는 멈춰서 묻고, Read, Glob, Grep, LS는 그냥 실행됩니다. 도구 이름을 직접 칠 일은 없고, 중요한 것은 어떤 행동이 여러분을 기다리며 멈출지 미리 아는 것입니다.

    Anthropic's Claude Code settings docs with the Tools available to Claude table open, Bash and Edit rows selected and Permission Required set to Yes while Read, Glob and Grep read No
    Claude Code 설정 문서는 내장 도구마다 Permission Required 판정을 붙여 목록으로 보여줍니다.1:05부터 시청
  2. 2

    수정을 시켜 보고, 먼저 읽는 모습 관찰하기

    영상의 요청은 의도적으로 작게 잡았습니다: src/app/globals.css에 파스텔 옐로 --highlight 변수를 추가하라는 것. Claude Code는 먼저 파일을 읽습니다 — Read는 권한이 필요 없으니까요 — 그리고 손대려는 순간에야 멈춥니다. 이 분리가 권한 모델 전체의 축소판입니다: 보는 건 공짜, 만지는 건 승인.

    Claude Code input in the VS Code terminal holding the typed request to add a pastel yellow highlight theme variable to src/app/globals.css
    VS Code의 Claude Code 입력창에 입력된 하이라이트 변수 요청.1:45부터 시청
  3. 3

    답하기 전에 세 가지 선택지 읽기

    수정 프롬프트에는 매번 세 가지 답이 붙습니다. 1. Yes는 이번 수정 한 건만 승인. 2. Yes, and don't ask again this session은 이 세션의 남은 수정을 승인(영상 빌드에서는 alt+m). 3. No, and tell Claude what to do differently(esc)는 변경을 거부하고 지시로 방향을 잡습니다. 3번은 실패가 아니라 — 코드가 박제되기 전에 궤도를 바로잡는 방법 그 자체입니다.

    Claude Code asking Do you want to make this edit to globals.css with Yes, Yes and don't ask again this session and No and tell Claude what to do differently as the three answers
    globals.css 수정 프롬프트, 세 가지 권한 옵션이 모두 보입니다.2:17부터 시청

한 번만 yes 말하기: allow 규칙 저장하기

  1. 4

    작업당 한 번이 아니라, 수정당 한 번씩 묻는다

    승인은 다음 변경으로 이어지지 않습니다. 데모에서는 같은 파일의 서로 다른 세 곳 수정에 Yes 세 번이 필요했고, 다음 변경도 또 물었습니다. 매번 승인하는 방식도 되긴 하지만 두 줄짜리 작업을 넘기면 감당이 안 됩니다 — allow 규칙과 모드가 존재하는 이유가 바로 이것입니다.

    globals.css gaining a second --highlight value in the VS Code diff while Claude Code re-issues the same three-option edit prompt for the next change
    첫 번째 수정 승인 직후 globals.css의 두 번째 수정이 다시 프롬프트를 띄우는 장면.2:32부터 시청
  2. 5

    Bash 명령은 별도의 관문을 거친다

    셸 명령에는 자기만의 게이트가 있습니다. 데모에서 Claude에게 커밋을 시키면 Bash(git add src/app/globals.css)가 Waiting 상태로 답을 기다립니다. 어떤 명령의 yes가 다음 명령의 yes는 아닙니다 — 뒤이은 git commit도 자기 몫의 확인을 또 요구합니다.

    Claude Code holding Bash(git add src/app/globals.css) in a Waiting state beneath finished git status, git diff and git log outputs while the commit waits on permission
    승인을 기다리는 git add 명령, 위에는 이미 실행된 git 출력이 흐릅니다.3:16부터 시청
  3. 6

    "don't ask again"에게 규칙 쓰기를 맡기기

    git add 명령에 Yes, and don't ask again을 고르면 두 가지가 동시에 일어납니다: 현재 명령이 풀리고, 규칙 하나가 저장됩니다. 만들어지는 파일은 저장소 루트의 .claude/settings.local.json이고, permissions 객체의 allow 배열 — 여기서는 "Bash(git add:*)" — 와 빈 deny·ask 배열이 들어 있습니다. 이제 이 프로젝트의 모든 git add는 프롬프트 없이 실행됩니다.

    VS Code Explorer with the .claude folder expanded and settings.local.json defining a permissions object whose allow array holds Bash(git add:*) beside empty deny and ask arrays
    .claude 아래 생성된 settings.local.json, Bash(git add:*) allow 규칙이 저장된 상태.3:40부터 시청
  4. 7

    대화상자로 안 되는 규칙은 직접 파일 고치기

    allow 배열은 평범한 JSON이므로 스스로 규칙을 추가할 수 있습니다. 단일 명령은 정확한 문자열 — Bash(npm run test) — 로, 같은 접두사의 명령 전체는 끝에 :*를 붙여 — Bash(npm run test:*) — 표기합니다. 공식 문서도 :*가 끝 와일드카드의 축약 표기임을 확인합니다. 파일은 개인용으로: Claude Code는 settings.local.json을 전역 git 제외에 자동 등록하고, 영상도 같은 조언을 합니다 — 이건 저장소가 아니라 여러분의 워크플로를 위한 파일입니다.

    settings.local.json opened for hand editing with the Bash(git add:*) rule selected in permissions.allow while the finished highlight commit scrolls through the Claude Code panel
    파일을 직접 고치는 가운데 permissions.allow에서 선택된 저장된 규칙.4:22부터 시청

모드로 위임 범위 조절하기

  1. 8

    수정이 몰리는 구간엔 accept edits로 전환

    alt+m(최신 빌드는 shift+tab으로 모드 순환)을 누르면 세션 배지가 accept edits on으로 바뀝니다. 파일 수정이 프롬프트 없이 바로 반영되고, 문서는 덧붙입니다: mkdir, touch, mv, cp 같은 흔한 파일시스템 명령도 자동 승인된다고. 이 면제는 세션 한정입니다 — 새 세션을 열면 다시 수정마다 프롬프트로 돌아가고, 다시 켜기 전까지는요.

    Claude Code footer reading accept edits on with alt and m to cycle as the allowed git commands land the highlight commit
    허용된 git 명령들이 커밋을 마무리하는 동안 accept edits on 배지가 표시됨.4:35부터 시청
  2. 9

    올라가기 전에 모드 사다리 전체를 파악하기

    모드는 세션의 기본 자세를 정합니다. default는 각 도구 첫 사용 시 프롬프트; plan은 아무것도 수정하지 않는 읽기 전용 탐색; acceptEdits는 파일 수정을 자동 승인; dontAsk는 물었을 작업을 전부 자동 거부; auto는 백그라운드 안전 점검과 함께 도구 호출을 승인; bypassPermissions는 어떤 모드도 자동 승인할 수 없는 소수 행위를 제외하고 프롬프트를 생략합니다. 세션별로는 --permission-mode로, 영구적으로는 permissions.defaultMode로 고릅니다.

  3. 10

    defaultMode는 올바른 파일에 넣기

    설정 문서가 명확합니다: defaultMode의 auto와 bypassPermissions는 프로젝트·로컬 설정에서는 효력이 없습니다 — 사용자(~/.claude/settings.json)나 관리 설정에 두거나, 한 세션만이라면 --permission-mode를 넘기세요. 우선순위는 관리 설정 → CLI --settings → .claude/settings.local.json → .claude/settings.json → 사용자 설정 순으로 흐르고, 어느 층위의 deny든 아래의 모든 allow를 이깁니다.

실전 프로젝트용 복붙 레시피

  1. 11

    레시피: 테스트는 허용, 파괴는 차단

    팀이 공유하는 .claude/settings.json에서 테스트 루프는 "Bash(npm run test:*)"로 허용하고, 위험한 부분은 "Bash(rm -rf *)"와 "Read(./.env)"로 울타리 쳐 시크릿이 절대 읽히지 않게 합니다. 웹 리서치도 같은 요령: "WebFetch(domain:example.com)"는 도메인 하나, "WebFetch(domain:*.example.com)"는 서브도메인 전체. deny가 먼저 평가되므로 어떤 allow 규칙도 거기에 예외를 파내려 갈 수 없습니다.

  2. 12

    레시피: CI에서 안전하게 프롬프트 건너뛰기

    비대화형 실행에는 우연이 아니라 의도된 자세가 필요합니다: CI 작업에 --permission-mode bypassPermissions를 넘기거나, 사용자·관리 설정에 defaultMode를 두세요 — 프로젝트 파일은 이 값을 허가할 수 없습니다. 가드레일을 영구화하려면 관리 설정에서 permissions.disableBypassPermissionsMode를 "disable"로 두고, /permissions로 각 머신을 감사하면 활성 규칙 전부와 출처 파일까지 목록으로 나옵니다.

deny → ask → allow: 규칙은 실제로 어떤 순서로 적용되나

권한 문서는 단호합니다: 규칙은 deny, 그다음 ask, 그다음 allow 순서로 평가되며, 첫 번째로 일치한 규칙이 결과를 정합니다. 규칙이 얼마나 구체적이든 이 순서는 절대 안 바뀝니다. allow 규칙은 아무리 정밀해도 deny 규칙에 예외를 낼 수 없습니다.

deny는 파일을 넘어 전역이기도 합니다. 사용자 설정이 허용하고 프로젝트 설정이 거부하면 deny가 이깁니다 — 모든 범위의 deny 규칙은 allow 규칙보다 먼저 평가되고, 관리 설정의 deny는 명령줄 플래그로도 뒤집을 수 없습니다. "Bash" 같은 맨이름 도구를 deny하면 더 멀리 갑니다: 문서 말로, 그 도구를 Claude의 컨텍스트에서 통째로 제거한다고 합니다.

실무적 결론: 안전 규칙 — rm 금지, .env 읽기 금지, 강제 푸시 금지 — 는 저장소와 함께 다니는 프로젝트 .claude/settings.json에 싣고, allow 목록은 그 위에 얹는 편의장치로 취급하세요. allow 목록은 범위를 넘어 덮어쓰기가 아니라 병합되므로, 개인 settings.local.json은 누구의 deny도 약화시키지 않으면서 자신만의 허용을 얹을 수 있습니다.

그대로 가져와도 되는 세 가지 레시피

각 레시피는 들어가야 할 파일을 명시합니다. 모두에 적용되는 상수 하나: deny는 어디서나, 언제나 이깁니다.

  • 테스트는 자유롭게, rm과 .env는 굳게

    .claude/settings.json에: "permissions.allow": ["Bash(npm run test:*)"](스택에 맞춰 "Bash(npx vitest:*)"나 "Bash(uv run pytest:*)"로 교체), "permissions.deny": ["Bash(rm -rf *)", "Read(./.env)"]. 테스트와 그 콜백은 손 놓고 돌고, 파괴적인 삭제와 시크릿 읽기는 평가가 allow 목록에 닿기 전에 막힙니다.

  • 리서치는 신뢰하는 도메인에 못 박기

    문서 위주 작업이라면: allow에 "WebFetch(domain:developer.mozilla.org)"와 "WebFetch(domain:claude.com)", 또는 서브도메인 전체는 "WebFetch(domain:*.example.com)". 맨이름 "WebFetch" 도구를 deny하면 웹 읽기를 완전히 꺼버릴 수도 있습니다 — 로컬 컨텍스트만으로 끝내야 하는 재현성 중시 실행에 유용합니다.

  • CI는 무인으로, 다만 폭주 없이

    CI 작업이 --permission-mode bypassPermissions를 넘기게 하거나, 사용자·관리 설정에 "permissions.defaultMode": "bypassPermissions"를 두세요 — 프로젝트·로컬 설정은 이 값을 줄 수 없습니다. 모드 자체를 봉쇄하려면 관리 설정의 "permissions.disableBypassPermissionsMode": "disable"이 모든 저장소와 모든 플래그를 밀어냅니다. 그래도 bypassPermissions는 어떤 모드도 자동 승인할 수 없는 짧은 목록의 행위는 계속 막습니다.

규칙이 안 먹히나요? 이 네 가지부터

"allow 규칙이 무시된다"는 보고 대부분은 규칙이 어느 파일에 떨어졌는지, 어느 파일이 이기는지로 귀결됩니다.

  1. 1규칙은 맞고, 파일이 틀렸다. 세션 승인은 .claude/settings.local.json에 떨어집니다; 팀 규칙은 .claude/settings.json; 머신 전체 규칙은 ~/.claude/settings.json으로. /permissions를 실행하세요 — 활성 규칙 전부와 각각의 출처 설정 파일이 목록으로 나옵니다.
  2. 2상위 파일이 deny하고 있다. 값은 아래로 덮어쓰지만, 어느 층위의 deny든 allow보다 먼저 평가되므로 사용자 수준 allow는 프로젝트 수준 deny를 구하지 못합니다 — 관리 설정은 명령줄 플래그까지 이깁니다.
  3. 3allow 규칙이 신뢰를 기다리는 중. deny와 ask는 즉시 적용되지만, 커밋된 프로젝트 파일에서 온 allow 규칙은 워크스페이스 폴더를 신뢰한 뒤에야 효력이 있습니다 — 클론해 온 저장소를 위한 의도된 관문입니다.
  4. 4모드가 잘못된 파일에 들어갔다. defaultMode의 auto와 bypassPermissions는 프로젝트·로컬 설정에서는 무시됩니다(문서는 이 변경이 v2.1.257부터라고 적습니다 — 그 전에는 bypassPermissions가 어느 파일에서든 효력이 있었습니다). 사용자·관리 설정으로 옮기거나, 단일 세션이면 --permission-mode를 쓰세요.

Claude Code 권한 FAQ

관련 가이드