AIDive

영상 팩

한 프로젝트에서 측정한 Claude Code 레포 여덟 개: 세션 비용, 제거 실험 표, 판정

읽는 데 13분

TL;DR

  • 인기 Claude Code 레포 여덟 개를 실제 코드베이스 하나에 프로젝트 스코프로 설치하고 측정했습니다. 세션 시작 토큰, 코딩 작업 세 가지의 출력 토큰, 그리고 각 레포가 프로젝트 밖에 쓴 내용입니다.
  • 여덟 개 중 결과를 바꾼 것은 하나뿐이었습니다. anti-slop을 린터로 돌리자 T3 3회 실행 모두에서 같은 안전하지 않은 캐스트를 잡았고, 비용은 세션 토큰 +95, 턴당 0이었습니다.
  • 간결한 출력을 강제하는 룰셋은 도구를 쓰는 작업에서는 버티지 못했습니다. Chisle이 내세운 기준선 대비 52%는 실제로는 출력 토큰 94%였고, 입력까지 합산하면 세 작업 중 두 작업에서 기준선보다 비쌌습니다.
  • MCP 서버 세 개는 63회 실행 동안 한 번도 호출되지 않았습니다. 설치했다고 쓰는 것은 아닙니다.
  • 스택은 가산적입니다. 여덟 개를 모두 올리면 세션 시작 시 +6,804 토큰이 늘었고, 개별 합계와의 차이는 63 토큰이었습니다.
  • 설치 두 건이 프로젝트 밖까지 손을 댔습니다. 코드모드 하나는 다른 에이전트 8개의 글로벌 설정에 자신을 등록했고, 다른 도구는 --dangerously-skip-permissions를 하드코딩하고 자격 증명 파일을 복사하기 때문에 실행하지 않았습니다.

측정 결과가 말하는 것

세션 시작 토큰은 재현되지만 달러 비용은 그렇지 않습니다. 모든 조건에서 두 번의 실행이 입력 토큰 합계가 동일했지만, 같은 조건의 비용은 프롬프트 캐시 상태에 따라 $0.0183에서 $0.0035까지 요동쳤습니다. 그래서 이 글 전체에서 토큰 수를 지표로 씁니다. 기준선 프로젝트는 17,378 토큰으로 시작합니다 s4.

이 Claude Code 버전에서는 MCP 도구 스키마가 지연 로드되며, 비용은 스키마 크기가 아니라 서버가 노출하는 도구 이름의 개수에 비례합니다. ouroboros의 도구 39개는 +1,642 토큰, reticle의 19개는 +895, ui-skills의 2개는 +37이었고, 도구 이름 하나당 대략 42~47 토큰입니다. 기본적으로 모든 MCP 도구는 지연되어 필요할 때 로드되며, ENABLE_TOOL_SEARCH의 auto 모드는 도구 정의가 컨텍스트 윈도우의 10%에 도달하면 지연시킵니다 s4. img2threejs는 32,902바이트의 SKILL.md와 352개 파일을 싣고 있지만 세션 시작 비용은 +107 토큰입니다. frontmatter의 description만 로드되기 때문입니다. skills 문서는 목록에 표시되는 description을 각각 1,536자로 제한하고, 스킬이 많으면 목록 예산에 맞게 description을 줄입니다. 컴팩션 이후에는 호출된 스킬이 각각 5,000 토큰으로, 공유 25,000 토큰 예산 안에서 다시 붙습니다 s5. 이 목록 예산 때문에 스킬을 하나도 호출하지 않는 환경에서도 스킬 40개가 턴당 3,060 토큰을 쓸 수 있고 s10, 스킬이 빠지는 대신 description이 잘려 나갑니다 s11.

Chisle의 UserPromptSubmit 훅은 매 턴 287바이트의 additionalContext를 추가합니다. 22턴짜리 작업에서는 이것이 T3에서 Chisle 쪽 총 입력 토큰이 기준선보다 +41,539 많았던 이유입니다. 참고용으로 측정한 caveman은 프롬프트가 /caveman으로 시작하지 않으면 아무것도 주입하지 않습니다. 같은 이벤트에서 여러 훅이 각각 additionalContext를 반환하면 Claude는 이를 모두 이어 붙여 받으며, 훅당 10,000자 상한이 있습니다 s15. Chisle, caveman, ouroboros를 함께 연결하자 SessionStart에 3건, UserPromptSubmit에 3건, PostToolUse에 2건이 등록되었고 시작 시 +4,269 토큰이 늘었습니다 s15.

Chisle의 README는 20개 작업 비용이 기준선의 52%라고 주장하는데, README 자체가 그 수치를 도구 없는 단일 턴 프롬프트로 한정합니다 s3. 실제 레포를 대상으로 세 가지 작업을 각 3회 실행한 결과 Chisle의 출력 평균 합계는 9,007 토큰, 기준선은 9,615로 94%였습니다. caveman은 10,820으로 113%였는데, T3의 편차가 2,014 토큰이었던 표본이라 어느 방향도 노이즈를 넘지 못합니다 s3. Chisle의 출력 압축기는 63회 실행 동안 절감 기록을 한 번도 쓰지 않았습니다.

anti-slop을 tools/oxlint/에 vendoring하고 일반 규칙 18개 전부와 oxc/no-accumulating-spread를 적용하자, 손대지 않은 4,775줄짜리 프로젝트에서 109건이 나왔고 그중 83%가 하우스 스타일 규칙 두 개(require-readable-spacing 50건, require-safety-comment-for-type-assertion 41건)에서 나왔습니다 s8. Claude가 작성한 코드에서는 T3 3회 모두에서 maxLength={field.maxLength as number}를 잡았는데, Claude가 코드베이스의 안전하지 않은 캐스트를 그대로 따라 한 것입니다 s8. 이 플러그인은 ESM이므로 호스트 프로젝트에 "type": "module"이 없으면 oxlint가 Cannot use import statement outside a module로 실패합니다.

Reticle의 init 코드모드를 RETICLE_STATE_DIR을 지정하고 텔레메트리를 끈 채 실행하자, MCP 서버를 다른 에이전트 8개(VS Code 사용자 스코프, GitHub Copilot CLI, Warp, Factory Droid, Kiro, Amazon Q Developer CLI, Cline CLI, Amp)에 등록하고 Gemini CLI에서는 도구를 사전 승인했다고 보고했으며, 이후 페어링은 ERR_OSSL_EVP_UNSUPPORTED로 실패했습니다 s6. Caliper는 실행을 거부했습니다. claude_code.py:106이 --dangerously-skip-permissions를 하드코딩하고, seed_files()가 Keychain 폴백과 함께 ~/.claude/.credentials.json을 복사하기 때문입니다 s2. ouroboros의 UserPromptSubmit 훅은 write prd for reading time 같은 평범한 프롬프트에 REQUIRED SKILL: /ouroboros:setup으로 응답하는데, 프로젝트 스코프 설치로는 충족할 수 없는 단계입니다 s7.

스킬 52개, 102개, 202개 라이브러리에 걸친 궤적 2,545건을 다룬 논문은 통합 통과율 하락이 .08, .14, 최대 21%라고 보고하며, 비슷한 description끼리 서로를 가리는 현상이 손실에서 점점 더 큰 비중을 차지한다고 말합니다 s20.

측정 데이터

프로토콜: 실제 TypeScript 프로젝트 하나에 모든 레포를 프로젝트 스코프로만 설치했습니다. 세션 시작: 동일한 플래그의 -p JSON 모드에서 Reply with OK 프롬프트를 조건당 2회 실행했고, 수치는 첫 턴의 input_tokens + cache_creation_input_tokens + cache_read_input_tokens입니다. 제거 실험: 통과 검사와 타입 체크 게이트가 있는 코딩 작업 세 가지(T1 짧음, T2 중간, T3 긴 UI 작업)를 셀당 3회 실행했고, 조건은 기준선, 상시 활성 레포 단독, 여덟 개 전체 스택입니다. anti-slop: vendoring한 룰셋의 oxlint 1.78.0을 손대지 않은 프로젝트와 기준선 9회 실행에서 작성된 코드에 적용했습니다.

레포 프로젝트 스코프에 설치한 것 세션 시작 시 추가 토큰 턴당 비용
기준선 없음 17,378 none
Chisle 스킬 4개, 커맨드 4개, 훅 3개 +3,496 매 턴 additionalContext +287바이트
ouroboros MCP 서버, 도구 이름 39개 +1,642 조건부 주입
reticle MCP 서버, 도구 이름 19개 +895 / +903 관찰되지 않음
fwc-swiftui-skills 스킬 2개 +304 없음
caliper 스킬 2개 +172 없음
img2threejs 스킬 1개, 파일 352개, SKILL.md = 32,902 B +107 없음
anti-slop 스킬 1개 + vendoring한 룰셋 +95 없음
ui-skills 원격 MCP, 도구 2개 +37 없음
여덟 개 전체 스택 위의 모든 것 +6,804 Chisle의 턴당 비용만
caveman (참고용) 스킬 4개, 훅 2개 +744 0
작업 조건 통과 새 타입 오류 출력 토큰 평균 출력 최소~최대 총 입력 평균 비용 평균 턴 MCP 호출
T1 기준선 3/3 0 1,668 1,619~1,739 95,462 $0.0519 7.0 0
T1 Chisle 3/3 0 1,434 1,341~1,502 106,001 $0.0576 7.7 0
T1 ui-skills 3/3 0 1,756 1,644~1,885 96,279 $0.0535 7.3 0
T1 reticle 3/3 0 1,899 1,653~2,177 107,263 $0.0594 8.0 0
T1 ouroboros 3/3 0 1,729 1,655~1,787 97,166 $0.0549 7.0 0
T1 스택 3/3 0 1,462 1,460~1,465 128,221 $0.0646 7.7 0
T2 기준선 3/3 0 2,128 2,105~2,164 74,286 $0.0540 9.0 0
T2 Chisle 3/3 0 2,184 2,150~2,230 87,462 $0.0624 10.0 0
T2 ui-skills 3/3 0 2,348 2,224~2,504 74,869 $0.0604 10.0 0
T2 reticle 3/3 0 2,614 2,312~2,824 78,664 $0.0635 10.7 0
T2 ouroboros 3/3 0 2,441 2,152~2,815 80,819 $0.0622 10.0 0
T2 스택 3/3 0 2,136 2,015~2,216 89,378 $0.0661 9.7 0
T3 기준선 3/3 0 5,819 5,423~6,063 198,217 $0.1551 22.0 0
T3 Chisle 3/3 0 5,389 5,206~5,500 239,756 $0.1565 20.3 0
T3 ui-skills 3/3 0 5,279 4,860~5,567 214,691 $0.1477 21.0 0
T3 reticle 3/3 0 4,664 4,008~5,776 198,740 $0.1293 19.0 0
T3 ouroboros 3/3 0 5,456 4,324~7,093 232,763 $0.1544 21.0 0
T3 스택 3/3 0 5,331 4,787~5,843 241,576 $0.1591 19.7 0

63회 중 63회가 통과했고 새 타입 오류를 낸 실행은 0회였습니다. 자체 실행 간 편차를 넘는 셀은 둘뿐입니다. T1의 Chisle(−234, −14.0%)과 T1의 스택(−206, −12.3%)입니다. T2와 T3에서는 모든 차이가 편차 안에 있습니다. ouroboros의 T3 실행은 동일한 프롬프트에서 출력 토큰이 4,324~7,093까지 오르내렸고, 변동폭은 64%였습니다.

레포 판정 근거
anti-slop 검사 도구로서 결과를 바꿈 T3 3/3회에서 같은 안전하지 않은 캐스트를 잡음, +95 토큰, 턴당 0
Chisle 측정 가능한 효과 없음, 더 비쌈 주장 52% 대비 실제 기준선 출력의 94%, 시작 시 +3,496, 턴당 +287바이트
ui-skills 아무것도 바꾸지 못함 9회 실행에서 도구 호출 0회, +37 토큰
reticle 충돌 init이 ~/.claude/settings.json과 다른 에이전트 8개의 설정에 씀, 페어링은 끝내 완료되지 않음
ouroboros 충돌 평범한 프롬프트에도 /ouroboros:setup을 요구함, 도구 이름 39개, 호출 0회
caliper 실행하지 않음 --dangerously-skip-permissions 하드코딩, 자격 증명 파일 복사
img2threejs 스택 밖 +107 토큰, 충돌할 대상 없음
fwc-swiftui-skills 스택 밖 +304 토큰, 정적 Markdown

월요일에 할 일

  • 메인 프로젝트의 새 세션에서 /context all을 실행하고 시작 수치를 적어 두세요.
  • 설치된 모든 플러그인에 claude plugin details <name>을 실행하세요. 상시 활성 줄이 매 턴 과금되는 유일한 수치입니다.
  • 이벤트별로 훅을 나열하세요. UserPromptSubmit에서 모든 프롬프트마다 additionalContext를 반환하는 훅은 턴당 세금입니다. 키워드나 matcher로 걸러 내는 것만 남기세요.
  • MCP 서버마다 노출하는 도구 이름을 세고, 이름당 대략 42~47 토큰으로 예산을 잡은 다음, 트랜스크립트에서 실제로 호출된 개수를 확인하세요.
  • init이나 설정 스크립트가 있는 것을 설치하기 전에, 레포 밖에 쓰는 내용을 읽어 보세요: ~/.claude/settings.json, 다른 에이전트의 설정 디렉터리, 자격 증명 파일, --dangerously-skip-permissions.
  • 생성된 코드의 품질 검사는 컨텍스트에 넣는 스킬이 아니라 검증 단계의 린터로 연결하세요. 린트 규칙은 턴당 비용이 없습니다.
  • 토큰 절감 주장을 믿기 전에, 그 도구를 쓴 경우와 쓰지 않은 경우로 같은 작업을 3번씩 실행하고 차이를 자신의 최소~최대 편차와 비교하세요.
  • 제거한 것은 삭제하지 말고 보관하세요. 그것을 찾는 워크플로가 있으면 되돌릴 수 있습니다.

더 알아보기

  • 스킬 목록 예산과 1,536자 description 상한은, 스킬이 로드 실패하지 않아도 환경이 복잡해지면 성능이 떨어지는 이유를 설명합니다. "Skill descriptions are cut short"와 "Skill content lifecycle" 섹션을 읽어 보세요 s5.
  • /skill-doctor 글은 스킬 40개가 턴당 3,060 토큰을 쓰는 사례와 어떤 것부터 잘라야 하는지를 보여 줍니다. 사용 중인 플러그인 안의 비싼 스킬이라는 사각지대는 후속 글로 남겨 두었습니다 s10.
  • "스킬 30개 초과" 경험칙의 근거가 된 논문입니다. 스킬 52개, 102개, 202개 라이브러리에 걸친 궤적 2,545건에서 가림 효과를 분리했습니다 s20. 이를 대중화한 쉬운 요약은 s12입니다.
  • 훅 연결과 10,000자 additionalContext 상한, 그리고 Write|Edit에서만 훅이 실행되게 하는 matcher 문법입니다 s15.
  • 63% 제거 스레드입니다. 제거한 MCP 설정에서 하드코딩된 bearer 토큰이 발견된 보안 관련 곁가지도 있으며, 영상에서는 다루지 않았습니다 s13.
  • Chisle의 README 229행과 262행은 52% 수치를 도구 없는 단일 턴 프롬프트로 한정하고, 짧은 코딩 셀은 caveman이 낫다고 인정합니다. 헤드라인을 인용하기 전에 작은 글씨를 읽어 보세요 s3.
  • 스택 밖의 두 레포는 수동으로 호출하고 시작 시 비용이 없어서 점수를 매기지 않았습니다. Three.js 장면용 img2threejs s21와 Liquid Glass 화면용 fwc-swiftui-skills s22입니다.

Sources

  • Plugins reference, Claude Code docs. 읽는 이유: plugin details, 설치 스코프, 그리고 도구 이름 수를 실제 비용으로 만드는 MCP 도구 지연 로딩.
  • Extend Claude with skills, Claude Code docs. 읽는 이유: description 상한, 목록 예산, 컴팩션 이후 재첨부 예산을 한 페이지에서.
  • Hooks reference, Claude Code docs. 읽는 이유: 두 훅이 같은 이벤트에서 주입하면 어떻게 되는지, 그리고 matcher로 훅을 대부분의 턴에서 빼는 방법.
  • dmmulroy/anti-slop, GitHub. 읽는 이유: 여덟 개 중 결과를 바꾼 유일한 레포. 규칙은 vendoring하고 스킬은 건너뛰세요.
  • JayPokale/Chisle, GitHub. 읽는 이유: 헤드라인 너머까지 읽으면 자기 52% 주장의 범위를 솔직하게 밝히는 README.
  • edonadei/caliper, GitHub. 읽는 이유: 알아 둘 만한 스킬 평가기이자, 무엇이든 실행하기 전에 claude_code.py를 읽어야 한다는 교훈.
  • reticlehq/reticle, GitHub. 읽는 이유: init 코드모드는 설치 프로그램이 프로젝트 밖에 멀리까지 쓰는 가장 분명한 사례.
  • Q00/ouroboros, GitHub. 읽는 이유: 글로벌 설치에서만 의미가 있는 훅 기반 워크플로. 프로젝트 설치로는 충족할 수 없는 설정 단계가 있음.
  • ibelick/ui-skills, GitHub. 읽는 이유: +37 토큰으로 여기서 가장 저렴한 설치, 그리고 한 번도 호출되지 않음.
  • /skill-doctor: 40 skills, 3,060 tokens a turn, dev.to. 읽는 이유: 실제 환경의 스킬별 비용 내역.
  • Too many Claude Code skills? How the listing budget decides, dev.to. 읽는 이유: description이 잘리는 메커니즘.
  • Why More Than 30 Skills Kill Your AI Agent, dev.to. 읽는 이유: 가림 효과 논문의 읽기 쉬운 버전.
  • Skill shadowing paper, arXiv. 읽는 이유: 라이브러리 크기별 통합 통과율 하락과 신뢰구간.
  • I removed 63% of my Claude Code setup, Reddit r/ClaudeCode. 읽는 이유: 구성 요소 약 235개를 약 87개로 줄이고, 삭제하지 않고 보관.
  • My fresh Claude Code sessions were starting at ~35K tokens, Reddit r/ClaudeCode. 읽는 이유: 오늘 오후에 바로 따라 할 수 있는 7단계 /context all 점검.
  • img2threejs/img2threejs, GitHub. 읽는 이유: 32,902바이트 SKILL.md가 호출 전까지는 107 토큰만 든다는 증거.
  • FloWritesCode/fwc-swiftui-skills, GitHub. 읽는 이유: 정적 Markdown 스킬, 무엇과도 충돌할 수 없는 설치의 모습.

FAQ

MCP 서버는 여전히 시작할 때 스키마로 수천 토큰을 쓰나요?

측정한 버전에서는 아닙니다. 스키마는 지연 로드되고, 비용은 노출하는 도구 이름의 개수에 비례하며 이름당 약 42~47 토큰입니다. 도구 39개짜리 서버는 +1,642 토큰, 도구 2개짜리는 +37 토큰이었습니다.

Chisle은 출력 토큰이 더 적은데 왜 기준선보다 비쌌나요?

룰셋이 세션 시작 시 로드되고(+3,496 토큰) 훅이 매 턴 287바이트를 주입하기 때문입니다. T2와 T3에서는 그 입력 오버헤드가, 실행 간 노이즈를 한 번도 넘지 못한 출력 절감보다 컸습니다.