Экспорт под инструмент: что генерится для Claude / Cursor / AGENTS.md
Что это. Движок в qvib.pro — это не «ещё один промпт», а типизированная спека (engine-mod/v1): команда ролей, призмы-судьи, оркестрация, правила, skills/MCP/knowledge. Из ОДНОЙ этой спеки детерминированный компилятор (exporters.ts, диспетчер exportMod(spec, target)) собирает пакет под конкретный инструмент. Поддерживаются РОВНО три цели: claude-code, cursor, agents-md — неизвестная цель кидает Unknown export target (никакого «vscode» в списке нет; VS Code/Copilot обслуживаются через универсальный AGENTS.md).
Зачем именно так. Разные инструменты понимают разные форматы. Cursor игнорирует .mdc-правило без frontmatter; у Claude Code есть плагины, субагенты и hooks; универсальный AGENTS.md читают Codex, Jules, Zed, Cursor и другие. Adapter-first: правится только канон-спека, а целевые форматы — это артефакты билда, поэтому нет дрейфа между таргетами.
Когда что выбирать.
- Claude Code → полноценный плагин:
.claude-plugin/plugin.json,agents/*.md(каждая роль — субагент),commands/<движок>.md(слэш-команда с полным workflow), призмы как независимые subagent-ревьюеры с контрактом выводаverdict/findings/oneChange,.mcp.json,.claude/rules/*.md(always/manual — чистый md; auto — frontmatterpaths; agent-правило — как skill, потому что аналога agent-requested в rules у Claude нет),hooks/иskills/. - Cursor →
.cursor/rules/<slug>.mdc(always-ядро) плюс отдельный.mdcна каждое гранулярное правило со своим frontmatter по режиму активации (globs — строкой через запятую, иначе Cursor молча не применит), и.cursor/mcp.json. - AGENTS.md → один самодостаточный
AGENTS.mdв корень: команда, движок, навыки, знание, MCP-блок, правила, секреты. Максимальная совместимость.
Во ВСЕ пакеты кладутся README.md (инструкция под таргет + секреты), INSTALL.md («до я готова»: папки → доступы → чеклист) и INSTALL-PROMPT.md — готовый текст, который вы вставляете своей модели, и она сама ставит движок.
Worked-пример: экспорт Quest под Cursor
Вход: у движка есть правило i18n-sync с активацией auto и globs: ['**/locales/*.json'], и правило secrets-hygiene с активацией always.
Что делает движок (компилятор):
- Диспетчер зовёт
exportCursor(spec). - Ядро →
.cursor/rules/forge-core.mdcс frontmatteralwaysApply: true(устав + роли + движок + инварианты). i18n-sync→ отдельный.cursor/rules/i18n-sync.mdcс frontmatter{ description, globs: '**/locales/*.json', alwaysApply: false }— Cursor применит его только к locale-файлам.secrets-hygiene→ свой.mdccalwaysApply: true.- Секреты рендерятся ТОЛЬКО как имена/плейсхолдеры
${NAME}— значение никогда не попадает в файл (это проверяется тестом «секрет НЕ попадает значением в .mcp.json»). - Добавляется переносимый предохранитель:
.engine/hooks/pre-commit(POSIX sh + grep, без Node) и.github/workflows/engine-guard.yml— оба гоняют ОДИН и тот же скан секретов и разрушительных маркеров и падают с ненулевым кодом на совпадении.
Результат: папка с .cursor/rules/*.mdc, .cursor/mcp.json, README.md, INSTALL.md, INSTALL-PROMPT.md и предохранителем. Скачивается zip (engine-cursor.zip); распаковали в проект — правила подхватились на каждом запросе агента.
Честно про гарантии (ENFORCED vs ADVISORY)
Жёсткая гарантия (код возврата физически блокирует) есть в двух местах, и оба реальны в коде:
- Claude Code —
PreToolUse-hookguard-dangerous.sh: блок ДО запуска инструмента (rm -rf,DROP TABLE,git push --force,curl | bash). - Все таргеты — переносимый safety floor: git-хук (ENFORCED после
git config core.hooksPath .engine/hooks) + CI (ENFORCED всегда на push/PR).
А вот сам ТЕКСТ правил, призм и инвариантов, который читает модель на Cursor/AGENTS, — это ADVISORY: строгая инструкция, но нет рантайма, который её физически заблокирует. Пакет помечает это прямо в INSTALL.md. Смысл движка — сделать advisory настолько буквальным рецептом, что его исполнит даже слабая целевая модель.
Полный workflow движка инлайнится в пакет целиком — он работает оффлайн и не зависит от наших серверов.