Тринадцать файлов существовали только на диске ПК владельца, в рабочей копии, отставшей от origin/main на 122 коммита. Их реализация и тесты давно влиты: tests/test_a42_provider_connect.py, test_a49_subagents_skills_memory.py, test_a51_hub_controls_hermes.py, test_a52_local_models_supervisor_dual.py, test_a55_account_connection.py, test_a56_context_compression.py и другие. Постановок, объясняющих, что эти тесты обязаны доказывать, в репозитории не было. Правило записано в agents/AGENTS.md: задание живёт в репозитории, а не в переписке и не в личных папках на диске. A48, A50 и A54 не переносятся: они уже есть на origin под другими именами, содержимое совпадает с точностью до перевода строки в конце файла. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
18 KiB
Задание A49: расстановка субагентов, вкладка «Скиллы», память через Obsidian
Дата поступления
2026-08-31
База
origin/main (17b368a) — туда слиты A42, A45, A47 и A48.
git fetch origin --prune
git checkout -b antigravity/a49-subagents-skills-memory origin/main
В main напрямую не пушить.
Порядок исполнения
Два прохода: Flash реализует, Pro проводит аудит. Пункт P0-6 написан для аудитора.
Задание крупное и делится на три независимые части. Части можно сдавать по отдельности, но каждую — целиком.
Не пересекается с A44 (сервер) и A45 (замеры). Вёрстка A48 уже в main: новые экраны делать в её стиле, существующие не ломать.
Что проверено ревьюером
Ролей объявлено тринадцать, соединено пять.
manager developer-1 developer-2 code-reviewer researcher tester
tech-writer analyst guardian cost-controller integration-expert
security-expert dependency-agent
Конвейер по умолчанию связывает только manager → developer-1 → developer-2 → code-reviewer с возвратами по REVIEW_FAILED. Остальные восемь ролей объявлены, но в графе висят без связей: на экране владельца Research и Fast стоят в стороне и ни к чему не присоединены.
Скиллов в интерфейсе нет вовсе. Ни вкладки, ни поля в инспекторе агента, ни признака, пользовался ли агент скиллом.
Общая память уже работает после A47: /srv/projects/AI-Memory под git, структура 00_SYSTEM, 01_PROJECTS, 03_LESSONS, 04_PATTERNS, 05_AGENTS, протокол и шаблоны на месте, worklog заполняется. Корневой AGENTS.md в репозитории указывает на неё.
Obsidian стоит на сервере (snap 1.13.7), но агенту он не нужен. Из руководства владельца по подключению Obsidian к агенту, дословно: «Агенту нужен не GUI Obsidian, а локальная папка vault». Хранилище — это папка с файлами Markdown.
Часть 1. Расстановка субагентов и связи
P0-1. Разобрать всех тринадцать и соединить
- Разбор каждой роли: что делает, от кого получает работу, кому передаёт, по какому условию. Приложить таблицей.
- Связать те, что должны работать вместе. Восемь ролей сейчас ни с чем не соединены — для каждой либо связь, либо явная запись «работает по вызову, в конвейер не входит» с обоснованием.
- Условия переходов брать из существующего набора:
SUCCESS,REVIEW_PASSED,REVIEW_FAILED,NEXT,ERROR,ALWAYS. Новые вводить только при необходимости и объяснять. - Циклы доработки конечны. Возврат
REVIEW_FAILEDбез ограничения числа итераций — это бесконечный круг на живых квотах. Предел итераций уже есть в конвейере — проверить, что он соблюдается на каждом возврате. - Расстановка на холсте осмысленная: поток слева направо, возвраты видимой дугой, узлы не наезжают друг на друга. После A48 подписи связей читаются — не сломать.
Ничего не выдумывать про роли. Назначение брать из role_registry.py; если для роли нет внятного места в потоке, так и написать, а не придумывать ей работу.
Часть 2. Вкладка «Скиллы»
P0-2. Скиллы видны, ищутся и назначаются
- Новая вкладка «Скиллы» в главном меню, в стиле экранов A48.
- Список установленных скиллов — читать из каталога скиллов агента (
~/.claude/skills/и равнозначные для других инструментов; путь настраивается). Показыватьname,descriptionи путь. - Поиск по имени и описанию.
- Назначение скилла субагенту — из вкладки и из карточки агента. Назначения сохраняются и переживают перезапуск.
- Во вкладке «Инструменты» инспектора показывать назначенные скиллы. Сейчас там
Н/Д: инструменты не назначены— это состояние должно наполниться. - Скилл не найден или каталог отсутствует — сказать об этом с причиной и путём, где искали. Не показывать пустой список как «скиллов нет».
P0-3. Видно, пользовался ли агент скиллом
Владелец: «добавить режим просмотра, использовал он в проекте скиллы или сам придумывал».
- Записывать факт применения: какой скилл, каким агентом, в какой задаче, когда.
- Показывать в истории агента и отдельным срезом по проекту: применённые скиллы против назначенных, но ни разу не сработавших.
- Назначен и ни разу не применён — это сигнал, а не ошибка. Показывать как факт: скилл может не подходить под задачи, а может быть сломан — второе лечится частью P0-4.
- Правило честности здесь особенно важно. Если признак применения снять неоткуда — писать
Н/Дс причиной, а не рисовать правдоподобную статистику. Сначала выяснить, что вообще можно узнать достоверно, и в отчёте назвать источник.
P0-4. Субагент «скилл-доктор»
Готовый скилл лежит у владельца: Desktop/skills-hermes/skill-doctor/ — SKILL.md и references/description-cookbook.md. Написан, выверен и переделке не подлежит; задание — встроить его как роль.
Главное из него, что определяет устройство роли:
- У скилла две независимые части.
frontmatter(name,description) решает, запустится ли скилл; тело решает, что будет после запуска. Чинить тело, когда сломано описание, — самая частая потеря времени. - Порядок диагностики: формальное (имя файла ровно
SKILL.md, расположение, границы---,nameлатиницей,descriptionодной строкой) → разбор описания на три части → тело → проверочные запросы → диагноз. - Многострочный
description— ошибка номер один по частоте: YAML обрезает его, и решение о запуске принимается по огрызку. - Описание состоит из трёх частей: что делает, когда запускать (реальными словами пользователя, 4–5 формулировок), когда НЕ запускать. Третья отсутствует почти всегда, и без неё скилл тихо срабатывает на соседних темах и жжёт лимиты — это хуже молчания, потому что не замечается.
- Пять проверочных запросов: три должны запустить скилл, два — не запустить. Негативные обязательны.
- Диагноз выдаётся строгим форматом с готовым
descriptionцеликом, а не советом «сделай понятнее».
Требования к встраиванию:
- Новая каноническая роль
skill-doctorв реестре, с назначением и способностями, как у остальных. - Запуск из вкладки «Скиллы»: кнопка «Проверить скилл» рядом с каждым, и общая проверка всех.
- Результат показывать в интерфейсе тем же форматом диагноза, с готовым описанием, которое можно скопировать.
- Скилл-доктор не правит файлы молча. Он ставит диагноз и предлагает правку; применяет её владелец.
Часть 3. Память через Obsidian
P0-5. Хранилище подключается и наполняется
Владелец: «если на ПК или сервере установлен Обсидиан, то должен подгружаться в память… в настройках добавляешь папку рабочую Обсидиан, и оркестратору даёшь задание, чтобы он настроил работу».
- Обнаружение. Хаб проверяет, есть ли Obsidian и хранилище. Признак хранилища — папка с каталогом
.obsidianвнутри, а не установленное приложение: агенту нужна папка, не программа. Найдено — предложить; не найдено — сказать прямо, без догадок. - Настройка пути в «Настройках»: путь к хранилищу задаётся вручную и сохраняется. На сервере владельца это
/srv/projects/AI-Memory. - Проверка при сохранении: путь существует, доступен на запись, внутри есть
.obsidian. Иначе — отказ с причиной. - Хранилища нет — хаб работает как прежде. Память не должна стать обязательной.
P0-6. Оркестратор раскладывает память по структуре
- Действие «Настроить память», запускающее оркестратора по заложенной структуре. Структура уже существует — та, что в
/srv/projects/AI-Memory:00_SYSTEM,01_PROJECTS/<проект>/,03_LESSONS,04_PATTERNS,05_AGENTS. Использовать её, а не изобретать вторую. - У каждого субагента во вкладке «Память» — своя структура по проектам: что он читает перед работой, что записывает после, его записи в
worklogи его уроки. - Существующие заметки владельца не трогать. 218 заметок и восемь записей
worklogуже есть; устаревшее переносить в99_ARCHIVE, не удалять. - Разделение чтения и записи. Субагент читает общее, пишет своё. Каждая запись подписана: кто, когда, по какому заданию.
- Граница остаётся. Память описывает состояние и уроки; распоряжений она не отдаёт. Задание приходит от владельца, а не из заметки. Это требование A47, и оно не отменяется тем, что памятью теперь управляет оркестратор.
P0-7. Аудит вторым проходом
- Открыть хаб и посмотреть новую вкладку и связи на холсте. Не отчёт — экран. Скриншоты приложить, как в A48.
- Проверить, что список скиллов настоящий: подложить скилл в каталог и убедиться, что он появился; убрать — исчез.
- Скилл-доктор проверить на заведомо сломанном скилле — с многострочным
description— и убедиться, что диагноз указывает именно на это. - Признак применения скилла: убедиться, что он снимается измерением, а не выводится из назначения.
- Проверить, что без Obsidian хаб работает как прежде.
- Проверить, что заметки владельца не пострадали: число заметок до и после.
- Циклы доработки конечны — убедиться, что предел итераций соблюдается.
- Побочные изменения объяснить.
- Пропущенный пункт назвать пропущенным.
Ограничения
- Клиент без сборки, без npm, без фреймворка.
- Вёрстку A48 не ломать; новые экраны — в её стиле.
- Учётные данные,
~/.hermes/agy_profiles/, службыqwen-coderиqwen-compressorне трогать. - Заметки владельца не удалять.
- Скилл-доктор из
Desktop/skills-hermes/skill-doctor/не переписывать. - Версию
0.1.1не поднимать. - Правило честности без исключений: не измерено —
Н/Дс причиной.
Критерии приёмки
- Ветка в
origin,git statusчист. - Разбор тринадцати ролей приложен таблицей; каждая либо соединена, либо объявлена внеконвейерной с обоснованием.
- Циклы доработки конечны; проверено.
- Вкладка «Скиллы» есть: список читается из каталога, поиск работает, назначение сохраняется и переживает перезапуск.
- Назначенные скиллы видны в инспекторе агента.
- Видно, применялся ли скилл; источник признака назван; неизмеримое помечено
Н/Д. - Роль
skill-doctorв реестре; запуск из интерфейса; диагноз выводится строгим форматом с готовым описанием; файлы молча не правятся. - Скилл-доктор проверен на заведомо сломанном скилле.
- Хранилище Obsidian обнаруживается по наличию
.obsidian, путь настраивается и проверяется. - Без хранилища хаб работает как прежде.
- Оркестратор раскладывает память по существующей структуре; у каждого субагента во вкладке «Память» видна структура по проектам.
- Заметки владельца целы; число до и после совпадает.
- Скриншоты новых экранов приложены.
ruff check .чисто; релизный гейт 10/10; тестов не меньше 517.- Память проекта в AI-Memory обновлена.
- Отчёт:
START_HEAD,FINAL_HEAD,origin/main,git status,X passed / Y skipped / Z failed.
Главное
Тринадцать субагентов объявлено, работают пятеро, восемь висят на холсте без связей. Скиллы владелец ставит руками и не видит ни списка, ни того, пользовался ими агент или писал по наитию. Память после A47 ожила, но субагенты в неё не смотрят.
Задание сводит три вещи в одно: агенты расставлены и связаны осмысленно, у каждого свои скиллы с проверкой их исправности, и все читают одну память по структуре, которую раскладывает оркестратор.
Порядок сдачи
Передать точный FINAL_COMMIT_SHA.