Почему Claude Code игнорировал AGENTS.md при выключенной телеметрии и как проверить, что агент видит инструкции
Claude Code 2.1.277-2.1.280 не читал AGENTS.md, если телеметрия выключена или сессия идёт через Bedrock, Vertex, Foundry или LLM-шлюз: загрузчик зависел от удалённого флага tengu_agents_md_mod с фолбэком false. Исправлено в v2.1.281 от 23 сентября 2026. На старой версии помогает CLAUDE.md со строкой @AGENTS.md.
Claude Code 2.1.277-2.1.280 молча пропускал AGENTS.md при выключенной телеметрии и на Bedrock. Почему так вышло, как Anthropic починила и как проверить агента канарейкой.

До 23 сентября 2026 года Claude Code версий 2.1.277-2.1.280 молча пропускал локальный AGENTS.md, если у тебя выключена телеметрия или ты сидишь на Bedrock, Vertex, Foundry или LLM-шлюзе. Файл лежит в проекте, агент его не читает, предупреждения нет. Причина - загрузчик AGENTS.md был спрятан за удалённым фича-флагом tengu_agents_md_mod, а флаг без связи с серверами Anthropic по умолчанию выключен. Исправили в v2.1.281 от 23 сентября. Если у тебя версия ниже - обновись или положи рядом CLAUDE.md с одной строкой @AGENTS.md.
Это короткий ответ. Ниже - как баг устроен, почему он не единственный такой за неделю, задело ли это мой конвейер на claude -p и как одной командой проверить, что агент вообще видит твои инструкции.
Почему Claude Code не читал AGENTS.md при выключенной телеметрии
AGENTS.md - это кросс-инструментальный файл инструкций для агентов кода: один файл на репозиторий вместо отдельного конфига под каждый инструмент. Claude Code научился читать его в v2.1.277, но загрузку повесили на удалённый флаг tengu_agents_md_mod. Сессия без доступа к флагам (телеметрия выключена, Bedrock, Vertex) получала значение по умолчанию false, и файл пропускался молча.
Раскопал это Przemek в посте "Claude Code reads AGENTS.md only when telemetry is on" от 23 сентября. Он разобрал бандл v2.1.280 и нашёл у встроенного плагина agents-md два гейта: isOnByDefault стоит в false, а isAvailable зависит от удалённого флага. Вот кусок, который он процитировал:
var W = !1;
var B = () => Oa("tengu_agents_md_mod", W);
var H =
"AGENTS.md as project instructions: by default loaded where the project has no CLAUDE.md; ...";!1 - это минифицированный false. То есть фолбэк флага закрытый: не смог спросить сервер - фичи нет. Для killswitch-а на случай, если плагин что-то сломает, это нормальная логика. Для чтения локального markdown-файла, которому сеть вообще не нужна, - странная.
Проверял он канарейкой: пустая папка, в ней AGENTS.md с одной строкой The canary word is PERIWINKLE., и запрос к агенту назвать слово из инструкций проекта, не открывая файлы. С включённой телеметрией агент отвечал PERIWINKLE, с выключенной - NONE.
В каких режимах AGENTS.md молча пропускался
До v2.1.281 AGENTS.md не загружался в любой сессии, которая не может получить фича-флаги с серверов Anthropic. Это две переменные приватности (DISABLE_TELEMETRY=1 и CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1), а ещё все сторонние провайдеры: Amazon Bedrock, Google Vertex AI, Microsoft Foundry и LLM-шлюзы. Ни в одном случае предупреждения не было.
Таблица по замерам Przemek (v2.1.280) и changelog-у v2.1.281:
| Конфигурация сессии | AGENTS.md загружен | Источник |
|---|---|---|
| Телеметрия включена, первый провайдер Anthropic | да | szypowi.cz |
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 | нет | szypowi.cz |
DISABLE_TELEMETRY=1 | нет | szypowi.cz |
Любая из переменных выставлена в 0 | нет | szypowi.cz |
Переопределение через env в .claude/settings.json | нет | szypowi.cz |
claude --settings с пустыми переменными, со второй сессии | да | szypowi.cz |
| Bedrock, Vertex AI, Foundry, LLM-шлюзы | нет | changelog 2.1.281 |
Самая неприятная строка - четвёртая. Выставил DISABLE_TELEMETRY=0, думаешь, что телеметрия включена, а файл всё равно не читается. Сработал только трюк с --settings и пустыми значениями переменных, и то не с первого запуска. Сам Przemek не объясняет, почему со второй сессии, но похоже на кеш флагов, который сначала надо один раз скачать.
Как Anthropic исправила баг с AGENTS.md
Anthropic выпустила фикс в тот же день, когда вышел пост, - в Claude Code v2.1.281 от 23 сентября 2026. В changelog-е записано: "Changed AGENTS.md support to also work on Amazon Bedrock, Google Vertex AI, Microsoft Foundry, LLM gateways, and sessions with telemetry disabled". Документация memory теперь прямо говорит, что до v2.1.281 такие сессии читали только CLAUDE.md.
Формулировку из документации стоит процитировать целиком: "Before v2.1.281, some sessions, such as those on Amazon Bedrock or with telemetry disabled, read CLAUDE.md files only". Там же рецепт на случай старой версии: CLAUDE.md рядом с AGENTS.md и импорт через @AGENTS.md.
По пересказу Kunal Ganglani, мейнтейнер на Hacker News назвал это "rollout mistake" и объяснил флаг желанием иметь удалённый рубильник, если плагин что-то сломает. Прямой ссылки на комментарий у меня нет, так что держу это как версию, а не как официальную позицию.
Две вещи из этой истории я бы не пропускал.
Первая: issue #95690 от @Prefee открыт 20 сентября, то есть за три дня до поста, с метками area:core и enhancement. Баг про молчаливый пропуск инструкций пометили как "улучшение". На момент, когда я его открыл, issue всё ещё в статусе Open, хотя фикс уже в релизе.
Вторая: одно молчаливое исключение в доке осталось и после фикса. Пункт "When AGENTS.md support is unavailable" говорит, что в первой сессии после апгрейда с v2.1.276 или старше Claude в некоторых случаях читает AGENTS.md только со следующей сессии. Для интерактивной работы - мелочь. Для cron-а, где каждый запуск - новая сессия, первый прогон после апдейта пройдёт без твоих инструкций.
Это единичный баг или телеметрия ломает Claude Code системно
Не единичный. В changelog-е Claude Code с v2.1.280 по v2.1.285 минимум три фикса про то, что выключенная телеметрия отключала несвязанные с ней функции, и ещё одна правка добавила предупреждение о переменных телеметрии. Все они из одного класса: удалённый флаг или телеметрийный канал стоит на пути у локальной фичи.
Собрал из CHANGELOG.md:
| Версия | Что ломалось при выключенной телеметрии | Что сделали |
|---|---|---|
| 2.1.280 | Remote Control недоступен на платных тарифах при DISABLE_TELEMETRY или DO_NOT_TRACK | починили |
| 2.1.281 | AGENTS.md не читался (плюс Bedrock, Vertex, Foundry, шлюзы) | починили |
| 2.1.283 | Недельный лимит Fable не показывался в /usage и счётчиках VS Code | починили |
| 2.1.285 | Не было видно, какие переменные из project settings выключили телеметрию | стартовое уведомление, строки в /status и claude doctor |
Четыре правки на шесть релизов. Вывод, который я отсюда делаю: у Claude Code режим "телеметрия выключена" - это отдельная конфигурация продукта, которую тестируют хуже основной. Если ты в нём сидишь, считай, что живёшь на бета-ветке, и проверяй новые фичи сам. Про похожую историю с приватностью я уже писал, когда Claude Code светил email в User-Agent, - там тоже баг нашёл сторонний человек, а не релизный процесс.
А ещё это тот же механизм, из-за которого Anthropic тихо тестировала урезанный effort в Claude Code: поведение CLI зависит от флагов, которые приезжают с сервера, и ты их не видишь. Там флаг резал качество, тут - выключал целый файл инструкций.
Задело ли это мой пайплайн на claude -p
Мой конвейер статей не пострадал, но по везению, а не по дизайну. У меня 18 cron-обёрток, 8 из них вызывают claude -p, и ни в одной нет переменных телеметрии. В корне репо нет ни CLAUDE.md, ни AGENTS.md: инструкции живут в скиллах, которые обёртки зовут слеш-командой.
Проверял прямо на сервере, откуда крутится генерация. Сначала файлы инструкций в корне:
$ ls AGENTS.md CLAUDE.md
ls: cannot access 'AGENTS.md': No such file or directory
ls: cannot access 'CLAUDE.md': No such file or directoryПотом переменные в обёртках - grep -rn "DISABLE_TELEMETRY\|NONESSENTIAL_TRAFFIC" cron/ ничего не вернул, а пользовательский settings.json на сервере состоит из двух строк: "tui": "fullscreen" и "theme": "dark". Блока env нет вообще.
То есть баг меня обошёл дважды: телеметрия не выключена, а AGENTS.md я не использую. Но стоило бы мне из соображений приватности добавить DISABLE_TELEMETRY=1 в окружение cron-а и переехать со скиллов на AGENTS.md (а это логичный шаг, если хочешь один файл инструкций для всех агентов), - и восемь обёрток тихо пошли бы без инструкций. Ошибки бы не было: claude -p вернул бы код 0 и какой-то текст.
Страхует от такого другое. Каждая обёртка проверяет не код выхода агента, а контракт вывода. В cron/run-generate.sh это две строки:
claude -p "/blog-draft $TOPIC_ID" --permission-mode acceptEdits >"$OUT" 2>&1 \
|| { cat "$OUT"; exit 12; }
grep -q '^ИТОГ: черновик #' "$OUT" || exit 13Код 13 - "нет строки ИТОГ" - и алерт мне. Агент, потерявший инструкции, этой строки не напишет, потому что формат строки задан именно в инструкциях. Грубо, но работает: я доверяю не тому, что агент прочитал, а тому, что он отдал результат в нужной форме.
Деталь, которую я увидел, пока писал эту статью. Генерацию делает тот же headless-агент, и он хотел посмотреть список файлов в папке скилла - ls заблокировали, разрешены только рабочие директории сессии. А Read того же файла по прямому пути прошёл. Одна и та же папка, два инструмента, два разных ответа. Мелочь, но ровно того же сорта: права и видимость у агента зависят от режима, и узнаёшь ты это, только когда упрёшься.
Как проверить, что Claude Code видит твои инструкции
Надёжный способ - канарейка: положить в файл инструкций уникальное слово и спросить агента о нём в том же режиме, в котором работает прод, с теми же переменными окружения. Если ответ не совпал, инструкции не загрузились. Проверка занимает минуту и ловит любую причину пропуска, а не только этот баг.
Рецепт по мотивам Przemek, адаптированный под headless:
mkdir -p /tmp/canary && cd /tmp/canary
echo 'The canary word is PERIWINKLE.' > AGENTS.md
DISABLE_TELEMETRY=1 claude -p 'What is the canary word from the project instructions? Answer NONE if you have none. Do not read files.'На v2.1.281 и новее должно прийти PERIWINKLE. Пришло NONE - смотри версию через claude --version и нет ли выше по дереву CLAUDE.md или CLAUDE.local.md: по умолчанию любой из них отключает чтение AGENTS.md, это уже не баг, а документированное поведение.
Если обновиться нельзя (корпоративный образ, закреплённая версия), работает обходной путь из поста и из доки:
echo '@AGENTS.md' > CLAUDE.mdИмпорты через @path не зависят от флага и читаются на любой версии. Документация отдельно пишет, что оставлять такой CLAUDE.md после обновления можно: двойной загрузки не будет. В интерактивной сессии дополнительно смотри /memory - с v2.1.280 там виден путь к прочитанному AGENTS.md.
Для конвейера я бы ставил канарейку прямо в обёртку раз в сутки или после каждого апдейта CLI. Про то, почему инструкции лучше держать короткими и ссылками, а не простынёй, у меня есть разбор про CLAUDE.md, - там же про @-импорты.
Стоит ли доверять агенту, который меняет поведение от настроек приватности
Доверять можно, но не на слово. Настройка приватности должна менять только то, что уходит с машины, а не то, что агент читает локально. Если инструмент нарушил это правило один раз, считай любую его фичу несуществующей, пока не проверил её сам в своём режиме работы.
Przemek формулирует это жёстче: "A privacy setting should never quietly switch off unrelated local behavior". Я согласен, но для себя вывел более приземлённую границу. Фича агента, которая читает локальный файл, но зависит от удалённого флага, - это две фичи: сама функция и её доставка. Вторую ты не контролируешь. Поэтому граница такая: всё, что влияет на результат агента в проде, должно проверяться на выходе, а не на входе. Не "агент прочитал AGENTS.md", а "в ответе есть то, что без AGENTS.md появиться не могло".
У Anthropic тут в плюс скорость: фикс в день публикации, запись в changelog-е, честная строка в доке и через два релиза уведомление о переменных телеметрии. В минус - то, что баг вообще доехал до релиза, и что issue три дня висел с меткой "enhancement". Молчаливый пропуск инструкций - это не улучшение, это когда твой код-ревьюер вдруг перестал знать правила проекта и ничего тебе не сказал.
Практический итог короткий. Обновись до 2.1.281 или новее. Если сидишь с выключенной телеметрией или на Bedrock/Vertex - прогони канарейку. Если гоняешь агентов в cron-е - проверяй контракт вывода, а не код выхода. Такие дела.
Частые вопросы
Как узнать, прочитал ли Claude Code мой AGENTS.md?
Положи в AGENTS.md уникальное слово и спроси агента о нём, запретив открывать файлы, в том же режиме и с теми же переменными окружения, что в проде. В интерактивной сессии с v2.1.280 путь к прочитанному AGENTS.md виден в /memory.
Почему Claude Code не читает AGENTS.md, если в проекте есть CLAUDE.md?
Это документированное поведение: по умолчанию CLAUDE.md, .claude/CLAUDE.md или CLAUDE.local.md в рабочей директории или выше отключают чтение AGENTS.md. Чтобы читались оба, поставь Project instructions в claude-md-and-agents-md через /config или импортируй @AGENTS.md из CLAUDE.md.
Можно ли выключить телеметрию Claude Code и ничего не сломать?
С v2.1.281 AGENTS.md работает и без телеметрии, но в changelog-е v2.1.280-2.1.285 есть ещё фиксы Remote Control и счётчика лимитов в /usage для этого режима. Выключать можно, но новые фичи в нём стоит проверять самому.
Как готовился материал: черновик собран моим AI-конвейером по темам и заметкам из практики, факты сверены с первоисточниками, финальный текст я прочитал, поправил и утвердил перед публикацией. Обложку к статье тоже рисует нейросеть. Про сам конвейер — в разделе обо мне.
