Собрано из официального CHANGELOG, публичных материалов сообщества и треда bcherny (март 2026). Версия Claude Code на момент сборки: 2.1.78
Каждый раздел помечен флажком — насколько он важен при настройке Claude Code:
| Флажок | Уровень | Смысл |
|---|---|---|
| 🔴 | Обязательно | Настрой это в первую очередь. Без этого агент работает значительно хуже — ты теряешь качество на каждом промпте. Применимо к любому проекту и стеку. |
| 🟡 | По случаю | Мощный инструмент, но нужен не всем. Внедряй когда проект дорос до определённого масштаба или задача совпадает с профилем фичи. Ниже указано, в каких именно ситуациях. |
| 🟢 | На любителя | Удобная фича, но не влияет на качество кода. Кому-то экономит 5 минут в день, кому-то не нужна вовсе. Попробуй — реши сам. |
Рекомендация: начни с 🔴-разделов, затем пройдись по 🟡 и отметь релевантные для своего проекта.
Зачем: Одна строка в AGENTS.md которая улучшает качество кода больше, чем любой skill. Запрет as заставляет агента решать проблему типов правильно, а не замалчивать её.
Как внедрить:
Добавить в AGENTS.md:
## Code Standards
- Never typecast. Never use `as`Для автоматического enforcement — плагин Biome:
https://github.com/albertodeago/biome-plugin-no-type-assertion
📌 Пример из жизни
Ситуация: Ты пишешь Next.js приложение с Prisma ORM. Агент получает данные из API и ему нужно привести unknown к типу User. Без запрета он напишет:
const user = data as User; // тихо сломается если API вернёт другую структуруС запретом as агент вынужден написать runtime-валидацию:
const user = UserSchema.parse(data); // Zod — упадёт явно если структура не совпалаРезультат: вместо скрытого бага в продакшене — ошибка на этапе разработки.
Кому нужно: всем TypeScript-проектам — от лендинга на Next.js до enterprise монолита. Чем больше кодовая база, тем критичнее. Для Python/Go/Rust проектов — формулируй аналогичные правила под свой стек (например, Never use # type: ignore для Python).
Зачем: Строгая структура Skills даёт ~90% улучшение стабильности результатов. Посредственный агент внутри жёсткой системы ограничений работает лучше, чем мощный агент в плохо структурированном окружении. Это не prompt-инжиниринг — это системный дизайн.
Принцип: один Skill = одна функция. Результат = комбинация атомарных Skills.
Структура SKILL.md:
---
name: my-skill
description: Короткое описание для триггера
---
## Skill Purpose
Один абзац. Суть задачи. Только основная идея — детали идут ниже.
## Instructions
1. Точный шаг с точным путём
Execute: ~/scripts/run.py
2. Следующий шаг
3. ...
> Правило: если шагов больше 3 — разбить на отдельные Skills.
## Non-Negotiable Acceptance Criteria
- [ ] Критерий 1 — агент не выдаёт результат пока не выполнен
- [ ] Критерий 2
- [ ] Критерий 3
> Используй именно "Non-Negotiable", не "Rules" — второе оставляет агенту пространство для интерпретации.
## Output
Точный формат ответа. Обязателен для стабильного chaining Skills.Нестабильные результаты = слабый harness. Если агент ведёт себя непредсказуемо — проблема в структуре, не в модели.
📌 Пример из жизни
Ситуация: У тебя SaaS-продукт. Каждую неделю надо: создать миграцию БД → обновить API-эндпоинты → обновить фронтенд-типы → написать тесты. Без Skills агент каждый раз делает это немного по-разному — то забывает тесты, то пишет миграцию не в тот формат.
С Skills ты создаёшь:
.claude/skills/
├── db-migration.md # Skill: создать миграцию в формате Prisma
├── api-endpoint.md # Skill: CRUD эндпоинт по шаблону
├── generate-types.md # Skill: обновить TypeScript типы из схемы
└── integration-test.md # Skill: тест для нового эндпоинта
Каждый Skill имеет Non-Negotiable критерии:
## Non-Negotiable Acceptance Criteria
- [ ] Миграция включает rollback (down migration)
- [ ] Все поля имеют явные типы, нет `any` или `unknown`
- [ ] Запущен `prisma migrate dev` и миграция прошла без ошибокРезультат: повторяемый, предсказуемый pipeline. Каждый раз — одинаковое качество.
Кому нужно: всем, кто использует Claude Code регулярно (не разово). Особенно командам где несколько человек пользуются агентом — Skills стандартизируют подход. Проекты с повторяющимися паттернами (CRUD, миграции, генерация кода) получают максимальную выгоду.
Зачем: Запускать десятки агентов в одном репозитории без конфликтов. Каждый агент получает свой изолированный worktree и работает независимо.
Как внедрить:
# Новая сессия в изолированном worktree
claude -w
# или
claude --worktreeВ Desktop app — чекбокс "worktree" при создании сессии.
Для non-git VCS — хук WorktreeCreate для своей логики создания worktree.
Для агентов в .claude/agents/*.md:
---
isolation: worktree
---Документация: https://git-scm.com/docs/git-worktree
📌 Пример из жизни
Ситуация: Ты lead в команде из 3 фронтенд-разработчиков. У вас React-приложение с 50+ компонентами. Нужно одновременно: рефакторить авторизацию, писать новую фичу корзины, и фиксить баги в каталоге. Без worktrees — три задачи в одном дереве файлов, конфликты неизбежны.
С worktrees:
# Терминал 1 — рефакторинг авторизации
claude -w
> "Рефакторни auth модуль, переведи с context на zustand"
# Терминал 2 — новая фича
claude -w
> "Создай модуль корзины с компонентами Cart, CartItem, CartSummary"
# Терминал 3 — багфикс
claude -w
> "Исправь баг с пагинацией в каталоге — items.length на странице 2 всегда 0"Каждый агент работает в изолированной копии репо. Нет конфликтов. В конце — три PR на ревью.
Кому нужно:
- Проекты с несколькими параллельными задачами (фичи + багфиксы + рефакторинг)
- Команды где несколько человек пользуются Claude Code на одном репо
- Монолиты с долгими PR-циклами
- Ситуации когда хочешь попробовать два подхода к одной задаче и сравнить
Когда НЕ нужно: соло-разработка с одной задачей за раз.
Зачем: Крупные code migrations и другие параллелизируемые задачи. /batch интервьюирует тебя, затем сам разбивает работу и запускает столько worktree-агентов, сколько нужно — десятки, сотни, тысячи.
Как внедрить:
/batch
Claude задаст уточняющие вопросы, сам определит декомпозицию, сам запустит агентов.
Используй для: миграций, рефакторингов, массовых переименований, обновлений зависимостей.
📌 Пример из жизни
Ситуация: Компания решила мигрировать с Material UI v4 на v5. 200+ компонентов, в каждом — изменение API импортов, замена makeStyles на styled, обновление пропсов. Вручную — неделя работы. Агент по одному файлу — всё равно долго.
/batch
> Claude: Какая задача?
> Ты: Мигрировать все компоненты с MUI v4 на MUI v5.
> Заменить makeStyles на styled/sx, обновить импорты с @material-ui на @mui.
> Claude: Нашёл 217 файлов. Разбиваю на 43 группы по модулям. Запускаю агентов...
Claude сам:
- Находит все затронутые файлы
- Группирует по логическим модулям (чтобы связанные файлы менялись вместе)
- Запускает параллельных агентов (каждый в своём worktree)
- Собирает результаты
Результат: 200+ файлов мигрированы за 20 минут вместо недели.
Кому нужно:
- Крупные миграции фреймворков/библиотек (React Router v5→v6, Vue 2→3, Angular upgrade)
- Массовые рефакторинги (переименование entity во всём коде, смена паттерна)
- Обновление API-контрактов когда меняется 50+ файлов
- Монорепозитории с десятками пакетов
Когда НЕ нужно: точечные изменения в 1-5 файлах — обычная сессия справится быстрее.
Зачем: Превратить Claude Code из инструмента в фоновый процесс. Агент работает сам по расписанию пока ты занимаешься другим.
Как внедрить:
# Базовый синтаксис
/loop <интервал> <команда>
# Примеры из практики bcherny:
/loop 5m /babysit # auto code review + rebase + shepherd PRs
/loop 30m /slack-feedback # PR за фидбэком из Slack каждые 30 мин
/loop /post-merge-sweeper # PRs для пропущенных review comments
/loop 1h /pr-pruner # закрытие стейл PRsScheduled Tasks через Desktop sidebar: Schedule → New task → промпт + время + частота.
Или естественным языком: "set up a daily code review every morning at 9am" — Claude сам настроит.
Ограничение: машина должна не спать, Desktop должен быть открыт.
📌 Пример из жизни
Ситуация: Ты тех-лид стартапа. Команда из 5 разработчиков, каждый день 8-12 PR. Ты физически не успеваешь ревьювить всё, PR-ы висят по 2-3 дня. Качество падает, конфликты растут.
Настраиваешь два автоматических процесса:
# Каждые 5 минут — проверить открытые PR, rebase если нужно, оставить ревью
/loop 5m /babysit
# Каждый день в 9 утра — отчёт по стейл PR-ам старше 48 часов
# Через Desktop: Schedule → "Review stale PRs older than 48h, ping authors in comments"Или более конкретный workflow:
# Каждый час — проверить что тесты проходят на всех открытых PR
/loop 1h "Check all open PRs, if tests fail — leave comment with diagnosis"Результат: PR-ы ревьювятся в течение минут. Стейл ветки не копятся. Ты фокусируешься на архитектурных решениях, а не на рутине.
Кому нужно:
- Команды с активным PR-потоком (5+ PR/день)
- Тех-лиды которые не успевают ревьювить
- Проекты с CI/CD где нужен постоянный мониторинг
- Open-source мейнтейнеры с большим потоком контрибуций
Когда НЕ нужно: соло-проекты, проекты без PR-процесса, ранний прототип.
Зачем: Хуки позволяют подключить свою логику к любому моменту работы агента. Это не промпт — это гарантированное выполнение.
События:
| Событие | Когда срабатывает |
|---|---|
SessionStart |
Загрузка контекста при старте |
PreToolUse |
До каждого вызова инструмента |
PostToolUse |
После каждого вызова |
Stop |
Когда агент останавливается |
PermissionRequest |
При запросе разрешения |
SessionEnd |
Завершение сессии |
WorktreeCreate/Remove |
Создание/удаление worktree |
StopFailure |
Ошибка API (rate limit, auth) |
Примеры применения:
# Динамическая загрузка контекста при старте
SessionStart → скрипт читает актуальные данные и передаёт в промпт
# Логирование всех bash команд
PreToolUse(Bash) → записывает команду в лог
# Апрув опасных операций с телефона
PermissionRequest → POST в WhatsApp/Telegram → ждёт ответа
# Не дать агенту остановиться
Stop → пингует агента продолжать работуДокументация: https://code.claude.com/docs/en/hooks
📌 Пример из жизни
Ситуация: У тебя финтех-проект с микросервисной архитектурой. Каждый сервис имеет свои переменные окружения, свою схему БД, свои зависимости. Когда агент стартует сессию — ему нужен актуальный контекст: какие сервисы запущены, какие миграции применены, какие feature-флаги активны.
Настраиваешь хук SessionStart:
// .claude/settings.json
{
"hooks": {
"SessionStart": [{
"command": "python scripts/claude-context.py",
"timeout": 10000
}]
}
}# scripts/claude-context.py
# Собирает актуальный контекст и выводит в stdout — Claude прочитает
import subprocess, json
# Какие сервисы запущены
services = subprocess.check_output(["docker", "compose", "ps", "--format", "json"])
# Последняя миграция
migration = subprocess.check_output(["prisma", "migrate", "status"])
# Активные feature flags
flags = json.load(open("config/features.json"))
print(f"## Current Environment State")
print(f"Running services: {services.decode()}")
print(f"DB migration status: {migration.decode()}")
print(f"Active feature flags: {json.dumps(flags, indent=2)}")Или более простой пример — логирование для аудита:
{
"hooks": {
"PreToolUse": [{
"command": "python scripts/log-action.py",
"timeout": 5000
}]
}
}Результат: агент всегда работает с актуальным контекстом. Все действия логируются. Опасные операции требуют подтверждения.
Кому нужно:
- Проекты с динамическим контекстом (микросервисы, feature flags, multi-tenant)
- Команды с требованиями аудита и compliance (финтех, медтех)
- Проекты где агент работает с production-данными и нужен safety layer
- CI/CD интеграции где агент должен знать состояние pipeline
Когда НЕ нужно: простые проекты с одним сервисом и статичной конфигурацией.
Зачем: Писать и ревьювить код без ноутбука. Управлять локальными сессиями с телефона.
Как внедрить:
Мобильное приложение:
- iOS/Android → вкладка Code
Управление сессиями:
# Перенести cloud-сессию в терминал
claude --teleport
# или внутри сессии:
/teleport
# Управлять локальной сессией с телефона/веба
/remote-controlРекомендация: включить "Enable Remote Control for all sessions" в /config — тогда каждая сессия автоматически доступна удалённо.
📌 Пример из жизни
Ситуация: Ты запустил длинную миграцию с телефона по дороге на работу. Или сидишь на созвоне и хочешь быстро проверить статус агента на компьютере — не переключаясь из Zoom.
# На ноутбуке запустил тяжёлую задачу
claude> "Рефакторни все API-эндпоинты под новую схему авторизации"
# Агент работает...
# С телефона открываешь Claude Code app → видишь сессию →
# пишешь: "Покажи прогресс, какие файлы уже изменены?"
# или: "/btw не забудь обновить тесты для /api/users"Или обратный сценарий — начал с телефона, продолжил на компе:
# На телефоне: "Создай скелет нового микросервиса notification-service"
# Через 10 минут за компом:
claude --teleport # подхватил сессию с телефона в терминалКому нужно:
- Разработчики которые часто в дороге или на созвонах
- Тех-лиды которые хотят мониторить агентов с телефона
- Те кто запускает долгие задачи и хочет проверять статус без переключения контекста
Кому скорее всего не нужно: те кто работает исключительно за десктопом в офисе.
Зачем: Попробовать альтернативный подход не теряя текущий контекст. Или дать одну задачу двум веткам и сравнить результат.
Как внедрить:
# Внутри сессии
/branch
# Из CLI
claude --resume <session-id> --fork-session📌 Пример из жизни
Ситуация: Ты обсуждаешь с агентом архитектуру нового модуля уведомлений. Агент предложил использовать Redis pub/sub. Ты думаешь — а может лучше WebSocket напрямую? Не хочешь терять текущий контекст обсуждения.
# Текущая сессия — Redis подход
claude> "Давай реализуем через Redis pub/sub"
# Агент начинает...
# Делаешь ветку — WebSocket подход
/branch
claude> "А теперь давай попробуем через WebSocket напрямую, без Redis"
# Агент реализует альтернативу
# Сравниваешь два результата, выбираешь лучшийДругой сценарий — "а что если":
# Агент написал компонент с CSS Modules
# Ты хочешь посмотреть как выглядит вариант с Tailwind
/branch
claude> "Перепиши этот компонент на Tailwind вместо CSS Modules"Кому нужно:
- Архитектурные решения где хочешь сравнить два подхода
- Ситуации "а что если" без риска потерять текущую работу
- Эксперименты с разными технологиями/библиотеками для одной задачи
Кому скорее всего не нужно: линейная разработка без экспериментов.
Зачем: Задать быстрый вопрос пока агент работает, не прерывая его.
Как внедрить:
/btw что такое X?
Агент ответит в сторонке и продолжит основную задачу.
📌 Пример из жизни
Ситуация: Агент пишет сложный модуль парсинга CSV-файлов. Ты параллельно читаешь его код и видишь незнакомую конструкцию. Не хочешь прерывать — он в процессе.
claude> "Напиши парсер CSV с поддержкой кастомных разделителей и экранирования"
# Агент работает, пишет код...
/btw почему ты используешь генератор вместо обычного массива?
# Агент быстро объясняет: "Генератор не загружает весь файл в память —
# для файлов в 500MB это критично" — и продолжает основную задачу
/btw а TextDecoder поддерживается в Node 16?
# Быстрый ответ, основная работа не прерываетсяКому нужно:
- Те кто учится на коде агента и хочет понимать решения в реальном времени
- Длинные сессии где агент работает 5-10 минут и ты хочешь задать уточнение
- Ситуации "вспомнил ещё кое-что" посреди генерации
Кому скорее всего не нужно: короткие сессии где проще дождаться конца и спросить.
Зачем: Дать агенту "глаза" — способность видеть результат своей работы и итерировать. Ключевой принцип: агент без браузера не может сделать хороший фронтенд, так же как инженер без браузера.
Как внедрить:
Установить расширение: https://code.claude.com/docs/en/chrome
Работает в Chrome и Edge. После установки — агент сам запускает сервер, открывает браузер, видит результат, итерирует.
📌 Пример из жизни
Ситуация: Ты просишь агента сверстать лендинг по макету из Figma. Без расширения — агент пишет HTML/CSS вслепую, ты вручную проверяешь и говоришь "кнопка слишком большая, отступ не тот". С расширением — агент сам видит результат.
claude> "Сверстай hero-секцию: заголовок, подзаголовок, CTA-кнопка, фоновый градиент.
Макет: https://figma.com/file/xxx"Что происходит с расширением:
- Агент пишет HTML + CSS
- Запускает
npm run dev - Открывает Chrome → делает скриншот страницы
- Анализирует: "Кнопка не отцентрирована, добавляю
margin: 0 auto" - Перезагружает → делает новый скриншот
- "Теперь ОК, но шрифт заголовка слишком мелкий на мобильном"
- Добавляет media query → проверяет → готово
Результат: вместо 5 итераций "ты → агент → ты → агент" — агент сам доводит до пикселя.
Кому нужно:
- Любая фронтенд-разработка: React, Vue, Svelte, plain HTML
- Вёрстка по макетам (Figma, Sketch)
- Исправление визуальных багов ("на мобильном съезжает", "в Safari по-другому")
- CSS-анимации и интерактивные элементы
Когда НЕ нужно: бэкенд-проекты, CLI-утилиты, библиотеки без UI.
Зачем: Встроенный браузер в Desktop app для автоматического запуска и тестирования веб-серверов — без ручной настройки.
Документация: https://code.claude.com/docs/en/desktop#preview-your-app
📌 Пример из жизни
Ситуация: Ты работаешь в Claude Code Desktop и пишешь React-приложение. Вместо того чтобы переключаться между Desktop и Chrome — встроенный preview показывает результат прямо в окне Claude.
claude> "Создай форму регистрации с валидацией полей"
# Агент пишет код → автоматически запускает dev server →
# встроенный preview показывает результат прямо в Desktop app →
# агент видит результат и итерируетРаботает как Chrome Extension (#10), но без установки расширения — всё внутри Desktop.
Кому нужно:
- Пользователи Claude Code Desktop (не CLI) с фронтенд-проектами
- Те кто хочет "всё в одном окне" без переключения
- Быстрое прототипирование — увидеть результат мгновенно
Альтернатива: если работаешь в CLI — используй Chrome Extension (#10) вместо этого.
Зачем: По дефолту каждый запуск claude -p ищет CLAUDE.md, settings, MCPs — это лишняя работа для non-interactive usage. --bare отключает автопоиск.
Как внедрить:
claude -p --bare --system-prompt "..." --mcp-config ./mcp.json "твоя задача"Anthropic планирует сделать --bare дефолтом в будущих версиях. Сейчас — opt-in.
📌 Пример из жизни
Ситуация: Ты интегрировал Claude Code в CI/CD pipeline. На каждый PR автоматически запускается код-ревью через claude -p. Проблема: каждый запуск тратит 5-10 секунд на поиск и загрузку CLAUDE.md, settings, подключение MCP серверов — это лишнее для скриптового вызова.
# Было (медленно — 12 сек на старт):
claude -p "Review this diff: $(git diff main...HEAD)"
# Стало (быстро — 1-2 сек на старт):
claude -p --bare \
--system-prompt "You are a code reviewer. Focus on bugs, security, performance." \
"Review this diff: $(git diff main...HEAD)"Более сложный пример — pipeline генерации документации:
#!/bin/bash
# generate-docs.sh — запускается в CI на каждый merge в main
for file in src/api/*.ts; do
claude -p --bare \
--system-prompt "Generate JSDoc for the given TypeScript file. Output only the updated file." \
"$(cat $file)" > "${file}.documented"
doneРезультат: CI-шаг вместо 2 минут занимает 20 секунд. Чистый скриптовый вызов без overhead.
Кому нужно:
- CI/CD интеграции (GitHub Actions, GitLab CI, Jenkins)
- Скрипты и пайплайны которые вызывают Claude Code десятки/сотни раз
- SDK-usage: свои инструменты поверх Claude Code CLI
- Batch-обработка файлов где каждый вызов должен быть быстрым
Когда НЕ нужно: интерактивная работа в терминале — там CLAUDE.md и MCPs нужны.
Зачем: Дать агенту доступ к нескольким репозиториям в одной сессии.
Как внедрить:
# При запуске
claude --add-dir ../другой-репо
# Внутри сессии
/add-dir ../другой-репоДля команды — добавить в settings.json:
{
"additionalDirectories": ["../shared-lib", "../api"]
}Документация: https://code.claude.com/docs/en/cli-reference
📌 Пример из жизни
Ситуация: Типичная архитектура стартапа — три репозитория:
~/projects/
├── frontend/ # React SPA
├── backend/ # Node.js API
└── shared-types/ # TypeScript типы, общие для обоих
Ты меняешь API-эндпоинт в backend/ и нужно обновить типы в shared-types/ и вызов в frontend/. Без --add-dir — три отдельные сессии, ручная координация.
cd ~/projects/backend
claude --add-dir ../shared-types --add-dir ../frontend
claude> "Добавь поле `avatar_url` к User:
1. Обнови тип в shared-types/src/user.ts
2. Добавь поле в API-ответ backend/src/routes/users.ts
3. Покажи аватар в frontend/src/components/UserProfile.tsx"Агент видит все три репо и делает согласованные изменения в одной сессии.
Другой пример — монорепо с Turborepo/Nx:
cd packages/web
claude --add-dir ../api --add-dir ../sharedКому нужно:
- Мультирепозиторные архитектуры (frontend + backend + shared)
- Монорепозитории с пакетами которые зависят друг от друга
- Ситуации где изменение в одном месте требует обновления в другом
- Микросервисы с общим контрактом (protobuf, OpenAPI schema)
Когда НЕ нужно: один репозиторий, самодостаточные проекты.
Зачем: Запустить Claude Code с кастомным system prompt и конкретным набором инструментов. Мощный примитив для создания специализированных агентов под конкретные задачи.
Как внедрить:
Создать файл .claude/agents/my-agent.md:
---
name: my-agent
description: Что делает этот агент
tools: Bash, Read, Write
model: sonnet
---
Ты специализированный агент для...Запустить:
claude --agent=my-agentДокументация: https://code.claude.com/docs/en/sub-agents
📌 Пример из жизни
Ситуация: В твоей команде есть повторяющиеся задачи: ревью SQL-миграций, генерация API-документации, создание компонентов по шаблону. Каждый раз объяснять агенту контекст — потеря времени. Кастомные агенты решают это.
Пример — агент для ревью SQL-миграций:
# .claude/agents/sql-reviewer.md
---
name: sql-reviewer
description: Ревью SQL-миграций на безопасность и производительность
tools: Read, Bash
model: sonnet
---
Ты эксперт по PostgreSQL миграциям. При получении миграции:
1. Проверь обратимость (есть ли DOWN migration)
2. Проверь блокировки: ALTER TABLE на больших таблицах без CONCURRENTLY — красный флаг
3. Проверь индексы: новые колонки с WHERE-запросами должны иметь индекс
4. Проверь дефолты: NOT NULL без DEFAULT на существующей таблице = downtime
## Non-Negotiable
- Если найден blocking ALTER — вывести WARNING с предложением safe-версии
- Всегда показывать estimated lock time для каждой операцииИспользование:
claude --agent=sql-reviewer
> "Проревьюй миграции в db/migrations/2026-03-*"Ещё пример — агент для создания React-компонентов:
# .claude/agents/component-factory.md
---
name: component-factory
description: Создаёт React-компонент по шаблону проекта
tools: Read, Write, Bash
---
Создай React-компонент. Обязательно:
1. TypeScript, named export, no default export
2. Стили через CSS Modules (.module.css)
3. Storybook story рядом (ComponentName.stories.tsx)
4. Unit test рядом (ComponentName.test.tsx)
5. Barrel export через index.tsКому нужно:
- Команды со стандартизированными процессами (ревью, генерация, проверки)
- Проекты с шаблонами: "каждый новый модуль выглядит так"
- Компании с domain-specific правилами (финтех, медтех, gamedev)
- Онбординг: новый разработчик запускает агента вместо чтения 50 страниц docs
Когда НЕ нужно: одноразовые задачи, прототипирование, маленькие проекты без шаблонов.
Как внедрить:
- CLI:
/voice→ держать пробел - Desktop: кнопка голоса
- iOS: включить диктовку в настройках системы
📌 Пример из жизни
Ситуация: Ты на диване с ноутбуком, думаешь над архитектурой. Проще проговорить мысль голосом, чем печатать длинный промпт.
/voice
# Держишь пробел и говоришь:
# "Мне нужен модуль нотификаций. Он должен поддерживать три канала:
# email через SendGrid, push через Firebase, и SMS через Twilio.
# Каждый канал — отдельный адаптер за единым интерфейсом.
# Очередь на Redis, retry с exponential backoff."Агент получает текст и начинает работу. Быстрее чем печатать 5 предложений.
Ещё удобно для описания багов:
/voice
# "На странице профиля, если юзер не загрузил аватар,
# показывается broken image вместо дефолтной иконки.
# Это только на мобильном разрешении, на десктопе норм."Кому нужно:
- Те кто предпочитает думать вслух
- Длинные, описательные промпты (баг-репорты, архитектурные решения)
- Работа с мобильного приложения
Кому скорее всего не нужно: те кто печатает быстрее чем говорит, работа в шумном офисе.
Зачем: Вместо одного generic агента — команда специалистов. Каждый skill — строго одна роль. Ключевой принцип: явные "когнитивные режимы" дают предсказуемый результат.
Установка (одна команда в Claude Code):
Install gstack: run `git clone https://github.com/garrytan/gstack.git ~/.claude/skills/gstack && cd ~/.claude/skills/gstack && ./setup`
Режимы:
| Команда | Роль | Что делает |
|---|---|---|
/plan-ceo-review |
Founder/CEO | Находит 10-star продукт внутри запроса |
/plan-eng-review |
Eng Manager | Архитектура, диаграммы, edge cases |
/review |
Paranoid Staff Eng | Баги которые проходят CI но ломают прод |
/ship |
Release Engineer | sync + tests + PR одной командой |
/browse |
QA Engineer | Headless Chromium, ~100ms, видит UI |
/qa |
QA Lead | Diff-aware: читает git diff, тестирует затронутые страницы |
/retro |
Eng Manager | Командная ретроспектива с метриками |
Репозиторий: https://github.com/garrytan/gstack
📌 Пример из жизни
Ситуация: Ты строишь B2B SaaS. Новая фича — dashboard с аналитикой. Хочешь пройти полный цикл от идеи до PR, используя специализированные роли.
Шаг 1 — Product review:
/plan-ceo-review
> "Dashboard аналитики: графики revenue, churn, MRR. Фильтры по дате и сегменту."
# CEO-mode: "Убери churn с главного экрана — это пугает.
# Добавь 'Net Revenue Retention' — это показывает рост.
# Первый экран должен вызывать 'wow, мы растём'."Шаг 2 — Engineering review:
/plan-eng-review
# Eng Manager: рисует архитектуру, находит edge cases:
# "Что если данных за период нет? Пустой график или сообщение?
# Фильтр по дате: клиентский или серверный? При 100k записей — только серверный."Шаг 3 — Реализация + ревью:
# Пишешь код...
/review
# Paranoid Staff Eng: "Ты вычисляешь MRR на клиенте суммируя все subscriptions.
# При 10k подписок это 2 секунды блокировки UI.
# Перенеси в SQL-агрегацию или Web Worker."Шаг 4 — QA + Ship:
/qa # Тестирует затронутые страницы в headless browser
/ship # Собирает, прогоняет тесты, создаёт PRРезультат: полный pipeline от продукт-мышления до PR, каждый этап — специализированный агент.
Кому нужно:
- Продуктовые команды где важен и UX и качество кода
- Стартапы где один человек = CEO + CTO + IC: gstack даёт "виртуальную команду"
- Проекты с фронтендом где важно визуальное QA (headless browser)
- Команды практикующие structured review process
Когда НЕ нужно: чистый бэкенд без UI, маленькие утилиты, one-off скрипты.
Зачем: С v2.0.0 thinking скрыт по умолчанию. Для дебага и понимания решений агента — включить явно.
Как включить:
В settings.json:
{
"alwaysThinkingEnabled": true
}Или в сессии: Ctrl+O → transcript mode.
Управление глубиной thinking:
/effort low|medium|high
📌 Пример из жизни
Ситуация: Агент делает что-то странное — рефакторит файл который ты не просил, или выбирает непонятное решение. Без thinking — чёрный ящик, непонятно почему.
# Без thinking:
claude> "Оптимизируй запрос к БД в users.service.ts"
# Агент молча переписывает 3 файла, меняет ORM-вызовы, добавляет кэш.
# Ты: "Зачем кэш? Я просил только запрос оптимизировать!"
# С thinking (alwaysThinkingEnabled: true):
claude> "Оптимизируй запрос к БД в users.service.ts"
# 💭 Thinking: "Запрос users.service.ts:42 делает N+1 — для каждого user
# загружает orders отдельным запросом. Могу решить через JOIN, но
# этот же запрос используется в cache-layer (users.cache.ts),
# который ожидает flat user object без orders. Если добавлю JOIN,
# сломаю кэш. Два варианта:
# 1. JOIN + обновить кэш-слой
# 2. Eager loading через ORM relation
# Вариант 2 проще и не ломает контракт."
# Теперь ты понимаешь ЧТО и ПОЧЕМУ он делает.Управление глубиной thinking в зависимости от задачи:
/effort low # Быстрые задачи: "переименуй переменную", "добавь import"
/effort medium # Стандарт: фичи, рефакторинг, баги
/effort high # Сложные задачи: архитектура, security-audit, дебаг race conditionКому нужно: всем. Это базовая настройка для понимания и контроля агента:
- Дебаг неожиданного поведения — понять почему агент принял конкретное решение
- Обучение — учиться на рассуждениях агента (особенно junior-разработчикам)
- Ревью — убедиться что агент правильно понял задачу до того как он напишет 500 строк кода
- Сложные задачи — architectural decisions, security, performance optimization
/effort полезен всем: не тратить compute на тривиальные задачи, максимально вкладываться в сложные.
Зачем: CLAUDE.md — главный инструмент настройки поведения агента. Загружается автоматически.
Структура:
## Project Overview
Краткое описание проекта
## Code Standards
- Never typecast. Never use `as`
- [другие стандарты]
## Architecture
Ключевые решения которые не нужно переизобретать
## Workflow
Как работаем в этом проектеHTML-комментарии <!-- --> в CLAUDE.md скрыты от агента при автозагрузке, но видны при явном чтении через Read tool. Используй для заметок себе.
📌 Пример из жизни
Ситуация: У тебя Next.js e-commerce проект. Без CLAUDE.md каждая сессия начинается с нуля — агент не знает структуру проекта, конвенции, архитектурные решения. Ты объясняешь одно и то же снова и снова.
С CLAUDE.md — агент стартует с полным контекстом:
# CLAUDE.md
## Project Overview
E-commerce на Next.js 14 (App Router) + Prisma + PostgreSQL + Stripe.
Монорепо на Turborepo: apps/web, apps/admin, packages/shared.
## Code Standards
- Never typecast. Never use `as` — используй Zod для runtime-валидации
- Все API-ручки через Route Handlers (app/api/), не Pages API
- Стили: Tailwind CSS, никаких CSS-in-JS
- Состояние: Zustand для клиента, React Query для серверных данных
- Формы: react-hook-form + zod resolver
## Architecture
- Auth: NextAuth.js с JWT strategy, middleware в middleware.ts
- Платежи: Stripe Checkout → webhook в /api/webhooks/stripe
- Изображения: S3 + CloudFront, оптимизация через next/image
- Emails: React Email + Resend
## Workflow
- Ветки: feature/<name>, fix/<name>
- Коммиты: Conventional Commits (feat:, fix:, chore:)
- Перед PR: `pnpm lint && pnpm test && pnpm build`
- Деплой: Vercel, preview на каждый PR
## Known Issues
<!-- Заметка для себя: не показывать агенту автоматически -->
<!-- TODO: мигрировать с next-auth v4 на v5 после стабилизации -->
- Stripe webhook иногда дублирует события — есть idempotency check в lib/stripe.ts
- На Safari анимация корзины лагает — известный CSS transform багРезультат: каждая новая сессия — агент уже знает:
- Какой стек и почему именно он
- Какие паттерны использовать (Zod, не as; Zustand, не Redux)
- Как устроена авторизация и платежи
- Какие баги известны (чтобы не "чинить" их заново)
Кому нужно: абсолютно всем кто использует Claude Code больше одной сессии:
- Любой проект — от pet-project до enterprise: CLAUDE.md экономит 2-5 минут на каждую сессию
- Команды — единые стандарты для всех кто запускает агента
- Сложные архитектуры — агент не будет "изобретать" то что уже решено
- Онбординг — новый разработчик читает CLAUDE.md и понимает ключевые решения
Это самый важный файл в настройке Claude Code. Всё остальное — оптимизация поверх.
Главный тезис: слабые результаты агента почти всегда проблема harness (окружения), а не модели. Это красная нить через весь гайд — Never use as, структура Skills с Non-Negotiable критериями, worktrees, hooks — всё это harness engineering в разных формах.
Определение: harness engineering — практика формирования окружения вокруг агента так, чтобы он работал предсказуемо. Пересекается с context engineering, evaluation, observability, оркестрацией и safe autonomy.
📌 Пример из жизни
Ситуация: Ты жалуешься: "Агент генерирует плохой код, не следует стандартам, забывает тесты". Интуиция подсказывает — сменить модель или prompt. Harness engineering говорит: проблема не в модели.
До (плохой harness):
Ты: "Напиши авторизацию"
Агент: *пишет что-то... каждый раз по-разному*
Ты: "Нет, не так! Используй JWT, не sessions!"
Агент: *переписывает... забывает refresh token*
Ты: "Добавь refresh token!"
# 5 итераций... результат посредственный
После (хороший harness):
# CLAUDE.md
## Auth
- JWT с access + refresh tokens
- Access token: 15 min, refresh: 7 days
- Хранение: httpOnly cookies, не localStorage
- Middleware: app/middleware.ts, проверяет access token
# .claude/skills/auth-module.md
## Non-Negotiable Acceptance Criteria
- [ ] Access token expires in 15 min
- [ ] Refresh token expires in 7 days
- [ ] Tokens stored in httpOnly secure cookies
- [ ] /auth/refresh endpoint exists and tested
- [ ] Middleware rejects expired tokens with 401Ты: "Напиши авторизацию"
Агент: *читает CLAUDE.md + skill → точно знает ЧТО и КАК*
# 1 итерация, предсказуемый результат
Аналогия: harness engineering = дорожная разметка. Без разметки — опытный водитель доедет, но каждый раз по разной траектории. С разметкой — даже новичок едет предсказуемо.
Кому нужно: абсолютно всем — это фундамент, а не фича:
- Это не отдельный инструмент, а мышление: "если агент делает не то — проблема в моём окружении"
- Статьи ниже — обязательное чтение для любого кто хочет получить максимум от AI-агентов
- Применимо к любому стеку, любому размеру проекта
| Статья | Суть |
|---|---|
| Effective harnesses for long-running agents | Initializer agents, init.sh, self-verification, handoff artifacts через много контекстных окон |
| Claude Code: Best practices for agentic coding | Repo structure, checkpoints, validation, delegation |
| Writing effective tools for agents | Tool interfaces которые модель вызывает правильно и безопасно |
| Effective context engineering | Context window как рабочий бюджет памяти, не помойка |
| Building effective agents | Workflows, agents, tools — когда структура бьёт сырой промпт |
| Статья | Суть |
|---|---|
| Writing a good CLAUDE.md | Дурабельные repo-local инструкции которым агент следует повторно |
| Skill Issue: Harness Engineering | Конкретный аргумент: слабые результаты = проблема harness |
| 12 Factor Agents | Принципы для production агентов: explicit prompts, state ownership, pause-resume |
| Context Engineering for AI Agents (Manus) | KV-cache locality, tool masking, filesystem memory |
Полный курированный список: https://github.com/walkinglabs/awesome-harness-engineering
Зачем: MCP (Model Context Protocol) — протокол который даёт Claude Code доступ к внешним инструментам. Без MCP агент умеет: читать/писать файлы, bash, git. С MCP — подключается к базам данных, удалённым серверам, браузерам, документации и любым API.
Принцип: один MCP-сервер = один источник данных или инструмент. Агент сам решает когда вызвать нужный MCP на основе контекста задачи.
Как подключить MCP:
# Через CLI
claude mcp add <имя> -- <команда запуска>
# Или в .claude/settings.json
{
"mcpServers": {
"имя-сервера": {
"command": "npx",
"args": ["-y", "@package/mcp-server"]
}
}
}Документация: https://code.claude.com/docs/en/mcp
Зачем: Claude Code обучен на данных с конкретной датой среза. Он не знает про новые API, breaking changes, обновлённые best practices. Context7 подтягивает актуальную документацию прямо из официальных источников библиотек — в реальном времени, для конкретной версии.
Установка:
claude mcp add context7 -- npx -y @upstash/context7-mcp@latestИспользование:
Добавить use context7 в промпт:
Создай middleware для FastAPI с JWT-авторизацией. use context7
Агент автоматически:
- Определяет что нужна документация FastAPI
- Подтягивает актуальные docs для текущей версии
- Пишет код на основе реальных API, а не памяти
📌 Пример из жизни
Ситуация: Ты используешь Selenium 4.x для парсинга. В Selenium 4 изменился API — find_element_by_xpath() стал find_element(By.XPATH, ...). Без Context7 агент может написать старый синтаксис (он видел его чаще в обучающих данных). С Context7 — подтянет актуальный API.
# Без context7:
driver.find_element_by_xpath("//div[@class='price']") # deprecated с Selenium 4
# С context7:
driver.find_element(By.XPATH, "//div[@class='price']") # актуальный APIКому нужно: всем — это базовый MCP. Особенно если работаешь с часто обновляемыми библиотеками (фреймворки, ORM, облачные SDK).
Репозиторий: https://github.com/upstash/context7
Зачем: Дать агенту SSH-доступ к серверам. Агент может: выполнять команды, читать логи, проверять статус сервисов, управлять Docker-контейнерами, делать бэкапы — всё через естественный язык.
Установка:
npm install -g mcp-ssh-manager
claude mcp add ssh-manager -- npx mcp-ssh-manager
# Добавить сервер
ssh-manager server add
# → имя: production
# → хост: 192.168.1.100
# → пользователь: deploy
# → ключ: ~/.ssh/id_rsaВозможности (37+ инструментов):
| Категория | Что умеет |
|---|---|
| Команды | Выполнение любых shell-команд на удалённом сервере |
| Мониторинг | CPU, RAM, диск, статус сервисов |
| Docker | Список контейнеров, логи, restart, stats |
| Файлы | Upload/download файлов между локальной машиной и сервером |
| БД | Дамп/восстановление MySQL, PostgreSQL, MongoDB |
| Безопасность | Анализ логов, блокировка IP через iptables/ufw |
📌 Пример из жизни
Ситуация: Ты DevOps/бэкенд-разработчик. Парсер на продакшене упал в 3 ночи. Утром нужно понять что произошло, починить и перезапустить.
claude> "Подключись к серверу production.
Покажи логи парсера за последние 2 часа.
Найди ошибки и объясни что случилось."
# Агент:
# 1. SSH на production
# 2. tail -n 500 /var/log/parser/error.log
# 3. Анализирует: "OLX заблокировал IP в 03:17. Rate limit exceeded.
# Прокси-ротация не сработала — файл proxies.txt пустой."
# 4. Предлагает: "Обновить список прокси и перезапустить парсер"
claude> "Перезапусти парсер и покажи что он работает"
# docker restart parser && docker logs --tail 20 parserБолее продвинутый пример — защита сервера:
claude> "Проанализируй /var/log/auth.log за последние сутки.
Найди подозрительные IP с брутфорсом.
Заблокируй их через ufw."
# Агент:
# 1. grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -rn
# 2. "Найдено 3 IP с 500+ попытками: 45.33.x.x, 91.12.x.x, 185.7.x.x"
# 3. ufw deny from 45.33.x.x && ufw deny from 91.12.x.x && ...Кому нужно:
- DevOps и сисадмины которые управляют серверами
- Бэкенд-разработчики с доступом к staging/production
- Проекты с Docker на удалённых серверах
- Мониторинг и инцидент-менеджмент
Когда НЕ нужно: локальная разработка без серверов, фронтенд-проекты.
- Используй отдельного пользователя с ограниченными правами
- Никогда не давай root-доступ
- Начни с read-only команд (логи, статус)
- Используй SSH-ключи, не пароли
- На production — только после тестирования на staging
Репозиторий: https://github.com/bvisible/mcp-ssh-manager
Зачем: Агент подключается к PostgreSQL и может: выполнять SQL-запросы, исследовать схему, анализировать производительность, помогать с миграциями. Вместо того чтобы копировать запросы между терминалом и Claude — агент работает с БД напрямую.
Установка:
# Базовый вариант (read-only по умолчанию)
claude mcp add postgres -- npx -y @modelcontextprotocol/server-postgres \
"postgresql://user:pass@localhost:5432/mydb"
# Или продвинутый с анализом производительности
npm install -g @henkey/postgres-mcp-serverВозможности:
| Функция | Описание |
|---|---|
| Schema exploration | Список таблиц, колонок, типов, связей |
| SQL-запросы | SELECT, INSERT, UPDATE (если разрешено) |
| EXPLAIN анализ | Показать план выполнения запроса |
| Индексы | Предложить оптимальные индексы |
| Миграции | Помощь с генерацией миграций |
| Здоровье БД | Размер таблиц, мёртвые строки, bloat |
📌 Пример из жизни
Ситуация: Ты работаешь над парсером недвижимости. Данные сохраняются в PostgreSQL. Нужно понять структуру данных, найти дубликаты, оптимизировать медленный запрос.
claude> "Покажи схему таблицы properties — какие поля, типы, индексы"
# Агент: SELECT * FROM information_schema.columns WHERE table_name = 'properties'
# "Таблица properties: id, url, price, area, rooms, address, source, created_at, ...
# Индексы: primary key на id, нет индекса на url — это проблема для дедупликации"
claude> "Найди дубликаты объявлений по URL"
# SELECT url, COUNT(*) as cnt FROM properties GROUP BY url HAVING COUNT(*) > 1 ORDER BY cnt DESC
# "Найдено 847 дубликатов. Топ: olx.ua/d/obyavlenie/... — 12 копий"
claude> "Почему запрос поиска по районам медленный?"
# EXPLAIN ANALYZE SELECT * FROM properties WHERE address ILIKE '%Шевченковский%'
# "Sequential scan на 500k строк. Нужен GIN-индекс для text search:
# CREATE INDEX idx_properties_address_gin ON properties USING gin(address gin_trgm_ops)"Кому нужно:
- Проекты с PostgreSQL где нужно часто исследовать данные
- Дебаг парсеров — проверить что данные сохраняются правильно
- Оптимизация запросов без переключения между IDE и psql
- Миграции и рефакторинг схемы
Когда НЕ нужно: проекты без БД, или когда хватает обычного psql/pgAdmin.
- По умолчанию включай read-only режим
- Для production — создай отдельного пользователя с SELECT-only правами
- Write-доступ — только для dev/staging
Репозиторий: https://github.com/modelcontextprotocol/servers/tree/main/src/postgres
Зачем: Объединить SSH Manager + PostgreSQL MCP + знание инфраструктуры в один Skill. Агент работает как junior DevOps: мониторит, диагностирует, чинит — но по строгим правилам.
Структура:
# .claude/skills/devops.md
---
name: devops
description: Диагностика и управление серверной инфраструктурой
---
## Skill Purpose
Диагностика проблем, мониторинг здоровья инфраструктуры, безопасное
выполнение операций на серверах через SSH Manager MCP.
## Instructions
1. Перед ЛЮБОЙ операцией — сначала проверь текущее состояние (статус, логи)
2. Для диагностики — используй read-only команды
3. Для изменений — сначала покажи план, дождись подтверждения
4. После изменений — проверь что всё работает
## Non-Negotiable Acceptance Criteria
- [ ] Никогда не выполнять rm -rf, DROP DATABASE, или деструктивные команды без явного подтверждения
- [ ] Всегда сначала диагностика, потом действие
- [ ] Логировать каждую выполненную команду на сервере
- [ ] Перед перезапуском сервиса — проверить что нет активных соединений/транзакций
- [ ] После любого изменения — верификация что сервис работает (health check)
## Output
Структурированный отчёт:
- Что было проверено
- Что найдено (ошибки, аномалии)
- Что сделано (с командами)
- Текущий статус после изменений📌 Пример из жизни
Ситуация: Понедельник утро. Парсер не работал всё выходные. Нужно: понять причину → починить → убедиться что данные не потеряны → перезапустить.
claude> "Продиагностируй почему парсер не работал с пятницы"
# Агент (используя SSH + PostgreSQL MCP):
# 1. docker ps -a → парсер в статусе "Exited (137)" с пятницы 23:45
# 2. docker logs parser --since 72h → OOM Kill (Out of Memory)
# 3. SELECT COUNT(*), MAX(created_at) FROM properties → последняя запись: пятница 23:44
# 4. free -h на сервере → 95% RAM занято Redis кэшем
#
# Отчёт:
# - Причина: OOM Kill — Redis съел всю память, Docker убил парсер
# - Потеряно: ~48 часов парсинга (с пятницы 23:45 до сейчас)
# - Рекомендация: ограничить Redis maxmemory, добавить restart: always в docker-compose
claude> "Исправь и перезапусти"
# 1. docker exec redis redis-cli CONFIG SET maxmemory 512mb
# 2. docker exec redis redis-cli CONFIG SET maxmemory-policy allkeys-lru
# 3. docker restart parser
# 4. sleep 10 && docker logs --tail 5 parser → "Successfully parsed 3 listings"
# 5. SELECT COUNT(*) FROM properties WHERE created_at > now() - interval '5 minutes' → 3
# ✅ Парсер работает, данные пишутсяКому нужно:
- Команды без выделенного DevOps (разработчик = и DevOps тоже)
- Стартапы где один человек и код пишет, и сервер чинит
- Проекты с Docker-инфраструктурой на VPS
- Инцидент-менеджмент: быстрая диагностика в стрессовой ситуации
Когда НЕ нужно: есть выделенный DevOps/SRE, managed infrastructure (Vercel, Railway, Heroku), или нет SSH-доступа.
| MCP-сервер | Назначение | Установка | Приоритет |
|---|---|---|---|
| Context7 | Актуальная документация библиотек | claude mcp add context7 -- npx -y @upstash/context7-mcp@latest |
🔴 Всем |
| SSH Manager | Управление серверами через SSH | npm i -g mcp-ssh-manager |
🟡 DevOps/бэкенд с серверами |
| PostgreSQL | Прямой доступ к БД | npx -y @modelcontextprotocol/server-postgres |
🟡 Проекты с PostgreSQL |
| Playwright | Управление браузером, скриншоты, тесты | claude mcp add playwright -- npx @anthropic/mcp-playwright |
🟡 Фронтенд, e2e тесты |
| GitHub | PR, issues, actions из агента | Встроен в Claude Code | 🟢 Командная разработка |
Полный каталог MCP-серверов: https://github.com/modelcontextprotocol/servers
Зачем: Запустить агента в цикл: анализ → поиск проблемы → исправление → повтор. За 30-50 итераций агент находит и исправляет то, что человек не заметил бы за неделю ручного ревью. Каждая итерация агент смотрит на код "свежими глазами" и замечает новое.
Принцип: человек после 2-й итерации устаёт и перестаёт замечать. Агент не устаёт — на 40-й итерации он так же внимателен как на 1-й.
Как внедрить:
Способ 1 — через /loop:
/loop 50 "Проанализируй код проекта. Найди одну проблему (баг, дубликат,
неоптимальность, нарушение конвенций). Исправь.
Запиши в ITERATIONS.md: что нашёл, что исправил, почему."Способ 2 — через Stop hook (агент не останавливается пока есть что улучшать):
// .claude/settings.json
{
"hooks": {
"Stop": [{
"command": "echo 'Продолжай. Найди ещё одну проблему и исправь.'",
"timeout": 5000
}]
}
}Способ 3 — через bash-скрипт (максимальный контроль):
#!/bin/bash
# overnight-refactor.sh
git checkout -b refactor/overnight-$(date +%Y%m%d)
git commit -am "checkpoint: before overnight refactoring"
for i in $(seq 1 50); do
echo "=== Итерация $i/50 ==="
claude -p "Итерация $i/50.
1. Проанализируй весь проект
2. Найди ОДНУ конкретную проблему (баг, дубликат, мёртвый код,
неоптимальный запрос, нарушение DRY/SOLID)
3. Исправь её
4. Добавь запись в ITERATIONS.md: номер, что было, что стало, почему
5. Если проблем не осталось — напиши 'DONE' и остановись"
git add -A && git commit -m "refactor: iteration $i"
# Остановиться если агент сказал DONE
grep -q "DONE" ITERATIONS.md && break
done
echo "Готово. Посмотри git log и ITERATIONS.md"📌 Пример из жизни
Ситуация: У тебя Python-бэкенд на 15k строк. Код писали 3 разных разработчика за 2 года. Стиль разный, дубликаты, устаревшие паттерны, неоптимальные SQL-запросы. Рефакторить вручную — неделя. Ты запускаешь скрипт перед сном.
Итерация 1-5: очевидное
#1: Удалил 3 неиспользуемых импорта в parsers/olx.py
#2: Заменил print() на logger.info() в 7 местах
#3: Убрал дублированную функция format_price() — была в utils.py и helpers.py
#4: Добавил timeout к requests.get() в 4 файлах (было без таймаута)
#5: Заменил bare except: на except requests.RequestException: в 6 местах
Итерация 10-20: паттерны
#12: Вынес повторяющуюся логику retry в декоратор @with_retry(max=3, backoff=2)
#15: Заменил 8 одинаковых блоков подключения к Redis на connection pool
#18: Нашёл N+1 запрос в API endpoint /properties — заменил на JOIN
Итерация 30-50: глубокие улучшения
#33: Объединил 3 похожих парсера (OLX, DOM.RIA, Lun) в абстрактный базовый класс
#41: Нашёл race condition в очереди рассылок — добавил Redis lock
#47: Оптимизировал bulk insert: вместо 1000 отдельных INSERT — один COPY
#50: DONE — критических проблем не осталось
Утром:
git log --oneline # 47 коммитов с описанием каждого изменения
cat ITERATIONS.md # полный отчёт что и почему
git diff main # весь diff для ревьюРезультат: код стал чище, быстрее, безопаснее. Каждое изменение задокументировано. Можно откатить любую итерацию отдельно.
| Что | Зачем |
|---|---|
git commit перед запуском |
Откат если всё сломалось |
| Отдельная ветка | Не трогать main |
| Коммит каждой итерации | Откат конкретного изменения |
| Тесты после (если есть) | Убедиться что ничего не сломано |
| ITERATIONS.md | Отчёт для ревью утром |
| Лимит итераций | Не бесконечно — 30-50 достаточно |
Кому нужно:
- Legacy-код который давно не рефакторили
- Проекты после нескольких разработчиков с разным стилем
- Подготовка кода к ревью или аудиту
- "Выжать максимум" из кодовой базы перед релизом
Когда НЕ нужно:
- Свежий, чистый код — агент не найдёт что улучшать после 5-й итерации
- Код без тестов и без возможности проверить — рискованно
- Когда бюджет на токены ограничен
| Ресурс | Ссылка |
|---|---|
| CHANGELOG (v2.1.78) | https://github.com/anthropics/claude-code/blob/main/CHANGELOG.md |
| Hooks | https://code.claude.com/docs/en/hooks |
| Sub-agents | https://code.claude.com/docs/en/sub-agents |
| CLI Reference | https://code.claude.com/docs/en/cli-reference |
| Chrome Extension | https://code.claude.com/docs/en/chrome |
| Remote Control | https://code.claude.com/docs/en/remote-control |
| Scheduled Tasks | https://code.claude.com/docs/en/scheduled-tasks |
| MCP Servers | https://github.com/modelcontextprotocol/servers |
| gstack | https://github.com/garrytan/gstack |
| Biome no-type-assertion | https://github.com/albertodeago/biome-plugin-no-type-assertion |
| Official Skills repo | https://github.com/anthropics/skills |
| Awesome Harness Engineering | https://github.com/walkinglabs/awesome-harness-engineering |
| Context7 | https://github.com/upstash/context7 |
| SSH Manager MCP | https://github.com/bvisible/mcp-ssh-manager |