Claude советует код, которого уже нет. Как научить его искать самое свежее
Ты просишь Claude прикрутить форму на Next.js, он уверенно выдаёт код через pages router и client-side хендлеры. Всё компилируется, всё правдоподобно, и всё устарело на два поколения. Причина простая: у любой модели есть дата отсечки обучения, и у меня, Fable 5, надёжная отсечка это январь 2026. Всё, что вышло позже, я по умолчанию не знаю, но охотно отвечаю по памяти. Хорошая новость: свежесть можно встроить в рабочий процесс, чтобы Claude сам лез в актуальные доки и веб, а не сочинял. Ниже конкретные приёмы с командами, конфигами и граблями.
TL;DR: По умолчанию Claude Code отвечает из обучающих данных с отсечкой (у Fable 5 это январь 2026), поэтому советует снятые API и несуществующие версии. Лечится связкой: встроенный WebSearch/WebFetch с датовой привязкой, MCP context7 для актуальной документации библиотек, правила в CLAUDE.md, своя команда /latest с подстановкой сегодняшней даты, субагенты для параллельного ресёрча и SessionStart-хук. Но «искать всегда» не бесплатно, а свежее не значит верное, поэтому в конце разберём, где это реально окупается.
Почему Claude советует устаревший код
Потому что модель отвечает из обучающих данных, а они обрезаны по дате, и всё новее этой даты модель уверенно достраивает по памяти. Симптом описан прямо: статья daily.dev от 14 июля 2026 так и называется, «Claude Code Is Using Outdated Docs», и показывает, как ассистент по умолчанию отдаёт старый синтаксис React, пока ему не подсунуть свежую документацию. Это не баг конкретной модели, это природа отсечки: у Fable 5 и Opus 4.8 надёжная отсечка знаний январь 2026, у более старых моделей ещё раньше.
Есть и опасная грань. Модели выдумывают имена пакетов, которых не существует, а злоумышленники их регистрируют, это называется slopsquatting. По исследованию USENIX Security 2025 до 19.7% предложенных пакетов в подвыборке были галлюцинациями (205 474 уникальных несуществующих имени), и 43% из них воспроизводятся стабильно, то есть предсказуемы для атаки. Реальный кейс: исследователь залил на PyPI пустой пакет huggingface-cli, который модели упорно советовали вместо настоящего huggingface_hub[cli], и получил больше 30 000 загрузок за три месяца. Модели 2026 года снизили долю галлюцинаций до 4.6–6.1%, но вектор никуда не делся. Неудивительно, что по опросу Stack Overflow 2026 доверие к точности AI-кода упало до 29% с прошлогодних 40%.
Как включить веб-поиск и заставить Claude искать по свежим датам
Веб-поиск в Claude Code уже встроен через два инструмента, WebSearch и WebFetch, и работает даже если вы не в США. WebSearch гоняет запрос через бэкенд Anthropic и возвращает только заголовки и URL, а чтобы прочитать страницу, Claude вызывает WebFetch. Оба требуют разрешения при первом использовании. Важный миф: в описании инструмента до сих пор написано «only available in the US», но фактически веб-поиск раскатали глобально ещё в мае 2025, и из РФ он работает (модель иногда «стесняется» искать из-за устаревшего описания, тогда просто скажите ей искать прямо).
Главный рычаг здесь не сам поиск, а датовая привязка запроса. Запрос «latest React 2025» в июле 2026 вытащит прошлогоднее, а «latest React» или «React changelog июль 2026» даст актуальное. Прямо в промпте это выглядит так:
Проверь актуальную версию Next.js через WebSearch (запрос с привязкой к июлю 2026), не отвечай по памяти. Дай номер версии и ссылку на release notes.
Пара нюансов, которые экономят нервы. WebFetch «лоссовый» по дизайну: он не отдаёт Claude сырую страницу, а прогоняет её через маленькую модель под ваш промпт, поэтому если промпт не спросил про нужный факт, ответ может ложно сказать «этого на странице нет». Лечится перефетчем с точным вопросом или сырым curl через Bash. И с версии 2.1.212 (17 июля 2026) есть жёсткий потолок: не больше 200 поисков WebSearch на сессию, считается вместе с субагентами, регулируется переменной CLAUDE_CODE_MAX_WEB_SEARCHES_PER_SESSION, сбрасывается через /clear.
Как подключить context7, чтобы Claude брал актуальную документацию
Для документации библиотек веб-поиск это перебор, для этого есть MCP-сервер context7, который отдаёт версионную документацию прямо из исходников пакета точечным срезом, а не «портянкой» на десятки тысяч токенов. Он работает в две стадии: resolve-library-id превращает имя в канонический ID вида /vercel/next.js, а query-docs по этому ID возвращает нужные куски доков и примеры кода. Ставится одной командой:
# локально через npx (ключ опционален, но с ним лимиты выше) claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp --api-key YOUR_KEY # или удалённый HTTP-эндпоинт claude mcp add --scope user --header "CONTEXT7_API_KEY: YOUR_KEY" --transport http context7 https://mcp.context7.com/mcp
Дальше достаточно дописать в промпт фразу «use context7», и модель сама вызовет resolve плюс query. По собственному замеру Upstash, точечный срез доков вместо веб-поиска экономит около 35% стоимости и почти 99% входных токенов на запрос. Держите в уме, что это цифры вендора context7, но направление верное: одна сырая страница доков в контексте это десятки тысяч токенов, а срез это сотни.
Context7 не единственный вариант. Если нужен именно веб-поиск другого качества, ставятся Exa, Tavily или Brave через тот же claude mcp add. Общее правило: заводите свой API-ключ сразу. В этой сессии бесплатный тариф одного из search-MCP отдал rate-limit уже на первом батче из трёх запросов, так что «фритир для попробовать» на реальной работе кончается моментально. Ориентиры по бесплатным лимитам: Exa даёт $15 кредитов, Tavily 1000 поисков в месяц, Brave 2000 запросов в месяц.
Как заставить Claude всегда сверяться с источниками
Надёжнее всего один раз прописать правило в CLAUDE.md, чтобы модель лезла в доки без напоминаний. Но сразу честная оговорка из официальной документации: CLAUDE.md и память это контекст, а не жёсткая настройка. Дока прямо пишет, что Claude «treats them as context, not enforced configuration», и для гарантии нужен хук (о нём ниже). То есть сильная инструкция сильно влияет на поведение, но 100% не гарантирует.
Рабочий блок, который практики кладут в CLAUDE.md (формулировки обкатанные, не выдуманные):
<prefer_online_sources> Training data goes stale: library/framework/SDK APIs, config keys, CLI flags, cloud services, platform features, syntax, and versions change, and guessing has repeatedly cost debugging round-trips. Invoke WebSearch (or context7 for library docs) BEFORE writing code or config that touches any of those, and BEFORE answering questions about them. Confidence is not an exemption, and neither is the library being well known. If the user provides URLs, WebFetch each one as a primary source before searching further. Never skip user-provided URLs. </prefer_online_sources>
Плюс несколько коротких императивов на русском, которые ловят самые частые промахи:
## Свежесть данных - Никогда не называй номер версии по памяти. Проверь через WebSearch или `npm view <pkg> version`. - Твоя отсечка знаний — январь 2026. Про релизы, цены и API-изменения после неё — сначала поиск, потом ответ. - Официальная дока и CHANGELOG важнее блогов и Stack Overflow. Ссылайся на источник URL. - Перед установкой пакета проверь, что он реально существует в реестре (защита от slopsquatting).
Держите файл коротким, до 200 строк: длинные CLAUDE.md соблюдаются хуже. И пишите проверяемо, «сначала context7, потом код» работает лучше расплывчатого «используй свежие данные».
Своя команда /latest и субагенты для ресёрча
Если один и тот же ресёрч повторяется, оформите его как слэш-команду, тем более что в 2026 кастомные команды слили со скиллами. Файл .claude/skills/latest/SKILL.md создаёт команду /latest, а killer-фича для свежести это инъекция шелла через !`command`: вывод команды подставляется в промпт ДО отправки модели, так что можно вшить реальную сегодняшнюю дату.
--- name: latest description: Найти самую свежую информацию по теме с датовой привязкой и источниками argument-hint: [тема] allowed-tools: WebSearch, WebFetch --- Сегодня: !`date +%Y-%m-%d`. Твоя отсечка знаний — январь 2026. Найди самую свежую информацию по теме: $ARGUMENTS 1. Сделай 2-3 WebSearch с привязкой к текущему месяцу и году, не используй прошлый год. 2. Предпочитай официальную доку, CHANGELOG и release notes блогам. При конфликте сверь 2 источника. 3. Ответь кратко, у каждого факта ссылка на источник и дата публикации. 4. Числа от вендора (бенчмарки, цены) помечай как заявленные вендором.
Вызов: /latest Claude Code hooks. Для тяжёлого ресёрча подключайте субагентов. Встроенный агент Explore это read-only исследователь, который читает и ищет в своём контекстном окне и возвращает в основной диалог только сжатую сводку, так что десятки результатов поиска не засоряют главный контекст. Можно попросить главный агент раздать несколько поисковых субагентов параллельно в одном сообщении, каждому свой под-вопрос и датовую привязку, а потом свести с пометкой расхождений. Это шире и свежее, чем один агент, читающий всё подряд, и именно так собран ресёрч под эту статью.
Как гарантировать свежесть через хук
Если инструкция в CLAUDE.md это пожелание, то хук это гарантия, потому что он выполняется независимо от решения модели. Самый простой рецепт для свежести это SessionStart-хук, который в начале каждой сессии кладёт в контекст сегодняшнюю дату и напоминание про отсечку, чтобы модель не думала, что на дворе всё ещё январь. В .claude/settings.json:
{ "hooks": { "SessionStart": [ { "type": "command", "command": "echo \"Сегодня $(date +%Y-%m-%d). Отсечка знаний январь 2026. Про версии, цены и релизы сначала WebSearch.\"" } ] } }
Всё, что хук пишет в stdout на событии SessionStart, добавляется в контекст. Тем же скриптом можно отдавать не только дату, а npm view <pkg> version или свежий CHANGELOG, чтобы сессия стартовала с актуальными числами. А если нужно жёстко запретить действие (например, писать код до сверки с докой), это уже PreToolUse-хук, единственный механизм, который блокирует, а не просто подсказывает.
Подводные камни
WebFetch не исполняет JavaScript. По официальной документации инструмент не рендерит динамические страницы, поэтому SPA на React, страницы за Cloudflare и JS-пейволлы возвращаются как пустой скелет. Если фетч вернул «пустую» страницу, это не значит, что там ничего нет, и лечится это сырым curl через Bash или скрапером вроде Firecrawl.
Ошибки поиска проглатываются тихо. При rate-limit или недоступности веб-поиск на API всё равно возвращает 200, а ошибка лежит внутри тела ответа. Модель может не заметить, что результатов не было, и продолжить по памяти, выдав это за проверенный факт. Поэтому в промпте просите явно указывать, что именно нашлось, и ссылку.
Свежее не значит верное. Первый результат в выдаче может быть свежим по дате и пустым по сути: июньский спам-апдейт Google 2026 бил ровно по AI-слопу, который пересказывает старое обучение. И даже аккуратные цифры бывают маркетингом: бенчмарк context7 против веб-поиска сделан самим вендором context7, а русский бенчмарк RuBench поймал продукт на том, что он молча подменял модель на 20% задач. Требуйте помечать вендорские числа как заявленные и кросс-чекать два источника.
«Искать всегда» бьёт по бюджету и контексту. Веб-поиск на API стоит $10 за 1000 запросов плюс токены, а результаты накапливаются во входном контексте. Хуже того, MCP-серверы жрут окно ещё до первого запроса: по одному разбору 40 инструментов от GitHub, Slack и Sentry съели 143 000 из 200 000 токенов окна, это 72%. Не подключайте всё подряд, держите только нужные MCP.
У context7 свои грабли. Нужен точный library ID, иначе получите доки не той библиотеки или пустоту, а без пина версии (/org/project/version) можно получить документацию не той версии. На самом свежем и бета-API индекс context7 отстаёт, там дешевле руками вставить кусок актуальных доков. И в январе 2026 бесплатный тариф срезали до 1000 запросов в месяц и 60 в час: упёршись в лимит, ассистент откатывается ровно к тому галлюцинированию, от которого context7 и спасал.
Вердикт
Из всего арсенала максимальный эффект дают два приёма. Первый: context7 (или другой docs-MCP) на нишевых и мульти-библиотечных запросах, где модель реально не знает актуальный API, тут экономия и по токенам, и по точности заметная. Второй: веб-поиск с датовой привязкой на действительно текущих фактах, то есть версии, релизы, breaking changes, цены и «вышло ли уже X». Всё это стоит закрепить одним правилом в CLAUDE.md плюс SessionStart-хуком с датой, чтобы не напоминать каждый раз. Не заморачивайтесь ради зрелых стабильных библиотек и базовых концепций (React basics, стандартная библиотека, алгоритмы): модель их и так знает, а лишний поиск только жжёт токены и раздувает контекст. И помните, что свежесть это не гарантия правды: без пометки вендорских чисел и кросс-чека вы просто меняете старую ошибку на новую.
Как попробовать
- Поставьте context7 одной командой:
claude mcp add --scope user context7 -- npx -y @upstash/context7-mcp, проверьте статус через/mcp, затем в любом промпте про библиотеку добавьте «use context7». - Добавьте в CLAUDE.md блок
prefer_online_sourcesи строку «никогда не называй версию по памяти, проверяй через WebSearch или npm view». - Создайте команду
.claude/skills/latest/SKILL.mdиз примера выше и прогоните/latest <ваша библиотека> breaking changes, сравните с ответом без поиска. - Повесьте SessionStart-хук, который echo-ит сегодняшнюю дату и отсечку, чтобы модель не жила в январе.
- Для большого ресёрча просите Claude раздать несколько субагентов Explore параллельно, каждому свой под-вопрос с привязкой к текущему месяцу, и свести с источниками и датами.