승인 버튼 클릭을 멈추세요: Claude Code CLI 권한을 커스텀하는 방법
요약
Claude Code 사용 시 반복되는 승인 버튼 클릭의 번거로움을 줄이기 위해 권한 설정을 커스텀하는 방법을 설명합니다. 세션 모드 변경과 settings.json을 통한 허용/거부 규칙 설정을 통해 작업 효율을 높이는 가이드를 제공합니다.
핵심 포인트
- Claude Code의 권한 모드(default, plan, acceptEdits 등) 활용법
- 설정 우선순위(기업 정책 > 사용자 > 프로젝트) 이해
- allow 및 deny 규칙을 통한 세밀한 도구 제어 방법
- 팀 협업을 위한 settings.json 관리 및 개인 설정 분리 팁
제가 실제 작업—Spring Boot 서비스 마이그레이션, 몇몇 패키지 구조 재조정, 설정 업데이트—에 Claude Code를 처음 실행했을 때, 저는 Claude가 실제로 무엇을 했는지 검토하는 시간보다 Approve (승인) 버튼을 클릭하는 데 더 많은 시간을 보냈습니다.
모든 파일 읽기. 모든 git status. 모든 ls. 승인. 승인. 승인.
Claude가 작업을 마칠 때쯤, 저는 40여 개의 프롬프트를 클릭해 지나갔고, 작업을 시작하기 전보다 무엇이 변경되었는지에 대해 더 신뢰할 수 있게 된 것도 아니었습니다.
권한 시스템이 의도와 정반대로 작동하고 있었습니다. 저에게 제어권을 주는 대신, 읽지도 않고 모든 것에 무조건 승인(rubber-stamp)하도록 저를 길들였습니다.
이것이 이번 포스트에서 다룰 문제입니다. 권한을 완전히 건너뛰는 방법이 아니라—그것은 다른 이야기입니다—정말로 중요한 사항은 승인하고, 중요하지 않은 사항은 두 번 생각할 필요가 없도록 권한을 구성하는 방법에 대해 다룹니다.
권한 시스템이 존재하는 이유
Claude Code는 단순한 채팅창이 아닙니다. 파일 읽기, 파일 쓰기, 임의의 셸(shell) 명령 실행, MCP를 통한 외부 서비스 호출이 가능하며, 단계 사이에 멈추지 않고 이 모든 것을 다단계 작업으로 체인(chain)화할 수 있습니다. 이것이 실제 작업에 유용하게 만드는 요소입니다. 또한, 여러분이 아끼는 어떤 머신에서든
| 모드 (Mode) | 읽기 (Reads) | 편집 (Edits) | Bash | 최적의 용도 (Best for) |
|---|---|---|---|---|
default | 자동 (Auto) | 확인 (Asks) | 확인 (Asks) | 안전한 시작점, 새로운 프로젝트 |
| ... |
/permissions 명령어를 사용하여 세션 중간에 모드를 전환할 수 있습니다. 기본값은 settings.json에서 설정합니다:
{
"permissions": {
"defaultMode": "acceptEdits"
...
사용 가능한 값은 default, plan, acceptEdits, dontAsk, 그리고 bypassPermissions입니다.
설정이 저장되는 위치
Claude Code는 우선순위가 높은 순서대로 여러 위치에서 설정을 읽어옵니다:
기업 관리 정책 (Enterprise managed policy) → ~/.claude/managed-settings.json
사용자 설정 (User settings) → ~/.claude/settings.json
프로젝트 설정 (Project settings) → .claude/settings.json
...
범위(scope)가 더 넓은 설정이 우선합니다. 만약 관리 정책(managed policy)에서 특정 권한을 거부(deny)했다면, 사용자의 설정이나 프로젝트 설정 그 무엇으로도 이를 무효화할 수 없습니다. 프로젝트 설정에서 Bash(curl *)를 거부했다면, 사용자 설정에서 이를 다시 허용할 수 없습니다.
경험 법칙 (Rule of thumb): 팀 전체가 동일한 기본 설정을 사용할 수 있도록
settings.json을 커밋(commit)하세요. 개인적인 재정의(override) 사항은settings.local.json에 넣고.gitignore에 추가하여 관리하세요.
허용(Allow) 및 거부(Deny) 규칙
규칙은 permissions 객체 내에 존재하며 일관된 형식을 따릅니다. 도구 이름만 단독으로 쓰거나, 괄호 안에 지정자(specifier)를 포함한 도구 이름을 사용합니다.
{
"permissions": {
"allow": ["Bash(npm run *)"],
...
⚠️ 평가 순서: 거부 (deny) → 확인 (ask) → 허용 (allow). 첫 번째로 일치하는 규칙이 적용되며, 거부(deny)가 항상 우선합니다. 좁은 범위의 허용(allow) 규칙은 더 넓은 범위의 거부(deny) 규칙을 무효화할 수 없습니다. 만약
deny: ["Bash(aws *)"]라고 작성한 뒤allow: ["Bash(aws s3 ls)"]를 작성한다면, 허용 규칙은 절대 실행되지 않습니다.
단독 도구 이름과 범위가 지정된 규칙(scoped rule)은 다르게 동작합니다. 이 부분이 사람들이 자주 실수하는 지점입니다.
거부 목록에 `
도구를 완전히 비활성화하려면 이름만 단독으로 사용하세요. 도구를 사용하되 범위를 제한하고 싶다면 범위 지정 규칙 (scoped rules)을 사용하세요.
대상이 될 수 있는 도구들
규칙을 작성하게 될 주요 도구들은 다음과 같습니다:
| 도구 | 범위 |
|---|---|
Bash | 셸 명령 실행 — 구성 시 가장 중요한 도구입니다 |
| ... |
Bash 규칙의 경우, 지정자는 전체 명령 문자열과 매칭되는 글로브 (glob) 패턴입니다: Bash(git *)는 모든 git 명령과 매칭되며, Bash(npm run *)는 모든 npm 스크립트와 매칭되고, Bash(git push *)는 특히 git push 명령과 매칭됩니다.
실제 시나리오를 위한 실용적인 구성
본인이 소유한 프로젝트에서의 일상적인 개발
활발한 코딩 세션 중이며 Claude와 이미 계획에 합의했을 때 이 설정을 사용하세요. 편집은 자유롭게 흐르도록 하되, push나 파괴적인 명령을 실행하기 전에는 여전히 일시 정지(pause)를 거치고 싶을 때 적합합니다.
{
"permissions": {
"defaultMode": "acceptEdits",
...
익숙하지 않은 코드베이스 탐색 또는 리뷰
Claude가 분석하고 설명은 하되 아무것도 건드리지 않기를 원할 때 사용하세요. 새로운 리포지토리(repo)에 온보딩하거나, 아키텍처 리뷰를 수행하거나, 변경 사항에 합의하기 전에 설계를 논의할 때 적합합니다.
{
"permissions": {
"defaultMode": "plan",
...
CI/CD 파이프라인 (GitHub Actions)
격리된 환경에서의 무인 실행(unattended runs)을 위해 이 설정을 사용하세요. 우회 모드 (bypass mode)에서도 거부 (deny) 규칙은 여전히 작동하므로, 컨테이너를 벗어날 수 있는 모든 것을 차단하는 데 사용하세요.
{
"permissions": {
"defaultMode": "bypassPermissions",
...
모드와 상관없이 민감한 파일 보호
어떤 모드에 있더라도 Claude가 자격 증명(credentials)이나 환경 파일 (environment files)을 절대 읽지 못하도록 방지하려면 이 설정을 사용하세요.
{
"permissions": {
"deny": [
...
/permissions 명령
매 세션마다 수동으로 JSON을 편집하는 대신, Claude Code 내부의 내장된 /permissions 명령을 사용하세요. 이 명령은 다음과 같은 작업을 수행할 수 있는 대화형 UI를 엽니다:
- 현재 모드 확인
- 현재 세션의 모드 전환
settings.local.json에 영구적으로 저장되는 허용(allow) 또는 거부(deny) 규칙 추가- 지금까지 자동 승인된 내용 검토
세션 동안 반복적으로 승인하는 것이 있다면, 계속 클릭하는 것보다 /permissions를 통해 추가하는 것이 더 빠릅니다.
일회성 세션을 위한 CLI 플래그
만약 settings.json을 건드리고 싶지 않다면, 시작 시 단일 세션에 대한 규칙을 설정할 수 있습니다:
# 이 세션에서 특정 도구를 허용합니다
claude --allowedTools "Read,Grep,Glob,Bash(git log*),Bash(git diff*)"
...
플래그는 현재 세션에만 적용되며 어떤 설정 파일도 수정하지 않습니다.
대부분의 사람들이 잘못 이해하는 한 가지
:::warning
bypassPermissions가 거부 규칙을 무효화하지는 않습니다. 거부 규칙은 권한 모드보다 먼저 평가됩니다. 따라서 우회(bypass) 시에도 항상 작동합니다.
:::
이것이 CI 환경에서 bypass를 안전하게 만드는 메커니즘입니다. 즉, 환경 밖으로 탈출할 수 있는 특정 항목을 제외하고는 모든 것을 허용할 수 있다는 의미입니다.
bypassPermissions가 하는 일은 명시적으로 거부되지 않은 모든 것에 대한
이 글은 소프트웨어 아키텍트(Software Architect)를 위한 실용적인 AI 도구 시리즈의 일부입니다. 이 내용이 유용했거나, 여러분의 워크플로우(Workflow)에 잘 맞는 권한 패턴을 발견하셨다면 댓글로 알려주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기