3,583 papers
arXiv:2610.30571 99 22 окт. 2026 г. FREE

Одно предложение в пользовательском файле инструкций: агент следует коду, а не устаревшему CLAUDE.md

КЛЮЧЕВАЯ СУТЬ
Агент видит, что CLAUDE.md врёт, пишет об этом в финальном ответе и всё равно кодит по устаревшей строке. Одно предложение в личном файле инструкций поднимает долю выборов в пользу кода с 4% до 91%, и тесты проходят во всех запусках. Метод позволяет не откатывать рабочий код назад под старую документацию и заодно получать список устаревших мест в проектном файле. Фишка: не спорь с приоритетом команд, а сделай «следуй коду» самой командой. Устаревшая строка перестаёт быть единственной командой в игре.
Адаптировать под запрос
⚡

TL;DR

Устаревшие строки в CLAUDE.md или AGENTS.md побеждают реальный код. Агент открывает файлы проекта, видит, что файл инструкций требует одно, а код делает другое, замечает это и всё равно пишет по файлу. Лекарство из исследования: одно предложение в личном (пользовательском) файле инструкций. Оно говорит агенту, что при расхождении документации и кода главный код, и просит перечислить найденные расхождения в финальном ответе.

Вот как выглядит боль. В CLAUDE.md осталась строка «Используй print() для сообщений о ходе работы», а команда год назад перешла на logging. Агент пишет в финале: «существующий код использует logging, что противоречит CLAUDE.md». И после этого добавляет новый код с print. Хуже ведёт себя Codex CLI. Он в четверти запусков переписал рабочие модули под устаревший файл, и родные тесты проекта после этого упали. Причина простая. Файл инструкций приходит в модель как команда, а код приходит как результат чтения файла. Модели специально обучены ставить команды выше содержимого файлов и веб-страниц, чтобы чужой текст в файле не мог угнать агента. Устаревшая строка получает тот же приоритет.

Метод использует эту же иерархию, но в свою пользу. Предложение в личном файле тоже приходит как команда, и теперь «следовать коду» становится самой командой. Выбор идёт не между «командой» и «чтением файла», а между двумя командами. Одно предложение, ничего больше. Доля выборов в пользу кода выросла с 4% до 91%, а тесты проходили во всех запусках.

🔬

Схема метода

ШАГ 1: Открыть ЛИЧНЫЙ файл инструкций (не проектный)
        Claude Code → ~/.claude/CLAUDE.md
        Codex CLI   → ~/.codex/AGENTS.md
ШАГ 2: Добавить одно предложение: "при расхождении документации и кода
        следуй коду + перечисли расхождения в финальном ответе"
ШАГ 3: Работать как обычно. Агент пишет в стиле существующего кода
        и в конце выдаёт список устаревших мест
ШАГ 4: Использовать список → поправить проектный файл

Всё делается в одном файле, один раз. Дальше предложение работает во всех проектах.

🚀

Пример применения

Задача: Вы ведёте бэкенд интернет-магазина на Django с оплатой через ЮKassa. Год назад команда перешла с хранения сумм в рублях (float) на целые копейки, чтобы не ловить ошибки округления. В CLAUDE.md проекта осталась строка «Суммы храним в рублях как float». Вы просите Claude Code добавить промокоды с процентной скидкой. Без страховки агент напишет арифметику с float рядом с кодом, где всё посчитано в копейках. Деньги расползутся на копейку-другую, и найдёте вы это на проверке заказов, а не на ревью.

Промпт: (файл ~/.claude/CLAUDE.md, добавляется один раз)

Если документация репозитория и существующий код расходятся, следуй
соглашениям, которые используются в существующем коде, а в финальном
ответе укажи каждое найденное расхождение между документацией и кодом.

Дальше обычная задача в чате с агентом:

Добавь в корзину промокоды с процентной скидкой. Скидка применяется к сумме
заказа до доставки. Нужны модель, проверка срока действия и тесты.

Результат: Агент прочитает модули оплаты и увидит копейки. Новый код он напишет по тем же правилам: целые числа, те же хелперы округления, тот же стиль ошибок. В финальном ответе будет отдельный список расхождений. Например: «CLAUDE.md говорит, что суммы хранятся в рублях как float, а код хранит целые копейки». Этот список вы используете как задание на правку устаревшего файла. Существующие модули агент не тронет.

🧠

Почему это работает

Слабость. Файл инструкций пишется как команда («Используй X»), но на деле это снимок кода на момент записи. Код меняется, а повелительная форма остаётся. Модели обучены ставить команды выше текста из инструментов, поэтому устаревшая строка выигрывает у кода. Это работает даже когда модель видит расхождение. Замечание в финальном ответе ничего не меняет, потому что решение о том, как писать, принято по другому правилу.

Сильная сторона. Модели хорошо следуют явным командам, особенно из файла инструкций. Если команда говорит «побеждает код», модель выполняет именно её. Она хорошо умеет и сравнивать документацию с кодом, и описывать расхождения словами.

Как метод использует это. Предложение приходит тем же каналом, что и проектный файл, и получает тот же статус команды. Спор «команда против чтения файла» превращается в спор «команда против команды». Конкретное правило про этот случай побеждает общую строку. Остальные строки файла (команды сборки, структура) продолжают работать.

Рычаги управления: - Вторая часть предложения («укажи каждое расхождение») даёт побочный отчёт для чистки файла. Убрать её можно, но тогда у Codex CLI отчёта почти не будет: без предложения он упоминал конфликт лишь в 2 из 80 запусков. - Где лежит предложение. В статье проверен только личный файл. Проверять ли проектный, вы решаете сами, но там оно может стоять рядом с устаревшими строками. - Что считать «документацией». В исследовании речь про файлы инструкций. Расширять на README и комментарии можно, но это уже ваша догадка.

📋

Шаблон промпта

Если {источник_правил} и существующий код расходятся, следуй
соглашениям, которые используются в существующем коде, а в финальном
ответе укажи каждое найденное расхождение между {источник_правил}
и кодом.

Это адаптация исходной фразы. В статье источник правил называется «документация репозитория». Подставьте: - {источник_правил} — «документация репозитория» (как в исследовании). Если у вас только CLAUDE.md или AGENTS.md, можно написать «файл инструкций проекта».

Куда вставлять: - Claude Code → ~/.claude/CLAUDE.md - Codex CLI → ~/.codex/AGENTS.md - Другие агенты (Cursor и т. п.) → глобальные правила пользователя. Эту установку авторы не проверяли, перенос — ваша догадка.

Быстрый старт не нужен. Это одно предложение, адаптировать там нечего.

⚠️

Ограничения

⚠️ Работает, когда код новее файла: Предложение учит агента верить коду. Если вы намеренно пишете в CLAUDE.md новое правило («мигрируем на logging, пиши по-новому»), а код пока старый, агент по этому предложению будет следовать старому коду. Такой случай авторы не тестировали. Для него нужна оговорка в проектном файле или в задаче.

⚠️ Не 100%: С предложением доля выборов в пользу кода была около девяти из десяти, а не всегда. Проверять новый код по-прежнему нужно.

⚠️ Узкая проверка: Только небольшие синтетические проекты на Python, две пары «агент плюс модель», задачи на добавление функции за один запуск без вмешательства человека. Крупные реальные репозитории, другие языки и длинные сессии не проверялись.

⚠️ Есть исключения: В двух из 16 типов выбора (деньги и конфигурация) Claude Code и без предложения в половине случаев шёл за кодом. Для денег это особенно важно, но не гарантия: проверяйте суммы тестами.

⚠️ Чинит симптом, не причину: Предложение не обновляет устаревший файл. Оно только защищает от его последствий. Список расхождений в ответе нужно использовать, чтобы потом исправить сам файл.

🔍

Как исследовали

Авторы сделали 40 небольших Python-проектов с работающими тестами, файлом инструкций и просьбой добавить функцию. Для реализации нужно было сделать четыре-пять выборов между двумя соглашениями, например print или logging. В каждом проекте код придерживался одного соглашения, а файл требовал другого. Всего было 16 видов выбора, причём каждый встречался в обоих направлениях, чтобы вкусы модели не влияли на результат. Claude Code (Sonnet 5.5) и Codex CLI (GPT-6 Sol) прогнали каждый проект дважды с предложением и без: 320 запусков. Скрипт определял по добавленному коду, чему следовал выбор: файлу, коду или ничему из них. Отдельная модель (Opus 5.5), не знавшая условий, читала финальные ответы и отмечала, названо ли расхождение.

Без предложения 90,1% выборов шли по устаревшему файлу. Claude Code назвал конфликт в 79 из 80 запусков и всё равно писал по файлу. Это ключевой инсайт: «заметить» не значит «исправить». Codex CLI в 20 запусках переписал существующий код под файл, в 17 из них тесты упали. С предложением доля выборов по коду выросла с 4,2% до 91,4%, переписываний не было, тесты проходили во всех 160 запусках. Это подтвердило объяснение авторов про иерархию «команда выше результата инструмента». Заметный деталь: мощная «преамбула» Claude Code («ОБЯЗАТЕЛЬНО следуй») не причина. У Codex CLI такого текста нет, а файл он слушался даже чаще.

Авторы также показали на реальных репозиториях Supabase и OpenAI Codex, что файлы инструкций устаревают на 13–24 дня даже в живых проектах.

📄

Оригинал из исследования

When a repository's documentation and its existing code disagree, follow the conventions used
in the existing code, and in your final reply point out each inconsistency you found between the
documentation and the code.

Контекст: Это дословное предложение, которое авторы добавляли в личный файл инструкций каждого агента во всех запусках «с предложением». Оно же использовалось и в задачах про деньги.

💡

Адаптации и экстраполяции

💡 Адаптация для регулярного аудита файла инструкций: Исходная фраза даёт отчёт как побочный продукт. Если вы хотите чистить файл целенаправленно, дайте агенту отдельную задачу. Это не тестировалось, но использует тот же механизм сравнения.

Прочитай CLAUDE.md и сравни каждую строку с реальным кодом проекта.
Ничего не меняй. Выведи таблицу: строка из файла | что в коде | совпадает или нет.

🔧 Техника: убрать вторую часть предложения → меньше шума, но нет отчёта. Если в ответах агента список расхождений мешает, оставьте только «следуй соглашениям, которые используются в существующем коде». Минус: Codex CLI без такой просьбы почти не сообщал о конфликтах.

🔧 Техника: разделить файл на «правила» и «описания». Авторы советуют производителям моделей отличать описания кода от правил для агента. Читателю можно сделать это руками: хранить в файле команды сборки и запреты отдельно от того, «как устроен код». Вторую часть устаревать проще. Эффект самим разделением авторы не проверяли.

🔗

Ресурсы

  • Работа: Stale Instruction Files Override the Code in Coding Agents: A One-Sentence Fix
  • Авторы: Xiaonan Xu (Georgia Institute of Technology), Wenjing Wu (University of Colorado Boulder)
  • Данные и код: github.com/WenJing95/stale-docs-data
  • Связанные работы: Wallace et al., «The Instruction Hierarchy» (arXiv:2404.13208); Mohammadi et al., «The working set of a coding agent» (arXiv:2608.16630); Treude & Baltes, «Context rot in AI-assisted software development» (arXiv:2606.09090)

📋 Дайджест исследования

Ключевая суть

Агент видит, что CLAUDE.md врёт, пишет об этом в финальном ответе и всё равно кодит по устаревшей строке. Одно предложение в личном файле инструкций поднимает долю выборов в пользу кода с 4% до 91%, и тесты проходят во всех запусках. Метод позволяет не откатывать рабочий код назад под старую документацию и заодно получать список устаревших мест в проектном файле. Фишка: не спорь с приоритетом команд, а сделай «следуй коду» самой командой. Устаревшая строка перестаёт быть единственной командой в игре.

Принцип работы

Файл инструкций приходит в модель как команда. Код приходит как результат чтения файла. Модели специально учат ставить команды выше содержимого файлов, чтобы чужой текст не угнал агента. Устаревшая строка получает тот же приоритет. Теперь добавь второе предложение в личный файл (~/.claude/CLAUDE.md или ~/.codex/AGENTS.md). Оно тоже приходит как команда. Спор «команда против чтения файла» превращается в спор «команда против команды». Конкретное правило про расхождения побеждает общую строку «Используй X». Это как два распоряжения от начальника. Выполняется то, что написано точнее и свежее.

Почему работает

Без страховки замечание в финальном ответе ничего не меняет. Решение «как писать» уже принято по другому правилу. Агент честно пишет «код использует logging, что противоречит CLAUDE.md» и дальше добавляет print. Хуже всех ведёт себя Codex CLI. В четверти запусков он переписал рабочие модули под устаревший файл, и родные тесты проекта упали. Без предложения он упоминал конфликт лишь в 2 из 80 запусков. Модель отлично сравнивает документацию с кодом и описывает расхождения словами. Не хватало только команды, что из них главнее. Вторая часть предложения («укажи каждое расхождение») даёт бесплатный бонус. Это готовое задание на чистку проектного файла. Остальные строки файла (команды сборки, структура) продолжают работать как раньше.

Когда применять

Разработка с агентами (Claude Code, Codex CLI) → добавление функций в живой проект, где CLAUDE.md или AGENTS.md писали давно, особенно когда команда успела сменить библиотеки, формат денег или стиль логирования. Работает как постоянная страховка во всех проектах сразу. НЕ подходит, когда вы намеренно пишете в проектный файл новое правило («мигрируем на logging, пиши по-новому»), а код пока старый. Агент по этому предложению пойдёт за старым кодом. Такой случай авторы не проверяли, нужна оговорка в проектном файле или в самой задаче. Метод не обновляет устаревший файл, он только защищает от его последствий.

Мини-рецепт

1. Открой личный файл, не проектный: для Claude Code это ~/.claude/CLAUDE.md, для Codex CLI это ~/.codex/AGENTS.md. Авторы проверяли только личный файл.
2. Вставь одно предложение: Если документация репозитория и существующий код расходятся, следуй соглашениям, которые используются в существующем коде, а в финальном ответе укажи каждое найденное расхождение между документацией и кодом.
3. Работай как обычно: ставь задачи в чате, ничего больше не меняя. Агент пишет в стиле существующего кода.
4. Забирай список в конце ответа: это перечень устаревших строк. Превращай его в правку проектного файла.
5. Всё равно гоняй тесты: с предложением код побеждал примерно в девяти случаях из десяти, а не всегда.
6. Если у вас Cursor или другой агент: попробуйте то же самое в глобальных правилах пользователя. Авторы это не проверяли, так что это ваша догадка.

Примеры

[ПЛОХО] Бэкенд интернет-магазина на Django. Год назад суммы перевели с рублей во float на целые копейки. В CLAUDE.md осталась строка «Суммы храним в рублях как float». : Добавь в корзину промокоды с процентной скидкой, скидка применяется к сумме заказа до доставки. Нужны модель, проверка срока действия и тесты. (личный файл пустой). Агент замечает копейки в коде, но пишет скидку на float по старой строке. Деньги расползаются на копейку-другую, и вы находите это на проверке заказов, а не на ревью.
[ХОРОШО] : тот же запрос, но в ~/.claude/CLAUDE.md один раз добавлено: Если документация репозитория и существующий код расходятся, следуй соглашениям, которые используются в существующем коде, а в финальном ответе укажи каждое найденное расхождение между документацией и кодом. Агент считает в целых копейках, берёт те же функции округления и тот же стиль ошибок. В финале пишет: «CLAUDE.md говорит, что суммы хранятся в рублях как float, а код хранит целые копейки». Вы правите эту строку и забываете о проблеме. Замечание про проверку: на деньгах и конфигурации Claude Code и без предложения в половине случаев шёл за кодом. Но это не гарантия, суммы всё равно проверяйте тестами.
Источник: Stale Instruction Files Override the Code in CodingAgents: A One-Sentence Fix
ArXiv ID: 2610.30571 | Сгенерировано: 2026-10-26 15:20

Проблемы LLM

ПроблемаСутьКак обойти
Агент видит, что файл инструкций устарел, но всё равно пишет по немуВ файле правил (CLAUDE.md, AGENTS.md) осталась старая строка. Например, «используй print», а код давно перешёл на logging. Агент читает код и замечает конфликт. Даже пишет об этом в ответе. Но новый код делает по старой строке. Иногда переписывает рабочие модули, и тесты падают. Причина: модели учат ставить команды выше содержимого файлов. Файл правил приходит как команда. Код приходит как результат чтения. Команда побеждает, даже когда она невернаДобавь в личный (глобальный) файл правил одно предложение. «Если документация и код расходятся, следуй существующему коду. В финальном ответе перечисли каждое расхождение». Теперь «следуй коду» — тоже команда. Спор идёт между двумя командами, а не между командой и чтением файла

Методы

МетодСуть
Правило приоритета «код важнее документации» — защита от устаревших инструкцийОткрой личный файл правил. Для Claude Code это ~/.claude/CLAUDE.md, для Codex CLI — ~/.codex/AGENTS.md. Добавь: Если документация репозитория и существующий код расходятся, следуй соглашениям из существующего кода, а в финальном ответе укажи каждое найденное расхождение. Делается один раз, дальше работает во всех проектах. Почему работает: Предложение приходит тем же каналом, что и проектный файл. Оно получает статус команды. Конкретное правило про конфликт побеждает общую устаревшую строку. Остальные строки файла (команды сборки, структура) продолжают работать. Бонус: Вторая часть даёт список устаревших мест. Используй его как задание на правку проектного файла. Когда да: Код новее документации. Задачи «добавь функцию в существующий проект». Когда нет: Ты намеренно написал в файле новое правило, а код ещё старый («мигрируем на logging»). Агент пойдёт за старым кодом. Для такого случая добавь оговорку в проектный файл или в задачу. Оговорки: Помогает в большинстве случаев, но не всегда. Новый код проверяй тестами, особенно работу с деньгами. Проверяли только небольшие проекты на Python. Для других агентов (Cursor и т. п.) перенос — твоя догадка
📖 Простыми словами

Stale Instruction Files Override the Code in CodingAgents: A One-Sentence Fix

arXiv: 2610.30571

AI-агенты для кодинга слепо верят системным файлам вроде CLAUDE.md или AGENTS.md, даже когда те нагло врут. Модели натасканы ставить повелительные инструкции выше фактов из контекста. Агент открывает проект, своими глазами видит, что живой код ушёл вперёд, но послушно пишет старую херню, потому что в файле написано: «делай так». Для LLM любая забытая строчка в мануале имеет абсолютный приоритет над реальностью.

Это как нанять нового сотрудника, вручить ему пыльную инструкцию пятилетней давности и отправить на склад. Он видит, что все давно возят коробки на карах, но в бумажке написано «таскать мешки на горбу». И бедолага надрывает спину, повторяя: «в регламенте же так сказано». Полный абсурд, но для нейросетевого ассистента любая дока — это закон, а реальный рабочий код — просто справочный шум.

Исследователи нашли элегантное лекарство: фикс в одно предложение в твоём глобальном файле правил. Ты явно прописываешь: при любом расхождении документации и кода главный — код, а найденные нестыковки выведи в финальном ответе. Этот трюк мгновенно ломает слепое подчинение: модель перестаёт пихать устаревший float туда, где команда уже год считает суммы в копейках. Всего одна строчка системного промпта спасает от тихого факапа на проде.

Тестировали на Claude, но грабли универсальны для любого AI: Cursor, Copilot, Windsurf и самописных агентов. Проект быстро растёт, код меняется за день, а файлы описаний превращаются в братскую могилу забытых соглашений. Заставлять команду держать доку в идеале бесполезно, проще научить модель проверять её на вшивость через фактический статус репозитория.

Перестань надеяться, что твои инструкции актуальны — этого не будет никогда. Вбей правило приоритета кода в свой личный профиль прямо сейчас. Без этой копеечной страховки агент в любой момент выкатит на ревью абсолютно нерабочий легаси-мусор, и повезёт, если ты заметишь подвох до того, как реальные деньги утекут в трубу.

Работа с исследованием

Адаптируйте исследование под ваши задачи или создайте готовый промпт на основе техник из исследования.

0 / 2000
~0.5-2 N-токенов ~10-30с
~0.3-1 N-токенов ~5-15с