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

В Claude Code 2.1.280 загрузку AGENTS.md решает удалённый флаг на стороне Anthropic. Флаг не приходит, если отключён лишний сетевой трафик, и тогда инструкции проекта молча пропадают. Автор блога Szypowi 23 сентября опубликовал разбор: нашёл это место в бандле, проверил его на пустом репозитории и описал обходной путь.
Поддержку AGENTS.md объявили в 2.1.277: если в проекте нет CLAUDE.md, Claude Code берёт инструкции из AGENTS.md. Уже в той записи changelog стояла оговорка, что на Bedrock, Vertex и Foundry функция пока не работает. Про телеметрию в ней не было ничего. У автора телеметрия в шелле выключена, и в его репозиториях файл не загрузился ни разу.
Где стоит переключатель
Загрузчик поставляется как встроенный плагин 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 с контрольным словом:
echo 'The canary word is PERIWINKLE.' > AGENTS.md
Дальше claude -p просят назвать контрольное слово из инструкций проекта, ответить NONE, если инструкций нет, и не читать файлы. Каждую конфигурацию автор гонял в двух сессиях подряд: первая сессия в новой конфигурации только скачивает флаг, применяется он со второй.
Что получилось:
CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1выключает функцию, как и сказано в issue в трекере Claude Code, откуда автор начал.DISABLE_TELEMETRY=1выключает её тоже. С любой из двух переменных AGENTS.md не загружался, пришлось убирать обе.- Значение
0не помогает. Документация по переменным окружения предупреждает, что срабатывает любое значение, но, как замечает автор, это легко упустить, когда пытаешься функцию включить. - Блок
envв.claude/settings.jsonпроекта, который очищает обе переменные, ни на что не влияет. Включить функцию для одного репозитория нельзя. - Переопределение на уровне сессии работает, начиная со второй сессии:
claude --settings '{"env":{"DISABLE_TELEMETRY":"","CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":""}}'.
Ни в одном случае Claude Code ничего не выводит. Сессия стартует, модель отвечает без инструкций проекта. В issue отмечено, что та же проблема есть у сторонних шлюзов, Bedrock и Vertex: там флаг тоже не может стать true.
Одна строка в CLAUDE.md
Импорты через @path в CLAUDE.md от флага не зависят. Поэтому файл из одной строки рядом с AGENTS.md подтягивает его и с выключенной телеметрией:
echo '@AGENTS.md' > CLAUDE.md
С ним тот же тест возвращает PERIWINKLE при включённой CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1. Цена - лишний файл в каждом репозитории, от которого поддержка AGENTS.md как раз должна была избавить. Есть у такой схемы и плюс. По умолчанию AGENTS.md только запасной вариант: если CLAUDE.md есть в рабочей папке или выше, AGENTS.md игнорируется (это поведение меняется в /config, раздел «Project instructions»). CLAUDE.md, который начинается с @AGENTS.md, загружает оба файла, и правила только для Claude можно держать рядом с общими.
Сильнее всего автора задевает молчание. Причину он подтвердил контрольным словом и поиском строки по бинарнику, но, по его словам, большинство так делать не будет: «Они решат, что модель игнорирует их инструкции, и потратят время на промпты, хотя файл до модели вообще не дошёл». Телеметрию он выключил сознательно и ждал, что потеряет немного диагностики, «и ничего больше». Под удар, считает автор, попадают как раз те, кому AGENTS.md нужнее всего: кто ведёт один файл инструкций на несколько агентов, обычно следит и за тем, что каждый инструмент отправляет домой, а команды на Bedrock, Vertex или за шлюзом часто отключают лишний трафик политикой. Если Anthropic нужен поэтапный выкат, то при недоступном флаге, предлагает он, лучше откатываться к задокументированному поведению или хотя бы писать при старте, что пропущено и почему.
Что поменялось в 2.1.281
Позже в обсуждении исходного запроса на поддержку AGENTS.md на GitHub один из комментаторов процитировал changelog версии 2.1.281: поддержка AGENTS.md теперь работает на Amazon Bedrock, Google Vertex AI, Microsoft Foundry, через LLM-шлюзы и «в сессиях с выключенной телеметрией». Версию с исправлением он, по собственной оговорке, взял из атрибуции Anthropic, а не нашёл сам, и доступа к Bedrock, Vertex и Foundry для проверки у него не было.
Его прогоны на 2.1.282: AGENTS.md загрузился 3 из 3 раз без флагов и так же с CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1, DISABLE_TELEMETRY=1, DO_NOT_TRACK=1 или DISABLE_GROWTHBOOK=1. Контроль без обоих файлов дал 0 из 3. В прогонах с выключенной телеметрией локальный кэш флагов в ~/.claude.json (cachedGrowthBookFeatures) остался пустым и без отметки о загрузке, так что файл грузился вообще без единого закэшированного флага.
Тот же комментатор описал проблему первого запуска на 2.1.278: проба в свежей конфигурации показала plugins: [] и 0 загрузок из 18, а со второго запуска всё восстанавливалось. Он связал это с CI, где каждая задача стартует в новом контейнере и каждый запуск первый. На 2.1.282 первые запуски дали 5 из 5, а agents-md@builtin появлялся уже в первом событии stream-json.
И ещё одна ловушка из его проверок. Ключ верхнего уровня {"env:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1"} в настройках телеметрию не выключил: кэш флагов заполнился целиком, 715 записей. Вложенная форма {"env": {...}} дала ноль. По его словам, в 2.1.282 при старте появилось уведомление со списком телеметрийных переменных из файла настроек, которые были проигнорированы.
Чего ещё нет
Плагин ищет 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 проходит.
Дальше
Хуки Claude Code блокируют только на коде выхода 2
«Exit 1 не блокирует ничего», прямо предупреждает документация хуков Claude Code, хотя в Unix единица и есть код сбоя. Так что защитный хук с таким выходом пропустит опасную команду, остановит её только exit 2.
Читайте также
- Claude Code игнорирует AGENTS.md, если рядом лежит CLAUDE.md
- Claude Code шлёт Anthropic хеши файлов даже с DeepSeek
- Claude Code 2.1.318: срок входа, логи раннера и шлюз AWS
- intent-lens объясняет команды Claude Code до их запуска
- Codedict срезал токены Claude Code на 63%, а счёт на 26%
- Дерево файлов покажет, что читает и правит Claude Code
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите, чтобы оставить комментарий. Он появится после модерации.

