AGENTS.md та CLAUDE.md: як написати конфіг, який агент справді використовує
AGENTS.md або CLAUDE.md зберігає проєктний контекст, який агент не може вивести з коду: точні команди та прапорці, правила стилю коду, що відрізняються від стандартних, ваш тест-ранер, порядок роботи в репозиторії, архітектурні рішення, особливості середовища та файли, яких він не повинен торкатися. Усе, що можна вивести з коду, сюди не потрапляє.
Написати хороший конфіг — це найвища віддача при мінімальних зусиллях в агентному кодуванні. Ви налаштовуєте контекст один раз, і кожна сесія виграє: агент перестає вгадувати вашу команду запуску тестів, перестає переформатовувати код під власні стандарти, перестає редагувати директорію, яку ви позначили як недоторкану. Ця сторінка — конкретна практика, що стоїть за AI-Native навичкою «контекст і конфігурація» — однією з 17 AI-native навичок, які ми оцінюємо на різних рівнях. Зберігання довготривалої пам'яті проєкту в CLAUDE.md / AGENTS.md — визначальна ознака розробника рівня 3 (Agentic Developer), тому це варто зробити правильно.
Базова ідея однакова для всіх інструментів, хоча механіка відрізняється: конфіг-файл несе те, що агент не може вивести з коду самостійно. Модель вже знає вашу мову. Вона не знає, що тести потребують конкретного прапорця, що три місяці тому ви перейшли з однієї бібліотеки, або що infra/ — згенерований код і його не можна редагувати вручну. Саме цю прогалину і заповнює файл.
Ландшафт: одна філософія, різні файли
Кожен великий агент читає файл контексту проєкту. Вони поділяють одну філософію, але різняться назвою файлу та механікою завантаження. Ось карта на 2026 рік:
| File | Tool(s) | Status |
|---|---|---|
AGENTS.md |
OpenAI Codex, Cursor, GitHub Copilot agent, + ~20 інструментів | Відкритий міжінструментний стандарт |
CLAUDE.md |
Claude Code | Рідний формат Claude Code |
GEMINI.md |
Gemini CLI | Рідний формат Gemini |
.github/copilot-instructions.md |
GitHub Copilot | Інструкції для репозиторію Copilot |
.cursor/rules (раніше .cursorrules) |
Cursor | Формат правил Cursor |
Висновок: AGENTS.md — це єдине джерело правди, що формується як стандарт; його вже читають ~20 інструментів. Але є нюанс: Claude Code не читає AGENTS.md нативно — тільки CLAUDE.md. Тому канонічний підхід «одне джерело правди» виглядає так: тримати AGENTS.md як основний файл і зв'язати його з Claude через мінімальний CLAUDE.md, що імпортує його:
@AGENTS.md
<!-- Claude-specific notes can go below -->
Символічне посилання теж працює (ln -s AGENTS.md CLAUDE.md), але на Windows краще використовувати @import — там для символічних посилань потрібні права адміністратора. Так ви підтримуєте один файл, і обидві екосистеми його читають.
Що реально туди писати
Аналіз GitHub понад 2 500 репозиторіїв («How to write a great AGENTS.md») показав, що конфіги, які реально допомагають агентам, мають шість розділів. У порядку пріоритету:
- Commands — розміщуйте на початку, з точними виконуваними командами та прапорцями (
npm test,npm run build,pytest -v), а не просто назвами інструментів. Це розділ з найвищою окупністю: агенти вже знають, що існуєpytest; вони не знають потрібних прапорців вашого проєкту. Ставте його вгорі. - Testing practices — як ви тестуєте, що запускати перед комітом, вимоги до покриття.
- Project structure — де що знаходиться, щоб агент не шукав.
- Code style — покажіть один реальний фрагмент коду, а не три абзаци тексту.
- Git workflow — назви гілок, угоди про коміти, правила PR.
- Boundaries — що агент ніколи не повинен чіпати (згенеровані директорії, секрети, вендорний код, міграції).
Зверніть увагу на порядок важливості. «Команди з прапорцями» на першому місці не випадково: це те, що модель найменш надійно здатна вгадати і найчастіше робить неправильно. Якщо ви напишете тільки одну частину якісно — нехай це будуть команди.
Включати / виключати: тест по кожному рядку
Документація Anthropic з пам'яті чітко розділяє на дві колонки. Використовуйте це як фільтр для кожного рядка, який ви збираєтеся додати.
| Включати | Виключати |
|---|---|
| Bash-команди, які агент не може вгадати | Будь-що, що можна вивести з коду |
| Правила стилю коду, що відрізняються від стандартних | Стандартні мовні угоди, які модель вже знає |
| Інструкції з тестування / обраний тест-ранер | Детальна документація API (краще дайте посилання) |
| Порядок роботи в репозиторії (гілки, угоди для PR) | Інформація, що часто змінюється |
| Специфічні для проєкту архітектурні рішення | Довгі пояснення та туторіали |
| Особливості середовища розробки (необхідні env-змінні) | Пофайловий опис кодової бази |
| Неочевидні підводні камені | Самоочевидні практики на зразок «пишіть чистий код» |
Є один тест, що замінює всю таблицю і перетворюється на звичку:
Тест по кожному рядку: «Якщо видалити цей рядок, агент буде помилятися? Якщо ні — вирізаємо.»
Запускайте цей тест для кожного рядка. «Використовуй TypeScript» — агент і так бачить .ts-файли; вирізати. «Запускай міграції бази даних через npm run db:migrate, ніколи не редагуй migrations/ вручну» — він не міг цього вгадати, а помилка тут руйнує стан; залишити.
Пишіть на правильній висоті
Настанова Anthropic з context engineering зводить якісне авторство до чотирьох принципів.
1. Конкретність / верифікованість. Пишіть правила достатньо конкретно, щоб їх можна було перевірити за виводом агента. Розмиті настанови не можна перевірити — отже, їм не можна слідувати надійно.
- «Відступ 2 пробіли» — не «Форматуй код правильно».
- «Запускай
npm testперед комітом» — не «Тестуй свої зміни». - «HTTP-обробники живуть у
src/api/handlers/» — не «Тримай файли організовано».
2. Правильна висота (right altitude). Прагніть до того, що між жорсткою захардкодженою логікою і розмитою порожнечею: «достатньо конкретно, щоб направляти поведінку, але достатньо гнучко, щоб бути сильною евристикою». Занадто жорстко — зламається на першому виключенні; занадто розмито — нічого не направляє.
3. Мінімально, але достатньо. Мінімально не означає коротко. Це означає давати рівно стільки контексту наперед, щоб агент не мав потреби вгадувати або переоткривати — і нічого більше. Вирізайте наповнювач, залишайте несучі деталі.
4. Структура. Використовуйте мічені секції — заголовки Markdown або XML-теги. Файл, що легко сканується, — це файл, який агент (і ваші колеги) реально парсять.
Тримайте його компактним
Справжня причина залишатися компактним — бюджет токенів. Конфіг-файл завантажується повністю в кожній сесії. Він не підтягується на запит; він додається до контексту при запуску. Тому роздутість має прямі, виміряні наслідки: роздутий CLAUDE.md вимірювано знижує дотримання інструкцій. Сам Anthropic формулює прямолінійно — роздуті файли CLAUDE.md змушують Claude ігнорувати ваші реальні інструкції. Кожен зайвий рядок послаблює ваші корисні рядки.
Цільові орієнтири конкретні:
- Anthropic орієнтується на менше ~200 рядків як м'яку ціль для
CLAUDE.md. - Codex встановлює жорстке обмеження в 32 KiB для
AGENTS.md(project_doc_max_bytes); файли, що перевищують ліміт, обрізаються, тобто все, що за межею, мовчки не завантажується.
І пастка, про яку варто знати: імпорти не економлять бюджет. Файл, що підключається через @import, все одно завантажується в контекст при запуску — ви розділили файл, але не зменшили його сліду. Щоб реально скоротити те, що завантажується в кожній сесії, виносьте умовно релевантний вміст:
- Path-scoped rules для наскрізних питань, що зачіпають багато файлів — завантажуються тільки коли агент працює в цьому шляху.
- Skills для процедур на вимогу — завантажуються тільки при виклику.
- Посилання для довгого чи детального довідкового матеріалу — вказуйте на нього, а не вставляйте в текст.
Принцип той самий, що й у тесті по кожному рядку, застосований на рівні секцій: якщо щось актуально лише іноді, цьому не місце у файлі, що завантажується завжди.
DESIGN.md: командна угода, а не стандарт
DESIGN.md — це підручниковий приклад «тримай конфіг компактним, виноси деталі за посиланням». Це окремий документ з дизайну/архітектури — ключові рішення, доменна модель, архітектурні патерни, чому це побудовано саме так — який ваш AGENTS.md підключає через @import або посилається на нього, замість того щоб вставляти інлайн. Це тримає завжди завантажуваний конфіг коротким, а глибокий контекст залишається за один крок.
Але будьте чесні щодо його статусу: на відміну від AGENTS.md та CLAUDE.md, немає жодного первинного джерела, що встановлює DESIGN.md як стандартний файл конфігурації агента. Це потужна командна угода, а не задокументований стандарт. Використовуйте його тому, що він працює для вашої команди, а не тому, що цього вимагає специфікація.
Область дії та ієрархія
Обидві екосистеми накладають файли від широкого до специфічного, але по-різному вирішують пріоритет.
CLAUDE.md має чотири рівні, від широкого до специфічного:
- Managed policy — встановлюється вашою організацією / IT, діє на рівні всієї організації.
- User —
~/.claude/CLAUDE.md, діє для всіх ваших проєктів. - Project —
./CLAUDE.md, зафіксований у git і спільний для команди. - Local —
./CLAUDE.local.md, у gitignore, для ваших особистих перевизначень.
У монорепозиторіях файли батьківських директорій завантажуються автоматично, а файли дочірніх — на вимогу. Імпорти використовують синтаксис @path/to/file (відносний або абсолютний), вкладаються до 4 рівнів, а парсер пропускає блоки коду — шлях всередині огородженого блоку не трактується як імпорт.
AGENTS.md вирішується за принципом «ближчий перемагає». Codex обходить від кореня Git вниз до вашої поточної робочої директорії і конкатенує знайдені файли, починаючи з кореня. Оскільки ближчі файли з'являються пізніше, вони перекривають — ближчий файл перемагає. У монорепозиторії ви тримаєте один AGENTS.md на пакет, і той, що ближче до коду, який редагується, має пріоритет. Вище за все: явна інструкція в чаті перекриває будь-який файл.
Міст між двома системами з попереднього розділу пов'язує їх: тримайте AGENTS.md канонічним, додайте CLAUDE.md з командою @AGENTS.md, і ваша ієрархія буде спільною для всіх інструментів без дублювання.
Порадник, а не примусовий механізм
Ось нюанс, що рятує від хибного відчуття безпеки: ці файли — порадний контекст, а не детерміністичне виконання. Вони направляють агента, але не зв'язують його.
Акцентні слова на зразок IMPORTANT та YOU MUST вимірювано покращують дотримання — але не гарантують його. Для вимог, що мають виконуватися кожного разу (запускати форматер, блокувати коміт із невдалими тестами, ніколи не писати в
main), детерміністичний запобіжник — це hooks (у Claude Code), а не сильніше формулювання в конфізі.
Практичне правило: використовуйте конфіг для керівних принципів і евристик; беріться за hooks у той момент, коли «агент зазвичай це робить» вже недостатньо і вам потрібно «агент завжди це робить».
Підтримуйте його як код
Конфіг-файл — живий артефакт, а не разове написання. Ставтеся до нього так само, як до решти репозиторію.
- Бутстрапте за допомогою
/init. Дайте інструменту згенерувати перший чернетку з вашої кодової бази, а потім доопрацюйте вручну — згенерований варіант є відправною точкою, а не готовим файлом. - Переглядайте, коли щось іде не так. Кожного разу, коли агент робить щось нерозумне, запитуйте себе: чи спричинив це відсутній або помилковий рядок у конфізі?
- Регулярно обрізайте. Знову запускайте тест по кожному рядку для всього файлу. Рядки, що були необхідними минулого кварталу, можуть тепер бути мертвим вантажем.
- Тестуйте зміни за поведінкою. Не довіряйте, що правка допомогла — спостерігайте, чи справді змінилася поведінка агента. Якщо різниці не видно, рядок, мабуть, не працює.
- Фіксуйте в git. Спільний, версіонований конфіг означає, що вся команда робить внесок і отримує вигоду, а зміни видно на рев'ю.
Найцінніша звичка — петля самовдосконалення: коли агент помиляється, додайте одне однорядкове правило, щоб це не повторилося. За кілька тижнів ця петля зводить ваш конфіг саме до підводних каменів, що реально є у вашому проєкті — не більше і не менше.
Стартовий AGENTS.md
Ось реальний скелет для копіювання з усіма шістьма розділами високої окупності, заповненими реалістичними плейсхолдерами. Замініть на свої специфічні дані та видаліть усе, що не проходить тест по кожному рядку.
# AGENTS.md
## Commands
- Install: `npm ci`
- Dev server: `npm run dev`
- Test (all): `npm test`
- Test (single file): `npm test -- path/to/file.test.ts`
- Lint + autofix: `npm run lint -- --fix`
- Typecheck: `npm run typecheck`
- Build: `npm run build`
## Testing
- Run `npm test` and `npm run typecheck` before every commit.
- New code needs a test in the matching `*.test.ts` file.
- Integration tests need a running DB: `npm run db:up` first.
## Project structure
- `src/api/handlers/` — HTTP route handlers
- `src/services/` — business logic (no HTTP/DB code here)
- `src/db/` — schema + queries; migrations in `src/db/migrations/`
- `web/` — React frontend (separate AGENTS.md inside)
## Code style
- 2-space indentation, single quotes, no default exports.
- Throw typed errors from `src/errors.ts`, never bare `Error`.
```ts
// Good: typed error, narrow return
export async function getUser(id: string): Promise<User> {
const user = await db.users.find(id);
if (!user) throw new NotFoundError('user', id);
return user;
}
Git workflow
- Branch from
main:feature/<short-desc>orfix/<short-desc>. - Conventional Commits (
feat:,fix:,chore:). - Open a PR; never push directly to
main.
Boundaries
- NEVER edit
src/db/migrations/by hand — generate withnpm run db:migrate:new. - NEVER touch
dist/,node_modules/, or*.generated.ts(all generated). - NEVER commit secrets; required env vars are documented in
.env.example.
Для єдиного джерела правди між інструментами покладіть поруч однорядковий `CLAUDE.md` з вмістом `@AGENTS.md` і зв'яжіть ваші глибші нотатки з архітектури (`DESIGN.md`, ADR-и) посиланням, а не вставляйте їх.
## Куди рухатися далі
Компактний, конкретний конфіг-файл — одна з конкретних поведінок, що відрізняють AI-assisted розробників від справді AI-native. [Дізнайтеся свій AI-native рівень](/quiz) за три хвилини — він оцінює саме такий рівень майстерності — а коли будете готові налаштувати свій інструментарій, починайте з [рекомендованого стеку ProCoders](/stack).
FAQ
- AGENTS.md vs CLAUDE.md — у чому різниця?
- Вони служать одній меті, але мають різне охоплення. AGENTS.md — відкритий міжінструментний стандарт, який читають OpenAI Codex, Cursor, агент GitHub Copilot та приблизно 20 інших інструментів. CLAUDE.md — рідний формат Claude Code. Важливий нюанс: Claude Code не читає AGENTS.md нативно, тільки CLAUDE.md. Вони також по-різному вирішують ієрархію — AGENTS.md обходить від кореня Git вниз за принципом «ближчий перемагає», тоді як CLAUDE.md накладає чотири рівні (managed policy, user, project, local) від широкого до специфічного.
- Чи потрібні мені обидва — AGENTS.md та CLAUDE.md?
- Потрібні обидва файли, але лише одне джерело правди. Тримайте AGENTS.md канонічним (оскільки його читають ~20 інструментів), а потім створіть мінімальний CLAUDE.md, що імпортує його через `@AGENTS.md`, щоб Claude Code читав той самий вміст. Символічне посилання (`ln -s AGENTS.md CLAUDE.md`) теж працює, але на Windows краще використовувати @import — там для символічних посилань потрібні права адміністратора. Так ви підтримуєте один файл, і обидві екосистеми залишаються синхронізованими.
- А DESIGN.md — це стандарт?
- Ні. На відміну від AGENTS.md та CLAUDE.md, немає жодного первинного джерела, що встановлює DESIGN.md як стандартний файл конфігурації агента. Це корисна командна угода: окремий документ з дизайну/архітектури, що містить ключові рішення, доменну модель і «чому це побудовано саме так» — і який ваш AGENTS.md підключає через @import або посилається на нього. Це підручниковий приклад «тримай конфіг компактним, виноси деталі за посиланням» — але не плутайте угоду з задокументованим стандартом.
- Яким має бути розмір AGENTS.md або CLAUDE.md?
- Компактним, тому що файл завантажується повністю в кожній сесії, а роздутість вимірювано знижує дотримання інструкцій — роздутий файл змушує агента ігнорувати ваші хороші правила. Anthropic орієнтується на менше ~200 рядків як м'яку ціль; Codex встановлює жорстке обмеження в 32 KiB для AGENTS.md і обрізає все, що понад це. Зауважте, що імпорти не економлять бюджет (імпортовані файли все одно завантажуються при запуску). Щоб справді скоротити те, що завантажується в кожній сесії, виносьте умовно релевантний вміст у path-scoped rules або skills і вказуйте посилання на довгий довідковий матеріал замість того, щоб вставляти його.
- Чи справді ці файли змінюють поведінку агента?
- Так, але вони є порадним контекстом, а не детерміністичним виконанням. Вони надійно направляють поведінку, а акцентні слова на зразок IMPORTANT або YOU MUST вимірювано покращують дотримання — але ніщо з цього не гарантоване. Для вимог, що мають виконуватися кожного разу (запускати форматер, блокувати невдалий коміт, ніколи не писати в main), детерміністичний запобіжник — це hooks у Claude Code, а не сильніше формулювання в конфізі. Найкращий тест — емпіричний: змініть рядок, а потім спостерігайте, чи справді змінилася поведінка агента.