Продолжаю ковырять исходники Claude Code. На этот раз — не архитектура, а то, что ближе к телу: мифы, советы из интернета и реальность, проверенная строка за строкой.
Интернет полон «лайфхаков» по Claude Code. Я взял самые популярные, открыл исходники и проверил каждый. Результат — половина не работает, четверть работает не так, как описывают, и есть вещи, которые реально ломают функциональность.
Миф 1: «Отключи цвета — сэкономишь токены»
Один из самых живучих советов: поставь NO_COLOR=1 и ANSI escape-коды перестанут съедать контекстное окно.
Открываю QueryEngine.ts, строка 572:
content: stripAnsi(msg.message.content)
И mappers.ts, строка 200:
const cleanContent = stripAnsi(rawContent)
Claude Code сам вызывает stripAnsi() перед каждой отправкой в API. Модель никогда не видит \x1b[38;2;215;119;87m. Цвета — это чисто терминальная история. Отключая их, ты теряешь читаемость вывода и не экономишь ни одного токена. Ноль.
Миф 2: «ultrathink/megathink/think harder задают бюджеты 4000/10000/31999 токенов»
Самый живучий миф. Кочует из поста в пост: «think» = 4 000, «think hard»/«megathink» = 10 000, «ultrathink»/«think harder» = 31 999 токенов на размышления. Красивая таблица с тремя уровнями, ссылки на «анализ исходников».
Проблема в том, что эти числа — из Claude Code v1. В v2 систему переделали полностью.
Открываю thinking.ts текущей версии. Единственный regex:
/\bultrathink\b/i
«megathink»? Нет в коде. «think harder»? Нет. «think hard»? Нет. «think deeply»? Нет. Grep по всему src/ — ноль совпадений. Из всех «магических слов» выжило только одно: ultrathink.
Что оно делает? Открываю attachments.ts, строка 1451:
return [{ type: 'ultrathink_effort', level: 'high' }]
А в claude.ts, строка 455 — effort передаётся в API как строка:
outputConfig.effort = effortValue // 'low' | 'medium' | 'high'
Никакого числового бюджета. Effort — это строковый параметр: low, medium или high. Модель сама решает, как его интерпретировать.
И самое важное — для моделей 4.6 (Opus, Sonnet) вообще используется adaptive thinking (claude.ts, строка 1611):
thinking = { type: 'adaptive' }
Модель сама определяет, сколько токенов потратить на размышления. Поле budget_tokens применяется только к старым моделям, которые не поддерживают adaptive.
Итого: ultrathink — реальная фича (вернули в v2.1.68), но это просто переключатель effort medium → high. Красивые таблицы с бюджетами в токенах — устаревшая информация из v1. А «megathink» и «think harder» — выдуманные слова, которые код не обрабатывает. И да — ultrathink работает только в CLI. В веб-чате claude.ai это просто буквы. Код за build-time feature gate + GrowthBook flag.
Миф 3: «DISABLE_TELEMETRY — безопасная настройка»
Частично правда, частично ловушка. DISABLE_TELEMETRY=1 действительно отключает Datadog, аналитику, surveys. Но есть побочный эффект, о котором никто не пишет.
Цепочка в коде:
DISABLE_TELEMETRY → isTelemetryDisabled() → isAnalyticsDisabled() → GrowthBook OFF
GrowthBook — это система feature flags. Когда она off, все фичи, управляемые через feature flags, откатываются к дефолтам. Это влияет на effort levels, ultrathink activation, и потенциально на другие A/B тесты, в которых вы участвуете.
Хорошая новость: 1M контекст не зависит от GrowthBook. Проверил в context.ts и check1mAccess.ts — он контролируется через подписку и отдельную переменную CLAUDE_CODE_DISABLE_1M_CONTEXT.
Секрет: два уровня приватности
В privacyLevel.ts — три режима:
default— всё включеноno-telemetry(DISABLE_TELEMETRY=1) — отключает аналитику, оставляет полезноеessential-traffic(CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1) — режим паранойи
Второй уровень отключает всё необязательное: обновление модельных capabilities, rate limit prefetch, bootstrap config, release notes, MCP-реестр. Это задумано для incident response (когда серверы Anthropic перегружены), а не для повседневного использования.
Оптимальная настройка для приватности — добавить в .zshrc:
export DISABLE_TELEMETRY=1
export DISABLE_ERROR_REPORTING=1
export DO_NOT_TRACK=1
Этого достаточно. Datadog, analytics, error reporting — всё off. А полезные фичи (модели, лимиты, обновления) продолжают работать.
Бонус: что реально экономит токены
Из того, что подтверждено кодом:
/clearмежду задачами — каждое сообщение пересылает весь контекст, поэтому длинная история реально дорогая- Prompt cache живёт 5 минут (
CACHE_TTL_5MIN_MS = 5 * 60 * 1000вpromptCacheBreakDetection.ts). Перерыв дольше 5 минут — кэш сброшен, всё перечитывается заново - Авто-компакция срабатывает за 13 000 токенов до лимита (не процент, а фиксированный буфер). Для 200k модели это ~93.5%, для 1M — ~98.7%
- Каждый MCP-сервер добавляет описания всех своих tools в каждый запрос. Отключай неиспользуемые
Методология: каждое утверждение проверено в восстановленных исходниках с указанием файла и строки. Ничего на веру, всё — по коду.