Хватит писать запреты в CLAUDE.md: новые правила контекст-инжиниринга для Claude Code и /doctor
Anthropic (Тарик, 24 июля 2026) выпустил новые правила контекст-инжиниринга для Claude 5: жёсткие запреты в CLAUDE.md работают хуже описания желаемого стиля, дубли правил надо убирать, а длинные скиллы - дробить и грузить по частям. Команда /doctor находит раздутое в CLAUDE.md и скиллах и предлагает сократить. Память между сессиями живёт по тому же принципу: в контексте только индекс MEMORY.md.
Anthropic переписал правила контекст-инжиниринга для Claude 5: запреты в CLAUDE.md работают хуже описания стиля. Разбираю правила, /doctor и как устроить память агента между сессиями.

В статье · 9 разделовразвернутьсвернуть
Я набивал CLAUDE.md запретами. "Никогда не делай X", "не смей писать Y", капсом, с восклицательными знаками - как будто ору на стажёра, который меня не слышит. А 24 июля 2026 Anthropic выкатил материал, где по сути говорит: ребят, вы делаете только хуже. Модели поумнели, а вы всё ещё держите их на коротком поводке из своих запретов. Ниже разберу, что поменялось в контекст-инжиниринге для Claude 5, почему описание стиля бьёт жёсткий запрет, и что за команда /doctor разгребает этот бардак.
Что за новые правила контекст-инжиниринга для Claude 5
Контекст-инжиниринг - это то, как ты собираешь контекст для модели: системный промпт, скиллы, CLAUDE.md, память, описания инструментов. 24 июля 2026 Тарик из Anthropic опубликовал новые правила этой сборки для моделей поколения Claude 5. Главный аргумент авторитетный: этими же принципами Anthropic сократил системный промпт самого Claude Code больше чем на 80% - без измеримого ухудшения на своём бенчмарке по кодингу.
Вдумайся в цифру. Больше 80% инструкций, которые люди годами считали необходимыми, оказались лишними. Не "чуть подрезали жирок", а выкинули четыре пятых - и модель не стала хуже кодить. Значит, весь этот объём был не помощью, а шумом, который модель и так продиралась, тратя токены и внимание.
Логика простая: старые модели действительно нуждались в подпорках, иначе в худшем случае писали дичь. Новые - соображают лучше и опираются на окружающий контекст сами. Костыли, которые спасали от худшего сценария, теперь просто мешают и конфликтуют между собой.
Почему жёсткие запреты в клод код работают хуже описания стиля
Жёсткий запрет говорит модели, чего не делать, но не даёт ориентира, что делать вместо. Описание желаемого стиля даёт. Классический пример из материала: раньше в промпт писали "никогда не пиши комментарии" (или "не пиши многострочные докстринги"). Теперь то же самое формулируют как "пиши код, который соответствует плотности комментариев и неймингу в окружающем коде".
Разница огромная. Запрет "никогда не пиши комментарии" - это стена. Модель упирается в неё и в спорной ситуации либо тупит, либо нарушает. А "смотри на соседний код и подражай ему" - это компас. Он работает в любом файле: где комментариев нет, модель их не пишет, где они плотные, пишет как принято. Один принцип вместо десяти запретов на разные случаи.
Раньше без этих ограничителей комментарии Claude часто были неуместными, поэтому запреты имели смысл. Сейчас у модели достаточно суждения, чтобы решить самой по контексту. Поэтому правило простое: везде, где ты пишешь "не делай так", остановись и спроси - а могу ли я вместо запрета описать, как выглядит хорошо? Обычно можешь.
Каким должен быть CLAUDE.md по новым правилам Anthropic
CLAUDE.md должен содержать только подводные камни - то, обо что модель реально споткнётся, а не то, что она поймёт сама, поизучав репозиторий. Коротко опиши, зачем нужен проект, а основной бюджет токенов трать на грабли: неочевидные зависимости, странные соглашения, места, где "логично" сделать неправильно.
Всё, что модель выведет сама из кода, - лишнее. Она видит структуру папок, стек, стиль соседних файлов. Расписывать ей "у нас проект на Python, тесты в папке tests" - трата токенов на пересказ очевидного. Такой раздутый CLAUDE.md не помогает, а разбавляет действительно важные предупреждения водой.
Проверь себя вопросом по каждой строке файла: модель узнает это, просто открыв пару файлов? Если да - удаляй. Останется то, обо что она бы споткнулась вслепую. Вот это и есть полезный CLAUDE.md.
У бюджета есть и числовая прикидка. Разбор от HumanLayer говорит, что фронтир-модели с рассуждением уверенно следуют примерно 150-200 инструкциям, и штук 50 из них уже съедает системный промпт самого Claude Code. Остаётся 100-150 на твой CLAUDE.md плюс сами сообщения в чате. Всё, что сверху, - лотерея: что-то сработает, что-то потеряется, и ты не угадаешь что. Каждая строка файла тратит этот бюджет на каждой сессии.
Механически короткий файл держится на указателях вместо копий. Вместо того чтобы вставлять в CLAUDE.md кусок кода или длинное описание - дай ссылку файл:строка или вынеси детали в отдельный док, который подключается импортом @путь/к/файлу (например, @docs/git-instructions.md). Копия устаревает через пару коммитов, а указатель ведёт на актуальный исходник. Файл остаётся коротким, детали лежат рядом и грузятся адресно.
Не дублируйте правила в промпте и описании инструмента
Одно и то же правило, повторённое в системном промпте и в описании инструмента, - это чистая трата токенов и риск рассинхрона. Если правило про инструмент - его место в описании инструмента, и только там. В системный промпт его дублировать не нужно.
Это особенно важно, когда ты строишь своих агентов на Anthropic API, а не просто пользуешься Claude Code. Там ты сам автор и системного промпта, и описаний тулов - и легко в порыве надёжности написать одно и то же дважды. А потом правишь в одном месте, забываешь про второе, и модель получает два слегка разных указания. Она честно пытается угодить обоим и путается.
Вместо примеров использования, которые зажимают инструмент в узкий сценарий, лучше вложиться в сам дизайн: понятные выразительные параметры, внятные подсказки по значениям. Хорошо спроектированный инструмент объясняет себя сам, и городить вокруг него частокол примеров не нужно.
Как разбивать claude code skills на файлы
Длинный скилл надо разбивать на несколько файлов и подгружать только то, что нужно под конкретную задачу. Это называется прогрессивное раскрытие: модель не тащит весь мануал в контекст сразу, а достаёт нужный кусок по мере надобности. Специализированные инструкции выносятся в отдельные скиллы вместо того, чтобы всё грузить наперёд.
И ещё один пункт, который лично мне сломал шаблон: спецификация не обязана быть в Markdown. Часто мы садимся писать подробное текстовое ТЗ, хотя лучший бриф уже лежит рядом. Подойдёт тестовый набор, который показывает ожидаемое поведение. Подойдёт HTML-макет. Подойдёт функция из другой кодовой базы, на которую надо равняться. Иногда показать пример нагляднее, чем описать словами.
Что делает /doctor с раздутыми CLAUDE.md и скиллами
/doctor - это команда Claude Code, которая помогает привести в порядок ("rightsize") твои CLAUDE.md и скиллы: находит раздутое и предлагает сократить. По сути это ассистент по уборке накопленного мусора в контексте - тех самых устаревших запретов и дублей, о которых весь материал.
Запускаешь /doctor, смотришь предложенные упрощения и принимаешь те, с которыми согласен. Дальше руками: вынести многошаговые процедуры из CLAUDE.md в отдельные скиллы, заменить примеры-затычки на нормальную схему или интерфейс там, где это уместно.
Побочный, но приятный эффект - лимиты. Чем короче твой промпт и скиллы, тем меньше токенов уходит на каждый запрос, тем свободнее дышит контекстное окно. Люди, которые упираются в claude code лимиты, часто сами же и раздули контекст простынями инструкций. Уборка контекста - это заодно и экономия.
Как Claude Code помнит факты между сессиями
Между сессиями Claude Code помнит только то, что лежит в файлах. CLAUDE.md пишу я, а папку ~/.claude/projects/<проект>/memory/ ведёт сам агент: один факт - один markdown-файл, плюс индекс MEMORY.md. В контекст каждой сессии грузится только индекс, сами факты агент открывает, когда они понадобились. Это то же прогрессивное раскрытие, что и со скиллами: фактов может стать сотня, а платишь за них одной страницей текста в начале сессии.
Вот реальный файл из моей памяти, целиком:
---
name: No cd && git in bash commands
description: Never combine cd with git in compound bash commands - use git -C instead to avoid approval prompts
metadata:
type: feedback
---
НИКОГДА не использовать `cd <path> && git ...` в bash-командах. Claude Code
требует ручного подтверждения для составных команд с cd + git (защита от
bare repository attacks), и это нельзя отключить.
**Why:** Пользователь работает в режиме Accept Edits и не хочет видеть лишних
подтверждений. Составные cd+git команды - основной источник ненужных промптов.
**How to apply:** Всегда использовать `git -C <path>` вместо `cd <path> && git`.
Это касается ВСЕХ git-операций: add, commit, diff, log, status, push и т.д.Смешно, но файл открывается тем самым капсовым "НИКОГДА", от которого Anthropic отговаривает. Держится правило при этом не на капсе, а на полях Why и How to apply. Без "почему" факт через месяц выглядит капризом, и его сносит либо агент, либо я сам. Переписал бы по новым правилам - первую строку убрал, причину и способ применения оставил. metadata.type - лайт-провенанс: тип факта (обратная связь, контекст проекта, ссылка на внешний ресурс) подсказывает агенту, насколько этому верить.
Индекс рядом - по строчке на факт, только название и хук:
# Memory Bank
## Feedback
- [No cd && git](feedback_no_cd_git.md) - использовать `git -C` вместо
`cd && git`, чтобы избежать лишних подтверждений
- [gstack proactive scope](gstack-proactive-scope.md) - дев-скиллы только
по явной команде
...Вся "система памяти" при этом держится не на коде, а на пяти правилах в инструкции агенту. Вот они как есть:
1. Один факт - один файл с фронтматтером (name, description, type).
Не сваливать три мысли в один файл.
2. После записи факта - добавить строку в индекс MEMORY.md.
Контент в индекс не класть, только название и хук.
3. Перед сохранением проверить, нет ли уже файла про это.
Есть - обновить его, а не плодить дубль.
4. Факт оказался неверным - удалить файл, а не дописывать поправку сверху.
5. Вспомнил факт из памяти - проверь, что упомянутый файл/флаг/сервис
ещё существует, прежде чем советовать. Память - снимок на момент
записи, не живое состояние.Они лечат главную беду памяти. Найти факт - не проблема, проблема в том, чтобы не запомнить мусор и не поверить в устаревшее. Как выглядит мусор вживую: агент DnD-бота когда-то записал круглую цифру аудитории "около 4000 пользователей" и месяцами вставлял её в тексты и отчёты. Лежит в памяти - значит, правда. Когда я посчитал по продакшн-базе, вышло так: бота не заблокировали 3558 человек, до создания персонажа дошли ~1200, активных ~600. Живую аудиторию агент завышал в шесть с лишним раз. Чинил по правилам 4 и 1: файл с "4000" удалил (не поправил сверху, а удалил), записал новый факт с тремя цифрами, датой замера и пометкой "НЕ использовать 4000". Неправильной цифры в памяти физически нет, и агент перестал её цитировать.
Второй полезный тип факта - предохранитель. Трекер привычек с ботом я в июле выключил насовсем. Агент, увидев 502 на его домене, по умолчанию полез бы "чинить" и поднимать сервис. Поэтому в памяти лежит факт "трекер ОТКЛЮЧЁН НАСОВСЕМ по решению владельца, НЕ поднимать по 502". Даты решений пишу прямо в тексте факта ("решение от 2026-07-10: длинные тире не используем"), этого хватает, чтобы агент не тащил протухшую установку.
Векторной базы, графа знаний и MCP-сервера под заметки тут нет. Я примерял этот стек после воркшопов про память агентов и отказался: на паре десятков фактов файлы, греп и git для отката надёжнее, а память видно глазами. Граница для себя такая: векторный поиск нужен, когда фактов тысячи и файлы перестают находиться грепом. До этого он лечит боль, которой нет.
И главная находка, пока собирал этот раздел: правило про git -C у меня живёт дважды - в этом факте памяти и отдельной секцией в глобальном CLAUDE.md. Ровно тот дубль, от которого предостерегает Anthropic: обе копии грузятся в каждую сессию, а поправлю я, конечно, только одну.
Что я с этим сделаю у себя
Скажу честно: у меня самого скиллы блог-пайплайна забиты запретами капсом. Чтобы не быть голословным, я прогнал греп по своим файлам:
$ grep -roiE "НИКОГДА|СТРОГО|ЗАПРЕЩЕНО|НЕ выдумывай|ОБЯЗАТЕЛЬНО|НЕЛЬЗЯ" skills/ | sort | uniq -c
5 СТРОГО
5 НЕЛЬЗЯ
4 НИКОГДА
2 ОБЯЗАТЕЛЬНО
2 НЕ ВЫДУМЫВАЙ
18 капс-запретов на 23 markdown-файла скиллов общим объёмом 2448 строк. Плюс глобальный CLAUDE.md на 162 строки, где прямо сейчас живёт "НИКОГДА не авто-активировать их по совпадению описания". Я писал это, когда моделям правда было нужно, и с тех пор ни разу не пересматривал.
Разбор показал, что под нож пойдёт не всё - и это, пожалуй, самое полезное наблюдение. Запреты делятся на два сорта. Первый - воспитательный капс вроде "не выдумывай" из скилла blog-edit: его честно можно заменить описанием стиля ("чего не хватает - найди сам или напиши, что не нашёл"). Второй - контрактный: в скилле blog-draft стоит "evidence СТРОГО в формате facts темы: <строка факта дословно>", и этот префикс потом парсит другая стадия пайплайна, отличая проверенные факты от самодобытых. Это не воспитание модели, это формат данных - смягчишь формулировку, сломаешь парсер. Правило Anthropic про "описывай стиль вместо запрета" применимо к первому сорту и опасно для второго.
А вот приём с указателями у меня, оказывается, уже работает. В глобальном CLAUDE.md инструкция по DNS-API хостера - это не копия how-to, а строчка-указатель на vpn-src/CLAUDE.md:68-73, где лежит актуальная версия. Копию я бы протухшей таскал в каждую сессию, указатель весит одну строку и не врёт.
Если ты, как и я, годами копил инструкции "на всякий случай" - самое время признать, что модель уже выросла из этих подпорок. Но перед тем как резать, разложи запреты на воспитательные и контрактные: первые - в описание стиля, вторые не трогай. Меньше запретов, больше доверия. Осталось 16 капсов из 18, плюс один дубль между памятью и CLAUDE.md - продолжение следует.
Частые вопросы
Что писать в CLAUDE.md, а что нет?
В CLAUDE.md - только подводные камни: неочевидные грабли, странные соглашения, места где логично сделать неправильно. Всё, что модель поймёт сама из кода (стек, структура папок, стиль соседних файлов), - удалять, это трата токенов.
Как запустить /doctor в Claude Code?
Наберите /doctor в Claude Code - команда просканирует ваши CLAUDE.md и скиллы, найдёт раздутое и предложит упрощения. Примите те, с которыми согласны, а дальше руками вынесите длинные процедуры в отдельные скиллы.
Как Claude Code помнит факты между сессиями?
Через папку памяти проекта, которую агент ведёт сам - один факт на markdown-файл с полями Why и How to apply, плюс индекс MEMORY.md. В контекст грузится только индекс, факты открываются по требованию. Векторная база на десятках фактов не нужна - хватает файлов, грепа и git.
Как готовился материал: черновик собран моим AI-конвейером по темам и заметкам из практики, факты сверены с первоисточниками, финальный текст я прочитал, поправил и утвердил перед публикацией. Обложку к статье тоже рисует нейросеть. Про сам конвейер — в разделе обо мне.
