> · 10 мин

Конфиг сеньора для Claude Code — 9 настроек, после которых агент перестаёт тупить и жечь токены

Конфиг сеньора для 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 молча откатывается до более низкого уровня. Баг зафиксирован на GitHubmax нельзя персистить в настройках для подписчиков 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_MODEL env var (высший)
  • Per-invocation model параметр
  • Frontmatter model в определении субагента
  • Модель основной сессии

isolation: worktree — для субагентов, которые пишут код. Каждый получает свой git worktree, параллельные агенты не конфликтуют на файлах.

9. Привычки управления контекстом

Конфигурация — полдела. Вторая половина — как вы ведёте сессию.

Правило двух коррекций (Herashchenko): если вы поправили Claude дважды на одной и той же проблеме — /clear и начинайте заново. Чистая сессия с лучшим промптом стабильно бьёт длинную сессию, отравленную коррекциями. Это контринтуитивно: кажется, что теряешь прогресс. На деле избегаешь накапливающуюся стоимость деградированного контекста.

Паттерн аннотирования для сложных фич:

  1. Генерируете детальный plan.md с фрагментами кода и путями к файлам
  2. Добавляете инлайн-заметки прямо в план
  3. «Address all the notes and update the document. Don't implement yet.»
  4. Повторяете 1-6 раундов, пока план не станет твёрдым
  5. «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 — начинайте с него прямо сейчас, эффект увидите в первой же сессии.

Как попробовать

  1. Создайте .claudeignore в корне проекта по шаблону выше — перезапустите сессию Claude Code
  2. Добавьте в .claude/settings.json:
{
  "env": {
    "CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "60",
    "CLAUDE_CODE_SUBAGENT_MODEL": "haiku"
  }
}
  1. Урежьте CLAUDE.md до 80 строк — уберите всё, что Claude и так делает правильно
  2. Добавьте hook блокировки правок на main из раздела 5 в .claude/settings.json
  3. Попробуйте /effort high на сложной задаче и сравните результат с дефолтным
$ ls ./related/

Похожие статьи

subscribe.sh

$ cat /dev/blog/updates

> Свежие заметки о программировании,

> DevOps и AI — прямо в мессенджер

./subscribe