Claude Code не читает AGENTS.md, если выключить телеметрию

Автор блога Szypowi хотел понять, почему Claude Code игнорирует его AGENTS.md. Он положил в пустую папку файл с одним словом PERIWINKLE и спрашивал модель, знает ли она это слово. Выяснилось, что чтение файла с вашего собственного диска зависит от удалённого флага, а при выключенной телеметрии файл тихо пропускается.
Коротко
- В Claude Code 2.1.277 объявили поддержку AGENTS.md для проектов без CLAUDE.md. Но с DISABLE_TELEMETRY=1 или CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 файл не загружается, и значение 0 ничего не меняет.
- Загрузчик сделан встроенным плагином agents-md. По умолчанию он выключен и работает, только если включён удалённый флаг tengu_agents_md_mod, а когда флаг получить не удалось, подставляется false.
- Когда файл пропускается, никакого предупреждения нет. По данным issue #95690, та же проблема есть на Bedrock, Vertex и сторонних шлюзах, а обходной путь один: CLAUDE.md со строкой @AGENTS.md.
Если вы не следили: AGENTS.md задуман как единый файл инструкций для разных кодовых агентов, его читает, например, Codex. Claude Code брал инструкции проекта из CLAUDE.md, и тем, кто работает с несколькими инструментами, приходилось держать оба файла. В версии 2.1.277 объявили, что в проекте без CLAUDE.md Claude Code будет читать AGENTS.md. Автор держит телеметрию выключенной, и в его репозиториях файл так ни разу и не загрузился.
С DISABLE_TELEMETRY=1 или CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 AGENTS.md не загружается
Тест получился минимальным: пустая папка, в ней только AGENTS.md со строкой «The canary word is PERIWINKLE.». Автор запускал claude -p и просил назвать кодовое слово из инструкций проекта, запретив модели читать файлы. Каждую конфигурацию он гонял в двух сессиях: в новой конфигурации первая сессия только скачивает флаг, а вторая уже им пользуется.
Результат совпал с описанием в issue #95690. CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 выключает функцию, DISABLE_TELEMETRY=1 тоже, поэтому для загрузки файла пришлось убрать обе переменные. Значение 0 не спасает, блокировка остаётся. В документации по переменным окружения сказано, что считается любое значение, но, как замечает автор, это легко упустить, когда пытаешься функцию включить.
Настройки проекта не помогают, а однострочный CLAUDE.md помогает
Блок env в .claude/settings.json проекта, который очищает обе переменные, ни на что не влияет, так что включить функцию для отдельного репозитория нельзя. Работает только переопределение на уровне сессии, причём начиная со второго запуска:
claude --settings '{"env":{"DISABLE_TELEMETRY":"","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":""}}'
Ни в одном из случаев Claude Code не выводит предупреждения. Сессия стартует, модель отвечает без инструкций проекта, и ничто не сообщает о пропущенном файле. В issue также указано, что на Bedrock, Vertex и сторонних шлюзах флаг тоже не может стать true.
Обход держится на том, что CLAUDE.md поддерживает импорты через @path, и от флага они не зависят. Рядом с AGENTS.md кладётся файл из одной строки: echo '@AGENTS.md' > CLAUDE.md. С ним тест с PERIWINKLE возвращает слово даже при выставленной CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1. Цена обхода: лишний файл в каждом репозитории, хотя поддержка AGENTS.md задумывалась как раз для того, чтобы его убрать.
Глобального AGENTS.md и общих навыков в Claude Code 2.1.280 нет
Плагин ищет AGENTS.md и .claude/AGENTS.md только в каталогах проекта, пользовательского файла рядом с пользовательским CLAUDE.md не предусмотрено. Codex читает глобальный ~/.codex/AGENTS.md, и команда /import в Claude Code умеет скопировать его в пользовательский CLAUDE.md, но копия не подхватывает последующие правки. Если у вас один набор личных инструкций на несколько агентов, всё равно нужен @-импорт общего файла в пользовательском CLAUDE.md.
С навыками то же самое. Codex берёт их из .agents/skills в проекте и из ~/.agents/skills в домашнем каталоге, а Claude Code 2.1.280 знает эти пути только в /import, который копирует навыки в .claude/skills. Тестовый навык из .agents/skills Claude Code не показал, а тот же навык из .claude/skills в том же репозитории показал. Чтобы копия не расходилась с оригиналом, автор сделал .claude/skills символической ссылкой на ../.agents/skills, и по ней Claude Code проходит.
Плагин agents-md выключен по умолчанию и ждёт серверный флаг
Загрузчик поставляется как встроенный плагин agents-md. В бандле 2.1.280 его регистрация начинается так:
var W = !1; var B = () => Oa("tengu_agents_md_mod", W);
W здесь хранит значение isOnByDefault, и оно равно false. B отвечает за isAvailable: функция запрашивает удалённый флаг tengu_agents_md_mod, а если получить его не удалось, берёт то же false. Получается цепочка: телеметрия выключена, флаг не приходит, плагин недоступен, и локальный файл так никто и не открывает.
Представьте лампу в своей комнате, которая загорается, только если дозвониться до диспетчера в другом городе. Отключили телефон, и лампа не горит, хотя провод и выключатель на месте. Для чтения markdown-файла из рабочего каталога сеть не нужна, но решение всё равно ждёт серверного переключателя. Автор подтвердил причину двумя способами: тестом с кодовым словом и поиском строки по бинарнику.
Зачем здесь удалённый флаг, из материалов не видно. Судя по всему, так устроено постепенное включение функции, и сам автор допускает такой сценарий. На наш взгляд, странно ставить чтение локального файла в зависимость от серверного переключателя, а молчаливый пропуск делает всё ещё хуже: без такого теста человек решит, что модель игнорирует инструкции, и будет переписывать промпты, хотя файл до модели просто не дошёл.
Когда AGENTS.md заработает без флага
Изменит ли Anthropic поведение и когда, в материалах не сказано. Автор предлагает отвязать чтение локального файла от телеметрии. Если постепенное включение всё же нужно, он просит при недоступном флаге применять документированное поведение или хотя бы показывать при старте сообщение о пропущенном AGENTS.md. В его списке пожеланий есть ещё глобальный AGENTS.md и нативная поддержка .agents/skills. Пока ничего из этого нет, остаются однострочный CLAUDE.md и символическая ссылка.
Читайте также
- Claude Code игнорирует AGENTS.md, если рядом лежит CLAUDE.md
- Claude Code 2.1.283 научился держать новые модели за дверью
- В проекте без CLAUDE.md Claude Code 2.1.277 читает AGENTS.md
- 57% субагентов Claude Code наследуют Bash вызвавшего
- Шлюз узнает, какой агент Claude Code прислал запрос
- Function Hooks стали Claude Mods, релиз обещают за недели
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
