테크부터 경제, 생활까지. 복잡한 소식을 쉽게 풀어봅니다.
한 줄 요약: JuliusBrussee/caveman은 “에이전트가 더 짧게 말하고, 덜 읽고, 가능하면 싼 모델·낮은 effort로 같은 일을 하게” 만드는 Apache-2.0 스택입니다. 밈으로 시작했지만 v4.0.1에서는 응답 스킬(Say less), 로컬 Engine+proxy(Read less), Auto 라우팅, Blocks 코드 모드, warm cache·learn, browse까지 여섯 개 rock이 한 설치로 켜집니다. Adobe Research CAVEWOMAN(arXiv 2606.24083)·JetBrains A/B·Elastic MCP 시나리오가 외부에서 효과를 재측정했고, 저장소는 docs/HONEST-NUMBERS.md에서 “언제 지는지”까지 공개합니다. 오늘은 GitHub Trending 전체 일간 4위·Go 일간 1위(별 112,644)인 이 저장소를 레이어 맵·proxy 경로·압축기 레지스트리·CCR 복구·측정 라벨까지 해부하고, 박스에서 직접 빌드한 caveman-engine으로 로그 42,399→315 토큰(ratio 0.993)·원문 바이트 복구까지 확인한 결과를 적습니다.

왜 지금 이 저장소인가
코딩 에이전트 비용의 대부분은 “똑똑한 한 줄”이 아니라 반복해서 모델에 다시 넣는 로그·JSON·테스트 출력·도구 스키마에 있다. 출력만 짧게 하라는 “Be concise”는 이미 모델이 알고 있고, Adobe 논문은 사용자 프롬프트를 캐브맨식으로 줄이면 답이 나빠진다고 본다. Caveman의 선택은 그 반대다. 사용자 프롬프트는 건드리지 않고, (1) 응답 스타일 규칙으로 군더더기를 걷고, (2) 에이전트가 읽는 컨텍스트를 타입별 압축기로 줄이며, (3) 쉬운 질문은 싼 모델로 돌린다. vercel-labs/skills·mksglu/context-mode가 “스킬 배포·도구 출력 샌드박스”에 가깝다면, caveman은 음성(voice)+게이트웨이+복구 가능한 압축이라는 다른 축이다.
| 항목 | 확인한 값 (2026-10-16 KST) | 해석 |
|---|---|---|
| 저장소 | JuliusBrussee/caveman · Go(+JS CLI/스킬) · 기본 브랜치 main |
토픽: ai, anthropic, claude-code, llm, prompt-engineering, skill, tokens |
| 스타 / 포크 | 112,644 / 6,525 (2026-10-16 ~12:00 KST, GitHub API) | 2026-04-04 생성 → 약 6개월 반, HN #1·Trending 이력 |
| Trending | 전체 일간 4위, Go 일간 1위 | 오늘 상위 rea·scientific-agent-skills·VoiceStudio·context-mode는 이미 다룬 저장소 |
| 라이선스 | Apache-2.0 (전체 저장소). Caveman·로고는 상표 | LICENSING.md·NOTICE 확인 |
| 최신 릴리스 | GitHub v4.0.1 (2026-10-14 03:34 KST) = npm @caveman-ai/cli@4.0.1 |
직전 v4.0.0 같은 날, v3.2.0은 10-08 |
| 런타임 | Go 1.26.9 모듈 · CLI는 Node.js 22.13+ 권장 (패키지 engines ≥18) | 엔진·프록시는 Go 바이너리, 설치/래퍼는 JS |
| 문서 | README·INSTALL·HONEST-NUMBERS·docs/technical/* 30여 개 | 제품 모델·아키텍처·보안·벤치 방법이 코드와 분리 문서화 |
제품 모델: 스킬과 런타임은 독립 레이어
docs/technical/product-model.md가 선을 분명히 긋는다. 응답 스킬만 깔면 출력이 짧아지고, 로컬 런타임(Engine+proxy)을 켜면 모델로 가는 입력이 줄어든다. 계정은 Auto·Cloud 쪽만 필요하고, 로컬 압축·계측은 계정 없이 돈다. 증거 라벨도 섞지 않는다. 로컬 토큰 추정은 항상 inferred(오프라인 o200k_base)이고, verified는 연결된(connected) 증적 상태에서만 나온다.
| 레이어 | 역할 | 계정 | 라이선스 |
|---|---|---|---|
| Skill / hooks / plugins | 답변을 짧게, 기술 텍스트는 유지 | 불필요 | Apache-2.0 |
CLI (@caveman-ai/cli) |
설치·에이전트 런치·로컬 명령 | 로컬 명령은 불필요 | Apache-2.0 |
| Engine | 타입 감지·압축·토큰 추정·CCR 저장 | 불필요 | Apache-2.0 |
Local proxy (:8787) |
provider 요청을 Engine 경유, 사용량 SQLite | 불필요 | Apache-2.0 |
| MCP / mem / browse / shrink | 복구·메모리·브라우저 압축 도구 | 불필요 | Apache-2.0 |
| SDKs / middleware | 앱 코드에 같은 압축·라우팅 | 로컬은 불필요 | Apache-2.0 |
| Connected / Auto / Cloud | 호스트 게이트웨이·라우팅·관측 | 필요 | CLI는 여전히 Apache-2.0 |

Six rocks: v4.0이 한 설치로 켜는 여섯 조각
README 표의 숫자는 마케팅 슬로건이 아니라 각각 방법론 문서(WRAP-BENCHMARK.md, AUTO-BENCHMARK.md, blocks 저장소)에 묶여 있다. 중요한 건 “65%” 한 숫자가 전부가 아니라는 점이다. 출력 스킬의 중앙값 이득은 “Be concise” 대비 작을 수 있고, 세션 절감의 본체는 Read less(입력 압축)와 Auto(모델·effort 선택) 쪽에 있다.
| Rock | 하는 일 | 측정(저장소/외부) | 한계 |
|---|---|---|---|
| Say less | 응답 음성 규칙 (/caveman·ultra·mega) |
63→20 토큰 예시; 10문항에서 concise 대비 caveman 3% / ultracave 35% (3.1.0 규칙, 재측정 전) | 규칙 자체 ~1,160 입력 토큰 오버헤드 |
| Read less | Engine이 로그·JSON·CSV·테스트 출력 축소 | 6파일 세션 합 885,793→591,673 (−33.2%), 18/18 정답 | HTML은 압축기 미비로 세션이 오히려 악화한 행을 그대로 공개 |
| Auto | 질문마다 모델·effort 선택 | Opus 5.5 xhigh 대비 비용 0.46×(−54%), 점수 44.3%→43.7% (85과제, 중간 결과) | ±7 오차, 쉬움에 effort를 낮춘 효과가 큼 |
| Blocks | 에이전트가 매번 다시 쓰는 스크립트를 저장소에 고정 | go test 요약 397→76 토큰 |
pre-release, Python only, 샌드박스 없음 |
| Waste fixes | 토큰 소비 순위·warm cache | 측정 전 | 프롬프트 캐시 유지는 Anthropic 세션에서 |
| Browse | 웹 페이지 접근성 스냅샷 압축 | Playwright 15,704→121 토큰 사례 | 작은 폼은 2.3× 손해 가능 |
Say less: 음성이지 깨진 문법이 아니다
skills/caveman/SKILL.md는 ASD-STE100식 통제 영어를 코딩 에이전트용으로 옮긴 규칙 집합이다. Answer first, 문장당 한 생각, 부정어·숫자·단위는 절대 삭제, 코드·경로·에러는 바이트 단위로 유지, 보안 경고·되돌릴 수 없는 작업·혼란한 사용자는 풀 문장으로 돌아간다. Adobe가 지적한 “프롬프트 캐브맨화의 역효과”를 피하려고 사용자 프롬프트는 재작성하지 않는다. JetBrains가 본 것처럼 에이전트 세션의 대부분은 코드와 도구 호출이라, 음성만으로는 청구서를 크게 못 줄인다 — 그래서 Read less가 붙었다.
| 규칙 | 의미 | 절대 지우면 안 되는 것 |
|---|---|---|
| 규칙 | 의미 | 절대 지우면 안 되는 것 |
| Answer first | [thing] [action] [reason]. [next step]. |
기술 사실·다음 행동 |
| One idea / ≤20 words | 능동태, 용어 하나 | 부정어 not/never/no/only |
| Payload verbatim | 코드·명령·경로·에러 문자 단위 유지 | 식별자 한 글자 |
| No theater | 도구 호출 사이 잡담 금지 | 짧지 않으면 평문 승리 |
| Know when to stop | 보안·비가역·혼란 → 풀 문장 | 경고 문구 |

아키텍처: base-URL-swap proxy와 Engine 계약
로컬 요청 경로는 docs/technical/architecture.md의 다이어그램 그대로다. 기존 코딩 에이전트(또는 provider SDK) → loopback caveman-proxy → provider 라우트·자격 증명 → Engine → CCR SQLite → (원문 또는 복구 가능 변환) → 선택한 모델 제공자. 에이전트 루프를 교체하지 않는다. base URL만 바꾼다. 변환에 문제가 있으면 원문 바이트를 그대로 전달하고, standalone 모드의 savings 라벨은 항상 inferred다.
| 프로세스 | 전송 | 책임 |
|---|---|---|
caveman CLI |
터미널 | 설치·설정·런치·점검 |
caveman-proxy |
loopback HTTP | 라우팅·변환·사용량·네이티브 런타임 |
caveman-engine |
stdin/stdout | 압축·감지·복구·TOON·Pixel·evals |
caveman-mcp |
MCP stdio | 에이전트 안 Engine 도구 5개 |
cavemem |
CLI/MCP | 내구 메모리·순위 회상 |
caveman-browse |
MCP + CDP | 접근성 스냅샷·브라우저 액션 |
caveman-shrink |
stdin/stdout | 도구 카탈로그 압축 |
Engine의 안정 API는 Compress / Retrieve / Detect / Stats 네 개다(Simulate는 저장 없는 드라이런). CCR 스토어가 없으면 손실 압축은 실행되지 않는다 — 복구 불가능한 손실을 계약 위반으로 보기 때문이다. 기본 레지스트리 README는 16종을 말하고, 박스에서 caveman-engine registry로 받은 CapabilityManifest는 14개 transform_id를 노출했다(a11y, code, config, diff, html, json, log, repetition, search-result, tabular, terminal, text, toolschema, toon). 공통 속성: deterministic, recovery=exact_ccr, not_smaller_fallback=original, safety_classes S4.
| 경로 | 역할 | 눈여겨볼 것 |
|---|---|---|
| 경로 | 역할 | 눈여겨볼 것 |
engine/ |
압축 코어·레지스트리·CCR·토큰 카운터 | engine.go fail-closed Compress |
engine/compressors/ |
타입별 순수 바이트 변환 | 네트워크·스토리지 접근 없음 |
proxy/ |
공개 게이트웨이·provider 어댑터 | Bedrock BYOK, Codex /chatgpt zstd |
skills/ |
caveman·ultracave·megacave·compress·review… | Agent Skills 표준 SKILL.md |
packages/ |
cli·sdk·middleware·device-auth | TS/Python middleware |
docs/technical/ |
제품·보안·벤치·배포 | accounting-and-evidence.md |
evals/ · benchmarks/ |
출력 길이·충실도 하네스 | HONEST-NUMBERS와 연결 |
Read less: 세션 −33.2%와 fail-closed
파일 단독 압축률(CSV 98.9%, 로그 98.5% …)과 전체 세션 절감(−33.2%)이 다른 이유를 README가 바로 설명한다. 세션에는 시스템 프롬프트·도구 정의가 같이 실려서 파일만의 이득이 희석된다. HTML 행은 “아직 압축기 없음 → 세션 9.9% 악화”를 빨간 줄로 남긴다. 원문은 디스크(CCR)에 남고, 에이전트는 handle로 언제든 가져온다. 파싱 실패·용량 부족·토큰이 안 줄면 원문 통과 — 우리가 박스에서 본 작은 JSON(195→195, ratio 0)이 그 경로다.
| 파일 유형 | 파일 단독 | 세션 절감 | 비고 |
|---|---|---|---|
| 파일 유형 | 파일 단독 (before→after) | 세션 절감 | 비고 |
| CSV | 28,041 → 314 (−98.9%) | −55.1% | |
| Logs | 22,810 → 348 (−98.5%) | −50.2% | |
| YAML | 20,447 → 178 (−99.1%) | −46.2% | |
| Test output | 18,806 → 203 (−98.9%) | −27.8% | |
| JSON | 18,837 → 281 (−98.5%) | −26.4% | |
| HTML | 21,670 → 21,670 (none) | +9.9% 악화 | 압축기 미비 — 정직하게 공개 |
| 합계 6종 | 130,611 → 22,994 | 세션 −33.2% (18/18 정답) | 구엔진(2026-08) 세션 수치 |

박스 스모크: 직접 빌드한 engine으로 확인
얕은 클론 후 go build -o smoke/caveman-engine ./engine/cmd/caveman-engine(Go 1.26.9). 샘플 JSON 587B는 detect=json, compress는 ratio 0으로 원문 통과(작아서 이득 없음 → fail-closed). 800줄 합성 INFO 로그(116,651B)는 detect=log, 42,399 → 315 토큰(o200k_base, ratio 0.9926, basis=inferred, method=log), recovery_handle 발급. retrieve로 원문 116,651B 바이트 일치. 즉 “마케팅 숫자”가 아니라 로컬 바이너리의 계약이 동작한다.
| 항목 | 결과 |
|---|---|
| 항목 | 결과 |
| 바이너리 | caveman-engine ~35.7 MiB, 소스 engine/cmd/caveman-engine |
| registry | CapabilityManifest schema_version 1, transform 14개 |
| JSON 스모크 | 195→195 tok, ratio 0, 원문 통과 |
| 로그 스모크 | 42,399→315 tok, ratio ≈0.993, CCR handle |
| retrieve | handle → 116,651 bytes exact |
| stats | count 1, tokens_before 42399, tokens_after 315 |
Auto·Blocks·외부 검증
Auto는 모델 picker에 새 항목을 넣고, 어려운 질문은 큰 뇌·쉬운 질문은 낮은 effort로 보낸다. Claude only Auto $3.59 vs Opus xhigh $7.83, 중간 시간 15.9 vs 35.2분. 점수 격차 0.6pp는 표본에서 구분 불가(±7)라고 스스로 적는다. Blocks는 Cloudflare/Anthropic이 말한 code mode의 재사용 문제(같은 스크립트 주 394회 재작성)를 저장소에 고정해 풀고, grep-defs가 bare grep보다 지는 행도 표에 남긴다.
| 주체 | 설정 | 결과 | 한계 |
|---|---|---|---|
| 주체 | 설정 | 결과 | 한계 |
| Adobe CAVEWOMAN | 캐브맨식 출력, 8모델 5데이터셋 | 비용 1.4–2.4×(최대 3×) 절감 | 이 저장소를 인용; 프롬프트 축소는 역효과 |
| JetBrains | 86 코딩 과제 paired A/B | 품질 손실 없음(p=0.82), 출력 −8.5% | 세션 청구 대부분 입력 |
| Elastic | elastic-caveman, 8 MCP 시나리오 | 응답 토큰 −63.6%, zero information loss | Elasticsearch Labs 재구현 |
| LemonCrow (#727) | 300 runs/arm, opus-4-8 | 출력 −44.1%, 총비용 +0.06% | 캐시 컨텍스트 +1,532 tok/run |
| 이슈 #145·#506·#550 | 실사용자 A/B | 짧은 Q&A·요청당 과금·Cursor에서 순손실 사례 | HONEST-NUMBERS가 끄라고 명시 |
설치·연동 표면과 비교
진입점이 많다. npx @caveman-ai/cli@latest 한 방, npx skills add JuliusBrussee/caveman -g 스킬만, Claude plugin marketplace, Gemini extension, install.sh/install.ps1. proxy는 Docker로 팀 공유 가능(CAVEMAN_AUTH_TOKEN 없으면 non-loopback listen 거부). vercel-labs/skills·obra/superpowers가 “스킬 프레임워크”라면 caveman은 그 위에 전송 경로를 가로채는 게이트웨이까지 가져간다. context-mode가 도구 출력을 샌드박스해 98% 줄인다면, caveman Engine은 콘텐츠 타입별 압축+CCR로 같은 문제를 다른 계약으로 푼다.
| 도구 | 핵심 축 | 토큰 절감 방식 | 에이전트 교체 | 계정 |
|---|---|---|---|---|
| 도구 | 핵심 축 | 토큰 절감 방식 | 에이전트 교체 | 계정 |
| caveman | voice + proxy + CCR | 출력 규칙 + 입력 압축 + Auto | 아니오 (base URL) | 로컬 불필요 / Auto만 |
| vercel-labs/skills | 스킬 배포 표준 | 간접(프롬프트 품질) | 아니오 | 불필요 |
| mksglu/context-mode | 도구 출력 샌드박스·라우팅 | 출력 98%↓, MCP+hooks | 아니오 | 불필요 |
| xerj-org/xerj | 검색/인덱싱 | grep 대비 40× (검색 경로) | 별도 검색 엔진 | 불필요 |
프라이버시·운영 주의
스킬은 기본적으로 아무것도 안 보낸다(/caveman-compress만 지정 provider로 파일 전송). CLI 텔레메트리는 명령·토큰 카운트·설치 ID·OS·IP(프롬프트·코드·경로·스크립트 제외) — caveman telemetry off 또는 DO_NOT_TRACK=1. Auto 로그인 시 최근 질문·직전 답·도구 이름 등이 Cloud로 간다. 팀 proxy는 서버에 provider 키를 두고 x-cave-api-key로 게이트한다. CCR 기본 상한 512 MiB, 초과 시 새 손실 변환은 원문 통과(기존 handle은 유지).
| 위험 / 한계 | 대응 |
|---|---|
| 위험 / 한계 | 대응 |
| 짧은 코딩 Q&A에서 규칙 오버헤드 > 출력 절감 | 워크로드 A/B 후 caveman off / 스킬 제거 |
| 요청·크레딧 과금(예: Copilot premium request) | 짧은 답이 같은 요청이면 절감 0 — HONEST-NUMBERS 명시 |
| HTML·일부 Blocks가 손해 | 해당 rock off; 표의 빨간 행을 그대로 신뢰 |
| Auto가 프롬프트·첨부를 Cloud로 전송 | 로그인·Auto 선택 전에 정책 검토, caveman off routing |
| 공유 proxy 자격 증명 | CAVEMAN_AUTH_TOKEN 필수, upstream 키와 분리 |
| ‘65%’를 청구서에 그대로 대입 | provider 청구 페이지 A/B가 최종 권위; 로컬은 inferred |
실무적으로 어떻게 넣을까
가장 작은 경로부터. (1) 스킬만: npx skills add JuliusBrussee/caveman -g → /caveman. (2) 입력 압축이 필요하면 npx @caveman-ai/cli@latest 후 caveman claude(또는 codex/gemini/opencode). (3) 앱 코드면 provider SDK base URL을 http://127.0.0.1:8787로, 또는 middleware 패키지. (4) 효과는 caveman trial -- <agent>와 provider 사용량 페이지로 같은 과제 A/B. 숫자가 나쁘면 끄고, 좋은 rock만 남긴다. caveman status / caveman on|off <rock>이 그 스위치다.
| 목표 | 명령 / 구성 |
|---|---|
| 목표 | 명령 / 구성 |
| 짧은 답만 | 스킬 설치 + /caveman |
| 복구 가능 입력 압축 | caveman <agent> (proxy+Engine+CCR) |
| 계측만 (변환 없음) | caveman wrap --off <agent> |
| Pixel(비전용 밀집 텍스트) | caveman wrap --pixel <agent> |
| SDK 연동 | base URL 변경 또는 @caveman-ai/sdk / middleware |
| 토큰 소비 진단 | caveman learn → 승인 후 implement |
| 팀 공유 게이트웨이 | Docker + CAVEMAN_AUTH_TOKEN + docs/technical/deploy.md |
정리
Caveman은 “말 짧게 하기” 밈에서 시작해, v4에서 응답 규칙·컨텍스트 압축·모델 라우팅·스크립트 재사용을 한 CLI로 묶은 로컬 우선 스택이 됐다. 아키텍처의 핵심은 에이전트 교체가 아니라 base-URL-swap과 fail-closed Engine, 그리고 손실 변환마다 exact CCR 핸들을 남기는 계약이다. 외부 논문·벤치가 효과를 뒷받침하는 만큼, 저장소가 스스로 공개한 패배 조건(짧은 Q&A, 요청당 과금, HTML, 재주입 오버헤드)도 같이 읽어야 한다. 오늘 Trending 상단에 다시 오른 이유보다, 팀 청구서에서 provider A/B로 남는 rock만 고르는 쪽이 실무적으로 맞다.