arielshemesh1999@gmail.com · ישראל
← כל המאמרים

Caveman

פלאגין ל-Claude Code שמשכתב כל תגובה לסגנון אדם קדמון חכם - מילות יידוע, מילוי ועמימות נגרסים, כל התוכן הטכני נשמר. הבנצ'מארקים מראים כ-65% פחות output tokens במשימות אמיתיות.

מה זה

Caveman הוא skill ל-Claude Code מאת Julius Brussee. הרעיון פשוט עד כדי גסות: לגרום לסוכן לכתוב כמו אדם קדמון חכם. מילות יידוע (a, an, the), מילות מילוי (just, really, basically), נימוסים (sure, of course, happy to) ועמימות (maybe, it seems) - כולם נושרים. משפטים חלקיים מותרים. מה שנשמר בשלמותו הוא כל דבר שנושא משמעות: מונחים טכניים, מחרוזות שגיאה מדויקות, נתיבי קבצים וגושי קוד. הסלוגן ב-README מסכם את הכל: "why use many token when few token do trick."

הריפו הוא github.com/JuliusBrussee/caveman - רישיון MIT, דורש Node ≥ 18, הגרסה הנוכחית v1.9.0 (נכון ליוני 2026), והוא צבר מעל 74k כוכבים. למרות השם "Claude Code", ה-installer תומך גם ב-Codex, Gemini, Cursor, Windsurf, Cline, Copilot ועוד עשרות סוכנים. הבנצ'מארק הרשמי על 10 משימות אמיתיות מראה ממוצע קיצוץ של 65% ב-output tokens (טווח 22-87%), מה שבסשן סוכן כבד מתורגם ישירות לתקציב context ולדולרים.

איך זה עובד - ארכיטקטורה

זו הנקודה שבה הרבה הסברים טועים: Caveman אינו מעבד-פלט שמשכתב את התשובה אחרי שהמודל סיים לכתוב. אין שלב post-processing שלוקח פסקה מלאה ודוחס אותה. במקום זה, המנגנון מורכב משני חלקים שמשנים את אופן הכתיבה של המודל מלכתחילה:

  • skill file — קובץ חוקים שמלמד את הסוכן את הכלל המנחה: drop filler, keep substance, use fragments. המודל מייצר את הפלט התמציתי ישירות, כך שאתה משלם tokens רק עבור הטקסט הקצר.
  • hook — ב-Claude Code, ה-installer רושם ל-~/.claude/settings.json שני hooks (SessionStart ו-UserPromptSubmit) שכותבים קובץ דגל זעיר, ~/.claude/.caveman-active. הסוכן קורא את הדגל ומדבר caveman כבר מההודעה הראשונה - בלי שתצטרך להקליד /caveman ידנית בכל סשן.

ההבחנה הזו חשובה כי היא מסבירה למה האיכות לא נפגעת: ה-skill נוגע רק ב-output tokens. ה-reasoning/thinking tokens הפנימיים של המודל לא נדחסים כלל - הסוכן ממשיך לחשוב בשלמות, רק מפסיק לבזבז את הפלט הגלוי על פרוזה. במקום "Sure! I'd be happy to help - the issue is likely caused by..." מקבלים "Bug in auth middleware. Token expiry uses < not <=. Fix:". גושי קוד, URLs ונתיבי קבצים נשמרים בייט-בבייט.

ארבע רמות הדחיסה

הרמה נקבעת עם /caveman [level] ונשמרת לאורך הסשן:

  • lite — גוזר את מילות המילוי בלבד, שומר על משפטים מלאים. קריא לחלוטין לעין לא מורגלת.
  • full — ברירת המחדל. משפטים חלקיים, מחיקת מילות יידוע, דחיסה אגרסיבית.
  • ultra — כמעט טלגרפי. צפיפות מקסימלית, מינימום מילים.
  • wenyan — סגנון סינית קלאסית (文言), שמצמצם את שטח הפנים עוד יותר בזכות הצפיפות הסמנטית הגבוהה של התווים.

התקנה והגדרה

ההתקנה היא שורה אחת. ב-macOS / Linux / WSL / Git Bash:

curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash

ב-Windows PowerShell 5.1+:

irm https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.ps1 | iex

בגלל שמדובר ב-curl | bash שנוגע ב-~/.claude/settings.json, כדאי לראות מה הוא עומד לכתוב לפני שמתחייבים. ה-installer מקבל --dry-run לבדיקה יבשה, ודגלים נוספים כמו --force, --minimal, --uninstall ו---with-init:

curl -fsSL https://raw.githubusercontent.com/JuliusBrussee/caveman/main/install.sh | bash -s -- --dry-run

בפועל ה-installer מניח ב-~/.claude/hooks/ מספר קבצים (caveman-activate.js, caveman-mode-tracker.js, caveman-statusline.sh/.ps1, caveman-config.js), ממזג hooks לתוך settings.json תוך גיבוי ל-settings.json.bak, ומסמן את ההתקנה הפעילה עם ~/.claude/.caveman-active. ל-Codex ול-Gemini ההפעלה אוטומטית; לסוכן שלא מזוהה אוטומטית מעבירים --with-init כדי שיניח קבצי חוקים ל-IDE בתיקיית העבודה הנוכחית.

יכולות מרכזיות

מעבר לדחיסה הפסיבית, יש חמש פקודות slash שמכסות תרחישי עבודה ספציפיים:

/caveman [lite|full|ultra|wenyan]    # set compression level (persists per session)
/caveman-commit                       # conventional commit, ≤ 50 chars
/caveman-review                       # one-line PR comments per line
/caveman-compress <file>              # rewrite a memory file in place
/caveman-stats                        # session + lifetime token savings + USD

commit אוטומטי, conventional, ≤ 50 תווים/caveman-commit בונה הודעה מתוך ה-diff:

> /caveman-commit
fix(auth): guard nil token

> /caveman-commit
feat(export): csv stream endpoint

סקירת PR בשורה אחת לכל הערה/caveman-review מצמיד מספר שורה, חומרה ופעולה:

> /caveman-review
L42: bug: user null. Add guard.
L88: perf: N+1 on tags. Eager-load.
L120: nit: rename `tmp` → `pendingRows`.

דחיסת קובץ זיכרון/caveman-compress משכתב קובץ כמו CLAUDE.md תוך שמירה על קוד, URLs ונתיבים. בבדיקות על 5 קבצי פרויקט אמיתיים החיסכון הממוצע ב-input tokens היה 46% (טווח 36.9%-59.6%) - context שמתפנה לקוד במקום להערות:

> /caveman-compress CLAUDE.md
rewriting 4,820 tokens → 2,610 tokens (46% saved)
Wrote CLAUDE.md.caveman. Preview before overwrite? [y/N]

חשבונאות שקופה/caveman-stats קורא את לוג הסשן וסופר כמה נחסך בפועל, כולל המרה לדולרים. אם ה-badge בשורת הסטטוס מפריע, אפשר להשתיק אותו עם משתנה הסביבה CAVEMAN_STATUSLINE_SAVINGS=0.

Cavecrew - שלושה subagents

הפלאגין מגיע עם שלושה subagents (ה-cavecrew) שמדברים caveman בעצמם, כך שתוצאות הכלים שהם מחזירים לחלון ה-context של הסוכן ההורה קטנות בכ-60% לעומת subagent רגיל. בלולאות ארוכות זה ההבדל בין סוכן שמחזיק קוהרנטיות שעות לבין כזה שנכנס ל-context compaction כל כמה דקות.

  • cavecrew-investigator — מאתר קוד, לקריאה בלבד. מחזיר קובץ/פונקציה/שורה, לא יכול לערוך.
  • cavecrew-builder — עורך כירורגי. מתמקד בשינוי ממוקד ולא בעריכות רוחב.
  • cavecrew-reviewer — סוקר diff ומוציא תוצאה בפורמט שורה-לבעיה שראינו למעלה.

שסתום הבטיחות - מה לעולם לא נדחס

הדחיסן כירורגי בכוונה, ושומר על אזורים שבהם תמציתיות מסוכנת. נדחס: מילות יידוע (a/an/the), תארי מילוי (just, really, basically, simply, very), נימוסים (sure, of course, happy to), עמימות (maybe, perhaps, it seems, I think), חזרה על השאלה, וביטויי מעבר (moving on, additionally, furthermore).

נשמר בשלמותו: כל גוש מוקף backticks, מחרוזות שגיאה מדויקות, נתיבי קבצים, מונחים טכניים, מספרי גרסאות, URLs, הודעות commit, גוף PR, וה-reasoning tokens עצמם. ה-safety valve עוצר את הדחיסה גם באזהרות אבטחה, באישור פעולות בלתי-הפיכות וברצפי שלבים שבהם משפט חלקי עלול להוביל לאי-הבנה. ההפרדה הזו - אגרסיבי על פרוזה, אפס על תוכן - היא מה שמאפשר להשאיר את המצב פעיל כברירת מחדל בלי לחשוש לשבירת קוד.

פירוט הבנצ'מארק

המספרים ב-README מגיעים מ-10 משימות אמיתיות, לא prompts סינתטיים, וכל שורה מציינת tokens של תשובה רגילה מול caveman:

  • React re-render bug — 1,180 → 159 · 87%
  • React error boundary — 3,454 → 456 · 87%
  • PostgreSQL connection pool — 2,347 → 380 · 84%
  • Auth middleware token expiry — 704 → 121 · 83%
  • PostgreSQL race condition — 1,200 → 232 · 81%
  • Docker multi-stage build — 1,042 → 290 · 72%
  • PR security review — 678 → 398 · 41%
  • Microservices architecture — 446 → 310 · 30%
  • Git rebase vs merge — 702 → 292 · 58%
  • Callback to async/await — 387 → 301 · 22%

ממוצע על פני כל 10 המשימות: 1,214 → 294 tokens, 65% קיצוץ. הקצה העליון הוא משימות הוראה/הסבר (שם מודל ברירת המחדל מנפח הכי הרבה); הקצה התחתון הוא תשובות עובדתיות קצרות שכבר אין בהן מה לדחוס. נקודה הוגנת ש-README מציין במפורש: ההשוואה היא מול "Answer concisely", לא מול ברירת המחדל הוורבוזית - כלומר ה-delta אמיתי ולא מנופח מלאכותית.

מערכת אקולוגית

Caveman הוא חלק ממשפחה שלמה שעובדת באותו עיקרון של צמצום tokens:

  • caveman-shrink — MCP middleware (חבילת npm) שעוטף MCP server ודוחס את תיאורי הכלים לפני שהם מגיעים ל-context. נרשם אוטומטית עם --with-mcp-shrink.
  • caveman-code — סוכן קידוד טרמינלי מלא, מתואר כצורך כ-2x פחות tokens מ-Codex.
  • cavemem — זיכרון משותף בין Claude Code, Codex ו-Gemini.
  • cavekit — לולאת בנייה מונחית-ספציפיקציה (spec → blueprint → build).
  • cavegemma — מודל Gemma 4 31B מכוונן על זוגות טקסט שעברו דחיסת caveman.

מגבלות והערכה כנה

שתי הסתייגויות שכדאי להחזיק בראש. הראשונה: פלט ultra או wenyan גולמי נקרא כמו הודעה ממישהו שמיהר מאוד - כשעובדים בזוג עם מי שלא ראה את המצב, כדאי לרדת ל-lite כדי שהתשובות יישארו אנושיות. השנייה: זהו curl | bash שנוגע בקובץ ההגדרות של הסוכן, ולכן ה---dry-run אינו קישוט - הוא הצעד הראשון הנכון.

ראוי לציין שהרעיון נשען על בסיס אמפירי רחב יותר מהפרויקט עצמו. מאמר מ-מרץ 2026, "Brevity Constraints Reverse Performance Hierarchies in Language Models", מצא שהגבלת מודלים גדולים לתשובות קצרות שיפרה דיוק בעד 26 נקודות בחלק מהבנצ'מארקים - תמיכה בהנחה ש-output ארוך אינו בהכרח טוב יותר, ולעיתים אף פוגע.

למה זה חשוב בפועל

בשימוש יומיומי שני המנופים הגדולים הם עלות ו-context. עלות: יום סוכן כבד שורף כסף אמיתי על tokens שאף אחד לא קורא - נימוסים, חזרות על השאלה, פתיחות של "you're absolutely right". /caveman-stats הופך את החיסכון הזה למספר שאפשר לראות, וזה לבדו משנה את האופן שבו מסתכלים על תקציב הסשן. Context: בלולאות ארוכות ה-context הוא צוואר הבקבוק, לא הכסף, ותוצאות כלים קטנות ב-60% מה-cavecrew אומרות שהסוכן מחזיק קוהרנטיות הרבה יותר זמן לפני compaction.

מניסיון, חלוקת השימוש מתבקשת מעצמה: full כברירת מחדל לעבודה לבד, ירידה ל-lite ברגע שיש עין נוספת שלא ראתה את המצב, ו-/caveman-compress על קבצי זיכרון מנופחים כדי שיותר מחלון ה-context ילך לקוד ופחות להערות. ה-subagent cavecrew-investigator ב-refactors רב-קבציים מחזיר סיכום דחוס במקום dump של אלפי tokens - וזה לבדו שווה את ההתקנה.

מקורות