Один вопрос перед каждой правкой: а писать-то обязательно? - grafsoul
AI Технологии8 июля 2026 г. · 7 мин
Один вопрос перед каждой правкой: а писать-то обязательно?
Лестница из семи ступеней перед каждой правкой: не писать, переиспользовать, взять из платформы. Замеры честные, включая случай, где проект сам себе проигрывает.
Попросите агента добавить выбор даты. Хороший шанс получить установленную библиотеку, обёртку над ней, отдельный файл стилей, слой абстракции и предложение обсудить работу с часовыми поясами.
А в браузере уже двадцать лет есть вот это:
Ponytail существует ровно против такой услужливости. Это не методология и не жизненный цикл проекта - это один вопрос, который задаётся перед каждым изменением: можно ли решить проще, а лучше вообще не писать.
Сто три тысячи звёзд у проекта с шестью процедурами. Разбирать его интересно как раз этим контрастом: узкая идея, широкое признание.
Лестница из семи ступеней
Вся механика умещается в один список. Агент останавливается на первой ступени, которая держит.
Две оговорки в первоисточнике важнее самой лестницы.
Первая: лестница запускается после понимания задачи, а не вместо него. Агент обязан прочитать затрагиваемый код и проследить реальный поток данных, и только потом выбирать ступень. Формулировка в README точная: ленивый к решению, но никогда к чтению.
Вторая: ленивый не значит небрежный. Проверки на границах доверия, обработка потери данных, безопасность и доступность не подлежат сокращению никогда. Правило звучит не "меньше токенов", а "писать только то, что задача требует".
Почему это именно про языковые модели
Проблема не в лени агента, а в обратном.
Модель обучена выдавать содержательный ответ. Ответ "делать ничего не нужно" статистически менее вероятен, чем новая функция, новый вспомогательный модуль или новый файл. Плюс в обучающих данных огромное количество учебного кода, где полная абстракция строится ради демонстрации даже там, где задача тривиальна.
Ponytail ставит на этом пути искусственный тормоз: прежде чем генерировать, агент должен показать, что существующие уровни системы задачу не решают.
Плюс первый: измеримый и честно измеренный эффект
У проекта есть замеры, и интереснее самих цифр то, как они получены.
Текущая методика - настоящие сессии агента на живом открытом репозитории (FastAPI и React), двенадцать задач на функциональность, один и тот же агент с процедурой и без неё. Оценивается то, что осталось в дифе. Прогон сделан на Haiku 4.5 по четыре повтора на задачу - это стоит держать в голове, читая проценты.
Результат: в среднем на 54% меньше добавленного кода, около 20% дешевле, около 27% быстрее.
Но полезнее среднего - разброс, и проект его не прячет. Там, где агент склонен к явной перестройке, экономия доходит до 94% - тот самый выбор даты. Там, где решение и так минимально, выигрыш близок к нулю.
Отдельно замерена безопасность: процедура сохраняет все защитные проверки, тогда как простая просьба "пиши однострочники" одну из них теряет. Это существенное различие - оно отделяет дисциплину простоты от сокращения ради сокращения.
Плюс второй: проект публично исправил собственные цифры
Здесь стоит остановиться, потому что такое встречается редко.
Ранняя версия замеров давала 80-94% сокращения кода и подавалась как общая цифра. В трекере проекта указали на изъян методики: базовая линия без процедуры - это одиночная генерация, где модель раздувает ответ пояснениями и вариантами, а значит разрыв частично объясняется разговорным характером ответа, а не лишним кодом.
Проект согласился, переделал замер на агентский и опубликовал новые числа как основные. А старые оставил под сворачиваемым блоком с пометкой: против честной базовой линии 80-94% - это потолок на отдельной задаче, а не среднее.
Ссылка на ту самую задачу в трекере стоит прямо в README. Признать завышенную цифру и оставить историю на виду - лучший аргумент в пользу остальных чисел проекта.
Плюс третий: опубликован случай, где он проигрывает
И совсем редкое. В README прямо сказано: снижение стоимости и задержки - побочный эффект на моделях, которые идут по лестнице. Модель, которая тратит токены размышления на обдумывание ступеней, может дать обратный результат - и названа конкретная модель, на которой так и происходит: GPT-5.5.
То есть проект сам публикует условие, при котором его установка делает работу дороже.
Плюс четвёртый: узость как достоинство
Здесь нет жизненного цикла, нет управления памятью, нет фаз проекта. Шесть процедур и шесть команд: сама процедура, ревью на лишнее, аудит всего репозитория, разбор накопленного долга, показ эффекта и справка.
Из-за узости Ponytail не конкурирует за одни и те же события с большими наборами. Он занимает один момент - перед написанием кода - и в нём делает одну вещь.
Есть и уровни строгости: lite, full, ultra и off. Умолчание - full. Задать можно переменной окружения или в файле настроек, а переключить командой прямо в сессии.
Цена первая: сегодняшний минимум не всегда минимум завтра
Главное возражение к YAGNI как к правилу.
Пятнадцать строк абстракции сегодня могут сэкономить сотни через три месяца - если вы уже знаете, что вариантов поведения будет несколько. Лестница на это отвечает "не пиши", и формально она права ровно до того момента, когда права перестаёт быть.
Поэтому брать это стоит как сильный перекос против лишнего кода, а не как закон. Хороший инженер не просто пишет меньше - он различает, где сложность настоящая и её нельзя убрать, можно только правильно разместить. Такое различение лестница не делает и не претендует.
Цена вторая: зависимость от Node в хуках
Плагины для Claude Code и Codex используют два небольших хука на Node. Если node не оказался в PATH неинтерактивной оболочки - а у пользователей nvm и Nix это обычное дело, - процедуры продолжат работать, но постоянная автоматическая активация просто не включится.
Проект сделал это аккуратно: не падает с ошибкой на каждом запросе, а тихо не активируется. Но результат тот же - вы думаете, что защита работает, а её нет. Проверять стоит сразу после установки.
Цена третья: это перекос, а не гарантия
Как и любая инструкция, лестница держится на том, что агент по ней идёт. Ничто механически не мешает ему пропустить ступень и сразу написать свою реализацию.
Уровни строгости и постоянная инъекция правил на каждый ход снижают вероятность, но не устраняют её. Команда ревью нужна именно поэтому: пройтись по уже написанному отдельным проходом и посмотреть, что можно выкинуть.
Кому подходит
Фронтендерам. Здесь польза максимальная: в браузере огромное количество возможностей, которые агент с удовольствием заменяет пакетами. Выбор даты - лишь самый наглядный пример.
Тем, кто правит существующий код. В живом репозитории переиспользование почти всегда правильнее новой абстракции, а агент по умолчанию склонен к обратному.
Небольшим задачам. Защищает от превращения простой задачи в мини-фреймворк - тот случай, когда правка на два часа превращается в неделю.
Для прохода по уже сгенерированному. Ревью и аудит полезны и постфактум, отдельным проходом на упрощение, даже если процедура не стояла во время написания.
Кому не подходит
Проектам, где сложность действительно нужна. Если вы строите слой, у которого заранее известны несколько вариантов поведения, лестница будет мешать - её ответ на любую абстракцию отрицательный по умолчанию.
Тем, кто ждёт архитектурного суждения. Ponytail отвечает на вопрос "нужно ли это писать", а не "как это правильно устроить". Второй вопрос остаётся человеку.
Моделям, которые долго думают. Проект сам предупреждает: на модели, тратящей токены размышления на обдумывание ступеней, экономия может обернуться удорожанием.
Итог
Ponytail не добавляет агенту знаний. Модель и так знает про <input type="date"> - она просто не выбирает его, потому что обучена выдавать содержательный ответ, а не пустой.
Он меняет порядок предпочтений: переиспользование и возможности платформы поднимаются выше новой генерации. Это узко, измеримо и хорошо ложится поверх чего угодно.
А главное соображение в его пользу такое. Написать пятьсот лишних строк стало почти бесплатно. Дорогим стало не написание кода, а его дальнейшее существование - чтение, поддержка, отладка, объяснение новому человеку. Дешёвая генерация сделала простоту не эстетикой, а экономикой.
Источники
Материал проверен 14 августа 2026 года по репозиторию проекта. Состав посчитан в свежем клоне: шесть процедур и шесть команд. Метаданные - около 103 тысяч звёзд и 5.7 тысячи форков, лицензия MIT. Цифры замеров, методика, история исправления и оговорка про модели с длинным размышлением приведены так, как они записаны в README. Дополнена 15 августа 2026 года по свежему клону: лестница, все цифры замеров и оговорки пересверены и подтвердились дословно; добавлены модель и число повторов в замере, а также имя модели, на которой процедура проигрывает.
1. Это вообще должно существовать? → нет: не делать (YAGNI)
2. Уже есть в этом коде? → переиспользовать, не переписывать
3. Есть в стандартной библиотеке? → взять оттуда
4. Есть в самой платформе? → взять оттуда
5. Есть в уже поставленной зависимости? → взять оттуда
6. Решается одной строкой? → одна строка
7. И только теперь → минимум, который работает