Когда автор этого текста начинал карьеру разработчика, один из старших коллег как-то заметил, что закон Мура применим и к софту. Тогда это не воспринималось буквально: постоянные разговоры о том, как решаются те или иные проблемы — жалобы на 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-модель придаёт словам больше веса.

Пологая дуга из пяти этапов — explore, planner, worker, critic, promoter. Внутри всей дуги проходит светлая полоса высотой до самого высокого пика: это коммодити-модель, которая несёт на себе основную часть работы. Два красных пика поднимаются в области worker, и один, значительно более низкий, — на стыке critic и promoter.

В итоге использование 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я, в самую важную часть всей рабочей обвязки.

комментарии7

  1. https://www.emergingtrajectories.com/lh/commodification-and-circularity/
  2. https://stencil.so/blog/prewalk
  3. https://data4sci.com/blog/building-an-advanced-agentic-harness
  4. https://realness.online/about
  5. https://realness.online/poster-driver
  6. https://github.com/scott-fryxell/brayness
  7. https://news.ycombinator.com/item?id=49452346