Ponytail: як змусити AI-агента писати менше коду
Ponytail додає до інструкцій AI-агента правило найменшої достатньої зміни. Дізнайтеся, що він постачає, що показують власні тести та як скопіювати правило.
Що таке Ponytail
Ponytail — це набір правил, який змушує AI-агента для написання коду створювати менше коду. Проєкт описує себе одним реченням: «Змушує AI-агента думати як найлінивіший senior developer у кімнаті. Найкращий код — той, який вам не довелося написати». Проєкт поширюється за ліцензією MIT. Власного runtime він не має, і нічого в ньому не виконується. Це текст, який додається до інструкцій агента: як skill для host-систем, що завантажують skills, і як звичайні файли правил для host-систем, які цього не роблять.
Репозиторій має адресу DietrichGebert/ponytail. Його створено 12 June 2026, а до 1 August 2026 він набрав понад 90,000 зірок. Останній tagged release станом на 1 August 2026 — v4.8.4, опублікований 29 June 2026; лише між 14 і 29 June сторінка релізів містить десять тегів. Проєкт, що розвивається такими темпами, зміниться до моменту, коли ви це читатимете, тому перед створенням будь-чого на його основі зафіксуйте tag.
Ідея перед інструментом: зупиніться на першій достатній сходинці
В основі Ponytail лежить послідовність рішень. Агент проходить її перед написанням коду й зупиняється на першій сходинці, яка підходить.
- Чи потрібно це взагалі? Це YAGNI (вам це не знадобиться). Якщо відповідь — ні, пропустіть це.
- Чи існує це вже в цій кодовій базі? Повторно використайте наявний helper або шаблон.
- Чи може це зробити стандартна бібліотека? Використайте її.
- Чи покриває це вбудована функція платформи? Використайте її.
- Чи вирішує це вже встановлена залежність? Використайте її.
- Чи можна записати це в один рядок? Запишіть в один рядок.
- Лише після цього напишіть мінімальний робочий код.
Результат дає весь порядок, а не якась одна сходинка. Якщо попросити агента додати вибір дати, він напише date picker, бо саме це йому доручили. Ця послідовність змушує його спочатку перевірити сходинку 4, а вона вказує, що браузер уже має <input type="date">. У власних benchmark notes проєкту наведено саме такий випадок: без цього правила date picker займав 404 рядки, а з ним — 23 рядки, оскільки агент використав native input замість створення компонента. Colour picker скоротився з 287 рядків до 23 з тієї самої причини.
У цьому контексті лінощі не означають недбалість, і ruleset прямо це підтверджує. Його список того, де "never lazy about", охоплює розуміння проблеми перед ухваленням рішення, перевірку вхідних даних на trust boundaries, обробку помилок, яка запобігає втраті даних, безпеку, доступність і все, що ви явно попросили додати. Він також вимагає по одній невеликій runnable check для кожного фрагмента нетривіальної логіки. Правило обмежує вигадування. Воно не знижує вимог до коректності.
Що фактично містить репозиторій
AGENTS.md— набір правил, який завжди активний. Уся ідея міститься в одному файлі, який можна прочитати за п’ять хвилин.skills/ponytail/SKILL.md— опис skill із підказкою для аргументуlite,fullабоultra.- Файли правил у каталогах, специфічних для редактора, зокрема
.cursor/rules/і.windsurf/rules/, для хостів, які читають правила, але не завантажують skills. hooks/,benchmarks/,examples/іscripts/.
Аргумент інтенсивності визначає, наскільки наполегливо правило застосовується. lite реалізує запит і в одному рядку називає простіший варіант. full використовується за замовчуванням і забезпечує проходження всієї послідовності. ultra — це радикальне налаштування YAGNI: воно віддає перевагу видаленню, а не додаванню, і ставить під сумнів саму вимогу.
Хости з підтримкою skills також отримують slash-команди. /ponytail задає рівень, /ponytail-review перевіряє diff на надмірне проєктування, /ponytail-audit перевіряє весь репозиторій, /ponytail-debt збирає відкладені короткі шляхи, а /ponytail-gain виводить підсумкову таблицю результатів benchmark. Хости, які читають лише файли правил, отримують набір правил без команд.
Щоб перевірити вихідний код до того, як довірити йому роботу, клонуйте 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. Тому інструкції, які керують вашим agent, можуть змінитися між сеансами без вашого контролю. Це компроміс заради зручності команди оновлення.
Чому пасивний агент дешевший на VPS
Diff, який створює агент, не зникає з розмови. На наступному кроці модель знову читає його як контекст разом із кожним файлом, який вона відкривала для його створення. Тому зміна на 500 рядків збільшує витрати на кожен наступний крок сесії, а не лише на крок, під час якого її створено. Саме тому неконтрольований рефакторинг змушує агента працювати повільніше й гірше в міру розвитку сесії: контекстне вікно заповнюється власним виведенням агента, і для вашого фактичного коду залишається менше місця. Уся тема керування контекстним вікном coding agent полягає в тому, щоб цього не допускати.
Токени оплачуються і під час надсилання, і під час отримання, тому diff удвічі меншого розміру двічі зменшує витрати: один раз під час його створення та знову під час кожного кроку, на якому його перечитують. Чи позначиться ця економія на вашому рахунку, залежить від моделі оплати, оскільки фіксована підписка Pro або Max покриває додаткові токени, тоді як оплата API за кількість токенів стягує плату за кожен із них. Якщо ви контролюєте витрати в self-hosted середовищі, файл інструкцій є важелем, використання якого нічого не коштує. Контроль витрат на AI agent починається з обсягу виведення, а як coding agent витрачає свої токени пояснює, чому повторне читання має більше значення, ніж очікує більшість користувачів.
Diff усе одно читає людина. Зміна на 400 рядків, яку слід було реалізувати у 20 рядках, витрачає увагу того, хто перевіряє код, а увага закінчується першою. Ніхто не перевіряє четвертий великий diff за день так само ретельно, як перший, тому надмірна реалізація не лише марнує час. Вона непомітно знижує якість перевірки, яка має виявити помилки.
На сервері ризики інші, оскільки агент часто працює без нагляду. Агент, запущений у сесії tmux або за таймером, може протягом кількох годин розвивати неправильне рішення, перш ніж ви його побачите. У цьому полягає практичний ризик запуску coding agent на VPS, і саме тому люди, які займаються loop engineering, приділяють стільки уваги постійним інструкціям, а не окремим промптам. Правило у файлі, який завжди підключається, діє на кроці 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
}
]Стовпець single shot містить результати роботи базової моделі з невеликим набором запитів із правилом і без нього. Це медіанні значення за повторними запусками від 13 і 17 June 2026. Стовпець agentic містить результати headless-сесії Claude Code, яка редагувала full-stack-fastapi-template tiangolo — реальний репозиторій FastAPI і React — для дванадцяти feature tickets, по чотири запуски на Haiku 4.5. Оцінювання виконували за git diff, що залишився після роботи.
Зверніть увагу на другий стовпець. В agentic-режимі код має на 54 відсотків менше рядків, вартість є на 20 відсотків нижчою, а wall clock time — на 27 відсотків меншою. Для тих самих показників у single shot-налаштуванні наведено 93 відсотків і 74 відсотків відповідно. У README чесно пояснено причину: baseline single shot — це базова модель, яка «відповідає кількома варіантами та додатковими поясненнями», а це легко перевершити. Якщо порівнювати з реальним агентом, який виконує реальну роботу, перевага зменшується. Водночас цей результат залишається практично значущим, і саме це є кориснішим фактом.
Є одне застереження, яке наводить сам проєкт. Воно визначає, чи буде цей підхід корисним для вас. Економія найбільша там, де справді існує ризик надмірної реалізації, і майже нульова для коду, який уже був мінімальним. Дванадцять tickets в одному репозиторії Python і TypeScript не дають змоги спрогнозувати результати для вашого репозиторію. Якщо цей показник важливий для вас, виконайте порівняння на власних tickets із правилом і без нього та самостійно підрахуйте рядки.
Шаблон, який можна використати вже сьогодні без встановлення додаткових компонентів
Це текстовий шаблон, тому для використання цієї ідеї вам не потрібен плагін. Вставте такий блок у файл інструкцій, який ваш агент уже читає: 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, якого ваш агент справді дотримується, і саме тому цей шаблон слід зберігати у файлі, доданому до репозиторію, а не в історії shell.
Де правило більше не працює
Ця ієрархія оптимізована для роботи над функціями в наявній кодовій базі, де повторне використання зазвичай доступне й доречне. Для greenfield-проєкту вона підходить погано, оскільки на рівні 2 немає чого повторно використовувати, а на рівні 5 нічого не встановлено, тому агент щоразу переходить до рівня 7. Вона також погано працює в момент, коли абстракція справді потрібна. Якщо ви збираєтеся додати четвертого виклику того самого скопійованого блоку, «найкоротша різниця» створить для вас п’яту копію.
Рівень ultra ставитиме під сумнів ваші вимоги. Саме для цього він і призначений, але це створює реальні витрати, якщо рішення вже прийнято й ви хочете просто виконати роботу. Використовуйте full для звичайної роботи та переходьте до ultra, коли підозрюєте, що проблемою є сама заявка на функцію.
Жоден блок інструкцій не захистить вас від неправильного розуміння проблеми. Перший пункт самого набору правил — зрозуміти код перед ухваленням рішення. Це найдорожча частина, і текст не може виконати її замість вас. Мінімальна різниця в неправильній функції все одно є неправильним виправленням, яке до того ж легко схвалити через його малий обсяг.
Чесний підсумок такий: Ponytail — це ретельно написаний prompt, добре поширений і доповнений числовими показниками. Для його використання plugin не потрібен. Проєкт дає вам інше: хтось належно склав цей список, перевірив його на реальному репозиторії та опублікував метод разом із результатом.
FAQ
Чи працює Ponytail з агентами, відмінними від Claude Code?
Так. Ponytail постачається як skill для середовищ, що завантажують skills. До них належать Claude Code, Codex, OpenCode, Gemini та кілька інших, перелічених у README. Редактори, які читають файли правил, але не завантажують skills, наприклад Cursor, Windsurf, Cline і Copilot, використовують постійно активний набір правил із відповідного каталогу rules і не отримують slash-команд. Текст в обох випадках однаковий. Реальна відмінність полягає в тому, чи зберігає ваше середовище цей текст у контексті на кожному ході, чи додає його лише після запуску skill.
Чи пропускатиме lazy agent тести, перевірки або заходи безпеки?
Ні. У наборі правил це зазначено безпосередньо. У списку того, до чого не можна ставитися недбало, названо перевірку вхідних даних на межах довіри, обробку помилок для запобігання втраті даних, безпеку та доступність. Також для кожної нетривіальної частини логіки потрібно додавати одну невелику перевірку, яку можна виконати. Правило усуває вигадану структуру: абстракції, яких ніхто не просив, і залежності, які нікому не потрібні. Якщо після встановлення цього набору правил ваш агент починає пропускати тести, причина полягає в іншій інструкції у вашій конфігурації, яка має вищий пріоритет. Тому прочитайте файл, який агент завантажує останнім.
Чи можна довіряти опублікованим показникам швидкості та вартості?
Це власні вимірювання проєкту, опубліковані разом із методикою. Їх слід розглядати саме так. Показники для одноразових запитів порівнюють результат із базовою моделлю без додаткових правил, яка відповідає варіантами та поясненнями. Сам README зазначає, що це слабка базова лінія. Показники для agentic-сценаріїв отримано в headless-сеансі Claude Code для одного репозиторію на FastAPI і React: дванадцять задач, по чотири запуски кожної, на Haiku 4.5. Це достовірні показники для такого середовища. Вони не є прогнозом для вашої кодової бази, оскільки проєкт також зазначає, що економія зменшується майже до нуля для коду, який уже був мінімальним.
Чи потрібно щось встановлювати, щоб отримати переваги?
Ні. Ця система є текстом. Еквівалентний блок, вставлений у файл інструкцій, який ваш агент уже читає, дасть більшість переваг. Плагін надає підтримуваний текст правил, рівні інтенсивності, команди для перевірки та спосіб оновлення. Спочатку вставити скопійований блок — це відповідь рівня 1 на питання, чи потрібне взагалі встановлення.
Як не допустити, щоб unattended agent надмірно розбудовував проєкт протягом ночі?
Додайте правило до файлу постійно активних інструкцій, а не до повідомлення в чаті. Тоді воно застосовуватиметься на ході 200 під час тривалого запуску, а не лише на ході 3. Окремо обмежте можливі наслідки: надайте агенту checkout, який можна зіпсувати, замість єдиної копії проєкту, і вимагайте перевірки diff людиною перед будь-яким злиттям. Правило мінімального diff зменшує обсяг коду, який потрібно прочитати. Воно не визначає, які зміни буде внесено, і не повинно цього робити.