AGENTS.md - это durable-контракт репозитория: инструкции, которые Codex читает до начала работы и строит из них цепочку один раз на запуск или сессию. В отличие от разового prompt, это отревьюенный источник истины, живущий в репозитории под контролем версий. Глобальные указания находятся в $CODEX_HOME, а проектная цепочка строится от корня репозитория до текущего рабочего каталога - то есть более общее задаётся выше, более конкретное ближе к коду.
Порядок построения цепочки важен, потому что определяет, что победит. В каждом каталоге сначала ищется AGENTS.override.md, затем AGENTS.md, затем имена из project_doc_fallback_filenames. На один каталог берётся не более одного непустого файла. Инструкции, более близкие к текущему каталогу, появляются в цепочке позже и поэтому переопределяют общие. Это та же логика приоритета, что и в config: конкретное перекрывает общее, а не наоборот.
Хороший AGENTS.md - это контракт проекта, а не пересказ структуры. Полезно один раз увидеть осмысленный пример. Ниже - карта репозитория, обязательные проверки и политика изменений: где код и тесты, какие команды запускать после правок, чего не делать без подтверждения. Именно то, что нельзя надёжно вывести по коду, - команды проверки, границы, определение готовности - и стоит записать, а очевидное из package.json повторять не нужно.
Смысл AGENTS.md - назвать то, что агент не выведет сам. Карта репозитория экономит ему исследование: где живёт код приложения, где интеграционные тесты. Обязательные проверки задают сигнал: запусти lint после правок TypeScript, прогони затронутые тесты при изменении поведения. Политика изменений ставит границы: не добавляй production-зависимости без подтверждения, сохраняй совместимость публичного API, пока задача явно не требует иного. Это контракт, по которому агент действует по умолчанию.
Держать AGENTS.md стоит коротким и проверяемым, а не растить в энциклопедию. Длинные инструкции занимают контекст и теряют salience - агент хуже следует размытому многословию, чем короткому чёткому списку. Общие факты оставляют в корневом файле, а специфичные для подкаталога требования переносят в его собственный AGENTS.md, который подхватится именно там. Вложенные overrides - это способ держать инструкцию рядом с кодом, к которому она относится, а не сваливать всё в корень.
Полезно один раз увидеть, как проверить активные инструкции и их источники. Ниже - команды, которые просят Codex перечислить действующие инструкции в порядке приоритета, в том числе из конкретного подкаталога через --cd. К этой форме возвращаются, когда поведение не совпадает с ожиданием: чаще всего дело в том, какой AGENTS.md реально в игре и что кого переопределяет. Проверить цепочку командой дешевле, чем гадать по дереву файлов.
AGENTS.md - это исполняемая политика, и относиться к нему стоит как к коду. Изменение инструкций влияет на все будущие сессии, поэтому его ревьюят: не расширились ли границы, не появилось ли требование, которое агент теперь примет за данность. И, как со всем недоверенным, инструкции из чужой ветки трактуют осторожно - AGENTS.md, пришедший с непроверенным репозиторием, это тоже конфигурация, написанная кем-то другим, а не безусловная истина.
Типичные провалы вокруг AGENTS.md предсказуемы. Пересказать структуру, которую агент и так видит, вместо того чтобы назвать неочевидное. Раздуть файл так, что он теряет salience. Свалить специфичные для подкаталога требования в корень вместо вложенного файла. И ждать, что правка применится задним числом, не проверив цепочку. Держите AGENTS.md коротким контрактом, выносите частное во вложенные файлы, называйте то, что агент не выведет сам, и проверяйте активные инструкции командой.
# AGENTS.md
## Repository map
- Application code: src/
- Integration tests: tests/integration/
## Required checks
- Run pnpm lint after TypeScript edits.
- Run pnpm test --filter affected for behavior changes.
## Change policy
- Do not add production dependencies without approval.
- Preserve public API compatibility unless the task explicitly requires otherwise.# Перечислить активные инструкции и их источники
codex --ask-for-approval never "Summarize the active instructions and their sources."
codex --cd services/payments --ask-for-approval never \
"List active instruction files in precedence order."
# порядок поиска: AGENTS.override.md -> AGENTS.md -> project_doc_fallback_filenames