Claude Code 권한 프롬프트 완벽 가이드
이 글에서 다루는 내용
이 글에서는 Claude Code의 자주 쓰이는 CLI 옵션을 정리하고, 특히 권한 프롬프트를 제어하는 여러 방법과 --dangerously-skip-permissions 플래그의 실제 위험도·안전한 사용 환경·빛나는 활용 케이스까지 실전 관점에서 다룹니다. "매번 허용 누르기 귀찮아"라는 흔한 고민부터 "그럼 언제 써야 안전한가"까지 연결해서 설명합니다.
Claude Code 자주 쓰는 CLI 옵션 정리
공식 문서 기준으로 실전에서 체감 효과가 큰 옵션들을 용도별로 묶었습니다.
세션 시작과 재개
claude "질문"— 초기 프롬프트와 함께 대화형 시작-c/--continue— 현재 디렉토리의 가장 최근 대화 이어가기-r <세션>/--resume— 특정 세션 ID 또는 이름으로 재개-n "이름"/--name— 세션에 이름 붙이기--fork-session— 재개할 때 원본 보존하고 새 세션 ID로 분기--session-id <UUID>— 특정 UUID로 세션 지정
작업 범위 제어
--add-dir ../apps ../lib— 모노레포·멀티 레포 동시 작업에 필수-w <이름>/--worktree— 격리된 git worktree에서 시작--ide— 실행 중인 IDE에 자동 연결
권한 모드
--permission-mode <모드>—default,acceptEdits,plan,auto,bypassPermissions중 선택--allowedTools— 특정 도구는 자동 허용--disallowedTools— 특정 도구 차단--tools— 사용 가능한 내장 도구 자체를 제한--dangerously-skip-permissions— 모든 권한 프롬프트 스킵
모델과 추론 수준
--model sonnet/opus/ 풀네임 — 모델 지정--effort low|medium|high|xhigh|max— 추론 수준--fallback-model— 과부하 시 폴백 (print 모드 전용)
시스템 프롬프트 커스터마이징
--append-system-prompt— 기본 프롬프트에 추가 (권장)--append-system-prompt-file— 파일로 규칙 관리--system-prompt/--system-prompt-file— 완전 교체
자동화와 스크립팅
-p/--print— 비대화형 한 번 실행 후 종료--output-format json|stream-json— 파싱 가능한 출력--json-schema— 스키마 검증된 JSON 반환--max-turns,--max-budget-usd— 턴·비용 상한--bare— 훅·플러그인·MCP·CLAUDE.md 자동 탐색 스킵 (빠른 시작)
MCP와 서브에이전트
--mcp-config— MCP 서버 로드--strict-mcp-config— 지정 서버만 사용--agents '{...}'— JSON으로 서브에이전트 즉석 정의--agent <이름>— 세션에서 쓸 에이전트 지정
권한 프롬프트를 끄는 4가지 방법
단계별로 강도가 다릅니다. 무조건 가장 강한 옵션을 쓰기보다 본인 상황에 맞는 걸 고르는 게 중요합니다.
1. 전부 스킵 — --dangerously-skip-permissions
claude --dangerously-skip-permissions
모든 권한 확인을 건너뜁니다. 이름에 "dangerously"가 붙은 이유가 있습니다.
2. 편집만 자동 승인 — acceptEdits
claude --permission-mode acceptEdits
파일 편집은 자동 통과, Bash 같은 위험 작업은 여전히 확인. 가장 실용적인 절충안입니다.
3. 특정 도구만 허용 — --allowedTools
claude --allowedTools "Read" "Edit" "Bash(git:*)" "Bash(npm:*)"
자주 쓰는 것만 열어두면 안전성과 편의성을 동시에 챙길 수 있습니다.
4. 영구 설정 — settings.json
~/.claude/settings.json 또는 프로젝트 .claude/settings.json에 저장:
{
"permissions": {
"allow": [
"Bash(git:*)",
"Bash(npm:*)",
"Read(**)",
"Edit(src/**)"
],
"deny": [
"Bash(rm -rf:*)",
"Edit(.env*)"
]
}
}
deny가 allow보다 우선순위가 높습니다. 위험한 것만 막고 나머지는 허용하는 패턴이 안전합니다.
--dangerously-skip-permissions는 얼마나 위험한가
결론부터 말하면 환경에 따라 체감 위험이 완전히 다릅니다. 신뢰된 샌드박스에서는 실용적인 옵션, 일반 개발 머신에서는 꽤 위험한 옵션입니다.
무엇이 위험한가
권한 프롬프트가 막아주던 것들입니다.
- 파괴적 파일 작업 —
rm -rf, 중요 파일 덮어쓰기,.env실수 수정 - 원치 않는 git 작업 —
git push --force,git reset --hard - 시스템 변경 —
sudo, 전역 패키지 삭제, 시스템 설정 변경 - 외부 전송 — API 키 유출 가능한 네트워크 요청, 레지스트리 publish
- 프롬프트 인젝션 증폭 — 읽어들인 파일·웹페이지·이슈에 숨겨진 악성 지시가 필터 없이 실행됨
Claude가 의도적으로 나쁜 짓을 하는 게 아니라, 실수·오해·외부 인젝션이 필터 없이 바로 실행된다는 게 핵심입니다.
안전하게 쓸 수 있는 조건
다음 중 하나라도 충족되면 쓸 만합니다.
- Docker 컨테이너·devcontainer 안 (호스트 분리)
- VM 또는 원격 개발 환경 (Codespaces, Gitpod 등)
- GitHub Actions 등 CI 환경 (에페메럴이라 매번 초기화)
- 전용 샌드박스 디렉토리 (중요 데이터 없는 곳)
- 작업 내용 전부 커밋·푸시된 상태
Anthropic 공식 문서도 컨테이너·VM 내부 사용을 권장합니다.
쓰면 안 되는 상황
- 홈 디렉토리에서 직접 실행
- 커밋 안 한 변경사항이 있는 상태
.env, SSH 키, 클라우드 credential이 접근 가능한 경로에 있음- 프로덕션 DB·서버에 접근 가능한 터미널
- 신뢰 안 되는 외부 소스를 읽는 작업
매번 허용 누르는 사람을 위한 현실적 셋업
"대충 허용 누른다"는 습관을 바꾸려 하지 말고, 그 습관을 전제로 안전한 환경을 만드는 게 훨씬 지속 가능합니다.
deny 리스트로 방어선 구축
--dangerously-skip-permissions를 써도 deny 리스트는 여전히 적용됩니다. 이게 의외로 많이 놓치는 포인트입니다.
{
"permissions": {
"deny": [
"Read(.env*)",
"Read(~/.ssh/**)",
"Read(~/.aws/**)",
"Read(~/.config/**)",
"Bash(sudo:*)",
"Bash(rm -rf ~/*)",
"Bash(rm -rf /*)",
"Bash(curl * | sh)",
"Bash(curl * | bash)",
"Bash(git push --force*)",
"Bash(git push -f*)"
]
}
}
Credential 유출, 시스템 파괴, force push 같은 돌이킬 수 없는 것들만 막고 나머지는 자유롭게 풀어주는 패턴입니다.
작업 전 자동 커밋 alias
alias cdd='git add -A && git commit -m "wip: pre-claude $(date +%H:%M)" --allow-empty && claude --dangerously-skip-permissions'
Claude 실행 전 항상 스냅샷이 남습니다. 꼬여도 git reset --hard HEAD~1로 복구. 커밋이 지저분해지면 나중에 git rebase -i로 squash.
worktree로 격리
claude -w feature-x --dangerously-skip-permissions
.claude/worktrees/feature-x에 격리된 작업 공간이 생성됩니다. 메인 브랜치와 다른 작업에 영향이 없고, 망가져도 worktree 지우고 다시 만들면 끝입니다.
하이브리드 alias 패턴
alias c='claude --permission-mode acceptEdits'
alias cy='claude -w $(date +%m%d-%H%M) --dangerously-skip-permissions'
c는 안전 기본값, cy("c yolo")는 의식적으로 타이핑하게 만들어서 "지금 이걸 쓰는 게 맞는 상황인가?"를 한 번 생각하게 하는 셀프 안전장치입니다.
skip-permissions가 실제로 하는 일
--dangerously-skip-permissions를 켜면 "이것을 실행해도 될까요?" 같은 확인 프롬프트가 전혀 뜨지 않습니다.
일반 모드:
Claude: `rm -rf node_modules`를 실행할까요? [y/n]
skip 모드:
Claude: node_modules를 정리하겠습니다.
[바로 실행됨]
파일 편집, Bash 명령, 파일 쓰기, 새 파일 생성 전부 확인 없이 바로 실행됩니다.
그래도 여전히 막히는 것들
settings.json의deny리스트 (우선순위가 더 높음)--add-dir로 명시 안 한 외부 디렉토리- OS 레벨 권한 (파일시스템 권한, sudo 등)
진행 중 개입하는 법
세션 중 ESC 키로 언제든 Claude를 중단할 수 있습니다. 확인 프롬프트가 없을 뿐, 통제권을 완전히 뺏기는 건 아닙니다.
권한 프롬프트와 명확화 질문은 다릅니다
많이 혼동하는 부분인데, --dangerously-skip-permissions로도 "A와 B 중 어떤 걸로 처리할까요?" 같은 질문은 사라지지 않습니다. 완전히 다른 종류의 상호작용입니다.
권한 프롬프트 (skip으로 사라짐):
`npm install react-router` 실행할까요? [y/n]
→ "이 행동을 해도 되냐"는 허가 요청
명확화 질문 (안 사라짐):
라우팅을 React Router로 할까요, TanStack Router로 할까요?
→ "어떤 방향으로 갈지"에 대한 의사결정 요청
명확화 질문 줄이는 방법
CLAUDE.md에 스택·선호도 명시
프로젝트 루트에 CLAUDE.md를 만들어 기본 방향을 못박으면 80%의 방향 질문이 사라집니다.
## 기술 스택
- 라우팅: React Router v6
- 상태관리: Zustand
- 스타일: Tailwind
- 패키지 매니저: pnpm
## 코딩 규칙
- 컴포넌트는 함수형 + hooks
- 파일명은 kebab-case
- 타입은 type 선호
프롬프트로 결정 권한 위임
claude --append-system-prompt "모호한 선택지가 있으면 묻지 말고
업계 표준과 프로젝트 컨벤션에 맞춰 합리적으로 결정하고 진행해라.
결정 사항은 작업 후 요약에 포함해라."
계획 단계에서 일괄 결정
긴 작업은 plan 모드로 한 번 훑고 계획서에서 모든 결정을 일괄 확정하면, 이후에는 개별 질문이 사라집니다.
다만 방향 질문을 완전히 없애는 건 권장하지 않습니다. 여기서 잘못 결정하면 몇 시간 롤백이 필요할 수 있어서, 5초 답변이 훨씬 저렴합니다.
--dangerously-skip-permissions가 빛나는 8가지 케이스
위험성만 강조되어 과하게 피해지는 면이 있습니다. 맞는 맥락에서는 진짜 게임 체인저입니다.
1. 컨테이너·샌드박스의 장시간 작업
devcontainer, Docker, VM, Codespaces 안에서는 기본값으로 켜는 게 낫습니다. 격리되어 있으니 최악의 경우도 컨테이너 재생성으로 끝납니다.
2. 대량 반복 작업
수십~수백 개 파일을 일관된 규칙으로 바꾸는 작업. 레거시 마이그레이션(class→함수형, JS→TS), API 전체에 로깅 추가, i18n 도입, import alias 변경 등. 파일마다 yes 누르는 건 순수한 낭비입니다.
3. 탐색적 프로토타이핑
해커톤, 주말 프로젝트, 라이브러리 실험, MVP 검증. 어차피 코드를 버릴 수도 있는 작업에서 프롬프트는 노이즈입니다.
4. 자율 에이전트 워크플로우
claude --dangerously-skip-permissions -p \
"todo.md의 모든 항목을 구현하고, 각 항목마다 커밋해라.
테스트 작성하고 전부 통과시킨 뒤 PR 준비해라" \
> work.log 2>&1 &
일 시켜놓고 떠나는 사용법. 프롬프트가 있으면 회의 중에 멈춰 있게 됩니다.
5. CI/CD 파이프라인
GitHub Actions, GitLab CI 같은 에페메럴 환경에서는 사실상 필수입니다. PR 자동 리뷰·수정, 실패 테스트 자동 수정, 자동 릴리즈 노트 생성 등. CI 러너는 매번 새로 만들어지니 위험 자체가 없습니다.
6. 대규모 리팩터링·코드베이스 수술
모노레포 재편성, 디자인 시스템 전면 교체, 프레임워크 메이저 업그레이드. worktree와 조합하면 강력합니다.
claude -w refactor-v2 --dangerously-skip-permissions
7. 반복 가능한 개인 작업
dotfiles 정리, 자동화 스크립트, 알고리즘 풀이, 블로그 초안 정리. 팀에 영향 안 가고 본인만 손해면 마찰을 최소화하는 게 이득입니다.
8. 방향이 확정된 구현 단계
설계 토론이 끝나고 이제 그냥 구현만 쳐내야 할 때. 매 파일마다 확인 받는 게 흐름을 깨는 주범입니다.
핵심 정리
--dangerously-skip-permissions는 위험한 플래그가 아니라 맥락에 예민한 플래그입니다. 맞는 맥락에서는 진짜 유용하고, 틀린 맥락에서는 진짜 위험합니다.
일반 개발 머신에서는 --permission-mode acceptEdits + --allowedTools가 거의 같은 체감 속도에 훨씬 안전합니다. 컨테이너·CI·worktree 같은 격리 환경이라면 망설이지 말고 skip-permissions를 쓰세요. 그리고 "매번 허용 누르는 습관"이 있다면, 이를 나쁜 습관으로 고치려 하지 말고 deny 리스트·자동 커밋·worktree로 안전한 환경을 만드는 쪽이 훨씬 지속 가능합니다.