TechFeedTechFeed
바이브코딩

클로드 코드 완전 자동화 #1 — 권한 질문 없이 실행하기

Claude Code가 매번 권한을 물어서 자동화가 안 된다면. --dangerously-skip-permissions와 allowedTools로 해결하는 방법.

한 줄 요약: claude --dangerously-skip-permissions 플래그 하나로 클로드 코드(Claude Code)의 모든 권한 질문을 없앨 수 있다. 로컬 개인 작업 환경에서만 사용하고, 프로덕션·공유 서버에서는 절대 쓰지 않는다.

Claude Code를 쓰다 보면 파일 하나 고칠 때마다, 명령어 하나 실행할 때마다 "이 작업을 수행할까요?"가 뜬다. 자동화 스크립트에 넣거나 길게 돌려야 할 때는 이 질문들이 전부 블로킹 포인트가 된다. 이 글에서는 권한 모드의 구조를 설명하고, 상황에 맞는 설정 방법을 단계별로 정리한다. 2026년 3월 기준 최신 설정 기준이다.

왜 Claude Code는 매번 물어보는가

Claude Code는 기본적으로 파일 시스템 접근과 셸 명령 실행 전에 사용자 승인을 요구한다. 이유는 하나다. 에이전트가 임의로 파일을 삭제하거나 외부 서비스에 요청을 보내는 것을 방지하기 위해서다.

권한 모드는 4가지다.

모드파일 편집셸 명령외부 API특징
Ask permissions (기본)매번 물어봄매번 물어봄매번 물어봄가장 안전, 자동화 불가
Auto accept edits자동 승인매번 물어봄매번 물어봄파일 편집만 자동
Plan mode읽기 전용실행 안 함읽기만계획만 보고 실행은 직접
dangerously-skip-permissions자동 승인자동 승인자동 승인전부 자동, 위험 있음

📌 참고: Auto accept edits는 파일 편집은 넘기지만 npm install, git push 같은 셸 명령은 여전히 승인을 요구한다. 완전 자동화가 목적이라면 이 모드로는 부족하다.

--dangerously-skip-permissions 상세 분석

이 플래그는 Claude Code가 다음 작업들의 승인 요청을 전부 건너뛰게 한다.

  • 파일 생성, 수정, 삭제
  • 셸 명령 실행 (bash, npm, python, git 등)
  • MCP 서버를 통한 외부 API 호출
  • 디렉토리 탐색 및 읽기

이름에 "dangerously"가 붙은 이유는 명확하다. Claude가 내리는 판단이 잘못되었을 때 사용자가 개입할 기회 자체가 없어진다. 예를 들어 프롬프트를 잘못 작성하면 의도하지 않은 파일이 삭제되거나, 외부로 데이터가 전송될 수 있다.

기본 실행 방법
# 현재 디렉토리에서 권한 질문 없이 실행 claude --dangerously-skip-permissions # 특정 작업을 바로 실행 (headless) claude -p "package.json의 의존성을 최신 버전으로 업데이트해줘" --dangerously-skip-permissions

⚠️ 막히는 케이스: 공유 개발 서버, CI/CD 파이프라인, Docker 컨테이너에서 이 플래그를 쓰는 경우가 있다. 해당 환경에서 Claude가 의도하지 않은 파일을 건드리거나 외부 요청을 보낼 경우 복구가 어렵다. 프로덕션 환경에서는 절대 사용하지 않는다. 로컬 개인 작업, 테스트 환경에서만 사용해야 한다.

이 플래그를 써도 되는 상황과 쓰면 안 되는 상황을 명확히 구분한다.

상황사용 여부이유
로컬 개인 프로젝트OK본인만 영향, git으로 롤백 가능
테스트용 VM/컨테이너OK격리된 환경, 실환경에 영향 없음
CI/CD 파이프라인 (읽기 전용)조건부 OKallowedTools로 범위 제한 시에만
프로덕션 서버NO임의 파일 삭제, 서비스 중단 위험
공유 개발 환경NO다른 사람 작업에 영향
외부 API 키가 있는 환경NOAPI 남용, 비용 폭탄 위험

allowedTools로 필요한 것만 허용하기

--dangerously-skip-permissions가 너무 광범위하다면, 허용할 도구만 명시하는 방법이 더 안전하다. 두 가지 방법이 있다.

방법 1: CLI 플래그로 지정 (일회성)

실행 시 --allowedTools 플래그로 허용할 도구 목록을 지정한다. 지정하지 않은 도구는 기본값(물어봄)으로 동작한다.

--allowedTools 플래그 사용 예시
# Python 실행과 파일 편집만 자동 승인 claude -p "테스트를 실행하고 실패한 케이스를 수정해줘" \ --allowedTools "Bash(python *),Edit,Write" # npm 명령과 파일 편집만 자동 승인 claude -p "의존성 설치 후 빌드해줘" \ --allowedTools "Bash(npm *),Edit,Write,Read" # git 명령만 자동 승인 claude -p "변경사항을 커밋해줘" \ --allowedTools "Bash(git *)"

방법 2: settings.json으로 영구 설정

매번 플래그를 붙이기 번거롭다면 설정 파일에 고정해둘 수 있다. permissions.allow 배열에 허용할 도구를 추가한다.

.claude/settings.json — 프로젝트 단위 설정
{ "permissions": { "allow": [ "Bash(python *)", "Bash(npm *)", "Bash(node *)", "Edit", "Write", "Read" ], "deny": [ "Bash(rm -rf *)", "Bash(curl *)", "Bash(wget *)" ] } }

💡 팁: deny 배열을 활용하면 위험한 명령어를 명시적으로 차단할 수 있다. rm -rf *, curl, wget처럼 의도치 않은 삭제나 외부 통신을 막는 데 유용하다. allowdeny가 충돌하면 deny가 우선한다.

프로젝트 설정 vs 전역 설정

settings.json 파일을 어디에 두느냐에 따라 적용 범위가 달라진다.

파일 위치적용 범위용도
.claude/settings.json해당 프로젝트만프로젝트마다 다른 권한 설정
~/.claude/settings.json모든 프로젝트공통 기본값 지정

우선순위는 프로젝트 설정 > 전역 설정이다. 같은 키가 있으면 프로젝트 설정이 덮어쓴다.

권장 전략은 다음과 같다.

  • ~/.claude/settings.json에는 공통으로 안전한 기본값만 넣는다 (예: Read만 허용)
  • 자동화가 필요한 프로젝트의 .claude/settings.json에 해당 프로젝트에 맞는 허용 목록을 추가한다
  • .claude/settings.json은 git에 커밋해두면 팀원이 동일한 설정으로 작업 가능하다
전역 기본 설정 예시 (~/.claude/settings.json)
{ "permissions": { "allow": [ "Read" ], "deny": [ "Bash(rm *)", "Bash(curl *)", "Bash(wget *)" ] } }

Headless 모드 — 스크립트에서 Claude 호출하기

Headless 모드는 claude -p 플래그로 프롬프트를 직접 전달하고 결과를 받는 방식이다. 터미널 인터랙션 없이 스크립트 안에서 Claude를 호출할 때 쓴다.

셸 스크립트, cron job, CI/CD에서 Claude를 도구처럼 호출하는 게 목적이라면 이 모드가 맞다.

Headless 모드 기본 사용법
# 단일 작업 실행 (-p = --print, non-interactive) claude -p "현재 디렉토리의 TODO.md를 읽고 완료된 항목을 체크해줘" \ --allowedTools "Read,Edit" # 출력 결과를 파일로 저장 claude -p "src/ 디렉토리의 함수 목록을 정리해줘" \ --allowedTools "Read" \ > function-list.txt # 환경변수로 API 키 지정 (CI/CD 환경) ANTHROPIC_API_KEY=$SECRET_KEY \ claude -p "린트 에러를 수정해줘" \ --allowedTools "Bash(npm run lint),Edit"

⚠️ 막히는 케이스: Headless 모드에서 Claude가 중간에 clarification을 요청하면 응답 없이 멈출 수 있다. 프롬프트를 작성할 때 "모르는 게 있으면 가장 합리적인 방법으로 진행해줘"를 명시적으로 포함하거나, 작업 범위를 충분히 구체화해야 한다.

설정 전 체크리스트

권한 자동화 설정 전에 아래 항목을 확인한다.

  • 작업 환경이 로컬 또는 격리된 테스트 환경인가?
  • git 저장소가 초기화되어 있어 롤백이 가능한가?
  • 외부 API 키나 민감한 환경변수가 포함된 환경인가? (포함되어 있다면 allowedTools로 Bash 범위를 제한)
  • 의도하지 않은 파일이 삭제되어도 복구할 수 있는가?
  • --dangerously-skip-permissions 대신 --allowedTools로 범위를 좁힐 수 있는가?

💡 팁: 처음 자동화를 설정할 때는 --dangerously-skip-permissions 대신 --allowedTools "Read,Edit,Write"로 시작하는 게 좋다. 셸 명령 없이 파일 편집만 자동화해도 대부분의 반복 작업은 해결된다. 셸 명령이 실제로 필요해진 시점에 범위를 넓힌다.

claude-code클로드 코드자동화권한skip-permissionsallowedTools
다음 →
클로드 코드 완전 자동화 #2 — cron으로 매시간 무인 실행하기

관련 포스트

클로드 코드 완전 자동화 #2 — cron으로 매시간 무인 실행하기2026-03-05클로드 코드 완전 자동화 #3 — 리밋 걸리면? 중단과 재개 전략2026-03-06클로드 코드 완전 자동화 #4 — 한번 명령으로 모든 것을 자동으로2026-03-07바이브 코딩이란? 2026년 완전 가이드2026-01-22