Claude Code 소스에 숨겨진 절약 팁, 보고 나면 API 청구서의 절반을 아낄 수 있다

April 1, 2026

난이도: 중급 | 소요 시간: 25분 | 얻는 것: 소스 수준 7가지 절약 테크닉을 익혀 API 청구서를 30-60%까지 줄이는 법

목표 독자

Claude Code를 사용 중이거나 본격적으로 깊게 활용할 계획인 풀스택 엔지니어. 특히 API 비용을 통제하는 데 관심이 큰 개인 개발자와 소규모 팀을 대상으로 합니다. 만약 Claude Code에 대한 이해가 “설치하면 그냥 쓸 수 있다” 수준에 머물러 있다면, 이 글은 그 배후에 숨겨진 조절 가능한 파라미터가 얼마나 많은지 보여줄 겁니다.

핵심 의존성 및 환경

  • Node.js 18+
  • Claude Code 2.1.88
  • TypeScript 기본 지식(타입 정의만 읽을 수 있으면 됨)
  • npm 또는 pnpm
  • 유효한 ANTHROPIC_API_KEY 1개

TIP

이 글의 모든 소스 코드 사례는 2.1.88 버전을 기반으로 합니다. 버전 확인 방법: claude --version. 다른 버전에서는 소스 세부가 약간 다를 수 있지만, 핵심 메커니즘은 동일합니다.

전체 프로젝트 구조 트리

# Claude Code 소스 구조(관련 디렉터리)
src/
├── cost-tracker.ts              # 비용 추적 핵심
├── costHook.ts                  # 비용 출력 Hook
├── Tool.ts                      # 도구 추상화 팩토리
├── tools.ts                     # 도구 등록 및 필터
├── tools/
│   ├── BashTool/                # Shell 실행 도구
│   │   └── BashTool.tsx
│   │   └── readOnlyValidation.ts # 읽기 전용 판별 로직
│   ├── FileReadTool/            # 파일 읽기
│   ├── FileEditTool/            # 파일 편집
│   └── ...
├── services/
│   ├── compact/                 # 컨텍스트 압축 서비스
│   │   └── compact.ts
│   └── tools/
│       └── toolOrchestration.ts # 도구 동시성 분할
├── skills/
│   └── loadSkillsDir.ts         # 스킬 로딩
├── types/
│   └── permissions.ts           # 권한 모드 정의
├── upstreamproxy/               # 업스트림 프록시(엔터프라이즈)
│   ├── upstreamproxy.ts
│   └── relay.ts
└── utils/
    └── git.ts                   # Git / Worktree 도구

1. Claude Code 청구서는 어떻게 더 비싸지나

절약 방법을 말하기 전에, 먼저 돈이 어떻게 쓰이는지부터 정리하겠습니다. Claude Code의 API 청구서는 주로 세 가지에 의해 결정됩니다.

1. 컨텍스트 토큰 총량

대화가 시작될 때마다 Claude Code는 과거 메시지, 도구 호출 결과, 파일 내용을 API로 묶어 전송합니다. 컨텍스트가 커질수록 요청 1회당 단가도 올라갑니다. cost-tracker.ts에서는 각 session의 소모를 정밀하게 추적합니다:

// src/cost-tracker.ts
interface ModelUsage {
  inputTokens: number;
  outputTokens: number;
  cacheReadInputTokens: number;    // 캐시 히트(더 저렴)
  cacheCreationInputTokens: number; // 캐시 생성(일회성 비용)
  webSearchRequests: number;
  costUSD: number;
}

여기서 중요한 포인트는 두 가지입니다. cacheReadInputTokens는 일반 input token보다 약 10배 저렴하고, cacheCreationInputTokens는 캐시를 생성할 때 드는 일회성 비용입니다. 이 차이가 곧 뒤에서 다룰 압축 전략을 좌우합니다.

2. 도구 호출 빈도

Claude Code는 평균적으로 대화 한 번당 수십 차례 도구 호출을 발생시킵니다. 도구 호출마다 API 요청 1회가 생깁니다(스트리밍 tool use). 도구가 많고 호출이 잦을수록 컨텍스트가 더 빨리 팽창합니다.

3. 에이전트 동시성(Agent concurrency) 수

AgentTool로 서브 Agent를 띄우거나, Coordinator 모드에서 여러 Worker를 동시에 스케줄링하면, 매번 독립 세션이 됩니다. 그래서 비용이 그대로 2배로 늘어납니다.

Claude Code 내부에는 cost-tracker.ts가 내장되어 있어 이러한 소모를 실시간으로 추적합니다. 종료 시에는 프로젝트 설정에 데이터를 영속화합니다:

// src/costHook.ts
// 프로세스 종료 시 자동 저장 및 청구서 요약 출력
process.on('exit', () => {
  if (hasConsoleBillingAccess()) {
    console.log(formatTotalCost()); // 모델별 per-model 분해가 포함된 청구서 출력
  }
  saveCurrentSessionCosts(getFpsMetrics?.());
});

WARNING

청구서 추적은 “프로젝트 단위”로 격리됩니다. 서로 다른 디렉터리의 session 소모는 합산되지 않아요. 여러 프로젝트에서 Claude Code를 사용한다면, 프로젝트마다 각각 독립적인 비용 기록이 있습니다.


2. 절약 팁 1: Compact 컨텍스트 압축으로 30-50% 절약

Claude Code에는 compact 서비스가 내장되어 있어, 과거 대화를 “압축”해서 요약 형태로 남깁니다. 그러면 컨텍스트를 적절한 규모로 유지할 수 있습니다. 소스의 핵심 파라미터는 한눈에 확인 가능합니다:

// src/services/compact/compact.ts
const POST_COMPACT_TOKEN_BUDGET = 50_000;           // 압축 후 총 토큰 상한
const POST_COMPACT_MAX_TOKENS_PER_FILE = 5_000;      // 단일 파일 최대 5K 토큰 유지
const POST_COMPACT_MAX_TOKENS_PER_SKILL = 5_000;      // 단일 Skill 최대 5K 토큰
const POST_COMPACT_SKILLS_TOKEN_BUDGET = 25_000;      // 모든 Skill 합산 25K 상한
const POST_COMPACT_MAX_FILES_TO_RESTORE = 5;          // 압축 후 최대 복원 파일 5개

압축 과정은 세 단계로 진행됩니다: 트리거 → API 요약 → 핵심 파일을 다시 붙이기(attach). 먼저 pre_compact hook을 실행하고 압축 API를 호출합니다(이때 API 요청은 별도 1회). 이어서 post_compact hook을 실행한 뒤, 최근에 읽었던 파일들을 다시 attach합니다.

실전 팁: 트리거 임계값을 조절하면 압축 빈도를 제어할 수 있고, 따라서 비용도 컨트롤할 수 있습니다.

// settings.json — 프로젝트 루트의 .claude/ 아래
{
  "compact": {
    "autoCompactThreshold": 0.85  // 컨텍스트 사용량 85%에 도달하면 압축 트리거, 기본값
  }
}

임계값을 낮추면(예: 0.7) 더 자주 압축됩니다. 이때 매번 압축 비용은 더 작지만 요약 품질이 약간 떨어질 수 있습니다. 반대로 임계값을 올리면(0.95) 반대 효과가 납니다.

TIP

길고 긴 대화 후반에 Claude Code가 “기억을 잃은 듯” 느껴진다면, 압축 이후 핵심 컨텍스트가 잘려 나갔을 가능성이 큽니다. 이럴 때는 대화 안에 핵심 정보를 직접 보강하거나 autoCompactThreshold를 낮춰 압축을 더 자주 하되, 매번 압축량은 줄이도록 설정할 수 있습니다.


3. 절약 팁 2: Read-only 도구를 잘 활용해 불필요한 소모를 피하라

Claude Code의 각 도구에는 isReadOnly() 메서드가 있습니다. 이 메서드는 해당 도구가 부작용을 일으키는지 여부를 결정합니다. 도구 스케줄러는 이 플래그에 따라 동시 실행을 허용할지 판단합니다:

// src/Tool.ts — 도구 기본값은 보수적으로( fail-closed ) 설정
const TOOL_DEFAULTS = {
  isConcurrencySafe: (_input) => false,  // 기본은 안전하지 않아서 동시 실행 불가
  isReadOnly: (_input) => false,          // 기본은 부작용이 있다고 봄
  isDestructive: (_input) => false,        // 기본은 파괴적이지 않음
};

핵심은 BashTool입니다. 여기에 명령을 세부 분류하는 로직이 내장되어 있습니다:

// src/tools/BashTool/BashTool.tsx
// 읽기 전용 명령 화이트리스트 — 이 명령들은 안전하게 동시 실행 가능하며 어떤 상태도 수정하지 않음
const BASH_SEARCH_COMMANDS = ['find', 'grep', 'rg', 'ag', 'ack', 'locate', 'which', 'whereis'];
const BASH_READ_COMMANDS   = ['cat', 'head', 'tail', 'less', 'more', 'wc', 'stat', 'file', 'strings', 'jq', 'awk', 'cut', 'sort', 'uniq', 'tr'];
const BASH_LIST_COMMANDS   = ['ls', 'tree', 'du'];
const BASH_SEMANTIC_NEUTRAL_COMMANDS = ['echo', 'printf', 'true', 'false', ':'];

실전 팁: 예를 들어 ls -la로 디렉터리 구조를 조회하면, Claude Code는 이를 읽기 전용 작업으로 인식하고 다른 읽기 전용 작업과 함께 묶어서 동시 실행합니다. 그러면 대기 시간이 줄어듭니다. 하지만 rm -rf node_modules를 실행하면, 파괴적 작업으로 식별되어 반드시 직렬 처리(순차 처리)되며, 매번 확인을 요구합니다.

이 로직을 이해하면, 명령을 스스로 더 잘 구성해서 동시성 최적화를 유도할 수 있습니다:

# 좋은 예: 읽기 전용 작업은 한 줄에서 조합해서 도구 호출 횟수를 줄이기
find . -name "*.ts" | head -20 && wc -l src/**/*.ts

# 나쁜 예: 파괴적 작업을 읽기 전용 명령에 섞기
find . -name "*.log" && rm -rf logs/  # 이 부분은 직렬로 막힙니다

4. 절약 팁 3: Skills 시스템으로 중복 Prompt를 줄여 Prompt Token 절약

Claude Code는 Skills 스킬 시스템을 지원합니다. 본질적으로 이는 재사용 가능한 prompt 조각들의 묶음입니다. 프로젝트 루트에 skills/ 폴더를 만들고 그 안에 Markdown 파일을 넣으면, Claude Code가 자동으로 로드합니다:

your-project/
└── skills/
    └── my-workflow/
        └── SKILL.md   # 디렉터리 포맷: skill-name/SKILL.md

Skill 파일에는 frontmatter 메타데이터가 있습니다:

---
name: my-skill
description: React 컴포넌트 리팩터링 표준 프로세스
whenToUse: 컴포넌트를 리팩터링하거나 대형 컴포넌트를 분리해야 할 때 사용
paths: ["src/**/*.tsx", "src/**/*.ts"]  # 이 경로와 매칭될 때만 활성화
allowedTools: [Read, Edit, Bash]       # 사용할 수 있는 도구 제한
arguments: [filePath, scope]
executionContext: inline               # inline 또는 fork
---
# Skill 본문 — 여기에는 표준 리팩터링 흐름 prompt를 작성

왜 돈을 아낄 수 있나? 새 대화를 시작할 때마다 Claude Code는 system prompt 안에 모든 도구 설명, 규칙, 컨텍스트를 넣어야 합니다. Skills는 자주 쓰는 워크플로를 표준화해, 매번 동일한 지시를 다시 입력할 때 소모되는 Token을 줄여줍니다. 즉, 절약되는 것은 당신이 손으로 복붙하던 prompt 길이입니다.

paths 필드는 조건 활성화의 핵심입니다. 지정된 경로와 매칭되는 경우에만 해당 Skill이 후보 목록에 나타납니다. 그래서 불필요한 Skill이 컨텍스트를 오염시키는 일을 줄입니다:

// src/skills/loadSkillsDir.ts
// 조건 활성화는 gitignore 스타일 매칭으로 처리
activateConditionalSkillsForPaths(filePaths, cwd) {
  // src/**/*.tsx 파일에 접근했을 때, React 관련 Skills만 활성화
}

TIP

재사용률이 높은 Skill은 ~/.claude/skills/(사용자 레벨)에 두는 것이 좋습니다. 프로젝트 레벨 Skill은 프로젝트 고유의 흐름만 두세요. 상위 레벨일수록 영향 범위가 커져 절약 효과가 더 크게 나타납니다.


5. 절약 팁 4: 동시성 분할로 재시도 줄이고 Rate Limit 소모 절약

Claude Code는 모든 도구 호출을 직렬로만 실행하지 않습니다. “동시에 실행 가능한” 도구들을 한 묶음으로 만들고, “반드시 대기해야 하는” 도구들은 별도로 처리하는 스마트 분할기를 가지고 있습니다:

// src/services/tools/toolOrchestration.ts
// 동시성 상한을 읽어오며 기본값은 10
function getMaxToolUseConcurrency() {
  return parseInt(process.env.CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY ?? '10', 10);
}

// 도구 분할: 연속된 구간이 모두 읽기 전용 도구라면 합치고, 아니면 새 배치로 시작
function partitionToolCalls(toolUseMessages, toolUseContext): Batch[] {
  return toolUseMessages.reduce((acc, toolUse) => {
    const isConcurrencySafe = tool.isConcurrencySafe(parsedInput.data);
    if (isConcurrencySafe && acc[acc.length-1]?.isConcurrencySafe) {
      acc[acc.length-1].blocks.push(toolUse); // 동시 실행 안전 → 합치기
    } else {
      acc.push({ isConcurrencySafe, blocks: [toolUse] }); // 새 배치
    }
    return acc;
  }, []);
}

실전 팁: MCP 도구가 동시성을 지원한다면, 정의할 때 반드시 isConcurrencySafe: true를 명시하세요. 선언하지 않은 도구는 기본적으로 직렬 실행으로 처리됩니다. 직렬 도구가 Rate Limit에 걸리면 재시도하면서 소모되는 Token 낭비가 “겉으로는 티가 나지 않지만” 누적되면 꽤 커집니다.

// settings.json — MCP 도구에 대해 동시 실행 안전 여부를 선언
{
  "mcpServers": {
    "my-mcp": {
      "command": "npx",
      "args": ["-y", "my-mcp-tool"],
      "isConcurrencySafe": true  // 선언 후 다른 읽기 전용 도구와 함께 동시 실행 가능
    }
  }
}

동시성 상한은 환경 변수를 통해서도 올릴 수 있습니다:

# 컴퓨터 성능이 좋고 API 할당량이 충분할 때 사용
export CLAUDE_CODE_MAX_TOOL_USE_CONCURRENCY=20

6. 절약 팁 5: Worktree 격리로 전체 클론을 대체해 협업 컨텍스트를 간소화

Claude Code에는 Worktree 지원이 내장되어 있습니다. Git Worktree는 같은 저장소에서 여러 브랜치를 서로 다른 디렉터리에 체크아웃할 수 있게 해주며, 저장소를 여러 번 clone할 필요가 없습니다. Claude Code의 findCanonicalGitRoot는 Worktree 경로를 자동으로 해석합니다:

// src/utils/git.ts
// Worktree 루트를 안전하게 파싱
function resolveCanonicalRoot(gitRoot: string): string {
  const gitDirContent = readFileSync(path.join(gitRoot, '.git'), 'utf8');
  // .git 파일 포맷: gitdir: /path/to/.git/worktrees/<name>
  const commonDir = extractCommonDir(gitDirContent);
  // 안전 검증: worktreeGitDir은 commonDir/worktrees/의 하위 디렉터리여야 함
  // 악의적인 저장소가 .git 파일을 이용해 sandbox escape를 유도하는 것을 방지
  validateWorktreeSecurity(worktreeGitDir, commonDir);
  return mainRepoRoot;
}

절약 원리: 팀이 각 기능 브랜치마다 저장소를 1개씩 clone하는 습관이 있다면, 각 clone의 .git 디렉터리(수 GB일 수도 있음)가 Claude Code의 컨텍스트 스캔 범위에 포함됩니다. Worktree 모드에서는 .git 디렉터리가 하나만 존재하므로, 컨텍스트 스캔 크기가 크게 줄어듭니다.

# 새로 clone하지 말고 Worktree를 생성
git worktree add ../feature-sidebar feature/sidebar

# Claude Code는 Worktree를 자동 인식하고, 메인 저장소의 컨텍스트를 공유
# 다른 worktree로 전환할 때는 바로 cd 해서 claude 실행
cd ../feature-sidebar && claude

WARNING

Worktree 보안 메커니즘이 중요합니다. Claude Code는 .git 파일의 경로가 sandbox escape를 일으키는 데 사용되지 않도록 검증합니다. 다만 신뢰할 수 없는 저장소에서 Worktree를 사용한다면, 여전히 주의해서 확인하는 것을 권장합니다.


7. 절약 팁 6: Permission 모드 튜닝으로 확인 인터랙션 줄이기

Claude Code에는 완전한 권한 시스템이 있으며, 5가지 모드가 도구가 언제 당신에게 확인을 요구할지를 결정합니다:

// src/types/permissions.ts
type PermissionMode =
  | 'acceptEdits'   // 자동으로 편집 수락
  | 'bypassPermissions' // 권한 검사 완전 우회(위험하지만 가장 빠름)
  | 'default'       // 규칙대로 물어보기
  | 'dontAsk'       // 전혀 묻지 않음
  | 'plan'          // Plan 모드
  | 'auto';         // AI가 자동 분류로 결정(TRANSCRIPT_CLASSIFIER가 켜져 있을 때)
모드동작속도안전성
default규칙대로 확인 요청느림안전
autoAI 분류기가 자동 결정중간비교적 안전
dontAsk묻지 않고 바로 실행빠름위험은 본인 부담
bypassPermissions권한 검사를 완전히 건너뜀가장 빠름고위험
planPlan 모드(실행 안 함)가장 느림가장 안전

실전 팁: 완전히 신뢰하는 디렉터리(본인 프로젝트, 코드가 이미 git에 올라가 있음)라면 settings.json에서 정교하게 구성할 수 있습니다:

// ~/.claude/settings.json (사용자 레벨) 또는 .claude/settings.json (프로젝트 레벨)
{
  "permissions": {
    "defaultMode": "auto",
    "allow": [
      { "toolName": "Bash", "ruleContent": "pnpm*" },
      { "toolName": "Read" },
      { "toolName": "Glob" },
      { "toolName": "Grep" }
    ],
    "deny": [
      { "toolName": "Bash", "ruleContent": "rm -rf /" }
    ],
    "ask": [
      { "toolName": "Bash", "ruleContent": "git push" }
    ]
  }
}

auto 모드는 힘을 덜 쓰면서도 안전성을 챙기는 절충안입니다. AI 분류기가 작업이 안전한지 판단해 불필요한 팝업을 피하게 해줍니다. 확인 인터랙션을 한 번이라도 줄이면, 그만큼 컨텍스트 전환에 소모되는 Token도 줄어듭니다.

WARNING

bypassPermissions 모드는 Claude Code를 root 권한 스크립트처럼 만드는 것과 같습니다. 어떤 입력이든 그대로 실행됩니다. 격리된 테스트 디렉터리에서만 사용하고, 메인 프로젝트에서는 절대 켜지 마세요.


8. 절약 팁 7: 엔터프라이즈 업스트림 프록시 캐시로 중복 API 호출 감소

Claude Code의 upstreamproxy 모듈은 Claude Code Connect(CCR, 엔터프라이즈 버전)에서 프록시 라우팅을 제공합니다. 소스에서 주목할 만한 값은 NO_PROXY_LIST입니다:

// src/upstreamproxy/upstreamproxy.ts
const NO_PROXY_LIST = [
  'localhost', '127.0.0.1', '::1',
  '169.254.0.0/16', '10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16',
  'anthropic.com', 'github.com', '*.github.com',
  // npm / PyPI / Rust 레지스트리는 모두 화이트리스트에 있으므로 프록시를 탈 필요 없음
  'registry.npmjs.org', 'pypi.org', 'files.pythonhosted.org',
  'index.crates.io', 'proxy.golang.org'
];

실전 팁: 엔터프라이즈 버전을 쓰지 않더라도, 이 로직을 이해하면 로컬 설정을 최적화하는 데 도움이 됩니다. 회사 네트워크 환경에서는 Claude Code가 트래픽을 자동으로 엔터프라이즈 프록시로 라우팅합니다. 그러면 프록시 레이어에서 Token 캐싱과 재사용이 가능해집니다. 이것이 CCR 엔터프라이즈 사용자가 돈을 아끼는 데 도움이 되는 핵심 기반 메커니즘입니다.

자체 구축 MCP 서비스를 위해서는 MCP 설정에서 응답 캐시를 켤 수 있습니다:

// settings.json
{
  "mcpServers": {
    "local-knowledge": {
      "command": "node",
      "args": ["server.js"],
      "env": {
        "MCP_CACHE_TTL": "3600"  // 캐시 1시간, 중복 API 호출 감소
      }
    }
  }
}

9. 자주 발생하는 문제 해결

Q1: 1줄만 수정했는데도 청구서가 여전히 높아요?

Claude Code의 청구서가 항상 편집 작업 때문인 건 아닙니다. 원인은 “컨텍스트 팽창”일 수 있어요. 긴 대화에서는 단 1줄을 바꿔도, 압축 전의 과거 메시지와 도구 결과가 그대로 컨텍스트 안에 남아 있을 수 있습니다. 확인 방법: 세션 종료 시 formatTotalCost() 출력에서 inputTokens를 확인하고 outputTokens와 비교하세요. inputTokens가 클수록 컨텍스트가 더 비대해졌다는 뜻입니다.

Q2: Compact 압축 후 답변 품질이 눈에 띄게 떨어져요?

이는 압축 “단위(입자)” 문제입니다. autoCompactThreshold를 기본값 0.85에서 0.95로 올리면 압축 빈도가 줄어듭니다. 동시에 대화 초기에 중요한 설계 결정과 컨텍스트 정보가 명확하게 기록되도록 유지하면, 압축된 요약의 품질이 더 좋아질 가능성이 큽니다.

Q3: bypass 모드는 정말 안전한가요?

안전하지는 않습니다. 다만 격리된 환경에서는 통제가 가능합니다. 꼭 bypass를 사용해야 한다면 permissions.deny 규칙으로 보완하는 것을 권장합니다:

{
  "permissions": {
    "defaultMode": "bypassPermissions",
    "deny": [
      { "toolName": "Bash", "ruleContent": "sudo*" },
      { "toolName": "Bash", "ruleContent": "curl*|wget*" }
    ]
  }
}

Q4: 매일 Token 소모를 어떻게 모니터링하나요?

Claude Code는 매 세션 종료 시 청구서를 자동으로 출력합니다(만약 consoleBillingAccess 권한이 있다면). 더 체계적인 방법은 프로젝트 레벨에 추적 스크립트를 두는 것입니다:

# 프로젝트의 .git/hooks/에 post-checkout 훅을 추가해 기록
# 하지만 더 실용적인 방법은 .claude/cost/<session-id>.json을 직접 확인하는 것

Q5: Skills는 매번 추가 Token을 소모하나요?

네, 하지만 제어할 수 있습니다. Skill 콘텐츠의 Token 소모는 POST_COMPACT_SKILLS_TOKEN_BUDGET(25K 상한)에 포함됩니다. Skill이 많고 상세할수록 컨텍스트가 커지므로, Skill 작성 원칙은 다음과 같습니다: 정확히 매칭하고, 최소한의 정보만 제공. paths 필드를 잘 활용해서 Skill이 관련 파일이 접근될 때만 로드되게 하세요.

Q6: Worktree를 사용한 뒤 Claude Code 동작이 이상해요?

Worktree에는 보안 검증 메커니즘이 있습니다. .git 파일 포맷이 표준이 아니면 Claude Code는 현재 디렉터리로 fallback합니다. .git 파일 내용이 gitdir: /absolute/path/to/.git/worktrees/<name> 포맷인지 확인하세요.


10. 확장 읽기 / 심화 방향

1. 나만의 Skill을 작성해 반복 공수를 줄이기

여러 프로젝트에서 “이 스타일 규칙대로 코드를 작성하라” 같은 프롬프트를 반복해서 쓰고 있다면, 이를 하나의 Skill로 추출해 ~/.claude/skills/ 아래에 두세요. 그러면 전역으로 적용됩니다. 한 번만 작성하면 여러 번 절약할 수 있습니다.

2. MCP로 로컬 툴체인을 구축해 클라우드 호출을 대체하기

Token을 많이 쓰는 작업은 대개 로컬로도 구현할 수 있습니다: 코드 검색, 문서 조회, 데이터베이스 작업. 이런 기능을 로컬 MCP 도구로 캡슐화하면 Claude API에 대한 의존도를 줄일 수 있고, 응답 속도도 향상됩니다.

3. compact 로그를 모니터링하며 컨텍스트 전략을 지속적으로 최적화하기

verbose 모드를 켜서 compact가 언제 트리거되는지, 압축 효과가 어떤지 관찰하고 autoCompactThreshold를 계속 튜닝해서 프로젝트 규모에 맞는 균형점을 찾아보세요.

claude --verbose 2>&1 | grep -i compact

4. 소스 레벨에서 Permission 분류기 이해하기

Claude Code의 auto 모드 뒤에는 AI 분류기(Transcript Classifier)가 있습니다. 이 분류기는 작업 내용에 따라 위험 등급을 판단하죠. 더 깊이 이해하고 싶다면 src/types/permissions.ts에 있는 YoloClassifierResult 타입 정의를 살펴보세요.

Updated April 1, 2026