Skip to content
Apothem
Концепции

Архитектура исполнителей

Как Apothem проецирует единую группу возможностей делегированных исполнителей на семнадцать окружений программирования с расходящимися поверхностями хуков и форматами правил.

Это страница технической спецификации для разработчиков. Она использует внутреннюю лексику Apothem — классы адаптеров, материализаторы, манифест распространения, конвергенция по соглашениям соседних элементов — без смягчения для широкой аудитории.

Apothem читает один общий профиль (~/.config/apothem/profile.yaml) и материализует конфигурацию, нативную для окружения, для семнадцати зарегистрированных адаптеров. Окружения не разделяют общую модель возможностей делегированных исполнителей: одни предоставляют хуки перед вызовом инструмента, другие исполняют правила из плоских файлов .md, третьи встраивают каждое правило в единый файл инструкций, а некоторые рендерят конфигурацию на основе профиля во время установки. Эта страница описывает это расхождение и дисциплину, которую Apothem применяет поверх него.

Матрица возможностей делегированных исполнителей по окружениям

Приведённая ниже матрица охватывает все семнадцать окружений. Колонки: поверхность хука PreToolUse, которую подключает адаптер (если окружение документирует хуки, которые адаптер не регистрирует, это указано в ячейке), формат, который Apothem использует для активации правил, класс адаптера (см. Классы адаптеров) и рендерит ли адаптер нативную конфигурацию через материализатор.

ОкружениеПоверхность хука PreToolUseФормат активации правилКласс адаптераМатериализатор
antigravityНативная поверхность хуков существует; только вспомогательный материал ApothemGEMINI.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.jsonAGENTS.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-Bconfig.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-Bopenclaw.json
opencodeТолько вспомогательный материалJSON, отрендеренный из профиля, плюс нативные команды, навыки и исполнителиКласс II-Bopencode.json
qwen-codeНативные PreToolUse / Stop / SessionStartQWEN.md плюс нативные команды, навыки и исполнителиКласс II-Bsettings.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 — удерживать одно согласованное намерение оператора постоянным, пока эти три оси варьируются от окружения к окружению. Манифест распространения и контракт класса адаптера — два механизма, которые сохраняют это намерение стабильным поверх расхождения.

On this page