Розбір дизайну harness у Claude Code
У статті «Effective harnesses for long-running agents» Anthropic прямо стверджує: джерелом надійності є harness, а не модель; agent потребує обмежень «поза моделлю». Claude Code — це втілений у продукті зразок такого підходу, і сама Anthropic прямо зараховує його до категорії agentic harness. Це не маркетингове формулювання: Claude Code, імовірно, є найдетальніше публічно дослідженим harness на сьогодні. Його вихідний код відкритий, звіти спільноти докладні, а майже всі ключові механізми з лекцій курсу — багаторівневу пам’ять, стиснення контексту, дозволи, hooks, subagent і збереження сесій — реалізовано як повноцінні продуктові функції.
У цій статті ми розберемо Claude Code за допомогою фреймворку п’яти підсистем курсу, зосередившись на тому, як він утілює такі засадничі поняття harness, як «керування контекстом», «запобігання передчасному оголошенню про завершення» та «детерміновані обмеження».
Позиціонування одним реченням
В основі Claude Code лежить простий цикл while: викликати модель, виконати інструмент, спостерігати результат і знову викликати модель. Але переважна частина коду міститься не в цьому циклі, а в системах навколо нього — системі дозволів, конвеєрі стиснення контексту, механізмах розширення, оркестрації subagent і сховищі сесій. У цьому й полягає сутність harness: цикл — лише каркас, а надійність визначає все, що побудовано навколо нього.
Підсистема інструкцій: багаторівнева система пам’яті
Система пам’яті Claude Code — його найбезпосередніший внесок у теорію harness, що відповідає лекціям курсу про «репозиторій як джерело правди» та «безперервність контексту між сесіями». В офіційній документації «How Claude remembers your project» прямо сказано: кожна сесія починається з нового контекстного вікна, а знання між сесіями переносять два механізми — файли CLAUDE.md (інструкції, написані вами) і auto memory (нотатки, написані самим Claude).
За областю дії офіційна документація поділяє файли CLAUDE.md на чотири типи (від найширшої до найвужчої області завантаження):
- Рівень політик організації: централізовано керується IT/DevOps (наприклад,
/etc/claude-code/CLAUDE.md) і містить корпоративні правила. - Рівень користувача
~/.claude/CLAUDE.md: особисті вподобання та правила для всіх проєктів. - Рівень проєкту
./CLAUDE.mdабо./.claude/CLAUDE.md: джерело правди проєкту — структура, технологічний стек і команди перевірки; поширюється разом із репозиторієм. - Локальний рівень
./CLAUDE.local.md: особисті вподобання в межах проєкту; зазвичай файл додають до.gitignoreі не комітять.
Крім того, є ще два механізми:
- Завантаження на рівні підкаталогів за потреби: CLAUDE.md у підкаталогах не завантажуються під час запуску, а потрапляють до контексту лише тоді, коли Claude читає файли з відповідного каталогу.
- Автоматична пам’ять (auto memory): Claude самостійно занотовує ваші виправлення та вподобання; пам’ять спільна для репозиторію, діє між worktree, а в кожній сесії завантажуються щонайбільше перші 200 рядків або 25 КБ.
Ці чотири області утворюють ієрархію інструкцій: згідно з офіційною документацією, «що конкретніші інструкції, то пізніше вони потрапляють до контексту» (інструкції проєкту з’являються після інструкцій користувача). Її цінність у тому, що моделі не доводиться на початку кожної розмови опрацьовувати один гігантський файл інструкцій: натомість вони завантажуються відповідно до найближчої області дії. Саме так Claude Code утілює відповідь четвертої лекції курсу на питання «Чому один гігантський файл інструкцій не працює».
Підсистема контексту: п’ятирівневий конвеєр стиснення
Керування контекстом у Claude Code — це п’ятирівневий конвеєр стиснення (five-layer compaction pipeline), а не просте «коли заповниться — підсумувати». Цю деталь архітектури описано в дослідженні вихідного коду «Dive into Claude Code» від VILA Lab. У п’ятій лекції курсу йдеться про те, що довгі завдання втрачають безперервність; відповідь Claude Code — багаторівнева лійка: спочатку стиснення без втрат (видалення зайвих результатів інструментів), потім структуроване виокремлення, і лише наприкінці — LLM-підсумок із втратами, доповнений запобіжниками проти надмірного стиснення.
Це доповнює дизайн сховища сесій: дописуване сховище сесій (append-oriented storage), у якому вся історія додається до history.jsonl, із підтримкою відновлення через /resume і створення відгалужень fork. Це гарантує, що «перед завершенням кожної сесії залишається належна передача роботи» — не завдяки добрій пам’яті, а тому, що рівень зберігання є дописуваним і придатним до повторного відтворення.
Підсистема інструментів: чотири механізми розширення
Claude Code поділяє поверхню розширення на чотири категорії, кожна з яких розв’язує окремий тип завдань. Це одна з найцінніших для запозичення частин його дизайну:
- Навички (Skills): за визначенням офіційної документації, це процедурні знання, описані у
SKILL.md, які автоматично завантажуються за словами-тригерами й застосовують поступове розкриття. Вони підходять для предметних знань про те, «як щось робити». - MCP: описаний в офіційній документації протокол JSON-RPC для підключення зовнішніх систем — стандартний інтерфейс, через який «руки моделі дістаються зовнішнього світу».
- Hooks: за офіційною документацією, це детерміновані скрипти, прив’язані до подій життєвого циклу на кшталт
PreToolUse,PostToolUseіStop. - Плагіни / subagent (Subagents): за офіційною документацією, складні завдання передаються спеціалізованим agent.
Ключове проєктне рішення — розподіл обов’язків: CLAUDE.md визначає «що це», навички — «як це робити», MCP — «до чого підключатися», а hooks — «коли примусово застосовувати». Якщо команда змішує ці рівні (наприклад, записує в CLAUDE.md те, що має робити MCP), виникає описане в курсі протікання контексту.
Зворотний зв’язок і перевірка: детерміновані обмеження + співпраця людини й машини
У десятій лекції курсу сказано, що «справжньою перевіркою є лише проходження повного процесу». У Claude Code цьому відповідають два паралельні контури:
1. Система дозволів (детерміновані обмеження). Дозволи Claude Code не «запитують про все», а використовують сім режимів і класифікатор на основі ML: дії з низьким ризиком дозволяються, а ризиковані — залежно від політики потребують підтвердження або відхиляються (деталі архітектури див. у дослідженні VILA Lab). Так принцип «окреслити agent чіткі межі» із сьомої лекції стає примусовим правилом runtime, а не проханням у промпті.
2. Hooks (запобігання передчасному оголошенню про завершення). Hook PostToolUse може після виконання інструмента примусово запускати перевірки й повертати результат до контексту; hook Stop втручається, коли agent оголошує роботу завершеною. Це й означає «розділити виконавця та перевіряльника»: Anthropic прямо зауважує у статті про harness, що agent схильні впевнено вихваляти власну роботу («confidently praised their work»), тож hooks додають детерміновані перевірки замість довіри до самооцінки моделі.
3. Subagent (ізоляція контексту). Історія розмов кожного subagent зберігається в окремому файлі sidechain і не роздуває контекст батьківського agent (див. дослідження VILA Lab). Це поєднання «меж завдання» й «ізоляції контексту»: поділ завдання водночас ізолює контекстне забруднення.
Спостережуваність і збереження сесій
Журнал Claude Code є повним дописуваним записом (history.jsonl), а явні команди /compact, /clear та /init дають змогу активно керувати станом контексту, а не пасивно чекати на його переповнення. Команда /init навіть утілює принцип шостої лекції «нехай agent ініціалізується перед кожним завданням»: згідно з офіційною документацією, вона автоматично аналізує кодову базу й створює початковий CLAUDE.md із командами збірки, інструкціями тестування та інженерними домовленостями.
Відповідність фреймворку курсу
| Підсистема | Реалізація Claude Code | Оцінка |
|---|---|---|
| Інструкції | Поділ за областями (організація/користувач/проєкт/локальна) + автоматична пам’ять | Багаторівнева пам’ять — еталонна реалізація |
| Інструменти | Чотири типи розширень: навички + MCP + hooks + subagent | Чіткий розподіл обов’язків — головна перевага |
| Середовище | Налаштування в проєкті + settings.json | Спирається на самоопис користувача в CLAUDE.md |
| Стан | Дописуване сховище сесій + п’ятирівневе стиснення + resume/fork | Надзвичайно сильна еталонна реалізація безперервності довгих завдань |
| Зворотний зв’язок | Класифікатор дозволів + примусові перевірки через hook PostToolUse | Перетворює «запобігання передчасному завершенню» на детермінований механізм |
Проєктні рішення, які варто запозичити
- Розподіляйте інструкції за областю дії, а не складайте їх в один файл. CLAUDE.md на рівні каталогу — витончена реалізація «завантаження за місцем потреби».
- Стиснення має бути багаторівневою лійкою: спочатку без втрат, потім із втратами; не починайте з підсумовування всього тексту.
- Використовуйте hooks для детермінованих перевірок: запобігати передчасному оголошенню про завершення слід примусово на рівні runtime, а не проханнями в промпті.
- Ізолюйте контекст subagent: поділяйте не лише завдання, а й контекст, щоб підзавдання не забруднювали головний цикл.
- Дописуване й відтворюване сховище сесій: передавання роботи гарантує рівень зберігання, а не пам’ять.
Джерела (оригінали / вихідний код)
Кожне твердження можна простежити до наведеного нижче оригінального тексту або вихідного коду, щоб уникнути переказу з пам’яті:
- Офіційна документація Claude Code · Memory: новий контекст для кожної сесії, чотири області CLAUDE.md, завантаження підкаталогів за потреби, auto memory (200 рядків / 25 КБ), створення CLAUDE.md командою
/init.
https://code.claude.com/docs/en/memory - Офіційна документація Claude Code · Skills / MCP / Hooks / Sub-agents: визначення чотирьох механізмів розширення й подій (PreToolUse / PostToolUse / Stop).
https://code.claude.com/docs/en/skills | https://code.claude.com/docs/en/mcp | https://code.claude.com/docs/en/hooks | https://code.claude.com/docs/en/sub-agents - VILA Lab «Dive into Claude Code» (звіт із дослідженням вихідного коду): п’ятирівневий конвеєр стиснення, сім режимів дозволів + ML-класифікатор, sidechain для subagent, дописуване сховище сесій history.jsonl.
https://zhiqiangshen.com/projects/Claude_Code_Report/Claude_Code_Report.pdf - Anthropic «Effective harnesses for long-running agents»: джерело тверджень про те, що «надійність походить від harness, а не моделі», agent упевнено вихваляють свою роботу, а для перевірки слід застосовувати hooks.
https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents - Огляд Claude Code Full Stack (спільнота; поділ CLAUDE.md / Skills / MCP / Subagents / Hooks): додатковий матеріал про розподіл обов’язків між механізмами розширення.
https://jsmanifest.com/claude-code-full-stack-guide
Пов’язані лекції: Лекція 03 · Як зробити репозиторій єдиним джерелом правди | Лекція 09 · Як запобігти передчасному оголошенню agent про завершення | Лекція 10 · Чому справжньою перевіркою є лише наскрізне тестування