caveman 스킬로 Claude Code 답 줄이는 법과 청구액이 줄어드는 조건
플러그인으로 깔고 긴 답에서만 켠다
스킬은 요청이 설명과 맞으면 Claude Code가 스스로 불러 읽는 지침 파일입니다. caveman은 CLAUDE.md에 "짧게 답해"라고 적어 두던 일을 답 먼저, 인사 금지, 코드와 오류 원문 유지 같은 규칙 9조로 나눠 둔 스킬입니다. 마켓플레이스를 등록하고 플러그인으로 깝니다.
claude plugin marketplace add JuliusBrussee/cavemanclaude plugin install caveman@caveman플러그인으로 깔면 새 대화형 세션이 caveman을 켠 채 시작하고, 긴 대화를 요약해 줄이는 압축이 지나간 뒤에도 규칙을 다시 넣습니다. 새 세션에서 아무것도 켜지 않고 /caveman status를 치면 이미 caveman 모드라고 나옵니다. 끌 때는 stop caveman이라고 씁니다.
부모가 넘기는 props 때문에 React.memo가 듣지 않는 흔한 질문을 caveman을 끈 채 한 번, 켜고 한 번 묻습니다. "React.memo로 감싼 자식 컴포넌트가 부모가 렌더될 때마다 같이 다시 렌더링됩니다. 부모에서 <Child style={{ color: 'red' }} onClick={() => setOpen(true)} />처럼 넘기고 있습니다. 왜 그렇고 어떻게 고치나요?"
두 답 모두 스타일 객체를 컴포넌트 밖으로 빼고 함수는 useCallback으로 고정하라고 합니다. 공백을 뺀 글자 수는 1,335자에서 722자로 줄었습니다.
- 번호 소제목 셋과 따로 둔 코드 조각이 주석 달린 코드 하나로 합쳐졌습니다.
- 질문 코드를 다시 옮긴 줄이 빠졌습니다.
- React DevTools Profiler로 먼저 재 보라는 조언이 빠졌습니다.
켜 둔 동안에도 보안 경고, 되돌릴 수 없는 작업 확인, 커밋 메시지는 평문으로 씁니다.
청구액은 답만큼 줄지 않습니다. 답을 쓰기 전에 속으로 쓰는 사고 토큰과 요청마다 붙는 규칙 1,836 토큰 때문에, 같은 질문에서 caveman의 청구 출력(1,363)은 "간결하게 답하세요." 한 줄(656)의 두 배였습니다.
| 상황 | 고를 것 | 근거 |
|---|---|---|
| 터미널에서 읽을 답을 줄이려 할 때 | caveman | 답 1,335자 → 722자 |
| 청구액을 줄이려 할 때 | CLAUDE.md에 "간결하게 답하세요." | 청구 출력 656·961, caveman 1,363·1,233 |
| 가끔 한 번 묻고 끝낼 때 | 끔 | 출력이 734 넘게 줄어야 본전(이 질문은 469) |
| 한 세션에서 이어 물을 때 | 출력이 18 넘게 줄면 caveman | 요청마다 규칙 몫 18.4 |
| 파일을 20번 읽고 답하는 작업 | 출력이 386 넘게 줄면 caveman | 요청 21번 × 18.4 |
출력 차이가 작은 질문이 많다면 프로젝트의 .caveman.json에 {"defaultMode":"manual"}을 둡니다. 새 세션이 평문으로 시작하고 /caveman을 칠 때만 켜지며, 꺼진 세션에는 규칙 1,836 토큰이 붙지 않습니다.
플러그인 없이 스킬 파일만 받으려면
npx skills add JuliusBrussee/caveman -g로 SKILL.md만 받을 수도 있습니다. 이때는 세션마다 /caveman을 쳐서 켜야 하고, 압축 뒤에는 규칙이 빠집니다.
어미까지 더 줄이려면
/caveman은 조사와 합니다체를 문법으로 보고 남깁니다. 한 단계 센 /ultracave는 "얕게 비교함"처럼 어미까지 자릅니다.
청구액은 답만큼 줄지 않는다
사고 토큰은 화면에 보이지 않지만 출력 단가로 청구됩니다. 여기에 caveman 규칙 1,836 토큰이 요청마다 입력에 붙습니다. 같은 질문을 끔, 간결 한 줄, caveman으로 보내 청구 출력을 견줬습니다. 간결 한 줄은 시스템 프롬프트에 "간결하게 답하세요." 한 줄을 붙인 조건입니다.
답 본문만 세면 caveman은 675로 끔(1,505)의 절반이 안 되고 간결 한 줄(645)과 비슷하지만, 사고 토큰 688을 더하면 간결 한 줄(656)의 두 배가 됩니다.
규칙 1,836 토큰이 캐시 쓰기 단가로 들어가, 출력으로 치면 734 토큰어치가 더 붙습니다.
규칙이 캐시 읽기로 잡혀 18 토큰어치로 줄어듭니다. 이번에도 caveman의 출력이 간결 한 줄보다 많습니다.
환산은 100만 토큰당 Opus 5.5 단가로 냅니다.
- 출력은 $20입니다.
- 처음 보낸 입력을 저장해 두는 캐시 쓰기는 1시간 보관 기준 $8입니다.
- 저장된 입력을 다시 읽는 캐시 읽기는 $0.20입니다.
Claude Code는 도구를 한 번 부를 때마다 요청을 새로 보내므로, 파일을 20번 읽고 답하는 작업은 요청이 21번입니다.
첫 요청: 1,836 × $8 ÷ $20 ≈ 734그 뒤: 1,836 × $0.20 ÷ $20 ≈ 18.4요청 21번: 21 × 18.4 ≈ 386규칙이 캐시에 있는 세션이라면 그 작업은 출력이 끔보다 386 토큰 넘게 줄어야 본전입니다. 간결 한 줄과 견주면 첫 요청과 다시 물은 요청 모두 caveman의 출력이 더 많습니다.
내 질문으로 출력 차이를 재려면
세 조건을 claude -p로 보냅니다. claude -p는 caveman이 꺼진 채 시작하고, CAVEMAN_DEFAULT_MODE=caveman을 주면 켜집니다. output_tokens에는 사고 토큰이 들어 있고, 입력 차이는 cache_creation_input_tokens와 cache_read_input_tokens의 합으로 봅니다.
Q="React.memo로 감싼 자식 컴포넌트가 부모가 렌더될 때마다 같이 다시 렌더링됩니다. 부모에서 <Child style={{ color: 'red' }} onClick={() => setOpen(true)} /> 처럼 넘기고 있습니다. 왜 그렇고 어떻게 고치나요?"claude -p --output-format json "$Q" | jq '.usage'claude -p --output-format json --append-system-prompt "간결하게 답하세요." "$Q" | jq '.usage'CAVEMAN_DEFAULT_MODE=caveman claude -p --output-format json "$Q" | jq '.usage'