Ponytail — скилл, который отучает AI-агента строить лишнее

· 2 мин чтения
ai-agents yagni claude-code skills prompt-engineering
📂 Исходный код на GitHub

Скилл, который учит AI-агента писать только то, что задача требует — через лестницу из 7 ступеней: YAGNI → переиспользование → stdlib → нативная фича → зависимость → одна строка → минимум. Работает с 16 AI-агентами, MIT-лицензия.

Ponytail — скилл, который отучает AI-агента строить лишнее

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/ponytailcodex → открыть /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.

Источник: https://github.com/DietrichGebert/ponytail