Когда автор этого текста начинал карьеру разработчика, один из старших коллег как-то заметил, что закон Мура применим и к софту. Тогда это не воспринималось буквально: постоянные разговоры о том, как решаются те или иные проблемы — жалобы на J2EE и медлительность Netbeans, ворчание про табличную вёрстку и вечные полные перезагрузки страниц — казались просто рутиной. На самом деле это и было движущей силой прогресса, только в ежедневном, малозаметном виде.
Последние восемнадцать месяцев стали особым периодом непрерывных изменений. Автодополнение кода уступило место agentic coding, а agentic coding — управлению агентами через harness («обвязку»). Первоначальное восхищение ростом продуктивности сменилось спокойным вживанием в новые правила игры — и попытками выжать из них максимум.
Новые истины
Проекты одного разработчика теперь могут достигать качества и стабильности продуктов больших команд. Можно и нужно строить кастомные приложения, не переживая за онбординг опытных инженеров: если человек досконально знает свой стек, он быстро разберётся, как включиться в работу. Но главный вывод другой — harness и есть то самое ключевое звено, точка, где ожидания разработчика встречаются с возможностями LLM.
Сейчас рабочий процесс держится на двух подписках (Cursor, Claude), которые при необходимости дополняются Pi. Все три инструмента используют общие skills и AGENTS.md. Несмотря на то что задействованы три разных TUI, опыт работы получается единым. Это фактически коммодитизировало модели: ни в Claude, ни в Cursor нет какого-то особого «секретного соуса», без которого невозможна продуктивная работа. Переход с Cursor на Codex в конце месяца не вызывает никакого беспокойства.
Ценовое преимущество
В эпоху коммодитизации1 хорошие результаты можно получать от множества доступных моделей, но с момента релиза основной рабочей лошадкой стала deepseek-v4-flash-0731. К бюджету Anthropic API и модели Fable приходится обращаться довольно редко.
Deepseek справляется с большинством задач по поддержке и рутинным доработкам. Frontier-модели подключаются, когда речь идёт о серьёзной фиче или крупном рефакторинге с множеством движущихся частей. Недавно была изучена техника prewalk2 от Can Bölük, при которой frontier-модель используется на этапе планирования и первой задачи, а затем передаёт эстафету, когда паттерн уже задан. Эта техника была объединена с разделением planner/worker/critic из статьи Building an Advanced Agentic Harness3 — единый промпт, который одновременно планирует, выполняет и критикует себя, путается в собственных целях, поэтому каждая роль изолируется отдельно. Обе идеи оформлены в отдельный skill с вспомогательным расширением для Pi, которое может подключиться на любом этапе работы.
Исследование приводит к плану, который формализуется в явный DAG (направленный ациклический граф) списка задач. Затем подключается worker, реализующий узлы графа по одному. После завершения в дело вступает critic, упрощающий и подвергающий сомнению сделанное. Часто на этом этапе возникает достаточно возражений, чтобы вернуться к фазе worker. Но когда результат устраивает, critic уступает место promoter — напоминанию, что работа не закончена, пока о ней не рассказано другим.
Этап promoter был добавлен, чтобы закрыть слабое место — привычку сдать работу и сразу двигаться дальше, забывая рассказать о сделанном. На этой стадии нужна небольшая помощь от Fable: продвижение — тонкая материя, которую легко испортить, а критику здесь никто не рад, поэтому пропуск через frontier-модель придаёт словам больше веса.
В итоге использование Fable сократилось даже в самых интенсивных сценариях на 75%. Ощущение вполне здоровое — что-то вроде «AI soak». Клиентские задачи и собственные проекты продвигаются на двух подписках по двадцать долларов, с переключением между Pi для Deepseek и подключением Fable там, где это действительно нужно.
Связь продукта и harness
Продукт автора4 — приложение-камера, которое превращает снимок в векторную графику, по одному кадру за раз. Оно нравится именно за простоту: разрешение снижается, изображение упрощается до слоёв тона и форм. Контекст сохраняется, детали убираются — так, чтобы их можно было дорисовать самостоятельно. Больше приложение ничего не делает: результат распечатывается и дорисовывается вручную, либо импортируется в Procreate для работы со слоями.
Эта функциональность стала доступна harness через poster-driver5. Открыв сайт в headless Chrome, можно управлять живым приложением и получать постеры из любой картинки или разобранного на кадры видео. Написание скриптов для приложения становится не сложнее, чем загрузка веб-страницы.
Сложный сценарий использования, для которого раньше существовали только неуклюжие обходные решения, теперь доступен и приятен в работе — и у этой функции ещё много пространства для развития.
# run from harness root
npm run make:animation artifacts/my-movie.mp4
LLM помогла разобраться с этим и написала скрипт, который теперь хранится в harness — его можно запускать сколько угодно раз, не тратя токены. Продукт стал мощнее именно потому, что harness может до него «дотянуться». Есть поддержка filesystem API: после включения этой функции в Brave происходит синхронизация заметок с рабочей директорией — вплоть до собственных «печальных» текстов песен, которые потом можно спеть в одиночестве в своей комнате. Больно, но приятно. Ещё одно творческое направление — работа над окружением в Blender, воссоздающим родной район в 3D с наложенными сверху постерами: сцена, сторибординг и куда больше возможностей, чем может дать веб-версия.
Приложение теперь ощущается полноценно раскрытым — так, как это было невозможно ещё год назад. Творческие люди по-прежнему могут пользоваться неAI-инструментом в AI-манере, оставляя себе самую увлекательную часть творческого процесса.
Разбор harness по частям
Рабочий день проходит внутри этого harness6. Конфиг nvim смонтирован в рабочую директорию, и LLM видит, какой файл открыт, может редактировать его и — поскольку навыки vim пока далеки от идеальных — помогать с правильными движениями. Harness как «кондуктор» (jig) — удобная метафора: LLM редактирует конфиг вместе с пользователем, позволяя оставаться сосредоточенным на работе и одновременно дисциплинированно осваивать команды vim.
Harness самодостаточен и поддерживает больше, чем просто домашнюю директорию (sandboxing, веб-интерфейс, File System Access API, Docker, исполняемый файл Deno и так далее).
Эти концепции пока формируются, поэтому npm start, cursor-agent, claude используются как TUI-обёртки, чтобы удерживать понятие harness отдельным и ясным. Все TUI работают через общий harness.
Возможность аудита важна настолько, что TUI-инструментам предписано держать всё внутри директории artifacts/. Cursor использует .gitignore для игнорирования файлов — решение, которое выглядит разумным, поэтому корень без git обязателен. Есть отдельный skill, синхронизирующий harness с репозиторием в рабочей директории. Skills, extensions и AGENTS.md — полноправные элементы корня, готовые к изменению и развитию. TUI обязаны подчиняться этим правилам.
# auto-load the nearest AGENTS.md into claude code
claude() {
local dir="$PWD"
while [[ "$dir" != "/" ]]; do
if [[ -f "$dir/AGENTS.md" ]]; then
command claude --append-system-prompt-file "$dir/AGENTS.md" "$@"
return
fi
dir="${dir:h}"
done
command claude "$@"
}
brayness/
├── AGENTS.md
├── AGENTS.local.md
├── bin/
├── prompts/
├── plans/
├── skills/
├── extensions/
├── artifacts/
└── work/
├── realness/
├── blog/
├── brayness/
├── nvim/
└── ...
На старте skills получались слишком предписывающими; со временем пришло понимание, что нужно снижать степень детализации — есть черта, за которой начинается «объяснение на пальцах» модели вместо экономии токенов. По мере того как harness стабилизируется, потребуется более эмпирический подход к оценке эффекта от изменений.
Ниже — набор skills, распределённых по этапам планирования.
explore
- nvim-buffers
- flexible-visual-system
- vault
- interview-prep
- vuetify-to-semantic
planner
- planning
- memory
- previous-work
- project-tooling
- brayness-sync
worker
- realness-design
- typography
- user-interface
- rust-best-practices
- agent-browser
- logo-finder
critic
- critic
- test-coverage
- simplify
- vue-inspect
promoter
- hyperframes
- readable
- zoom-to-ableton
- motion-systems
С таким устойчивым фундаментом больше не возникает ощущения потерянности в cursor-agent или Claude. Появилась осознанная власть над рабочим процессом и возможность выстраивать инженерные решения по своему усмотрению. То, что удаётся выяснить с помощью Pi, часто перекочёвывает обратно в опыт работы с Claude и Cursor. С Pi есть уверенность, что через bash можно решить любую проблему: harness запускает скрипты, скрипты координируются с LLM.
За последние три месяца всё чаще тянет уйти из редактора в терминал. Здесь совпало несколько причин: доверие к коду, отданному агентам, переход на Ghostty и борьба с угасанием навыков через nvim. Обычно такая перестройка привычек резко бьёт по продуктивности, но клиентские задачи и личные проекты сейчас на самом высоком уровне и темпе за всё время. Такие мелочи, как выстраивание контекста вокруг длительных agentic-задач через сплиты терминала, помогли по-настоящему освоиться в новом опыте работы с AI.
Всё это стало по-настоящему актуальным, когда государство запретило Fable и начало демонстрировать привилегированное отношение к отрасли. Автор — а вместе с ним, судя по всему, ещё сотня тысяч разработчиков — внезапно почувствовал необходимость диверсифицировать доступ к моделям. Так что ради свободы выбора коллективно решили попробовать китайские модели. Pi превратился из инструмента, с которым просто игралcя, в самую важную часть всей рабочей обвязки.
- https://www.emergingtrajectories.com/lh/commodification-and-circularity/
- https://stencil.so/blog/prewalk
- https://data4sci.com/blog/building-an-advanced-agentic-harness
- https://realness.online/about
- https://realness.online/poster-driver
- https://github.com/scott-fryxell/brayness
- https://news.ycombinator.com/item?id=49452346