hermes-hub/agents/inbox/2026-08-31-A49-subagents-skills-memory.md
Hermes Team 8b67f0dadb docs(agents): вернуть в репозиторий постановки A42-A56 и отчёт A30
Тринадцать файлов существовали только на диске ПК владельца, в рабочей
копии, отставшей от 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>
2026-09-03 18:16:35 +07:00

18 KiB
Raw Blame History

Задание 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. Разобрать всех тринадцать и соединить

  1. Разбор каждой роли: что делает, от кого получает работу, кому передаёт, по какому условию. Приложить таблицей.
  2. Связать те, что должны работать вместе. Восемь ролей сейчас ни с чем не соединены — для каждой либо связь, либо явная запись «работает по вызову, в конвейер не входит» с обоснованием.
  3. Условия переходов брать из существующего набора: SUCCESS, REVIEW_PASSED, REVIEW_FAILED, NEXT, ERROR, ALWAYS. Новые вводить только при необходимости и объяснять.
  4. Циклы доработки конечны. Возврат REVIEW_FAILED без ограничения числа итераций — это бесконечный круг на живых квотах. Предел итераций уже есть в конвейере — проверить, что он соблюдается на каждом возврате.
  5. Расстановка на холсте осмысленная: поток слева направо, возвраты видимой дугой, узлы не наезжают друг на друга. После A48 подписи связей читаются — не сломать.

Ничего не выдумывать про роли. Назначение брать из role_registry.py; если для роли нет внятного места в потоке, так и написать, а не придумывать ей работу.


Часть 2. Вкладка «Скиллы»

P0-2. Скиллы видны, ищутся и назначаются

  1. Новая вкладка «Скиллы» в главном меню, в стиле экранов A48.
  2. Список установленных скиллов — читать из каталога скиллов агента (~/.claude/skills/ и равнозначные для других инструментов; путь настраивается). Показывать name, description и путь.
  3. Поиск по имени и описанию.
  4. Назначение скилла субагенту — из вкладки и из карточки агента. Назначения сохраняются и переживают перезапуск.
  5. Во вкладке «Инструменты» инспектора показывать назначенные скиллы. Сейчас там Н/Д: инструменты не назначены — это состояние должно наполниться.
  6. Скилл не найден или каталог отсутствует — сказать об этом с причиной и путём, где искали. Не показывать пустой список как «скиллов нет».

P0-3. Видно, пользовался ли агент скиллом

Владелец: «добавить режим просмотра, использовал он в проекте скиллы или сам придумывал».

  1. Записывать факт применения: какой скилл, каким агентом, в какой задаче, когда.
  2. Показывать в истории агента и отдельным срезом по проекту: применённые скиллы против назначенных, но ни разу не сработавших.
  3. Назначен и ни разу не применён — это сигнал, а не ошибка. Показывать как факт: скилл может не подходить под задачи, а может быть сломан — второе лечится частью P0-4.
  4. Правило честности здесь особенно важно. Если признак применения снять неоткуда — писать Н с причиной, а не рисовать правдоподобную статистику. Сначала выяснить, что вообще можно узнать достоверно, и в отчёте назвать источник.

P0-4. Субагент «скилл-доктор»

Готовый скилл лежит у владельца: Desktop/skills-hermes/skill-doctor/SKILL.md и references/description-cookbook.md. Написан, выверен и переделке не подлежит; задание — встроить его как роль.

Главное из него, что определяет устройство роли:

  • У скилла две независимые части. frontmatter (name, description) решает, запустится ли скилл; тело решает, что будет после запуска. Чинить тело, когда сломано описание, — самая частая потеря времени.
  • Порядок диагностики: формальное (имя файла ровно SKILL.md, расположение, границы ---, name латиницей, description одной строкой) → разбор описания на три части → тело → проверочные запросы → диагноз.
  • Многострочный description — ошибка номер один по частоте: YAML обрезает его, и решение о запуске принимается по огрызку.
  • Описание состоит из трёх частей: что делает, когда запускать (реальными словами пользователя, 45 формулировок), когда НЕ запускать. Третья отсутствует почти всегда, и без неё скилл тихо срабатывает на соседних темах и жжёт лимиты — это хуже молчания, потому что не замечается.
  • Пять проверочных запросов: три должны запустить скилл, два — не запустить. Негативные обязательны.
  • Диагноз выдаётся строгим форматом с готовым description целиком, а не советом «сделай понятнее».

Требования к встраиванию:

  1. Новая каноническая роль skill-doctor в реестре, с назначением и способностями, как у остальных.
  2. Запуск из вкладки «Скиллы»: кнопка «Проверить скилл» рядом с каждым, и общая проверка всех.
  3. Результат показывать в интерфейсе тем же форматом диагноза, с готовым описанием, которое можно скопировать.
  4. Скилл-доктор не правит файлы молча. Он ставит диагноз и предлагает правку; применяет её владелец.

Часть 3. Память через Obsidian

P0-5. Хранилище подключается и наполняется

Владелец: «если на ПК или сервере установлен Обсидиан, то должен подгружаться в память… в настройках добавляешь папку рабочую Обсидиан, и оркестратору даёшь задание, чтобы он настроил работу».

  1. Обнаружение. Хаб проверяет, есть ли Obsidian и хранилище. Признак хранилища — папка с каталогом .obsidian внутри, а не установленное приложение: агенту нужна папка, не программа. Найдено — предложить; не найдено — сказать прямо, без догадок.
  2. Настройка пути в «Настройках»: путь к хранилищу задаётся вручную и сохраняется. На сервере владельца это /srv/projects/AI-Memory.
  3. Проверка при сохранении: путь существует, доступен на запись, внутри есть .obsidian. Иначе — отказ с причиной.
  4. Хранилища нет — хаб работает как прежде. Память не должна стать обязательной.

P0-6. Оркестратор раскладывает память по структуре

  1. Действие «Настроить память», запускающее оркестратора по заложенной структуре. Структура уже существует — та, что в /srv/projects/AI-Memory: 00_SYSTEM, 01_PROJECTS/<проект>/, 03_LESSONS, 04_PATTERNS, 05_AGENTS. Использовать её, а не изобретать вторую.
  2. У каждого субагента во вкладке «Память» — своя структура по проектам: что он читает перед работой, что записывает после, его записи в worklog и его уроки.
  3. Существующие заметки владельца не трогать. 218 заметок и восемь записей worklog уже есть; устаревшее переносить в 99_ARCHIVE, не удалять.
  4. Разделение чтения и записи. Субагент читает общее, пишет своё. Каждая запись подписана: кто, когда, по какому заданию.
  5. Граница остаётся. Память описывает состояние и уроки; распоряжений она не отдаёт. Задание приходит от владельца, а не из заметки. Это требование A47, и оно не отменяется тем, что памятью теперь управляет оркестратор.

P0-7. Аудит вторым проходом

  1. Открыть хаб и посмотреть новую вкладку и связи на холсте. Не отчёт — экран. Скриншоты приложить, как в A48.
  2. Проверить, что список скиллов настоящий: подложить скилл в каталог и убедиться, что он появился; убрать — исчез.
  3. Скилл-доктор проверить на заведомо сломанном скиллес многострочным description — и убедиться, что диагноз указывает именно на это.
  4. Признак применения скилла: убедиться, что он снимается измерением, а не выводится из назначения.
  5. Проверить, что без Obsidian хаб работает как прежде.
  6. Проверить, что заметки владельца не пострадали: число заметок до и после.
  7. Циклы доработки конечны — убедиться, что предел итераций соблюдается.
  8. Побочные изменения объяснить.
  9. Пропущенный пункт назвать пропущенным.

Ограничения

  • Клиент без сборки, без npm, без фреймворка.
  • Вёрстку A48 не ломать; новые экраны — в её стиле.
  • Учётные данные, ~/.hermes/agy_profiles/, службы qwen-coder и qwen-compressor не трогать.
  • Заметки владельца не удалять.
  • Скилл-доктор из Desktop/skills-hermes/skill-doctor/ не переписывать.
  • Версию 0.1.1 не поднимать.
  • Правило честности без исключений: не измерено — Н с причиной.

Критерии приёмки

  1. Ветка в origin, git status чист.
  2. Разбор тринадцати ролей приложен таблицей; каждая либо соединена, либо объявлена внеконвейерной с обоснованием.
  3. Циклы доработки конечны; проверено.
  4. Вкладка «Скиллы» есть: список читается из каталога, поиск работает, назначение сохраняется и переживает перезапуск.
  5. Назначенные скиллы видны в инспекторе агента.
  6. Видно, применялся ли скилл; источник признака назван; неизмеримое помечено Н.
  7. Роль skill-doctor в реестре; запуск из интерфейса; диагноз выводится строгим форматом с готовым описанием; файлы молча не правятся.
  8. Скилл-доктор проверен на заведомо сломанном скилле.
  9. Хранилище Obsidian обнаруживается по наличию .obsidian, путь настраивается и проверяется.
  10. Без хранилища хаб работает как прежде.
  11. Оркестратор раскладывает память по существующей структуре; у каждого субагента во вкладке «Память» видна структура по проектам.
  12. Заметки владельца целы; число до и после совпадает.
  13. Скриншоты новых экранов приложены.
  14. ruff check . чисто; релизный гейт 10/10; тестов не меньше 517.
  15. Память проекта в AI-Memory обновлена.
  16. Отчёт: START_HEAD, FINAL_HEAD, origin/main, git status, X passed / Y skipped / Z failed.

Главное

Тринадцать субагентов объявлено, работают пятеро, восемь висят на холсте без связей. Скиллы владелец ставит руками и не видит ни списка, ни того, пользовался ими агент или писал по наитию. Память после A47 ожила, но субагенты в неё не смотрят.

Задание сводит три вещи в одно: агенты расставлены и связаны осмысленно, у каждого свои скиллы с проверкой их исправности, и все читают одну память по структуре, которую раскладывает оркестратор.

Порядок сдачи

Передать точный FINAL_COMMIT_SHA.