<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Блог Maguyva</title><description>Технічні розбори MCP-інтелекту коду, архітектури ШІ-агентів і уроків, здобутих під час створення багатомовної платформи пошуку коду.</description><link>https://maguyva.ai/uk/blog</link><language>uk</language><atom:link href="https://maguyva.ai/uk/rss.xml" rel="self" type="application/rss+xml"/><item><title>Контекст, що подорожує з вами</title><link>https://maguyva.ai/uk/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/context-that-travels</guid><description>Індексатор Cursor чудовий усередині Cursor. Maguyva — це розміщена в хмарі MCP-карта, яку той самий агент може запитувати з інших редакторів, CLI та CI.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Індексатор Cursor чудовий усередині Cursor. Автодоповнення, вбудоване редагування, чат і агент у тому вікні вже спираються на індекс проєкту, який Cursor підтримує для відкритого робочого простору. Якщо Cursor — єдине середовище, де ви пишете код, і цей індекс уже знаходить потрібні файли, залишайтеся там. Це чесний випадок «залишайтеся на місці», і він по праву відкриває цю статтю.&lt;/p&gt;
&lt;p&gt;Ця стаття про іншу половину звичайного тижня. Той самий репозиторій також відкривають у Claude Code, у нього запитують із Codex CLI, його перевіряють на другій машині, або до нього звертається агент, що працює в CI. Питання не в тому, «який індексатор кращий». Питання в тому, чи та сама карта, якій агент довіряє в одному вікні, є тією самою картою, якій він довіряє в наступному.&lt;/p&gt;
&lt;p&gt;Maguyva — це та карта, що подорожує з вами. Це віддалений MCP-шар контексту кодової бази. Агент звертається до нього так само, як до будь-якого іншого MCP-інструмента. Результати повертаються як ранжовані шляхи з номерами рядків. Cursor залишається редактором. Рухається саме контекст.&lt;/p&gt;
&lt;h2 id=&quot;для-чого-потрібен-індексатор-cursor&quot;&gt;Для чого потрібен індексатор Cursor&lt;/h2&gt;
&lt;p&gt;Вбудована індексація Cursor існує для того, щоб чат, агент і пошук усередині редактора могли отримувати релевантний код, а не покладатися лише на те, що вміщується в сире контекстне вікно моделі. Це правильний дизайн для IDE. Цей індекс — нативна частина Cursor. Це не MCP-сервер, і він недоступний із жодного іншого клієнта.&lt;/p&gt;
&lt;p&gt;Ось як це працює, згідно з публічною документацією Cursor і власними заявами Cursor на момент написання: основний шлях пошуку більше не проходить через хмарний індекс ембеддингів. Команда Cursor заявила на своєму форумі спільноти, що виділений семантичний пошук на основі ембеддингів поступово згортається на користь пошуку на основі grep, бо сучасні моделі вже достатньо добре досліджують живе дерево коду самостійно. Натомість є Instant Grep — локальний пошуковий індекс, побудований на n-грамах, інвертованих списках і фільтрах Блума, що зберігається в таблиці пошуку, відображеній у пам’ять, тож запити вирішуються на власній машині розробника, а не на сервері.&lt;/p&gt;
&lt;p&gt;Сам індекс живе у власному каталозі &lt;code&gt;.git/cursor/&lt;/code&gt; репозиторію, прив’язаному до конкретного git-коміту; зміни з моменту цього коміту накладаються поверх, а не запускають повторне сканування, і індекс перебудовується лише тоді, коли локальний стан сильно відхилився від того, для чого його було побудовано. Оскільки він міститься всередині &lt;code&gt;.git&lt;/code&gt;, він ніколи не відстежується системою контролю версій і ніколи не пушиться — видаліть теку, і індекс зникне. &lt;code&gt;.gitignore&lt;/code&gt; дотримується за побудовою, оскільки враховується лише контент, відстежуваний git, а &lt;code&gt;.cursorignore&lt;/code&gt; застосовується на шляху читання. На цьому шляху більше немає ні серверного етапу ембеддингу, ні віддаленої векторної бази даних. Раніша документація описувала дизайн із хмарною підтримкою — шифрування чанків, синхронізацію через дерево Меркла, повторне використання індексу між членами команди — і сама команда Cursor відтоді заявила, що цей дизайн згортається, тож у цій статті він більше не описується як актуальний.&lt;/p&gt;
&lt;p&gt;Яскрава особливість усередині редактора — субагент Explore від Cursor. Він може запускати кілька паралельних пошуків у власному контекстному вікні на швидшій моделі й повертати лише релевантні знахідки, тож основна розмова не роздувається результатами пошуку. Це справжня сила всередині редактора. Збережіть її.&lt;/p&gt;
&lt;p&gt;Мульти-кореневі робочі простори підтримуються: контекст кожної відкритої теки доступний агенту. Деякі залежні від git функції, як-от worktree, вимикаються в мульти-кореневих налаштуваннях, а Cloud Agents взагалі не підтримують мульти-кореневі робочі простори.&lt;/p&gt;
&lt;p&gt;Ніщо з цього не привід залишати Cursor. Це точний опис карти, яка чудова там, де вона живе.&lt;/p&gt;
&lt;h2 id=&quot;що-насправді-означає-подорожувати-з-вами&quot;&gt;Що насправді означає «подорожувати з вами»&lt;/h2&gt;
&lt;p&gt;Карта подорожує з вами, коли ті самі запитання повертають той самий тип відповіді, з цитатами, які можна відкрити, з більш ніж одного клієнта.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;У Cursor: «Де визначено &lt;code&gt;parseConfig&lt;/code&gt; і хто його викликає?»&lt;/li&gt;
&lt;li&gt;У Claude Code, на тому самому репозиторії: те саме запитання.&lt;/li&gt;
&lt;li&gt;У Codex CLI, на машині для рев’ю, яка ніколи не відкривала вікно Cursor: те саме запитання.&lt;/li&gt;
&lt;li&gt;У CI-агенті, що розмовляє MCP: те саме запитання, до того самого розміщеного знімка.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Якщо кожне середовище будує власний приватний індекс, у вас немає однієї карти. У вас є кілька кешів, що розходяться. Індекс редактора може бути актуальним для дерева на диску. Сесія CLI може відставати на день. Завдання CI може дивитися на іншу робочу копію. І агент усе одно звучатиме впевнено.&lt;/p&gt;
&lt;p&gt;Індексатор Cursor не мусить це вирішувати. Оскільки він живе всередині редактора, контекст, який він будує, — для цього редактора. Читачеві, якому також потрібні CLI, конвеєр CI або інший редактор, потрібен окремий інструмент для цих середовищ. Це факт меж застосовності, а не дефект. Maguyva і є цим окремим інструментом.&lt;/p&gt;
&lt;p&gt;Опублікована кількість мов для індексатора Cursor не вказана в матеріалах, які може використовувати цей текст. Maguyva публікує підтримку понад 279 мов і текстових технологій. Ціни Cursor тут також не наводяться; див. їхню сторінку з тарифами. Maguyva бере плату за робочий простір, а не за місце, з опублікованими тарифами $0, $19, $49 і $149 залежно від обсягу індексації та розміру робочого простору.&lt;/p&gt;
&lt;h2 id=&quot;одна-розміщена-карта-будь-який-mcp-клієнт&quot;&gt;Одна розміщена карта, будь-який MCP-клієнт&lt;/h2&gt;
&lt;p&gt;Maguyva — це віддалений MCP-сервер. Ви підключаєте GitHub, обираєте репозиторії, і хмарний конвеєр будує символи, ребра графа та ранжовану карту. Ви додаєте API-ключ до конфігурації MCP того клієнта, яким уже користуєтеся. У Maguyva є посібники з налаштування для 24 задокументованих MCP-клієнтів — включно з Cursor — і вона може підключатися до інших MCP-сумісних клієнтів, що підтримують стандартну конфігурацію.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/uk/for-cursor&quot;&gt;Сторінка налаштування Cursor&lt;/a&gt; — це шлях, специфічний для редактора, якщо саме там ви працюєте. Той самий сервер відповідає Claude Code, VS Code, Windsurf, Codex CLI та іншим. Вам не потрібно міняти редактор. Ви даєте кожному агенту ту саму поверхню інструментів: 11 клієнтських MCP-інструментів для пошуку, символів, аналізу залежностей, отримання файлів, контексту репозиторію та детермінованих службових робочих процесів. Семантичний, структурний, графовий і текстовий пошук зливаються в ранжовані результати.&lt;/p&gt;
&lt;p&gt;У цьому й полягає перевага переносності. Цитати, які ви перевірили в Cursor цього ранку, мають ту саму форму, що й цитати, які Codex CLI поверне сьогодні ввечері. Шлях до файлу й номер рядка. Відкрийте їх. Якщо вони неправильні, ви це побачите. Якщо правильні — наступна правка матиме куди приземлитися. Схвалене твердження — менше галюцинованих правок, а не обіцянка, що кожна правка правильна.&lt;/p&gt;
&lt;p&gt;Актуальність публікується відкрито. Знімки позначені часом, тож агент знає, яку версію дерева він читає. Періодичність перебудови — щодня на безкоштовному плані та щогодини на платних. Чесне обмеження — несинхронізована локальна робота: правка, що існує лише в робочому дереві, ще не потрапила до розміщеної карти. Це обмеження однакове незалежно від того, з якого клієнта ви робите запит, і саме в цьому суть. Розбіжність між клієнтами більше не друге, приховане обмеження.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/uk/docs&quot;&gt;Документація&lt;/a&gt; дає цикл активації, застосовний до будь-якого клієнта: проіндексуйте репозиторій, який ви вже знаєте, підключіть клієнта, поставте одне запитання, яке можна перевірити. Зробіть це один раз у Cursor. Зробіть це ще раз із того CLI, яким ви справді користуєтеся в дні рев’ю. Якщо обидві відповіді цитують той самий обробник, карта справді подорожувала з вами.&lt;/p&gt;
&lt;h2 id=&quot;як-дві-карти-співіснують-одна-з-одною&quot;&gt;Як дві карти співіснують одна з одною&lt;/h2&gt;
&lt;p&gt;Використовуйте обидві. Це не альтернативи в сенсі сторінки порівняння.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Тримайте індексатор Cursor увімкненим для проєкту на диску. Нехай Explore, Instant Grep і агент усередині редактора використовують його. Цей цикл нативний і швидкий.&lt;/li&gt;
&lt;li&gt;Додайте Maguyva як MCP-сервер у Cursor, щоб та сама сесія могла також запитувати розміщену карту робочого простору. Cursor — задокументований клієнт Maguyva. Ви не обираєте один індекс, видаляючи інший.&lt;/li&gt;
&lt;li&gt;Додайте той самий сервер Maguyva до Claude Code, Codex CLI або будь-якого іншого MCP-клієнта, що торкається репозиторію. Одна форма API-ключа. Один робочий простір.&lt;/li&gt;
&lt;li&gt;Якщо CI-агент MCP-сумісний, спрямуйте його на той самий сервер. Він прочитає той самий позначений часом знімок, що й ноутбук.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Індекс редактора залишається найкращим інструментом для питання «що на диску в цьому вікні прямо зараз». Розміщена карта — найкращий інструмент для питання «як цей робочий простір виглядає для кожного агента, що торкнеться його сьогодні». Ці твердження не конкурують.&lt;/p&gt;
&lt;p&gt;Квоти робочого простору опубліковані на &lt;a href=&quot;https://maguyva.ai/uk/pricing&quot;&gt;сторінці тарифів&lt;/a&gt;: репозиторії, проіндексовані рядки та користувачі, оплачувані за робочий простір. Агенти й люди ділять один і той самий лічильник користувачів. Почніть безкоштовно з репозиторію, який ви вже вмієте оцінювати. Підвищуйте робочий простір лише після того, як цитати витримали контакт із деревом.&lt;/p&gt;
&lt;h2 id=&quot;чого-ця-стаття-не-стверджує&quot;&gt;Чого ця стаття не стверджує&lt;/h2&gt;
&lt;p&gt;Вона не стверджує, що індексатор Cursor слабкий, неповний або є приводом змінити редактор. Перше речення цього тексту говорить протилежне.&lt;/p&gt;
&lt;p&gt;Вона не стверджує, що Maguyva замінює Instant Grep або субагент Explore. Це функції Cursor. Вони залишаються в Cursor.&lt;/p&gt;
&lt;p&gt;Вона не вигадує кількість мов, цифру затримки чи економію токенів для жодного з продуктів. Невідомі цифри залишаються неопублікованими.&lt;/p&gt;
&lt;p&gt;Вона не вдає, ніби непушнута локальна робота є в розміщеній карті. Позначені часом знімки роблять це обмеження видимим. Вони його не усувають.&lt;/p&gt;
&lt;p&gt;Тест звичайний. Проіндексуйте репозиторій, який ви вже знаєте. Поставте одне запитання, яке можна перевірити, спочатку в Cursor, потім у другому MCP-клієнті. Контекст, що подорожує з вами, — це та сама цитата в обох місцях.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// same map, wherever you opened it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>MCP</category><category>Portability</category></item><item><title>Спочатку карта, потім рев&apos;ю</title><link>https://maguyva.ai/uk/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/map-first-review-second</guid><description>Дайте кодувальному агенту опору в карті репозиторію до того, як він почне писати. Нехай Greptile рев&apos;ює пул-реквест після. Взаємодоповнювана пара, а не заміна.</description><pubDate>Mon, 07 Sep 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;По обидва боки пул-реквесту стоять дві різні задачі. Перш ніж агент почне писати, йому потрібна карта дерева, яке він збирається змінити. Після того як агент відкрив PR, щось має прочитати цю зміну у зіставленні з рештою системи й залишити коментарі, за якими людина може діяти.&lt;/p&gt;
&lt;p&gt;Ці задачі виглядають схоже здалеку, бо обидві включають «розуміння кодової бази». Це не один і той самий продукт. Одна відповідає на питання «куди має приземлитися ця зміна?». Інша відповідає на питання «що зламав цей diff, що пропустить порядковий лінтер?». Змішати їх означає отримати гірший перший чернетку й галасливіше рев’ю.&lt;/p&gt;
&lt;p&gt;Цей текст — посібник зі спільного робочого процесу. Maguyva — карта, яку агент запитує першою. Greptile — агент рев’ю, який коментує PR після. Ця пара взаємодоповнювана за побудовою: Maguyva не рев’ює пул-реквести, а Greptile не замінює шар контексту, який агент використав, щоб їх написати.&lt;/p&gt;
&lt;h2 id=&quot;чому-цей-поділ-корисний&quot;&gt;Чому цей поділ корисний&lt;/h2&gt;
&lt;p&gt;Кодувальний агент, що відштовхується від апріорних знань із тренування плюс кілька вставлених файлів, вигадає правдоподібний шлях і відредагує його. Це провал «неправильного файлу», і це проблема пошуку. Maguyva — віддалений MCP-шар контексту кодової бази: семантичний, структурний (AST), графовий/залежнісний і текстовий пошук зливаються в ранжовані результати, плюс пошук символів і отримання файлів. Обґрунтовані відповіді повертаються у вигляді &lt;code&gt;path/file.ext:line&lt;/code&gt;, тож ви можете відхилити промах до того, як з’явиться патч. Твердження залишається скромним: менше галюцинованих правок. Модель усе ще може вгадувати. Просто перший крок перестає бути вгадуванням.&lt;/p&gt;
&lt;p&gt;Greptile — це агент рев’ю коду на основі ШІ. За їхніми власними словами, він автоматично рев’ює кожен пул-реквест із повним розумінням кодової бази, протиставляючи це традиційним лінтерам, які перевіряють файли ізольовано, а не всю систему. Налаштування полягає у встановленні застосунку GitHub або GitLab і виборі репозиторіїв. Немає локального індексу, який вам потрібно експлуатувати. Хостинг — Greptile Cloud (вони заявляють про відповідність SOC 2 Type II, зі звітом, доступним за запитом), з опцією самостійного хостингу для підприємств.&lt;/p&gt;
&lt;p&gt;Їхній власний пронумерований процес такий: підключитися й побудувати граф залежностей кожної функції, класу й залежності; при кожному пул-реквесті аналізувати зміну, використовуючи цей повний граф репозиторію, і публікувати знахідки у вигляді коментарів PR із запропонованими виправленнями приблизно за три хвилини; кожен коментар може передати проблему кодувальному агенту, яким команда вже користується. Вони також заявляють, що читають попередні коментарі людей до PR із часом, щоб вивчити стандарти коду команди й зменшити галасливі пропозиції. За їхніми словами, їхній навчальній системі потрібно 2–3 тижні, щоб адаптуватися.&lt;/p&gt;
&lt;p&gt;Це рев’ю, а не чернетка. Сильна сторона Greptile — контекст повного графа репозиторію на зміну, яка вже приземлилася в PR, а потім замкнений цикл, що надсилає знахідку в Claude Code, Codex, Conductor, Cursor або Devin. Сильна сторона Maguyva — ранжована карта, яку агент запитав до того, як цю зміну було написано. Використовуйте обидва. Не просіть жоден із них робити роботу іншого.&lt;/p&gt;
&lt;p&gt;Офіційна інтеграція продуктів Maguyva–Greptile від першої сторони не заявлена. Вона вам і не потрібна. Maguyva розмовляє з агентом через MCP. Greptile розмовляє з GitHub або GitLab через свій застосунок. Вони зустрічаються на пул-реквесті. Жодного зв’язувального скрипта, жодного cron, що з’єднує один інструмент з іншим. Ця пара обходиться без bash, бо кожен продукт уже займає ту поверхню, яка йому належить.&lt;/p&gt;
&lt;h2 id=&quot;чим-це-не-є&quot;&gt;Чим це не є&lt;/h2&gt;
&lt;p&gt;Це не розгром Greptile. Це не сторінка «змініть рецензента». Greptile запустився на Hacker News 5 березня 2024 року як компанія Y Combinator W24, і та гілка обговорення — це те, як багато людей уперше дізналися про цей продукт. Якщо саме так ви їх знайшли, продовжуйте ними користуватися. Ця сторінка — відсутня передня половина того циклу: дати агенту опору заздалегідь, щоб PR, який бачить Greptile, уже націлювався на правильні файли.&lt;/p&gt;
&lt;p&gt;Маркетингові матеріали Greptile ведуть із твердженнями про швидкість рев’ю та виявлення багів. Ставтеся до них як до власних заяв Greptile, а не як до незалежно перевірених цифр. Цей текст не повторює їх як факти.&lt;/p&gt;
&lt;p&gt;Покриття мов — та сама чесність. Greptile формулює підтримку як охоплення всіх мов програмування, а не перелічений список; точне число не вказане. Maguyva публікує підтримку понад 279 мов і текстових технологій, з технічним поділом (AST на основі парсера проти лише тексту) на сайті, коли питання технічне. Це різні продукти, що роблять різні заяви. Не змішуйте їх.&lt;/p&gt;
&lt;p&gt;Ціни Greptile не вказані в матеріалах, які може використовувати цей текст. Платні плани існують; див. їхню сторінку тарифів. Maguyva бере плату за робочий простір, а не за місце. Плани починаються безкоштовно. &lt;a href=&quot;https://maguyva.ai/uk/pricing&quot;&gt;Сторінка тарифів&lt;/a&gt; перелічує опубліковані рівні, якщо вам потрібні цифри по робочих просторах.&lt;/p&gt;
&lt;h2 id=&quot;робочий-процес&quot;&gt;Робочий процес&lt;/h2&gt;
&lt;p&gt;Три іменовані етапи. Виконуйте їх у цьому порядку. Не пропускайте жоден із них, коли пробуєте цю пару вперше.&lt;/p&gt;
&lt;h3 id=&quot;1-контекст-maguyva&quot;&gt;1. Контекст Maguyva&lt;/h3&gt;
&lt;p&gt;Проіндексуйте один репозиторій, який ви вже знаєте. Підключіть MCP-клієнта, у якому ви вже пишете код — Claude Code, Cursor, Codex CLI, VS Code, Windsurf або іншого MCP-сумісного клієнта. У Maguyva є посібники з налаштування для 24 задокументованих MCP-клієнтів, і вона може підключатися до інших клієнтів, що підтримують стандартну конфігурацію MCP.&lt;/p&gt;
&lt;p&gt;Поставте запитання, яке ви можете оцінити, перш ніж хтось напише хоч рядок. «Де обробляється закінчення сесії і що це викликає?» — кращий перший хід, ніж «полагодь автентифікацію». Вимагайте цитат. Відкрийте результати &lt;code&gt;file.ext:line&lt;/code&gt;. Простежте символ. Підтвердьте залежність, яку ви збираєтеся торкнутися.&lt;/p&gt;
&lt;p&gt;Maguyva надає 11 клієнтських MCP-інструментів для пошуку, символів, аналізу залежностей, отримання файлів, контексту репозиторію та детермінованих службових робочих процесів. Чотири режими пошуку зливаються в ранжовані результати; &lt;code&gt;find_symbol&lt;/code&gt; — окремий інструмент, коли ви вже знаєте ім’я. &lt;a href=&quot;https://maguyva.ai/uk/docs&quot;&gt;Документація&lt;/a&gt; описує найкоротший шлях: почати безкоштовно, проіндексувати репозиторій, який ви вже знаєте, підключити клієнта, потім поставити одне запитання, яке можна перевірити.&lt;/p&gt;
&lt;p&gt;Знімки позначені часом, тож агент може визначити, яку версію дерева він читає. Чесне обмеження — несинхронізована локальна робота. Якщо правка існує лише в робочому дереві й не була запушена, розміщена карта поки що її не містить. Файли інструкцій (&lt;code&gt;CLAUDE.md&lt;/code&gt;, &lt;code&gt;AGENTS.md&lt;/code&gt;) досі знаходять тут своє місце для угод і того, чого не слід торкатися. Це не жива карта. Використовуйте їх для поведінки. Використовуйте Maguyva для фактів.&lt;/p&gt;
&lt;p&gt;Не дозволяйте агенту відкривати PR, доки цитати не витримають контакт із репозиторієм. Цей бар’єр — весь сенс цього етапу.&lt;/p&gt;
&lt;h3 id=&quot;2-pr-агента&quot;&gt;2. PR агента&lt;/h3&gt;
&lt;p&gt;Той самий агент тепер пише зміну в клієнті, за який ви вже платите. Maguyva — не редактор і не рецензент. Агент і далі виробляє diff. Ви і далі відкриваєте пул-реквест на GitHub або GitLab так само, як уже робите.&lt;/p&gt;
&lt;p&gt;Що має відрізнятися — це перший файл. PR має називати обробник, який справді реалізує поведінку, виклик, що зламається, і тест, який впаде, якщо зміна неправильна. Якщо етап 1 було пропущено, етап 3 витратить свої коментарі на зміну, що приземлилася не в той пакет. Greptile все ще може знаходити системні проблеми. Йому не має доводитися ще й відновлюватися після галюцинованого шляху.&lt;/p&gt;
&lt;p&gt;Тримайте PR у вузьких рамках. Обґрунтований перший файл — не ліцензія на переписування модуля. Ця взаємодоповнювана пара працює, коли агент зробив одну роботу з картою, а потім попросив рецензента зробити іншу роботу над обмеженим diff.&lt;/p&gt;
&lt;h3 id=&quot;3-ревю-greptile&quot;&gt;3. Рев’ю Greptile&lt;/h3&gt;
&lt;p&gt;Greptile вже підключений до репозиторію через застосунок GitHub або GitLab. На новому пул-реквесті він аналізує зміну, використовуючи побудований ним повний граф репозиторію, і публікує знахідки у вигляді коментарів із запропонованими виправленнями. Їхні власні матеріали відводять на цей прохід близько трьох хвилин.&lt;/p&gt;
&lt;p&gt;Читайте коментарі так, як читали б уважного колегу по команді: відкрийте процитоване місце, вирішіть, чи реальна знахідка, потім дійте. Там, де Greptile пропонує «Fix with your Agent», він надсилає проблему — шляхи до файлів, номери рядків, запропонований код — у Claude Code, Codex, Conductor, Cursor або Devin. «Fix All» надсилає всі проблеми рев’ю одразу. Вони також постачають Greptile MCP і плагін для Claude Code для цієї передачі. Maguyva немає в цьому поіменованому списку цілей; ця відсутність не проблема. Maguyva вже зробила свою роботу на етапі 1. Кодувальний агент, що написав PR, — це той, хто має отримати навантаження з виправленням.&lt;/p&gt;
&lt;p&gt;Очікуйте шум у перші 2–3 тижні, поки навчальна система Greptile адаптується до коментарів, які ваша команда справді залишає. Це їхній заявлений графік, а не дефект пари. Рев’ю людини залишається в циклі. Greptile — автоматизований перший прохід, а не кнопка злиття.&lt;/p&gt;
&lt;p&gt;Якщо коментар Greptile вказує на файл, який агент жодного разу не запитував на етапі 1, це корисний сигнал. Або карта пропустила виклик, або агент пропустив цитату. Виправте чернетку відповідно до коментаря. Не вимикайте рецензента.&lt;/p&gt;
&lt;h2 id=&quot;як-зберегти-цю-взаємодоповнюваність-чесною&quot;&gt;Як зберегти цю взаємодоповнюваність чесною&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Maguyva завжди першою. Рев’ю PR із неправильним файлом усе одно залишається рев’ю неправильного файлу.&lt;/li&gt;
&lt;li&gt;Greptile завжди після. Добре процитована чернетка все одно потребує прочитання diff на рівні всієї системи.&lt;/li&gt;
&lt;li&gt;Не просіть Maguyva публікувати коментарі до PR. Вона цього не робить.&lt;/li&gt;
&lt;li&gt;Не просіть Greptile бути першим шаром пошуку агента, поки він ще обирає шлях. Це не та робота, для якої побудований їхній застосунок GitHub або GitLab.&lt;/li&gt;
&lt;li&gt;Не вигадуйте bash-конвеєр, що їх «синхронізує». PR — це інтерфейс.&lt;/li&gt;
&lt;li&gt;Перевіряйте обидві сторони незалежно. Проіндексуйте репозиторій, який ви вже знаєте. Поставте одне запитання, яке можна перевірити. Потім відкрийте невеликий PR і прочитайте, що Greptile справді коментує.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Коли цьому дають ім’я, цикл стає звичайним. Спочатку карта. Потім PR агента. Потім рев’ю. Кожен продукт залишається на тій стороні пул-реквесту, на якій він хороший.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// map first. review second. in that order.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Ecosystem</category><category>Workflow</category><category>Code Review</category></item><item><title>Дати ШІ-агенту контекст великого репозиторію без локального індексатора</title><link>https://maguyva.ai/uk/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/large-repo-context-without-a-local-indexer</guid><description>Як дати кодувальному агенту запитувану карту великого репозиторію з хмари, не запускаючи локальний індексатор на своєму ноутбуці.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Великий репозиторій не вміщується в контекстне вікно, і якщо ви хоч раз спрямовували індексатор ноутбука на справжній monorepo, ви знаєте, що там він теж не вміщується комфортно — RAM злітає, перша індексація займає годину, а ваш агент усе ще починає наступну сесію з вгадування, які файли важливі.&lt;/p&gt;
&lt;p&gt;Звична відповідь — запускати індексатор поруч із редактором, і для репозиторію, який зручно вміщується на одній машині, це хороша відповідь. Якщо ваш monorepo вже індексується швидко в Cursor і це єдине місце, де вам потрібна карта, цьому тексту нічого додати — пропустіть його.&lt;/p&gt;
&lt;p&gt;Цей текст про інший випадок — коли агенту потрібна запитувана карта великого репозиторію, а ви не хочете запускати для цього локальний індексатор.&lt;/p&gt;
&lt;h2 id=&quot;коли-локальний-індексатор--неправильний-інструмент&quot;&gt;Коли локальний індексатор — неправильний інструмент&lt;/h2&gt;
&lt;p&gt;Локальний індекс припускає, що код живе на тій машині, яка його запитує, і в масштабі справжнього monorepo це припущення тріщить навіть усередині одного редактора. Репозиторій просто більший, ніж ви хочете тримати «теплим» на ноутбуці: ви працюєте в одному пакеті, поки радіус впливу на три каталоги далі, а перша холодна індексація дерева у два мільйони рядків — не те, що ви хочете пережити двічі: ні на своїй машині, ні на CI-раннері, який ніколи раніше не клонував це дерево. Або колезі по команді має бути можна запитувати ту саму карту, що й вам, не чекаючи, поки його власна машина прожене той самий індекс.&lt;/p&gt;
&lt;p&gt;Ніщо з цього не привід викидати хороший індексатор редактора. Це привід додатково мати розміщену карту, яку будь-який із ваших агентів може запитати через MCP.&lt;/p&gt;
&lt;p&gt;І проблема масштабу глибша, ніж «забагато файлів, щоб вставити». На великому дереві цікаве питання майже ніколи не «покажи мені цей файл» — це яких файл, який символ, які виклики, які тести. Агент, що починає з переліку &lt;code&gt;src/&lt;/code&gt; і читання перших трьох результатів, легко пропустить обробник у &lt;code&gt;apps/api&lt;/code&gt; і згенерований клієнт у &lt;code&gt;packages/sdk&lt;/code&gt;. Вам потрібен пошук, побудований по всьому дереву, потім ранжований, потім процитований.&lt;/p&gt;
&lt;h2 id=&quot;що-насправді-означає-контекст-великого-репозиторію&quot;&gt;Що насправді означає «контекст великого репозиторію»&lt;/h2&gt;
&lt;p&gt;Вивалити файли в промпт — це не контекст, це менша й гірша копія дерева. Що дійсно потрібно вашому агенту — ставити запитання й отримувати у відповідь процитовані відповіді: де визначено цей символ і хто його викликає, що залежить від модуля, який я збираюся змінити, який файл тесту покриває цю поведінку, і як дерево виглядає &lt;em&gt;зараз&lt;/em&gt;, а не минулого кварталу.&lt;/p&gt;
&lt;p&gt;Ці відповіді мають надходити з індексу, побудованого за вашим репозиторієм, а не з пам’яті моделі про чужі репозиторії, і цей індекс має жити десь за межами контекстного вікна агента. Для цієї задачі він також має жити десь за межами вашого ноутбука.&lt;/p&gt;
&lt;p&gt;Ще одна річ, яку файли інструкцій не можуть зробити за вас: &lt;code&gt;CLAUDE.md&lt;/code&gt; і &lt;code&gt;AGENTS.md&lt;/code&gt; — правильне місце для угод і поведінки, але це не жива, ранжована, запитувана карта дерева у два мільйони рядків. Використовуйте правила для поведінки; використовуйте інтелект репозиторію для фактів.&lt;/p&gt;
&lt;h2 id=&quot;будуємо-карту-в-хмарі-запитуємо-її-з-будь-якого-клієнта&quot;&gt;Будуємо карту в хмарі, запитуємо її з будь-якого клієнта&lt;/h2&gt;
&lt;p&gt;Maguyva — це віддалений MCP-шар контексту кодової бази. Ви підключаєте GitHub, обираєте свої репозиторії й можете йти, поки хмарні конвеєри розбирають дерево, будують символи й ребра графа та підтримують ранжовану карту — без локального індексатора, ніколи.&lt;/p&gt;
&lt;p&gt;Коли ви пушите код, змінені файли розбираються інкрементально, а шари графа й ранжування перебудовуються за розкладом: щодня на безкоштовному плані, щогодини на платних. Кожен знімок позначений часом, тож ваш агент може визначити, яку версію дерева він читає. Чесне обмеження тут — несинхронізована локальна робота: правка, що існує лише у вашому робочому дереві й ніколи не була запушена, ще не потрапила до розміщеної карти.&lt;/p&gt;
&lt;p&gt;Потім ви підключаєте будь-якого клієнта, яким уже користуєтеся, додавши API-ключ до його конфігурації MCP. Є посібники з налаштування для 24 задокументованих MCP-клієнтів, і будь-який інший MCP-сумісний клієнт, що підтримує стандартну конфігурацію, теж може підключитися. Якщо Cursor — ваш дім, &lt;a href=&quot;https://maguyva.ai/uk/for-cursor&quot;&gt;сторінка Cursor&lt;/a&gt; проведе цим шляхом; той самий сервер відповідає Claude Code, VS Code, Windsurf, Codex CLI та іншим.&lt;/p&gt;
&lt;p&gt;Вам не потрібно міняти редактор. Ви даєте своєму агенту поверхню інструментів — 11 MCP-інструментів для пошуку, символів, аналізу залежностей, отримання файлів і контексту репозиторію — з покриттям понад 279 мов і текстових технологій, що важить більше, ніж здається, на monorepo, який перестав бути одномовним багато років тому.&lt;/p&gt;
&lt;p&gt;Відповіді повертаються обґрунтованими, у вигляді шляхів до файлів із номерами рядків. Семантичний, структурний, графовий і текстовий пошук зливаються в ранжовані результати, тож запитання на кшталт «що залежить від parseConfig» дає не звалище grep і не єдиний семантичний фрагмент, а жменьку місць, які справді важливі.&lt;/p&gt;
&lt;h2 id=&quot;конкретна-інструкція&quot;&gt;Конкретна інструкція&lt;/h2&gt;
&lt;p&gt;Не починайте з індексації всієї компанії. Ось шлях, який працює:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Оберіть один репозиторій, який ви вже добре знаєте — пакет, який ви можете оцінити вручну, вартий більше, ніж найбільше дерево, яке у вас є.&lt;/li&gt;
&lt;li&gt;Почніть безкоштовно: 3 репозиторії, 50 тисяч проіндексованих рядків, усі 11 інструментів, без місячної квоти запитів. Якщо ваш репрезентативний репозиторій більший, &lt;a href=&quot;https://maguyva.ai/uk/pricing&quot;&gt;сторінка тарифів&lt;/a&gt; перелічує рівні робочого простору ($0, $19, $49, $149) за обсягом індексації, а не за кількістю місць.&lt;/li&gt;
&lt;li&gt;Підключіть GitHub і зачекайте завершення першої індексації. Ви нічого не компілюєте локально.&lt;/li&gt;
&lt;li&gt;Підключіть MCP-клієнта — кілька рядків конфігурації. Maguyva — віддалений MCP-сервер, тож немає ні плагінів, ні розширень, ні другого редактора, який потрібно освоювати.&lt;/li&gt;
&lt;li&gt;Поставте одне запитання, яке можна перевірити. «Що залежить від parseConfig?» або «Де обробляється закінчення сесії входу?» Потім відкрийте процитовані результати &lt;code&gt;file.ext:line&lt;/code&gt; і звірте їх із деревом перед вами.&lt;/li&gt;
&lt;li&gt;Лише після того, як цитати витримають цю перевірку, дозвольте агенту редагувати.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Якщо перший репозиторій підійшов, а ваше дерево велике, підвищте робочий простір відповідно до проіндексованих рядків і періодичності перебудови. Люди й агенти ділять один і той самий лічильник користувачів — Maguyva бере плату за робочий простір, а не за місце, — тож додавання третього агента до циклу нічого вам не коштує.&lt;/p&gt;
&lt;p&gt;Тест активації той самий, що &lt;a href=&quot;https://maguyva.ai/uk/docs&quot;&gt;документація&lt;/a&gt; рекомендує для будь-якого першого запуску: проіндексуйте репозиторій, який ви вже знаєте, поставте одне запитання, яке можна перевірити. Великий репозиторій не змінює тест; він лише робить неправильний перший файл дорожчим.&lt;/p&gt;
&lt;h2 id=&quot;на-що-звертати-увагу-після-підключення&quot;&gt;На що звертати увагу після підключення&lt;/h2&gt;
&lt;p&gt;Слідкуйте за трьома речами. Актуальність: платні плани перебудовуються щогодини, безкоштовні — щодня, і непушнута локальна робота не потрапить до карти — це компроміс, на який ви йдете. Обсяг: індексуйте репрезентативний набір репозиторіїв, а не кожен заархівований форк; безкоштовний рівень навмисно розрахований на те, щоб зрозуміти, чи варті відповіді того, щоб їх зберігати. І перевірка: карта великого репозиторію, яка не може процитувати шляхи та номери рядків, — це просто повільніша машина для вгадування, тож нехай агент покаже місце, перш ніж постачати патч.&lt;/p&gt;
&lt;p&gt;Потім запустіть той самий тест, що й на маленькому репозиторії. Проіндексуйте репозиторій, який ви вже знаєте. Поставте одне запитання, яке можна перевірити. Якщо карта справжня, ваш агент перестане починати з холодного дерева.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// no laptop got hot building this map.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>MCP</category><category>Indexing</category><category>Monorepos</category></item><item><title>Чому ваш ШІ-агент для коду галюцинує шляхи до файлів</title><link>https://maguyva.ai/uk/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/why-ai-coding-agents-hallucinate-file-paths</guid><description>ШІ-агенти для коду вигадують шляхи до файлів, коли в них немає справжньої карти репозиторію. Ось чому це відбувається і як обґрунтованість веде до меншої кількості галюцинованих правок.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Ознака — не неправильне тіло функції. Це впевнена правка файлу, якого не існує, або файлу, який існує, але не реалізує потрібну поведінку.&lt;/p&gt;
&lt;p&gt;Ви попросили виправити закінчення сесії. Агент відкрив &lt;code&gt;src/auth/session.ts&lt;/code&gt;. Цей шлях правдоподібний. Він же й неправильний. Справжній обробник живе в &lt;code&gt;apps/api/src/middleware/expiry.ts&lt;/code&gt;, перейменованому два рефакторинги тому. Агент вам не збрехав. Він завершив рядок у формі шляху на основі апріорних знань із тренування плюс усього, що вже було в контекстному вікні.&lt;/p&gt;
&lt;p&gt;Це поширений патерн відмови на справжньому репозиторії. Модель уміє писати код. Помилка — у виборі неправильного місця для його написання.&lt;/p&gt;
&lt;h2 id=&quot;чому-агенти-вигадують-шляхи&quot;&gt;Чому агенти вигадують шляхи&lt;/h2&gt;
&lt;p&gt;Кодувальний агент — це модель передбачення наступного токена з інструментами. Коли ви кажете «полагодь закінчення сесії», йому потрібно назвати файл, перш ніж він зможе щось прочитати або пропатчити. Якщо в нього ще немає обґрунтованої карти, він конструює шлях із:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Угод про іменування, які він бачив в інших репозиторіях. &lt;code&gt;src/auth/session.ts&lt;/code&gt; — часта форма.&lt;/li&gt;
&lt;li&gt;Файлів, уже присутніх у розмові, які можуть бути тими, що ви вставили минулого тижня, а не тими, що важливі зараз.&lt;/li&gt;
&lt;li&gt;Лістингів каталогів, які він випадково виконав, неповних на великому дереві.&lt;/li&gt;
&lt;li&gt;Файлів інструкцій. &lt;code&gt;CLAUDE.md&lt;/code&gt; і &lt;code&gt;AGENTS.md&lt;/code&gt; кажуть агенту, як поводитися. Це не живий індекс символів, викликів чи поточних шляхів.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Жодне з цих джерел не є картою цього репозиторію сьогодні. Модель заповнює прогалину так само, як заповнює будь-яку прогалину: високоймовірним продовженням. Це продовження часто виглядає як справжній шлях. Іноді файл існує й міститься поруч із правильним. Іноді він існував у гілці, злитій минулого місяця. Іноді він ніколи не існував.&lt;/p&gt;
&lt;p&gt;Grep не врятує вас тут, якщо агент узагалі не шукає правильний рядок. Агент вгадав шлях, потім прочитав те, що цей шлях повернув, потім відредагував. Першим неправильним кроком був шлях, а не патч.&lt;/p&gt;
&lt;p&gt;Читання файлів — теж не те саме, що знаходження правильних. Claude Code, Cursor, Codex і подібні інструменти можуть відкрити що завгодно, на що ви їм вкажете. Питання в тому, чи знаходять вони надійно правильні файли, важливі символи, залежності, тести та радіус впливу до того, як редагують. Доступ до файлів без карти все одно починається з вгадування.&lt;/p&gt;
&lt;h2 id=&quot;правка-неправильного-файлу--це-проблема-пошуку&quot;&gt;Правка неправильного файлу — це проблема пошуку&lt;/h2&gt;
&lt;p&gt;Ставтеся до вигаданого шляху як до промаху пошуку, а не як до дефекту характеру.&lt;/p&gt;
&lt;p&gt;Якби агенту потрібно було повернути &lt;code&gt;path/file.ext:line&lt;/code&gt;, перш ніж йому дозволять редагувати, сталися б дві речі. По-перше, ви могли б відкрити цитату й відхилити роботу за десять секунд. По-друге, агенту довелося б запитати щось, що справді знає дерево.&lt;/p&gt;
&lt;p&gt;Це робота шару контексту кодової бази. Самого семантичного пошуку недостатньо. Фрагмент, що «звучить як закінчення сесії», усе одно може приземлитися в застарілому пакеті. Вам також потрібен точний текст, коли ви знаєте рядок, пошук символів, коли ви знаєте ім’я, структурний пошук, коли ви знаєте форму, і граф залежностей, коли вам потрібні виклики й радіус впливу.&lt;/p&gt;
&lt;p&gt;Maguyva — цей шар для MCP-сумісних кодувальних агентів. Це не редактор. Claude Code, Cursor, Codex CLI, VS Code, Windsurf та інші MCP-клієнти залишаються там, де вони є. Агент запитує ранжовану карту, перш ніж торкнутися рядка.&lt;/p&gt;
&lt;p&gt;Твердження навмисно скромне: менше галюцинованих правок. Maguyva не позбавляє модель здатності вгадувати. Вона змінює перший крок за замовчуванням із «вигадати правдоподібний шлях» на «запитати ранжовані, процитовані місця».&lt;/p&gt;
&lt;h2 id=&quot;як-виглядає-обґрунтована-відповідь&quot;&gt;Як виглядає обґрунтована відповідь&lt;/h2&gt;
&lt;p&gt;Корисна відповідь на питання «де обробляється закінчення сесії» — не абзац тексту. Це короткий список місць:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;apps/api/src/middleware/expiry.ts:48&lt;/code&gt; - обробник&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/web/src/lib/auth-client.ts:112&lt;/code&gt; - виклик&lt;/li&gt;
&lt;li&gt;&lt;code&gt;apps/api/tests/expiry.test.ts:20&lt;/code&gt; - тест, який впаде, якщо зміна неправильна&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ви можете відкрити ці рядки. Якщо вони неправильні, ви зупиняєтеся. Якщо правильні, агент може редагувати. Суть у перевірці, а не в гаслі.&lt;/p&gt;
&lt;p&gt;Maguyva надає 11 клієнтських MCP-інструментів для пошуку, символів, аналізу залежностей, отримання файлів, контексту репозиторію та детермінованих службових робочих процесів. Чотири режими пошуку (семантичний, структурний, графовий/залежнісний і текстовий) зливаються в ранжовані результати; пошук символів — окремий MCP-інструмент (&lt;code&gt;find_symbol&lt;/code&gt;). Обґрунтовані відповіді повертаються зі шляхами до файлів і номерами рядків, тож ви можете оцінювати їх за деревом перед вами.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://maguyva.ai/uk/docs&quot;&gt;Документація&lt;/a&gt; описує найкоротший шлях: почати безкоштовно, проіндексувати репозиторій, який ви вже знаєте, підключити клієнта, потім поставити одне запитання, яке можна перевірити.&lt;/p&gt;
&lt;h2 id=&quot;цикл-що-змінює-першу-правку&quot;&gt;Цикл, що змінює першу правку&lt;/h2&gt;
&lt;p&gt;Вам не потрібна нова релігія робочого процесу. Вам потрібен один додатковий крок перед першим записом.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Поставте запитання, яке ви вже можете оцінити. «Який код обробляє вхід і закінчення сесії?» краще, ніж «полагодь автентифікацію».&lt;/li&gt;
&lt;li&gt;Вимагайте цитат. Шлях до файлу й номер рядка, а не переказ «модуля автентифікації».&lt;/li&gt;
&lt;li&gt;Відкрийте процитовані файли. Простежте символ. Підтвердьте залежність, яку ви збираєтеся торкнутися.&lt;/li&gt;
&lt;li&gt;Лише тоді дозвольте агенту пропатчити.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Якщо крок 2 не повертає нічого корисного, у агента немає права імпровізувати шлях. Він шукає знову, або ви йому вказуєте. Саме цей єдиний бар’єр виробляє менше галюцинованих правок. Модель — та сама модель. Змінилася карта.&lt;/p&gt;
&lt;p&gt;Файли інструкцій досі важливі. Збережіть їх. Використовуйте їх для угод, правил рев’ю та того, чого не слід торкатися. Не просіть їх бути індексом. &lt;code&gt;CLAUDE.md&lt;/code&gt;, що перелічує три важливі каталоги, застаріє через тиждень після поділу пакета. Запитувана карта оновлюється, коли оновлюється репозиторій.&lt;/p&gt;
&lt;p&gt;Споріднений збій — майже правильний файл: агент відкриває &lt;code&gt;auth.ts&lt;/code&gt;, коли поведінка живе в &lt;code&gt;auth-client.ts&lt;/code&gt;, або патчить згенерований файл замість вихідного, або редагує копію в &lt;code&gt;packages/legacy&lt;/code&gt;, бо ім’я збіглося. Цитати не роблять ці помилки неможливими. Вони роблять їх видимими до того, як diff приземлиться.&lt;/p&gt;
&lt;h2 id=&quot;чого-карта-не-виправить-за-вас&quot;&gt;Чого карта не виправить за вас&lt;/h2&gt;
&lt;p&gt;Будьте тверезі щодо того, що ви отримуєте. Обґрунтована карта не зробить кожну правку правильною — ваш агент усе одно може написати поганий патч у точно правильному файлі. Якщо ваша кодова база спирається на динамічну диспетчеризацію, рефлексію чи манкіпатчинг, деякі пошуки символів повертатимуться біднішими, ніж вам хотілося б, бо саме це робить рантайм-непрямість з будь-яким статичним індексом. І якщо ви сподіваєтеся на відсоток — «галюциновані шляхи скоротилися на X%» — ви його тут не знайдете, бо ніхто, крім вас самих, не може чесно виміряти цю цифру для вашого репозиторію.&lt;/p&gt;
&lt;p&gt;Чого ви можете очікувати — вужче й корисніше: агент перестає починати правки з вгаданого шляху. Цей перший крок стає обґрунтованим справжньою картою, і саме звідси береться менше галюцинованих правок. Усе після цитати — читання diff, оцінка патча — і далі ваша робота, як і завжди.&lt;/p&gt;
&lt;p&gt;Цей тест майже нічого вам не коштує: проіндексуйте репозиторій, який ви вже знаєте, і поставте одне запитання, яке можна перевірити. Почніть зі шляху, на якому вас уже обпікало. Якщо цитати неправильні, ви побачите це негайно. Якщо правильні, наступна правка вашого агента отримає краще місце для приземлення.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// it doesn&apos;t know the file. it knows how to find it.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>AI Agents</category><category>Hallucination</category><category>Retrieval</category><category>MCP</category></item><item><title>Чому ми оновили пошук коду до voyage-4-large</title><link>https://maguyva.ai/uk/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/upgrading-code-search-to-voyage-4-large</guid><description>Ми перевели наші ембеддинги коду на voyage-4-large — модель, що наразі очолює публічний рейтинг RTEB для пошуку коду. Чесна версія: компроміс, на який ми йдемо, що ми насправді індексуємо, і чому ми платимо за преміум-ембеддинги.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа бенчмарків у цьому дописі відображають рейтинги RTEB на момент публікації (червень 2026). Рейтинги змінюються; сприймайте позиції як знімок моменту, а не постійний факт.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Семантичний пошук настільки хороший, наскільки хороші ембеддинги під ним.&lt;/p&gt;
&lt;p&gt;Коли агент запитує Maguyva «де ми обробляємо повторні спроби», він не грепає слово «retry». Він запитує &lt;em&gt;сенс&lt;/em&gt; — цикл backoff, запобіжник (circuit breaker), те, що обгортає ненадійний виклик. На це запитання відповідає векторна модель, що перетворює код на точку в просторі й знаходить сусідів. Оберіть кращу модель, і кожен семантичний запит у продукті тихо стає точнішим.&lt;/p&gt;
&lt;p&gt;Тож ми змінили нашу. Станом на червень 2026 року ембеддинги коду Maguyva працюють на &lt;strong&gt;&lt;code&gt;voyage-4-large&lt;/code&gt;&lt;/strong&gt;, замінивши &lt;code&gt;voyage-code-3&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;бенчмарк&quot;&gt;Бенчмарк&lt;/h2&gt;
&lt;p&gt;Ми не ухвалювали це рішення на відчуттях. Публічний &lt;a href=&quot;https://embedding-benchmark-rteb.hf.space/code&quot;&gt;Retrieval Embedding Benchmark (RTEB)&lt;/a&gt; ранжує моделі ембеддингів на реальних задачах пошуку, і в його рейтингу &lt;strong&gt;Code&lt;/strong&gt; &lt;code&gt;voyage-4-large&lt;/code&gt; посідає &lt;strong&gt;#1 загалом (90.86)&lt;/strong&gt; — попереду &lt;code&gt;gemini-embedding-2-preview&lt;/code&gt; (90.26) і, що важливо, попереду моделі, яку ми вже використовували, &lt;code&gt;voyage-code-3&lt;/code&gt; (89.73, #3).&lt;/p&gt;
&lt;p&gt;Це невеликий абсолютний розрив. Але це розрив у правильному напрямку, на публічному бенчмарку, на точно тій задачі, яка нас цікавить: пошук коду за сенсом.&lt;/p&gt;
&lt;h2 id=&quot;компроміс-на-який-ми-йдемо-бінарна-квантизація&quot;&gt;Компроміс, на який ми йдемо: бінарна квантизація&lt;/h2&gt;
&lt;p&gt;Ось та частина, яку більшість дописів «ми оновили нашу модель» пропускають.&lt;/p&gt;
&lt;p&gt;Maguyva не зберігає вектори повної точності. Ми зберігаємо &lt;strong&gt;бінарно-квантизовані&lt;/strong&gt; ембеддинги: кожен 2048-вимірний вектор стискається до 2048-бітного підпису — &lt;strong&gt;256 байт на вектор&lt;/strong&gt;. Ці підписи шукаються за відстанню Хеммінга, індексовані та розділені по тенантах.&lt;/p&gt;
&lt;p&gt;Це навмисний компроміс. Бінарна квантизація жертвує деякою точністю пошуку в обмін на значно менший обсяг зберігання та швидке й дешеве обчислення відстані без окремої векторної бази даних для експлуатації. Для продукту, що індексує цілі репозиторії на робочий простір, ця економіка важливіша, ніж вичавлювання останньої частки бенчмаркового балу.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;voyage-4-large&lt;/code&gt; вписується в цей дизайн без примусової міграції шару сховища: вона видає 2048-вимірний вивід, так само як &lt;code&gt;voyage-code-3&lt;/code&gt;, тож наші колонки &lt;code&gt;bit(2048)&lt;/code&gt; та шлях пошуку за Хеммінгом не змінилися. Модель стала кращою; схема залишилася на місці.&lt;/p&gt;
&lt;h2 id=&quot;код-був-лише-початком&quot;&gt;Код був лише початком&lt;/h2&gt;
&lt;p&gt;Maguyva — інструмент інтелекту коду. Але ми також клієнт номер нуль, і ми спрямовуємо його на дещо інше: markdown, що живе в наших репозиторіях поруч з кодом. Записи архітектурних рішень, runbook-и, контракти, фінансові документи та внутрішні політики — усе це під контролем версій у Git, усе за тим самим сервером MCP, семантичний індекс над &lt;em&gt;документами&lt;/em&gt;, а не лише над джерельним кодом.&lt;/p&gt;
&lt;p&gt;Саме тому широта voyage-4-large має значення. У тій самій родині рейтингів RTEB вона &lt;strong&gt;#1 у фінансах, #1 в охороні здоров’я і #1 у загальному текстовому пошуку&lt;/strong&gt; — попереду Gemini Embedding від Google, Embed v4 від Cohere та text-embedding-3-large від OpenAI. (Voyage — співтворець RTEB, тож ми сприймаємо це як сильний публічний сигнал, а не як абсолютно нейтрального суддю — але вона бенчмаркується напряму проти кожної великої комерційної моделі на приватних відкладених наборах.) Той самий індекс, що знаходить потрібну функцію для агента, знаходить потрібне положення в контракті чи потрібний рядок у документі внутрішньої політики — і в цих доменах voyage-4-large не компроміс, а лідер.&lt;/p&gt;
&lt;h2 id=&quot;чому-ми-платимо-за-преміум-ембеддинги&quot;&gt;Чому ми платимо за преміум-ембеддинги&lt;/h2&gt;
&lt;p&gt;Існує дешевший спосіб робити пошук, і чимало з нього безкоштовне. Лексичний пошук — BM25 та його родичі — зіставляє ключові слова, працює локально й нічого не коштує. Моделі ембеддингів з відкритим кодом на кшталт BGE, Nomic та embeddinggemma дають справді &lt;em&gt;пристойний&lt;/em&gt; семантичний пошук, і їх можна хостити самостійно за ціну GPU. Maguyva також використовує безкоштовний бік: кожен запит зливає текстовий, AST, графовий та семантичний пошук. На чому ми не економимо — це семантичний шар.&lt;/p&gt;
&lt;p&gt;Ми платимо за токен за преміум-ембеддинги — &lt;code&gt;voyage-4-large&lt;/code&gt; — замість того щоб самостійно хостити безкоштовну модель, з двох причин. По-перше, самого лише пошуку за ключовими словами недостатньо, щоб відповісти на «де ми обробляємо повторні спроби», коли код каже &lt;code&gt;backoff&lt;/code&gt; та &lt;code&gt;circuit breaker&lt;/code&gt; і ніколи не каже слово «retry» — саме передавання сенсу є призначенням ембеддингу, і в доменах, які ми обслуговуємо, відкриті моделі відстають від преміум: на пару балів на загальному тексті, і ще більше в нішах на кшталт коду, контрактів та фінансів. По-друге, за нашим досвідом, якість пошуку формує фінальну відповідь більше, ніж модель на іншому кінці — сильний агент, якому дали неправильний контекст, все одно відповість неправильно, і він ніколи не побачить документ, якого йому ніколи не дали.&lt;/p&gt;
&lt;p&gt;Тож преміум-ембеддинги — це рахунок за токен, що масштабується з кожним репозиторієм і документом, який ми індексуємо — і ми платимо його навмисно. Заради результату, який отримують наші користувачі — правильної функції чи правильного положення — ми вважаємо, що цей компроміс вартий того.&lt;/p&gt;
&lt;h2 id=&quot;чесна-частина&quot;&gt;Чесна частина&lt;/h2&gt;
&lt;p&gt;Власна документація Voyage все ще позначає &lt;code&gt;voyage-code-3&lt;/code&gt; як модель, оптимізовану для коду. То чому ж перехід?&lt;/p&gt;
&lt;p&gt;Бо ми читаємо публічний бенчмарк, а не лише таблицю моделей вендора, а бенчмарк поставив &lt;code&gt;voyage-4-large&lt;/code&gt; на вершину для пошуку коду. Це було рішення з поглядом уперед: взяти новішу, загалом сильнішу модель і валідувати її проти публічного рейтингу на задачах, які мають значення. Нам комфортно робити цю ставку, бо докази широкі — voyage-4-large не просто перемагає в коді, вона також лідирує у фінансах, охороні здоров’я та загальному пошуку.&lt;/p&gt;
&lt;h2 id=&quot;непомітна-основа&quot;&gt;Непомітна основа&lt;/h2&gt;
&lt;p&gt;Кожен інструмент, який ми надаємо — семантичний пошук, збір контексту задачі, обґрунтовані запитання й відповіді — врешті-решт спирається на пошук. Коли ретрівер покращується, агент на іншому кінці отримує кращі докази, рідше ухвалює хибні рішення і обґрунтовує свої відповіді правильним кодом — або потрібним положенням контракту чи потрібною внутрішньою політикою. Точніша модель ембеддингів — не яскрава функція. Це основа всього іншого, і ми щойно підвищили її якість. Ви цього не помітите. У цьому й суть.&lt;/p&gt;
</content:encoded><category>Embeddings</category><category>Search</category><category>Architecture</category></item><item><title>Рекурсивне самовдосконалення мов: шліфування інтелекту коду для ~280 мов</title><link>https://maguyva.ai/uk/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/autonomous-quality-loops-language-grind</guid><description>Ми підтримуємо інтелект коду для ~280 мов. Жодна людина не здатна вручну перевірити це. Тож ми побудували цикл рекурсивного самовдосконалення мов — вибіркова перевірка, LLM як суддя, виправлення одного пункту, повторна валідація — і запускаємо його з флотом ізольованих агентів, доки вилучення не стане справді правильним, а не просто «зеленим».</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа в цьому дописі відображають стан системи на момент публікації (травень 2026). Актуальні цифри дивіться на нашій &lt;a href=&quot;https://maguyva.ai/uk/team&quot;&gt;сторінці команди&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Maguyva вилучає символи, посилання та граф залежностей із вихідного коду приблизно 280 мов. Кожна мова — це кастомний обробник tree-sitter — запити, евристики, крайові випадки — і кожен обробник може бути хибним по-своєму, тонко й непомітно. Виклик методу, поданий як читання. Функція, приписана не тій зовнішній області видимості. Зв’язок, якого просто не існує.&lt;/p&gt;
&lt;p&gt;Це неможливо перевірити вручну. Жодна команда не здатна прочитати результати вилучення для 280 граматик і виявити погані ребра графа. Тож цікаве запитання не «чи правильне наше вилучення» — а «як &lt;em&gt;дізнатися&lt;/em&gt;, що воно неправильне, за такого масштабу, без людини в кожному циклі». Наша відповідь — рекурсивне самовдосконалення мов: цикл якості, керований мовними агентами, LLM у ролі судді, і одне правило, яке ми постійно засвоюємо заново: зелений не означає правильний.&lt;/p&gt;
&lt;h2 id=&quot;зелений-не-означає-правильний&quot;&gt;Зелений не означає правильний&lt;/h2&gt;
&lt;p&gt;Кожна мова має набір фікстур, і перевірка перед випуском оцінює її за п’ятьма вимірами — точність, структурна цілісність, повнота, якість та продуктивність. Мова стає &lt;strong&gt;GREEN (зеленою)&lt;/strong&gt; лише тоді, коли на її фікстурах precision ≥ 0.95, recall ≥ 0.99 та F1 ≥ 0.97, з щонайменше 20 очікуваними ребрами для статистичної довіри. Нижче цього — YELLOW чи RED, і мова не постачається.&lt;/p&gt;
&lt;p&gt;Ця перевірка необхідна, але недостатня. Фікстури перевіряються за фікстурами, &lt;em&gt;які написали ми самі&lt;/em&gt;. Вони кодують випадки, які ми вже передбачили. Обробник може бути бездоганним на своїх фікстурах і все одно спотворювати патерн, який трапляється лише в реальному коді — макро-ідіому, метод з обмеженнями узагальненого типу, мовну особливість, для якої ніхто не написав фікстуру. GREEN означає, що фікстури проходять. Це не означає, що реальний репозиторій вилучається чисто. Тож циклу доводиться залишити фікстури позаду й перевірити реальний код.&lt;/p&gt;
&lt;h2 id=&quot;внутрішній-цикл-вибіркова-перевірка-суддя-виправлення-доведення&quot;&gt;Внутрішній цикл: вибіркова перевірка, суддя, виправлення, доведення&lt;/h2&gt;
&lt;p&gt;Основний цикл обробляє одну мову за раз:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ┌──────────────────────────────────────────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  1. corpus run ── clone real-world repos, extract relationships   │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  2. spot-check 100 edges (seed 42, then seed 123 to cross-check)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  3. LLM judge classifies every sampled edge:                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        CORRECT · FALSE_POSITIVE · TYPE_ERROR ·                    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        SCOPE_ERROR · METADATA_ERROR                               │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  4. fix ONE thing — handler .py, .scm query, or config           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  5. re-validate — F1 + re-classify + manifest diff (no regressions)│&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │                                                          │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   better? ──no──► revert, try a different fix ────────────────────┤&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │ yes                                                       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼                                                           │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  6. promote the fix into fixtures (a permanent regression guard) ──┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Кілька принципів допомагають цьому процесу давати результат, а не тупцювати на місці.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Суддя — це агент, а не виклик API.&lt;/strong&gt; Коли ми кажемо «LLM як суддя», ми маємо на увазі, що сам мовний агент звіряє кожне вибране ребро графа з реальним вихідним кодом і класифікує його за фіксованою рубрикою з п’яти категорій: чи це ребро правильне, хибнопозитивне, правильний зв’язок з неправильним типом, прив’язане не до тієї області видимості, чи несе неправильні метадані? Ця рубрика — вся суть гри: «23% рівень помилок» нічого не означає, доки ви не знаєте, чи це реальні дефекти, чи суддя рахує неправильно.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Виправити одну річ, потім довести це.&lt;/strong&gt; Кожна ітерація змінює рівно один редагований файл, потім повторно виконує перевірку в незмінному тестовому середовищі і зберігає зміну лише тоді, коли F1 покращується, а повторна класифікація виглядає краще. Якщо ні — зміна відкочується. Жодного пакетного набору правок на основі припущень, жодного «має стати краще». Зміна заслуговує на своє місце, або зникає. А коли виправлення закріплюється, воно потрапляє в набір фікстур — тож баг, який воно виправило, більше ніколи мовчки не повернеться. Саме цей крок промоції робить цикл &lt;em&gt;рекурсивним&lt;/em&gt;, а не просто повторюваним: кожен прохід зміцнює оракул, проти якого валідується наступний прохід.&lt;/p&gt;
&lt;h2 id=&quot;урок-який-ми-постійно-засвоюємо-заново-метрики-завищують-кількість-проблем&quot;&gt;Урок, який ми постійно засвоюємо заново: метрики завищують кількість проблем&lt;/h2&gt;
&lt;p&gt;Ось пастка, і ми прямо в неї потрапили. Вторинні метрики корпусу — як часто вилучена ціль не має символу, який можна визначити, скільки символів виглядають «осиротілими» і так далі — масово завищують кількість проблем. Здебільшого це &lt;em&gt;артефакти парадигми&lt;/em&gt;, а не баги.&lt;/p&gt;
&lt;p&gt;Найчистіший приклад: &lt;code&gt;llvm&lt;/code&gt; одного разу показав 73% рівень «джерела без символу» і був заклеймований як катастрофічний. Ми копнули глибше. Реальна точність становила &lt;strong&gt;98.5%&lt;/strong&gt;. «Відсутні символи» майже всі були легітимними зовнішніми посиланнями — викликами до стандартної бібліотеки, до фреймворків, до коду, що живе поза репозиторієм. Метрика вимірювала властивість мови, а не дефект обробника. Мови на кшталт Zig, COBOL та Odin показують рівень «осиротілості» 65–70% і при цьому цілком правильні; у COBOL не було жодної реальної помилки.&lt;/p&gt;
&lt;p&gt;Якби ми дозволили цим числам керувати роботою, ми витратили б тижні на «виправлення» обробників, які вже були правильними, ігноруючи мови з тихими, реальними багами. Висновок різкий: агреговані метрики в найкращому разі — грубий сигнал для тріажу. &lt;strong&gt;Справжній сигнал якості — це вибіркова перевірка з класифікацією ребер&lt;/strong&gt; — погляд на реальні ребра в реальних репозиторіях і суддівство по одному. Дані понад інтуїцію, але лише коли ви знаєте, які дані кажуть правду.&lt;/p&gt;
&lt;h2 id=&quot;зовнішній-цикл-флот-а-не-марафон&quot;&gt;Зовнішній цикл: флот, а не марафон&lt;/h2&gt;
&lt;p&gt;Обробка однієї мови за раз для всіх 280 тривала б вічність, тож внутрішній цикл обгорнутий у зовнішній, що запускає багато мов паралельно.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   pick a wave of near-GREEN / high-error languages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   fan out 10–15 agents, each ISOLATED in its own git worktree,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   each grinding ONE language, committing to its own branch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   orchestrator integrates serially: file-scoped apply, then&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   `manifest diff` — any cross-language regression blocks the batch&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;        ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;   gated push (reviewed and confirmed) ──► rotate to the next wave&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Кожен агент працює у тимчасовому робочому дереві (worktree), щоб вони не заважали одне одному. Оркестратор інтегрує їхні виправлення по одному, кожне за перевіркою регресії на повному маніфесті: зміна, яка допомагає своїй власній мові, але тихо ламає три інші, не приймається. Інтеграція проходить перевірку й отримує підтвердження, перш ніж щось буде відправлено (push) — перевірка на регресії визначає, що &lt;em&gt;безпечно&lt;/em&gt;, людина все ще вирішує, що &lt;em&gt;постачається&lt;/em&gt;. Потім пул перемикається на наступний набір мов, і весь процес запускається знову.&lt;/p&gt;
&lt;h2 id=&quot;що-досі-недосконале&quot;&gt;Що досі недосконале&lt;/h2&gt;
&lt;p&gt;Суддя може помилятися, і в цієї помилковості є напрямок: агент, що працює з надто малим контекстом, &lt;em&gt;завищує кількість проблем&lt;/em&gt;. В одній партії вісім мов було позначено з 5–20% помилок; під час перевірки реальний баг підтвердився лише в одній мові — решта були помилками судді через пропуск власної семантики мови (один рядок джерела легітимно породжує кілька ребер, зв’язування параметрів моделюється як присвоєння, мови з посиланням на кожен ідентифікатор). Саме тому ми вибираємо з двома сідами (seeds) і перехресно перевіряємо, і саме тому розбіжність між суддею і фікстурами трактується як &lt;em&gt;найцікавіший&lt;/em&gt; сигнал, а не остаточний вердикт — іноді помиляється саме фікстура.&lt;/p&gt;
&lt;p&gt;Ми також чесні щодо мети. Мета — нуль реальних помилок, крапка — але «нуль» це напрямок, до якого ми послідовно рухаємося, вдосконалюючи підтримку кожної мови, а не галочка, яку можна поставити. Завжди є ще один репозиторій з ще однією ідіомою.&lt;/p&gt;
&lt;h2 id=&quot;заслужене-а-не-заявлене&quot;&gt;Заслужене, а не заявлене&lt;/h2&gt;
&lt;p&gt;Усе, що Maguyva робить для агента — знаходить символ, простежує залежність, відповідає на запитання з цитованим кодом — спирається на те, що вилучення, на якому все це ґрунтується, працює правильно. У межах 280 мов «правильність» не можна просто заявити; її потрібно постійно &lt;em&gt;заслуговувати&lt;/em&gt; на реальному коді. Цикл — це те, як ми її заслуговуємо: автономний цикл вибіркової перевірки й виправлення, що ставиться до власних метрик з підозрою, доводить кожну зміну і перетворює кожне виправлення на запобіжник проти наступної регресії. Це не гламурно. Це та робота, яка дозволяє нам сказати «ми підтримуємо вашу мову» і мати це на увазі. Зелений — легко. Правильний — заслужений.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Languages</category><category>Agents</category></item><item><title>Мультимодальний пошук зі злиттям: обираємо правильний ретрівер для кожного запиту</title><link>https://maguyva.ai/uk/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/multi-modal-fusion-search</guid><description>Запит на кшталт «де визначено parseConfig» потребує іншого пошуку, ніж «як працює автентифікація». Maguyva класифікує намір, відповідно зважує чотири режими пошуку і зливає результати за допомогою зваженого Reciprocal Rank Fusion.</description><pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Примітка про історичну архітектуру: ця стаття від квітня 2026 року описує тогочасну архітектуру маршрутизації, а не поточну поведінку за замовчуванням. Вересневе виправлення нижче стосується лише твердження про вимірювання. Про поточну маршрутизацію, попередньо задані налаштування та явне керування модальностями див. &lt;a href=&quot;https://maguyva.ai/uk/docs/how-it-works&quot;&gt;Як це працює&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Пошуковий запит — це не одна річ.&lt;/p&gt;
&lt;p&gt;«де визначено &lt;code&gt;parseConfig&lt;/code&gt;» хоче точний символ — одне точне місце, швидко. «як працює автентифікація» хоче сенс — розкидані пов’язані фрагменти коду, що пояснюють концепцію. «що зламається, якщо я зміню цю функцію» хоче граф залежностей. «знайди рядок &lt;code&gt;ECONNREFUSED&lt;/code&gt;» хоче буквальний збіг, нічого хитрого.&lt;/p&gt;
&lt;p&gt;Grep чудовий для буквальних збігів і корисний для деяких пошуків посилань, але це не граф залежностей, і він не розуміє сенсу. Ембеддинги покривають семантичний бік, але вони — неправильний інструмент для точних рядків та аналізу впливу. Більшість інструментів пошуку коду обирають один рушій і змушують кожен запит жити з цим вибором. Maguyva не обирає. Він з’ясовує, яке саме запитання ви поставили, а потім змішує чотири ретрівери в пропорції, якої заслуговує це запитання.&lt;/p&gt;
&lt;h2 id=&quot;чотири-режими&quot;&gt;Чотири режими&lt;/h2&gt;
&lt;p&gt;Під капотом є чотири незалежні способи знайти код:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;semantic&lt;/strong&gt; — векторний пошук за бінарними ембеддингами Voyage; знаходить код за сенсом.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;text&lt;/strong&gt; — триграмне зіставлення; знаходить літерали, рядки помилок, точні ідентифікатори.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;structural&lt;/strong&gt; — запити AST; знаходить визначення, сигнатури та мовні конструкції.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;graph&lt;/strong&gt; — граф залежностей; знаходить викликачів, викликаних та радіус впливу.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кожен сильний у своєму класі запитань. Хитрість у тому, щоб вирішити, наскільки довіряти кожному для конкретного запиту перед вами.&lt;/p&gt;
&lt;h2 id=&quot;класифікація-наміру&quot;&gt;Класифікація наміру&lt;/h2&gt;
&lt;p&gt;Перш ніж запуститься будь-який пошук, легкий класифікатор сортує запит в один з шести намірів, з оцінкою впевненості. Він навмисно дешевий — упорядковані евристики, перший збіг перемагає — бо працює на гарячому шляху й додає лише мілісекунду-дві:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;починається з &lt;code&gt;def &lt;/code&gt;, &lt;code&gt;class &lt;/code&gt;, &lt;code&gt;func &lt;/code&gt;, &lt;code&gt;import &lt;/code&gt;… → &lt;strong&gt;find_definition&lt;/strong&gt; (впевненість 0.95)&lt;/li&gt;
&lt;li&gt;«who calls», «usages of», «references to» (хто викликає, використання, посилання) → &lt;strong&gt;find_references&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;«impact», «blast radius», «what depends on» (вплив, радіус впливу, що від цього залежить) → &lt;strong&gt;impact_analysis&lt;/strong&gt; (0.90)&lt;/li&gt;
&lt;li&gt;рядок у лапках &lt;code&gt;&quot;string&quot;&lt;/code&gt; чи токен помилки на кшталт &lt;code&gt;traceback&lt;/code&gt; → &lt;strong&gt;exact_match&lt;/strong&gt; (0.85–0.90)&lt;/li&gt;
&lt;li&gt;ідентифікатор &lt;code&gt;CamelCase&lt;/code&gt; чи &lt;code&gt;snake_case&lt;/code&gt; → &lt;strong&gt;find_definition&lt;/strong&gt; (0.60–0.80)&lt;/li&gt;
&lt;li&gt;«how», «why», «explain», «architecture» (як, чому, пояснення, архітектура) → &lt;strong&gt;understand_code&lt;/strong&gt; (0.75)&lt;/li&gt;
&lt;li&gt;нічого не збігається → &lt;strong&gt;understand_code&lt;/strong&gt;, низька впевненість (0.40)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кожен намір несе профіль ваг серед чотирьох режимів. Ось реальні цифри:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Намір&lt;/th&gt;
&lt;th&gt;semantic&lt;/th&gt;
&lt;th&gt;text&lt;/th&gt;
&lt;th&gt;structural (AST)&lt;/th&gt;
&lt;th&gt;graph&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;find_definition&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.6&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_references&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;understand_code&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.5&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;find_similar&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.4&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.3&lt;/td&gt;
&lt;td&gt;0.2&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;impact_analysis&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.7&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;exact_match&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;0.9&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;0.1&lt;/td&gt;
&lt;td&gt;0.0&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Тож «де визначено &lt;code&gt;parseConfig&lt;/code&gt;» сильно спирається на AST (0.6). «як працює автентифікація» спирається на семантичні вектори (0.5). «що залежить від цього» майже повністю graph (0.7). «знайди &lt;code&gt;ECONNREFUSED&lt;/code&gt;» майже повністю триграма (0.9), а модель ембеддингів повністю вимкнена — бо семантична подібність це саме неправильний інструмент для точного рядка.&lt;/p&gt;
&lt;h2 id=&quot;швидкий-шлях-і-шлях-зі-злиттям&quot;&gt;Швидкий шлях і шлях зі злиттям&lt;/h2&gt;
&lt;p&gt;Коли класифікатор впевнений — оцінка ≥ 0.85 — і запит звичайний, Maguyva повністю пропускає злиття й спрямовує запит прямо в єдиний домінантний режим. «де визначено X» не потребує чотирьох ретріверів; йому потрібен індекс AST, зараз. Цей прямий шлях повідомляється назад як &lt;code&gt;fusion_strategy: &quot;direct&quot;&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Усе неоднозначне проходить через злиття. Чотири (або три, у пресеті за замовчуванням) режими запускаються паралельно, кожен повертає свій ранжований список, і ми їх об’єднуємо.&lt;/p&gt;
&lt;h2 id=&quot;зважене-reciprocal-rank-fusion&quot;&gt;Зважене Reciprocal Rank Fusion&lt;/h2&gt;
&lt;p&gt;Злиття різнорідних ретріверів складніше, ніж здається: косинусна подібність 0.82, триграмна оцінка 137 і графова центральність 0.004 — не в одній шкалі, тож просто скласти їх не можна. Reciprocal Rank Fusion обходить проблему, відкидаючи сирі оцінки й залишаючи лише &lt;strong&gt;ранг&lt;/strong&gt;, який присвоїв кожен рушій. Внесок результату від одного режиму:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;contribution = weight × 1 / (k + rank + 1)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;де &lt;code&gt;rank&lt;/code&gt; — його позиція в списку цього режиму, а &lt;code&gt;k&lt;/code&gt; — константа згладжування. Внески підсумовуються серед режимів для будь-якого результату, який знайшов більш ніж один рушій — узгодженість між ретріверами природно спливає нагору. Ми використовуємо &lt;strong&gt;k = 40&lt;/strong&gt; у пресеті за замовчуванням і 60 на &lt;code&gt;thorough&lt;/code&gt; (&lt;code&gt;quick&lt;/code&gt; працює лише семантично, тож злиття там ніколи не задіюється). Оригінальна робота з RRF зупинилася на k = 60 для загального пошуку; наше налаштування за замовчуванням дещо сильніше виділяє верхні позиції, надаючи трохи більшу вагу результатам, які кілька режимів одночасно ранжують високо — і ми не рекомендуємо налаштовувати це вручну.&lt;/p&gt;
&lt;p&gt;Окрім цього, результати несуть &lt;strong&gt;посилення за важливістю графа&lt;/strong&gt;. Хаб — функція, на яку спирається вся кодова база — має обходити за рангом малопомітний листовий вузол, навіть за однакової текстової релевантності, тож ми множимо кожен внесок на:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;boost = min(1 + 0.3 × ln(1 + centrality), 1.5)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Центральність береться з попередньо обчислених метрик PageRank/ступеня конвеєра, а посилення обмежене 1.5×, щоб популярна функція не могла повністю поховати релевантнішу, але малопомітну. Насамкінець ми знижуємо ранг результатів зі шляхів vendor, build та archive, і усуваємо дублікати, залишаючи найкращий фрагмент на файл.&lt;/p&gt;
&lt;h2 id=&quot;що-досі-недосконале&quot;&gt;Що досі недосконале&lt;/h2&gt;
&lt;p&gt;Класифікатор наміру — це набір регулярних виразів, а не навчена модель. Він обробляє поширені форми запитів за допомогою евристик, а неоднозначний запит переходить до &lt;code&gt;understand_code&lt;/code&gt; і суміші з перевагою семантики. У попередній версії цієї статті зниження частки запитів без результатів приблизно з 15% до менш ніж 5% було описано як досягнуте. Насправді пропозиція від грудня 2025 року містила оцінку початкового рівня та цільове значення; підтвердного набору запитів або протоколу вимірювань не надано. Ми відкликаємо це твердження про досягнуте поліпшення; див. &lt;a href=&quot;https://maguyva.ai/evidence/search-quality.md&quot;&gt;вихідні підтвердні матеріали та виправлення (англійською)&lt;/a&gt;. Ми не замінили класифікатор навченою моделлю, бо недорога версія досить швидка й придатна для своєї задачі маршрутизації, а хибний, але впевнений класифікатор гірший за чесний запасний варіант. Самі ваги — це вручну обрані апріорні значення, а не значення, вивчені з даних про кліки, яких ми не збираємо.&lt;/p&gt;
&lt;h2 id=&quot;став-запитання-а-вибір-інструмента-залиш-системі&quot;&gt;Став запитання, а вибір інструмента залиш системі&lt;/h2&gt;
&lt;p&gt;Агенту не повинно бути потрібно знати, чи тягнутися до grep, чи до ембеддингів, чи до графа викликів — він має ставити своє запитання простими словами й отримувати правильну відповідь. Мультимодальне злиття — це те, що дозволяє &lt;code&gt;find_symbol&lt;/code&gt;, семантичному пошуку та аналізу залежностей працювати через єдиний інтерфейс запитів: система читає форму запитання й тихо збирає для нього правильний ретрівер. Модель, що оцінює ембеддинги, важлива, але так само важливо знати, коли &lt;em&gt;не&lt;/em&gt; використовувати їх. Обрати правильний інструмент для кожного запиту — це свій особливий вид якості, і ми радше візьмемо його на себе, ніж перекладемо на того, хто викликає.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;// you bring the question. it brings the tools.&lt;/code&gt;&lt;/p&gt;
</content:encoded><category>Search</category><category>Architecture</category></item><item><title>Спостережуваність агентів: хуки, Alloy та Grafana</title><link>https://maguyva.ai/uk/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/agent-observability-hooks-alloy-grafana</guid><description>Ми під&apos;єднали Claude Code та Codex до єдиного стеку Grafana за допомогою OpenTelemetry та Alloy, а потім використали трейси й логи, щоб знаходити та виправляти проблеми в поведінці агентів у джерелі.</description><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Агентні системи ламаються дивними способами.&lt;/p&gt;
&lt;p&gt;Іноді проблема в моделі. Іноді проблема в інструменті. Іноді ваш сервер MCP у порядку, але агент обрав не того спеціаліста, або витратив половину сесії на роботу з shell, якої ви не очікували, або мовчки спалив кошти в циклі, що зовні виглядав продуктивним.&lt;/p&gt;
&lt;p&gt;Якщо ви не бачите різниці, ви насправді не керуєте агентною системою. Ви вгадуєте.&lt;/p&gt;
&lt;p&gt;Тож ми побудували стек спостережуваності для нашого власного робочого процесу: Claude Code, Codex, події хуків Claude, події сповіщень Codex, нативний OpenTelemetry, Grafana Alloy та Grafana Cloud на іншому кінці.&lt;/p&gt;
&lt;p&gt;Цікава частина не в тому, що «ми зробили дашборд». Цікаво те, що нам довелося розділити телеметрію на два різні потоки, бо жоден окремий канал не давав повної картини.&lt;/p&gt;
&lt;h2 id=&quot;проблема-телеметрія-агентів-фрагментована&quot;&gt;Проблема: телеметрія агентів фрагментована&lt;/h2&gt;
&lt;p&gt;Сучасні агенти для програмування вже надсилають певну телеметрію. Це допомагає, але цього недостатньо.&lt;/p&gt;
&lt;p&gt;Нативний OTEL добре відповідає на запитання на кшталт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Скільки запитів ми зробили?&lt;/li&gt;
&lt;li&gt;Скільки коштувала сесія?&lt;/li&gt;
&lt;li&gt;Де спани та трейси?&lt;/li&gt;
&lt;li&gt;Чи стрибнула затримка?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Він набагато гірше відповідає на запитання на кшталт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;На який сервер MCP спирався агент?&lt;/li&gt;
&lt;li&gt;Ця помилка сталася в &lt;code&gt;Bash&lt;/code&gt;, у вбудованому файловому інструменті чи у виклику MCP?&lt;/li&gt;
&lt;li&gt;Яка навичка насправді активувалася?&lt;/li&gt;
&lt;li&gt;Який тип субагента було відправлено?&lt;/li&gt;
&lt;li&gt;Сесія робила корисну роботу чи просто буксувала?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Цей другий клас запитань живе ближче до хуків, ніж до трейсів.&lt;/p&gt;
&lt;p&gt;Але правильне й зворотне твердження: деякі з найважливіших запитань про продуктивність живуть ближче до трейсів, ніж до хуків.&lt;/p&gt;
&lt;p&gt;Якщо ви хочете знати, де насправді накопичилася затримка, які спани були повільними, чи сесія витратила час на виклики моделі, а не на виконання інструментів, вам потрібні дані трейсів так само, як і семантичні події.&lt;/p&gt;
&lt;h2 id=&quot;архітектура-до-якої-ми-прийшли&quot;&gt;Архітектура, до якої ми прийшли&lt;/h2&gt;
&lt;p&gt;Ми запускаємо два шляхи телеметрії паралельно.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Claude Code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  hooks        -&amp;gt; send_event.py -&amp;gt; Grafana Cloud Loki&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Codex&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  native OTEL -&amp;gt; Alloy -&amp;gt; Grafana Cloud&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  notify hook -&amp;gt; codex_notify.py -&amp;gt; shared Loki schema&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Цей поділ навмисний.&lt;/p&gt;
&lt;p&gt;Він також асиметричний. Claude Code дає нам набагато функціональніший інтерфейс хуків життєвого циклу. Codex дає нам нативний OTEL плюс інтерфейс сповіщень, тож ми нормалізуємо менш докладні події завершення ходу в ту саму схему логів, замість того щоб вдавати, ніби обидва середовища виконання надають однакові засоби керування.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Нативний OTEL&lt;/strong&gt; дає нам базовий потік: логи та трейси від самого середовища виконання, плюс метрики там, де середовище виконання їх справді надсилає.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Події хуків і сповіщень&lt;/strong&gt; дають нам семантичний шар: такі речі, як &lt;code&gt;PreToolUse&lt;/code&gt;, &lt;code&gt;PostToolUse&lt;/code&gt;, &lt;code&gt;PostToolUseFailure&lt;/code&gt;, &lt;code&gt;UserPromptSubmit&lt;/code&gt;, &lt;code&gt;SubagentStop&lt;/code&gt;, &lt;code&gt;SkillActivated&lt;/code&gt;, та класифіковані метадані, які нас справді цікавлять під час діагностики поведінки агента. Claude Code надає тут багатший потік подій. Codex надає менш докладний, але все ще корисний нормалізований потік.&lt;/p&gt;
&lt;h2 id=&quot;навіщо-взагалі-потрібні-хуки&quot;&gt;Навіщо взагалі потрібні хуки&lt;/h2&gt;
&lt;p&gt;Наш конвеєр хуків збагачує події, перш ніж вони потрапляють у Loki.&lt;/p&gt;
&lt;p&gt;Замість того щоб просто сказати «інструмент виконався», ми класифікуємо подію за полями на кшталт:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;tool_type&lt;/code&gt;: builtin, mcp, skill, agent, bash&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp_server&lt;/code&gt;: який бекенд MCP обробив виклик&lt;/li&gt;
&lt;li&gt;&lt;code&gt;bash_cli&lt;/code&gt;: родина shell-команди&lt;/li&gt;
&lt;li&gt;&lt;code&gt;subagent_type&lt;/code&gt;: який тип спеціаліста було відправлено&lt;/li&gt;
&lt;li&gt;&lt;code&gt;agent_tool&lt;/code&gt;: чи джерелом був Claude Code, чи Codex&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Це означає, що ми можемо ставити операційно важливі запитання:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;text&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | agent_tool=&quot;codex-cli&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | tool_type=&quot;mcp&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;{service_name=&quot;claude-code-hooks&quot;} | json | bash_cli=&quot;git&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це не поля заради галочки. Це різниця між «агент здавався повільним» і «агент витратив останні десять хвилин на операції git через shell із високою частотою помилок інструментів».&lt;/p&gt;
&lt;p&gt;Одна деталь реалізації, яка виглядає дивнішою, ніж є насправді: спільний потік Loki все ще використовує &lt;code&gt;service_name=&quot;claude-code-hooks&quot;&lt;/code&gt; як мітку, навіть коли подія прийшла з Codex. Реальний поділ між середовищами виконання відбувається за &lt;code&gt;agent_tool&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;чому-alloy-стоїть-посередині&quot;&gt;Чому Alloy стоїть посередині&lt;/h2&gt;
&lt;p&gt;Grafana Alloy у цій конфігурації не просто пересилач. Це точка застосування правил обробки телеметрії.&lt;/p&gt;
&lt;p&gt;Ми спрямовуємо нативний потік OTEL від Claude Code та Codex на локальний проксі Alloy на &lt;code&gt;localhost:4318&lt;/code&gt;, а потім дозволяємо Alloy очистити payload, перш ніж пересилати його до Grafana Cloud.&lt;/p&gt;
&lt;p&gt;Це важливо, бо сира телеметрія агентів переповнена полями з високою кардинальністю, які корисні для аналізу, але жахливі як індексовані мітки:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;session_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;prompt_id&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;кількість токенів&lt;/li&gt;
&lt;li&gt;тривалості&lt;/li&gt;
&lt;li&gt;блоби параметрів інструментів&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Якщо індексувати все, отримаєте вибух міток і поганий день.&lt;/p&gt;
&lt;p&gt;Тож Alloy робить для нас три речі:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Тримає індексованим дуже невеликий набір міток з низькою кардинальністю.&lt;/li&gt;
&lt;li&gt;Переносить шумні, але корисні поля в структуровані метадані.&lt;/li&gt;
&lt;li&gt;Повністю відкидає чистий шум.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Важлива ідея проста: &lt;strong&gt;спостерігай більше, індексуй менше&lt;/strong&gt;.&lt;/p&gt;
&lt;h2 id=&quot;чому-потік-хуків-обходить-alloy&quot;&gt;Чому потік хуків обходить Alloy&lt;/h2&gt;
&lt;p&gt;Потік хуків уже сформований для Loki.&lt;/p&gt;
&lt;p&gt;До того моменту, коли &lt;code&gt;send_event.py&lt;/code&gt; надсилає подію, ми вже вирішили, які поля заслуговують на обробку як мітки, а які належать до структурованого тіла JSON. Цей потік іде прямо до OTLP-шлюзу Grafana Cloud, замість того щоб проходити ще один прохід через Alloy.&lt;/p&gt;
&lt;p&gt;Тож у системи чіткий розподіл обов’язків:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Alloy&lt;/strong&gt; приборкує сирий нативний потік OTEL.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Збагачення хуків&lt;/strong&gt; робить семантичні події придатними для запитів.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Це тримає архітектуру простішою, ніж спроба протягнути все через один шлях.&lt;/p&gt;
&lt;h2 id=&quot;що-насправді-показує-дашборд&quot;&gt;Що насправді показує дашборд&lt;/h2&gt;
&lt;p&gt;Знімок екрана нижче — з одного з дашбордів спостережуваності, що стоїть за нашим агентним робочим процесом. Це не бенчмарк, а числа — лише зріз у певний момент часу. Суть у формі даних: стрічка активності, виклики інструментів, відмови, промпти та розбивки за агентом, вбудованими інструментами, використанням MCP, shell-командами та навичками.&lt;/p&gt;
&lt;p&gt;Корисно те, що цей дашборд живе на тому самому стеку Grafana, що й решта телеметрії агентів. Ми можемо фільтрувати за вихідним агентом та родиною інструментів і дивитися крізь середовища виконання, не вигадуючи окрему історію спостережуваності для кожної системи.&lt;/p&gt;
&lt;figure class=&quot;feature-figure feature-figure--wide&quot;&gt;
  &lt;a
    href=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
    target=&quot;_blank&quot;
    rel=&quot;noreferrer&quot;
    aria-label=&quot;Відкрити знімок екрана дашборда спостережуваності в повній роздільній здатності&quot;
  &gt;
    &lt;img
      src=&quot;https://maguyva.ai/blog/agent-observability-dashboard.png&quot;
      alt=&quot;Дашборд Grafana зі стрічкою активності, кількістю викликів інструментів, відмовами, промптами та розбивками за агентами, вбудованими інструментами, використанням MCP, CLI-командами та навичками для агентного робочого процесу.&quot;
    /&gt;
  &lt;/a&gt;
  &lt;figcaption&gt;
    Один із живих дашбордів, що стоїть за нашим агентним робочим процесом. Цей знімок екрана — лише один зріз спільного стеку Grafana, який також отримує телеметрію від інших наших агентних середовищ виконання та систем. Натисніть на зображення, щоб переглянути версію в повній роздільній здатності.
  &lt;/figcaption&gt;
&lt;/figure&gt;
&lt;h2 id=&quot;чому-трейси-важливіші-ніж-здається-на-перший-погляд&quot;&gt;Чому трейси важливіші, ніж здається на перший погляд&lt;/h2&gt;
&lt;p&gt;Логи повідомляють, яка категорія роботи відбулася. Трейси повідомляють, як робота розгорталася в часі.&lt;/p&gt;
&lt;p&gt;Ця відмінність важлива в агентних системах, бо слово «повільно» надто неточне, щоб бути корисним.&lt;/p&gt;
&lt;p&gt;Трейс може сказати нам, звідки взявся біль:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;затримка моделі&lt;/li&gt;
&lt;li&gt;час виконання інструмента&lt;/li&gt;
&lt;li&gt;повторні спроби&lt;/li&gt;
&lt;li&gt;одна особливо дорога взаємодія з MCP&lt;/li&gt;
&lt;li&gt;довгий хвіст дрібних операцій, які поодинці виглядали безпечними&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;На практиці ми використовуємо потік хуків і трейси Tempo разом.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Логи хуків&lt;/strong&gt; відповідають: що за річ сталася?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Трейси&lt;/strong&gt; відповідають: куди пішов час?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Саме ця комбінація перетворює спостережуваність з дашборда на пояснення.&lt;/p&gt;
&lt;h2 id=&quot;де-в-цьому-місце-codex&quot;&gt;Де в цьому місце Codex&lt;/h2&gt;
&lt;p&gt;Codex — частина того самого стеку, але він не ідентичний Claude Code.&lt;/p&gt;
&lt;p&gt;Для Codex ми під’єднуємо дві частини:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Нативний OTEL від Codex в Alloy&lt;/li&gt;
&lt;li&gt;Вебхук сповіщень у &lt;code&gt;codex_notify.py&lt;/code&gt;, який відображає завершення ходів у ту саму схему Loki, яку ми використовуємо для подій хуків&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Це дає нам уніфікований фільтр на кшталт &lt;code&gt;agent_tool=&quot;codex-cli&quot;&lt;/code&gt; у межах того самого потоку логів.&lt;/p&gt;
&lt;p&gt;Чесне застереження: payload сповіщень Codex наразі менш докладний, ніж payload хуків Claude Code, бо це не той самий тип інтерфейсу інтеграції. У нашій сьогоднішній конфігурації завершення ходів Codex можна нормалізувати в спільну схему, але детальне вилучення по кожному інструменту все ще краще виходить у нативному потоці OTEL, ніж у мосту сповіщень.&lt;/p&gt;
&lt;p&gt;Це не привід уникати цього допису. Це якраз і є суть допису. Реальні системи спостережуваності збираються з недосконалих сигналів.&lt;/p&gt;
&lt;h2 id=&quot;grafana-через-mcp-змінює-правила-гри&quot;&gt;Grafana через MCP змінює правила гри&lt;/h2&gt;
&lt;p&gt;Більший зсув у тому, що Grafana — це не лише місце, куди люди заходять у браузері.&lt;/p&gt;
&lt;p&gt;У цьому репозиторії ми також надаємо доступ до Grafana через MCP. Це означає, що агент може напряму запитувати Loki, Prometheus і Tempo, замість того щоб чекати, поки людина спершу вручну огляне дашборди.&lt;/p&gt;
&lt;p&gt;Це перетворює спостережуваність на активний вхід у робочий процес.&lt;/p&gt;
&lt;p&gt;Агент може запитати:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Які родини інструментів найчастіше відмовляли за останню годину?&lt;/li&gt;
&lt;li&gt;Який сервер MCP домінував у сесії?&lt;/li&gt;
&lt;li&gt;Чи нещодавні зміни зменшили кількість відмов інструментів, чи просто перемістили роботу в більш насичені shell-операціями шляхи з тими самими помилками?&lt;/li&gt;
&lt;li&gt;Які трейси показують найвищу затримку чи повторні спроби?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Як тільки у вас це є, ви дуже близькі до циклу самовдосконалення.&lt;/p&gt;
&lt;h2 id=&quot;від-дашборда-до-циклу-зворотного-звязку&quot;&gt;Від дашборда до циклу зворотного зв’язку&lt;/h2&gt;
&lt;p&gt;Це та частина, яку ми вважаємо найцікавішою.&lt;/p&gt;
&lt;p&gt;Щойно стек спостережуваності стає доступним для запитів з рівня агента, телеметрія перестає бути пасивним засобом звітності й стає сигналом керування.&lt;/p&gt;
&lt;p&gt;Цикл виглядає так:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Активність агента породжує трейси, метрики та збагачені логи хуків.&lt;/li&gt;
&lt;li&gt;Grafana зберігає докази в Loki, Tempo та Prometheus там, де існують метрики.&lt;/li&gt;
&lt;li&gt;Агенти запитують ці докази через Grafana MCP.&lt;/li&gt;
&lt;li&gt;Система виявляє поганий мікс інструментів, крихкі навички, слабку маршрутизацію чи насичені shell-операціями робочі процеси, що постійно призводять до помилок, яких можна уникнути.&lt;/li&gt;
&lt;li&gt;Агенти чи оператори коригують промпти, конфігурації агентів, описи навичок, правила маршрутизації чи доступ до інструментів.&lt;/li&gt;
&lt;li&gt;Наступна сесія породжує нову форму телеметрії, і цикл повторюється.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Саме так ви переходите від «цікавого дашборда» до «вимірюваної системи вдосконалення».&lt;/p&gt;
&lt;p&gt;Мета не в тому, щоб максимізувати одну категорію інструментів. Мета в тому, щоб знайти правильний мікс CLI, вбудованих інструментів, викликів MCP та навичок для роботи, яка справді виконується.&lt;/p&gt;
&lt;h2 id=&quot;на-що-це-дозволяє-нам-відповісти&quot;&gt;На що це дозволяє нам відповісти&lt;/h2&gt;
&lt;p&gt;Щойно обидва середовища виконання потрапляють в один стек Grafana, ми можемо набагато швидше відповідати на операційні запитання:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Чи зосереджені відмови в одній родині інструментів?&lt;/li&gt;
&lt;li&gt;Чи насичені shell-операціями робочі процеси створюють помилки, яких можна було б уникнути, там, де мав би існувати інструмент вищого рівня?&lt;/li&gt;
&lt;li&gt;Які сервери MCP несуть основне навантаження?&lt;/li&gt;
&lt;li&gt;Чи платимо ми за активність агента, яка не дає значущого прогресу?&lt;/li&gt;
&lt;li&gt;Що спричиняє проблеми в сесії: модель, інструменти чи шар оркестрації?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Це особливо корисно в багатоагентних робочих процесах, де фраза «агент був зайнятий» майже нічого не повідомляє.&lt;/p&gt;
&lt;p&gt;Якщо якийсь спеціаліст постійно отримує завдання і показує високий рівень відмов, це проблема маршрутизації чи формулювання промпту.&lt;/p&gt;
&lt;p&gt;Якщо один сервер MCP домінує в усіх викликах, це може бути хорошою архітектурою — або ознакою того, що все інше — зайвий баласт.&lt;/p&gt;
&lt;p&gt;Якщо відмови інструментів різко зростають, а вартість залишається високою, у вас операційна проблема, а не проблема якості.&lt;/p&gt;
&lt;p&gt;Якщо робота з shell постійно й передбачувано провалюється так, як цього можна було б уникнути, там, де мав би існувати інструмент вищого рівня, це продуктовий сигнал.&lt;/p&gt;
&lt;p&gt;Якщо одна навичка активується постійно, але не покращує результати, це сигнал про промпт чи маршрутизацію.&lt;/p&gt;
&lt;h2 id=&quot;справжній-урок&quot;&gt;Справжній урок&lt;/h2&gt;
&lt;p&gt;Глибший урок тут у тому, що спостережуваність агентів потребує і &lt;strong&gt;телеметрії середовища виконання&lt;/strong&gt;, і &lt;strong&gt;телеметрії робочого процесу&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Телеметрія середовища виконання повідомляє, що зробила система.&lt;/p&gt;
&lt;p&gt;Телеметрія робочого процесу повідомляє, що, на думку агента, він робив.&lt;/p&gt;
&lt;p&gt;Нам потрібно і те, і те.&lt;/p&gt;
&lt;p&gt;Якщо зберігати лише трейси й лічильники, ви втрачаєте семантичний шар. Якщо зберігати лише події хуків, ви втрачаєте затримку, спани та ширшу картину середовища виконання.&lt;/p&gt;
&lt;p&gt;А якщо зберігати і те, і те, але ніколи не повертати це на рівень агента, у вас моніторинг, а не адаптація.&lt;/p&gt;
&lt;p&gt;Саме ця комбінація робить систему достатньо пояснюваною, щоб нею керувати, і достатньо налаштовуваною, щоб її вдосконалювати.&lt;/p&gt;
&lt;h2 id=&quot;що-досі-недосконале&quot;&gt;Що досі недосконале&lt;/h2&gt;
&lt;p&gt;Шершавостей ще вистачає.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Не кожна подія хука містить дані про тривалість і токени, які ми хотіли б мати.&lt;/li&gt;
&lt;li&gt;Деякі з найінформативніших даних про тривалість досі беруться з трейсів Tempo, а не з логів хуків.&lt;/li&gt;
&lt;li&gt;Codex сьогодні семантично бідніший за Claude Code у збагаченому потоці подій.&lt;/li&gt;
&lt;li&gt;Знімок екрана дашборда — це відображення реальної роботи системи, а не відшліфований маркетинговий артефакт.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Остання теза навмисна. Ми радше покажемо реальну панель приладів, ніж вдаватимемо, що агентні системи магічно самопояснювальні.&lt;/p&gt;
&lt;h2 id=&quot;чому-це-важливо-для-maguyva&quot;&gt;Чому це важливо для Maguyva&lt;/h2&gt;
&lt;p&gt;Maguyva про те, щоб дати агентам кращий інтелект коду. Але щойно агенти справді виконують корисну роботу, одразу з’являється нова вимога: потрібно бачити, як вони поводяться.&lt;/p&gt;
&lt;p&gt;Якість пошуку, якість маршрутизації, вибір інструментів та ефективність контексту — все це стає спостережуваними проблемами.&lt;/p&gt;
&lt;p&gt;Саме тому ми вважаємо, що про це варто писати. Майбутній агентний стек — це не лише промпти й інструменти. Це промпти, інструменти та шар інструментування, який повідомляє, чи працює все загалом.&lt;/p&gt;
&lt;p&gt;Якщо ви будуєте серйозні агентні робочі процеси, спостережуваність — не опціональна інфраструктура. Вона частина продукту.&lt;/p&gt;
</content:encoded><category>Observability</category><category>Grafana</category><category>OpenTelemetry</category><category>Architecture</category></item><item><title>Видобування знань з історії змін: як зміни стають інституційною пам&apos;яттю</title><link>https://maguyva.ai/uk/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/mining-workflow-closing-the-loop</guid><description>Git-коміти перетворюються на структуровані записи журналу змін та архітектурні рішення, а потім повертаються до ШІ-агентів як інституційна пам&apos;ять, придатна для запитів.</description><pubDate>Tue, 03 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа в цьому дописі відображають стан системи на момент публікації (лютий 2026). Актуальні цифри дивіться на нашій &lt;a href=&quot;https://maguyva.ai/uk/team&quot;&gt;сторінці команди&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Кожна інженерна команда стикається з однією й тією самою проблемою: зміни відбуваються постійно, але &lt;em&gt;причини&lt;/em&gt; цих змін губляться. Через шість місяців хтось запитує «чому ми обрали DuckDB для етапів pipeline?», а відповідь живе лише в голові того, хто ухвалював це рішення — якщо ця людина ще з командою.&lt;/p&gt;
&lt;p&gt;Ми побудували робочий процес видобутку (mining), що замикає цей цикл. Зміни проходять через git-коміти, обробляються нашим конвеєром видобутку, перетворюються на структуровані записи журналу змін та архітектурні рішення, а потім повертаються до наших ШІ-агентів через запити CLI. Результат: інституційна пам’ять, доступна і людям, і ШІ.&lt;/p&gt;
&lt;h2 id=&quot;проблема-рішення-випаровуються&quot;&gt;Проблема: рішення випаровуються&lt;/h2&gt;
&lt;p&gt;Розгляньмо типовий сценарій. Розробник комітить:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;feat(canonical): add DuckDB runtime for pipeline stages&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Цей коміт відображає значущий архітектурний вибір. Команда оцінила варіанти, зважила компроміси і зупинилася на DuckDB з конкретних причин. Але весь цей контекст живе в:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Треді в Slack (імовірно, видаленому)&lt;/li&gt;
&lt;li&gt;Чиїйсь пам’яті (точно згасаючій)&lt;/li&gt;
&lt;li&gt;Коментарі в коді (можливо, якщо пощастить)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Через три місяці новий член команди запитує: «Мені використати DuckDB чи SQLite для цього нового етапу?» Без інституційної пам’яті вони або винаходять велосипед, або роблять непослідовний вибір.&lt;/p&gt;
&lt;h2 id=&quot;цикл-від-комітів-до-контексту&quot;&gt;Цикл: від комітів до контексту&lt;/h2&gt;
&lt;p&gt;Наш робочий процес видобутку перетворює історію git на знання, придатне для запитів:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Git Commits&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine sync          │  ← Build index from git history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  mine candidates    │  ← Surface commits for review&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  Classification     │  ← Human or LLM assessment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│  (changelog or ADR) │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├──────────────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Changelog   │    │ Decisions     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ Ledger      │    │ Registry      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ (JSONL)     │    │ (YAML files)  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ▼                      ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;┌─────────────┐    ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ CHANGELOG.md│    │ orkestra CLI  │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;│ per package │    │ queries       │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└─────────────┘    └───────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    │                      │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └──────────────────────┘&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;              ▼&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      ┌───────────────┐&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ AI Agents     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      │ (via CLI)     │&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;      └───────────────┘&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ключове розуміння: і журнали змін, і архітектурні рішення випливають з тієї самої історії git, обробленої через уніфікований конвеєр. Це гарантує, що нічого не залишається поза увагою.&lt;/p&gt;
&lt;h2 id=&quot;як-працює-видобуток&quot;&gt;Як працює видобуток&lt;/h2&gt;
&lt;h3 id=&quot;крок-1-синхронізувати-індекс&quot;&gt;Крок 1: Синхронізувати індекс&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ця команда сканує історію git і будує індекс усіх комітів. Вона вилучає структуровані сигнали з кожного коміту:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Тип коміту за стандартом Conventional Commits (&lt;code&gt;feat&lt;/code&gt;, &lt;code&gt;fix&lt;/code&gt;, &lt;code&gt;chore&lt;/code&gt;, &lt;code&gt;docs&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Область дії (який пакет чи ділянка)&lt;/li&gt;
&lt;li&gt;Маркери зламних змін (breaking change)&lt;/li&gt;
&lt;li&gt;Змінені файли та метрики складності&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;крок-2-перевірити-статус-покриття&quot;&gt;Крок 2: Перевірити статус покриття&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ось як виглядає наш поточний статус:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Mining Status&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;=============&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Extracted:       476&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:       15161&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;Changelog&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;---------&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  Coverage:        100.0%&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Processed:     15637  (of 15637)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Released:       6799&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    Skipped:        8838&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;15 637 комітів оброблено. 476 стали архітектурними рішеннями. 6 799 стали записами журналу змін. Кожен коміт класифіковано.&lt;/p&gt;
&lt;h3 id=&quot;крок-3-отримати-кандидатів-для-перегляду&quot;&gt;Крок 3: Отримати кандидатів для перегляду&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; candidates&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 50&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --full&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це виводить коміти, які ще не оброблено, з повним контекстом для класифікації:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;90571786d99166c0039ca2e80e4d9cd96184bd85&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;date&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;subject&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(canonical): add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;signals&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;commit_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;scope&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;canonical&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;breaking&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;false&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;is_releasable_type&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;domains_affected&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;pipeline&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;data-architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;body&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Establishes DuckDB as canonical in-process analytical database...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;files_changed&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/canonical/pipelines/stages/duckdb_runtime.py&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;stats&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;files&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;8&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;insertions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;450&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;deletions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;120&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Сигнали допомагають спрямувати класифікацію: &lt;code&gt;is_releasable_type: true&lt;/code&gt; підказує, що це має з’явитися в журналі змін. Велика кількість вставок та інфраструктурні файли підказують, що це може бути й архітектурним рішенням.&lt;/p&gt;
&lt;h3 id=&quot;крок-4-класифікувати-коміти&quot;&gt;Крок 4: Класифікувати коміти&lt;/h3&gt;
&lt;p&gt;Тут шляхи розходяться: записи журналу змін і архітектурні рішення.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для записів журналу змін:&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; added&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це фіксує, що коміт &lt;code&gt;abc123&lt;/code&gt; має з’явитися в журналі змін під категорією «Added» (Додано).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для архітектурних рішень:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Спочатку отримайте реальний ID рішення:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; new&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --domain&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; pipeline&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Returns: DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Потім класифікуйте з ID рішення:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classify&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; abc123&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --decision&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-143&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це пов’язує коміт із записом рішення, який буде створено чи оновлено.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для пакетної обробки (що ми насправді робимо):&lt;/strong&gt;&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Generate classifications file with LLM assistance&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; commit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --input&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; classifications.jsonl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Формат JSONL підтримує обидва домени за один прохід:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonl&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;release&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;category&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;added&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add DuckDB runtime for pipeline stages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;abc123&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;extract&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;decision_id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-PL-142&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;def456&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;changelog&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;action&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;skip&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;&quot;reason&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Chore: dependency update&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;крок-5-відрендерити-вивід&quot;&gt;Крок 5: Відрендерити вивід&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; changelog&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; render&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --package&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; &amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pk&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;g&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це генерує файли &lt;code&gt;CHANGELOG.md&lt;/code&gt; для кожного пакета з журналу (ledger). Журнали змін — похідні артефакти: видаліть їх, і вони бездоганно регенеруються з вихідного журналу.&lt;/p&gt;
&lt;h2 id=&quot;структура-запису-рішення&quot;&gt;Структура запису рішення&lt;/h2&gt;
&lt;p&gt;Вилучені рішення стають YAML-файлами з насиченими метаданими:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-PL-142&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adopt DuckDB as Canonical Processing Runtime for Pipeline Stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;domain&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;active&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;created&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Establishes DuckDB as the canonical in-process analytical database for pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  stage transformations. Provides a shared runtime module that resolves settings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  from pipeline defaults with stage-level overrides.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  Pipeline stages performing data transformations each independently configured&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  DuckDB connections. This led to inconsistent settings, duplicated configuration&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;  code, and no way to tune DuckDB globally for a pipeline run.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DuckDB provides efficient in-process OLAP with zero configuration deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Centralized runtime module eliminates duplicated DuckDB setup across stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Hierarchical settings enable global tuning with stage-level overrides&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Memory limits and thread counts can be adjusted per-pipeline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;impact&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  positive&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Consistent DuckDB configuration across all pipeline stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Single point of control for memory/thread tuning&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Reduced code duplication in conversion and export stages&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  negative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Adds dependency on shared runtime module&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Stages must adopt new configuration pattern&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;source_commits&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;sha&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;90571786d99166c0039ca2e80e4d9cd96184bd85&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    message&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;feat(canonical): add DuckDB runtime for pipeline stages&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    date&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-26&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    role&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;primary&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;files&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/duckdb_runtime.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/runner.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/canonical/pipelines/stages/convert_hdx_admin_boundaries_to_geoparquet.py&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;related&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;DEC-DA-014&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Data architecture decisions that influenced this&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Кожне рішення посилається назад на свої вихідні коміти. Кожне рішення вказує, які файли воно зачіпає. Зв’язки між рішеннями явні.&lt;/p&gt;
&lt;h2 id=&quot;інтеграція-з-cli-запити-до-інституційної-памяті&quot;&gt;Інтеграція з CLI: запити до інституційної пам’яті&lt;/h2&gt;
&lt;p&gt;Тут цикл замикається. Агенти можуть запитувати рішення через CLI:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Search by topic&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;retry&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Повертає рішення про логіку повторних спроб, обробку помилок, патерни відновлення.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Get full details on a specific decision&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-PL-142&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Повертає повний запис рішення з контекстом, обґрунтуванням та впливом.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# List recent decisions for context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --limit&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; 15&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Показує, які архітектурні рішення були ухвалені нещодавно.&lt;/p&gt;
&lt;h3 id=&quot;як-агенти-це-використовують&quot;&gt;Як агенти це використовують&lt;/h3&gt;
&lt;p&gt;Базові інструкції нашого оркестратора включають:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8;font-weight:bold&quot;&gt;**Essential CLI commands:**&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; `orkestra registry decisions search &quot;X&quot;`&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; — Find architectural decisions&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Коли агента просять реалізувати щось пов’язане з DuckDB, він може спершу перевірити:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --query&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;DuckDB&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;І виявити DEC-PL-142, дізнавшись:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Чому ми обрали DuckDB (context)&lt;/li&gt;
&lt;li&gt;Як правильно це використовувати (agent_guidance)&lt;/li&gt;
&lt;li&gt;На які файли дивитися (files)&lt;/li&gt;
&lt;li&gt;Які пов’язані рішення існують (related)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Агент не винаходить велосипед. Він спирається на усталені патерни.&lt;/p&gt;
&lt;h2 id=&quot;тест-трьох-запитань&quot;&gt;Тест трьох запитань&lt;/h2&gt;
&lt;p&gt;Не кожен коміт заслуговує на запис рішення. Ми використовуємо тест трьох запитань для фільтрації:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Чи важко було це ухвалити?&lt;/strong&gt; Чи вимагало це значного аналізу, оцінки компромісів чи дебатів?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Чи дорого це змінити?&lt;/strong&gt; Чи вимагатиме скасування цього рішення значного переробляння?&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Чи має це вплив на всю систему?&lt;/strong&gt; Чи впливає це на кілька пакетів, чи встановлює патерни, яким слідуватимуть інші?&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Якщо коміт відповідає «так» хоча б на одне з цих запитань, він кандидат на вилучення рішення. Наш типовий показник: 1–4 рішення на 100 комітів (близько 1–4%).&lt;/p&gt;
&lt;p&gt;Для записів журналу змін планка нижча: будь-яка зміна, помітна користувачу (функції, виправлення, покращення), фіксується. Внутрішні дрібні завдання, оновлення документації та рефакторинги зазвичай пропускаються. Наш типовий показник: 30–50 записів журналу змін на 100 комітів.&lt;/p&gt;
&lt;h2 id=&quot;зберігання-даних-журнали-лише-для-додавання&quot;&gt;Зберігання даних: журнали лише для додавання&lt;/h2&gt;
&lt;p&gt;Система видобутку використовує JSONL-журнали лише для додавання (append-only) для безконфліктної багатоагентної роботи:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/changelog/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── commits_processed.jsonl  # Classification ledger (both domains)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── release_notes.jsonl      # Changelog entries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── commits_index.yaml       # Derived index (gitignored)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;packages/orchestration/ai_assets/reference/decisions/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── registry.yaml            # Decision index&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── records/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-001.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    ├── DEC-AD-002.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;    └── ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Формат JSONL з &lt;code&gt;merge=union&lt;/code&gt; у &lt;code&gt;.gitattributes&lt;/code&gt; означає, що кілька агентів можуть класифікувати коміти одночасно без конфліктів злиття. Кожен рядок незалежний.&lt;/p&gt;
&lt;h2 id=&quot;контрольні-перевірки&quot;&gt;Контрольні перевірки&lt;/h2&gt;
&lt;p&gt;Перед будь-якою сесією видобутку ми запускаємо валідацію:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; mine&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --quick&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це перевіряє:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Валідність формату SHA&lt;/li&gt;
&lt;li&gt;Відповідність формату ID рішення&lt;/li&gt;
&lt;li&gt;Відсутність дублікатів записів для того самого SHA&lt;/li&gt;
&lt;li&gt;Реальне існування рішень, на які є посилання&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Після класифікації ми валідуємо знову перед комітом змін.&lt;/p&gt;
&lt;h2 id=&quot;чому-це-важливо&quot;&gt;Чому це важливо&lt;/h2&gt;
&lt;p&gt;Цикл зворотного зв’язку, який ми побудували, вирішує кілька проблем:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для нових членів команди:&lt;/strong&gt; замість того щоб питати «чому ми зробили X?», вони можуть шукати в реєстрі рішень. Контекст збережено.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для ШІ-агентів:&lt;/strong&gt; вони не працюють у вакуумі. Вони можуть запитувати інституційні знання перед тим, як давати рекомендації. Коли їх просять додати новий етап pipeline, вони можуть виявити патерн DuckDB і слідувати йому.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для архітектурної узгодженості:&lt;/strong&gt; рішення явні й доступні для пошуку. Коли хтось пропонує підхід, що суперечить наявному рішенню, система може виявити конфлікт.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для генерації журналу змін:&lt;/strong&gt; нотатки про реліз — не поспіх в останню хвилину. Вони побічний продукт безперервної класифікації під час розробки.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для онбордингу:&lt;/strong&gt; нові агенти успадковують повний контекст кодової бази. Вони бачать не лише код — вони бачать рішення, які його сформували.&lt;/p&gt;
&lt;h2 id=&quot;поточний-стан&quot;&gt;Поточний стан&lt;/h2&gt;
&lt;p&gt;На сьогодні:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;15 637 комітів&lt;/strong&gt; оброблено через конвеєр&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;476 архітектурних рішень&lt;/strong&gt; вилучено й задокументовано&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;6 799 записів журналу змін&lt;/strong&gt; зафіксовано&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;100% покриття&lt;/strong&gt; в обох доменах&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Кожен коміт з моменту, як ми почали, класифіковано. Інституційна пам’ять повна й доступна для запитів.&lt;/p&gt;
&lt;h2 id=&quot;початок-роботи&quot;&gt;Початок роботи&lt;/h2&gt;
&lt;p&gt;Якщо ви хочете реалізувати щось подібне:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Почніть із комітів за стандартом Conventional Commits.&lt;/strong&gt; Конвеєр видобутку працює найкраще, коли коміти мають структуровані префікси (&lt;code&gt;feat:&lt;/code&gt;, &lt;code&gt;fix:&lt;/code&gt;, &lt;code&gt;chore:&lt;/code&gt;).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Визначте свої домени.&lt;/strong&gt; Ми використовуємо домени на кшталт &lt;code&gt;pipeline&lt;/code&gt;, &lt;code&gt;agent-design&lt;/code&gt;, &lt;code&gt;observability&lt;/code&gt;, &lt;code&gt;data-modeling&lt;/code&gt;. Вони організовують рішення за ділянками.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Виробіть звичку класифікації.&lt;/strong&gt; Видобуток працює, коли команди регулярно класифікують коміти. Пакетна обробка за допомогою LLM допомагає масштабуватися.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Зробіть рішення доступними для запитів.&lt;/strong&gt; Цінність накопичується, коли агенти можуть шукати рішення через CLI. Структуруйте свій вивід для машинного споживання.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Замкніть цикл.&lt;/strong&gt; Рішення мають впливати на майбутню роботу. Включайте посилання на рішення в інструкції для агентів та чеклісти перегляду коду.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Мета не в ідеальній документації. Мета в тому, щоб зробити &lt;em&gt;причини&lt;/em&gt; змін доступними і людям, і ШІ, сьогодні і через шість місяців. Коли зміни стають інституційною пам’яттю, команди спираються на усталені патерни, а не винаходять їх заново.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Робочий процес видобутку — частина нашого рушія оркестрації, зокрема модуля контекстного рушія в нашому пакеті оркестрації.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Workflows</category></item><item><title>Видобуток навичок: від 3500 кандидатів до 466 можливостей</title><link>https://maguyva.ai/uk/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/skill-mining-3500-and-counting</guid><description>Ми перевірили 3500 кандидатів на навички й відібрали 466. Систематичний цикл видобутку та засвоєння для побудови узгодженої бібліотеки навичок ШІ-агентів у масштабі.</description><pubDate>Tue, 27 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа в цьому дописі відображають стан системи на момент публікації (січень 2026). Актуальні цифри дивіться на нашій &lt;a href=&quot;https://maguyva.ai/uk/team&quot;&gt;сторінці команди&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;проблема-3500-навичок&quot;&gt;Проблема 3500 навичок&lt;/h2&gt;
&lt;p&gt;Коли ми почали будувати систему оркестрації агентів, ми зіткнулися з цікавим викликом: у ШІ-екосистемі розкидані тисячі потенційних навичок. Репозиторії GitHub, документація вендорів, проєкти спільноти, внутрішні патерни — навички існують всюди. Але які з них важливі? Які працюють? І як підтримувати узгоджену бібліотеку навичок, яку агенти справді можуть використовувати?&lt;/p&gt;
&lt;p&gt;Наша відповідь: систематичний цикл видобутку та засвоєння.&lt;/p&gt;
&lt;h2 id=&quot;цифри-на-сьогодні&quot;&gt;Цифри на сьогодні&lt;/h2&gt;
&lt;p&gt;Лише через трохи більше трьох місяців після того, як Anthropic випустила Agent Skills 16 жовтня 2025 року, ось де ми були на момент публікації цього допису 27 січня 2026 року:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Метрика&lt;/th&gt;
&lt;th&gt;Кількість&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Виявлено кандидатів&lt;/td&gt;
&lt;td&gt;3500+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Відібрано навичок&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Навички вендорів&lt;/td&gt;
&lt;td&gt;373&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Внутрішні навички&lt;/td&gt;
&lt;td&gt;93&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Активних вендорів&lt;/td&gt;
&lt;td&gt;25+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Середня кількість токенів на навичку&lt;/td&gt;
&lt;td&gt;2834&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Задіяних інструментів&lt;/td&gt;
&lt;td&gt;89&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Унікальних тегів&lt;/td&gt;
&lt;td&gt;635&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Ми переглянули понад 3500 кандидатів на навички. Ми впровадили 466. Це 13% рівень відбору — і ця вибірковість навмисна.&lt;/p&gt;
&lt;h2 id=&quot;рівнева-система-знань&quot;&gt;Рівнева система знань&lt;/h2&gt;
&lt;p&gt;Не всі навички рівноцінні. Ми організовуємо їх у п’ять шарів знань (K0–K4), кожен з яких представляє іншу сферу застосовності:&lt;/p&gt;
&lt;h3 id=&quot;k0-основи-універсальні&quot;&gt;K0: Основи (Універсальні)&lt;/h3&gt;
&lt;p&gt;Навички, які повинен мати кожен агент. Вони представляють можливості «доброго мислителя», що працюють будь-де.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;foundations/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── test-first-discipline       # TDD: Red-Green-Refactor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── evidence-based-completion   # Verify before claiming done&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── systematic-debugging        # Root cause methodology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── structured-planning         # Break work into tasks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── context-budget-awareness    # Manage token consumption&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Навички K0 переносяться в будь-який проєкт, будь-який домен, будь-який стек. Вони кодують універсальні когнітивні патерни.&lt;/p&gt;
&lt;h3 id=&quot;k1-ідентичності-професійна-сфера&quot;&gt;K1: Ідентичності (Професійна сфера)&lt;/h3&gt;
&lt;p&gt;Навички «доброго інженера» чи «доброго дослідника», що застосовуються в проєктах у межах професійної сфери.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;identities/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── research-workflows          # Multi-source research&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── web-extraction-playbook     # Content extraction&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── code-review                 # PR review patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── cli-interface-standards     # CLI design patterns&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k2-домени-предметна-експертиза&quot;&gt;K2: Домени (Предметна експертиза)&lt;/h3&gt;
&lt;p&gt;Навички «доброго експерта з баз даних» чи «доброго інженера з безпеки», придатні для повторного використання в межах галузі.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domains/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── schema-migration-workflow   # Safe migration patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── rpc-validation-checklist    # RPC health checks&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── auth-validation-checklist   # JWT/OAuth patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── secrets-audit-checklist     # Credential scanning&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k3-стеки-технологія&quot;&gt;K3: Стеки (Технологія)&lt;/h3&gt;
&lt;p&gt;Навички «доброго користувача Supabase» чи «доброго розробника Cloudflare» для конкретних технологічних стеків.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;stacks/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── maguyva-quickstart          # Our semantic search patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── cloudflare-deployment       # Workers/Pages deployment&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── mcp-tool-best-practices     # MCP tool selection&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;k4-проєкт-організація&quot;&gt;K4: Проєкт (Організація)&lt;/h3&gt;
&lt;p&gt;Навички, специфічні для нашої організації та робочих процесів.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;project/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── agent-creation-workflow     # How we build agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── skill-authoring-workflow    # How we write skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── mining-session-workflow     # This very process&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor-skill-evaluation     # Evaluation rubrics&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;цикл-видобутку&quot;&gt;Цикл видобутку&lt;/h2&gt;
&lt;h3 id=&quot;фаза-1-виявлення&quot;&gt;Фаза 1: Виявлення&lt;/h3&gt;
&lt;p&gt;Навички приходять звідусіль:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Репозиторії вендорів&lt;/strong&gt;: AWS, Anthropic, Cloudflare, Supabase та контриб’ютори спільноти публікують колекції навичок. Ми відстежуємо 25+ вендорських коренів.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Проєкти спільноти&lt;/strong&gt;: GitHub повний шаблонів Claude Code, патернів агентів та визначень робочих процесів.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Внутрішні патерни&lt;/strong&gt;: коли наша команда вирішує проблеми, виникають патерни. Вони формалізуються в навички.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Видобуток з документації&lt;/strong&gt;: технічна документація часто містить неявні навички — процедури, чеклісти, дерева рішень.&lt;/p&gt;
&lt;p&gt;Виявлення безперервне. Ми використовуємо беклог навичок для відстеження кандидатів до формальної оцінки.&lt;/p&gt;
&lt;h3 id=&quot;фаза-2-оцінка&quot;&gt;Фаза 2: Оцінка&lt;/h3&gt;
&lt;p&gt;Кожен кандидат проходить одну й ту саму рубрику:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;adoption_criteria&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;fills_real_gap&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # We lack this capability&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;well_structured&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;actively_maintained&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Commits in last 6 months&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;portable&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;            # Not hyper-specific&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;tested&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Evidence of usage&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Усі п’ять продуктових критеріїв мають бути виконані. Саме тому 87% кандидатів відхиляються.&lt;/p&gt;
&lt;p&gt;Потім кожен кандидат проходить окремий перегляд довіри. Ми не трактуємо офіційний репозиторій вендора, відомого мейнтейнера спільноти та випадковий репозиторій GitHub як рівноцінні джерела істини.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;trust_review&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  vendor_credibility&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ownership_verified&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Official vendor, known maintainer, or internal source&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;maintenance_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Recent commits, issue response, release history&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adoption_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Evidence of real use, stars alone are not enough&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;provenance_clear&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;         # We can trace where the skill came from&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  prompt_injection_scan&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;hidden_instruction_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # Buried &quot;ignore previous instructions&quot; patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;exfiltration_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;       # Prompts that try to leak files, secrets, or context&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;authority_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Claims of priority over system or developer rules&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  script_audit&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;inspect_scripts&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Read shell/python/js helpers before adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;network_and_exec_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # curl|bash, remote downloads, subprocess execution&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;file_and_secret_review&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;   # Env vars, credential access, broad file writes&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;destructive_action_check&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt; # rm, reset, overwrite, or unsafe automation&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Довірені вендори отримують спрощену перевірку походження, але не безумовний пропуск. Недовірені чи невідомі джерела отримують глибший ручний аудит, і ми не виконуємо пакетовані скрипти, доки їх не прочитали, не окреслили сферу дії та не класифікували як безпечні.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Аналіз прогалин&lt;/strong&gt;: перед впровадженням ми шукаємо в нашому реєстрі:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;&amp;lt;capability&amp;gt;&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Якщо у нас це вже є, воно нам не потрібне. Якщо у нас є щось близьке, ми можемо об’єднати, а не додавати окремо.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Оцінка глибини та стандартів&lt;/strong&gt;: ми також оцінюємо, наскільки повно кандидат використовує модель agent-skill. Самотній &lt;code&gt;SKILL.md&lt;/code&gt; все ще може бути корисним, але глибші навички цінніші, коли вони відокремлюють інструкції від довідників, скриптів та активів, як заохочує &lt;code&gt;agentskills.io&lt;/code&gt;.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;skill_depth&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_1&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md only&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                     # Single instruction file&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;SKILL.md + strong description&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Clear triggers and scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;                  # Load docs only when needed&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds atomic scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;              # Small, reviewable helpers&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;level_5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;adds assets/examples/templates&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;    # Full progressive disclosure&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;depth_signals&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;standards_adherence&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;        # Structure aligns with agentskills.io conventions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;reference_quality&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;          # Curated references, not giant context dumps&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;script_atomicity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Focused helpers, not opaque monoliths&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tool_boundary_clarity&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Clear limits on what the skill can execute&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;community_signal&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Stars/forks/users help, but only as a weak boost&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Зірки GitHub можуть трохи підняти оцінку довіри, але вони ніколи не рятують поверхову чи небезпечну навичку. Репозиторій з великою кількістю зірок з одним розпливчастим &lt;code&gt;SKILL.md&lt;/code&gt; та непрозорими скриптами отримує оцінку нижчу за менший репозиторій з точним описом, впорядкованими довідковими матеріалами в &lt;code&gt;references/&lt;/code&gt; та атомарними хелперами, що справді використовують повну можливість моделі навичок.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Структурний аналіз&lt;/strong&gt;: ми перевіряємо якість навички:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;wc&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; -l&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/SKILL.md&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Size check&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/scripts/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Supporting files&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; vendor/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;rep&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;o&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skil&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;l&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;/references/&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # Bundled docs&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Якщо кандидат включає скрипти, цей перегляд стає суворішим. Добра навичка не просто корисна; вона має бути читабельною, обмеженою та безпечною, щоб довірити її агенту. Сам цей фільтр безпеки дискваліфікує значну частку інакше цікавих кандидатів.&lt;/p&gt;
&lt;h3 id=&quot;фаза-3-засвоєння&quot;&gt;Фаза 3: Засвоєння&lt;/h3&gt;
&lt;p&gt;Коли навичка проходить оцінку, вона потрапляє в реєстр. Але навички ніколи не впроваджуються без змін. Вони модифікуються, щоб підходити нашій системі.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Модифікації при впровадженні&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Нормалізація метаданих&lt;/strong&gt;: кожна навичка отримує нашу схему frontmatter&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Присвоєння K-рівня&lt;/strong&gt;: навички розміщуються у відповідному шарі знань&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Збагачення тегами&lt;/strong&gt;: додаються теги для виявлення&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Декларація інструментів&lt;/strong&gt;: явно декларуються дозволені інструменти&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Вирівнювання секцій&lt;/strong&gt;: вміст перебудовується відповідно до нашого шаблону&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Типовий YAML навички після засвоєння:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  identifier&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  name&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor-skill-evaluation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Systematic evaluation of vendor skills for adoption.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  layer&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;K4&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  semantic_folder&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;project&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  source&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;core&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&apos;2026-01-17&apos;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;frontmatter&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;agents&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;meta&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;skill-adoption&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  allowed_tools&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Bash&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Read&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Write&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Edit&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Grep&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Glob&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;Task&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;фаза-4-присвоєння-сфери&quot;&gt;Фаза 4: Присвоєння сфери&lt;/h3&gt;
&lt;p&gt;Навички присвоюються сферам — категоріям, що визначають, який агент завантажує яку навичку:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;domains/rpc-validation-checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-database&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase/supabase-auth&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/research-workflows&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/web-extraction-playbook&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;identities/dataset-discovery-quickstart&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Агенти декларують свої сфери, і навички присвоюються автоматично:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent definition&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;database&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Gets: all database skills + all research skills + universal skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;фаза-5-матеріалізація&quot;&gt;Фаза 5: Матеріалізація&lt;/h3&gt;
&lt;p&gt;Навички не живуть як YAML у продакшні. Вони рендеряться в файли SKILL.md, які може завантажити Claude Code:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ця команда:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Читає всі YAML-визначення навичок&lt;/li&gt;
&lt;li&gt;Рендерить їх через шаблони Jinja&lt;/li&gt;
&lt;li&gt;Записує файли SKILL.md у &lt;code&gt;.claude/skills/&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Організовує за K-рівнем (foundations/, identities/, domains/, stacks/, project/)&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Фінальна структура виводу:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;.claude/skills/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── foundations/     # K0: Universal&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── identities/      # K1: Discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── domains/         # K2: Subject&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── stacks/          # K3: Technology&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;├── project/         # K4: Organization&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;└── vendor/          # External skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;патерн-сплячої-сфери&quot;&gt;Патерн сплячої сфери&lt;/h2&gt;
&lt;p&gt;Один з наших найпотужніших патернів — навички «впроваджені, але не завантажені». Ми називаємо їх сплячими сферами.&lt;/p&gt;
&lt;p&gt;Розгляньмо навички наукових обчислень з репозиторію k-dense-scientific. Ми впровадили 120+ навичок, що покривають біоінформатику, хімію, квантові обчислення та клінічну інформатику. Але більшості наших агентів не потрібен молекулярний докінг чи аналіз експресії генів.&lt;/p&gt;
&lt;p&gt;Замість завантаження всіх 120 навичок у кожного агента (роздуваючи вікна контексту), ми:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Впроваджуємо&lt;/strong&gt; навички з конкретною сферою (наприклад, &lt;code&gt;bioinformatics&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Тримаємо їх &lt;strong&gt;сплячими&lt;/strong&gt; — зареєстрованими, але не завантаженими&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Активуємо&lt;/strong&gt; їх лише коли агент декларує цю сферу&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# In scopes.yaml - dormant scope&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  description&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Bioinformatics and genomics&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  primary_skills&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: []  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Empty - skills exist but aren&apos;t loaded&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# When an agent needs bioinformatics:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Agent YAML&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;scopes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;research&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;bioinformatics&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Now loads bioinformatics skills&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Цей патерн дозволяє нам мати 466 навичок у реєстрі, тоді як типові агенти завантажують лише 40–60 релевантних.&lt;/p&gt;
&lt;h2 id=&quot;типи-навичок&quot;&gt;Типи навичок&lt;/h2&gt;
&lt;p&gt;Навички бувають трьох когнітивних патернів:&lt;/p&gt;
&lt;h3 id=&quot;workflow-робочий-процес&quot;&gt;Workflow (робочий процес)&lt;/h3&gt;
&lt;p&gt;Упорядковані процедурні кроки: «1. Зроби X, 2. Потім Y, 3. Нарешті Z»&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: schema-migration-workflow, mining-session-workflow&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;discipline-дисципліна&quot;&gt;Discipline (дисципліна)&lt;/h3&gt;
&lt;p&gt;Поведінкові запобіжники: «Завжди X», «Ніколи Y», «Надавай перевагу Z»&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: test-first-discipline, evidence-based-completion&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;checklist-чекліст&quot;&gt;Checklist (чекліст)&lt;/h3&gt;
&lt;p&gt;Критерії перевірки: «Підтверди X», «Перевір Y», «Звір Z»&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;checklist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Examples: auth-validation-checklist, secrets-audit-checklist&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;перевірки-якості&quot;&gt;Перевірки якості&lt;/h2&gt;
&lt;p&gt;Кожна навичка має пройти валідацію, перш ніж постачатися:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;validation&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  file_exists&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;           # Skill file at declared path&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  frontmatter_valid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Frontmatter parses correctly&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  sections_complete&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;     # Expected sections present&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tools_registered&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;      # Declared tools exist in registry&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Описи мають бути 50–400 символів з тригерними фразами («Use when…», «When you need…»), щоб Claude Code знав, коли їх пропонувати.&lt;/p&gt;
&lt;p&gt;Ми валідуємо безперервно:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;екосистема-вендорів&quot;&gt;Екосистема вендорів&lt;/h2&gt;
&lt;p&gt;Наші 373 навички вендорів походять від:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Провайдер&lt;/th&gt;
&lt;th&gt;Навички&lt;/th&gt;
&lt;th&gt;Домен&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AWS Agent&lt;/td&gt;
&lt;td&gt;19&lt;/td&gt;
&lt;td&gt;Хмарні сервіси&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anthropic&lt;/td&gt;
&lt;td&gt;12&lt;/td&gt;
&lt;td&gt;Генерація документів&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;Edge-обчислення&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Supabase&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Бази даних&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k-dense&lt;/td&gt;
&lt;td&gt;100+&lt;/td&gt;
&lt;td&gt;Наукові обчислення&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;silvainfm&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;Наука про дані&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Java Developer Kit&lt;/td&gt;
&lt;td&gt;45+&lt;/td&gt;
&lt;td&gt;Spring/Java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;Автоматизація браузера&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Кожен вендорський корінь декларується в metadata.yaml:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;vendor_roots&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/aws-agent-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;aws&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/k-dense-scientific/scientific-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;k-dense&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;vendor/supabase-skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    provider&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;supabase&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Коли запускається &lt;code&gt;orkestra sync&lt;/code&gt;, для навичок вендорів створюються символічні посилання (symlink) у &lt;code&gt;.claude/skills/vendor/&lt;/code&gt; у просторі імен відповідного провайдера.&lt;/p&gt;
&lt;h2 id=&quot;що-ми-зрозуміли&quot;&gt;Що ми зрозуміли&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Вибірковість окупається.&lt;/strong&gt; Спокусливо впроваджувати все, що виглядає корисним. Але кожна навичка коштує токенів. З 2834 середніми токенами на навичку роздування шкодить швидко. Наш 13% рівень відбору тримає агентів компактними.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Структура вмикає виявлення.&lt;/strong&gt; Система K-рівнів — це не просто організація, а про перенесуваність. Навички K0 можна повторно використовувати будь-де. Навички K4 навмисно специфічні для проєкту. Ця чіткість допомагає і людям, і агентам знаходити потрібне.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Сплячі сфери масштабуються.&lt;/strong&gt; Можна впровадити сотні навичок, не завантажуючи їх усі. Сфери дозволяють будувати всеосяжний реєстр, водночас тримаючи вікна контексту окремих агентів керованими.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Модифікація при впровадженні необхідна.&lt;/strong&gt; Сирі навички вендорів рідко підходять вашій системі напряму. Процес засвоєння — додавання метаданих, присвоєння рівнів, збагачення тегами — робить зовнішні навички робочими всередині.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Видобуток безперервний.&lt;/strong&gt; Число 3500 продовжує зростати. З’являються нові репозиторії вендорів. Виникають патерни спільноти. Закріплюються внутрішні робочі процеси. Цикл ніколи не зупиняється.&lt;/p&gt;
&lt;h2 id=&quot;що-далі&quot;&gt;Що далі&lt;/h2&gt;
&lt;p&gt;Ми працюємо над кількома покращеннями:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Автоматизоване виявлення прогалин&lt;/strong&gt;: сповіщення, коли поширені відмови агентів могли б бути вирішені ще не впровадженою навичкою&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Процеси виведення навичок з обігу&lt;/strong&gt;: формальний процес виведення з обігу навичок, які замінені чи не використовуються&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Міжнавичкові залежності&lt;/strong&gt;: явна декларація передумов навички&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Аналітика використання&lt;/strong&gt;: відстеження, які навички агенти справді викликають, а не просто завантажують&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Цикл видобутку навичок — це інфраструктура. Нічого гламурного. Але саме це робить так, що 41 агент узгоджено працює з 466 можливостями, залишаючись у межах контексту.&lt;/p&gt;
&lt;p&gt;Ось історія того, як 3500 стають 466. Не через ігнорування 3000 — через систематичну оцінку й відбір лише того, що працює.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Хочете побачити систему навичок у дії? Перегляньте &lt;code&gt;uv run orkestra skills list&lt;/code&gt;, щоб дослідити наш поточний реєстр.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Skills</category></item><item><title>Прогресивне розкриття: вікна CLI в агентні системи</title><link>https://maguyva.ai/uk/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/progressive-disclosure-cli-into-agents</guid><description>Агентні системи за замовчуванням непрозорі. Прогресивне розкриття дає операторам багаторівневі подання CLI — від швидких перевірок статусу до повної внутрішньої структури агентів і трейсів рішень.</description><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа в цьому дописі відображають стан системи на момент публікації (січень 2026). Актуальні цифри дивіться на нашій &lt;a href=&quot;https://maguyva.ai/uk/team&quot;&gt;сторінці команди&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Агентні системи непрозорі за задумом. Вони ухвалюють рішення, викликають інструменти й координують роботу десятків спеціалістів. Але коли щось йде не так — або коли ви просто хочете зрозуміти, що відбувається — куди дивитися?&lt;/p&gt;
&lt;p&gt;Відповідь — прогресивне розкриття: багаторівневий інтерфейс, що показує рівно стільки складності, скільки вам потрібно, саме тоді, коли це потрібно.&lt;/p&gt;
&lt;h2 id=&quot;проблема-непрозорості&quot;&gt;Проблема непрозорості&lt;/h2&gt;
&lt;p&gt;Сучасна система оркестрації агентів може мати:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;40+ спеціалізованих агентів, кожен з унікальними можливостями&lt;/li&gt;
&lt;li&gt;700+ навичок, що охоплюють внутрішню автоматизацію та інтеграції з вендорами&lt;/li&gt;
&lt;li&gt;470+ архітектурних рішень, що формують поведінку&lt;/li&gt;
&lt;li&gt;Десятки серверів інструментів MCP, що надають зовнішні можливості&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ця складність навмисна. Агентам потрібен доступ до багатого контексту — доменних знань, інтелекту коду, схем баз даних — щоб ухвалювати добрі рішення. Але та сама насиченість створює проблему видимості.&lt;/p&gt;
&lt;p&gt;Як дізнатися, який агент обробляє міграції баз даних? Які рішення сформували поведінку ранжування системи пошуку? До яких інструментів має доступ радник з архітектури?&lt;/p&gt;
&lt;p&gt;Без структурованого доступу вам залишається читати вихідний код або сподіватися, що документація актуальна.&lt;/p&gt;
&lt;h2 id=&quot;прогресивне-розкриття-як-архітектура&quot;&gt;Прогресивне розкриття як архітектура&lt;/h2&gt;
&lt;p&gt;Прогресивне розкриття — не просто патерн UI. Це архітектурний принцип: організовувати інформацію шарами, кожен глибший за попередній, щоб користувачі могли зупинитися на рівні, що відповідає на їхнє запитання.&lt;/p&gt;
&lt;p&gt;Для агентних систем це означає команди CLI з дедалі вищою деталізацією:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Рівень&lt;/th&gt;
&lt;th&gt;Команда&lt;/th&gt;
&lt;th&gt;Запитання, на яке відповідає&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra system status&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Чи все працює справно?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents list&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Які агенти існують?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra agents info &amp;lt;name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Що робить цей агент?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;&lt;code&gt;orkestra decisions search&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Чому це працює саме так?&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;Інструменти Maguyva MCP&lt;/td&gt;
&lt;td&gt;Покажи мені код.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Кожен рівень відповідає на природне наступне запитання. Вам рідко потрібно стрибати одразу до рівня 5.&lt;/p&gt;
&lt;h2 id=&quot;рівень-1-працездатність-системи&quot;&gt;Рівень 1: працездатність системи&lt;/h2&gt;
&lt;p&gt;Перше запитання завжди: чи все працює?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; system&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; status&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_internal&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;466&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_vendor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;240&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;skills_total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;706&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;commands&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;17&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Одна команда. Чотири числа. Достатньо, щоб знати, що система налаштована, а реєстри заповнені.&lt;/p&gt;
&lt;p&gt;Якщо кількість агентів несподівано падає, чи навички не завантажуються, ви бачите це тут першим. Занурення в логи не потрібне.&lt;/p&gt;
&lt;h2 id=&quot;рівень-2-інвентаризація-агентів&quot;&gt;Рівень 2: інвентаризація агентів&lt;/h2&gt;
&lt;p&gt;Щойно ви знаєте, що система працює справно, наступне запитання: що доступно?&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це повертає структуровані дані — назви агентів, описи, бажані моделі, покриття доменів. Вивід за замовчуванням у JSON, тож легко направити його через конвеєр у &lt;code&gt;jq&lt;/code&gt; для фільтрації:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; jq&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &apos;.agents[] | select(.model == &quot;opus&quot;) | .name&apos;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Потрібні агенти, що обробляють роботу з базами даних? Команда пошуку звужує вибір:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Вона сканує назви, описи та можливості. Ви знаходите правильного спеціаліста, не читаючи 40 визначень агентів.&lt;/p&gt;
&lt;h2 id=&quot;рівень-3-глибоке-занурення-в-агента&quot;&gt;Рівень 3: глибоке занурення в агента&lt;/h2&gt;
&lt;p&gt;Знайшли агента, що виглядає доречним? Команда &lt;code&gt;info&lt;/code&gt; розкриває все:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; architecture-advisor&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Вивід включає:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Метадані&lt;/strong&gt;: назва, категорія, бажана модель, опис&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Домени&lt;/strong&gt;: які ділянки знань покриває цей агент&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Identity&lt;/strong&gt;: риси характеру (architect, strategist, knowledge-architect)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Довідники інструментів&lt;/strong&gt;: яка документація інструментів впроваджується в контекст&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Інструменти&lt;/strong&gt;: повний список інструментів MCP, доступних цьому агенту&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ось приклад того, що ви бачите:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;jsonc&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;metadata&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;name&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;architecture-advisor&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;model&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;opus&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;description&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Strategic decision-making and architectural guidance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  },&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;domains&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;product&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;development/architecture&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;meta/strategy&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;mcp_tools&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__intelligent_search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__maguyva__analyze_dependencies&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;      &quot;mcp__supabase__execute_sql&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FDAEB7;font-style:italic&quot;&gt;      ...&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це повідомляє точно, що агент може робити. Вихідний код не потрібен.&lt;/p&gt;
&lt;h2 id=&quot;рівень-4-археологія-рішень&quot;&gt;Рівень 4: археологія рішень&lt;/h2&gt;
&lt;p&gt;Агенти поводяться відповідно до задокументованих рішень. Коли вам потрібно зрозуміти, &lt;em&gt;чому&lt;/em&gt; щось працює саме так, реєстр рішень — джерело істини.&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;agent&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це повертає відповідні архітектурні рішення:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;domain&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;search&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;status&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;active&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Кожне рішення має повну історію походження — коли його ухвалили, чому, які компроміси розглядалися, які коміти його реалізували:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; DEC-SR-049&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;DEC-SR-049&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;title&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;AI-Agent-First Defaults with Graph Intelligence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;summary&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Changes default values for search tools to AI-agent-optimal behavior...&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;AI agents work better with pre-ranked, importance-weighted results&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Graph metrics already computed by pipeline - leverage them&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    &quot;Community context helps agents understand feature scope in single query&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ],&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;source_commits&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;sha&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;156a880d05eae295669ef7c194b039023f245511&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;      &quot;message&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;feat(maguyva): enable boost_by_importance...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  ]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це архітектурна документація, що залишається актуальною, бо вона видобувається з комітів, а не підтримується вручну.&lt;/p&gt;
&lt;h2 id=&quot;рівень-5-прямий-інтелект-коду&quot;&gt;Рівень 5: прямий інтелект коду&lt;/h2&gt;
&lt;p&gt;Коли вам потрібно побачити реальну реалізацію — не метадані про неї — інструменти MCP від Maguyva надають прямий доступ.&lt;/p&gt;
&lt;p&gt;Із сесії агента:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__intelligent_search&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  query: &quot;agent context loading&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це автоматично маршрутизує через семантичний, текстовий та AST пошук, щоб знайти релевантний код. Для конкретних символів:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__find_symbol&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  symbol_name: &quot;load_agent_context&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Для аналізу залежностей:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;mcp__maguyva__analyze_dependencies&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  target: &quot;packages/orchestration/core/agents.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ці інструменти не просто замінюють grep. Вони враховують граф, використовують семантичний індекс та інтегровані з тим самим інтелектом коду, що живить самих агентів.&lt;/p&gt;
&lt;h2 id=&quot;уніфікований-пошук-по-реєстрах&quot;&gt;Уніфікований пошук по реєстрах&lt;/h2&gt;
&lt;p&gt;Іноді ви не знаєте, який реєстр містить відповідь. Уніфікований пошук охоплює все:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;$&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --summary&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;json&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;{&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;query&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;database&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;total&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;254&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;  &quot;counts&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: {&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;agents&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;40&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;skills&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;59&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;decisions&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;476&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;truths&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    &quot;packages&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;1&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  }&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;254 збіги в п’яти реєстрах. Резюме повідомляє, куди заглибитися. Приберіть &lt;code&gt;--summary&lt;/code&gt; для детальних результатів або додайте &lt;code&gt;--limit 5&lt;/code&gt;, щоб зберегти вивід керованим.&lt;/p&gt;
&lt;h2 id=&quot;чому-це-важливо&quot;&gt;Чому це важливо&lt;/h2&gt;
&lt;p&gt;Прогресивне розкриття — не просто про зручність. Воно змінює те, як ви взаємодієте зі складними системами.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Налагодження стає посильним.&lt;/strong&gt; Коли агент ухвалює несподіване рішення, ви не грепаєте логи. Ви перевіряєте, до яких інструментів у нього є доступ (&lt;code&gt;agents info&lt;/code&gt;), які рішення формують його поведінку (&lt;code&gt;decisions search&lt;/code&gt;), і за потреби простежуєте реалізацію (&lt;code&gt;intelligent_search&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Онбординг прискорюється.&lt;/strong&gt; Новим членам команди не потрібно читати всю кодову базу. Вони починають з &lt;code&gt;system status&lt;/code&gt;, досліджують за допомогою &lt;code&gt;agents list&lt;/code&gt; і заглиблюються лише коли натрапляють на щось незрозуміле.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Документація залишається актуальною.&lt;/strong&gt; Оскільки CLI читає з тих самих реєстрів, що конфігурують агентів, вивід завжди точний. Немає розходження між тим, що каже документація, і тим, що робить система.&lt;/p&gt;
&lt;h2 id=&quot;cli-як-інтерфейс&quot;&gt;CLI як інтерфейс&lt;/h2&gt;
&lt;p&gt;Ми могли б побудувати веб-дашборд. Могли б написати розлогу документацію. Натомість ми побудували CLI, що читає з джерела істини.&lt;/p&gt;
&lt;p&gt;CLI має переваги:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Композиційність&lt;/strong&gt;: направляйте вивід через конвеєр у &lt;code&gt;jq&lt;/code&gt;, інтегруйте зі скриптами&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Придатність до скриптування&lt;/strong&gt;: автоматизуйте перевірки, генеруйте звіти&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Швидкість&lt;/strong&gt;: жодних завантажень сторінок, жодних потоків автентифікації&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Точність&lt;/strong&gt;: читає реальну конфігурацію, а не кешоване представлення&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Для систем, де коректність важливіша за естетику, перемагає CLI.&lt;/p&gt;
&lt;h2 id=&quot;побудова-власного-прогресивного-розкриття&quot;&gt;Побудова власного прогресивного розкриття&lt;/h2&gt;
&lt;p&gt;Якщо ви будуєте агентні системи, подумайте, як користувачі їх досліджуватимуть:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Почніть з перевірок працездатності.&lt;/strong&gt; Одна команда, що повідомляє, чи все працює.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Надайте перегляди інвентаризації.&lt;/strong&gt; Перерахуйте, що існує, перш ніж пояснювати, що воно робить.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Уможливте цільові запити.&lt;/strong&gt; Пошук перемагає перегляд у масштабі.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Покажіть походження рішень.&lt;/strong&gt; Дозвольте користувачам простежувати рішення до їхнього походження.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;З’єднайте з інтелектом коду.&lt;/strong&gt; Врешті-решт користувачам потрібно побачити реалізацію.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Кожен шар відповідає на наступне запитання. Будуйте їх у порядку частоти — більшість користувачів зупиняються на шарі 2 чи 3. Лише досвідчені користувачі досягають шару 5.&lt;/p&gt;
&lt;p&gt;Мета не в тому, щоб розкрити все. Мета в тому, щоб розкрити рівно те, що потрібно, саме тоді, коли це потрібно. Це і є прогресивне розкриття, застосоване до архітектури агентів.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>CLI</category><category>Tooling</category></item><item><title>Базові істини: прив&apos;язування ШІ-агентів до реальності</title><link>https://maguyva.ai/uk/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/ground-truths-anchoring-ai-to-reality</guid><description>ШІ-агенти впевнено галюцинують. Базові істини — це версійовані факти з чітко визначеною сферою дії, які прив&apos;язують поведінку агента до реальності. Ось як ми їх побудували та застосовуємо.</description><pubDate>Tue, 13 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа в цьому дописі відображають стан системи на момент публікації (січень 2026). Актуальні цифри дивіться на нашій &lt;a href=&quot;https://maguyva.ai/uk/team&quot;&gt;сторінці команди&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;ШІ-агенти надзвичайно здібні. Вони вміють міркувати, синтезувати та генерувати. Але в них є фундаментальна слабкість: вони вигадують. Не зловмисно, а впевнено. Агент може вигадати параметри API, яких не існує, послатися на конфігурації, які ніколи не визначалися, або застосувати патерни з даних навчання, що суперечать вашій реальній архітектурі.&lt;/p&gt;
&lt;p&gt;Стандартний спосіб зменшити ризик — «дати агенту більше контексту». Але контекст може суперечити сам собі. Документація розходиться з реалізацією. Коментарі брешуть. Навіть код може ввести в оману, якщо його читати без розуміння наміру.&lt;/p&gt;
&lt;p&gt;Нам потрібно було щось конкретніше. Щось, що не можна проігнорувати чи неправильно витлумачити. Щось, що прив’язувало б агентів до перевірюваної реальності.&lt;/p&gt;
&lt;p&gt;Ми називаємо їх базовими істинами (Ground Truths).&lt;/p&gt;
&lt;h2 id=&quot;що-таке-базова-істина&quot;&gt;Що таке базова істина?&lt;/h2&gt;
&lt;p&gt;Базова істина (ground truth) — це явне, версійоване твердження про факт, яке агенти зобов’язані враховувати. Це не документація. Це не коментар. Це повноцінна сутність у системі з:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Унікальним ідентифікатором&lt;/strong&gt; (на кшталт &lt;code&gt;GT-MAG-015&lt;/code&gt; чи &lt;code&gt;GT-MAG-036&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Статусом життєвого циклу&lt;/strong&gt; (поточний, попередній чи застарілий)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Сферою дії&lt;/strong&gt; (уся платформа, конкретний пакет чи домен)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Доказами&lt;/strong&gt; (шляхи до файлів, URL чи посилання, що доводять твердження)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Настановами для агента&lt;/strong&gt; (явні інструкції «робити/уникати»)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Ось приклад з нашої платформи інтелекту коду Maguyva:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Fuzzy symbol matching is opt-in via `find_similar=true`.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Default behavior returns empty results for non-existent symbols;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    `exact_match=true` enforces strict matching and disables all fuzzy fallbacks.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Deterministic defaults prevent agents from receiving misleading results.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Typos should fail explicitly rather than silently returning unrelated symbols.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/code_analysis_service.py&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/docs/quick_reference/parameters.md&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-25&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;ai_first&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це не проза. Це контракт. Коли агент натрапляє на цю базову істину, він знає:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Поведінка за замовчуванням детермінована (порожні результати, а не нечіткі здогадки)&lt;/li&gt;
&lt;li&gt;Є конкретні параметри (&lt;code&gt;find_similar&lt;/code&gt;, &lt;code&gt;exact_match&lt;/code&gt;) з визначеною поведінкою&lt;/li&gt;
&lt;li&gt;Докази існують у конкретних файлах, які можна перевірити&lt;/li&gt;
&lt;li&gt;Твердження було перевірене конкретної дати&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&quot;анатомія-реєстру-базових-істин&quot;&gt;Анатомія реєстру базових істин&lt;/h2&gt;
&lt;p&gt;Базові істини живуть у YAML-реєстрах під &lt;code&gt;ai_assets/reference/ground_truths.yaml&lt;/code&gt;. Кожен пакет чи домен може мати власний реєстр. Структура така:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;metadata&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva Ground Truths&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  summary&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Foundational constraints and principles that guide Maguyva.&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_updated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  owner&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;maguyva&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  render&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    include_statuses&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    show_deprecated&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;true&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    groups&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Product Principles&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;product&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;principle&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;brand&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;title&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Architecture &amp;amp; Boundaries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;        tags&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: [&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architecture&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;boundaries&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;cqrs&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;statements&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-001&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    scope&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;package&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Maguyva is read-only with respect to user repositories...&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    ...&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Реєстр містить метадані про саму колекцію, конфігурацію рендерингу для генерації документації та самі твердження. Кожне твердження підпорядковується суворій схемі, валідованій моделями Pydantic:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;class&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; GroundTruthStatement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;BaseModel&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;):&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;    id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    status: GTStatus  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# current, tentative, deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    source: GTSource &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;  # claude-code, orkestra, discipline&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    scope: GTScope  &lt;/span&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# platform, package, domain&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    statement: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    rationale: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    evidence: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    last_verified: &lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt; |&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    tags: list[&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;str&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;]&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    agent_guidance: AgentGuidance &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; None&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;як-агенти-отримують-доступ-до-базових-істин&quot;&gt;Як агенти отримують доступ до базових істин&lt;/h2&gt;
&lt;p&gt;Базові істини надаються через кілька каналів:&lt;/p&gt;
&lt;h3 id=&quot;1-відрендерена-документація&quot;&gt;1. Відрендерена документація&lt;/h3&gt;
&lt;p&gt;Команда &lt;code&gt;orkestra sync&lt;/code&gt; перетворює YAML-реєстри на читабельний markdown:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це генерує файли &lt;code&gt;GROUND_TRUTHS.md&lt;/code&gt;, які включаються в контекст агента. Відрендерений вивід групує твердження за статусом і категорією:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;markdown&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;## Current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Product Principles&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Maguyva is read-only with respect to user repositories... (GT-MAG-001)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Design tool responses for AI agents first... (GT-MAG-009)&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#79B8FF;font-weight:bold&quot;&gt;### Architecture &amp;amp; Boundaries&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; Pipeline and Maguyva boundaries are intentional... (GT-MAG-006)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;2-пошук-через-cli&quot;&gt;2. Пошук через CLI&lt;/h3&gt;
&lt;p&gt;Агенти з доступом до shell можуть шукати базові істини програмно:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;embedding&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --tag&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; security&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;uv&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; run&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; registry&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; truths&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --status&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; current&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Функція пошуку оцінює збіги за кількома полями зі зваженою релевантністю:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;python&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;def&lt;/span&gt;&lt;span style=&quot;color:#B392F0&quot;&gt; truth_fields&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;(gt: GroundTruthStatement) -&amp;gt; list[FieldSpec]:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#F97583&quot;&gt;    return&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; [&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;id&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;6&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.id]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;statement&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.statement]),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;rationale&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;4&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;[gt.rationale] &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; gt.rationale &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;else&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;tags&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;3&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.tags &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;        FieldSpec(&lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;name&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;evidence&quot;&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;weight&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt;2&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;, &lt;/span&gt;&lt;span style=&quot;color:#FFAB70&quot;&gt;values&lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;gt.evidence &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt; []),&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    ]&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;3-композиція-контексту&quot;&gt;3. Композиція контексту&lt;/h3&gt;
&lt;p&gt;Коли агенти рендеряться з YAML-визначень, їхній контекст може посилатися на реєстри базових істин:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;context_composition&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  domain_knowledge&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;packages/maguyva/ai_assets/reference/ground_truths.yaml&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це гарантує, що відповідні базові істини завантажуються до того, як агент почне роботу.&lt;/p&gt;
&lt;h2 id=&quot;категорії-базових-істин&quot;&gt;Категорії базових істин&lt;/h2&gt;
&lt;p&gt;Поглянувши на наші реєстри, можна побачити, що базові істини групуються в кілька патернів:&lt;/p&gt;
&lt;h3 id=&quot;принципи-продукту&quot;&gt;Принципи продукту&lt;/h3&gt;
&lt;p&gt;Обмеження щодо того, чим продукт є, а чим не є:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Maguyva працює з репозиторіями користувачів лише в режимі читання; єдиний актив, який неможливо відновити — це платний кеш ембеддингів». (GT-MAG-001)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;архітектурні-межі&quot;&gt;Архітектурні межі&lt;/h3&gt;
&lt;p&gt;Де живуть обов’язки і чому:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Межі між pipeline та Maguyva навмисні: pipeline перевикористовуваний, Maguyva утримує специфічну для коду логіку, а CQRS відокремлює операції запису на етапах конвеєра від операцій читання на сервері». (GT-MAG-006)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;правила-проти-галюцинацій&quot;&gt;Правила проти галюцинацій&lt;/h3&gt;
&lt;p&gt;Явні вимоги, які забезпечують детерміновані контракти інструментів, а не контракти на основі здогадок:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Нечітке зіставлення символів опційне через &lt;code&gt;find_similar=true&lt;/code&gt;. Поведінка за замовчуванням повертає порожні результати для символів, яких не існує; &lt;code&gt;exact_match=true&lt;/code&gt; забезпечує суворе зіставлення і вимикає всі нечіткі резервні варіанти». (GT-MAG-015)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;перевірки-якості&quot;&gt;Перевірки якості&lt;/h3&gt;
&lt;p&gt;Стандарти, які потрібно підтримувати:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Зміни до спільної інфраструктури (post_filters.py, екстрактори зв’язків, спільні обробники) МАЮТЬ бути перевірені для УСІХ підтримуваних мов через генерацію повного маніфесту перед комітом. Валідація однієї мови недостатня для спільного коду». (GT-MAG-036)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id=&quot;патерни-коду&quot;&gt;Патерни коду&lt;/h3&gt;
&lt;p&gt;Вимоги до реалізації:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;«Використовуйте &lt;code&gt;asyncio.to_thread()&lt;/code&gt; для CPU-навантаженої роботи в асинхронних контекстах; застарілий патерн &lt;code&gt;loop.run_in_executor()&lt;/code&gt; не слід використовувати в новому коді». (GT-MAG-018)&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;життєвий-цикл-базової-істини&quot;&gt;Життєвий цикл базової істини&lt;/h2&gt;
&lt;p&gt;Базові істини не статичні. Вони еволюціонують через визначений життєвий цикл:&lt;/p&gt;
&lt;h3 id=&quot;попередня-tentative&quot;&gt;Попередня (Tentative)&lt;/h3&gt;
&lt;p&gt;Запропонована істина на етапі оцінки. Твердження зафіксоване, але може змінитися:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-044&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;tentative&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    get_file with include_metadata=false may still return metadata in the&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    response because middleware may re-inject it for AI agent disambiguation.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;поточна-current&quot;&gt;Поточна (Current)&lt;/h3&gt;
&lt;p&gt;Перевірена істина, яку агенти зобов’язані поважати. Докази валідовано:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-017&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;current&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  last_verified&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;2026-01-26&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  evidence&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;    - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;packages/maguyva/server/src/maguyva/services/supabase.py&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;застаріла-deprecated&quot;&gt;Застаріла (Deprecated)&lt;/h3&gt;
&lt;p&gt;Істина, що більше не застосовується. Зберігається для історичної довідки з посиланням на те, що її замінило:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-099&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  status&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;deprecated&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  superseded_by&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-015&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  notes&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Replaced when we moved to explicit matching behavior&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;чому-не-просто-документація&quot;&gt;Чому не просто документація?&lt;/h2&gt;
&lt;p&gt;Документація слугує іншій меті. Вона пояснює. Вона навчає. Вона може бути розпливчастою, може використовувати уточнення на кшталт «зазвичай» чи «як правило».&lt;/p&gt;
&lt;p&gt;Базові істини не можуть бути розпливчастими. Це твердження. Вони або застосовуються, або ні.&lt;/p&gt;
&lt;p&gt;Розгляньмо різницю:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Документація:&lt;/strong&gt; «API зазвичай повертає порожні результати, коли символ не знайдено, хоча нечітке зіставлення може бути увімкнене в деяких конфігураціях».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Базова істина:&lt;/strong&gt; «Поведінка за замовчуванням повертає порожні результати для символів, яких не існує; &lt;code&gt;exact_match=true&lt;/code&gt; забезпечує суворе зіставлення і вимикає всі нечіткі резервні варіанти».&lt;/p&gt;
&lt;p&gt;Перше корисне для людей, які вивчають систему. Друге придатне до дії для агентів, які ухвалюють рішення.&lt;/p&gt;
&lt;h2 id=&quot;настанови-для-агента-робити-й-уникати&quot;&gt;Настанови для агента: робити й уникати&lt;/h2&gt;
&lt;p&gt;Деякі базові істини містять явні настанови для агента:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code,&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  agent_guidance&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    do&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Fix extraction bugs in YAML config, handlers, or tree-sitter queries&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Add test cases at the layer where the fix lives&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;    avoid&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Adding validator filters to mask production bugs&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;      - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;&quot;Creating test-only workarounds for extraction issues&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це усуває неоднозначність. Агент, що це читає, знає не лише те, що є правдою, а й те, які дії ця правда передбачає.&lt;/p&gt;
&lt;h2 id=&quot;перевірка-та-підтримка&quot;&gt;Перевірка та підтримка&lt;/h2&gt;
&lt;p&gt;Базові істини потребують підтримки. Ми відстежуємо:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;last_verified&lt;/strong&gt;: коли хтось підтвердив, що твердження досі справджується&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;evidence&lt;/strong&gt;: файли, що доводять твердження (можна перевірити на існування)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;source&lt;/strong&gt;: звідки походить істина (перевірка через CLI, архітектурний огляд, висновки після інциденту)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Базова істина із застарілими датами перевірки чи неробочими посиланнями на докази — сигнал для розслідування. Або істина все ще дійсна й потребує повторної перевірки, або реальність змінилася й істину потрібно оновити.&lt;/p&gt;
&lt;h2 id=&quot;реальні-приклади-з-продакшну&quot;&gt;Реальні приклади з продакшну&lt;/h2&gt;
&lt;h3 id=&quot;межа-безпеки&quot;&gt;Межа безпеки&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-014&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Maguyva queries are search patterns, not executable code.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    SQL injection prevention is handled by PostgREST parameterization;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    application-layer SQL keyword blocking must never be added.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Blocking SQL keywords breaks legitimate code search. Users search FOR&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    code containing patterns like &apos;DROP TABLE&apos;, they don&apos;t execute them.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ця базова істина запобігає класу помилкових «покращень безпеки», які зламали б продукт.&lt;/p&gt;
&lt;h3 id=&quot;точність-на-момент-вилучення&quot;&gt;Точність на момент вилучення&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-022&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Accuracy fixes must happen at extraction time via production code&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (YAML config, handlers, queries), never via validator filters.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Validator filters only run during tests. They can hide extractor bugs&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    while production responses remain wrong.&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це прийшло з болючого досвіду. Агенти виправляли мовні пакети, що падали, додаючи фільтри лише на рівні валідатора, які робили тестовий харнес зеленішим на вигляд, тоді як живий екстрактор Maguyva все ще видавав неправильні ребра. Правило змушує повертати виправлення в реальний шлях: конфігурацію YAML, запити чи обробники.&lt;/p&gt;
&lt;h3 id=&quot;багаторівневе-фільтрування&quot;&gt;Багаторівневе фільтрування&lt;/h3&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;- &lt;/span&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;id&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;GT-MAG-023&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  statement&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Language engine uses three-tier filtering: external_method_patterns&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (builtins/stdlib), allowlists (legitimate idioms), and expected_call_targets&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    (validation-time deduplication). Each tier serves a distinct purpose.&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;  rationale&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#F97583&quot;&gt;|&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    Conflating filter purposes leads to either over-filtering (missing real&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;    relationships) or under-filtering (noise).&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Це не дозволяє агентам додавати фільтри в неправильному місці — поширена помилка, що спричиняла регресії точності.&lt;/p&gt;
&lt;h2 id=&quot;інтеграція-з-системою-оркестрації&quot;&gt;Інтеграція з системою оркестрації&lt;/h2&gt;
&lt;p&gt;Базові істини — це один шар ширшої системи контексту:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Архітектурні рішення (ADR)&lt;/strong&gt; — фіксують, чому ми обрали підхід A, а не B&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Базові істини&lt;/strong&gt; — стверджують, що є безумовно правдивим прямо зараз&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Доменні патерни&lt;/strong&gt; — описують, як робити щось правильно&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Антипатерни&lt;/strong&gt; — описують, чого уникати і чому&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Агент, що працює в системі, має доступ до всіх чотирьох. Базові істини дають фактичний якір, тоді як рішення пояснюють історію, патерни спрямовують реалізацію, а антипатерни попереджають про пастки.&lt;/p&gt;
&lt;h2 id=&quot;вимірювання-впливу&quot;&gt;Вимірювання впливу&lt;/h2&gt;
&lt;p&gt;Відколи ми впровадили базові істини, ми спостерігаємо:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Менше циклів «виправити галюциновану правку»&lt;/li&gt;
&lt;li&gt;Впевненіше ухвалення рішень агентами, коли факти чіткі&lt;/li&gt;
&lt;li&gt;Кращі перегляди PR, бо очікування явні&lt;/li&gt;
&lt;li&gt;Скорочений час онбордингу для нових агентів (і людей)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Інвестиція в підтримку базових істин окупається зменшеним обсягом налагодження та чіткішими межами системи.&lt;/p&gt;
&lt;h2 id=&quot;початок-роботи&quot;&gt;Початок роботи&lt;/h2&gt;
&lt;p&gt;Щоб додати базову істину до вашої системи:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Створіть &lt;code&gt;ground_truths.yaml&lt;/code&gt; у теці &lt;code&gt;ai_assets/reference/&lt;/code&gt; вашого пакета&lt;/li&gt;
&lt;li&gt;Визначте метадані та конфігурацію рендерингу&lt;/li&gt;
&lt;li&gt;Додайте твердження за схемою&lt;/li&gt;
&lt;li&gt;Запустіть &lt;code&gt;uv run orkestra sync&lt;/code&gt;, щоб згенерувати документацію&lt;/li&gt;
&lt;li&gt;Включіть реєстр у композицію контексту агента&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Почніть з фактів, що спричиняють найбільше плутанини, або обмежень, які порушують найчастіше. Це ваші найцінніші базові істини.&lt;/p&gt;
&lt;h2 id=&quot;висновок&quot;&gt;Висновок&lt;/h2&gt;
&lt;p&gt;ШІ-агенти галюцинуватимуть. Така їхня природа. Але ми можемо створювати середовища, де галюцинації обмежені, де певні факти не підлягають обговоренню, де агенти можуть звіряти свої припущення з перевіреною реальністю.&lt;/p&gt;
&lt;p&gt;Базові істини — не повне рішення. Вони потребують підтримки. Вони можуть застарівати. Вони додають накладні витрати до процесу розробки.&lt;/p&gt;
&lt;p&gt;Але вони дають щось цінне: спільний словник фактів, якому можуть довіряти і люди, і агенти. У світі, де агенти дедалі більше беруть участь у розробці програмного забезпечення, ця спільна основа стає необхідною.&lt;/p&gt;
&lt;p&gt;Альтернатива — нескінченні цикли, коли агенти впевнено помиляються, а люди їх виправляють. Базові істини розривають цей цикл, роблячи виправлення явними й стійкими.&lt;/p&gt;
&lt;p&gt;Ваші агенти заслуговують знати, що є правдою. Скажіть їм.&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Grounding</category></item><item><title>Orkestra: оркестрація ШІ-агентів у масштабі</title><link>https://maguyva.ai/uk/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/uk/blog/orkestra-agent-orchestration</guid><description>Один оркестратор спрямовує роботу до спеціалізованих ШІ-агентів, кожен з яких має власні навички та пам&apos;ять. Як Orkestra координує 46 агентів і 466 навичок у продакшні.</description><pubDate>Tue, 06 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Числа в цьому дописі відображають стан системи на момент публікації (січень 2026). Актуальні цифри дивіться на нашій &lt;a href=&quot;https://maguyva.ai/uk/team&quot;&gt;сторінці команди&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Коли ми почали будувати на Claude Code, ми зіткнулися з проблемою, з якою рано чи пізно стикається кожна команда, що використовує ШІ-асистентів для програмування: жоден окремий агент не може добре робити все.&lt;/p&gt;
&lt;p&gt;Ви можете промптом зробити агента спеціалістом з баз даних. Або аудитором безпеки. Або frontend-інженером. Але в момент, коли ви просите його бути всіма трьома одразу, якість страждає. Контекст розбавляється. Інструкції конфліктують. Агент стає генералістом, посереднім у всьому.&lt;/p&gt;
&lt;p&gt;Тож ми побудували Orkestra.&lt;/p&gt;
&lt;h2 id=&quot;що-таке-orkestra&quot;&gt;Що таке Orkestra?&lt;/h2&gt;
&lt;p&gt;Orkestra — це система оркестрації агентів для Claude Code та подібних ШІ-інструментів для програмування. Вона координує кількох спеціалізованих агентів, кожен з власною експертизою, під керівництвом єдиного оркестратора, що спрямовує роботу до правильного спеціаліста.&lt;/p&gt;
&lt;p&gt;Уявіть це як кадрове агентство для ШІ-агентів. Оркестратор отримує завдання, визначає, який спеціаліст має його виконати, і делегує з правильним контекстом. Коли робота завершена, результати повертаються до оркестратора для синтезу.&lt;/p&gt;
&lt;p&gt;Цифри розповідають цю історію:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Компонент&lt;/th&gt;
&lt;th&gt;Кількість&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Спеціалізовані агенти&lt;/td&gt;
&lt;td&gt;46&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Перевикористовувані навички&lt;/td&gt;
&lt;td&gt;466&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Архетипи ідентичності&lt;/td&gt;
&lt;td&gt;27&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Мисленнєві настанови (mindsets)&lt;/td&gt;
&lt;td&gt;11&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Стилі спілкування&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Домени знань&lt;/td&gt;
&lt;td&gt;21&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id=&quot;система-характеру-dd-для-агентів&quot;&gt;Система характеру: D&amp;amp;D для агентів&lt;/h2&gt;
&lt;p&gt;Основне розуміння, що стоїть за Orkestra, у тому, що поведінка агента виникає з трьох композиційних примітивів:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identity (ідентичність)&lt;/strong&gt; визначає, &lt;em&gt;чим&lt;/em&gt; є агент. Архітектор проєктує структури систем. Дебагер простежує відмови до кореневих причин. Вартовий (guardian) забезпечує дотримання норм і меж безпеки. У нас є 27 архетипів ідентичності, які можна змішувати.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Mindset (мисленнєва настанова)&lt;/strong&gt; визначає, &lt;em&gt;як&lt;/em&gt; агент мислить. Аналітична настанова базує твердження на доказах і квантифікує невизначеність. Скептична настанова піддає сумніву припущення й шукає докази, що спростовують ці припущення. Дослідницька настанова приймає неоднозначність і пробує кілька підходів.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Style (стиль)&lt;/strong&gt; визначає, &lt;em&gt;як&lt;/em&gt; агент спілкується. Технічний стиль включає точні значення й посилається на конкретні файли. Стислий стиль відсікає зайве й починає з відповіді. Дипломатичний стиль урівноважує чесність і тактовність.&lt;/p&gt;
&lt;p&gt;Агент поєднує ці примітиви:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;yaml&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# architecture-advisor.yaml&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;identity&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;:&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;knowledge-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;  - &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;strategist&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;mindset&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;analytical&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#85E89D&quot;&gt;style&lt;/span&gt;&lt;span style=&quot;color:#E1E4E8&quot;&gt;: &lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt;concise&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ця композиція створює агента, що проєктує системи (architect), пов’язує знання між доменами (knowledge-architect), задає стратегічний напрям (strategist), мислить доказами й даними (analytical) та спілкується без зайвого (concise).&lt;/p&gt;
&lt;p&gt;Сила у комбінаторному вибуху. 27 ідентичностей помножені на 11 настанов і на 10 стилів дають майже 3000 можливих особистостей агента. Але ви визначаєте лише ті комбінації, які важливі для вашої роботи.&lt;/p&gt;
&lt;h2 id=&quot;навички-перевикористовувані-модулі-можливостей&quot;&gt;Навички: перевикористовувані модулі можливостей&lt;/h2&gt;
&lt;p&gt;Навички — це знання та робочі процеси, які агенти можуть викликати. Вони підпорядковуються рівневій системі, заснованій на сфері дії:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Рівень&lt;/th&gt;
&lt;th&gt;Назва&lt;/th&gt;
&lt;th&gt;Сфера дії&lt;/th&gt;
&lt;th&gt;Приклад&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;K0&lt;/td&gt;
&lt;td&gt;Основи&lt;/td&gt;
&lt;td&gt;Універсальна методологія&lt;/td&gt;
&lt;td&gt;Дисципліна test-first, завершення на основі доказів&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K1&lt;/td&gt;
&lt;td&gt;Ідентичності&lt;/td&gt;
&lt;td&gt;Робочі процеси на основі ролі&lt;/td&gt;
&lt;td&gt;Стандарти інтерфейсу CLI, playbook продуктивності&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K2&lt;/td&gt;
&lt;td&gt;Домени&lt;/td&gt;
&lt;td&gt;Знання конкретного домену&lt;/td&gt;
&lt;td&gt;Патерни міграції баз даних, валідація автентифікації&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K3&lt;/td&gt;
&lt;td&gt;Стеки&lt;/td&gt;
&lt;td&gt;Специфічне для технології&lt;/td&gt;
&lt;td&gt;Розгортання на Cloudflare, операції Supabase&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;K4&lt;/td&gt;
&lt;td&gt;Проєкт&lt;/td&gt;
&lt;td&gt;Лише ця кодова база&lt;/td&gt;
&lt;td&gt;Специфічні для проєкту робочі процеси й конвенції&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Навички завантажуються ліниво. Агент бачить назви й описи навичок під час запуску, але повний зміст навички завантажується лише при спрацюванні тригера. Це тримає контекст компактним, водночас роблячи сотні навичок доступними для виявлення.&lt;/p&gt;
&lt;p&gt;Кожна навичка включає:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Чіткі умови спрацювання («Використовуйте під час міграції схем бази даних»)&lt;/li&gt;
&lt;li&gt;Покрокові настанови&lt;/li&gt;
&lt;li&gt;Дозволені інструменти для робочого процесу&lt;/li&gt;
&lt;li&gt;Критерії успіху та шляхи відновлення після відмови&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;466 навичок у нашому реєстрі покривають усе — від ізоляції git worktree до робочих процесів веб-досліджень до перевірки працездатності після розгортання.&lt;/p&gt;
&lt;h2 id=&quot;чому-оркестрація-важлива&quot;&gt;Чому оркестрація важлива&lt;/h2&gt;
&lt;p&gt;Архітектури з одним агентом швидко впираються в стіни:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Розбавлення контексту.&lt;/strong&gt; Вікно контексту в 200 тис. токенів звучить великим, доки ви не завантажите схеми бази даних, документацію API, фікстури тестів та доменні знання. Спеціалісти можуть працювати з цільовим контекстом.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Конфлікти інструкцій.&lt;/strong&gt; Наказ агенту «бути ретельним, але швидким» та «перевіряти все, але не переускладнювати» створює напругу. Спеціалісти вирішують це, маючи чітку сферу дії.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Глибина експертизи.&lt;/strong&gt; Генераліст трохи знає про все. Спеціаліст, скомпонований з правильною ідентичністю та навичками, глибоко знає свій домен.&lt;/p&gt;
&lt;p&gt;Orkestra реалізує пласку оркестрацію: один оркестратор координує кількох спеціалістів. Спеціалісти не можуть породжувати підспеціалістів. Це запобігає вибуху складності, водночас уможливлюючи паралельну роботу.&lt;/p&gt;
&lt;p&gt;Оркестратор має доступ до 2,2 мільйона токенів ефективної ємності: власне вікно 200 тис. плюс 10 паралельних субагентів по 200 тис. кожен. Робота, яка виснажила б одного агента, комфортно виконується флотом.&lt;/p&gt;
&lt;h2 id=&quot;конвеєр-рендерингу&quot;&gt;Конвеєр рендерингу&lt;/h2&gt;
&lt;p&gt;Визначення агентів живуть у YAML. Claude Code читає Markdown. Orkestra перекриває цю прогалину детермінованим конвеєром рендерингу:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;YAML Registries → Jinja Templates → .claude/agents/*.md&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Оператори редагують джерело YAML. Запускають &lt;code&gt;orkestra sync&lt;/code&gt;. Відрендерений Markdown з’являється в &lt;code&gt;.claude/agents/&lt;/code&gt;. Claude Code підхоплює зміни.&lt;/p&gt;
&lt;p&gt;Це розділення слугує різним аудиторіям:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Джерело YAML&lt;/strong&gt; містить метадані життєвого циклу, теги, правила валідації та примітки про застарівання для інструментарію&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Відрендерений Markdown&lt;/strong&gt; містить лише те, що потрібно моделі: опис, інструменти, навички та поведінкові настанови&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Конвеєр компонує ідентичності, настанови, стилі та навички в один узгоджений промпт. Агент architect-analytical-concise отримує зовсім інший системний промпт, ніж агент debugger-skeptical-technical, навіть якщо вони поділяють якісь базові навички.&lt;/p&gt;
&lt;h2 id=&quot;доменні-знання-патерн-з-чотирьох-файлів&quot;&gt;Доменні знання: патерн з чотирьох файлів&lt;/h2&gt;
&lt;p&gt;Кожен домен знань дотримується узгодженої структури:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;plaintext&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span&gt;domain-name/&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  decisions.md      # Key choices, rationale, consequences&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  patterns.md       # Step-by-step guidance and examples&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  anti-patterns.md  # Failure modes and remediation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span&gt;  evolution.md      # Dated log of changes&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Ця структура слугує завантаженню контексту агента. Агент, що працює над автентифікацією, завантажує &lt;code&gt;authentication/patterns.md&lt;/code&gt; для настанов і &lt;code&gt;authentication/anti-patterns.md&lt;/code&gt;, щоб уникнути відомих пасток. Обсяг файлів підібрано для ефективного завантаження контексту: вони достатньо сфокусовані, щоб бути корисними, і достатньо всеосяжні, щоб бути авторитетними.&lt;/p&gt;
&lt;p&gt;Ми підтримуємо 21 домен верхнього рівня, включно з аналітикою, автентифікацією, наукою про дані, інфраструктурою, машинним навчанням, продуктивністю, безпекою та іншими. Кожен домен може мати піддомени для тоншої деталізації.&lt;/p&gt;
&lt;h2 id=&quot;цінності-операційна-система&quot;&gt;Цінності: операційна система&lt;/h2&gt;
&lt;p&gt;Усі агенти поділяють базовий шар цінностей, що визначають, як вони працюють:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Простота понад усе.&lt;/strong&gt; Використовуйте найпростіше рішення, що працює. Додавайте складність лише коли це виправдано.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Виправляйте кореневі причини.&lt;/strong&gt; Не обходьте збої тимчасовими латками. Якщо конвеєр падає, налагоджуйте конвеєр. Якщо тест падає, виправляйте код або тест.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;На основі доказів.&lt;/strong&gt; Позначайте твердження як «перевірені» (з бенчмарками) чи «оціночні» (з припущеннями). Виявлений патерн не дорівнює підтвердженій проблемі.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Економіка контексту.&lt;/strong&gt; Інструменти MCP коштують 0,1% контексту. Читання файлів коштує 2% кожне. Застосовуйте доменну експертизу перед дослідженням коду.&lt;/p&gt;
&lt;p&gt;Ці цінності поширюються на кожного спеціаліста через конвеєр рендерингу. Агент не може обійти їх через композицію.&lt;/p&gt;
&lt;h2 id=&quot;cli-площина-керування&quot;&gt;CLI: площина керування&lt;/h2&gt;
&lt;p&gt;Orkestra постачається з CLI для керування екосистемою агентів:&lt;/p&gt;
&lt;pre class=&quot;astro-code github-dark&quot; style=&quot;background-color:#24292e;color:#e1e4e8; overflow-x: auto;&quot; tabindex=&quot;0&quot; data-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Discovery&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;database&quot;&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; agents&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; database-architect&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Validation&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; validate&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --show-warnings&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Rendering&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;span style=&quot;color:#79B8FF&quot;&gt; --dry-run&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; sync&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Skills&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; list&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; skills&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; info&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; schema-migration-workflow&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#959da5&quot;&gt;# Decisions&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;line&quot;&gt;&lt;span style=&quot;color:#B392F0&quot;&gt;orkestra&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; decisions&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; search&lt;/span&gt;&lt;span style=&quot;color:#9ECBFF&quot;&gt; &quot;authentication&quot;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;CLI — джерело істини щодо того, які агенти існують, які навички вони мають і чи здорова система. Він запускає валідацію перед синхронізацією, щоб виявляти проблеми на ранній стадії.&lt;/p&gt;
&lt;h2 id=&quot;міркування-щодо-open-source&quot;&gt;Міркування щодо open source&lt;/h2&gt;
&lt;p&gt;Ми побудували Orkestra, щоб вирішити власну проблему: координацію ШІ-агентів у масштабі для складної кодової бази. Патерни, які ми виявили, не специфічні для нашого домену.&lt;/p&gt;
&lt;p&gt;Система композиції характеру (identity + mindset + style) застосовна до будь-якої команди, що визначає особистості агентів.&lt;/p&gt;
&lt;p&gt;Рівнева система навичок (K0–K4) дає ментальну модель для організації перевикористовуваних можливостей за сферою дії.&lt;/p&gt;
&lt;p&gt;Патерн конвеєра рендерингу (джерело YAML + шаблони + згенеровані артефакти) розділяє відповідальності між інструментарієм і споживанням моделлю.&lt;/p&gt;
&lt;p&gt;Пласка модель оркестрації (один координатор, багато спеціалістів) уникає складності, водночас уможливлюючи паралелізм.&lt;/p&gt;
&lt;p&gt;Чи стане Orkestra опенсорсним, залежить від того, чи мають ці патерни цінність для інших, хто будує на Claude Code. Якщо ви впираєтесь у стіни, які ми описали, ця архітектура може допомогти.&lt;/p&gt;
&lt;h2 id=&quot;що-ми-зрозуміли&quot;&gt;Що ми зрозуміли&lt;/h2&gt;
&lt;p&gt;Побудова Orkestra навчила нас, що оркестрація — це не про те, щоб зробити агентів розумнішими. Це про те, щоб зробити їх сфокусованішими.&lt;/p&gt;
&lt;p&gt;Один агент з ідеальними інструкціями все одно вичерпує контекст. Один агент з усіма навичками все одно плутається, яку застосувати. Один агент, що намагається бути всім, дає посередні результати в усьому.&lt;/p&gt;
&lt;p&gt;Сорок спеціалістів, кожен чудовий у своєму домені, координовані оркестратором, що знає, коли делегувати: ось як ми постачаємо продукт.&lt;/p&gt;
&lt;p&gt;Цифри важать менше за архітектуру. Вам може знадобитися п’ять агентів чи п’ятдесят. Принцип залишається: композиція понад можливість, спеціалізація понад узагальнення, координація понад індивідуальний героїзм.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;&lt;em&gt;Orkestra живить агентну екосистему за Maguyva, нашою платформою інтелекту коду. Хочете дізнатися більше? Зв’яжіться з командою.&lt;/em&gt;&lt;/p&gt;
</content:encoded><category>Architecture</category><category>Open Source</category></item></channel></rss>