SSD Nodes Learn Hosting plans →
Посібники Matt ConnorВід Matt Connor

Ponytail: як змусити AI agent писати менше коду

Ponytail навчає coding agent обирати найменшу робочу зміну. Дізнайтеся, що входить до набору правил, що показали його benchmarks і як додати його сьогодні.

Що таке Ponytail

Ponytail — це набір правил, який змушує AI coding agent писати менше коду. Проєкт описує себе одним рядком: "Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote." Він поширюється за ліцензією MIT. Власного runtime він не має, і нічого в ньому не виконується. Це текст, який додається до інструкцій агента: як skill для host-систем, що завантажують skills, і як звичайні rule files для host-систем, які цього не роблять.

Репозиторій — DietrichGebert/ponytail. Його створено 12 June 2026, а до 1 August 2026 він набрав понад 90,000 зірок. Станом на 1 August 2026 останнім tagged release був v4.8.4, опублікований 29 June 2026, а на сторінці releases було зазначено десять tags лише за період із 14 до 29 June. Розробка не сповільнилася: 17 October 2026 останнім release є v5.3.2, опублікований пізно 16 October, — третій release того дня після v5.3.0 і v5.3.1. Перед ним 13 October вийшов v5.2.0, через п’ять днів після того, як 8 October одночасно вийшли v5.0.0 і v5.1.0, а репозиторій показує понад 165,000 зірок. Проєкт, що розвивається такими темпами, зміниться до того часу, коли ви це прочитаєте, тому перед будь-якою побудовою на його основі зафіксуйте tag.

Ідея перед інструментом: зупиніться на першій придатній сходинці

В основі Ponytail лежить ієрархія рішень. Перед написанням коду агент проходить її та зупиняється на першій придатній сходинці.

  1. Чи потрібно це взагалі створювати? Це YAGNI (вам це не знадобиться). Якщо відповідь негативна, пропустіть це.
  2. Чи вже існує це в цій кодовій базі? Повторно використайте наявний helper або вже наявний патерн.
  3. Чи може це зробити стандартна бібліотека? Використайте її.
  4. Чи покриває це нативна функція платформи? Використайте її.
  5. Чи вирішує це вже встановлена залежність? Використайте її.
  6. Чи можна вмістити це в один рядок? Зробіть це одним рядком.
  7. І лише після цього напишіть мінімальний робочий код.

Саме так цю ієрархію описано в v4.8.4, і номери сходинок у решті цієї статті відповідають їй. Поточна гілка main об’єднує сходинки 3 і 4 в одну: «Стандартна бібліотека або функція платформи? Використайте її, якщо в проєкті немає власного рішення», — і додає правило, що «власний компонент кращий за нативний віджет», тому тепер ієрархія має шість сходинок. Порядок не змінився.

Саме порядок дає результат, а не окрема сходинка. Агент, якому доручили створити date picker, створить date picker, бо саме це йому доручили. Ієрархія змушує його спочатку перевірити, що вже існує: сходинка 2 запитує, чи є в репозиторії відповідний компонент, а сходинка 4 вказує, що браузер уже має <input type="date">. Поточні нотатки до benchmark проєкту містять саме такий приклад: date picker, який без цього правила займав 335 рядків, із Ponytail 5 зайняв 10 рядків, оскільки агент повторно використав власний компонент репозиторію Input за допомогою type="date", а календар надав браузер. Colour picker скоротився менше: зі 135 рядків до 26. Сходинка 2 непомітно дає збій, оскільки агент, який не бачить уже наявний helper, без вагань напише другий. Саме цю прогалину має усунути карта кодової бази, доступна для запитів.

Лінивий підхід тут не означає недбалий, і правила прямо це зазначають. До переліку того, щодо чого не можна діяти недбало, належать розуміння проблеми перед ухваленням рішення, перевірка вхідних даних на межах довіри, обробка помилок, що запобігає втраті даних, безпека, доступність і все, що ви явно попросили зробити. Також правила вимагають однієї невеликої виконуваної перевірки для кожного фрагмента нетривіальної логіки. Це правило обмежує вигадування. Воно не знижує вимог до коректності.

Що насправді містить репозиторій

  • AGENTS.md — набір правил, що працює постійно; це основна ідея, викладена в одному файлі, який можна прочитати за п'ять хвилин.
  • skills/ponytail/SKILL.md — визначення навички з підказкою аргументу lite, full, ultra або off.
  • Файли правил у каталогах для конкретних редакторів, як-от .cursor/rules/ та .windsurf/rules/, для хостів, які зчитують правила, але не завантажують навички.
  • hooks/, benchmarks/, examples/ та scripts/.

Аргумент intensity змінює рівень наполегливості правила. lite створює те, що ви запитали, і в одному рядку пропонує менш суворий варіант. full є типовим налаштуванням і забезпечує дотримання ієрархії. ultra — це налаштування для прихильників принципу YAGNI: воно надає перевагу видаленню, а не додаванню, і може ставити під сумнів саму вимогу.

Хости, що підтримують навички, також отримують слеш-команди. /ponytail встановлює рівень, /ponytail-review перевіряє diff на надмірну складність, /ponytail-audit перевіряє весь репозиторій, /ponytail-debt збирає відкладені скорочення, а /ponytail-gain виводить таблицю результатів тестування. Хости, які лише зчитують файли правил, отримують набір правил без команд. Починаючи з v5.3.0, випущеної 16 жовтня 2026 року, Claude Code також відображає над полем введення панель із вартістю завдання, повторним використанням коду та статусом тестів. Для цього потрібна версія Claude Code 2.1.290 або новіша; вона не з’являється в панелі чату VS Code, хмарних сесіях або claude -p, а /ponytail band off приховує її. Починаючи з v5.3.2, /ponytail band import одноразово зчитує ваші минулі сесії Claude Code і додає їх до таблиці з інформацією про вартість, час роботи агента та кількість токенів, щоб ви могли порівняти їх із сесіями, запущеними за цим правилом.

Щоб ознайомитися з вихідним кодом перед тим, як довіряти йому, клонуйте тег, а не гілку. Це тег, з якого походить наведена вище ієрархія; підставте v5.3.2, найновіший станом на 17 жовтня 2026 року, щоб прочитати поточне формулювання:

git clone --depth 1 --branch v4.8.4 https://github.com/DietrichGebert/ponytail.git

Для Claude Code проєкт натомість документує встановлення плагіна, і ці два рядки відповідають документації станом на 17 жовтня 2026 року:

/plugin marketplace add DietrichGebert/ponytail
/plugin install ponytail@ponytail

Шлях plugin використовує default branch, а не тег. Тому інструкції, які керують вашим агентом, можуть змінюватися між сеансами. Це компроміс, на який ви йдете заради зручності команди оновлення.

Чому лінивий агент дешевший на VPS

Diff, який створює агент, не залишає межі розмови. На наступному ході модель знову читає його як контекст разом із кожним файлом, який вона відкривала для його створення. Тому зміна на 500 рядків навантажує кожен наступний хід сеансу, доки compaction не замінить старі ходи підсумком, а не лише той хід, під час якого цю зміну створено. Саме тому неконтрольований рефакторинг робить агента повільнішим і менш ефективним у міру роботи сеансу: вікно заповнюється власним виведенням агента, тому для вашого фактичного коду залишається менше місця. Увесь матеріал про керування контекстним вікном coding agent присвячений контролю цього обсягу.

Токени оплачуються і на вході, і на виході, тому diff удвічі меншого розміру двічі зменшує витрати: спочатку під час його створення, а потім під час кожного ходу, коли його читають повторно. Чи зменшить це ваш рахунок, залежить від способу оплати, оскільки підписка Pro або Max покриває додаткові токени лише в межах установлених лімітів використання, після чого opt-in кредити на використання тарифікуються окремо, тоді як API з оплатою за токени стягує плату за кожен із них. Якщо ви контролюєте витрати в self-hosted середовищі, файл інструкцій — це важіль, використання якого нічого не коштує. Контроль вартості AI agent для вас починається з обсягу виведення, а матеріал про витрати токенів coding agent пояснює, чому повторне читання важливіше, ніж зазвичай очікують.

Diff усе одно читає людина. Зміна на 400 рядків, яку потрібно було реалізувати у 20 рядках, витрачає увагу того, хто її перевіряє, а саме увага закінчується першою. Ніхто не перевіряє четвертий великий diff за день так само уважно, як перший. Тому надмірне ускладнення не лише марнує час. Воно непомітно знижує якість перевірки, яка має виявити помилки.

На сервері ситуація серйозніша, оскільки агент часто працює без нагляду. Агент, який працює в сеансі tmux або за таймером, може кілька годин розвивати неправильне рішення, перш ніж ви його побачите. У цьому полягає практичний ризик запуску coding agent на VPS, тому ті, хто займається loop engineering, приділяють стільки уваги постійним інструкціям, а не окремим промптам. Правило у файлі, який завжди завантажується, діє на ході 200. Правило, введене в чаті, діє на ході 3. Воно також діє у другому сеансі, який ви запускаєте на тому самому сервері: цей сеанс читає зафіксований файл, але не успадковує нічого з того, що ви вводили в першому, навіть коли два сеанси можуть надсилати повідомлення один одному.

Нові залежності — ще одна непомітна стаття витрат. У Rung 5 сказано: використовуйте те, що вже встановлено. Кожен пакет, який агент додає з власної ініціативи, згодом потрібно оновлювати та виправляти, і він зрештою потрапляє до кожного container image, який ви створюєте з цього репозиторію.

Що показують власні benchmark-числа Ponytail

Проєкт опублікував два типи результатів, і вони суттєво розходяться. Обидва значення опубліковані самим проєктом. Жодне з них не є результатом незалежного тестування.

ГрафікPonytail's published reduction vs no skill, percent, Opus 5.5
Дані, на яких побудовано графік
[
  {
    "label": "Lines of code",
    "v4_13_pct": 48,
    "v5_pct": 53
  },
  {
    "label": "Cost per run",
    "v4_13_pct": 16,
    "v5_pct": 26
  },
  {
    "label": "Wall clock time",
    "v4_13_pct": 38,
    "v5_pct": 41
  }
]

На графіку наведено поточний agentic benchmark проєкту, датований 7 October 2026. Сесії Headless Claude Code 2.1.288 на Opus 5.5 із типовим рівнем effort виконали 39 завдань: по п’ять запусків для кожного завдання та кожного варіанта, загалом 585 сесій для no skill, Ponytail v4.13.0 і Ponytail 5. Дванадцять завдань — це feature tickets у full-stack-fastapi-template Tiangolo, реальному репозиторії FastAPI і React. Їх оцінювали за git diff, що залишився. Решта — 18 хірургічних завдань із прихованими перевірками, шість запитів на створення невеликих застосунків і три запити "покажи мені приклад". Bash було вимкнено для кожного варіанта. З Ponytail 5 кількість output tokens зменшилася на 45 відсотків.

Порівняйте це з показниками single shot, які проєкт опублікував у June 2026. Їх отримали від bare model, що відповідала на п’ять повсякденних запитів із правилом і без нього; наведені значення були медіанами повторних запусків. Вони показали на 80–94 відсотки менше коду для Haiku, Sonnet і Opus, а перевірка вартості від 17 June 2026 показала, що Haiku був на 63 відсотки дешевшим. Поточний agentic-результат для Ponytail 5 становить 53 відсотка менше рядків коду, 26 відсотка меншу вартість і 41 відсотка менше wall clock time. Проєкт швидко виправив показник single shot. До v4.8.4, 29 June 2026, у README вже було винесено agentic-результат: "~54% less code (up to 94%)". Там також зазначалося, що попередні 80–94 відсотки — це "максимум для окремого завдання, а не середнє значення", а показники single shot було переміщено до згорнутого розділу "Older single-shot numbers". У цьому розділі чесно пояснюється причина розбіжності: baseline для single shot — це bare model, яка "доповнює свою відповідь прозою та варіантами", а це легко перевершити. Якщо порівнювати з реальним агентом, який виконує реальну роботу, перевага зменшується. Водночас вона залишається реальною, і саме це є кориснішим фактом. У тому червневому agentic-запуску було дванадцять ticket для Haiku 4.5 із чотирма запусками кожного. Результат був близьким до сьогоднішнього показника: на 54 відсотки менше рядків. У поточному README показників single shot більше немає.

Є одне застереження, яке належить самому проєкту, і саме воно визначає, чи допоможе це вам. Економія найбільша там, де є реальний ризик надмірної реалізації, і майже дорівнює нулю для коду, який і без того був мінімальним. Таблиця результатів за October це підтверджує: у кількох хірургічних завданнях кількість рядків була однаковою в усіх трьох варіантах. Тридцять дев’ять завдань на одній моделі та одному хості, з вимкненим Bash, не прогнозують результат для вашого репозиторію. Якщо це число важливе для вас, проведіть порівняння на власних ticket із правилом і без нього та самостійно порахуйте рядки.

Шаблон, який можна використовувати вже сьогодні без інсталяції

Драбина є текстом, тому для використання цієї ідеї вам не потрібен плагін. Вставте такий блок у файл інструкцій, який ваш агент уже читає: 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 використовується коментар із міткою shortcut:, де зазначено обмеження та умову переходу на інше рішення (у червневих релізах, зокрема v4.8.4, замість нього використовувалася мітка ponytail:):

# shortcut: global lock, per-account locks if throughput matters

Коментар займає два рядки, але закриває питання, яке інакше потребувало б окремого циклу перевірки. Він повідомляє наступному читачеві, що проста версія була свідомим рішенням, і визначає умову, за якої це рішення перестає бути чинним. Без нього рецензент не може відрізнити продумане спрощення від того, що агент пропустив, тому йому доводиться ставити додаткові запитання.

Важливо не лише те, що написано в блоці, а й де його розміщено. Файл, який агент завантажує під час кожного запуску, впливає на кожен запуск, зокрема на ті, за якими ви не стежите. Саме цій відмінності присвячено матеріал як написати AGENTS.md, якого ваш агент справді дотримуватиметься, і саме тому цей шаблон має зберігатися у version-controlled файлі, а не в історії shell. У monorepo його слід розмістити в кількох version-controlled файлах, оскільки AGENTS.md для кожного пакета зберігає правила кожного каталогу короткими, замість того щоб змушувати агента під час кожного запуску читати правила всього дерева. Однак розміщення не гарантує виконання правил. Перш ніж вирішити, що формулювання драбини потрібно посилити, варто зрозуміти чому агент проходить повз правило, яке вже завантажив.

Де правило перестає працювати

Ця шкала розрахована на роботу над функціями в кодовій базі, яка вже існує. У такому середовищі повторне використання зазвичай доступне й доречне. Для greenfield-проєкту вона підходить гірше, оскільки на рівні 2 немає чого повторно використовувати, а на рівні 5 нічого не встановлено. Агент усе ще може зупинитися на рівні 1, стандартній бібліотеці, можливості платформи або однорядковій команді. Але два найдешевші варіанти вже недоступні, тому більше завдань завершуються написанням нового коду. Шкала також погано підходить для моменту, коли абстракція справді потрібна. Якщо ви збираєтеся додати четвертий виклик того самого скопійованого блоку, «найкоротший diff» створить для вас п’яту копію.

Рівень ultra ставитиме під сумнів ваші вимоги. Саме для цього він і призначений. Це реальна вартість, якщо рішення вже ухвалено і ви хочете лише виконати роботу. Для звичайних завдань використовуйте full, а до ultra звертайтеся, коли підозрюєте, що проблема полягає в самому запиті на функцію.

Жоден блок інструкцій не захистить від неправильного розуміння проблеми. Перший пункт самого набору правил вимагає зрозуміти код перед ухваленням рішення. Це найдорожча частина, і текст не може виконати її за вас. Мінімальна зміна не в тій функції все одно залишається неправильним виправленням. Тепер це лише невелике неправильне виправлення, яке легко схвалити.

Чесний висновок такий: Ponytail — це ретельно написаний prompt, добре поширений і доповнений числами. Для нього не потрібен plugin. Перевага проєкту в тому, що хтось правильно склав цей список, перевірив його на реальному репозиторії та опублікував метод разом із результатом.

FAQ

Чи працює Ponytail з агентами, відмінними від Claude Code?

Так. Ponytail постачається як skill для хостів, які завантажують skills. До них належать Claude Code, Codex, OpenCode, Gemini та кілька інших, перелічених у README. Редактори, які читають файли правил, але не завантажують skills, зокрема Cursor, Windsurf, Cline і Copilot, використовують ruleset із постійним застосуванням із відповідного каталогу rules і не отримують slash commands. Текст в обох випадках однаковий. Реальна відмінність полягає в тому, чи зберігає ваш хост цей текст у контексті під час кожного ходу, чи лише після активації skill.

Чи пропустить lazy agent тести, валідацію або перевірки безпеки?

Ні. У ruleset це прямо зазначено. У списку того, до чого не можна ставитися недбало, названо валідацію вхідних даних на межах довіри, обробку помилок для запобігання втраті даних, безпеку та доступність. Також ruleset вимагає одну невелику виконувану перевірку для кожної частини нетривіальної логіки. Правило прибирає вигадану структуру: абстракції, яких ніхто не просив, і залежності, які нікому не потрібні. Якщо після встановлення Ponytail агент починає пропускати тести, причина полягає в іншій інструкції у вашій конфігурації, яка має вищий пріоритет. Прочитайте файл, який агент завантажує останнім.

Чи можна довіряти опублікованим показникам швидкості та вартості?

Це власні вимірювання проєкту, опубліковані разом із методикою. Їх слід сприймати саме так. Показники одиночного запуску за June 2026 порівнювалися з базовою моделлю без додаткових обмежень, яка доповнювала відповідь поясненнями та варіантами. Сам README на той час називав таку базу слабкою. Поточні agentic-показники отримано в headless-сесіях Claude Code на Opus 5.5: 39 завдань, по п’ять запусків кожного, з яких 12 були feature ticket в одному репозиторії FastAPI і React. Це достовірні показники для такого налаштування. Вони не є прогнозом для вашої codebase, оскільки власні результати проєкту для окремих завдань показують, що економія зменшується майже до нуля для коду, який і без того був мінімальним.

Чи потрібно щось встановлювати, щоб отримати переваги?

Ні. Ця ladder є текстом, і еквівалентний блок, вставлений у файл інструкцій, який ваш агент уже читає, дає більшу частину ефекту. Plugin надає актуальне формулювання, рівні інтенсивності, команди для перевірки та шлях оновлення. Спочатку вставити скопійований блок — це відповідь rung 1 на питання, чи потрібне встановлення взагалі.

Як не допустити, щоб unattended agent надмірно розбудовував проєкт уночі?

Розмістіть правило у файлі інструкцій із постійним застосуванням, а не в повідомленні чату. Тоді воно діятиме на turn 200 тривалого запуску, а не лише на turn 3. Окремо обмежте можливу шкоду: надайте агенту checkout, який можна зіпсувати, замість єдиної копії, і вимагайте перевірки diff людиною перед будь-яким merge. Правило мінімального diff зменшує обсяг коду, який потрібно прочитати. Воно не визначає, що саме потрапить у результат, і не повинно цього робити.

Чи була ця стаття корисною?