Один AGENTS.md для Claude, Cursor, Copilot и остальных coding agents

Разработчики, которые ведут проекты сразу в нескольких AI-IDE и CLI-агентах, давно платят налог дублированием: отдельные CLAUDE.md, инструкции Copilot, заметки под Gemini CLI и Aider живут параллельно и расходятся после первого же рефакторинга. Пакет @mongez/agent-kit предлагает другую модель — один корневой AGENTS.md как источник правды, из которого автоматически собираются производные файлы, а npm-зависимости могут доставлять skills прямо в каталоги агентов. Для команд, где Cursor, Codex и Claude Code соседствуют в одном репозитории, это снимает ручную синхронизацию rules и skills.
Почему зоопарк instruction-файлов мешает агентам
Coding agents читают контекст из разных путей: Claude Code ожидает CLAUDE.md, GitHub Copilot — .github/copilot-instructions.md, Gemini CLI — .gemini/GEMINI.md, Aider — CONVENTIONS.md. Snippet и полный текст поста на Dev.to формулируют боль прямо: перестать вручную сопровождать отдельные instruction-файлы для Claude, Cursor, Codex, Gemini, Copilot и Aider.
Автор Hassan Zohdy связывает единый AGENTS.md с открытой спецификацией agents.md — не проприетарный формат под один вендор, а общий слой «как мы работаем в этом репозитории». Из этого файла agent-kit выводит четыре derived-файла для агентов, которые корневой AGENTS.md нативно не подхватывают. В шапке каждого производного файла остаётся HTML-комментарий с указанием источника и команды регенерации — связь «мастер → копия» видна в самом дереве проекта.
Итог: один правочный цикл в
AGENTS.mdвместо пяти расходящихся копий под разные IDE.
Кто читает AGENTS.md напрямую, а кому нужен derive
Не все агенты требуют отдельного derived-файла. По описанию в посте Codex, Cursor, Amp, OpenCode и Goose уже читают корневой AGENTS.md; для них критичен в основном sync skills в per-agent каталоги, а не дублирование инструкций.
| Агент / инструмент | Derived-файл | Папка skills (при export) |
|---|---|---|
| Claude Code | CLAUDE.md |
.claude/skills/ |
| GitHub Copilot | .github/copilot-instructions.md |
.github/skills/ |
| Gemini CLI | .gemini/GEMINI.md |
export skills не поддержан |
| Aider | CONVENTIONS.md |
export skills не поддержан |
| Cursor | — (нативный AGENTS.md) |
.cursor/skills/ |
Список --target для экспорта skills шире краткого анонса в ленте: claude, cursor, codex, copilot, kiro, antigravity, opencode, amp, goose. По умолчанию kit зеркалит skills только в Claude — чтобы не размножать лишние .*/skills/ в монорепозитории; остальные IDE подключаются через agentKit.targets в package.json или флаг --target.
Важная деталь механики: шаг derive всегда эмитит все четыре derived-файла; массив targets управляет только экспортом skills, а не выборочной генерацией CLAUDE.md или copilot-instructions.
CLI, postinstall и watch: как держать агентов актуальными
Пакет публикуется как @mongez/agent-kit с бинарём agent-kit. Быстрый старт из документации:
npm i -D @mongez/agent-kit && npx agent-kit init
Команды init, sync, watch закрывают типичный цикл vibe-проекта: init создаёт стартовый AGENTS.md только если файла ещё нет (существующий не перезаписывается). После правок — npx agent-kit sync; для разработки — agent-kit watch с debounce 150 ms, отслеживающий AGENTS.md, локальные skills/**/SKILL.md и skills внутри node_modules.
Командный hook в package.json связывает установку зависимостей с агентами:
"scripts": {
"postinstall": "agent-kit sync"
}
После каждого npm install kit пере-derive файлы и зеркалит skills — без отдельного чеклиста «не забыли обновить Copilot». Sync заявлен как stateless и идемпотентный: без lockfile и кэша состояния, повторный запуск sync даёт тот же результат.
Флаги sync позволяют сузить работу: --derive-only, --skills-only, --target (список через запятую), --path для monorepo, --override — с осторожностью, когда нужно заменить уже отредактированный вручную destination.
Skills, которые «едут» с npm-пакетом
Второй акцент автора — skills travel with npm packages. При agent-kit sync обходится node_modules/ (и опционально дополнительные корни через --path) в поиске пакетов с каталогом skills/; найденные skill-директории копируются в пути вроде .claude/skills/, .cursor/skills/, .codex/skills/ в зависимости от target.
Безопасность синхронизации завязана на маркер .agent-kit-managed: при re-sync перезаписываются только папки с этим файлом; ручные skills не затираются. Совпадение slug с ручной папкой даёт skip и warning; конфликт двух пакетов на один destination slug — ошибка с именами пакетов, а не тихий overwrite.
Вложенная структура локального skills/ при export сплющивается в уникальные top-level имена (пример из поста: backend/auth → backend-auth) — обход ограничения Claude Code на только top-level в .claude/skills/. Автору npm-пакета нужно включить skills в поле files package.json, иначе skills не попадут в публикацию.
В посте как иллюстрация экосистемы упоминаются пакеты @mongez/*, которые уже ship skills (например, reinforcements, cache, react-router) — это не универсальная метрика рынка, а демонстрация задумки «библиотека приносит skills в каждый подключённый агент». Углублённая серия обещана во второй части на Dev.to; на момент публикации она ещё не вышла — расширенные safety/naming из Part 2 в этот разбор не входят.
В демо-сценарии автора sync выводит строку вроде «Exported 24 skill(s) from 3 package(s)» — цифры примера, не бенчмарк продукта.
Зрелость kit и честные границы
На npm зафиксирована версия 1.0.23 (опубликована 29 мая 2026), лицензия MIT, репозиторий github.com/hassanzohdy/agent-kit. Линейка 1.0.x насчитывает 19 релизов с первого publish 25 мая 2026; по карточке npm на 29 мая 2026 указано порядка 1,8K weekly downloads — ориентир интереса, не доказательство enterprise-готовности. Runtime-зависимости CLI: chokidar, citty, consola, pathe; позиционирование — TypeScript-first CLI и library.
Пост на Dev.to от 29 мая 2026; у публикации на платформе шесть публичных реакций и нет комментариев на момент публикации — ранний сигнал без разгона обсуждения. Оценочное время чтения в метаданных Dev.to — 5 минут.
Чего в посте и npm README нет и что не стоит додумывать: автоматическая генерация .cursor/rules, интеграция с MCP, сравнительные бенчмарки с конкурентами, независимый security audit. Cursor в модели автора читает AGENTS.md нативно и получает skills в .cursor/skills/ при явном target — это подтверждено; паритет с Cursor Rules и MCP-серверами не описан.
Практический вывод для команды: завести один AGENTS.md, прописать postinstall + agentKit.targets под реально используемые IDE, подключить derive для holdout-агентов и позволить внутренним npm-пакетам поставлять skills так же, как код — без ручного копирования в пять деревьев .claude, .cursor и .github.
Источники
- Hassan Zohdy — «One AGENTS.md for Every Coding Agent: Auto-Derive CLAUDE.md, GEMINI.md & Copilot Instructions» (Dev.to): Dev.to — доступ 2026-05-30
@mongez/agent-kitна npm: https://www.npmjs.com/package/@mongez/agent-kit — доступ 2026-05-30- Документация интеграций: https://mongez.js.org/agent-kit/agent-integrations/ — доступ 2026-05-30
- Спецификация agents.md: https://agents.md/
- Репозиторий: https://github.com/hassanzohdy/agent-kit