Конфиг сеньора для Claude Code — 9 настроек, после которых агент перестаёт тупить и жечь токены
Конфиг сеньора для Claude Code — 9 настроек, после которых агент перестаёт тупить и жечь токены
Разница между «Claude Code помогает» и «Claude Code бесит» почти никогда не в модели. Она в конфигурации. Mykyta Herashchenko, который гоняет Claude Code на 30+ доменах с флотом автоматических агентов, формулирует так: разница между $50/день впустую и реальным рычагом — это что загружается при старте, что изолируется в субагентах и где заканчиваются «советы» и начинается принудительное исполнение.
TL;DR: 9 конкретных настроек — от двухминутного .claudeignore (минус 30-40% токенов) до субагентов на Haiku (минус 50-70% стоимости). Каждая с примером конфига, который можно скопировать прямо сейчас. Гайд для тех, кто уже прошёл фазу «просто спроси AI».
1. .claudeignore — бесплатные 30-40% экономии за 2 минуты
Самый недооценённый файл в проекте. Без него Claude Code при старте сессии читает всё: node_modules, .next, dist, build-артефакты. Andrei Nita замерял на реальном Next.js проекте: из 156 842 строк, которые Claude загружал, к задаче относились 8 934. Остальные 99.5% — мусор.
Создайте .claudeignore в корне проекта:
node_modules/ .next/ dist/ build/ coverage/ *.min.js *.log .git/ __pycache__/ .env .env.*
По замерам Nita, одна строка .next/ в Next.js проекте режет контекст на 30-40%. На команде из 5 разработчиков с 20 сессиями в день это ~$2100 экономии в месяц на одном Sonnet.
Нюанс: .claudeignore не работает ретроактивно. Файлы, уже прочитанные в текущей сессии, остаются в контексте. Поэтому создавайте файл до старта работы, а не в середине.
2. CLAUDE.md — под 80 строк, или вы платите за воздух
Каждая строка CLAUDE.md загружается в каждую сессию. Herashchenko держит проектный файл под 80 строк, глобальный ~/.claude/CLAUDE.md — под 15.
Правило: если удалить строку и Claude не начнёт ошибаться — строка лишняя.
Рабочий шаблон от Herashchenko:
# Project: Site Factory ## Stack - TypeScript 5.x, Node 22, Next.js 15, Prisma + PostgreSQL - Testing: Vitest, Playwright for E2E ## Commands - `pnpm dev` dev server - `pnpm test` Vitest - `pnpm lint` + `pnpm typecheck` quality gates ## Code Style (только то, что Claude делает неправильно) - ES modules only (NEVER require()) - Use `type` over `interface` unless extending - Errors: AppError from src/lib/errors.ts ## Workflow - ALWAYS run typecheck after changes - NEVER modify src/generated/
Типичные ошибки, которые Pooya Golchian описывает на основе десятков оптимизированных проектов:
- Слишком общий. «Follow TypeScript best practices» — ноль конкретики, ноль пользы
- Слишком длинный. 500 строк правил, которые никто не читает (включая Claude)
Для HTML-комментариев внутри CLAUDE.md используйте <!-- --> — они вырезаются перед инъекцией в контекст. Для больших блоков используйте @path/to/file — контент грузится по требованию, а не при старте.
3. settings.json — настоящий пульт управления
Четыре уровня приоритета (от высшего к низшему):
- Managed — корпоративная политика, не переопределяется
- User (
~/.claude/settings.json) — персональные глобальные - Project (
.claude/settings.json) — командные, коммитятся - Local (
.claude/settings.local.json) — персональные на проект, в .gitignore
Шаблон от Herashchenko, который он использует в продакшене:
{ "$schema": "https://json.schemastore.org/claude-code-settings.json", "model": "sonnet", "env": { "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "60", "CLAUDE_CODE_SUBAGENT_MODEL": "haiku" }, "permissions": { "allow": [ "Bash(pnpm run lint)", "Bash(pnpm run test *)", "Bash(pnpm run typecheck)", "Bash(git *)", "Read(src/**)" ], "deny": [ "Read(.env)", "Read(.env.*)", "Bash(rm -rf *)", "Bash(curl * | sh *)" ] } }
Две переменные окружения, на которые стоит обратить внимание:
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=60— компакция срабатывает на 60% заполнения контекста вместо стандартных 80%. Herashchenko пришёл к этому числу на практике: качество генерации деградирует на 20-40% заполнения из-за размытия внимания, а не на 80-90%, как можно ожидатьCLAUDE_CODE_SUBAGENT_MODEL=haiku— субагенты исследования работают на Haiku, экономя ~60% по сравнению с дефолтным Sonnet
4. Effort level — настройка, которая молча откатывается
Effort level управляет глубиной «размышлений» модели. Три уровня: low, medium, high (плюс max для подписчиков Max).
/effort high # на текущую сессию --effort high # флаг при запуске
Можно задать в settings.json глобально. Herashchenko рекомендует medium как дефолт и high по необходимости.
Подвох: пользователь bswen обнаружил, что effortLevel: "max" в settings.json молча откатывается до более низкого уровня. Баг зафиксирован на GitHub — max нельзя персистить в настройках для подписчиков Max. Приходится ставить вручную каждую сессию.
Отдельная история — ultrathink. Anthropic убрали его в январе 2026, заявив, что extended thinking теперь always-on. Пользователи заметили деградацию на сложных задачах. К марту в v2.1.68 вернули обратно после волны жалоб. Extended thinking действительно включён по умолчанию, но ultrathink форсирует максимальный effort на одном конкретном ходе так, как дефолты не гарантируют.
5. Hooks — когда CLAUDE.md недостаточно
Ключевой инсайт от Herashchenko: CLAUDE.md — это совет. Claude следует ему примерно в 80% случаев. Если что-то должно выполняться всегда, без интерпретации, нужен hook.
Hooks — детерминированные. Они срабатывают на каждое событие независимо от решений Claude.
Два хука, которые Herashchenko ставит на каждый проект:
Автоформатирование при сохранении:
{ "PostToolUse": [{ "matcher": "Edit|Write", "hooks": [{ "type": "command", "command": "FILE=$(echo $TOOL_INPUT | jq -r '.file_path // empty'); [ -z \"$FILE\" ] && exit 0; case \"$FILE\" in *.ts|*.tsx|*.js|*.jsx) npx prettier --write \"$FILE\" 2>/dev/null ;; esac; exit 0", "timeout": 10 }] }] }
Блокировка правок на main:
{ "PreToolUse": [{ "matcher": "Edit|Write", "hooks": [{ "type": "command", "command": "[ \"$(git branch --show-current)\" != \"main\" ] || { echo '{\"decision\": \"block\", \"reason\": \"Create a feature branch first.\"}' >&2; exit 2; }", "timeout": 5 }] }] }
С v2.1.85+ hooks поддерживают поле "if" для условного срабатывания, а с v2.1.89+ — "defer" вместо "block", чтобы передать решение пользователю.
6. Path-scoped rules — детальные правила без раздувания CLAUDE.md
Файлы в .claude/rules/ загружаются только когда Claude работает с файлами, попадающими под path-маску. Ни одна строка не грузится при старте сессии.
--- # .claude/rules/api-rules.md paths: - "src/api/**/*.ts" --- # API Design Rules - All handlers return { data, error } shape - Use zod for request body validation - Never expose internal error details to clients - Auth middleware: src/middleware/auth.ts
Практические уроки от Herashchenko:
- Плотные буллеты лучше абзацев. 10 императивных пунктов стоят столько же токенов, что 3 абзаца, но Claude извлекает из них информацию быстрее
- Мёржите мелкие файлы. Файл правил на 26 строк занимает слот загрузки и добавляет overhead. Количество файлов, а не строк определяет стоимость
7. Skills — прогрессивное раскрытие контекста
При старте Claude получает только имя + описание каждого скилла (~50 токенов). Полное содержимое SKILL.md загружается лишь при вызове. Это фундаментально дешевле, чем держать всё в CLAUDE.md.
Старт: имя + описание (~50 токенов на скилл) При вызове: SKILL.md загружен (~500-2000 токенов) По запросу: references/ scripts/ (только нужное)
Поле context: fork — то, что большинство пропускает. Оно запускает скилл в изолированном субагенте: текущая сессия не загрязняется результатами работы скилла. В связке с agent: Explore для read-heavy задач основной контекст остаётся чистым.
--- name: pr-summary context: fork agent: Explore allowed-tools: Bash(gh *) --- PR diff: !`gh pr diff` PR comments: !`gh pr view --comments`
Синтаксис ! + backtick-command в теле скилла выполняет shell-команды до того, как контент уходит в Claude. В примере выше агент получает живой diff PR без ручной вставки.
8. Субагенты — техника #1 по экономии токенов
Субагенты работают в отдельном контекстном окне. Основная сессия получает только итог.
Почему это критично: задачи исследования (чтение файлов, анализ структуры кода) могут затронуть 20-50 файлов. В основном контексте эти чтения накапливаются и толкают к зоне деградации на 20-40% заполнения. В субагенте они изолированы. Основной контекст не страдает.
--- name: researcher description: Explores codebase. Use PROACTIVELY when you need to understand how something works before implementing. model: haiku tools: Read, Grep, Glob --- You are a codebase researcher. Rules: - Read only what is needed - Return a concise summary (under 500 words) - Include exact file paths and line numbers - Do NOT suggest changes. Just report findings.
Поле description определяет, когда Claude делегирует. «Use PROACTIVELY when...» работает лучше, чем «for research tasks».
Приоритет выбора модели для субагента:
CLAUDE_CODE_SUBAGENT_MODELenv var (высший)- Per-invocation
modelпараметр - Frontmatter
modelв определении субагента - Модель основной сессии
isolation: worktree — для субагентов, которые пишут код. Каждый получает свой git worktree, параллельные агенты не конфликтуют на файлах.
9. Привычки управления контекстом
Конфигурация — полдела. Вторая половина — как вы ведёте сессию.
Правило двух коррекций (Herashchenko): если вы поправили Claude дважды на одной и той же проблеме — /clear и начинайте заново. Чистая сессия с лучшим промптом стабильно бьёт длинную сессию, отравленную коррекциями. Это контринтуитивно: кажется, что теряешь прогресс. На деле избегаешь накапливающуюся стоимость деградированного контекста.
Паттерн аннотирования для сложных фич:
- Генерируете детальный
plan.mdс фрагментами кода и путями к файлам - Добавляете инлайн-заметки прямо в план
- «Address all the notes and update the document. Don't implement yet.»
- Повторяете 1-6 раундов, пока план не станет твёрдым
- «Implement it all. Mark tasks completed. Continuously run typecheck.»
Рефакторинг плана бесплатный. Рефакторинг наполовину реализованной фичи — дорого.
Точечные промпты вместо размытых:
- Плохо:
"Fix the auth" - Хорошо:
"the JWT refresh in src/services/auth.ts throws on expired tokens instead of refreshing. Fix it using the refreshToken helper."
Размытые промпты заставляют Claude сначала исследовать. Точные — сразу идут к изменению.
Контроль операционных документов. STATUS.md на 487 строк стоит 10K токенов на каждую сессию. На 60 строках — 1.2K. Держите только текущее состояние, историю скидывайте в архив и добавляйте в .claudeignore.
Подводные камни
- Effort "max" в settings.json не сохраняется. Для подписчиков Max планов
effortLevel: "max"молча откатывается. Баг открыт на GitHub, обходной путь — ставить вручную каждую сессию через/effort max - Контекст деградирует раньше, чем вы думаете. 1M токенов на бумаге, на практике качество падает на 20-40% заполнения.
CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=60— не паранойя, а результат продакшен-опыта на 30+ доменах - Hooks ломают CLI-инструменты в sandbox. Issue #42857 на GitHub: sandbox блокирует macOS SystemConfiguration API, из-за чего падают Rust-based CLI (включая Codex CLI). Если используете sandbox с кастомными тулами — проверяйте совместимость
- Agent Teams — экспериментальные. Нет resumption сессии с командой, один тим на сессию, split panes (tmux/iTerm2) не работают в VS Code terminal, Windows Terminal, Ghostty
- Слишком много скиллов — деградация. Каждый скилл ~50 токенов при старте. 200 скиллов — это 10K токенов мусора на каждую сессию. Отключайте ненужные через
user-invocable: falseиdisable-model-invocation: true
Вердикт
Из 9 настроек три дают 80% результата: .claudeignore (2 минуты, минус 30-40%), субагенты на Haiku (минус 50-70% стоимости исследования), и CLAUDE_AUTOCOMPACT_PCT_OVERRIDE=60 (спасает от тихой деградации на длинных сессиях). Остальные шесть — оптимизация для тех, кто тратит больше $100/мес и работает с крупными кодовыми базами. Если вы ещё не создали .claudeignore — начинайте с него прямо сейчас, эффект увидите в первой же сессии.
Как попробовать
- Создайте
.claudeignoreв корне проекта по шаблону выше — перезапустите сессию Claude Code - Добавьте в
.claude/settings.json:
{ "env": { "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "60", "CLAUDE_CODE_SUBAGENT_MODEL": "haiku" } }
- Урежьте CLAUDE.md до 80 строк — уберите всё, что Claude и так делает правильно
- Добавьте hook блокировки правок на main из раздела 5 в
.claude/settings.json - Попробуйте
/effort highна сложной задаче и сравните результат с дефолтным