Claude Code Auto Mode 보안 점검: 분류기가 막는 것, 무시되는 allow 규칙, 설정 위치

승인 피로를 줄이면서 기존 권한 설정이 어떻게 바뀌는지 공식 문서와 점검 스크립트로 확인하기

Claude Code Auto Mode 점검 썸네일

핵심 요약

  1. auto mode는 별도 분류기가 동작을 검토해 프롬프트를 줄이지만, 문서상 안전을 보장하지는 않는다.
  2. deny 규칙은 모든 모드에서 적용되므로 비밀값 경로 차단은 deny로 둔다.
  3. Bash(*), 인터프리터 와일드카드, 패키지 매니저 실행, Agent, Monitor 허용 규칙은 auto mode에서 무시된다.
  4. 프로젝트 설정 파일의 defaultMode "auto"는 적용되지 않으므로 사용자 설정이나 관리 설정에 둔다.

AI 코딩 에이전트에 매번 승인을 누르다 보면 결국 내용을 보지 않고 누르게 된다. Claude Code의 auto mode는 이 승인 피로를 줄이기 위해, 사람 대신 별도의 분류기 모델이 동작을 검토하게 하는 권한 모드다. 공식 문서는 auto mode가 프롬프트를 줄이지만 안전을 보장하지는 않는다고 명시한다. 이 글은 권한 모드 문서(2026-10-07 확인)를 기준으로 분류기의 판단 순서, 기본 차단 목록, 기존 권한 설정과의 관계를 정리하고, 설정 파일을 점검하는 스크립트를 제공한다.

권한 모드 비교

모드묻지 않고 실행하는 것적합한 상황
default (Manual)읽기만민감한 작업, 낯선 코드
acceptEdits읽기, 파일 수정, 흔한 파일 명령검토하며 반복 수정
plan읽기(auto mode 사용 가능 시 분류기 승인 명령 포함)수정 전 탐색
auto분류기가 승인한 동작방향을 신뢰하는 작업
dontAsk읽기와 사전 허용 도구만, 나머지는 거부잠근 CI·스크립트
bypassPermissions전부격리된 컨테이너·VM에서만

deny 규칙은 bypassPermissions를 포함한 모든 모드에서 차단한다. 모드는 기본값이고, 그 위에 allow·ask·deny 규칙을 얹는 구조다.

분류기가 동작을 판단하는 순서

  1. allow·ask·deny 규칙에 맞는 동작은 바로 결정된다. 단, 보호 경로 쓰기는 allow 규칙이 있어도 분류기로 가고, 명령 내용으로 매칭하는 ask 규칙(예: Bash(git push *))은 프롬프트를 띄운다.
  2. 읽기 전용 동작과 작업 디렉터리 안의 파일 수정은 자동 승인된다(보호 경로 쓰기, 작업 디렉터리 밖 첫 읽기는 제외).
  3. 나머지는 분류기로 간다.
  4. 분류기가 차단하면 Claude가 차단 사유를 받는다.

문서에 따르면 분류기는 사용자 메시지, 읽기 외의 도구 호출, CLAUDE.md 내용을 보고, 도구 실행 결과는 보지 않는다. 파일이나 웹 페이지에 숨은 악성 지시가 분류기를 직접 조작하지 못하게 하기 위해서다.

기본 차단 목록에서 개발자가 자주 부딪히는 항목

  • curl | bash처럼 코드를 내려받아 실행하기
  • 프로덕션 배포·마이그레이션, 공유 인프라 수정
  • force push, git reset --hard·git clean -fd 같은 미커밋 작업 폐기
  • 세션에서 만들지 않은 커밋에 대한 git commit --amend
  • 사람이 승인하지 않은 PR 병합, 자기 PR 승인, CI 검사 비활성화
  • 보안 동작을 지키는 테스트·assertion을 주석 처리하거나 강제로 통과시키기
  • 세션 중에 추가하거나 바꾼 git remote로 push 대상 변경

auto mode에 들어가면 무시되는 allow 규칙

기존에 넓게 열어 둔 allow 규칙이 auto mode에서도 그대로 통한다면 분류기를 우회하는 길이 된다. 그래서 문서는 auto mode 진입 시 임의 코드 실행을 허용하는 넓은 규칙을 제외한다고 밝힌다. 전체 Bash(*)·PowerShell(*), Bash(python*) 같은 인터프리터 와일드카드, 패키지 매니저 실행 명령, Agent 허용, Monitor 허용이다. Bash(npm test)처럼 좁은 규칙은 유지되고, auto mode를 나가면 제외된 규칙이 복원된다.

설정 파일 점검 스크립트

아래 스크립트는 설정 파일의 permissions를 읽고 auto mode에서 무시될 넓은 규칙, 비밀값 경로에 대한 deny 규칙 누락, 효과가 없는 위치의 defaultMode: "auto"를 알려 준다. 문서상 프로젝트의 .claude/settings.json이나 .claude/settings.local.json에 둔 "auto"는 적용되지 않고, 사용자 설정(~/.claude/settings.json)이나 관리 설정에 둬야 한다.

// 사용법: node audit-permissions.mjs <설정 파일...>
// Claude Code 설정의 permissions를 읽고, auto mode에서 무시되는 넓은 allow 규칙과
// 빠진 deny 규칙, 효과가 없는 defaultMode 위치를 알려 준다(읽기 전용).
import { readFileSync, existsSync } from 'node:fs';
import { resolve } from 'node:path';
import { homedir } from 'node:os';

// 공식 문서가 auto mode 진입 시 제외한다고 밝힌 규칙 유형
const DROPPED = [
  [/^(Bash|PowerShell)(\(\*\))?$/, '셸 전체 허용'],
  [/^(Bash|PowerShell)\((python|python3|node|deno|bun|ruby|perl|php|bash|sh|pwsh)[\s*]/, '인터프리터 와일드카드'],
  [/^(Bash|PowerShell)\((npm|pnpm|yarn|bun) (run|exec|x)\b|^(Bash|PowerShell)\(npx\b/, '패키지 매니저 실행 명령'],
  [/^Agent(\(|$)/, 'Agent 허용'],
  [/^Monitor(\(|$)/, 'Monitor 허용'],
];
const SECRET_PATHS = ['.env', 'secrets/', '*.pem', 'id_rsa'];

for (const file of process.argv.slice(2)) {
  console.log(`== ${file}`);
  if (!existsSync(file)) { console.log('   (파일 없음)'); continue; }
  const p = JSON.parse(readFileSync(file, 'utf8')).permissions || {};
  const allow = p.allow || [];
  const deny = p.deny || [];

  const dropped = allow.flatMap((r) => DROPPED.filter(([re]) => re.test(r)).map(([, why]) => `${r}  ← ${why}`));
  console.log(`   allow ${allow.length}개 · deny ${deny.length}개 · ask ${(p.ask || []).length}개`);
  dropped.forEach((d) => console.log(`   [auto mode에서 무시] ${d}`));

  const missing = SECRET_PATHS.filter((s) => !deny.some((d) => d.startsWith('Read(') && d.includes(s.replace('*', ''))));
  if (missing.length) console.log(`   [deny 없음] 비밀값 경로: ${missing.join(', ')}`);

  // 문서: 프로젝트의 .claude/settings(.local).json에 둔 "auto"는 적용되지 않는다.
  const isUserFile = resolve(file) === resolve(homedir(), '.claude', 'settings.json');
  if (p.defaultMode === 'auto' && !isUserFile) console.log('   [효과 없음] 프로젝트 설정의 defaultMode "auto"는 적용되지 않는다 → ~/.claude/settings.json으로 옮긴다');
  else if (p.defaultMode) console.log(`   defaultMode: ${p.defaultMode}`);
}

먼저 흔한 실수를 모은 예시 설정 파일로 실행했다.

{
  "permissions": {
    "defaultMode": "auto",
    "allow": ["Bash(*)", "Bash(python3 *)", "Bash(npm run *)", "Bash(npm test)", "Agent", "Read(./src/**)"],
    "deny": ["Read(./.env)", "Read(./.env.*)"]
  }
}
$ node audit-permissions.mjs .claude/settings.json   # 예시 프로젝트
== .claude/settings.json
   allow 6개 · deny 2개 · ask 0개
   [auto mode에서 무시] Bash(*)  ← 셸 전체 허용
   [auto mode에서 무시] Bash(python3 *)  ← 인터프리터 와일드카드
   [auto mode에서 무시] Bash(npm run *)  ← 패키지 매니저 실행 명령
   [auto mode에서 무시] Agent  ← Agent 허용
   [deny 없음] 비밀값 경로: secrets/, *.pem, id_rsa
   [효과 없음] 프로젝트 설정의 defaultMode "auto"는 적용되지 않는다 → ~/.claude/settings.json으로 옮긴다

같은 스크립트를 이 사이트를 만드는 저장소의 프로젝트 설정 파일 두 개에 2026-10-07 실행한 결과다.

$ node audit-permissions.mjs .claude/settings.json .claude/settings.local.json
== .claude/settings.json
   allow 0개 · deny 0개 · ask 0개
   [deny 없음] 비밀값 경로: .env, secrets/, *.pem, id_rsa
   defaultMode: acceptEdits
== .claude/settings.local.json
   allow 2개 · deny 0개 · ask 0개
   [auto mode에서 무시] Bash(node *)  ← 인터프리터 와일드카드
   [deny 없음] 비밀값 경로: .env, secrets/, *.pem, id_rsa

작업 중 승인하며 쌓인 Bash(node *)는 manual·acceptEdits 모드에서는 모든 node 스크립트 실행을 묻지 않고 허용하지만, auto mode에서는 무시되어 분류기 검토를 받는다. 반대로 auto mode가 아닐 때는 이 규칙이 넓은 실행 권한이 되므로, 자주 쓰는 스크립트만 Bash(node scripts/build.js)처럼 좁히는 편이 낫다. deny 규칙이 하나도 없다는 점도 드러났다. 비밀값 파일 읽기 차단은 모드와 관계없이 적용되는 유일한 장치이므로, .env 차단 설정대로 먼저 추가한다.

반복 차단과 대체 동작

분류기가 연속 3번 또는 세션 누적 20번 차단하면 auto mode가 멈추고 다시 사람에게 묻는다. 이 임계값은 설정할 수 없다. 차단된 동작은 /permissions의 Recently denied 탭에서 확인하고 수동 승인으로 재시도할 수 있다. 문서는 반복 차단이 대개 분류기가 사내 인프라 맥락을 모르기 때문이라고 설명하므로, 자주 막히는 대상이 정상 인프라라면 관리자가 신뢰 인프라를 설정한다. 비대화형 -p 실행에서는 되돌아갈 프롬프트가 없어 임계값에 도달해도 해당 동작만 실행하지 않고 작업을 계속한다는 점도 기억해 둔다. 설정 전반은 Claude Code 설정에서 다룬다.

초보자가 자주 실수하는 포인트

  • auto mode를 켜면 기존 allow 규칙이 그대로 적용된다고 생각한다.
  • 프로젝트 .claude/settings.json에 defaultMode "auto"를 넣고 적용되지 않는 이유를 찾는다.
  • deny 규칙 없이 모드만으로 비밀값을 보호하려 한다.
  • 작업 중 승인하며 쌓인 넓은 allow 규칙을 정리하지 않는다.

체크리스트

  • 설정 파일 점검 스크립트로 넓은 allow 규칙을 확인했다.
  • .env와 비밀값 경로에 deny 규칙이 있다.
  • defaultMode "auto"를 쓴다면 사용자·관리 설정에 두었다.
  • 자주 막히는 대상이 정상 인프라인지 Recently denied에서 확인했다.
  • 민감한 작업은 Manual 모드로 진행한다.

자주 묻는 질문

auto mode를 조직 전체에서 끌 수 있나요?

관리 설정에서 permissions.disableAutoMode를 "disable"로 두면 auto mode를 선택할 수 없게 됩니다. 문서는 Team과 Enterprise에서 auto mode가 기본으로 켜져 있고 관리자가 이 설정으로 끌 수 있다고 안내합니다.

분류기 호출에도 비용이 드나요?

문서에 따르면 Enterprise 플랜과 Claude API 등 일부 계정에서는 분류기 호출이 토큰 사용량에 포함됩니다. 읽기와 작업 디렉터리 안의 수정은 분류기를 거치지 않으므로, 비용은 주로 셸 명령과 네트워크 동작에서 생깁니다.

참고 자료 · 검증 기준

위 자료와 내용을 대조한 날짜: . 도구·서비스 정책은 이후 바뀔 수 있으므로 적용 전 공식 문서를 다시 확인하세요.

이 글은 실제 실무 환경 테스트 및 검증된 기술 자료를 바탕으로 작성되었으며, 환경 변화에 따라 지속적으로 갱신됩니다.