Год с Claude Code: главное — не он сам, а то, что в .claude/

от автора

Claude Code у меня появился в марте 2025-го. Точную неделю не помню — в какой-то момент он у меня просто стал инструментом по умолчанию, и я с ним отработал примерно год.

Это не «AI убил программирование» и не «AI = x10 продуктивность». И то и другое — пустое. Реальность скучнее и интереснее одновременно.

Сразу важная оговорка: я использую Claude Code на максимум. Не «иногда», не «когда подходит» — постоянно, на каждой задаче. Если что-то можно сделать через него, я делаю через него. Под него подстроены CLAUDE.md, hooks, skills, slash-команды, два MCP-сервера. Это контекст для всех выводов ниже. Стек: Python, бэкенд, команда маленькая.

═════════════════════════════════════════════════════════════════

Где он реально помог

Массовые рутинные правки. Самое чистое попадание. Когда у тебя задача «во всех 47 эндпоинтах добавь параметр request_id в логи и пробрось его в нижний слой» — это его работа, а не моя. Открываю агента, описываю абзацем, прошу сначала план, смотрю план, говорю «давай» — и через минут десять у меня PR с тестами. По ощущениям часов тридцать-сорок за год сэкономил только на таких задачах.

Совет, который я выработал не сразу: на больших правках сначала только план, без кода. Если план мимо — лучше потерять минуту на новой просьбе, чем час на разгребании неверно сделанного.

Чтение чужого репозитория. Раньше я тратил полдня на «понять, что тут вообще происходит». Сейчас открываю агента и говорю: «прочти структуру, расскажи как устроена аутентификация». Через минуту — приличный пересказ с указанием файлов.

Только проверяю всегда — открываю пару названных файлов и сверяю с пересказом. Примерно в каждом пятом пересказе он что-то слегка приукрашивает — пишет про функцию, которой в коде нет, или приписывает модулю поведение, которого там нет. Даже с этой поправкой быстрее, чем читать с нуля.

Тесты на существующий код. «Прочти parse_invoice, напиши pytest на основные ветки и edge cases». Из десяти полученных тестов восемь нормальные, два — либо избыточные, либо мокают то, что не надо мокать. Правлю и коммичу.

Объяснение чужих PR. Открываю PR на 800 строк, ничего не понимаю. Прошу: «суммаризируй — что меняется, какие риски, что я бы спросил у автора». Сильно сокращает усилие на ревью. Самое тихо-полезное применение — никаких революций, просто меньше устаёшь к концу дня.

═════════════════════════════════════════════════════════════════

Где он подвёл

Архитектурные решения. Когда я задаю общий вопрос — например, «выносить отчёты в отдельный сервис или оставить эндпоинтом в основном приложении» — я получаю аккуратный средний ответ. Долго я списывал это на ограничение модели — пока не понял, что проблема в моей постановке вопроса, а не в инструменте.

Сейчас перед архитектурным вопросом я даю модели:

— характеристики нагрузки (сколько запросов в секунду, объём данных, как часто читают/пишут)

— стек и инструменты, которые уже стоят

— историю проекта — на каких решениях обожглись, что не используем принципиально

— кто будет сопровождать это после меня

С таким контекстом ответ становится осмысленным — модель видит ограничения и предлагает решение в их рамках, а не «лучшее в вакууме». Без контекста она физически не может ответить осмысленно, и это претензия не к ней, а к тому, как я её спрашивал.

Сложные баги в многопоточном коде. Тут я с моделью очень осторожен — это её слепая зона. Когда два процесса одновременно меняют одну запись, или когда нужно правильно повторить запрос после сбоя, или когда данные синхронизируются между системами не мгновенно — модель пишет код, который выглядит правильно, но прячет проблему. Обычные тесты её не ловят: они идут по нормальному сценарию, в один поток, без сетевых сбоев.

Хуже того — после исправления модель часто защищает свой код, даже когда ты тыкаешь её в проблему пальцем.

После пары неприятных случаев я выработал правило: на правки в коде, где есть параллельность, повторы или синхронизация между сервисами — я сначала заставляю модель перечислить словами все сценарии, в которых это может сломаться. Без кода, просто прозой. Если она не может — значит, и фикс будет наугад, и надо разворачиваться. Только когда полный список собран — разрешаю писать код. И обязательно прогоняю результат через /ask-codex (про него ниже). Такие баги — как раз тот случай, где две разные модели реже сходятся в одинаковой ошибке, и расхождение между ними — самый ценный сигнал.

Долгие сессии. Если работаешь больше часа в одной сессии — модель дрейфует. Забывает, что у вас в проекте httpx, а не requests, начинает писать print вместо вашего логгера, тянет в зависимости что-то, что у вас под запретом. Это не моё личное наблюдение — Anthropic в апреле этого года выпустила постмортем, где сама признала регресс качества в длинных сессиях. Лечится CLAUDE.md и привычкой не сидеть в одной сессии целый день.

═════════════════════════════════════════════════════════════════

Несколько вещей, которые до меня дошли не сразу

Новая сессия = новая голова. Если на следующий день вы продолжаете задачу — дайте контекст явно, первым сообщением. Модель не помнит вчерашний разговор; она будет реверс-инжинирить происходящее по коду, и в половине случаев это закончится плохо. Я наступал три раза, прежде чем выработал привычку первое сообщение в новой сессии писать на полтора абзаца с контекстом.

Цифрам доверять нельзя. Модель уверенно скажет «здесь 47 эндпоинтов», и это будет 42. Это касается всего — количества тестов, размеров файлов, строк в проекте. Проверяю отдельной командой в терминале (grep -c, find | wc -l) или прошу её же запустить эту команду и показать вывод. Стоит дёшево, экономит репутацию.

MCP-серверы — самая недооценённая фича. У меня подключены MCP к Telegram (читать чаты) и GitLab (смотреть MR, issues, файлы напрямую). Это меняет workflow: становится возможным «классифицируй эти сообщения за неделю», «суммируй мне обсуждение в этом MR, что в итоге решили». Без MCP то же самое делалось копипастой по полчаса.

═════════════════════════════════════════════════════════════════

Что у меня лежит в .claude/

Это, пожалуй, главное в статье. Сам Claude Code из коробки — нормальный, но не выдающийся инструмент. Превращает его в продуктивный именно то, что лежит в .claude/: правила, хуки, скиллы, slash-команды. Покажу свой набор.

CLAUDE.md — два уровня

Глобальный (~/.claude/CLAUDE.md) — про мои привычки:# Global instructions## Communication- Отвечать на русском- Код, комменты, коммиты — на английском- Без воды и повторения моего вопроса в ответе## Code style- Минимальный читаемый код, следовать стилю проекта- Не добавлять docstrings/типы/комменты без просьбы- Не рефакторить то, о чём не просили- Не over-engineer## Git- Короткие коммиты в imperative lowercase- Не коммитить и не пушить без явной просьбы- Никаких --force и --amend без подтверждения## Safety- Никогда не коммитить .env, секреты, токены- Никогда не хардкодить credentials- Никаких rm -rf, DROP TABLE без подтверждения
Проектный (<repo>/CLAUDE.md) — про проект:# order-payments## What this isСервис приёма оплат. Принимает вебхуки, обновляет статусы заказов,шлёт уведомления в Telegram-боты.## Stack- Python 3.12, FastAPI- httpx (НЕ requests)- structlog (НЕ print)- PostgreSQL + asyncpg, raw SQL (НЕ ORM)## Conventions- Все handlers — async def- DB через pool, не ORM- Доменные ошибки через app/errors.py- Конфиг через pydantic-settings, всё в .env## Avoid- requests, print, ORM, sync DB calls, except Exception без причины

═════════════════════════════════════════════════════════════════

Один hook — самая дёшево-выгодная штука

`.claude/settings.json`:```json{  "hooks": {    "PostToolUse": [      {        "matcher": "Edit|Write",        "hooks": [          {            "type": "command",            "command": "python .claude/hooks/run_bot_tests.py"          }        ]      }    ]  }}````.claude/hooks/run_bot_tests.py`:```python#!/usr/bin/env python3"""Auto-run pytest after edits to bot/*.py files."""import jsonimport sysimport subprocessdata = json.load(sys.stdin)tool = data.get("tool_name")if tool not in ("Edit", "Write"):    sys.exit(0)file_path = data.get("tool_input", {}).get("file_path", "")if not file_path.endswith(".py") or "bot/" not in file_path:    sys.exit(0)result = subprocess.run(    ["pytest", "bot/tests/", "-x", "--tb=short", "-q"],    capture_output=True,    text=True,    timeout=30,)if result.returncode != 0:    print(f"Tests failed:\n{result.stdout[-1500:]}", file=sys.stderr)sys.exit(0)```

Двадцать строк, двадцать минут на настройку — и тесты прогоняются после каждой правки. Если упало — Claude видит ошибку через stderr и сам пытается починить в следующем сообщении.

═════════════════════════════════════════════════════════════════

«Петля обратной связи: Edit → Hook → pytest → stderr → Claude чинит»

«Петля обратной связи: Edit → Hook → pytest → stderr → Claude чинит»

Skills — про то, чего я раньше не знал

Skills появились во второй половине 2025-го, и поначалу я к ним не относился серьёзно — думал, это «промпт-пресеты». Через пару месяцев понял, что это не так. Skill — это упакованная экспертиза: набор инструкций + примеры + дополнительные файлы, которые модель подгружает только когда задача попадает в её область. Это сильно лучше, чем держать всё в одном промпте.

У меня сейчас активно используются:

frontend-design — отдельный разговор, расскажу ниже.

mcp-builder — каждый раз, когда я пишу новый MCP-сервер, этот skill вытаскивает правильную структуру (Python FastMCP), частые ошибки, паттерны логирования. Сильно сокращает время на новый MCP с пары вечеров до пары часов.

webapp-testing — когда нужно прогнать Playwright-тест локально, не вспоминая каждый раз API. Открывает браузер, кликает, делает скриншоты.

document-skills:xlsx/pdf/docx — для скриптов, которые генерят Excel/PDF/Word отчёты. Без этого Claude писал бы код с openpyxl наугад; с skill — пишет рабочий с первого раза.

systematic-debugging — открывается, когда что-то странно сломалось. Заставляет модель не сразу предлагать фикс, а сначала собрать данные.

Главное, чему я научился: не лениться искать, какой skill есть для задачи. Каждый месяц добавляют новые, я раз в две недели проверяю список.

═════════════════════════════════════════════════════════════════

Frontend — отдельная история

Тут я хочу честно. Если открыть Claude Code и попросить «сделай мне дашборд», то получишь тот самый AI-look: Inter font, фиолетовый градиент, карточки на белом фоне, неотличимо от десятка других сайтов из 2025-го. Это уже стало мемом. И это была моя главная претензия к Claude Code на фронте полгода назад.

Решилось установкой frontend-design skill. Этот skill буквально написан против AI-эстетики — у него в инструкции прямым текстом:

> NEVER use generic AI-generated aesthetics like overused font families (Inter, Roboto, Arial, system fonts), cliched color schemes (particularly purple gradients on white backgrounds), predictable layouts and component patterns, and cookie-cutter design that lacks context-specific character.

И вместо этого требует выбрать сильное эстетическое направление (минимализм, максимализм, ретро-футур, брутализм и т.д.), подобрать характерные шрифты, нестандартные палитры, неожиданные композиции. С ним фронт получается реально такой, что я бы не отличил от работы дизайнера. Без него — да, AI-slop.

Это переломный момент для моего отношения к Claude Code на фронте. Полгода назад я бы написал, что он на фронте слаб. Сейчас я бы написал, что он слаб без skill и хорош со skill. Это разные миры.

═════════════════════════════════════════════════════════════════

Slash-команды в моём рабочем потоке

/simplify — после написания нового кода всегда прогоняю эту команду. Она проходит по изменениям и предлагает что упростить, где есть дублирование, где избыточная абстракция. Я взял за правило: ни один новый код не идёт в коммит до /simplify.

/security-review — перед мерджем в проекты, где есть платежи или PII. Это встроенная команда, проходит по diff’у и ищет уязвимости. Ловит не всё, но дёшево.

═════════════════════════════════════════════════════════════════

/ask-codex и cross-check как принцип

Перед рискованными мерджами я прогоняю изменения через другую модель — Codex от OpenAI. Идея простая: два разных AI с разной обучающей выборкой реже сходятся в одинаковых ошибках, чем один. Если оба согласны — мердж безопасен. Если расходятся — это сигнал ещё раз вдумчиво посмотреть.

Исторически я делал это через свой кастомный skill /ask-codex — небольшой bash-скрипт, который собирал контекст (что обсуждаем, что в git diff) и звал codex CLI. Работало, но грубо: ответ выводился сырым, обработки ошибок практически не было, никакого автоматического разбора результата.

В начале 2026-го OpenAI выпустила официальный плагин для Claude Code (codex-plugin-cc) с тремя skills: codex-cli-runtime (правильный вызов CLI), codex-result-handling (как презентовать ответ Codex, в том числе с критическим правилом «после ревью STOP — не применять фиксы без подтверждения пользователя») и gpt-5-4-prompting (как переформулировать запрос под Codex до отправки). Это то же самое, что я собирал на коленке, только корректнее.

Сейчас у меня в pre-commit checklist стоит связка /simplify → cross-check через Codex → /security-review. Звучит как оверкилл — на практике занимает 5–7 минут перед рискованным мерджем. На обычных правках я не зову это всё, только когда трогаю платежи, миграции данных или авторизацию.

═════════════════════════════════════════════════════════════════

«Связка /simplify → Codex → /security-review перед рискованным мерджем»

«Связка /simplify → Codex → /security-review перед рискованным мерджем»

Принцип здесь важнее конкретного инструмента: не верить одной модели на критичных участках кода. Сегодня у меня связка Claude+Codex, завтра это могут быть другие модели — суть не в брендах, а в том, что cross-check экономит очень дорогие ошибки.

═════════════════════════════════════════════════════════════════

Стоит ли $200 в месяц

Подписка Max — это две тысячи долларов в год. Сильно. Если бы я не использовал Claude Code — мне было бы за неё обидно. Так — нормально, по часам отбивается.

Но тут важный момент. Я думаю, многие люди разочаровываются в Claude Code не потому что он плохой, а потому что используют его «как обычный автокомплит». В таком режиме он окупает $20/мес, не $200. Большая часть экономии возникает из режима «агент с правилами проекта, hooks, skills, slash-командами, MCP» — то есть когда ты под него подстроил процесс. Без подстройки это просто более умный VSCode, и тогда зачем платить.

Если у вас есть месяц на эксперимент — попробуйте полноценно. Заведите CLAUDE.md (хоть бы и по моему образцу). Настройте один hook. Поставьте frontend-design (если делаете фронт) и systematic-debugging (всем подойдёт). Подключите MCP к чему-нибудь, что вам нужно регулярно. Возьмите за привычку /simplify после каждого нового файла. Через месяц поймёте — ваш это инструмент или нет.

Половина моих знакомых решила «не моё» — и это нормальный исход. Вторая половина перестала открывать редактор без него. Промежуточных позиций я почти не встречал.

═════════════════════════════════════════════════════════════════

А что у вас в .claude/? Особенно интересны:

Hooks, которые вы написали под свой стек — что они проверяют, как они вас спасли

Slash-команды под конкретные задачи — у каждой команды свои ритуалы перед мерджем, и я уверен у вас есть что-то, до чего я ещё не додумался

MCP-серверы, которые реально используются каждый день — особенно не публичные, а написанные под свою инфру

Skills, которые вы откопали или написали сами и теперь не представляете жизнь без них

Делитесь в комментариях. Уверен, у каждого активного пользователя в .claude/ лежит что-то такое, чего нет ни у кого другого — соберём вместе живой каталог идей.

ссылка на оригинал статьи https://habr.com/ru/articles/1042408/