Ponytail: как заставить AI-агента писать меньше кода
Разберите правила Ponytail, его собственные бенчмарки и способ перенести принцип минимальных изменений в инструкции AI-агента уже сегодня.
Что такое Ponytail
Ponytail — это набор правил, который заставляет AI-агента писать меньше кода. Проект описывает себя одной строкой: «Заставляет AI-агента думать как самый ленивый опытный разработчик в команде. Лучший код — тот, который вам не пришлось писать». Проект распространяется по лицензии MIT. У него нет собственного механизма выполнения, и он ничего не выполняет. Это текст, который добавляется в инструкции агента. Для хостов, загружающих навыки, он поставляется как навык, а для остальных хостов — как обычные файлы правил.
Репозиторий находится в DietrichGebert/ponytail. Он создан 12 июня 2026 года и набрал 90,000 звезд к 1 августа 2026 года. Последний релиз с тегом на 1 августа 2026 года — v4.8.4, опубликованный 29 июня 2026 года. На странице релизов указаны десять тегов только за период с 14 по 29 июня. Проект, развивающийся с такой скоростью, изменится к моменту прочтения этого текста. Поэтому перед созданием чего-либо на его основе зафиксируйте тег.
Идея важнее инструмента: остановитесь на первой подходящей ступени
В основе Ponytail лежит лестница решений. Агент проходит ее до записи кода и останавливается на первой подходящей ступени.
- Действительно ли это вообще должно существовать? Это YAGNI (you are not going to need it). Если ответ отрицательный, пропустите задачу.
- Есть ли это уже в данной кодовой базе? Повторно используйте существующий вспомогательный компонент или шаблон.
- Умеет ли это стандартная библиотека? Используйте ее.
- Покрывает ли это встроенная функция платформы? Используйте ее.
- Решает ли эту задачу уже установленная зависимость? Используйте ее.
- Можно ли записать это в одну строку? Запишите в одну строку.
- Только после этого напишите минимальный рабочий код.
Результат дает весь порядок, а не какая-то отдельная ступень. Агент, которому поручили создать средство выбора даты, создаст средство выбора даты, потому что именно это ему поручили. Лестница заставляет его сначала проверить ступень 4, а она показывает, что в браузере уже есть <input type="date">. В собственных результатах тестирования проекта приведен именно этот случай: средство выбора даты занимало 404 строки без этого правила и 23 строки с ним, поскольку агент выбрал встроенный элемент input вместо создания компонента. По той же причине средство выбора цвета сократилось с 287 строк до 23.
В данном контексте ленивый не означает небрежный, и в наборе правил это прямо указано. В список того, к чему нельзя относиться небрежно, входят понимание задачи до принятия решения, проверка входных данных на границах доверия, обработка ошибок, предотвращающая потерю данных, безопасность, доступность и все явно запрошенные функции. Кроме того, для каждого фрагмента нетривиальной логики требуется одна небольшая запускаемая проверка. Это правило ограничивает изобретательство. Оно не снижает требования к корректности.
Что на самом деле входит в репозиторий
AGENTS.md— набор правил, который работает постоянно. Вся идея изложена в одном файле, который можно прочитать за пять минут.skills/ponytail/SKILL.md— описание навыка с подсказкой аргументаlite,fullилиultra.- Файлы правил в каталогах, зависящих от редактора, например
.cursor/rules/и.windsurf/rules/. Они предназначены для хостов, которые читают правила, но не загружают навыки. hooks/,benchmarks/,examples/иscripts/.
Аргумент интенсивности определяет, насколько жёстко правило применяется. lite создаёт запрошенный результат и в одной строке указывает более простой вариант. full используется по умолчанию и требует соблюдать все уровни. ultra — радикальная настройка YAGNI: она предпочитает удаление добавлению и ставит под сомнение само требование.
Хосты, поддерживающие навыки, также получают slash-команды. /ponytail задаёт уровень, /ponytail-review проверяет diff на избыточное усложнение, /ponytail-audit проверяет весь репозиторий, /ponytail-debt собирает отложенные сокращения, а /ponytail-gain выводит итоговую таблицу результатов. Хосты, которые читают только файлы правил, получают набор правил без команд.
Чтобы прочитать исходный код до того, как доверить ему работу, клонируйте tag, а не branch:
git clone --depth 1 --branch v4.8.4 https://github.com/DietrichGebert/ponytail.gitДля Claude Code в документации вместо этого описана установка plugin. Эти две строки соответствуют документации по состоянию на 1 August 2026:
/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytailПуть plugin использует default branch, а не tag. Поэтому инструкции, управляющие вашим агентом, могут измениться между сеансами. Это плата за удобство команды обновления.
Почему «ленивый» агент дешевле на VPS
Изменения, которые создаёт агент, не исчезают из диалога. На следующем ходе модель снова читает их как контекст вместе со всеми файлами, которые она открывала для их создания. Поэтому изменение на 500 строк увеличивает стоимость каждого последующего хода сессии, а не только хода, на котором оно было создано. По этой причине неконтролируемый рефакторинг заставляет агента работать всё медленнее и менее точно по мере продолжения сессии: окно заполняется собственным выводом агента, и для вашего фактического кода остаётся всё меньше места. Управлению этим посвящён весь материал управление контекстным окном агента для разработки.
Токены оплачиваются и при вводе, и при выводе. Поэтому изменение вдвое меньшего размера обходится дешевле дважды: при создании и затем на каждом ходе, когда оно перечитывается. Если вы контролируете расходы в самостоятельно размещённой системе, файл инструкций — это бесплатный рычаг управления. Материал управление расходами на AI-агента начинается с объёма вывода, а материал как агент для разработки расходует токены объясняет, почему повторное чтение имеет большее значение, чем обычно ожидают.
Человек по-прежнему просматривает изменения. Изменение на 400 строк, которое должно было занимать 20 строк, расходует внимание проверяющего, а именно внимание заканчивается первым. Никто не проверяет четвёртое длинное изменение за день так же тщательно, как первое. Поэтому избыточная реализация не только тратит время. Она незаметно снижает качество проверки, которая должна выявить ошибки.
На сервере риски выше, поскольку агент часто работает без наблюдения. Агент, работающий в сеансе tmux или по таймеру, может в течение нескольких часов развивать неверное решение, прежде чем вы его обнаружите. В этом состоит практический риск запуска агента для разработки на VPS. Поэтому специалисты, занимающиеся проектированием циклов, уделяют столько внимания постоянным инструкциям, а не отдельным запросам. Правило в постоянно используемом файле действует на ходе 200. Правило, введённое вами в чате, действует на ходе 3.
Новые зависимости — ещё одна незаметная статья расходов. Пункт 5 предписывает использовать установленные компоненты. Каждый пакет, который агент добавляет по собственной инициативе, впоследствии нужно обновлять, и он попадёт в каждый образ контейнера, создаваемый из этого репозитория.
Что показывают собственные результаты тестирования Ponytail
Проект публикует два набора результатов, и они сильно расходятся. Оба набора представлены самим проектом. Ни один из них не является независимым тестированием.
The data behind this chart
[
{
"label": "Lines of code",
"single_shot_pct": 93,
"agentic_pct": 54
},
{
"label": "Cost per run",
"single_shot_pct": 63,
"agentic_pct": 20
},
{
"label": "Wall clock time",
"single_shot_pct": 74,
"agentic_pct": 27
}
]Столбец для одиночного запроса получен от базовой модели, которая отвечала на небольшой набор запросов с правилом и без него. В качестве результата использовались медианные значения по повторным запускам, выполненным 13 и 17 June 2026. Столбец для агентного режима получен в безголовой сессии Claude Code, которая редактировала full-stack-fastapi-template tiangolo — реальный репозиторий FastAPI и React. Тест включал двенадцать задач по функциям, по четыре запуска для каждой задачи на Haiku 4.5. Оценивался git diff, оставшийся после работы.
Посмотрите на второй столбец. В агентном режиме код короче на 54 процентов, стоимость ниже на 20 процентов, а время выполнения меньше на 27 процентов. Для тех же показателей в режиме одиночного запроса значения составляют 93 процентов и 74 процентов. В README прямо объясняется причина: базовая модель в одиночном запросе «отвечает несколькими вариантами и дополнительными пояснениями», а это легко улучшить. При сравнении с реальным агентом, выполняющим реальную работу, преимущество уменьшается. При этом оно остается заметным, что и является более полезным фактом.
Есть оговорка самого проекта. Именно она определяет, поможет ли это вам. Экономия максимальна там, где действительно существует риск избыточной реализации, и почти отсутствует для кода, который уже был минимальным. Двенадцать задач в одном репозитории на Python и TypeScript не позволяют делать выводы о вашем репозитории. Если этот показатель важен для вас, сравните результаты на собственных задачах с правилом и без него и самостоятельно подсчитайте строки.
Шаблон, который можно использовать уже сегодня без установки чего-либо
Лестница — это текст, поэтому для использования этой идеи подключать плагин не требуется. Вставьте такой блок в файл инструкций, который уже читает ваш агент: это может быть AGENTS.md, CLAUDE.md или файл правил вашего редактора.
## Before you write code
Climb this list in order. Stop at the first line that applies.
1. Does this need to exist? If not, say so and stop.
2. Does this repo already have it? Reuse the helper.
3. Does the standard library do it? Use it.
4. Does the platform do it natively? Use it.
5. Does an installed dependency do it? Use it.
6. Can it be one line? Write one line.
7. Otherwise write the minimum that works.
Never take the shortcut on: reading the code before changing it, validating
input that crosses a trust boundary, error handling that would otherwise lose
data, security, accessibility, or anything I asked for by name.
Do not add an abstraction I did not ask for. Do not add a dependency without
saying why in one line. Prefer deleting code to adding it.
Mark a deliberate simplification with a comment naming its ceiling and the
upgrade path.Последнее правило заслуживает отдельного внимания. Соглашение Ponytail — это комментарий с именем инструмента:
# ponytail: global lock, per-account locks if throughput mattersКомментарий занимает две строки и снимает вопрос, который иначе потребовал бы еще одного цикла проверки. Он сообщает следующему читателю, что простая версия была осознанным решением, и указывает условие, при котором это решение перестает действовать. Без этого проверяющий не сможет отличить обоснованное упрощение от того, что агент что-то забыл, поэтому ему придется задать вопрос.
Имеет значение не только содержание блока, но и его расположение. Файл, который агент загружает при каждом запуске, влияет на каждый запуск, в том числе на те, за которыми вы не следите. Эта разница рассматривается в разделе как написать AGENTS.md, которому ваш агент действительно следует, и именно поэтому этот шаблон следует хранить в зафиксированном в системе контроля версий файле, а не в истории оболочки.
Где правило перестает работать
Эта шкала рассчитана на добавление функций в уже существующую кодовую базу, где повторное использование обычно доступно и обычно корректно. Для greenfield-проекта она подходит плохо: на уровне 2 нечего повторно использовать, а на уровне 5 ничего не установлено, поэтому агент каждый раз переходит к уровню 7. Она также плохо подходит в ситуации, когда абстракция действительно нужна. Если вы собираетесь добавить четвертый вызов одного и того же скопированного блока, правило «минимальный diff» даст вам пятую копию.
Уровень ultra поставит под сомнение ваши требования. В этом его назначение, но это создает реальные издержки, если решение уже принято и требуется только выполнить работу. Используйте full для обычных задач и выбирайте ultra, когда подозреваете, что проблема заключается в самом запросе на добавление функции.
Ни один блок инструкций не защитит от неправильного понимания задачи. Первый пункт самого набора правил — изучить код до принятия решения. Это самая затратная часть, и текст не может выполнить ее за вас. Минимальный diff в неправильной функции все равно означает неправильное исправление. Теперь это небольшое неправильное исправление, которое легко одобрить.
Честный вывод таков: Ponytail — это тщательно составленный prompt, хорошо распространенный и дополненный числовыми показателями. Для его работы plugin не требуется. Ценность проекта в том, что кто-то правильно составил этот список, проверил его на реальном репозитории и опубликовал метод вместе с результатом.
FAQ
Работает ли Ponytail с агентами, отличными от Claude Code?
Да. Ponytail поставляется как skill для хостов, которые загружают skills. К ним относятся Claude Code, Codex, OpenCode, Gemini и несколько других, перечисленных в README. Редакторы, которые читают файлы правил, но не загружают skills, например Cursor, Windsurf, Cline и Copilot, используют постоянно применяемый набор правил из соответствующего каталога rules и не получают slash-команды. В обоих случаях используется один и тот же текст. Реальное различие заключается в том, сохраняет ли ваш хост этот текст в контексте каждого запроса или добавляет его только при активации skill.
Будет ли небрежный агент пропускать тесты, проверку или требования безопасности?
Нет. Набор правил прямо это устанавливает. В его списке того, к чему нельзя относиться небрежно, указаны проверка входных данных на границах доверия, обработка ошибок, предотвращающая потерю данных, безопасность и доступность. Также в нем требуется одна небольшая запускаемая проверка для каждого фрагмента нетривиальной логики. Правило устраняет выдуманную структуру: абстракции, которые никто не запрашивал, и зависимости, которые никому не нужны. Если после установки Ponytail агент начинает удалять тесты, причина заключается в другом указании в вашей конфигурации, которое имеет более высокий приоритет. В таком случае прочитайте файл, загружаемый агентом последним.
Можно ли доверять опубликованным показателям скорости и стоимости?
Это собственные измерения проекта, опубликованные вместе с методикой. Их следует воспринимать именно так. Показатели для одиночного запроса сравниваются с базовой моделью, которая отвечает вариантами и комментариями. Сам README указывает, что это слабая базовая линия. Показатели для работы агента получены в безголовом сеансе Claude Code на одном репозитории FastAPI и React: двенадцать задач, по четыре запуска каждой, с использованием Haiku 4.5. Для этой конфигурации это достоверные показатели. Это не прогноз для вашей кодовой базы, поскольку проект также указывает, что экономия снижается почти до нуля для кода, который изначально был минимальным.
Нужно ли что-либо устанавливать, чтобы получить пользу?
Нет. Лестница представляет собой текст. Эквивалентный блок, вставленный в файл инструкций, который уже читает ваш агент, дает большую часть эффекта. Plugin предоставляет поддерживаемую формулировку, уровни интенсивности, команды проверки и механизм обновления. Сначала вставить скопированный блок — это ответ уровня 1 на вопрос о том, требуется ли вообще установка.
Как не допустить, чтобы агент без контроля создавал лишнюю структуру в течение ночи?
Поместите правило в файл постоянно применяемых инструкций, а не в сообщение чата. Тогда оно будет действовать на запросе 200 длительного запуска, а не только на запросе 3. Затем отдельно ограничьте возможный ущерб: предоставьте агенту рабочую копию, которую можно испортить, вместо единственной копии, и требуйте проверки diff человеком до слияния изменений. Правило минимального diff уменьшает объем кода, который нужно прочитать. Оно не определяет, какие изменения попадут в проект, и не должно этого делать.