<?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/ru/blog</link><language>ru</language><atom:link href="https://maguyva.ai/ru/rss.xml" rel="self" type="application/rss+xml"/><item><title>Контекст, который путешествует с вами</title><link>https://maguyva.ai/ru/blog/context-that-travels</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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/ru/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/ru/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>Сначала карта, потом ревью</title><link>https://maguyva.ai/ru/blog/map-first-review-second</link><guid isPermaLink="true">https://maguyva.ai/ru/blog/map-first-review-second</guid><description>Дайте кодирующему агенту опору в карте репозитория до того, как он начнёт писать. Пусть Greptile ревьюит пул-реквест после. Взаимодополняющая пара, а не замена.</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/ru/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/ru/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/ru/blog/large-repo-context-without-a-local-indexer</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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/ru/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/ru/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/ru/blog/why-ai-coding-agents-hallucinate-file-paths</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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/ru/blog/upgrading-code-search-to-voyage-4-large</link><guid isPermaLink="true">https://maguyva.ai/ru/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 и его родня — сопоставляет ключевые слова, работает локально и ничего не стоит. Open-source модели эмбеддингов вроде 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/ru/blog/autonomous-quality-loops-language-grind</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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;ЗЕЛЁНЫМ&lt;/strong&gt; только тогда, когда на его фикстурах precision ≥ 0,95, recall ≥ 0,99 и F1 ≥ 0,97, при не менее чем 20 ожидаемых рёбрах для статистической уверенности. Ниже этого — ЖЁЛТЫЙ или КРАСНЫЙ, и такой язык не отправляется в релиз.&lt;/p&gt;
&lt;p&gt;Этот контроль необходим, но недостаточен. Фикстуры проверяются на фикстурах, которые &lt;em&gt;написали мы сами&lt;/em&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;        ┌──────────────────────────────────────────────────────────┐&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), чтобы агенты не мешали друг другу. Оркестратор интегрирует их исправления по одному, каждый раз с проверкой регрессий по полному манифесту: изменение, которое помогает своему языку, но незаметно ломает три других, не проходит. Интеграция проходит проверку и подтверждается прежде, чем что-либо будет отправлено — проверка регрессий определяет, что &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% ошибок; при проверке реальный баг подтвердился лишь в одном языке — остальные случаи были ошибками судьи из-за незнания собственной семантики языка (одна строка исходника, легитимно порождающая несколько рёбер, привязки параметров, смоделированные как присваивания, языки с одной ссылкой на идентификатор). Именно поэтому мы делаем выборку с двумя случайными затравками и перекрёстно сверяем результаты, и именно поэтому расхождение между судьёй и фикстурами считается &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/ru/blog/multi-modal-fusion-search</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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;семантический&lt;/strong&gt; — векторный поиск по бинарным эмбеддингам Voyage; находит код по смыслу.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;текстовый&lt;/strong&gt; — триграммное сопоставление; находит литералы, строки ошибок, точные идентификаторы.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;структурный&lt;/strong&gt; — запросы к AST; находит определения, сигнатуры и языковые конструкции.&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;Прежде чем запускается любое извлечение, лёгкий классификатор относит запрос к одному из шести типов намерения, с оценкой уверенности. Он намеренно дешёвый — упорядоченные эвристики, побеждает первое совпадение — потому что он работает на горячем пути и добавляет всего миллисекунду-другую:&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;семантический&lt;/th&gt;
&lt;th&gt;текстовый&lt;/th&gt;
&lt;th&gt;структурный (AST)&lt;/th&gt;
&lt;th&gt;графовый&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). «что зависит от этого» — почти целиком граф (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×, чтобы популярная функция не могла полностью похоронить более релевантную, но малоизвестную. Наконец, мы понижаем результаты из путей вендоров, сборки и архивов и убираем дубликаты, оставляя лучший фрагмент на файл.&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/ru/blog/agent-observability-hooks-alloy-grafana</link><guid isPermaLink="true">https://maguyva.ai/ru/blog/agent-observability-hooks-alloy-grafana</guid><description>Мы подключили 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-сервером всё в порядке, но агент выбрал не того специалиста, или потратил половину сессии на неожиданную работу в шелле, или незаметно сжёг бюджет в цикле, который со стороны выглядел продуктивным.&lt;/p&gt;
&lt;p&gt;Если вы не видите разницы, вы не по-настоящему управляете агентной системой. Вы гадаете.&lt;/p&gt;
&lt;p&gt;Поэтому мы построили стек наблюдаемости для собственного рабочего процесса: Claude Code, Codex, события хуков Claude, события notify 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 плюс интерфейс notify, поэтому мы нормализуем менее подробные события завершения хода в ту же схему логов, вместо того чтобы делать вид, будто оба рантайма предоставляют одинаковые рычаги управления.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Нативный OTEL&lt;/strong&gt; даёт нам базовый поток: логи и трассы от самого рантайма, плюс метрики там, где рантайм их реально передаёт.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Хуки и notify-события&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;: семейство команд шелла&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-операциях с интенсивным использованием шелла с высокой долей сбоев инструментов».&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 очистить полезную нагрузку перед пересылкой в 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, командам шелла и скиллам.&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;Notify-вебхук в &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;Честная оговорка: данные notify у Codex сейчас менее подробны, чем данные хуков у Claude Code, потому что это не тот же тип интерфейса интеграции. В нашей текущей настройке завершения ходов Codex можно нормализовать в общую схему, но подробное извлечение данных по каждому инструменту по-прежнему лучше получается в нативном потоке OTEL, чем в notify-мосте.&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;Снизили ли недавние изменения число сбоев инструментов, или просто перенесли работу в сценарии с более интенсивным использованием шелла с теми же ошибками?&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;Система выявляет неудачный набор инструментов, хрупкие скиллы, слабую маршрутизацию или рабочие процессы с интенсивным использованием шелла, которые постоянно приводят к предотвратимым ошибкам.&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;Создают ли рабочие процессы с интенсивным использованием шелла предотвратимые ошибки там, где должен быть инструмент более высокого уровня?&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;Если работа в шелле постоянно ломается предсказуемым, предотвратимым образом там, где должен быть инструмент более высокого уровня, — это продуктовый сигнал.&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>Извлечение знаний из истории: как изменения становятся институциональной памятью</title><link>https://maguyva.ai/ru/blog/mining-workflow-closing-the-loop</link><guid isPermaLink="true">https://maguyva.ai/ru/blog/mining-workflow-closing-the-loop</guid><description>Git-коммиты превращаются в структурированные записи журнала изменений и записи архитектурных решений, а затем возвращаются к ИИ-агентам в виде запрашиваемой институциональной памяти.</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/ru/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 для этапов пайплайна?» — и ответ живёт только в голове того, кто принял это решение, если этот человек ещё вообще рядом.&lt;/p&gt;
&lt;p&gt;Мы построили процесс майнинга, который замыкает этот цикл. Изменения проходят через 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;Маркеры несовместимых изменений&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 стали архитектурными решениями. 6799 стали записями журнала изменений. Каждый коммит классифицирован.&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; должен появиться в журнале изменений в категории «Добавлено».&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Для архитектурных решений:&lt;/strong&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;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;Затем классифицируйте с этим идентификатором:&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;соответствие формату идентификатора решения&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; они не работают в вакууме. Они могут запрашивать институциональные знания перед тем, как давать рекомендации. Когда их просят добавить новый этап пайплайна, они могут обнаружить паттерн 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;6799 записей журнала изменений&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/ru/blog/skill-mining-3500-and-counting</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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;Скиллы присваиваются областям применения (scopes) — категориям, определяющим, какие агенты загружают какие скиллы:&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;Один из наших самых мощных паттернов — скиллы «принято, но не загружено». Мы называем их спящими областями применения (dormant scopes).&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 символов с триггерными фразами («Используйте, когда…», «Когда вам нужно…»), чтобы 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;, вендорские скиллы симлинкуются в &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/ru/blog/progressive-disclosure-cli-into-agents</link><guid isPermaLink="true">https://maguyva.ai/ru/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/ru/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;MCP-инструменты Maguyva&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>Ground Truths: проверенные факты как опора для ИИ-агентов</title><link>https://maguyva.ai/ru/blog/ground-truths-anchoring-ai-to-reality</link><guid isPermaLink="true">https://maguyva.ai/ru/blog/ground-truths-anchoring-ai-to-reality</guid><description>ИИ-агенты уверенно галлюцинируют. Обоснованные истины — это версионируемые, ограниченные по области действия факты, которые связывают поведение агента с проверяемой реальностью. Вот как мы их построили и как обеспечиваем их соблюдение.</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/ru/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;Обоснованная истина — это явное, версионируемое утверждение факта, которое агенты обязаны учитывать. Это не документация. Это не комментарий. Это полноценная сущность в системе, обладающая:&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;Агенты с доступом к шеллу могут искать обоснованные истины программно:&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;предварительная&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;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;текущая&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;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;устаревшая&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;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/ru/blog/orkestra-agent-orchestration</link><guid isPermaLink="true">https://maguyva.ai/ru/blog/orkestra-agent-orchestration</guid><description>Один оркестратор направляет работу специализированным ИИ-агентам, каждый со своими навыками и памятью. Как 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/ru/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;Вы можете попросить агента быть специалистом по базам данных. Или аудитором безопасности. Или фронтенд-инженером. Но в тот момент, когда вы просите его быть всеми тремя сразу, качество страдает. Контекст размывается. Инструкции конфликтуют. Агент превращается в универсала, посредственного во всём.&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;Склады мышления&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; является агент. Архитектор проектирует структуры систем. Отладчик прослеживает сбои до первопричин. Страж следит за соблюдением норм и границ безопасности. У нас 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-интерфейса, плейбук производительности&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;соображения-об-открытом-исходном-коде&quot;&gt;Соображения об открытом исходном коде&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>