Архитектура исполнителей
Как Apothem проецирует единую группу возможностей делегированных исполнителей на семнадцать окружений программирования с расходящимися поверхностями хуков и форматами правил.
Это страница технической спецификации для разработчиков. Она использует внутреннюю лексику Apothem — классы адаптеров, материализаторы, манифест распространения, конвергенция по соглашениям соседних элементов — без смягчения для широкой аудитории.
Apothem читает один общий профиль (~/.config/apothem/profile.yaml) и
материализует конфигурацию, нативную для окружения, для семнадцати зарегистрированных
адаптеров. Окружения не разделяют общую модель возможностей делегированных исполнителей: одни предоставляют
хуки перед вызовом инструмента, другие исполняют правила из плоских файлов .md,
третьи встраивают каждое правило в единый файл инструкций, а некоторые рендерят
конфигурацию на основе профиля во время установки. Эта страница описывает это
расхождение и дисциплину, которую Apothem применяет поверх него.
Матрица возможностей делегированных исполнителей по окружениям
Приведённая ниже матрица охватывает все семнадцать окружений. Колонки: поверхность хука PreToolUse, которую подключает адаптер (если окружение документирует хуки, которые адаптер не регистрирует, это указано в ячейке), формат, который Apothem использует для активации правил, класс адаптера (см. Классы адаптеров) и рендерит ли адаптер нативную конфигурацию через материализатор.
| Окружение | Поверхность хука PreToolUse | Формат активации правил | Класс адаптера | Материализатор |
|---|---|---|---|---|
| antigravity | Нативная поверхность хуков существует; только вспомогательный материал Apothem | GEMINI.md плюс правила плагина Antigravity CLI | Класс I | нет |
| claude-code | Нативные PreToolUse / PostToolUse / Stop / SessionStart | Плоские правила .md в rules/ | Класс II-A | нет (шаблоны настроек вендора) |
| codebuddy | Нативные SessionStart и PostToolUse в .codebuddy/settings.local.json; без защиты PreToolUse (вендор не документирует там additionalContext) | Файл проектных правил .codebuddy/rules/apothem-rules.md | Класс I | нет |
| codex | Нативные хуки жизненного цикла hooks.json | AGENTS.md плюс вспомогательные правила, на которые ссылаются установленные навыки | Класс I | нет |
| cursor | Нативный sessionStart в .cursor/hooks.json проекта; хука событий инструментов пока нет | Один файл правил рабочей области .mdc (фронтматтер MDC: description / globs / alwaysApply) | Класс I | нет |
| gemini-cli | Нативная поверхность хуков существует; только вспомогательный материал Apothem | Правила, встроенные в единый GEMINI.md | Класс I | нет |
| github-copilot | Нативные sessionStart и postToolUse в .github/hooks/apothem.json; без защиты preToolUse (вендор читает там только поля разрешений) | Правила в .github/copilot-instructions.md | Класс I | нет |
| glm | Нет (бэкенд модели; нет поверхности инструментов исполнителя) | .apothem/providers/glm.toml конфигурация провайдера бэкенда (без группы правил) | Класс I | нет |
| hermes | Только вспомогательный материал | config.yaml плюс внешний каталог навыков | Класс II-B | config.yaml |
| kimi-code | Только вспомогательный материал | AGENTS.md плюс вспомогательные правила в .kimi-code/.apothem/support/ | Класс I | нет |
| kiro | Нативный SessionStart в .kiro/hooks/apothem.json; без хука событий инструментов (вендор игнорирует их вывод) | Управляющий файл .kiro/steering/apothem-rules.md | Класс I | нет |
| open-claw | Только вспомогательный материал | openclaw.json плюс дополнительный каталог навыков | Класс II-B | openclaw.json |
| opencode | Только вспомогательный материал | JSON, отрендеренный из профиля, плюс нативные команды, навыки и исполнители | Класс II-B | opencode.json |
| qwen-code | Нативные PreToolUse / Stop / SessionStart | QWEN.md плюс нативные команды, навыки и исполнители | Класс II-B | settings.json / QWEN.md |
| trae | Нет | Файл проектных правил .trae/rules/apothem-rules.md | Класс I | нет |
| windsurf | Нативные SessionStart и PostToolUse для Devin Local в .devin/config.local.json; без защиты PreToolUse (вендор не документирует там канал контекста) | Один файл правил в .devin/rules/ | Класс I | нет |
| zed | Нет | Плоский файл .rules в корне проекта | Класс I | нет |
Примечания к матрице:
- claude-code — адаптер с самой широкой нативной поверхностью. Он несёт нативные хуки
PreToolUse, PostToolUse, Stop и SessionStart и поставляет шаблоны настроек вендора. Он
записывает один управляемый блок, ограниченный служебными маркерами, в
CLAUDE.mdи оставляет прозу оператора за пределами маркеров без изменений. - codex устанавливает нативные хуки жизненного цикла через
hooks.json, преобразует исполнителей в TOML, оборачивает командные промпты как навыки Codex и оставляетconfig.tomlво владении оператора. - antigravity сохраняет
~/.gemini/GEMINI.mdкак глобальный якорь контекста и устанавливает плагин Apothem в~/.gemini/antigravity-cli/plugins/apothem/. Файлы хуков сохраняются как вспомогательный материал, пока адаптер не начнёт сам вести преобразование схемы хуков Antigravity. - cursor активирует правила через один файл
.mdc, который несёт фронтматтер MDC вендора (description,globs,alwaysApply); адаптер не записывает единый файл.cursorrules. - windsurf использует
.devin/rules/; адаптер не записывает единый файл.windsurfrules. - hermes и open-claw рендерят нативные файлы конфигурации и подключают каталоги навыков Apothem через настройку каталога навыков, задокументированную в каждом окружении. Неподдерживаемые общие группы остаются в поддеревьях поддержки, принадлежащих Apothem.
- qwen-code рендерит задокументированные ключи
settings.jsonдля контекста и диспетчеризации хуков, затем использует нативные для Qwen каталоги команд, навыков и исполнителей.
Дисциплина межсредовой оркестрации
Apothem применяет конвергенцию по соглашениям соседних элементов: один и тот же
вызываемый оператором рабочий процесс проецируется в нативную идиому каждого окружения,
а не принудительно приводится к одному общему формату. Правило, которое активируется
как плоский файл .md под claude-code, становится правилом рабочей области .mdc
под cursor, встроенным разделом GEMINI.md под gemini-cli и конкатенированной
ссылкой в QWEN.md под qwen-code плюс нативными каталогами обнаружения — то же
намерение, диалект каждого окружения.
Каноническая эталонная группа находится по адресу:
src/apothem/{rules,commands,skills,agents,output-styles,hooks,conformity,statuslines}/Каждый адаптер распространяет подмножество этой группы. Подмножество для каждого окружения
объявлено в src/apothem/lib/propagation-manifest.yaml; манифест является единым
источником истины о том, какие артефакты достигают какого окружения и в какой форме.
Адаптер никогда не изобретает артефакты вне манифеста, а манифест никогда не
назначает артефакт окружению, у которого нет поверхности для его размещения.
Объяснение классов адаптеров
Apothem сортирует адаптеры на три класса по тому, как они транслируют общий профиль в нативный для окружения вывод.
- Класс I — прямое распространение. Адаптер копирует канонические эталонные артефакты (подмножество, объявленное в манифесте) напрямую в место конфигурации окружения без шага рендеринга. Материализатора нет. antigravity, codebuddy, codex, cursor, gemini-cli, github-copilot, glm, kimi-code, kiro, trae, windsurf и zed относятся к Классу I.
- Класс II-A — прямое распространение + шаблоны настроек, привязанные к вендору. Адаптер выполняет прямое распространение артефактов и дополнительно управляет специфичными для вендора шаблонами настроек, привязанными к схеме вендора. claude-code относится к Классу II-A.
- Класс II-B — материализатор единой поверхности, рендеримой из профиля. Адаптер рендерит общий профиль в единую нативную поверхность конфигурации через материализатор. hermes, open-claw, opencode и qwen-code относятся к Классу II-B.
Поведение во время материализации
Различие классов проявляется во время материализации — когда оператор запускает CLI против окружения:
apothem install --harness <H>распространяет подмножество манифеста для<H>и для адаптеров Класса II-A / II-B рендерит нативную для окружения конфигурацию.apothem verify --harness <H>проверяет, что управляемые файлы существуют и разбираются. С--profile PATHон также сверяет их с тем, что произвёл бы этот профиль, и завершается ошибкой при расхождении.apothem statusсообщает, установлено ли каждое окружение и разошлось ли оно с текущим общим профилем.apothem doctorсообщает состояние по окружениям для каждого зарегистрированного адаптера:ok,not_installed,needs_project,verify_failed,hook_failedилиerror.
См. справочник по CLI для полных поверхностей команд.
Таксономия расхождений
Семнадцать окружений расходятся по трём осям. Каждое различие между окружениями в матрице сводится к одной из них.
| Ось | Диапазон, наблюдаемый среди семнадцати окружений |
|---|---|
| Поверхность хуков | Нативные многособытийные (claude-code, codex, qwen-code) → нативные на событиях, которые вендор доставляет модели (codebuddy: SessionStart и PostToolUse; cursor: sessionStart; github-copilot: sessionStart и postToolUse; kiro: SessionStart; windsurf: SessionStart и PostToolUse) → только вспомогательный материал хуков (antigravity, gemini-cli, hermes, kimi-code, open-claw, opencode) → адаптер не регистрирует хук (glm, trae, zed) |
| Формат активации правил | Плоский .md (claude-code) → правила плагина (antigravity) → рабочая область .mdc (cursor) → правила каталога (codebuddy, trae, windsurf) → управляющий файл (kiro) → плоский файл в корне проекта (zed) → единый встроенный файл (codex, gemini-cli, github-copilot, kimi-code) → вспомогательный материал, на который ссылается конфигурация (hermes, open-claw, opencode, qwen-code) → конфигурация провайдера бэкенда (glm) |
| Класс адаптера | Класс I — прямое распространение → Класс II-A — прямое распространение + настройки вендора → Класс II-B — единая поверхность, рендеримая из профиля |
Задача Apothem — удерживать одно согласованное намерение оператора постоянным, пока эти три оси варьируются от окружения к окружению. Манифест распространения и контракт класса адаптера — два механизма, которые сохраняют это намерение стабильным поверх расхождения.
Возобновляемое планирование
Как Apothem выносит рабочее состояние в локальный для проекта набор планов .apothem/plans/, чтобы долгая работа переживала границы сессии, учётной записи и машины.
Последовательность аудиторской проверки
Последовательность из одиннадцати команд аудита, которая проверяет Apothem перед выпуском.