AI 코딩 에이전트에게 도구를 많이 줄수록 멍청해지는 이유
Your AI coding agent gets dumber the more tools you give it
핵심 요약
에이전트의 컨텍스트 창을 불필요한 도구와 문서로 채우면 성능이 급격히 저하되므로, 필요한 정보만 단계적으로 제공해야 합니다.
- 컨텍스트 오염 — 너무 많은 도구와 문서가 컨텍스트 창을 차지해 모델의 추론 능력을 떨어뜨림.
- 점진적 공개 — 1980년대 UX 원칙을 적용해 필요한 시점에만 도구와 문서를 로드해야 함.
- 성능 최적화 — CLAUDE.md 파일을 간소화하고 사용하지 않는 MCP 서버를 비활성화해야 함.
- 워크플로우 개선 — 반복 작업은 스킬로 전환하고 대규모 문서는 하위 디렉토리로 분리해야 함.
Claude Code를 만든 Boris Cherny는 최근 DM을 통해 느린 에이전트를 디버깅하는 사용자를 도왔습니다. 진단 결과는 무엇이었을까요? 사용자가 메시지를 입력하기도 전에 MCP 서버와 스킬이 컨텍스트 창의 50% 이상을 차지하고 있었습니다.
계산해 봅시다:
- 어텐션은 O(n²)입니다. 컨텍스트를 두 배로 늘리면 처리 비용은 네 배가 됩니다.
- 각 MCP 도구 정의는 1~8KB입니다. 일반적인 서버는 20~80개의 도구를 내보냅니다. 5개의 서버를 연결하면 인사를 건네기도 전에 약 55,000개의 토큰이 소모될 수 있습니다.
- 200개 이상의 도구 정의가 컨텍스트에 있으면, 모델은 8번 중 7번꼴로 잘못된 도구를 선택합니다.
- LLM은 U자형 회상 능력을 갖추고 있습니다. 컨텍스트 창 중간에 있는 토큰은 '어텐션 데드 존(attention dead zone)'에 머무릅니다. '혹시나 해서' 로드한 도구 메타데이터는 제대로 읽히지도 않으면서, 실제 지침을 데드 존으로 밀어내고 있습니다.
Anthropic의 MCP를 활용한 코드 실행 방식은 토큰을 47% 절감했습니다. 그들의 ToolSearch 도구는 일반적인 다중 서버 설정에서 85% 이상의 효율을 보입니다. Lazy Skills 패턴은 기능 손실 없이 97%의 절감 효과를 기록했습니다. HumanLayer는 "우리는 모든 지침과 도구를 시스템 프롬프트에 쑤셔 넣었고, 에이전트는 계속해서 멍청해졌다"라고 직설적으로 말했습니다.
해결책은 1980년대의 UX 원칙인 점진적 공개(progressive disclosure)입니다.
지금 필요한 것만 보여주고 나머지는 나중으로 미루세요. 인쇄 대화 상자가 이렇게 작동합니다. 스킬도 이렇게 작동합니다. 하지만 대부분의 CLAUDE.md / AGENTS.md / .cursorrules 파일은 그렇지 않습니다.
오늘 당장 해야 할 일:
- 컨텍스트를 감사하세요. Claude Code에서는
/context를 사용합니다. 도구 정의가 창의 20% 이상을 차지한다면 문제가 있는 것입니다. - 최상위 규칙 파일을 50줄 미만으로 줄이세요. 인라인 문서를 포인터로 대체하세요. "구조적 변경 전 docs/architecture.md를 읽으시오." 에이전트는 시작할 때가 아니라 필요할 때 문서를 로드합니다.
- 문서를 하위 디렉토리로 나누세요.
/docs/architecture.md,/docs/testing.md,/docs/api.md와 같이 나누세요. 하나의 거대한 파일로 만들지 마세요. - MCP 서버를 감사하세요. 대부분의 설정에는 일주일 동안 사용하지 않은 서버가 2개 이상 있습니다. 비활성화하세요. 나머지는 ToolSearch(또는 도구의 동등한 기능)를 사용하세요.
- 반복적인 워크플로우를 스킬로 전환하세요. SKILL.md는 필요할 때 활성화되어 참조를 함께 가져옵니다. 세 단계: 발견에 약 100 토큰, 활성화에 약 5k 토큰, 실행 시 가변적 토큰이 소모됩니다.
- 병렬 작업을 위해 하위 에이전트를 사용하세요. 6개의 서로 다른 작업에서 나온 컨텍스트를 하나의 창에 쌓아두지 마세요.
500줄짜리 CLAUDE.md 파일을 실행하면서 왜 에이전트가 느리고 혼란스러워하는지 궁금해하는 사람들을 봅니다. 이는 인쇄 대화 상자의 첫 화면에 모든 프린터 설정을 다 보여주는 것과 같습니다.
/context(또는 사용하는 도구의 동등한 명령어)를 실행해 보세요. 무엇이 토큰을 잡아먹고 있는지 알게 되면 놀랄 것입니다.
현재 대화에서 제 사용량은 다음과 같습니다:


