caveman (JuliusBrussee/caveman, SKILL.md only)
군더더기를 빼고 기술적 사실은 모두 남긴 간결한 원시인 말투로 답합니다.
caveman: 프롬프트에 이미 '간결하게'가 있었기 때문에 스킬은 단어를 줄이지 못했고 토큰만 2.2배 사용했습니다
Codex CLI · gpt-6-astra
21.7 / 30
스킬 없이 대비 향상폭: +0.00 · 상황에 따라 · 18회 실행
상황에 따라: 총점 21.7/30이 22점 미만, 향상폭 +0.00가 +1.0 미만. 추천이 되려면 총점 22/30, 출력 품질 3.5, 향상폭 +1.0이 필요합니다.
SOTA
통과Codex로 테스트
커버 대상 Codex, Claude Code
Codex CLI 0.166 (SOTA 티어): 채점된 실행 18회. 여기서 통과하면 티어 규칙에 따라 Claude Code도 커버되지만, 두 번째 티어에 대해서는 아무것도 말해주지 않습니다.
점수
각 차원은 0~5점이며 여섯 차원을 더하면 30점 만점의 총점이 됩니다. 모든 차원에서 5가 가장 좋습니다. 비용 5는 저렴하고 빠름, 설치 5는 쉬움을 뜻합니다.
- 트리거 신뢰도
- 5.0
- 스킬 없이 대비 향상폭
- 2.0
- 출력 품질
- 4.7
- 토큰 및 시간 비용
- 1.0
- 설치 및 이식성
- 4.0
- 안전성
- 5.0
보안 리뷰
안전정적 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 수동 검토: 네트워크가 차단된 샌드박스에서 실행 안전(발견 사항 없음, SKILL.md만 설치). 스캔이 깨끗하다고 해서 스킬이 안전하다는 증거는 아닙니다.
설치
npx skills@latest add JuliusBrussee/caveman --skill caveman
고정 커밋: 9b68f7ed12b05e7efaff18e65c5a3fc2849fd0a4
테스트일: 2026-11-02
테스트한 과제
- 무한 useEffect 루프 설명 — React 컴포넌트에 const fetchData = async () => { const r = await fetch('/api/items'); setItems(await r.json()); }와 useEffect(() => { fetchData(); }, [fetchData]);가 있습니다. 컴포넌트가 끝없이 데이터를 다시 가져옵니다. 왜 그런지, 그리고 해결책은 무엇인가요? 간결하게…
- 느린 Postgres 쿼리 수정 — Postgres: SELECT id, total FROM orders WHERE customer_id = 42 ORDER BY created_at DESC LIMIT 20; 쿼리가 50M 행짜리 orders 테이블에서 몇 초씩 걸리며, 이 테이블에는 기본 키 인덱스만 있습니다. 어떻게 해야 할까요? 간결하게 답해 주세요. 토큰 비용은 제가 부담합니다.
- 공유 브랜치에서 merge와 rebase — 우리 팀은 다른 사람들이 이미 가져간 공유 기능 브랜치에서 작업합니다. 최신 main을 가져오고 싶습니다. git merge와 git rebase 중 무엇을 써야 하며, 그 이유는 무엇인가요? 간결하게 답해 주세요. 토큰 비용은 제가 부담합니다.
장점
- 스킬 이름을 언급하지 않았는데도 적용되었습니다. 스킬 사용군 실행 6/6회에서 스킬 파일을 읽었습니다.
- 스킬 사용 시 높은 절대 품질: 4.67/5.
단점
- 스킬 없이 실행한 경우와 비교해 측정 가능한 향상 없음(+0.00, 노이즈 범위 안).
- 스킬 없이보다 토큰을 2.2배 사용합니다.
- 테스트 참고: SKILL.md만 설치했고 훅과 설치 프로그램은 설치하지 않았습니다. 테스트 프롬프트에 'be brief' 트리거가 포함되어 있습니다.
- 과제·그룹당 n=2이며, 약 1점 미만의 차이는 노이즈입니다.
리뷰
Codex CLI 0.166 (gpt-6-astra, low reasoning)을 Mac 테스트 머신에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬 설치(스킬 사용군), 미설치(대조군), 미설치 상태에서 스킬의 핵심 요구사항만 한 문장으로 압축해 프롬프트에 덧붙인 경우(한 문장 프롬프트군)로 나눴으며, 과제·그룹당 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 언급하지 않았습니다(아래에 적은 경우 제외). 각 프롬프트는 기술 질문(무한 useEffect 루프, 느린 Postgres 쿼리, 공유 브랜치에서 merge와 rebase 중 선택)이며 'Be brief; I'm paying per token.'으로 끝납니다. 이 문구는 스킬 자체의 트리거 중 하나이고 대조군에도 같은 문장이 들어갑니다. 따라서 이 테스트는 '간결하게'라는 요청 위에 스킬이 무엇을 더하는지를 묻습니다.
3개 그룹 비교
| 그룹 | 평균 점수 (0-5) | 실행당 토큰 |
|---|---|---|
| 스킬 없음 | 4.67 | 14k |
| 한 문장 프롬프트 | 4.5 | 14k |
| 스킬 사용 | 4.67 | 31k |
Codex CLI에서 18회 실행해 측정했고, LLM 심사 없이 규칙 기반 검사로 채점했습니다. 총점 21.7 / 30, 판정 상황에 따라.
참고: SKILL.md만 설치했고 훅과 설치 프로그램은 설치하지 않았습니다. 테스트 프롬프트에는 '간결하게' 트리거가 포함되어 있습니다.
판정: 상황에 따라 다름 (21.7 / 30). 출처: JuliusBrussee/caveman, skills/caveman, 커밋 9b68f7e에 고정. 설치: npx skills@latest add JuliusBrussee/caveman --skill caveman. 라이선스: MIT (저장소 LICENSE. 저장소의 훅과 설치 프로그램은 설치하거나 실행하지 않았습니다).
어떤 스킬인가
caveman 스킬입니다(저장소의 훅과 설치 프로그램은 설치하지 않았고 skills/caveman/SKILL.md만 사용). 간결한 답변 스타일입니다. 먼저 답하고, 인사말과 요약은 없애고, 짧은 단어를 쓰고, 관사는 생략하되 부정 표현은 절대 생략하지 않으며, 코드·경로·숫자·오류는 그대로 유지하고, 경고와 되돌릴 수 없는 작업은 평문 산문으로 설명합니다. 'caveman mode', 'be brief', 'less tokens' 같은 표현에서 발동합니다. 약 600단어의 Markdown이며 스크립트는 없습니다.
테스트 방법
Codex CLI 0.166(gpt-6-astra, 낮은 추론)을 Mac 테스트 머신에서 실행했고, 실행마다 새 임시 프로젝트와 임시 HOME/TMPDIR/캐시를 사용했습니다. 스킬을 설치한 경우(스킬 사용군), 설치하지 않은 경우(대조군), 스킬의 핵심 요구사항을 한 문장으로 압축해 프롬프트 끝에 붙인 경우(한 문장 프롬프트군)로 나눴고, 작업마다 각 군 2회씩 실행했습니다. 네트워크는 끄고 /tmp 쓰기는 차단했습니다. 프롬프트에는 스킬 이름을 전혀 언급하지 않았습니다(아래에 적은 표현은 예외).
각 프롬프트는 기술 질문 하나로, 끝에 '간결하게. 토큰 비용을 내고 있으니까.'가 붙습니다. 이 문장에는 스킬 자체 트리거 중 하나인 'be brief'가 들어 있으며, 대조군도 같은 문장을 받습니다. 따라서 이 테스트는 그냥 간결하게 해 달라는 요청 위에 스킬이 무엇을 더하는지를 묻습니다.
- 무한 useEffect 루프 설명 — React 컴포넌트에
const fetchData = async () => { const r = await fetch('/api/items'); setItems(await r.json()); }와useEffect(() => { fetchData(); }, [fetchData]);가 있습니다. 컴포넌트가 끝없이 다시 가져오기를 반복합니다. 이유와 해결법은 무엇인가요? 간결하게… - 느린 Postgres 쿼리 수정 — Postgres:
SELECT id, total FROM orders WHERE customer_id = 42 ORDER BY created_at DESC LIMIT 20;가 기본 키 인덱스만 있는 50M 행짜리 orders 테이블에서 몇 초씩 걸립니다. 어떻게 해야 하나요? 간결하게. 토큰 비용을 내고 있으니까. - 공유 브랜치에서 merge 또는 rebase — 우리 팀은 다른 사람들이 이미 pull한 공유 기능 브랜치에서 작업합니다. 최신 main을 가져오고 싶습니다. git merge와 git rebase 중 무엇을 써야 하고, 왜인가요? 간결하게. 토큰 비용을 내고 있으니까.
채점은 프로그램 방식(숨은 테스트, 심어 둔 문제 탐지, 제약 조건 검사, 해당되는 경우 렌더링+OCR)으로 실행당 0~5점입니다. 점수를 결정한 LLM 심사자는 없습니다.
결과
세 번째 군에 전달한 한 문장 프롬프트: "간결하게 답하세요. 먼저 답하고, 인사말·군더더기·완곡한 표현·요약은 넣지 말고, 불필요한 관사는 생략하되 모든 기술적 사실과 코드, 숫자, 부정 표현은 정확히 유지하세요."
| 작업 | 대조군 점수 | 한 문장 프롬프트 | 스킬 사용 | 대조군 토큰 | 한 문장 프롬프트 토큰 | 스킬 사용 토큰 | 스킬 읽음 |
|---|---|---|---|---|---|---|---|
| t1-react-loop | 4.75 | 4.5 | 4.5 | 14k | 14k | 30k | 2/2 |
| t2-pg-index | 5.0 | 5.0 | 5.0 | 14k | 14k | 34k | 2/2 |
| t3-merge-rebase | 4.25 | 4.0 | 4.5 | 14k | 14k | 30k | 2/2 |
평균 점수: 스킬 없이 4.67, 스킬 사용 시 4.67(델타 +0.0). 실행당 토큰: 14k 대 31k(2.20배), 시간 12초 대 19초. 한 문장 프롬프트군: 4.5(한 문장 프롬프트 대비 스킬의 이득: +0.17, 스킬 없는 경우 대비 한 문장 프롬프트의 이득: -0.17). 한 문장 프롬프트는 실행당 14k 토큰을 쓰므로, 스킬은 한 문장 프롬프트의 2.20배 비용입니다.
실제로 있었던 일
- 스킬이 없어도 간결하게 해 달라고 하면 에이전트는 이미 약 59단어(45〜70단어)로 답합니다. 스킬을 쓰면 52단어(39〜64단어), 한 문장 버전을 쓰면 54단어입니다. 7단어 차이는 실행 간 편차 범위 안입니다. 어떤 군도 군더더기 도입부나 마무리를 쓰지 않았고, 18개 답변 모두 코드와 명령, 핵심 사실을 유지했습니다.
- 사실 보존율도 같았습니다. 모든 군에서 답변당 필수 기술 사실 5개 중 3〜5개를 유지했습니다(필수 사실 보존 비율: 대조군 87%, 한 문장 프롬프트 80%, 스킬 87%). 에이전트가 자주 빠뜨린 사실 하나(상태 업데이트가 컴포넌트를 다시 렌더링하고 효과를 다시 실행한다는 점)는 세 군 모두 똑같이 빠뜨렸습니다. '공유 브랜치를 rebase하지 말 것'이라는 요점은 우리 검사에서 대조군 2회 중 1회, 한 문장 프롬프트 2회 중 0회, 스킬 2회 중 1회 답변과 일치했습니다. 우리가 읽은 답변은 모두 merge를 권하고 rebase는 비공개 또는 미게시 작업에 남겨 두었으므로, 이런 불일치는 일부 표현 문제입니다.
- 프롬프트에 스킬의 트리거 문구가 들어 있어 스킬은 6/6 실행에서 읽혔습니다. 바로 답할 수 있는 질문에 답하기 전에 스킬을 로드하고 이를 읽기 위해 명령 두 개를 실행하므로, 실행당 토큰이 14k에서 31k(2.2배)로 늘어납니다. 한 문장 프롬프트는 대조군과 같은 비용입니다.
- 답변을 읽어 보면 스타일은 같습니다. 먼저 답하고, 단편적인 문장을 쓰고, 짧은 코드 블록을 넣습니다. 스킬 답변과 대조군 답변을 구분할 수 없었습니다.
항목별 점수
| 항목 | 점수 | 이유 |
|---|---|---|
| 1_output_quality | 4.67 | 스킬 사용 시 평균 4.67/5점(프로그램 검사, 작업별 표 참조). |
| 2_lift_vs_no_skill | 2.0 | 스킬 없이 4.67점 대비 +0.00점(작업당 n=2, 약 1점 미만의 차이는 노이즈). |
| 3_trigger | 5.0 | 스킬 사용군 6/6 실행에서 스킬 파일이 읽힘. |
| 4_instructions_portability | 4 | 평범한 Markdown 규칙. 일부 규칙은 저장소의 훅을 설치해야만 존재하는
훅과 상태 표시줄(
|
| 5_efficiency | 1 | 토큰 2.20배(실행당 31k 대 14k), 시간 1.53배(19초 대 12초). |
| 6_safety_hygiene | 5 | 스타일 규칙만 담은 단일 SKILL.md(전문 확인). 저장소의 훅/설치 프로그램은 설치하거나 검토하지 않았습니다. |
이 테스트의 한계
- 이 테스트는 명시적인 '간결하게' 요청 위에서 스킬을 측정합니다. 스킬의 실제 용도는 지속성에 있습니다. 한 세션 내내 켜져 있어 매번 요청할 필요가 없는데, 이 세 질문 테스트는 그 점을 다루지 않습니다.
- 여기서 센 토큰 비용은 대화당 한 번 스킬을 로드하는 비용입니다. 답변마다 몇 단어를 아끼는 긴 세션에서는 본전을 뽑을 수도 있지만, 그 부분은 측정하지 않았습니다.
- 세 가지 기술 질문에 대한 채팅 답변만 확인했습니다. 커밋 메시지, 코드 리뷰 댓글, 긴 에이전트 세션(스킬에 다른 규칙이 있는 경우)은 테스트하지 않았습니다.
- 저장소의 훅, 상태 표시줄, 다른 caveman 스킬은 설치하거나 실행하지 않았습니다.
- 작업·군당 n = 2: 약 1점 미만의 차이는 노이즈입니다.
- 규칙 기반 채점은 검사가 볼 수 있는 것만 측정합니다. 취향이나 결과가 최선인지는 판단할 수 없습니다.
보안
security.md를 참조하세요. 스캔: CRITICAL 0 / HIGH 0 / MEDIUM 0. 판정: 실행해도 안전(네트워크 비활성 샌드박스). 깨끗한 스캔 결과가 스킬의 안전성을 증명하지는 않습니다.
결론
단순한 '간결하게' 요청 위에서 caveman은 측정 가능한 수준으로 답변을 더 짧게 만들거나 정확도를 떨어뜨리지 않았고, 스킬을 로드하자 짧은 답변의 토큰이 두 배가 되었습니다. 세션 내내 매번 요청하지 않고 에이전트를 간결하게 유지하고 싶다면 이 스킬이 그 역할을 합니다. 질문 하나에서만 간결함이 필요하다면 프롬프트에 그렇게 말하면 됩니다.
트랜스크립트
실행 로그: caveman (Codex CLI, network off, per-run temp HOME/TMPDIR, one row per graded run.) 열: 작업, 그룹-회차, 점수(0-5), 토큰, 초, 통과한 검사, 에이전트가 연 스킬 파일. t1-react-loop control-1: 점수 5.0, 토큰 14312, 초 16.3, 검사 3/3, 연 파일 없음 t1-react-loop control-2: 점수 4.5, 토큰 14318, 초 10.7, 검사 3/3, 연 파일 없음 t1-react-loop oneliner-1: 점수 4.5, 토큰 14348, 초 16.9, 검사 3/3, 연 파일 없음 t1-react-loop oneliner-2: 점수 4.5, 토큰 14341, 초 8.7, 검사 3/3, 연 파일 없음 t1-react-loop treatment-1: 점수 4.5, 토큰 30174, 초 21.5, 검사 3/3, 연 파일 caveman t1-react-loop treatment-2: 점수 4.5, 토큰 30067, 초 26.2, 검사 3/3, 연 파일 caveman t2-pg-index control-1: 점수 5.0, 토큰 14285, 초 10.0, 검사 3/3, 연 파일 없음 t2-pg-index control-2: 점수 5.0, 토큰 14301, 초 10.5, 검사 3/3, 연 파일 없음 t2-pg-index oneliner-1: 점수 5.0, 토큰 14362, 초 12.3, 검사 3/3, 연 파일 없음
18회 실행, 아티팩트 3개
샘플 출력
SOTA · With the skill: final message (t1-react-loop, run 1, Codex)
`fetchData` is a new function every render. The effect runs, `setItems` triggers another render, and the cycle repeats. Move the function inside the effect: ```jsx useEffect(() => { async function fetchData() { const r = await fetch('/api/items'); setItems(await r.json()); } fetchData(); }, []); ``` If needed elsewhere, stabilize `fetchData` with `useCallback` and its actual dependencies.