Більшість команд зациклюються на виборі моделі. Але інженерія харнеса розвертає фокус інакше. У LangChain Terminal-Bench просте переставлення харнеса — без зміни моделі — підняло кодингового агента з приблизно 30-го місця до топ-5. Це змінює саме формулювання задачі. Якщо харнес визначає якість, то спосіб запуску циклу — це вже архітектура, а не деталізація деплою. Курс Пола Юстціна Building a Coding Agent From Scratch показує агент Decode з трьома режимами, кожен під інший профіль затримки.
Чи справді харнес важливіший за модель?
Так. Експеримент Terminal-Bench продемонстрував, що лише заміна харнеса, при незмінній моделі, здатна різко підняти рівень агента. Перестає бути головним питання «яку модель обрати». Важливішим стає «як саме ми керуємо циклом агента». Це практичний висновок, а не теорія.
Звідси новий підхід до дизайну. Ви дивитеся не на параметри моделі, а на механіку кроків: де й коли модель викликається, як обмежуються інструменти, як зберігається і стискається контекст. Саме тут народжується стабільність і продуктивність. Модель стає компонентом, тоді як харнес — системою координат.
У Decode цей принцип винесено в основу. Проєкт відокремлює режими виконання, тому що різні взаємодії диктують різні вимоги до затримки. Онлайн-діалог не терпить пауз, офлайн-партії потребують пропускної здатності, а асинхронний сценарій тримає баланс між ними.
Це не зменшує ролі моделі. Воно підкреслює, що той самий LLM у різних харнесах — це різні агенти за поведінкою і якістю. Тому архітектура циклу — ваш справжній важіль впливу.
Один безголовий осердя, три форми
Центр системи — безголовий харнес без власного інтерфейсу. Усередині крутиться типовий агентний цикл: LLM обирає дію, інструмент виконує, спостереження повертається в контекст. Усе читає і пише лише у вікно контексту. Інтерфейси підключаються зверху і не змінюють ядро.
Сам агент маленький. У Decode це приблизно 20 рядків Pydantic AI, що складає модель, інструменти та тип виходу. У злитому коді Claude Code базовий цикл займає близько 150 рядків. Усе інше — пам’ять, навички, пісочниці, дозволи, LSP-фідбек, ущільнення — це шар харнеса. Він дає дисципліну, а не «магію».
Така композиція дозволяє формувати три різні «форми» без розгалуження логіки ядра. Ви вмикаєте лише потрібні інтерфейсні адаптери, черги і рантайми. Тіло циклу залишається тим самим, що полегшує відладку і повторюваність результатів.
Коли інтерфейси відділені від ядра, стає простіше гарантувати інваріанти: якими саме подіями можна керувати, коли вводити підказку користувача, де переривати обчислення без пошкодження історії. Це критично для коректності.
Режим 1: Інтерактивний, онлайн — як безпечно кермувати
Інтерактивний режим під’єднує термінал до живої сесії в пам’яті, у тому ж процесі. Події стрімляться назад по асинхронних генераторах по мірі приходу токенів. Головна проблема — кермування під час польоту: ввести текст у момент виклику інструмента — значить зіпсувати хід. Рішення Decode — черга керування і пріоритетна «брама» на межах безпечного введення.
Потік введення буфериться і впорскується лише в безпечні точки. Цикл відкриває дві такі межі: MODEL_REQUEST — перед наступним викликом моделі, та WOULD_STOP — коли хід мав би завершитися. Ви не «ламаєте» оберт, ви коректно вклинюєтесь у наступний.
Три режими введення відповідають цим межам. Звичайний Enter кермує всередині ходу. Alt+Enter ставить фоллоу-ап у чергу до завершення ходу. Esc ініціює кооперативне скасування на наступній межі, очищаючи обидві черги, щоб історія лишалася цілісною. Користувач керує темпом, не жертвуючи цілісністю контексту.
Людина читає кожен токен, тому затримка — лімітуючий фактор. Саме тому цей режим хоче низьколатентні хостед-API. Плата йде «за токен», зате відгук — миттєвий, як і вимагає живий діалог.
Режими 2 і 3: Віддалений офлайн і асинхронний онлайн
Віддалений режим лишає харнес безголовим і запускає його на сервері через агентний рантайм. Decode використовує Kitaru, агентний рантайм ZenML, задеплоєний у GCP, а самі агенти виконуються на Modal. Ніхто не дивиться у стрім, тому задачі розносяться на N паралельних харнесів, і кожен випускає свій PR.
Рантайм фіксує прогрес крок за кроком. Якщо пісочниця падає посеред задачі, вона відновлюється з останнього записаного кроку, а не починає з нуля. Якщо запуск зупиняється для людського вводу, він «замерзає» і не споживає обчислення в очікуванні. Це економить витрати і прибирає крихкість.
Інструменти виконуються всередині Modal Sandboxes віддалено, локально — у Docker. Ключова метрика тут — пропускна здатність на долар, а не час до першого токена. Ви перетворюєте «чуйність» у «виробіток», що краще відповідає партіям робіт.
Асинхронний онлайн — проміжна форма. Жива сесія віддає роботу в джоб-чергу і відразу повертає контроль. Фонові воркфлови розпаралелюють виклики LLM і публікують результат пізніше. Клієнт не тримає з’єднання, а запуск переживає ініціатора. Це патерн для Slack-тригерів і фонових PR-рев’ю. Білінг ближчий до батчу, ніж до чату.
Чому провайдер змінюється з режимом: арифметика вартості і ємності
Модель вартості слідує за вимогою до затримки, і різниця величезна. Візьмемо 1000 документів по 30 000 вхідних токенів кожен і приблизно 500 вихідних токенів на документ. За фронтирними API-ставками $3 за мільйон вхідних і $15 за мільйон вихідних арифметика підводить приблизно до $97. Промпт-кеш не рятує, бо кожен документ має інший префікс.
Пакетована обробка на серверлесс GPU із швидкістю близько 3000 токенів за секунду вкладається менш ніж у три години GPU-часу — приблизно $13. Зворотний випадок такий самий різкий. Базова тестова модель Decode, Qwen3.6 35B, працює на одному H200. Публічний прайсинг Modal вказує H200 SXM по $0.001261 за секунду, тобто близько $4.54 за годину. Залиште інтерактивного агента без дії на ніч, чекаючи на «y», і десять порожніх годин дадуть приблизно $45 до рахунку.
Ось весь аргумент. Інтерактив платить за токен, бо людина чекає. Офлайн і асинхронний платять за GPU-годину, бо мета — пропускна здатність, а ворог — простій.
Є друга вісь: серверлесс проти резервованої ємності. Аналіз цін Modal зводить це до одного порівняння: резервації беруть пікову ставку за весь контракт, серверлесс слідує кривій попиту. Коли відношення піку до середнього перевищує знижку резервації, серверлесс дешевший. Modal повідомляє типові знижки 2–5× проти піко-середніх 5–10× для інференсу, тренування і агентної розробки. Опитування індустрії, на які воно посилається, ставлять утилізацію резервацій нижче 30%, часто нижче 10%.
Основні висновки: харнес перемагає модель; інтерактивний режим кермує через чергу і межі MODEL_REQUEST/WOULD_STOP; віддалений і асинхронний режими прив’язані до пропускної здатності, тому білінг за GPU-годину вигідніший на обсягах; 1000 документів коштують близько $97 на фронтирних API проти приблизно $13 пакетованого GPU-часу; серверлесс перемагає, коли піко-середній попит перевищує знижку резервації, зазвичай 5–10× проти 2–5×.
На основі матеріалу the source material.