
Близько двох років моя кухня трималася на трьох системах. Полиця для спецій, що дісталася разом із квартирою, прикручена до стіни над плитою. Шухляда, яку я впорядкував сам, коли полиця переповнилася. І полиця в коморі — для всього, що не вмістилося ні там, ні там.
У всіх трьох була паприка. Знаю, бо купив її тричі.
Це не катастрофа; з цим живуть. Мене зламала субота, коли в мене готував друг, а я цілий вечір простояв у нього за спиною — ні, добра пательня під мийкою, ця сіль крупна, бери вдвічі менше, духовка гріє сильніше, ніж показує. Він готує краще за мене. Просто він не міг працювати на моїй кухні без мене всередині неї.
Два тижні тому я зрозумів, що наші репозиторії — рівно в такому стані.
Три полиці, одна кухня
OwlMeans Common — це бібліотека, на якій стоїть кожен проєкт, що ми будуємо, і кожен із цих проєктів будує агент. Тож репозиторій тут містить не лише код — він містить інструкції, які агент читає найпершими: як ми все розкладаємо, чого не можна робити ніколи, який скрипт за що відповідає.
Ми підтримували двох агентів, Claude Code і GitHub Copilot, і кожен хотів власну полицю. Тож кожне правило писалося двічі — один раз як .claude/skills/<назва>/SKILL.md, другий — як .github/instructions/<назва>.instructions.md. Два постійно завантажені файли контексту, майже копії один одного. Дві мапи репозиторію. Той самий shell-скрипт, що лежав байт у байт у двох каталогах. Дві теки пам’яті, які тихо розходилися.
Податок видно просто в історії: один коміт того періоду зачіпає дванадцять файлів навичок і одинадцять їхніх дзеркальних близнюків. Ніхто не вирішував, що це гарна ідея. Воно наросло — так само, як наростає третя полиця для спецій.
Одна полиця, одна картка
Тож я це вирвав. Усе переїхало в одну теку — .agents/, де лежать навички, правила, скрипти й пам’ять, — а все, що агент мусить прочитати перед стартом, зібралося в один файл у корені: AGENTS.md. В OwlMeans Common це видалило двісті тринадцять дубльованих файлів інструкцій. CLAUDE.md, у якому раніше було вісімдесят шість рядків усього на світі, тепер важить шістсот байтів.
Полицю придумав не я. Я взяв ту, на якій усі вже зійшлися, — і те, як саме вони зійшлися, і є причиною, чому я їй довіряю.
У травні 2025-го Amp запропонував один файл під назвою AGENT.md, в однині. Потім OpenAI обрала для Codex множину — і множина тут головне, бо один файл ділять між собою багато агентів. Amp міг битися за свою назву. Натомість вони написали: «замість наполягати на тому, що вигадали ми, ми вирішили, що краще мати один стандарт» — за умови, що OpenAI закріпить за собою домен agents.md. OpenAI це зробила, і Amp перейшов.
Від двадцяти тисяч репозиторіїв у серпні 2025-го це виросло до понад шістдесяти тисяч сьогодні, а в грудні стандарт передали Agentic AI Foundation під егідою Linux Foundation. Двадцять три інструменти читають його нативно — Codex, Cursor, Copilot, Gemini CLI, Zed, Windsurf, Devin, Jules, Aider.
Друга половина полиці прийшла з протилежного боку. Agent Skills — формат SKILL.md — належав Anthropic і був відкритий як публічна специфікація в грудні 2025-го, під опікою тієї самої фундації. Він точно описує, як виглядає тека навички, і не каже ані слова про те, де ця тека має лежати. Тож кожен вендор обрав батьківський каталог сам. Codex сканує .agents/skills. Copilot приймає .agents/skills. Це й вирішило справу за мене.
Гість, який приходить зі своїми ножами

Один агент картку на дверцятах не читає.
Claude Code читає CLAUDE.md — і тільки CLAUDE.md. Прохання читати ще й AGENTS.md відкрите з березня: issue #34235 у репозиторії Claude Code, у кластері з тисячами голосів, — і воно й досі відкрите. Що трохи смішно, з огляду на те, що формат навичок із другої половини цієї ж теки написали в Anthropic.
Спокуслива відповідь — друга копія. Усі, хто пробував, розповідають той самий фінал: два файли, які редагують руками, завжди розходяться, а файл інструкцій, що розійшовся з реальністю, гірший за відсутність файлу, бо агент йому вірить.
Тож ми зробили місток. CLAUDE.md вижив — шістсот десять байтів, байт у байт однакові в кожному репозиторії, — і його перший рядок це @AGENTS.md. Решта — примітка про те, що навички живуть у .agents/skills/ і писати їх деінде не можна ніколи. Далі невеликий shell-скрипт створює по одному симлінку на кожну навичку в ігнорований гітом .claude/skills/, а хук сесії перестворює їх щоразу. По одному на навичку, а не на каталог: Claude Code приймає засимлінкований запис навички, але не засимлінковану теку навичок — таке дізнаєшся лише тоді, коли спробуєш.
Рецепти моєю рукою
Друга зміна важить більше за теку.
Кулінарна книга каже: пекти двадцять п’ять хвилин при ста вісімдесяти. Картка всередині моєї шафки каже: двадцять дві хвилини, задня ліва, ця духовка гріє сильніше. Обидві правильні; тільки одна — про мою кухню.
Проєкти OwlMeans не встановлюють загальних навичок — кожен вирощує власні. У нашому репозиторії платформи їх дев’ятнадцять, у сусідньому репозиторії агента — двадцять три, і там, де назви збігаються, вміст уже ні: execution в одному означає абстракцію, у другому — її використання на боці платформи. Це не дублювання. Це дві різні кухні.
Проблема з карткою на дверцятах у тому, що духовки змінюються. Тож харнес тепер замикає петлю. Затвердити план — це водночас затвердити прохід, який іде слідом: коли роботу завершено, агент повертається до навичок, яких вона торкнулася, переписує ті, що вже неправдиві, а фінальний звіт зобов’язаний нести таблицю — що оновлено, що створено, а що не потребувало нічого, і чому. Звіт без цієї таблиці рахується незавершеним.
І ще одне правило, яке сподобалося мені більше, ніж я очікував: навичка описує чинні правила, а не те, що змінилося. Жодних датованих бюлетенів, жодного раніше X, тепер Y. Перевірка проста: готова навичка має читатися так, ніби функція завжди була саме такою.
Полиці за стравами, а не за датою покупки
Третя зміна — та, з якою я розлучився б останньою.
Агенти тепер мають пам’ять, і, полишені самі на себе, ведуть її як щоденник. Наша так і виглядала — файли, названі за подіями, на кшталт slot-status-reconciler.md чи null-error-investigation.md, кожен починався з того, що ми робили того тижня. Це список покупок. Він чудово фіксує, коли ти щось купив, і нічого не каже про те, що потрібно для сьогоднішньої вечері.
Тож ми перегрупували полиці за стравами. Вузол пам’яті тепер називається за реальною частиною проєкту — підсистемою, темою на кшталт роутингу чи перекладів, зовнішнім сервісом або самим репозиторієм — і ніколи за подією, датою чи задачею. Його тіло ділиться на те, що є правдою, що мусить виконуватися, що боляче кусає і де шукати, а дати дозволені рівно в одній секції — для роботи, що ще триває.
Справжню роботу робить індекс. Щонайбільше п’ятдесят рядків, по одному на вузол, у кожному — шляхи, які цей вузол покриває. Агент читає його на початку сесії і більше нічого; коли приходить задача, він зіставляє її шляхи з цими рядками й відкриває той один-два вузли, що збіглися. Він ніколи не читає все сховище.
А записи — це злиття. Коли щось змінюється, ти переписуєш рядок на місці й ніколи не дописуєш під ним датовану поправку, інакше файл тихо знову стає щоденником. Наш репозиторій платформи пройшов шлях від двадцяти хронологічних файлів до одинадцяти структурних вузлів, і пошук будь-чого перестав бути розкопками.
Це можна просто отримати
Відступи на крок — і нічого екзотичного тут немає. Одна тека замість трьох. Картка на дверцятах, яка пояснює, як тут усе влаштовано. Рецепти власною рукою, які тримають актуальними. Полиці, згруповані за тим, що ти справді готуєш.
І все одно це коштувало два тижні, більшість із яких пішла на речі, яких не нагуглиш: що стандарт існує і який саме переміг; що засимлінкована тека навичок не працює там, де працюють окремі симлінки на навички; що пам’ять, прив’язана до подій, гниє, а прив’язана до структури — ні.
Тож ось чесна пропозиція.
Якщо ти будуєш з агентом щось справжнє, ти в це впертешся. Ти додаси другого агента й почнеш писати все двічі. Ти виростиш теку пам’яті, яка читається як щоденник, що його ніхто не хоче відкривати. Можна зробити як я і спалити два тижні. Мені це було варте того — це моя робота.
Це не твоя робота.
Саме це й постачає OwlMeans. Кожен проєкт, що його будує Платформа, виходить із харнесом уже всередині — .agents/, AGENTS.md, навички, скроєні під цей проєкт, граф пам’яті у формі його власного коду, — а OwlMeans Services припасовує те саме до кодової бази, яка в тебе вже є. Усе це належить тобі. Ніякого вендор-локіну і ніякого «домашнього» агента: Codex, Copilot, Claude Code, хоч що вийде наступного кварталу — усі вони читають одну й ту саму полицю.
Будь-який кухар, будь-яка кухня. Пропусти мої два тижні — це можна просто отримати.
OwlMeans будує повностекові TypeScript SaaS-застосунки з ваших сторіз — типізовані, готові до SSO, ваші для подальшого розвитку з будь-яким агентом. Дивіться, що він вміє →