Claude Code 시스템 프롬프트의 군더더기를 걷어내는 법

TMT

https://www.aihero.dev/how-to-kill-the-bloat-in-claude-codes-system-prompt

Claude Code에 메시지를 보낼 때마다 여러분 눈에는 안 보이는 페이로드가 함께 실려 나갑니다. 여러분이 쓴 프롬프트가 아니라 그 주위를 둘러싼 부속 장치들입니다. 도구 정의, 스킬 카탈로그, 한 번도 안 쓸지 모르는 기능의 시스템 지침 같은 것들이죠. 이것들이 요청마다 전송되고, 매 턴 그만큼 비용이 청구됩니다.

이 대부분은 없앨 수 있습니다. 아래 여섯 단계는 요청에 실제로 무엇이 담기는지 확인한 뒤, Claude Code에 이미 있는 두 가지 설정으로 그것을 덜어내는 방법을 보여줍니다. 제 경우 턴당 수만 토큰이 줄었습니다.

1. /context로 컨텍스트 측정하기

아무 Claude Code 세션에서나 /context를 입력하세요. 컨텍스트 윈도우를 시스템 프롬프트, 시스템 도구, MCP 도구, 메모리 파일, 메시지 같은 범주별로 나눠, 각각의 토큰 수와 윈도우에서 차지하는 비중을 보여줍니다.

무언가를 바꾸기 전에 지금 이 숫자들을 적어두세요. 마지막 단계에서 이 값과 비교하게 됩니다.

/context는 도구들을 하나의 묶음으로만 보여줍니다. 어떤 개별 도구가 가장 큰지는 알려주지 않습니다. 순위가 아니라 "tools" 숫자 하나만 나오니까요. 이 한계는 다음 단계에서 해결합니다.

2. 로깅 프록시로 가장 큰 주범 찾기

Claude Code는 HTTP로 Anthropic API와 통신하므로, 중간에 프록시를 끼워 넣을 수 있습니다. 요청을 손대지 않고 그대로 전달하고, 응답도 곧바로 스트리밍해 돌려주면서, 오간 내용만 기록하는 프록시입니다. CLI는 눈치채지 못합니다.

proxy.mjs를 받으세요. 파일 하나에, 의존성 없이 Node 내장 모듈만 씁니다. 실행합니다:

node proxy.mjs

다른 터미널에서 Claude Code가 이 프록시를 바라보게 하고 메시지를 하나 보내세요:

ANTHROPIC_BASE_URL=http://localhost:8787 claude

각 요청이 읽기 좋은 Markdown으로 ./logs/에 저장되고, 터미널에는 순위표가 출력됩니다:

[agent-proxy] 69 tools · 154,946 tool bytes · 65,538 real input tokens
  Workflow      21229 B  ~5307 tok
  DesignSync     8978 B  ~2245 tok
  Monitor        7767 B  ~1942 tok

Markdown 파일을 열어 읽어보세요. 모든 도구의 전체 스키마, 시스템 프롬프트, 메시지 이력까지, 모델이 받는 그대로의 요청 전문이 담겨 있습니다. 맨 위의 순위표가 곧 작업 목록이 되어 주므로, 짐작으로 지우는 대신 안 쓰는 도구를 정확히 골라 없앨 수 있습니다.

이제 페이로드에 무엇이 들었고 어느 부분이 가장 큰지 알았습니다. 다음 두 단계에서 이를 제거합니다. 두 설정 모두 설정 파일에 들어갑니다. 모든 프로젝트에 적용하려면 ~/.claude/settings.json, 한 프로젝트에만 적용하려면 .claude/settings.json입니다.

3. disable* 플래그로 기능을 통째로 끄기

어떤 기능들은 도구와 지침을 한 무더기씩 몰고 들어옵니다. 이런 기능은 플래그 하나로, 딸려 오는 모든 것과 함께 꺼집니다:

  • disableBundledSkills — Anthropic 번들 스킬(dataviz, review, init 카탈로그)을 한 번에 전부 제거합니다. 슬래시 명령은 그대로 입력할 수 있습니다.
  • disableWorkflows — 순위표에서 단일 항목으로 가장 큰 멀티 에이전트 Workflow 도구를 제거합니다.

어떤 기능이 통째로 제 밥값을 못 한다 싶을 때마다 쓰면 됩니다.

4. deny 규칙으로 개별 도구 제거하기

개별 도구는 permissions.deny 규칙에 도구 이름만 적으면 그 도구의 정의가 페이로드에서 빠집니다. Claude에게는 아예 보이지 않게 됩니다:

{
  "permissions": {
    "deny": ["NotebookEdit", "CronCreate"]
  }
}

알아둘 만한 세부 사항이 하나 있습니다. 이름만 적으면("NotebookEdit") 도구 자체가 제거되지만, 범위를 지정한 규칙("Bash(rm *)", "Skill(dataviz)")은 일치하는 호출만 차단할 뿐 정의는 페이로드에 그대로 남습니다. 요청 크기를 줄이려면 이름만 적으세요.

앞 단계의 플래그가 큰 덩어리를 먼저 걷어내는 1차 작업이라면, 이 deny 규칙은 플래그가 못 잡는 개별 도구를 하나씩 집어내는 역할입니다.

스킬을 전부가 아니라 일부만 남기고 싶다면? disableBundledSkills는 전부 아니면 전무입니다. 하나씩 골라 빼려면 skillOverrides에서 해당 스킬을 "off"(페이로드에서 제거) 또는 "user-invocable-only"(입력은 되지만 Claude에게는 안 보임)로 설정하세요.

5. 전체 설정 적용하기

앞의 두 단계에서 나온 결과물입니다. 군더더기를 덜어내는 플래그와 deny 규칙을 ~/.claude/settings.json에 바로 넣을 수 있게 정리했습니다:

{
  "permissions": {
    "deny": [
      "EnterPlanMode",
      "ExitPlanMode",
      "DesignSync",
      "NotebookEdit",
      "SendMessage",
      "PushNotification",
      "RemoteTrigger",
      "ReportFindings",
      "ScheduleWakeup",
      "AskUserQuestion",
      "CronCreate",
      "CronDelete",
      "CronList"
    ]
  },
  "disableBundledSkills": true,
  "disableWorkflows": true,
  "disableRemoteControl": true,
  "disableClaudeAiConnectors": true,
  "disableArtifact": true
}

이건 처방전이 아니라 메뉴판으로 보세요. 자기 페이로드를 먼저 들여다보라고 한 이유가 바로, 자기가 안 쓰는 것만 잘라내라는 뜻입니다. 플랜 모드로 일한다면 그건 남겨두세요. 노트북을 작성한다면 NotebookEdit을 남겨두세요. 위 목록은 제 기준에서 지울 만했던 것들입니다.

한 가지 주의할 점이 있습니다. 군더더기처럼 보이는 것 중 일부는 백그라운드 작업과 멀티 에이전트 실행이 기대는 장치입니다. task 도구들, Workflow, worktree 도구가 그렇습니다. 이것들을 쓴다면 남겨두세요.

6. /context로 다시 측정하기

설정을 다시 읽어 들이도록 Claude Code를 재시작한 뒤 /context를 다시 실행하세요. 도구 개수와 토큰 총량이 줄어 있을 겁니다.

그 차이가 바로 지금까지 매 턴 보내다가 이제는 안 보내게 된 토큰입니다. 요청은 더 싸지고, 모델이 여러분의 문제에 닿기까지 헤치고 읽어야 할 양도 줄어듭니다.

Edit this page