
מה זה
Ponytail הוא skill ל-Claude Code מאת DietrichGebert, ותיאור החבילה מסכם אותו בשורה: "Lazy senior dev mode for AI agents. The best code is the code you never wrote." זה אותו מתכנת ותיק שכולם מכירים - קוקו ארוך, משקפיים עגולים, נמצא בחברה יותר זמן מ-version control. מראים לו חמישים שורות, הוא מסתכל, לא אומר כלום, ומחליף אותן באחת. הפלאגין מכניס את הדמות הזו לתוך הסוכן: lazy במובן של efficient, לא של רשלן. הקוד הכי טוב הוא הקוד שמעולם לא נכתב, כי קוד שלא קיים אין בו באגים, אין בו CVE, ויש לו 100% uptime.
הריפו הוא github.com/DietrichGebert/ponytail - רישיון MIT (הרישיון הקצר ביותר שעובד), הגרסה המותקנת היא 4.7.0, והפלאגין נייד ל-13 סוכנים שונים (Claude Code, Codex, Copilot, Gemini/Antigravity, OpenCode, pi, OpenClaw, Cursor, Windsurf, Cline, Kiro ועוד). הבנצ'מארק הרשמי, חציון של 10 ריצות על פני Haiku, Sonnet ו-Opus, מראה 80-94% פחות קוד, פי 3-6 מהירות, ו-47-77% פחות עלות לעומת סוכן בלי skill - בכל מודל.
הרעיון - הסולם
הליבה של ponytail היא סולם החלטות שהסוכן מטפס בו לפני שהוא כותב שורה אחת, ועוצר בשלב הראשון שמחזיק:
- זה צריך להתקיים בכלל? — צורך ספקולטיבי = לדלג עליו ולומר זאת בשורה אחת. זה ה-YAGNI (You Aren’t Gonna Need It).
- ה-stdlib עושה את זה? — להשתמש בו.
- פיצ'ר נייטיב של הפלטפורמה מכסה את זה? —
<input type="date">במקום ספריית date-picker, CSS במקום JS, אילוץ ב-DB במקום קוד אפליקציה. - תלות שכבר מותקנת פותרת את זה? — להשתמש בה. אף פעם לא להוסיף תלות חדשה למשהו שכמה שורות עושות.
- אפשר בשורה אחת? — שורה אחת.
- רק אז: הקוד המינימלי שעובד.
הדוגמה הקנונית ב-README: מבקשים date-picker. סוכן רגיל מתקין flatpickr, כותב קומפוננטת wrapper, מוסיף stylesheet ופותח דיון על אזורי זמן. ponytail עונה בשורה אחת:
<!-- ponytail: browser has one -->
<input type="date">
נקודה קריטית: הסולם הוא רפלקס, לא פרויקט מחקר. שני שלבים עובדים? לוקחים את הגבוה ומתקדמים. הפתרון העצלן הראשון שעובד הוא הנכון. זה תוקן במכוון אחרי שגרסה מוקדמת נטתה לכתוב מעט קוד אבל אז להאריך במסות "מה דילגתי עליו" - הפרוזה אכלה את חיסכון הקוד. הכלל היום: קוד, ואחריו לכל היותר שלוש שורות הסבר. אם ההסבר ארוך מהקוד - למחוק את ההסבר.
איך זה עובד - תמיד פעיל
ponytail אינו פקודה שמפעילים ידנית לפני משימה. הוא פעיל בכל סשן: hook של SessionStart מזריק מחדש את מערכת החוקים בכל תור, כך שהסוכן עובד תחת המשמעת מהתור הראשון ולא צריך להיזכר בה. בפועל זה אומר ששתי lifecycle hooks קטנות (Node.js) רצות בהתקנת Claude Code / Codex, ולכן node צריך להיות ב-PATH. אם הוא לא שם - ה-skills עדיין עובדים, רק שההפעלה האוטומטית נשארת שקטה במקום להיכשל בכל prompt.
החלוקה הזו - חוקים מוזרקים אוטומטית במקום ניחושים אד-הוק - היא מה שמבדיל skill מטיפ. הסוכן לא "מנסה להיות מינימלי כשנזכר"; הוא מטפס בסולם בכל בקשה. וכשבקשה מורכבת מגיעה, ponytail מורה לספק את הגרסה העצלה ולערער עליה באותה תשובה: "עשיתי X; Y מכסה את זה. צריך את X המלא? תגיד" - בלי להיתקע על שאלה שאפשר לבחור לה ברירת מחדל.
הרמות
הרמה נקבעת עם /ponytail [level] ונשמרת לאורך הסשן; כיבוי עם stop ponytail או normal mode:
- lite — משמעת רכה; הסולם מומלץ אך לא נאכף בתקיפות.
- full — ברירת המחדל. הסולם נאכף, stdlib ונייטיב קודמים, ה-diff הקצר ביותר וההסבר הקצר ביותר מנצחים.
- ultra — "כשהקודבייס פגע בך אישית". מינימליזם בלתי-מתפשר.
- off — כבוי לחלוטין.
אפשר לקבע את הרמה לכל סשן חדש דרך משתנה הסביבה PONYTAIL_DEFAULT_MODE או שדה defaultMode ב-~/.config/ponytail/config.json. אין קובץ קונפיג חובה - ברירת המחדל היא full וזהו.
שסתום הבטיחות - מה ponytail לעולם לא מפשט
"עצלן" כאן הוא לא "רשלן", וזו ההבחנה שמחזיקה את הכלי. ארבעה דברים לעולם לא עולים לגרזן, גם ברמת ultra:
- ולידציה בגבולות אמון — קלט שמגיע מבחוץ עדיין נבדק.
- טיפול בשגיאות שמונע אובדן נתונים — לא משמיטים את ה-catch שמציל מידע.
- אבטחה — אמצעי אבטחה אינם "boilerplate למחיקה".
- נגישות בסיסית — וכל דבר שהתבקש במפורש. המשתמש מתעקש על הגרסה המלאה? בונים אותה, בלי ויכוח מחדש.
שני מנגנונים נוספים הופכים את המשמעת לאמינה. ראשית, כל קיצור דרך מסומן בהערת ponytail: שמכריזה על הכוונה ועל מסלול השדרוג - "global lock, per-account locks if throughput matters". הקיצור נקרא ככוונה, לא כבורות, והתקרה שלו גלויה. שנית, לוגיקה לא-טריוויאלית מותירה בדיקה רצה אחת - הדבר הקטן ביותר שנכשל אם הלוגיקה נשברת: demo() מבוסס-assert או test_*.py זעיר אחד. בלי frameworks, בלי fixtures. קוד עצל בלי הבדיקה שלו הוא קוד לא גמור.
גם החומרה לא נחתכת לדגם נקי על הנייר: שעון אמיתי נסחף, חיישן אמיתי קורא במעט סטייה. ponytail משאיר את כפתור הכיול, לא רק פחות קוד - העולם הפיזי דורש כוונון שמודל מינימלי לא רואה.
הפקודות
מעבר למשמעת הפסיבית, חמש פקודות slash:
/ponytail [lite|full|ultra|off] # קביעת עוצמה, או כיבוי. בלי ארגומנט - מדווח את הרמה הנוכחית
/ponytail-review # סוקר את ה-diff לאיתור over-engineering, מחזיר רשימת-מחיקה
/ponytail-audit # מבקר את כל הריפו, לא רק את ה-diff
/ponytail-debt # אוסף את קיצורי ה-ponytail: שנדחו ל-ledger, כדי ש"אחר כך" לא יהפוך ל"אף פעם"
/ponytail-help # תזכורת קצרה
/ponytail-debt הוא הפרט שמבדיל בין מינימליזם אחראי לחיתוך פינות: כל קיצור שסומן ב-ponytail: נאסף ל-ledger אחד, כך שהחוב המכוון נשאר גלוי וניתן לפירעון במקום להישכח. הפקודות דורשות host שתומך ב-skills (Claude Code, Codex, OpenCode, Gemini, pi); במתאמים מבוססי-הוראות בלבד (Cursor, Windsurf, Cline, Copilot עורך, Kiro) נטענת רק מערכת החוקים התמיד-פעילה, בלי הפקודות.
הבנצ'מארק
המספרים מגיעים מ-5 משימות יומיומיות - email validator, debounce, סכימת CSV, countdown timer, rate limiter - על שלושה מודלים (Haiku, Sonnet, Opus) ובשלושה arms: בלי skill, עם caveman, ועם ponytail. עשר ריצות לכל תא, חציון מדווח. התוצאה: 80-94% פחות קוד, 47-77% פחות עלות, ופי 3-6 מהירות מסוכן בלי skill, בכל מודל. לשחזור: npx promptfoo eval -c benchmarks/promptfooconfig.yaml.
הקצוות הדגנרטיביים של ה-baseline פשוט לא קורים: dashboard של countdown ב-190 שורות ו-208 שניות מתקפל לכמה שורות. כל קיצור שננקט מסומן בהערת ponytail: עם מסלול השדרוג שלו, כך שהמהירות לא באה במחיר של "מה הוא בעצם דילג עליו".
ponytail מול caveman - שני צירים, לא תחרות
קל לבלבל בין ponytail ל-caveman, אבל הם חותכים בשני צירים שונים, וזו בדיוק הסיבה שהם מתחברים ולא חופפים. ההבדל הוא מה נחתך:
- caveman חותך פרוזה — מילות יידוע, מילוי, נימוסים מהפלט של הסוכן. שולט באיך הסוכן מדבר.
- ponytail חותך קוד — הסולם נגד over-engineering. שולט במה הסוכן בונה.
caveman מקצר את ההסבר, ponytail מקטין את התוצר. ponytail אפילו מגיע עם harness בנצ'מארק caveman-vs-ponytail משלו. בריצה משולבת התוצאה ברורה: התשובה קצרה וגם הקוד קטן. השניים הם דוגמה למשמעת "תמיד-פעילה" שמיושמת בשתי שכבות נפרדות - אחת על השפה, אחת על הארטיפקט.
התקנה והגדרה
ב-Claude Code שתי שורות:
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
אותה התקנה מכסה גם את Codex (דרך codex plugin marketplace add), והפלאגין מריץ שתי lifecycle hooks זעירות של Node.js - לכן node צריך להיות ב-PATH (משתמשי nvm/Nix: גם ב-PATH של ה-shell הלא-אינטראקטיבי). ל-Copilot CLI, Gemini/Antigravity, OpenCode, pi ו-OpenClaw יש נתיבי התקנה ייעודיים; לעורכים מבוססי-הוראות (Cursor, Windsurf, Cline, Copilot, Kiro) מעתיקים את קובץ ה-rules המתאים מהריפו. המאמץ הגדול ביותר ש-ponytail יבקש ממך הוא זה - וגם הוא שתי שורות.
מגבלות והערכה כנה
שתי הסתייגויות הוגנות. הראשונה, וה-README אומר אותה במפורש: מערכת החוקים מוזרקת מחדש בכל תור, ולכן על prompt קצר בודד התקורה הזו יכולה לעלות על החיסכון. הרווח האמיתי מצטבר על משימות בגודל אמיתי, שם סוכן לא-מרוסן מנפח הכי הרבה - לא על שאלת trivia אחת. השנייה: ponytail הוא משמעת, לא קסם. הקיצורים שהוא נוקט הם חוב מכוון, ואם לא מריצים /ponytail-debt מדי פעם, ה-ledger של ה-ponytail: נשאר תיאורטי. "אחר כך" הופך ל"אף פעם" בדיוק כמו בכל קודבייס אנושי.
ראוי לציין גם את הגבול שהכלי עצמו מסמן: הוא אף פעם לא מפשט ולידציה, טיפול-באובדן-נתונים, אבטחה או נגישות. כלומר ה-80-94% פחות קוד אינם באים מהורדת המגנים - הם באים מהורדת ה-boilerplate, ה-wrappers הספקולטיביים והתלויות שלא היו צריכות להיכנס מלכתחילה.
למה זה חשוב בפועל
מצב הברירת-מחדל של רוב סוכני ה-AI הוא נפיחות: מבקשים פיצ'ר קטן ומקבלים ספרייה חדשה, שכבת אבסטרקציה, קובץ קונפיג לערך שלעולם לא ישתנה, ו-interface עם מימוש אחד. זה לא נראה כמו בעיה ביום הראשון; זה נראה כמו בעיה ב-3 לפנות בוקר כשמישהו מפענח את הקוד החכם. הערך המעשי של ponytail הוא שהוא הופך את ברירת המחדל ההפוכה - "האם זה צריך להתקיים בכלל?" - לרפלקס שרץ לפני כל שורה.
שתי הפקודות שמשנות הכי הרבה בעבודה יומית הן /ponytail-review על diff לפני מיזוג (מחזיר רשימת-מחיקה במקום שבחים) ו-/ponytail-debt שמרכז את הקיצורים שנדחו למקום אחד. בשילוב עם פיצ'רים נייטיביים שכבר קיימים בדפדפן ובפלטפורמה - <input type="date">, CSS במקום JS, אילוץ DB במקום קוד - התוצאה היא פחות שורות לתחזק, פחות תלויות לעדכן, ופחות שטח לבאגים ול-CVE. הקוד שלא נכתב, כפי שה-FAQ מנסח, מתרחב אינסופית.
מקורות
- github.com/DietrichGebert/ponytail — הריפו הרשמי
- README — הסולם, המספרים, פקודות וההתקנה לכל סוכן
- benchmarks/ — שיטה, מספרים גולמיים, וה-harness של caveman-vs-ponytail
- examples/ — date-picker, caching, email-validation, sorting וה"ניצולים" האחרים