Claude Code 권한 시스템 – permission

내가 허락한 것만 실행된다

파일을 하나 수정할 때마다, bash 명령어를 실행할 때마다 “허락하시겠습니까?”를 묻는다. 처음엔 괜찮지만, 대규모 작업을 진행하면서 수십 번 Yes를 누르다 보면 생산성보다 승인 누르는게 더 많아지는 느낌이 든다

반대로 불안감도 있다. “Claude Code가 내 허락 없이 파일을 마음대로 바꾸면 어쩌지?”

Claude Code의 권한 시스템은 이 두 가지 문제를 동시에 해결하기 위해 설계됐다

Claude Code가 쓰는 도구

Claude Code는 우리처럼 다양한 도구를 써서 일한다

  • Bash: 셸 명령어 실행 (ls, rm, npm run dev 등)
  • Edit: 파일 생성 및 편집
  • Task: 복잡한 작업을 위한 서브에이전트 실행
  • TodoWrite: 작업 목록 생성 및 관리

이 도구들을 쓸 때, 어떤 건 자동으로 실행하고 어떤 건 반드시 승인을 받도록 설정할 수 있다. 이게 권한 시스템의 핵심이다

기본 동작 방식

별도 설정 없이 Claude Code를 실행하면 기본적으로 이렇게 동작한다

  • 파일 읽기 (ls, grep, cat 등): 승인 없이 자동 실행
  • 파일 쓰기 / 편집: 매번 승인 요청
  • Bash 명령어 실행: 매번 승인 요청

읽기는 위험도가 낮으니 자동으로, 쓰기와 실행은 위험도가 있으니 물어보는 구조다

권한 우선순위

권한은 세 가지 규칙으로 나뉘고, 우선순위는 아래와 같다

deny (거부)  →  allow (허용)  →  ask (확인 요청)  →  기본값 (물어봄)
 ↑ 가장 높음                                        ↑ 가장 낮음

allow에 등록되어 있어도 deny에 있으면 무조건 차단된다. 이 점을 반드시 기억해야 한다

/permissions 명령어로 권한 설정하기

Claude Code 실행 중에 /permissions를 입력하면 현재 설정된 권한 목록과 관리 UI가 나타난다

여기서 규칙을 추가할 때 문법은 다음과 같다

도구명(세부 명령어)

예시

Bash              # Bash 명령어 전체 허용
Bash(npm run *)   # npm run으로 시작하는 명령어만 허용
Bash(git status)  # git status만 허용

특정 명령어만 허용하고 싶다면 괄호 안에 명시하고, 해당 도구의 모든 명령을 허용하려면 도구명만 입력하면 된다

settings.json으로 권한 관리하기

UI보다 파일로 직접 관리하는 게 더 명확할 때가 많다. .claude/settings.local.json에 아래 구조로 작성하면 된다

{
  "permissions": {
    "allow": [],
    "ask": [],
    "deny": []
  }
}

실전 설정 예시

개발 효율 우선 설정 — bash 명령 승인 피로를 줄이고 싶을 때
{
  "permissions": {
    "allow": [
      "Bash(npm run *)",
      "Bash(git status)",
      "Bash(git log:*)",
      "Read(./src/**)",
      "Write(./src/**)"
    ],
    "deny": [
      "Bash(rm:*)",
      "Read(./.env*)",
      "Read(./secrets/**)",
      "Write(./package.json)"
    ]
  }
}
보안 강화 설정 — 팀 프로젝트나 프로덕션 코드 작업 시
{
  "permissions": {
    "allow": [
      "Bash(npm run test)",
      "Read(./src/**)"
    ],
    "ask": [
      "Bash(git push:*)",
      "Write(./src/**)"
    ],
    "deny": [
      "Bash(curl:*)",
      "Read(./.env*)",
      "Write(./config/prod.*)"
    ]
  }
}

패턴 문법

패턴의미예시
*단일 레벨 와일드카드npm run test:* → test:unit, test:e2e
**다중 레벨 와일드카드secrets/** → secrets/api/key.json
:*명령어 인수 매칭curl:* →curl https://…

추가 디렉터리 접근 설정

기본적으로 Claude Code는 실행한 프로젝트 폴더 안에서만 작동한다. 다른 프로젝트를 참고하면서 개발해야 하는 상황이라면 additionalDirectories를 활용하면 된다

{
  "permissions": {
    "additionalDirectories": [
      "../reference-project/",
      "~/shared/templates/"
    ]
  }
}

A 프로젝트 코드 스타일을 참고하면서 B 프로젝트를 개발할 때 유용하다. 두 프로젝트를 같은 폴더 안에 두지 않아도 된다

IDE 내장 터미널에서 실행하기

Claude Code는 터미널 CLI 방식으로 실행할 때 모든 기능을 온전히 쓸 수 있다. 어떤 터미널이든 상관 없다. IDE를 바꿀 필요는 없고, 지금 쓰는 편집기의 내장 터미널에서 claude만 입력하면 된다

플러그인이나 확장 프로그램으로 실행하는 건 보조 수단으로만 쓰는 것을 권장한다. 터미널 CLI가 메인이다

세션이 끊겼을 때

작업 중 실수로 Claude Code를 종료했다면 당황하지 않아도 된다

# 터미널 CLI 방식
claude --continue

# Claude Code 실행 후 슬래시 명령어 방식
/resume

/resume을 입력하면 이전 세션 목록이 나오고, 원하는 세션을 선택해 이어서 작업할 수 있다

정리

Claude Code의 권한 시스템을 한 문장으로 요약하면 이렇다

내가 허락한 것만 자동으로 실행되고, 나머지는 묻거나 막힌다

처음에는 기본값으로 시작해서 번거롭다고 느껴지는 것들을 allow에 하나씩 추가하는 방식이 가장 안전하다. 한꺼번에 모든 권한을 열어두면 편하지만, 그만큼 예상치 못한 동작이 생길 수 있다

권한 시스템을 잘 세팅해두면, Claude Code는 허락 없이 행동하지 않는다. 그리고 이미 허락한 것들은 묻지 않고 빠르게 처리한다. 개발 흐름을 방해받지 않으면서도 내 프로젝트를 내가 통제하는 구조다

출처 – 인프런 [클로드 코드 완벽 마스터: AI 개발 워크플로우 기초부터 실전까지]