qvib.pro
EN

~3 мин чтения · всем

Экспорт под инструмент: что генерится для 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).

Spec движкаlaskoff-mod/v1Компилятор экспортадетерминированно.claude/Claude Code.cursor/CursorAGENTS.mdостальные
Один spec детерминированно компилируется в три нативных пакета

Зачем именно так. Разные инструменты понимают разные форматы. 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 — frontmatter paths; 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.

Что делает движок (компилятор):

  1. Диспетчер зовёт exportCursor(spec).
  2. Ядро → .cursor/rules/forge-core.mdc с frontmatter alwaysApply: true (устав + роли + движок + инварианты).
  3. i18n-sync → отдельный .cursor/rules/i18n-sync.mdc с frontmatter { description, globs: '**/locales/*.json', alwaysApply: false } — Cursor применит его только к locale-файлам.
  4. secrets-hygiene → свой .mdc c alwaysApply: true.
  5. Секреты рендерятся ТОЛЬКО как имена/плейсхолдеры ${NAME} — значение никогда не попадает в файл (это проверяется тестом «секрет НЕ попадает значением в .mcp.json»).
  6. Добавляется переносимый предохранитель: .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 CodePreToolUse-hook guard-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 движка инлайнится в пакет целиком — он работает оффлайн и не зависит от наших серверов.