Год с Claude Code: как собрать рабочую конфигурацию с первого запуска
Жемал Хамидун, Head of AI Alpina Digital, CPO AlpinaGPT, автор тг-канала «Готовим ИИшницу».

Зачем я начал вайбкодить
В марте 2025 года, через пару недель после того, как термин «вайбкодинг» вообще появился. У Claude Code тогда было несколько миллионов скачиваний — сейчас больше пятнадцати, и продолжает расти.
Причина была простая и совсем не про код. У меня по работе в АльпинаGPT много коммуникаций: почта, мессенджеры, созвоны, чаты. К весне 2025 я уже понимал, что в этом потоке невозможно держать всё в голове. Что-то обещал на одной встрече, что-то всплыло в третьем чате, что-то нужно было отправить в почту — и часть этих обязательств просто терялась.
И я подумал: попробую собрать себе бота, который будет тянуть информацию из всех источников в одно место. Этакий цифровой мозг, работающий 24/7. Чтобы он не просто хранил информацию, а видел связи: я обещал на встрече отправить документ — и если через два дня не отправил, бот заранее подсвечивает. Видит пересечения между людьми в моём окружении. Сводит разговоры с одинаковыми темами из разных каналов.
Идея была ровно та, которую потом я реализовал в архитектуре OpenClaw — единое хранилище в векторной базе и универсальный агент над ней. Только OpenClaw тогда ещё не существовало.
Так начался путь – и я набил много шишек. Тогда не было ни skills, ни routing.md, ни rules — только большой раздутый CLAUDE.md и эксперименты. Я читал десятки статей и постов от тех, кто уже что-то пробовал, гонял конфигурацию по кругу, выкидывал то, что не работает, оставлял то, что прижилось.
За этот год с лишним накопилась конфигурация и понимание, чего от такого подхода реально стоит ждать, а чего нет. В следующих статьях я расскажу, как устроен мой текущий конфиг и как я делал разных агентов — включая доработку OpenClaw под конкретные задачи.
О чём эта статья
Claude Code из коробки умеет немного. Полезным он становится тогда, когда вы наполнили ~/.claude/ собственной конфигурацией: правилами, навыками, агентами, командами, MCP-серверами и хуками. Без этого даже мощная модель работает как обычный чат с инструментами, которые она каждый раз должна угадывать.
В этой статье разберу, как устроены rules, skills, agents, commands, MCP, plugins и hooks. По какому принципу всё связывается через routing.md и как масштабировать конфиг без раздутого системного промпта.
В конце — короткий чек-лист первой настройки и список антипаттернов, на которых легко наступить.
Чтобы было предметно: на пустом ~/.claude/ Claude Code знает только Read/Write/Edit/Bash и пару базовых tool’ов. Чтобы получить из него что-то полезное — нужно объяснять каждую задачу с нуля, держать контекст в голове, не забывать про переменные окружения. На моём конфиге та же сессия начинается с того, что модель уже знает: где у меня хранятся ключи, как обращаться к моим серверам, какой стиль кода я использую, какие инструменты под какие задачи. Разница не в скорости печатания — в количестве шагов, которые я не делаю, потому что они уже зашиты в правила и скиллы.
С чего начинается персональная конфигурация
Когда вы запускаете Claude Code в первый раз, он создаёт каталог ~/.claude/ (на Windows — C:Users<вы>.claude). По умолчанию там пусто, кроме служебных файлов. Всё, что вы туда положите, будет влиять на поведение модели.
Базовая структура, к которой стоит прийти:
|
~/.claude/ ├── CLAUDE.md # навигация, авто-загружается каждую сессию ├── rules/ # правила поведения, авто-загружаются ├── skills/ # библиотека навыков on-demand ├── agents/ # специализированные субагенты ├── commands/ # slash-команды (/deploy, /translate, …) ├── hooks/ # скрипты на события (PreToolUse, Stop, …) ├── settings.json # plugins, MCP, permissions, hooks-маппинг ├── mcp.json # MCP-серверы, которые включаются по требованию └── .credentials.master.env # API-ключи, никогда в git |
Семь типов компонентов. Каждый делает свою работу:
|
Компонент |
Когда грузится |
Зачем |
|
Каждая сессия |
Навигация и стиль работы |
|
|
rules/*.md |
Каждая сессия |
Правила, которым модель должна следовать всегда |
|
skills/*/SKILL.md |
По триггеру |
Отдельные специализированные «навыки» |
|
agents/*.md |
По вызову Task |
Субагенты с изолированным контекстом |
|
commands/*.md |
По /имя |
Явные slash-команды |
|
hooks/*.js |
На событие |
Блокировки, нотификации, гарды |
|
MCP-серверы |
По описанию |
Внешние интеграции (Gmail, GitHub, БД) |
Связывает их один принцип — библиотека on-demand, а не bloat в системном промпте. Дальше разберём, как это устроено.
CLAUDE.md как точка входа
Пара слов про корневой CLAUDE.md. Это первый файл, который модель видит в каждой сессии. Подробно описывать в нём вообще всё — нерационально: каждая правка ломает кеш промпта и обходится дороже на каждом запросе.
Рабочий формат — короткий: 200–300 строк. Его задача — дать карту, а не передать знание. Структура примерно такая:
|
# CLAUDE BRAIN — НАВИГАЦИЯ
## Режим работы – Работаем автономно, не спрашиваем разрешения на мелочи – Останавливаемся только когда нужна информация от человека
## Правила (auto-load из ~/.claude/rules/) | Файл | Назначение | |——|————| | routing.md | Маршрутная карта задача → инструмент | | security.md | API-ключи, чувствительные данные | | personality.md | Стиль общения и приоритеты |
## Конфигурация (~/.claude/config/) | Что | Файл | |—–|——| | Реестр проектов | config/projects-registry.md | | Модели AI | config/models.md | | Сервер | config/server.md |
## Инструменты | Что | Где | Кол-во | |—–|—–|——–| | Skills | skills/ | <столько-то> | | Agents | agents/ | <столько-то> | | Commands | commands/ | <столько-то> | |
Дальше — короткие списки плагинов и MCP, и всё. Никаких подробных инструкций «как писать код», «как делать ревью», «как форматировать ответы». Это всё уезжает в rules/ или в skills/, чтобы можно было обновлять по отдельности и не ломать кеш всего промпта.
Помимо корневого ~/.claude/CLAUDE.md, имеет смысл класть проектный CLAUDE.md в корень каждого вашего рабочего репозитория. Когда вы переходите в директорию проекта — Claude Code автоматически подгружает этот файл сверху. Это удобно для проектных вещей: «у нас pnpm, не npm», «фронт на Next.js 15, не на 14», «деплой через vertex ssh, ключ такой-то».
Главный архитектурный принцип: не раздувать контекст
Распространённая ошибка — пытаться запихнуть всё ценное прямо в CLAUDE.md. У меня в ~/.claude/skills/ сейчас несколько сотен папок: ИИ-генерация изображений, отправка постов в Telegram, рендер презентаций, парсинг RuTube, десятки рабочих сценариев. Если бы их содержимое грузилось в системный промпт, оно бы не уместилось до начала первого сообщения.
Поэтому в системный промпт грузится только карта местности:
-
CLAUDE.md — короткая навигация (~300 строк)
-
~/.claude/rules/ — 20–25 файлов с правилами поведения, в сумме ~30–50 тысяч токенов кешируемого префикса
Внутри rules/ лежит главный файл — routing.md. Это таблица из 300+ строк формата «триггер → инструмент»:
|
| Категория | Триггеры | Инструмент | |———–|———-|————| | Изображения | “картинку”, “нарисуй”, “image” | Skill | Перевод | “переведи”, “translate” | Command | Транскрипция | “транскрибируй”, “распознай речь” | Skill | YouTube upload | “выложи в ютуб”, “опубликуй видео” | Skill | Деплой | “задеплой”, “deploy” | Command |
Когда я пишу «сделай саммари вебинара», модель смотрит в routing.md, видит триггер «саммари» / «meeting» / «транскрипт», находит нужный скилл (например, meeting-analyzer) и подгружает только его файлы. До этого скилл лежит на диске и контекст не тратит.
Из этого следует простой вывод: размер библиотеки и размер контекста — независимые величины. Библиотеку можно растить, сколько нужно, окно от этого не страдает.
Когда стоит добавлять что-то в rules/, а не в skills/:
-
rules — то, что должно работать ВСЕГДА (правила безопасности, стиль общения, какие модели использовать). Каждый байт здесь тратит токены на каждом запросе и инвалидирует кеш при изменении.
-
skills — то, что нужно ИНОГДА (рендеринг презентации, парсинг сайта, отправка в Telegram). Грузится по триггеру.
Правило большого пальца: если задача реже одного раза в день — это скилл, не правило.
Сколько это стоит в токенах на старте
Главная тревога: «такая большая конфигурация раздует контекст и съест всю экономику кеша». На практике — нет.
В каждой сессии в system prompt попадают только: CLAUDE.md (≈8K токенов), все rules/*.md (≈20–30K в сумме), список доступных скиллов как короткие descriptions (≈5K, не тела скиллов), описания плагинов и MCP-серверов (≈10K). Итого — около 40–50K токенов на старте сессии. Тела скиллов (а это основной объём, ещё ≈300K) загружаются только когда роутинг сработал на конкретный триггер.
С prompt caching (включён по умолчанию у Claude) этот системный промпт кешируется после первого сообщения и стоит ~$0.15 за сессию вместо $1.50 без кеша — экономия в 10 раз. Cold start — 1–2 секунды на первое сообщение, дальше уже tepid.
Контекст «съедают» не сами правила и скиллы, а долгие диалоги с большими файлами. Если вы держите сессию короткой и периодически делаете /compact — конфиг даже на 200+ скиллов не выйдет за половину окна.
Слой 1. Rules — правила поведения
Файлы из ~/.claude/rules/ подгружаются в системный промпт каждую сессию. Это самый дорогой слой по токенам и самый ценный по влиянию.
Минимальный набор, который стоит завести каждому:
|
Файл |
Содержание |
|
Таблица «триггер → скилл/агент/команда» |
|
|
Стиль общения (язык, тон, на «ты» / «вы») |
|
|
Где лежат API-ключи, что нельзя в коде |
|
|
Когда делегировать субагенту, когда делать самому |
|
|
Что проверять после изменений (build, type-check, lint) |
|
|
Список запретов с объяснениями |
Шаблон файла-правила — обычный markdown с заголовком и пояснением:
|
# Personality
## Language – Communication: Russian – Code: English (always) – Comments in code: English – Commit messages: English (Conventional Commits)
## Tone – Direct, technical, no fluff – Address user informally (on “ty”) – Show results, don’t ask permission for small things
## Anti-patterns – Excessive praise (“Great question!”) – Filler phrases (“Let me think about that…”) – Marketing-speak and buzzwords |
Что важно держать в голове при работе с правилами:
-
За размер платишь на каждом запросе. У меня 20+ файлов rules дают примерно 30–50 тысяч токенов. Это нормально — кешируется и стоит в 10 раз дешевле обычного ввода. Но если набьёте сюда мегабайт — заметите по счёту и по скорости отклика.
-
Любое изменение rules ломает кеш. Поэтому я не правлю правила во время активной сессии. Меняю — и начинаю новую.
-
Не пишите в rules то, что нужно знать только в одном проекте. Для проектных вещей кладите CLAUDE.md в корень проекта — он подгружается автоматически, когда вы работаете в этой директории.
Самый важный файл — routing.md. Его лучше начать сразу с десяти-пятнадцати строк по своим типовым задачам, а потом дополнять по мере появления новых скиллов. Без routing-таблицы модель не найдёт ваши скиллы по описанию.
Слой 2. Skills — основная рабочая лошадка
Скилл — это директория в ~/.claude/skills/<name>/ с обязательным файлом SKILL.md. Внутри может лежать что угодно: дополнительные .md, скрипты, шаблоны, эталонные данные.
Структура файла — markdown с YAML-frontmatter:
|
— name: image-generation description: AI image generation prompt engineering for DALL-E 3, Gemini Imagen, Stable Diffusion, Midjourney. Use when asked to generate, create, or draw images. —
# Image Generation Skill
## When to Use – User asks to create/generate an image – User needs help writing image prompts – User mentions DALL-E, Midjourney, Stable Diffusion
## Core Prompt Structure
### 1. Subject [Main subject] + [Detailed description] + [Pose/Action]
### 2. Style photographic / illustration / 3D render / oil painting
### 3. Lighting golden hour / studio / dramatic / soft natural
… |
Главное в этой структуре — поле description во frontmatter. Модель ищет нужный скилл по нему. Чем точнее описание, тем выше шанс, что модель найдёт скилл сама, без подсказки в routing.md.
Хорошее description — три части:
-
Что делает скилл (одно предложение).
-
Когда вызывать («Use when…»).
-
Ключевые слова для триггеров (DALL-E, Gemini, Stable Diffusion).
Плохое описание: «Helper for images». Никаких триггеров — модель никогда не найдёт.
Когда делать скилл, а когда не делать
Делайте скилл, если:
-
Задача повторяется хотя бы раз в неделю
-
В решении есть нетривиальная логика (структура промпта, последовательность шагов, обращение к API)
-
Эту логику не получится коротко описать в routing.md
Не делайте скилл, если:
-
Задача делается одной командой Bash или одним вызовом API — это командная работа, кладите в commands/
-
Нужно только напомнить модели про какое-то правило — это правило, кладите в rules/
-
Логика жёстко привязана к одному проекту — это CLAUDE.md в корне проекта
Первый скилл за 10 минут
Минимальный воркфлоу:
|
mkdir -p ~/.claude/skills/my-first-skill cat > ~/.claude/skills/my-first-skill/SKILL.md <<‘EOF’ — name: my-first-skill description: Что-то полезное, что я делаю регулярно. Use when user asks to … —
# My First Skill
## When to Use – Условие 1 – Условие 2
## Steps 1. Сделать X 2. Проверить Y 3. Вернуть результат в формате Z EOF |
Дальше добавьте триггер в rules/routing.md:
|
| Моя задача | “ключевое слово 1”, “ключевое слово 2” | Skill |
Запускайте сессию заново — модель загрузит обновлённую карту.
Пример скилла из жизни — презентации в нужном стиле за 5 минут
Чтобы было понятно, как скилл реально окупается, покажу один из тех, что я сам гоняю каждую неделю.
manus-slides — full-pipeline скилл генерации презентаций. На вход — тема (одной фразой). На выход — готовый PPTX с обложкой, разделами и иллюстрациями. Внутри 24 стиля через Nano Banana 2 (Gemini Image): vinyl, whiteboard, grove, fresco, sketch, neon, onyx и другие. Лично я почти всегда беру whiteboard — это иллюстрации в стиле маркерной доски в переговорке. Хорошо ложится на бизнес-контент, не выглядит как стоковая презентация, не требует подбора шрифтов и цветов.
Важный момент: скилл — это не просто текстовая шпаргалка для модели. Это полноценный пакет из инструкции, рабочих скриптов и ассетов. Структура каталога manus-slides:
|
~/.claude/skills/manus-slides/ ├── SKILL.md # инструкция (≈13K) ├── scripts/ │ ├── whiteboard_generator.py # пайплайн whiteboard-стиля → PNG → PPTX │ ├── slide_manager.py # init/add/export проекта │ ├── slide_templates.py # 13 HTML-шаблонов │ └── slide_export.py # рендер через Playwright → PPTX/PDF ├── assets/ # шрифты, иконки, базовые изображения └── references/ # эталонные примеры стилей |
Скилл = SKILL.md (как пользоваться) + рабочие скрипты (что реально делает работу) + ассеты + референсы. Агент следует SKILL.md как инструкции по эксплуатации, но всю тяжёлую работу — генерацию изображений, сборку PPTX, рендер слайдов — делают скрипты. В терминальном выводе ниже видна строка [load] manus-slides/scripts/whiteboard_generator.py (registered as tool) — это тот самый момент, когда агент подцепляет executable.
В Claude Code это работает так:
|
> сделай презентацию для investor pitch на тему «AI-агрегатор для корпоративного обучения», стиль whiteboard, 12 слайдов |
Routing.md ловит триггер «презентация», подключает manus-slides, тот:
-
Через Claude формирует outline — 12 слайдов с заголовками и тезисами.
-
Для каждого слайда генерирует промпт под whiteboard-стиль (заголовок + структура иллюстрации).
-
Параллельно гоняет промпты через gemini-3.1-flash-image-preview, получает PNG для каждого слайда.
-
Собирает всё в PPTX с обложкой и метаданными.
Время от запроса до готовой презентации — 5–8 минут. Рукой та же работа — целый день: думать структуру, искать иллюстрации, выравнивать вёрстку.
Минимальный фрагмент SKILL.md, чтобы понять структуру:
|
— name: manus-slides description: Создание презентаций. Использовать когда пользователь просит «сделай презентацию», «оформи слайды», «pitch deck». Поддерживает 24 AI-стиля (whiteboard, vinyl, sketch и др.) через Gemini Image. Экспорт в PPTX/PDF. —
# Manus Slides
Full-pipeline: тема → outline → слайды (PNG через Gemini) → PPTX.
## Quick start 1. Спросить тему и стиль (whiteboard по умолчанию) 2. Сгенерировать outline (Claude) 3. Для каждого слайда — image-prompt в стиле whiteboard 4. Параллельный запуск Gemini image generation 5. Сборка в PPTX (python-pptx) |
Это пример того, как скилл из 200 строк превращает «целый день руками» в «пять минут одной командой». И это не единственный — у меня в ~/.claude/skills/ сейчас лежит более двух сотен подобных. Большинство я писал сам по мере появления повторяющихся задач: одну рутину прогнал второй раз — задумался, на третий уже оформил в скилл.
Чтобы было понятнее, как routing срабатывает — вот как это выглядит в терминале:
|
> сделай презентацию для investor pitch на тему «AI-агрегатор для корпоративного обучения», стиль whiteboard, 12 слайдов
[routing] match: «презентация» → skills/manus-slides/SKILL.md (confidence 0.94) [load] manus-slides/SKILL.md (4.2K tokens) [load] manus-slides/scripts/whiteboard_generator.py (registered as tool)
I’ll generate the presentation. Let me start with the outline.
✓ Outline generated: 12 slides 1. Title — AI-агрегатор для корпоративного обучения 2. Problem — фрагментация обучения в корпорациях 3. Solution — единая платформа с AI-агентами …
✓ Slide prompts ready ✓ Generating images (parallel, 12 requests via gemini-3.1-flash-image-preview) [01/12] ████████████████████ done [12/12] ████████████████████ done ✓ Building PPTX ✓ Saved to ./output/presentation.pptx (3.8 MB, 12 slides)
Done in 6m 14s. |
Это и есть пайплайн: routing нашёл нужный skill, подгрузил его описание (≈4K токенов вместо 200K, если бы все скиллы лежали в system prompt), агент выполнил задачу и вернулся.
Ещё один пример — парсинг Telegram
Скилл, который я гоняю чаще всего из служебных, — это работа с Telegram. Мой tg-post skill отвечает за публикацию в канал, а tg_client.py (тоже подключён через скилл) — за чтение, поиск, парсинг и автоматизации.
Что я делаю одной командой в Claude Code:
|
> найди в канале @aiproductreview все посты за последний месяц, где упоминается AlpinaGPT или конкуренты, выгрузи в CSV |
Routing подгружает skill telegram → агент через tg_client.py авторизуется в моём аккаунте (через Telethon, сессия лежит локально), сканирует канал, фильтрует по ключевым словам, складывает результат в CSV.
Под капотом — единый CLI с 50+ командами:
|
read-channel parse-comments parse-commenters read-chat parse-members channel-stats search search-media search-date mentions global-search contacts download export-chat send / send-file react create-poll create-group / create-channel |
Структура та же, что у manus-slides — SKILL.md плюс набор Python-скриптов плюс session-файл (Telethon). Что важно: скилл получает credentials из ~/.claude/.credentials.master.env, не из диалога. Модель не видит TELEGRAM_API_ID и токены в чистом виде — она просто вызывает скрипты.
Это второй типичный паттерн скилла после manus-slides: обёртка вокруг внешней системы. Когда у меня появляется новая система, с которой я работаю руками регулярно, — я делаю под неё такую же скилл-обёртку. Получается готовый интерфейс «Claude Code → внешний сервис», который работает одной командой на естественном языке.
Как растёт конфигурация — мета-скилл, который пишет скиллы
В какой-то момент я заметил, что часто описываю Claude Code одну и ту же задачу: «сделай мне скилл для X». Решение — skill-creator. Это SKILL.md, который умеет создавать другие SKILL.md.
Минимальная заготовка:
|
— name: skill-creator description: Создаёт новые скиллы по описанию задачи. Использовать когда пользователь просит «сделай мне скилл», «добавь скилл», «оформи это в скилл». Анализирует запрос, генерирует SKILL.md с правильным frontmatter, помещает в ~/.claude/skills/<name>/ и подключает в routing.md. —
# Skill Creator
## Когда срабатывает – Пользователь просит создать новый скилл – Описывает повторяющуюся задачу, которая просится в виде скилла
## Что делает 1. Уточняет: имя, триггеры, шаги выполнения 2. Создаёт 3. Если нужен скрипт — кладёт рядом 4. Добавляет строку в 5. Сообщает о создании, показывает diff
## Шаблон выходного SKILL.md [минимальный шаблон 15–30 строк] |
После этого я могу сказать Claude Code «сделай скилл для парсинга PDF-выписок банка» — он сам создаёт каталог, пишет SKILL.md, прописывает routing, и через минуту скилл работает. Это и есть точка самовоспроизводства конфигурации: дальше она растёт по запросу, без ручной возни с файлами.
Если хотите мой полный skill-creator — он в архиве (см. блок ниже про конфиг).
Слой 3. Agents — делегируем задачи
Агент — это специализированный субагент с отдельным контекстом. Вы вызываете его через инструмент Task, передаёте промпт, он работает изолированно и возвращает результат.
Зачем это нужно:
-
Контекстная изоляция. Если основной агент уже наполнил окно контекстом, а вам нужно сделать большой research — отдайте subagent-у. Он не будет тащить за собой всю историю.
-
Параллелизм. Можно запустить несколько агентов одновременно для независимых задач (поиск в разных частях кодовой базы, разные типы анализа).
-
Специализация. У агента может быть свой системный промпт, свой набор инструментов, своя модель.
Структура файла агента — тот же markdown с frontmatter:
|
— name: code-reviewer description: Reviews code for security, quality, and performance model: opus tools: Read, Glob, Grep —
# Purpose
You are a Principal Code Reviewer. Your mission is to perform rigorous, actionable code reviews using a two-pass methodology to separate critical problems from informational notes.
## Identity – Style: Direct, evidence-based, constructive – Principles: Security first, Zero Silent Failures, READ-ONLY
## Process Pass 1: Surface only critical issues (security, correctness, P0 bugs) Pass 2: Informational notes (style, minor refactors)
## Rules – Point to specific file paths and line numbers – Suggest concrete fixes, not generic advice – Never use Write, Edit, or Bash tools — read-only |
Несколько ключевых полей:
-
model: opus | sonnet | haiku — какую модель использовать. Для exploration хватает Haiku, для код-ревью лучше Opus.
-
tools: Read, Glob, Grep — белый список инструментов. Для security-агентов всегда делайте read-only — никогда не давайте Write/Edit.
-
description — по нему модель будет понимать, когда вызывать агента автоматически.
Когда нужен агент, а когда хватит скилла
|
Признак |
Скилл |
Агент |
|
Нужна изоляция контекста |
нет |
да |
|
Нужен другой системный промпт |
нет |
да |
|
Нужно ограничить набор tools |
нет |
да |
|
Просто переиспользуемый промпт-рецепт |
да |
нет |
Если сомневаетесь — начинайте со скилла. Если позже окажется, что задача засирает основной контекст или нужен read-only режим — переезжайте в агента.
Уровни делегирования
Для себя я держу простой decision tree:
|
Сложность |
Что делать |
Пример |
|
Level 0 |
Делать самому, без агентов |
Поправить опечатку, переименовать переменную |
|
Level 1 |
Один специализированный агент |
Реализовать API endpoint в 2–5 файлах |
|
Level 2 |
Оркестратор + 2–3 worker-агента |
Фича во фронт + бэк + тесты |
|
Level 3 |
Полный workflow с QA |
Новый микросервис, миграция данных |
Принцип, к которому я пришёл после нескольких неудачных попыток: не рассчитывайте, что claude поймёт вас с полуслова. Промпт «исправь баг по результатам твоего research» — плохой промпт. Хороший: «исправь null-pointer в src/auth/validate.ts:42, поле user undefined при истёкшей сессии — добавь null-check, верни 401».
Сначала синтезируйте сами, потом дайте агенту конкретную спецификацию с файлами и строками. Это работает лучше, чем разводить пять агентов и надеяться, что они между собой договорятся.
Параллельные агенты: когда и как
Агенты можно запускать параллельно. Это полезно, когда у вас несколько независимых задач, которые не трогают одни и те же файлы:
-
Один агент изучает структуру API
-
Второй параллельно собирает список endpoint-ов
-
Третий ищет, где лежат интеграционные тесты
Каждый возвращает свой результат, основной агент их синтезирует и принимает решения.
Что важно: результаты parallel-агентов нужно интегрировать руками. Если просто получили три отчёта и не сделали явный шаг «сводим вместе» — половина пользы теряется. Я обычно после parallel-фазы делаю отдельный запрос: «вот три результата, дай мне план реализации с учётом всех трёх».
Антипаттерн — параллелить зависимые задачи. Если задача B нуждается в результате задачи A — гоните последовательно. Параллельные на зависимостях ломаются непредсказуемо: B стартует, не дождавшись А, и работает по неполным данным.
Worktrees для изолированных экспериментов
Отдельная штука, которая очень удобна вместе с агентами, — git worktrees. Это возможность иметь несколько рабочих копий одного репозитория на разных ветках одновременно.
Сценарий: вы работаете на feature/login, и тут срочно нужно проверить идею в experiment/new-router. Без worktrees — стэшить, переключаться, восстанавливать. С worktrees — git worktree add ../experiment experiment/new-router, и у вас рядом второй каталог с этой веткой.
Агенту тоже можно дать команду работать в worktree. Если он что-то наломает или результат не понравится — выкидываем целый каталог одной командой git worktree remove. Никаких стэшей, никаких потерянных файлов.
Слой 4. Commands — slash-команды
Команда — это файл ~/.claude/commands/<name>.md, который вызывается явно через /<name>. От скилла отличается тем, что:
-
Скилл ищется автоматически по описанию.
-
Команда вызывается явно по имени.
Структура минимальная:
|
— description: Universal deployment command for various environments argument-hint: [staging / production / local] —
# Deploy: $ARGUMENTS
Deploy to $ARGUMENTS environment.
## Process
### Pre-Deploy Checks – Tests passing – Linting clean – Env variables configured – Database migrations ready
### Deployment Steps 1. Build application 2. Run tests 3. Push to registry 4. Run migrations 5. Health check 6. Smoke tests |
$ARGUMENTS — подставится то, что вы написали после /deploy.
Когда удобнее команда, чем скилл:
-
Действие явно осознанное и не должно вызываться «случайно» (деплой, удаление, миграции)
-
Нужно передавать параметры из командной строки
-
Хочется быстрый запуск без описания контекста
Несколько команд, которые имеет смысл сделать любому:
|
Команда |
Что делает |
|
/deploy <env> |
Деплой с pre-deploy checks |
|
/translate <text> |
Перевод через ваш любимый сервис |
|
/transcribe <file> |
Транскрипция аудио |
|
/commit |
Создать commit с правильным форматом |
|
/code-review |
Запустить code-review агента на текущих изменениях |
Если делаете команду-обёртку над скиллом — это нормально. Я часто так делаю: /translate под капотом дёргает скилл deepl-pro, но мне удобнее набрать /translate привет EN, чем описывать словами.
Команды поддерживают аргументы через $ARGUMENTS. Можно сделать команду-параметризованную: /code-review src/auth/ запустит ревью только этой папки. Аргументы передаются как одна строка, парсить — внутри логики команды.
Имена команд лучше делать без префиксов проектов. /deploy-prod-vertex-with-checks — нечитаемо. /deploy production — нормально, всё остальное передаём как аргумент.
Слой 5. MCP-серверы — подключение к внешнему миру
MCP (Model Context Protocol) — открытый стандарт, который описывает, как модель общается с внешними сервисами. У сервера есть набор tools — модель видит их, может вызвать с параметрами и получить ответ.
Бывают двух видов:
-
Local MCP — серверы, которые запускаются у вас на машине через npx или Docker. Описаны в settings.json (mcpServers) или в mcp.json.
-
Cloud MCP — серверы Anthropic / партнёров, которые автоматически доступны при подписке.
Базовый набор, который полезен почти всем:
|
Сервер |
Тип |
Зачем |
|
filesystem |
local |
Доступ к файлам — чтение, запись, листинг (часто стоит из коробки) |
|
github |
через плагин |
PR, issues, репозитории |
|
context7 |
cloud / плагин |
Актуальная документация любых библиотек |
|
gmail |
cloud |
Поиск, чтение, черновики писем |
|
google-calendar |
cloud |
События, слоты, приглашения |
Подключается через mcp.json:
|
{ “mcpServers”: { “filesystem”: { “command”: “npx”, “args”: [“-y”, “@modelcontextprotocol/server-filesystem”, “C:/Users/me/Projects”], “env”: {} } } } |
Важный момент по производительности: каждый активный MCP-сервер добавляет описания своих tools в системный промпт каждой сессии. Если вы держите включёнными 19 серверов, в промпте будет несколько килобайт описаний tools, которые вы используете раз в месяц. Поэтому я держу подавляющее большинство серверов в mcp.json со статусом «есть, но выключен» и включаю по требованию.
Когда MCP — перебор: если задача делается одним вызовом API через requests или httpx, и вы это делаете раз в неделю — кладите в скилл с куском Python-кода, не поднимайте отдельный MCP-сервер.
Что обычно ломается с MCP
Несколько типовых граблей, на которых я набил шишки:
-
Cold start. Серверы, поднимаемые через npx, при первом запуске тянут пакеты. Первая сессия после ребута может стартовать пять-десять секунд дольше. Решение — npm install -g для тех, что используете каждый день.
-
Конфликты по портам. Несколько MCP с http/sse-транспортом могут пытаться занять одинаковые порты. Если сервер не стартует — первое, что проверяю.
-
Истёкшие OAuth-токены. Cloud-MCP вроде Gmail, Calendar периодически просят переавторизоваться. Если внезапно tools выдают 401 — переподключите интеграцию.
-
Описания tools раздуваются. Видел сервер, который добавлял в промпт 30+ инструментов с длинными описаниями. После выключения скорость заметно подросла. Если есть выбор между сервером с 5 точечными tools и сервером с 50 «на всё» — берите первый.
Перед тем как поднять свой MCP-сервер — посмотрите, нет ли уже готового. Большинство популярных интеграций уже написаны: Postgres, Redis, Slack, Notion, Linear, Sentry, Figma, Stripe — всё есть. Свой стоит писать только под уникальные внутренние системы.
Слой 6. Plugins — что ставить и что нет
Плагин — это бандл, который содержит сразу несколько вещей: skills, commands, agents, иногда хуки и MCP-серверы. Управляются через settings.json в секции enabledPlugins.
Откуда брать:
-
Официальный маркетплейс claude-plugins-official
-
Маркетплейсы вроде dev-browser-marketplace
-
Открытые репозитории на GitHub
Принципы выбора:
-
Доверяйте источнику. Плагин может содержать любой код. Перед установкой — гляньте, кто автор, насколько активен репозиторий, есть ли issues.
-
Не дублируйте функциональность. Если у вас уже есть свой скилл для перевода — не ставьте плагин, который делает то же самое.
-
Каждый плагин раздувает контекст. Описания всех команд и скиллов из плагина попадают в системный промпт. Чем больше включено — тем дороже каждая сессия.
-
Снимайте по одному. Когда не уверены, нужен ли плагин — поставьте, поработайте неделю, потом честно ответьте: «Я этим пользовался?» Если нет — удаляйте.
Несколько плагинов, которые реально окупаются:
|
Плагин |
Зачем |
|
context7 |
Свежая документация любой библиотеки прямо в контекст |
|
commit-commands |
Готовые команды /commit, /commit-push-pr с правильным форматом |
|
code-review |
Внешний AI-ревью на PR |
|
pyright-lsp или typescript-lsp |
Type-checking прямо во время работы (если вы в этом языке) |
|
playwright |
Браузерная автоматизация для тестов |
Антипаттерн: «поставлю всё подряд, разберусь потом». В лучшем случае — раздутый контекст. В худшем — конфликт команд (две команды /deploy от разных плагинов) или установленный недоверенный код.
Слой 7. Hooks — автоматика и блокировки
Hooks — это скрипты, которые выполняются на конкретные события. Описываются в settings.json в секции hooks. Каждое событие может иметь несколько hooks с разными matchers.
Список событий, на которые можно повеситься:
-
PreToolUse — перед вызовом любого инструмента
-
PostToolUse — после вызова
-
SessionStart, SessionEnd — старт и конец сессии
-
Stop — модель завершила ответ
-
UserPromptSubmit — пользователь отправил сообщение
-
SubagentStart, SubagentStop — субагент стартовал / остановился
-
CwdChanged, FileChanged — изменилась рабочая директория или файл
Самое полезное применение — блокировки на необратимые операции. У меня в settings.json стоят три PreToolUse-хука, которые просто возвращают exit-code 1 и стопят выполнение:
|
{ “hooks”: { “PreToolUse”: [ { “matcher”: “Bash(rm -rf)”, “hooks”: [ {“type”: “command”, “command”: “exit 1”} ] }, { “matcher”: “Bash(DROP DATABASE)”, “hooks”: [ {“type”: “command”, “command”: “exit 1”} ] }, { “matcher”: “Bash(DROP TABLE)”, “hooks”: [ {“type”: “command”, “command”: “exit 1”} ] } ] } } |
Три блокировки. Не пятьдесят. Принцип простой: блокировать только необратимое — удаление, дроп, force-push в main. Всё остальное чинится через git stash, git restore, перезапуск контейнера. Перебирать со страховками — означает мешать самому себе на каждом шаге.
Что ещё можно повесить на hooks:
|
Событие |
Что можно сделать |
|
|
Stop |
Звуковой сигнал «работа закончена» |
|
|
PreToolUse Bash(git commit) |
Напоминание про Conventional Commits |
|
|
`Write |
Edit` |
Скрипт-гард, который проверяет, не правится ли защищённая директория |
|
SessionStart |
Проверка обновлений вашего фреймворка |
|
Чего лучше не делать:
-
Не вешайте тяжёлый Python с импортом десятков пакетов на частые события. Это даёт лаги в полсекунды на каждом hook-у. Я когда-то так повесил vector-memory на каждый PreToolUse, потом неделю выяснял, почему всё тормозит.
-
Не пишите hooks, которые могут зависнуть. Hook блокирует выполнение, пока не вернётся exit-code. Скрипт, который ходит в сеть без таймаута — гарантированный фриз.
-
Не используйте hooks как способ защиты от модели. Если модель «хочет» сделать что-то опасное — это ваша проблема промптинга, а не задача хука. Hooks — последний рубеж, не первый.
Permissions — разрешения и автоматизация
В settings.json есть секция permissions и permissionMode. Управляет, что модели нужно подтверждать, а что — нет.
Три режима:
|
Режим |
Что делает |
|
ask |
Спрашивает на каждый чувствительный tool call |
|
acceptEdits |
Авто-принимает edit-операции, остальное спрашивает |
|
bypassPermissions |
Не спрашивает ничего |
Я сам работаю в bypassPermissions. Не потому что «доверяю модели», а потому что ограничения для подстраховки уже стоят слоем ниже:
-
действительно опасные команды заблокированы хуками
-
API-ключи лежат в ~/.claude/.credentials.master.env, а не в коде — модель физически не может их «утечь» в коммит
-
security-агенты по конфигурации read-only
-
большинство операций обратимо — git stash, git restore, пересоздание контейнера
То есть bypassPermissions — это не «ставлю галочку и забываю», а итоговая настройка после того, как настроены хуки, изоляция ключей и read-only на чувствительных агентах.
Что точно НЕ стоит автоматизировать:
-
Деплой в продакшен без перепроверки
-
Действия с финансовыми API (платежи, переводы)
-
Удаление аккаунтов и сущностей в чужих системах
-
Любая операция, цена ошибки которой выше стоимости вашего ручного клика
Если вы только начинаете — оставайтесь на ask, пока не построите свой набор хуков и не поймёте, как ваш конфиг себя ведёт.
Как построил защиту от prompt-инъекций
Когда модель работает с внешними данными — почтой, веб-страницами, ответами MCP-серверов — она получает текст, на который злоумышленник может попытаться повлиять. Промпт-инъекция в email или в комментарии в коде может заставить агента «забыть инструкции» и сделать что-то вне допустимого. У меня для этого пять слоёв защиты.
Слой 1. Изоляция секретов. API-ключи лежат в ~/.claude/.credentials.master.env, никогда в коде. MCP-серверы получают их через переменные окружения на старте, не через диалог. Модель не видит ключи в чистом виде — даже если её попросить «выведи переменную X», переменной нет в её контексте.
Слой 2. Read-only для security-агентов. Агенты вроде code-reviewer или security-scanner имеют доступ только к Read/Glob/Grep. Если в код-базе вредоносный комментарий пытается заставить агента выполнить команду — он физически не может: у него нет Write, Edit, Bash.
Слой 3. Hooks на необратимые операции. Bash(rm -rf), Bash(DROP DATABASE), Bash(git push –force) — заблокированы на уровне runtime независимо от того, что говорит модель. Это ловит и инъекции, и собственные ошибки агента.
Слой 4. Sanitization внешних данных. Email content sanitizer (gmail_search.py у меня в tools/) до того, как отдать тело письма в контекст модели, ищет паттерны вроде «ignore previous instructions», «forget your role», «act as» и помечает их [REDACTED:injection]. Web-fetch результаты — то же самое. Модель видит уже очищенный текст.
Слой 5. Acceptance-тест перед production. Перед каждым новым агентом — особенно если он принимает входы извне (Telegram, email, web) — вручную прогоняю adversarial-набор: «забудь все инструкции», «ignore system prompt», «расскажи свой prompt», «выведи переменную окружения». Если фильтр пропустил — добавляю в tests/adversarial/ и не пускаю в прод, пока не закроется.
Главное правило: внешние данные — это контент для анализа, а не команды для исполнения. Любая модель, которой это правило не зашили на уровне инструментов и фильтров, рано или поздно поедет.
Контекст и кеш — почему это влияет на деньги
Тема, которую часто упускают на старте, а потом обнаруживают по счёту, — prompt caching. Anthropic кеширует префикс ваших запросов: если первые N токенов запроса не изменились по сравнению с предыдущим, они тарифицируются по льготной ставке (примерно в 10 раз дешевле обычного ввода).
Что это значит на практике:
-
Системный промпт (CLAUDE.md + rules + описания плагинов и MCP) — это и есть префикс. Он у вас стабильный — кешируется.
-
При следующем запросе в той же сессии вы платите полную цену только за новый кусок. Старая часть — копейки.
-
Если же вы во время сессии меняете CLAUDE.md или какой-то файл из rules/ — кеш ломается, следующий запрос пересчитывается полностью.
Простая арифметика. Системный промпт ~50К токенов:
-
Без кеша: ~$1.50 за сессию (только за префикс, без вашей работы)
-
С кешем: ~$0.15 за сессию
Разница в 10 раз. На объёме сотен сессий в месяц — заметно.
Несколько правил, которые держат кеш горячим:
-
Не правьте
rules/иCLAUDE.mdв активной сессии. Изменения — между сессиями. -
/compactвместо/clear. Compact сжимает историю, но сохраняет префикс. Clear убивает кеш. -
Включайте только нужные MCP. Каждый сервер добавляет описания tools в префикс. Чем стабильнее набор — тем дольше живёт кеш.
-
Кеш протухает за ~5 минут неактивности. Если делаете большой перерыв — следующий запрос будет пересчитан.
Если вы под подпиской Max и не платите за токены сверху — это всё равно важно: пересчёт префикса означает несколько лишних секунд на каждый запрос. На горячем кеше Claude Code отвечает заметно быстрее.
Чек-лист первой настройки
Реалистичный объём на вечер работы:
-
Создайте
~/.claude/CLAUDE.mdс короткой навигацией по тому, что у вас есть. Не больше 200 строк. Это указатель, не учебник. -
Заведите
rules/routing.md— хотя бы с десятью строками по своим типовым задачам. Это главная карта, по которой модель будет искать ваши скиллы. -
Заведите
rules/personality.mdс двумя-тремя правилами тона. Просто опишите, как с вами разговаривать. -
Поставьте 2–3 базовых плагина из официального маркетплейса. Минимум — context7 для документации и commit-commands для гитовых операций.
-
Подключите 2–3 MCP-сервера: filesystem (если ещё не стоит), github и какой-то рабочий — gmail или ваш CRM.
-
Настройте один блокирующий hook на Bash(rm -rf). Пять минут работы, спасает от случайного удаления чего-нибудь важного.
-
Сделайте один свой скилл под самую частую задачу. Любую. Цель — пройти весь цикл «создал → добавил в routing → пользуюсь».
Дальше работа в обычном режиме. Через неделю обычно становится видно, чего в правилах не хватает и что просится в отдельный скилл. Через две-три — появляется ощущение, что какие-то задачи стоит отдать субагенту. Конфиг достраивается под ваши задачи постепенно — пытаться предусмотреть всё на старте бесполезно.
Антипаттерны
Несколько вещей, которые я видел или делал сам, и которые лучше не повторять.
Заливать всё в системный промпт. Каталог из 4000 строк в CLAUDE.md — классика. Кеш ломается, контекст проедается. Решение: короткая навигация + подключаемые файлы по триггерам.
Включать сразу 50 MCP-серверов. Каждый добавляет описания tools в промпт. На холодном старте получается несколько секунд лагов и заметная просадка по качеству — модель тонет в шуме. Решение: держать в mcp.json всё, включать только нужное.
Тяжёлые Python-хуки на частые события. Импорт numpy + qdrant_client + fastembed на каждый PreToolUse — гарантированный тормоз. Решение: hooks — это короткие скрипты на bash или Node.js. Тяжёлая логика — вне hooks.
Скиллы без description. Если frontmatter пустой или описание из одного слова — модель никогда не найдёт ваш скилл по контексту. Решение: 2–3 предложения с ключевыми триггерами.
Агенты без чёткой роли. «General assistant» в качестве описания — почти то же самое, что без описания. Модель не поймёт, когда дёргать. Решение: одна задача — один агент. Имя, role, tools — всё конкретное.
Команды-алиасы для очевидных вещей. /list для ls, /show для cat — добавляют шум в каталог команд, не дают ничего. Решение: команды только для действий, которые требуют последовательности шагов.
Правка rules во время активной сессии. Любой байт-чейндж в rules/* ломает промпт-кеш — следующий запрос полностью пересчитывается. Решение: правки — между сессиями, не внутри.
Игнорировать prompt caching. Если вы держите промпт-префикс стабильным, кеш-хит платится в районе 10% от обычного ввода. На системном промпте в 50К токенов это разница между $0.15 и $1.50 за сессию. Решение: не дёргать CLAUDE.md и rules/ зря.
Хранить API-ключи в коде или прямо в mcp.json. Видел, как ключи к Stripe лежали в репозитории внутри конфига MCP. Один git push — и ключ светится в публичном репо. Уберите их в единый файл ~/.claude/.credentials.master.env (в .gitignore), доступ через os.getenv() в скриптах, в mcp.json — только подстановки ${VAR_NAME}.
Делегировать понимание, а не работу. Промпт «исправь баг по результатам твоего research» — антипаттерн. Воркер не будет повторно строить ту же модель проблемы, которая была у research-агента. Решение: синтезируйте сами, дайте конкретный спек с file:line.
Скиллы под одну компанию в общем ~/.claude/. Если у вас несколько проектов — личные и рабочие — не сваливайте их скиллы в одну директорию. Личные в ~/.claude/skills/, рабочие в <project>/.claude/skills/. Иначе при переключении контекста рабочая логика будет лезть в личные задачи.
Когда НЕ надо так настраивать
Этот гайд не для всех и не для любых задач. Если вы пишете один скрипт раз в две недели — все 200+ скиллов и 60 агентов вам не нужны. Базовый Claude Code из коробки прекрасно справляется с одноразовой автоматизацией, и вкладывать дни в конфигурацию ради 30 минут работы в неделю — overengineering.
Конфиг такого размера окупается, когда:
-
Вы работаете в Claude Code каждый день хотя бы по часу
-
У вас есть повторяющиеся задачи (генерация контента, парсинг, ресерч, агенты)
-
Вы хотите, чтобы поведение модели было предсказуемым между проектами и сессиями
-
Вы готовы потратить пару выходных на первый набор скиллов и пару часов в неделю на доработку
Если ничего из этого не про вас — остановитесь после первых трёх скиллов и одного routing-файла. Этого хватит надолго.
Что в итоге
Конфиг растёт под задачи, не наоборот. Не нужно сразу собирать «как у меня» или у кого угодно ещё. Пройдите чек-лист, поработайте неделю, посмотрите, чего не хватает, добавьте.
Если выбирать одну вещь, к которой стоит прийти быстрее остальных — это связка routing.md + skills on-demand. Она позволяет растить библиотеку без раздутого контекста и не мешает кешу промпта.
Готовые конфиги для вдохновения можно подсмотреть в публичных репозиториях с тегами claude-code, anthropic-skills, awesome-claude. Копировать целиком смысла нет — у каждого свой набор задач. Полезно копировать паттерны: как устроен routing.md, как описаны frontmatter-ы скиллов, какие хуки выбраны.
В ~/.claude/ у меня лежит ещё несколько вещей, которые сюда не поместились: SOUL-файлы для агентов с устойчивой личностью, AI Gateway как карусель ключей, паттерн agent-firewall для входящего email, мета-скилл skill-creator, который заводит каркасы других скиллов. Это уже ближе к OpenClaw — отдельной обвязке поверх Claude Code, в которой агент перестаёт быть инструментом для сессии и становится постоянным исполнителем фоновых задач. Если будет интересно — разберу это в следующей статье.
Если хотите мой конфиг
Если хотите забрать мой персональный ~/.claude/ целиком — оставьте комментарий под статьёй, я пришлю архив в личку бесплатно. Это анонимизированная версия: без личных данных, ключей и заметок. Внутри — CLAUDE.md, rules/, skills/ (минус приватные), agents/, commands/, mcp.json и settings.json. Можно скачать, разложить в свой ~/.claude/ и настраивать дальше под себя.
Больше кейсов и гайдов по использованию ИИ выкладываем в Телеграм-канале “Дело в промпте” — заходите, если хочется быть в курсе.
Автор: AlpinaDigitalRU


