Claude Code: как перестать бороться с регрессиями

CLAUDE.md, субагенты и хуки — три настройки Claude Code, которые спасают от регрессий. Разбираем конфиги и рабочий процесс.

Claude Code: как перестать бороться с регрессиями
Источник: anthropic.com

Просишь Claude Code добавить авторизацию, а он переписывает половину проекта. Поправь одну функцию — получаешь удалённые тесты и новую зависимость, о которой не просил. За час собираешь рабочий прототип, а потом три часа разгребаешь последствия «улучшений».

Python-разработчик с Habr после нескольких недель экспериментов с Claude Code собрал конфигурацию из трёх элементов, которая почти полностью убирает регрессии. Разберём каждый: файл-конституцию CLAUDE.md, субагентов для изоляции задач и хуки для автоматического контроля.

Интерфейс Claude Code в терминале
Claude Code в терминале. Источник: shipyard.build

Почему миллион токенов не решает проблему

С 13 марта 2026 года Anthropic сделала контекстное окно в 1 миллион токенов общедоступным для Claude Opus 4.6 и Sonnet 4.6. Это в 5 раз больше предыдущего лимита. Казалось бы, загружаем весь репозиторий и работаем без ограничений.

Но контекст определяет, сколько модель может помнить, а правила, что она должна делать. Большое окно второе не решает.

Compaction никуда не делся. При длинных сессиях с активной работой (чтение файлов, запуск тестов, правки) контекст всё равно сжимается, и детали из середины разговора теряются. Модель по-прежнему «оптимизирует» рабочий код: Claude с полной памятью может решить «улучшить» функцию или «упростить» тест, который ловил edge case. А на Pro-плане окно и вовсе остаётся 200K.

CLAUDE.md: правила, которые переживают compaction

CLAUDE.md лежит в корне репозитория. Claude Code читает его в начале каждой сессии. Когда модель сжимает контекст, история теряет детали, но CLAUDE.md перечитывается с диска заново.

Рабочий шаблон:

# Мой проект

## Архитектура
- Backend: Python 3.11, FastAPI
- База: PostgreSQL
- Frontend: React + TypeScript

## Команды
- make dev — запуск dev-серверов
- make test — тесты
- make lint — линтинг

## КРИТИЧЕСКИЕ ПРАВИЛА
- НИКОГДА не удалять рабочие тесты без явного запроса
- НИКОГДА не удалять файлы без подтверждения
- ВСЕГДА запускать тесты после изменения кода
- ВСЕГДА делать git checkpoint перед рефакторингами
- Одна задача за раз
- Если не уверен — СПРОСИ

Секция «Критические правила» работает, потому что Claude видит её перед каждым ответом, а не теряет на 50-м сообщении.

Файл лучше держать до 200 строк. Для детальных правил есть .claude/rules/ с модульными файлами и glob-паттернами:

---
globs: ["**/*.py"]
---
# Правила Python-бэкенда
- Type hints на всех сигнатурах
- Pydantic для валидации
- Async endpoints где есть I/O
- Никаких bare except

Такие правила загружаются только при работе с подходящими файлами. Когда вы редактируете фронтенд, Python-правила не занимают контекст.

Субагенты: изоляция вместо монолита

Субагенты Claude Code работают в собственном контекстном окне и возвращают в основную сессию только краткий отчёт. Субагент может прочитать сотни файлов для анализа и вернуть пятистрочный результат, а основной контекст останется чистым.

Три субагента закрывают типичные проблемы. Файлы создаются в .claude/agents/.

Планировщик (planner.md) исследует кодовую базу и создаёт пошаговый план. Он не пишет код, только план с оценкой рисков, списком затрагиваемых файлов и предложениями по тестам.

---
name: planner
description: Исследует код и создаёт планы реализации
tools:
  - Read
  - Grep
  - Glob
  - LS
---
Ты — архитектор. Твоя задача:
1. Исследовать кодовую базу
2. Создать пошаговый план
3. Сохранить план в ./plans/ как markdown
4. Указать риски и breaking changes

ПРАВИЛА:
- НИКОГДА не пиши код. Только план.
- ВСЕГДА проверь существующие тесты
- Оцени сложность каждого шага (малая / средняя / высокая)

Тестировщик (tester.md) пишет тесты по существующим паттернам и запускает полный набор, а не только новые. Регрессии прячутся в старых тестах, которые перестали проходить после изменений.

Ревьюер (code-reviewer.md) проверяет изменения на регрессии, безопасность и соответствие паттернам из CLAUDE.md. Находит SQL-инъекции, XSS, открытые секреты и нарушения конвенций.

Без подсказки в CLAUDE.md модель пытается делать всё в основном контексте. Напомните ей про «команду»:

## Рабочий стиль
- Используй planner для планирования
- Используй tester после изменений кода
- Используй code-reviewer перед коммитами

Хуки: автоматический gate

Хуки в .claude/settings.json срабатывают на событиях Claude Code. Самый полезный вариант — блокировка коммита при падающих тестах:

{
  "hooks": {
    "PreToolUse": [
      {
        "matcher": "Bash(git commit*)",
        "hooks": [
          {
            "type": "command",
            "command": "python -m pytest tests/ -x --timeout=60 || (echo '{\"block\": true, \"message\": \"Тесты падают. Почини перед коммитом.\"}' 1>&2 && exit 2)",
            "timeout": 120
          }
        ]
      }
    ]
  }
}
Документация Claude Code Hooks на официальном сайте
Документация по хукам Claude Code. Источник: code.claude.com

С этим хуком Claude не закоммитит код с падающими тестами. По отзывам разработчиков на Reddit, он один стоит всего времени на настройку: обратная связь заставляет модель исправлять регрессии сразу, до того как они накопятся.

Второй полезный хук — напоминание после каждого изменения файла:

{
  "PostToolUse": [
    {
      "matcher": "Write|Edit",
      "hooks": [
        {
          "type": "command",
          "command": "echo '[HOOK] Файл изменён. Запусти тесты.'",
          "timeout": 5
        }
      ]
    }
  ]
}

Замените pytest на вашу команду: npm test, go test ./..., cargo test.

Рабочий процесс от начала до коммита

Итоговая структура файлов в проекте:

myproject/
├── CLAUDE.md
├── .claude/
│   ├── settings.json
│   ├── agents/
│   │   ├── planner.md
│   │   ├── tester.md
│   │   └── code-reviewer.md
│   └── rules/
│       ├── python-backend.md
│       └── frontend.md
└── plans/

Всё коммитится в репозиторий, и коллеги получают те же правила при клонировании.

Шаги для типичной задачи:

  1. Запускаете Claude Code, он читает CLAUDE.md
  2. Перед сложной задачей вызываете planner: «Исследуй кодовую базу и создай план реализации JWT-авторизации. Не пиши код.»
  3. Читаете план, задаёте вопросы, корректируете
  4. Реализуете по шагам: один шаг, тесты, следующий шаг
  5. Перед коммитом запускаете code-reviewer и tester
  6. Хук блокирует коммит, если тесты падают

Несколько дополнительных практик:

  • Git-чекпоинты перед каждым крупным изменением. Если Claude что-то сломал, git reset --hard HEAD возвращает к рабочему состоянию за секунды.
  • /cost для мониторинга потребления контекста.
  • /compact с инструкцией, что сохранить, при 60–70% заполненности на 200K-плане.
  • /clear при смене темы. CLAUDE.md перечитается автоматически.

Результат: до и после

Автор исходной статьи на Habr сообщает: до настройки этих трёх слоёв 2–3 часа в день уходили на борьбу с регрессиями (Claude «чинит» одно, ломает два). После внедрения регрессии перестали быть главной проблемой рабочего дня.

Работает именно комбинация. CLAUDE.md задаёт правила, которые переживают compaction, поэтому модель не «забывает» ограничения. Субагенты изолируют исследование от реализации и не засоряют основной контекст. А хуки блокируют сломанный код без участия человека.

По состоянию на март 2026 года подход работает на любой модели Claude Code: Opus 4.6 с 1M контекстом и Sonnet 4.6. На Max-подписке compaction случается реже, но все три элемента полезны и там.

Читайте также

Telegram-канал @toolarium