Ponytail — скилл, который отучает AI-агента строить лишнее
📂 Исходный код на GitHubСкилл, который учит AI-агента писать только то, что задача требует — через лестницу из 7 ступеней: YAGNI → переиспользование → stdlib → нативная фича → зависимость → одна строка → минимум. Работает с 16 AI-агентами, MIT-лицензия.
Ponytail — это скилл для AI-агентов, который вводит в их повседневную работу одну простую мысль: лучший код — это код, который вы не написали. Идея в том, чтобы научить LLM останавливаться и проверять, действительно ли то, что она собирается сделать, нужно. Проект набрал 77.6 тысяч звёзд на GitHub и официально поддерживает 16 разных AI-агентов — от Claude Code до OpenCode, от Codex до Gemini CLI.
Автор сравнивает эффект с приходом того самого ленивого сениора с длинным хвостом и овальными очками, который сидит в углу дольше, чем в компании существует система контроля версий. Вы приносите ему пятьдесят строк, он молча смотрит, потом заменяет их одной. Ponytail пытается вложить именно этот образ мысли в вашего агента.
Проблема, которую решает проект
Если вы хоть раз просили AI-агента сделать что-то простое — добавить выбор даты, например, — вы наверняка видели характерную картину. Агент устанавливает flatpickr, пишет компонент-обёртку, добавляет стили, разворачивает дискуссию про часовые пояса. В итоге у вас 400 строк кода там, где браузер из коробки умеет делать это одной строкой <input type="date">.
Это не уникальный баг. Это типичное поведение LLM: склонность к over-engineering, раздуванию архитектуры, тяге к абстракциям ради абстракций. Ponytail пытается это исправить системно.
Как это работает
Перед тем как писать код, агент останавливается на первой подходящей ступени «лестницы»:
1. Нужно ли это вообще? → нет: пропустить (YAGNI)
2. Уже есть в кодовой базе? → переиспользовать, не переписывать
3. Есть в стандартной библиотеке? → использовать stdlib
4. Нативная фича платформы? → использовать её
5. Установленная зависимость? → использовать её
6. Одна строка? → одна строка
7. Только потом: минимум, который работает
Важно, что эта лестница применяется после того, как агент понял задачу, а не вместо понимания. Он сначала читает код, которого касается изменение, прослеживает реальный поток, и только потом выбирает ступень. Ленив к решению, но не к чтению.
Формулировка автора: «ленив, но не халатен». Валидация на границах доверия, обработка потери данных, безопасность, доступность — никогда не попадают под нож.
Замеры
Ponytail — один из немногих подобных проектов с публичными замерами. Самая честная часть — агентный бенчмарк: headless Claude Code редактирует full-stack-fastapi-template от tiangolo (реальный репозиторий с FastAPI + React), оценивается по git diff. 12 feature-тасок, один и тот же агент с навыком и без, n=4, Haiku 4.5.
| vs no-skill baseline | LOC | tokens | cost | time | safe |
|---|---|---|---|---|---|
| ponytail | −54% | −22% | −20% | −27% | 100% |
| caveman (terse-prose control) | −20% | +7% | +3% | +2% | 100% |
| "YAGNI + one-liners" prompt | −33% | −14% | −21% | −30% | 95% |
Ponytail — единственный из трёх вариантов, который режет все метрики сразу и при этом остаётся полностью безопасным. Самый большой выигрыш там, где есть реальная ловушка over-build: задача про date picker сжалась с 404 строк до 23, color picker — с 287 до 23, потому что агент вспомнил про нативный <input>.
Более ранний single-shot бенчмарк (пять задач, три модели, по 10 прогонов) давал 80–94% меньше кода, но issue #126 справедливо заметил, что bare-модель в этом тесте раздувает ответ прозой и опциональными рассуждениями. Агентные цифры выше — это скорректированная, защитимая версия.
Принципиальный момент, который автор подчёркивает: правило никогда не было «как можно меньше токенов». Правило — пишите только то, что задача требует, и никогда не режьте валидацию, обработку ошибок, безопасность и доступность. Код получается маленьким, потому что он необходим, а не потому что его «загоняли в гольф». Экономия стоимости и времени — побочный эффект.
Установка
Установка минимальная — ровно то, чего требует философия проекта.
Claude Code и Codex плагины запускают два маленьких Node.js lifecycle-хука, так что node должен быть в PATH (для пользователей Nix/nvm: он должен быть в PATH неинтерактивной оболочки). Если его нет, скиллы всё равно работают, просто always-on активация молчит вместо того, чтобы сыпать ошибками.
Claude Code
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail
Это два отдельных промпта, не один. У десктопного приложения нет /plugin — там ставится через UI: Customize, плюсик у personal plugins, Create plugin and add marketplace, Add from repository, ввести URL.
Codex, OpenCode, Gemini CLI и другие
Codex: codex plugin marketplace add DietrichGebert/ponytail → codex → открыть /plugins → установить → открыть /hooks → разрешить два lifecycle-хука.
OpenCode: добавить в opencode.json:
{ "plugin": ["@dietrichgebert/ponytail"] }
или указать на чекпут:
{ "plugin": ["./.opencode/plugins/ponytail.mjs"] }
Плагин инжектит правила каждый ход на текущем уровне, добавляет команды /ponytail (см. ниже). OpenCode также сам загружает AGENTS.md из репозитория проекта, так что правила работают и без плагина.
Gemini CLI: gemini extensions install https://github.com/DietrichGebert/ponytail.
Copilot CLI: copilot plugin marketplace add … → copilot plugin install …. В интерактивной сессии — слеш-аналоги.
Pi, Hermes, Devin, Swival, CodeWhale, OpenClaw, Antigravity — у всех свои команды установки, везде одна строка или две. Полный список — в README проекта, раздел Agent portability.
Для Cursor, Windsurf, Cline, GitHub Copilot (редактор), Aider, Kiro, Zed, CodeWhale, Swival — копируется соответствующий файл правил. Этот путь оставляет always-on инструкции, но не добавляет переключение режимов и хуки.
Команды
| Команда | Что делает |
|---|---|
/ponytail [lite \| full \| ultra \| off] |
Установить интенсивность или выключить. Без аргумента — показать текущий уровень. |
/ponytail-review |
Ревью текущего diff на over-engineering, возвращает список на удаление. |
/ponytail-audit |
Аудит всего репозитория на over-engineering, не только diff. |
/ponytail-debt |
Собирает отложенные ponytail:-ярлыки в ledger, чтобы «потом» не превратилось в «никогда». |
/ponytail-gain |
Показывает scoreboard замеров из бенчмарка. |
/ponytail-help |
Краткая справка по командам. |
Уровень по умолчанию — full. Меняется переменной окружения PONYTAIL_DEFAULT_MODE (lite / full / ultra / off) или полем defaultMode в ~/.config/ponytail/config.json. При запуске и смене режима агент показывает текущий уровень.
/ponytail ultra существует на случай, когда кодовая база обидела лично вас.
Когда это особенно полезно
Ponytail сильнее всего там, где есть соблазн построить что-то сложное ради сложного. Типичный сценарий — джуниор-промпт «сделай форму с валидацией», на который модель выкатывает react-hook-form, yup, контекст на провайдер, обёртки, типы. С Ponytail агент сначала проверяет, есть ли <form> в HTML и Constraint Validation API — и в половине случаев ответ оказывается «не нужна библиотека».
Хорошо работает и в обратную сторону: когда вы приходите с задачей «у нас 500 строк бизнес-логики в одном компоненте, разнеси по слоям», агент с активным Ponytail не станет создавать пять новых директорий под DDD, если задача решается двумя функциями.
Чего проект не делает
Ponytail — не универсальный фреймворк для написания кода. Это узкий навык с очень понятной целью: меньше кода при сохранении качества. Если вам нужен полный агентный workflow (брейншторм → план → TDD → ревью → merge) — посмотрите на obra/superpowers или Fission-AI/OpenSpec. Ponytail с ними не конфликтует — оба могут стоять одновременно, они нацелены на разное.
Также это не инструмент для «сделать код плохо читаемым ради краткости». Лесенка применяется после понимания задачи, и «минимум, который работает» всегда включает обработку ошибок, валидацию границ и доступность. Это подчёркнуто и в правилах, и в бенчмарке — на отдельном adversarial tier Ponytail сохраняет 100% по безопасности, в отличие от более простого промпта «пиши в одну строку» (95%).
Лицензия и сопровождение
MIT — самая короткая лицензия, которая работает, как пишет автор. Проект активно поддерживается: на момент README 14 релизов, 56 контингентов, спонсор GreenPT. Текущая стабильная версия — 4.8.4 от 29 июня 2026.
Разработка самого проекта тоже пропитана той же философией: есть scripts/check-rule-copies.js, который следит, чтобы при правке компактного текста правил все копии у разных агентов оставались синхронизированы. npm test это проверяет. Пакет OpenClaw-скиллов генерируется из skills/ скриптом scripts/build-openclaw-skills.js — тесты упадут, если он устарел.
Стоит ли ставить
Если вы работаете с AI-агентом в коде и хотя бы раз ловили себя на мысли «ну зачем он столько написал» — да, стоит попробовать. Это один из немногих навыков, у которых есть публичные замеры в агентном окружении, и эти замеры подтверждают, что эффект есть, а не маркетинговый.
Самый честный способ проверить — взять задачу, которую вы знаете (свой репозиторий, знакомая фича), включить Ponytail, и посмотреть на git diff после. Если diff стал короче без потери смысла — оставить. Если нет — выключить через /ponytail off.