Більшість людей намагаються виправити AI-агентів не на тому рівні.
Коли агент помиляється, вони переписують промпт. Коли він помиляється знову — додають більше інструкцій, змінюють модель, розширюють контекстне вікно або підключають ще один інструмент.
А потім ті самі проблеми повертаються.
Агент забуває важливе рішення. Використовує не той інструмент. Губить нитку того, що сталося три кроки тому. Заявляє, що завдання виконано, навіть не перевіривши результат. Повторює одну й ту саму невдалу дію, поки не вичерпається бюджет.
Проблема не завжди в моделі.
Проблема — у середовищі навколо неї.
Це середовище і є harness (обв'язка).
Harness Engineering — це практика побудови системи навколо моделі, яка визначає, що вона може бачити, що робити, що пам'ятати, що вважається успіхом і що відбувається, коли щось іде не так.
Кращий промпт може покращити одну відповідь.
Кращий harness покращує кожен запуск.
Підписуйтесь на мій Substack, щоб отримувати більше практичних розборів AI-агентів, автоматизації та продакшн-систем:
1. Модель — це не агент
Модель може міркувати, генерувати, порівнювати й обирати.
Але це не робить її надійним агентом.
Справжньому агенту також потрібно знаходити правильний контекст, використовувати інструменти, зберігати стан, дотримуватися дозволів, перевіряти власну роботу та відновлюватися, коли середовище поводиться не так, як очікувалося.
Модель — це лише рушій для міркувань.
Harness — це все те, що перетворює ці міркування на реальне виконання.
1ЗАПИТ КОРИСТУВАЧА2 |3 v4+-----------------------------+5| HARNESS |6| |7| контракт контекст |8| інструменти стан |9| політика верифікація |10| трейси відновлення |11+-----------------------------+12 |13 v14 МОДЕЛЬ15 |16 v17РЕАЛЬНЕ СЕРЕДОВИЩЕ
Помістіть ту саму модель у чат-вікно — і вона відповідатиме на запитання.

Помістіть її в репозиторій із доступом до термінала, тестами, браузерними інструментами, пам'яттю проєкту, контрольованими дозволами та циклом ревью — і вона зможе виконувати реальну роботу.
Модель не змінилася.
Змінився harness.
2. Перетворюйте кожен запит на контракт
Природна мова гнучка.
Автономне виконання — ні.
Запит на кшталт:
Покращ онбординг.
цілком нормальний, якщо людина сидить поруч із моделлю.
Але як продакшн-інструкція він жахливий.
Перш ніж агент почне діяти, перетворіть запит на обмежений контракт завдання.

1objective: зменшити відсів на етапі онбордингу23inputs:4 - опис продукту5 - дані аналітики6 - репозиторій78constraints:9 - зберегти автентифікацію10 - не змінювати схему бази даних11 - зберегти поточну поведінку на мобільних пристроях1213deliverable:14 - пул-реквест, готовий до ревью1516done_when:17 - тести пройдено18 - подія аналітики спрацьовує коректно19 - десктопний флоу пройшов ревью20 - мобільний флоу пройшов ревью2122approval_required:23 - деплой у продакшн
Найважливіша частина — done_when.
Без неї агент може розв'язати трохи простішу версію задачі й упевнено заявити, що все готово.
З нею завершення стає вимірюваним.
Агент не повинен питати:
Що мені робити далі?
Він має питати:
Яка дія наблизить поточне середовище до результату, прописаного в контракті?
Це значно сильніший цикл.
3. Дайте агенту карту, а не гігантське контекстне вікно
Типова реакція на помилки агента — дати моделі більше контексту.
Більше документації.
Більше історії діалогу.
Більше файлів.
Більше виводу від інструментів.
Зрештою агент отримує все, але розуміє менше.
Контекст — це не сховище.
Це бюджет уваги.

Замість того, щоб звалювати весь проєкт у кожен запуск, дайте агенту невелику карту, де шукати корисну інформацію.
1КАРТА ПРОЄКТУ23правила продукту -> docs/product/4архітектура -> docs/architecture.md5фронтенд -> apps/web/6бекенд -> services/api/7тести -> tests/8команди -> docs/commands.md9безпека -> docs/security.md
А деталізуйте лише тоді, коли це справді потрібно.
1ЗАВДАННЯ2 |3 v4КАРТА ПРОЄКТУ5 |6 v7РЕЛЕВАНТНА СИСТЕМА8 |9 v10КОНКРЕТНІ ФАЙЛИ11 |12 v13ЛОКАЛЬНІ ІНСТРУКЦІЇ
У вихідному матеріалі це називається прогресивним розкриттям: harness має завантажувати більше інформації тому, що цього вимагає завдання, а не просто тому, що ця інформація існує.
Мета — не максимальний контекст.
Мета — максимальний корисний сигнал.
4. Поставте шлюз між моделлю та її інструментами
Модель із двадцятьма інструментами не стає автоматично у двадцять разів здібнішою.
Вона просто отримує ще двадцять способів помилитися.
Кожен інструмент повинен мати контракт.
1ІНСТРУМЕНТ: edit_file23ВХІДНІ ДАНІ4path5patch67ПЕРЕДУМОВИ8path існує9path знаходиться всередині робочої області1011УСПІХ12patch застосовано13diff повернуто1415ПОМИЛКА16структурована помилка17без часткового перезапису1819РИЗИК20оборотний
Тоді шлях виконання виглядатиме так:
1МОДЕЛЬ ПРОПОНУЄ2 |3 v4ШЛЮЗ ПЕРЕВІРЯЄ5 |6 v7ПОЛІТИКА АВТОРИЗУЄ8 |9 v10ІНСТРУМЕНТ ВИКОНУЄ11 |12 v13HARNESS ФІКСУЄ РЕЗУЛЬТАТ
Модель вирішує, яку дію вона хоче виконати.
Harness вирішує, чи є ця дія валідною, дозволеною та безпечною.

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

1{2 "task_id": "feature_042",3 "status": "verifying",4 "current_step": "mobile_check",56 "completed": [7 "implementation",8 "unit_tests",9 "desktop_check"10 ],1112 "decisions": [13 "reuse existing export endpoint",14 "preserve current date format"15 ],1617 "artifacts": [18 "export.csv",19 "desktop-after.png"20 ],2122 "open_risks": [23 "mobile toolbar may overflow"24 ],2526 "next_action": "render mobile viewport"27}
Корисна система розділяє пам'ять на чотири категорії:
1ФАКТИ2стабільні знання34РІШЕННЯ5що було обрано і чому67СТАН8на якому етапі перебуває поточний запуск910УРОКИ11помилки, які мають вплинути на майбутні запуски
Наступна сесія агента має успадковувати стан роботи, а не стислий переказ попередньої розмови.
6. Зробіть докази умовою завершення
Те, що агент сказав «готово», не означає, що роботу виконано.

Це просто ще один вивід моделі.
Harness потребує спостережуваних доказів.
1ТВЕРДЖЕННЯ ДОКАЗ23"баг виправлено" тест, що падав, тепер проходить45"сторінка працює" браузерний флоу завершено67"дані коректні" значення збігаються з джерелом89"міграція безпечна" dry run + rollback пройшли успішно1011"завдання виконано" всі acceptance-перевірки пройдено
Спочатку використовуйте детерміновані перевірки.
1синтаксис2 |3 v4типи5 |6 v7точкові тести8 |9 v10інтеграційні тести11 |12 v13візуальне / семантичне ревью14 |15 v16схвалення людиною
Не просіть іншу модель відповідати на те, що може довести компілятор, тест, схема або запит до бази даних.
Використовуйте моделі для суджень.
Використовуйте детерміновані системи для фактів.
Модель створює артефакт.
Середовище створює докази щодо цього артефакту.
Harness вирішує, чи достатньо цих доказів.
7. Відокремте творця від перевіряльника
У самостійному ревью є ще одна проблема.
Агент, який припустився помилки, часто переносить ті самі хибні припущення і в процес перевірки.

Надійніша архітектура розділяє виконавця та перевіряльника.
1ТВОРЕЦЬ2 |3 v4створює кандидат5 |6 v7ПЕРЕВІРЯЛЬНИК8 |9 +-- звіряє з контрактом10 +-- шукає пропущені кейси11 +-- тестує необґрунтовані твердження12 +-- намагається зламати результат13 |14 +------ УСПІХ ------> ПРИЙНЯТИ15 |16 +------ ПОМИЛКА -----> ПОВЕРНУТИ ДОКАЗИ
Перевіряльник не повинен питати:
Чи виглядає це добре?
Він має питати:
Що зробило б це неприйнятним?
Це перетворює ревью з підтвердження на спростування.
У вихідному матеріалі прямо рекомендується дати процесу верифікації власні критерії відхилення та достатню незалежність, щоб ставити під сумнів припущення, які призвели до першого результату.
8. Винесіть дозволи за межі моделі
Деякі правила ніколи не мають залежати від того, чи пам'ятає їх модель.
1ніколи не публікуй без схвалення2ніколи не розкривай секрети3ніколи не перевищуй ліміт витрат4ніколи не пиши за межами робочої області5ніколи не кажи, що тести пройдені, якщо вони не запускалися
Це не побажання для промпту.

Це політика.
Проста драбина дозволів:
1НИЗЬКИЙ РИЗИК23читання4пошук5інспекція67-> автоматично89ОБОРОТНІ ДІЇ1011редагування робочої області12запуск тестів13створення чернетки1415-> автоматично + трейс1617ЗОВНІШНІЙ ВПЛИВ1819надсилання20деплой21купівля2223-> потрібне схвалення2425НЕОБОРОТНІ / ЧУТЛИВІ2627видалення даних28ротація ключів29глобальна публікація3031-> жорсткий бар'єр або заборона
Що серйозніші наслідки, то суворіший контроль.
Модель може рекомендувати дію.
Harness її авторизує.
Інструмент виконує.
Автономність — це не відсутність контролю.
Це свобода в межах встановлених рамок.
9. Припиніть сліпо повторювати спроби
Одна з найгірших стратегій відновлення:
Щось пішло не так. Спробуй ще раз.
Якщо нічого не змінюється, система просто платить за те, щоб відтворити ту саму помилку.
Спочатку помилки треба класифікувати.

1ТАЙМАУТ ІНСТРУМЕНТУ2-> повторити з експоненційною затримкою34НЕВАЛІДНІ АРГУМЕНТИ5-> виправити виклик інструменту67ВІДСУТНІЙ КОНТЕКСТ8-> отримати відсутнє джерело910ТЕСТ НЕ ПРОЙДЕНО11-> дослідити причину падіння1213ДОСТУП ЗАБОРОНЕНО14-> запитати схвалення1516СУПЕРЕЧЛИВІ ВИМОГИ17-> ескалювати1819НЕЗМІННА ПОВТОРЮВАНА ПОМИЛКА20-> зупинитися
Корисний цикл агента виглядає так:
1СПОСТЕРІГАТИ2 |3 v4ВИРІШИТИ5 |6 v7ДІЯТИ8 |9 v10ВИМІРЯТИ11 |12 +---- ПРИЙНЯТИ13 |14 +---- ВИПРАВИТИ15 |16 +---- ЕСКАЛЮВАТИ17 |18 +---- ЗУПИНИТИ
Кожен цикл має мати ліміти на кількість спроб, час, витрати та масштаб руйнівних дій.
Надійному агенту потрібно знати, як продовжити роботу.
Але йому також потрібно знати, коли наступна спроба вже не варта зусиль.
10. Перетворюйте повторювані інструкції на інфраструктуру
Припустимо, промпт містить:
Завжди запускай форматер.
Це правило працюватиме краще, якщо форматер запускатиметься автоматично.
Припустимо, інструкції кажуть:
UI-код не може напряму звертатися до бази даних.
Це працюватиме краще як архітектурний тест, який падає, коли правило порушується.
Еволюція виглядає так:
1ПОЯСНЕННЯ2 |3 v4ЧЕКЛІСТ5 |6 v7ШАБЛОН8 |9 v10АВТОМАТИЧНА ПЕРЕВІРКА11 |12 v13ПРИМУСОВА ПОЛІТИКА
Промпт має пояснювати логіку суджень.
Harness має забезпечувати дотримання інваріантів.
Кожна повторювана помилка має просуватися трохи нижче цією драбиною.
Зрештою моделі більше не потрібно запам'ятовувати цей урок.
Середовище пам'ятає його замість неї.
11. Записуйте хід виконання
Ідеальний фінальний артефакт може приховувати жахливий шлях його створення.
Можливо, агент звернувся не до того джерела.
Можливо, проігнорував команду, що завершилася помилкою.
Можливо, двічі виконав зовнішню дію.
Можливо, витратив удесятеро більше запланованого бюджету.
Можливо, отримав правильну відповідь з неправильних причин.
Фіксуйте достатньо інформації, щоб відтворити те, що сталося.
109:14 створено контракт завдання209:15 завантажено architecture.md309:17 відредаговано checkout.ts409:18 точковий тест не пройдено509:21 реалізацію виправлено609:22 точковий тест пройдено709:24 інтеграційний тест пройдено809:25 деплой заблоковано: потрібне схвалення
Корисні трейси включають джерела контексту, виклики інструментів, зміни стану, результати верифікації, причини повторних спроб, рішення про схвалення, вартість та затримки.
Сенс не в тому, щоб збирати логи заради розваги.
Сенс у тому, щоб локалізувати помилку.
Якщо ламається крок 18, ви маєте мати можливість полагодити саме крок 18.
Вам не повинно бути потрібно програвати весь запуск заново.
12. Видавайте квитанцію для кожного запуску
Не змушуйте людину читати транскрипт на сорок повідомлень.
Зведіть результат у коротку квитанцію.
1МЕТА23Виправити подвійне застосування купона.45ЗМІНЕНО67валідація на чекауті8регресійний тест910ПЕРЕВІРЕНО1112lint пройдено13юніт-тести пройдено14інтеграційний тест пройдено1516НЕ ПЕРЕВІРЕНО1718продакшн-провайдер платежів1920РИЗИКИ2122старий мобільний клієнт недоступний2324ПОТРІБНЕ СХВАЛЕННЯ2526деплой на staging
Це не переказ того, що, на думку моделі, відбулося.
Це зведення того, що harness може довести.
Саме ця різниця робить квитанцію корисною для ревью, передачі справ та майбутніх сесій агента.
13. Нехай кожна помилка покращує harness
Більшість команд виправляють невдалий результат.
Кращий підхід — виправити систему, яка допустила цю помилку.
1ВІДСУТНІЙ КОНТЕКСТ2-> покращити карту проєкту34НЕ ТОЙ ІНСТРУМЕНТ5-> покращити маршрутизацію або контракт інструменту67ПОГАНИЙ РЕЗУЛЬТАТ8-> додати валідатор910НЕСКІНЧЕННИЙ ЦИКЛ11-> додати ліміт повторних спроб1213НЕБЕЗПЕЧНА ДІЯ14-> додати бар'єр дозволів1516ВТРАЧЕНЕ РІШЕННЯ17-> зберігати стан1819НЕВІДОМА ПОМИЛКА20-> покращити трасування
Саме тут Harness Engineering починає давати кумулятивний ефект.
Один виправлений результат допомагає одному запуску.
Один виправлений harness покращує кожен наступний запуск.
Найкращі системи з агентами стають надійнішими, бо помилки залишають після себе інфраструктуру.
14. Починайте з найменшого корисного harness
Для старту вам не потрібна величезна платформа оркестрації.
Будуйте пошарово.
1РІВЕНЬ 023промпт4модель56РІВЕНЬ 178контракт завдання9карта проєкту10інструменти1112РІВЕНЬ 21314структурований стан15верифікація16обмежений цикл1718РІВЕНЬ 31920дозволи21трейси22відновлення23людські бар'єри
Для короткого дослідницького завдання може вистачити промпту та одного ревью.
Для шестигодинної задачі з кодом, доступом до файлів, мережі та можливістю деплою потрібно значно більше.
Додавайте складність лише тоді, коли поверхня помилок цього вимагає.
А не тому, що архітектура агентів виглядає круто.
Чекліст Harness Engineering
Перш ніж дати агенту реальну автономію, запитайте себе:
1[ ] Чи визначений успіх до початку виконання?23[ ] Чи може агент знайти потрібний контекст,4 не завантажуючи все підряд?56[ ] Чи має кожен інструмент чітке призначення,7 схему та стан помилки?89[ ] Чи зберігаються важливі рішення10 поза межами діалогу?1112[ ] Чи вимагає завершення доказів?1314[ ] Чи захищені ризиковані дії політиками?1516[ ] Чи має кожен цикл ліміт повторних спроб?1718[ ] Чи може запуск відновитися після переривання?1920[ ] Чи можете ви відтворити кожну важливу дію?2122[ ] Чи покращує помилка якесь правило, інструмент,23 тест, карту або дозвіл?2425[ ] Чи можна відкотити фінальну зміну?
Якщо на кілька питань відповідь «ні», потужніша модель не зробить агента надійним автоматично.
Вона просто зробить помилки швидшими та дорожчими.
Справжня зміна парадигми
Prompt engineering питає:
Що мені сказати моделі?
Context engineering питає:
Що модель має знати саме зараз?
Harness engineering питає:
Яка система дозволить моделі діяти, перевіряти свою роботу, відновлюватися після помилок і працювати безпечно?
1ПРОМПТ2-> інструкція34КОНТЕКСТ5-> робоче поле зору67HARNESS8-> операційне середовище910ЦИКЛ11-> локальна корекція1213ГРАФ14-> координація
Моделі й надалі змінюватимуться.
Стійка перевага будується навколо них.
Ваші контракти стають кращими.
Ваші інструменти стають кращими.
Ваші тести стають кращими.
Ваш стан стає чистішим.
Ваші дозволи стають безпечнішими.
Ваша логіка відновлення стає розумнішою.
Ваші помилки перетворюються на інфраструктуру.
Ось так здібні моделі стають надійними агентами.
Ось що таке Harness Engineering.
Якщо ви дочитали до цього місця
Збережіть цей гайд у закладки.
Підписуйтесь на мене в X: x.com/0xjmori
Підписуйтесь на мій Substack: substack.com/@lunarresearcher
Надішліть цю статтю тому, хто досі намагається виправити кожну помилку агента довшим промптом.



![[Вибачте] Я більше не рекомендую фріланс для досягнення незалежності.](/cdn-cgi/image/width=1920,quality=90,format=auto,metadata=none/https%3A%2F%2Fcms-assets.youmind.com%2Fmedia%2F1790615558140_ndvona_HTQ9s6laYAAX4J7.jpg)

