Настройка Claude Code под собственный воркфлоу

Как часто вы даете Claude задачу, а потом сидите и ждете, пока он просит разрешения на каждый чих? Это утомляет, отвлекает и нивелирует всю прелесть работы с ИИ-ассистентом. Я знаю это чувство. И я знаю, как от него избавиться.
В этой статье я покажу, как настроить Claude под свой воркфлоу, чтобы он работал быстрее и с минимальным участием, на примере автоматической генерации Dockerfile. Мы научим его понимать контекст, использовать навыки и действовать проактивно, превращая его из "вечного стажера" в полноценного помощника.
Почему стандартного Claude недостаточно для продуктивной работы?
Представьте: вы запускаете Claude, даёте задачу — «реализуй фичу X», и он начинает работать. Через минуту просит разрешение запустить bash. Ещё через минуту — записать файл. Потом — установить зависимости. Потом снова. И снова. Тридцать подтверждений спустя вы жмёте «approve» уже не читая.
Это то, что я называю «approval fatigue» — усталость от подтверждений. Это одна из главных причин, почему многие разработчики бросают попытки интегрировать Claude глубоко в свою работу. Claude по умолчанию очень осторожен, он буквально на каждом шагу спрашивает: "Можно я сделаю вот это?". Это сделано из соображений безопасности, но для продуктивной работы такой подход не годится. Мы же хотим, чтобы он был помощником, а не вечным стажером, который боится без спроса чихнуть.
Проблема в том, что Claude не понимает ваш рабочий контекст. Он не знает, что для вас нормально, а что нет. Пока вы не научите его этому, будете постоянно отвлекаться. Моя цель — построить систему, где Claude максимально автономен в рамках чётко определённых границ.
Настройка Claude: основа автономности и эффективности
Чтобы Claude стал по-настоящему полезным инструментом, нужно научить его работать в вашем контексте. Это построение системы, которая понимает ваши задачи и цели. Я использую несколько ключевых элементов для этого:
`CLAUDE.md`: Карта проекта для ИИ
CLAUDE.md — это моя карта проекта. Этот файл Claude читает автоматически. В нём я описываю структуру проекта, основные технологии, правила написания кода, ссылки на документацию и любые другие важные детали. Это как бриф для нового члена команды, но для ИИ.
Skills: Переиспользуемые процессы и "суперспособности"
Skills — это переиспользуемые процессы, которые Claude может вызывать по названию. Это могут быть как общие "суперспособности" вроде systematic-debugging или code-review, так и специфичные для проекта навыки. Например, для генерации Dockerfile я создал отдельный skill. Подробнее о skills я писал тут.
Hooks: Автоматизация действий по событиям
Hooks — это скрипты, которые запускаются на определённые события. Это позволяет подтягивать актуальный контекст, проверять что-то или выполнять действия без моего прямого участия.
MCP-серверы: Расширение возможностей Claude
MCP-серверы расширяют Claude внешними инструментами. Например, Supabase MCP даёт прямой доступ к базе данных, а Playwright MCP позволяет управлять браузером. Они критичны, когда нужно выходить за пределы файловой системы. Почитайте про MCP Registry.
Эти элементы позволяют мне создать своего рода "песочницу" для Claude, где он может действовать самостоятельно, но в рамках заданных правил и с доступом к нужной информации. Это ускоряет работу и повышает безопасность, так как я контролирую, к чему у него есть доступ. Как я уже говорил в статье Claude + Docker — разработка в контейнере на vc.ru, использование контейнеров для Claude — это безопасно.
Пример: Автоматическая генерация Dockerfile с Claude
Давайте разберем на конкретном примере, как я настраиваю Claude для автоматической генерации Dockerfile. Это рутинная, но важная задача, которая требует внимания к деталям и знанию лучших практик.
Шаг 1: Создание `CLAUDE.md` для определения контекста
Первым делом я создаю или обновляю файл CLAUDE.md в корне проекта. В нём я описываю общие требования к Dockerfile.
# README для Claude
## Цель проекта
Этот проект состоит из нескольких микросервисов на Python (FastAPI) и Node.js (Express).
Мы используем pnpm для Node.js проектов и poetry для Python.
Все Dockerfile должны быть оптимизированы для минимального размера образа и быстрой сборки,
использовать многостадийную сборку (multi-stage builds) где это уместно.
## Общие правила для Dockerfile
1. Использовать Alpine-образы, если нет специфических требований к glibc.
2. Всегда кешировать зависимости (`COPY requirements.txt .`, `RUN pip install -r requirements.txt`).
3. Использовать `CMD` для запуска приложения, а не `ENTRYPOINT`.
4. Для Node.js использовать `pnpm install --frozen-lockfile` для установки зависимостей.
5. Для Python использовать `poetry install --no-root --no-dev`.
6. Указывать порт, на котором слушает приложение (EXPOSE).
7. Создавать отдельного пользователя для запуска приложения в контейнере.
## Специфика сервисов
* **payments-service**: Python/FastAPI. Зависимости в `pyproject.toml`. Порт 8000.
* **notifications-service**: Node.js/Express. Зависимости в `package.json`, `pnpm-lock.yaml`. Порт 3000.
* **user-auth-service**: Python/FastAPI. Зависимости в `pyproject.toml`. Порт 8080.
Этот файл становится краеугольным камнем для Claude. Он не просто "знает", что ему нужно сгенерировать Dockerfile, он понимает, какие стандарты и правила нужно соблюдать.
Шаг 2: Разработка кастомного skill для генерации Dockerfile
Я создаю skill, который умеет генерировать Dockerfile на основе предоставленной информации. Этот skill не просто пассивно ждет команду, он активно запрашивает недостающие данные, если их нет в CLAUDE.md или в промпте.
Мой dockerfile-generator skill выглядит примерно так (упрощенно):
# skills/dockerfile-generator.py
import os
def generate_dockerfile(service_name, language, framework, port, dependency_manager, build_commands, run_command):
dockerfile_content = f"""
# syntax=docker/dockerfile:1.4
# Dockerfile для сервиса {service_name}
# Базовый образ для сборки
FROM {language.lower()}:{get_base_image(language)}-alpine as builder
WORKDIR /app
# Копирование и установка зависимостей
COPY {get_dependency_files(language, dependency_manager)} ./
RUN {get_install_command(language, dependency_manager)}
# Копирование исходного кода
COPY . .
# Промежуточный образ для запуска
FROM {language.lower()}:{get_runtime_image(language)}-alpine as runner
WORKDIR /app
# Создание пользователя для безопасности
RUN addgroup --system appgroup && adduser --system --ingroup appgroup appuser
USER appuser
# Копирование артефактов сборки
COPY --from=builder /app ./
EXPOSE {port}
CMD [{run_command}]
"""
return dockerfile_content
def get_base_image(language):
return "3.10" if language.lower() == "python" else "20" # Пример версий
def get_runtime_image(language):
return "3.10-slim" if language.lower() == "python" else "20-slim"
def get_dependency_files(language, dependency_manager):
if language.lower() == "python":
return "pyproject.toml poetry.lock" if dependency_manager == "poetry" else "requirements.txt"
elif language.lower() == "node.js":
return "package.json pnpm-lock.yaml" if dependency_manager == "pnpm" else "package.json yarn.lock"
return ""
def get_install_command(language, dependency_manager):
if language.lower() == "python":
return "pip install poetry && poetry install --no-root --no-dev" if dependency_manager == "poetry" else "pip install -r requirements.txt"
elif language.lower() == "node.js":
return "npm install -g pnpm && pnpm install --frozen-lockfile" if dependency_manager == "pnpm" else "npm install --production"
return ""
# Этот skill может быть вызван через slash command или Claude сам его выберет
# @skill
# def generate_service_dockerfile(service_name: str, language: str, framework: str, port: int, dependency_manager: str, build_commands: list, run_command: str):
# """Генерирует Dockerfile для указанного микросервиса."""
# content = generate_dockerfile(service_name, language, framework, port, dependency_manager, build_commands, run_command)
# with open(f"Dockerfile.{service_name}", "w") as f:
# f.write(content)
# print(f"Dockerfile.{service_name} сгенерирован.")
Этот skill умеет запрашивать параметры, если их нет. Это значит, что мне не нужно каждый раз писать полный prompt:
/generate_service_dockerfile --service_name payments-service --language Python --framework FastAPI --port 8000 --dependency_manager poetry --run_command "uvicorn main:app --host 0.0.0.0 --port 8000"
Claude сам может понять, что ему нужен этот skill, прочитав CLAUDE.md и мой запрос.
Шаг 3: Использование `hooks` для автоматизации генерации Dockerfile
Чтобы Claude не нужно было каждый раз запускать вручную, я могу настроить hooks. Например, при создании новой папки сервиса, можно автоматически запускать генерацию Dockerfile.
// .claude/hooks.json
{
"on_directory_created": [
{
"pattern": "*/src/services/*",
"command": "claude run_skill dockerfile-generator --from-context --path $CHANGED_PATH"
}
]
}
Это, конечно, упрощенный пример, но суть такова: при создании новой папки в src/services, Claude может автоматически запускать skill dockerfile-generator, используя информацию из CLAUDE.md и название папки для определения имени сервиса. Таким образом, новый Dockerfile будет сгенерирован, как только я создам новую директорию для микросервиса.
Как это работает на практике: Автоматизация рутины
Я сижу, работаю над проектом. Мне нужно добавить три новых микросервиса: payments, notifications и user-auth. Вместо того чтобы вручную создавать Dockerfile для каждого, я просто создаю соответствующие папки и базовые файлы:
mkdir -p src/services/payments-service
touch src/services/payments-service/main.py pyproject.toml
mkdir -p src/services/notifications-service
touch src/services/notifications-service/app.js package.json pnpm-lock.yaml
mkdir -p src/services/user-auth-service
touch src/services/user-auth-service/main.py pyproject.toml
И затем, я просто говорю Claude:
/generate_dockerfiles_for_new_services
Или даже просто:
Мне нужны Dockerfile для новых сервисов в src/services. Используй информацию из CLAUDE.md.
Благодаря CLAUDE.md и настроенному skill, Claude сам:
- Идентифицирует новые папки сервисов.
- Читает
CLAUDE.md, чтобы понять, какие языки, фреймворки и правила применяются к этим сервисам. - Использует skill
dockerfile-generator, чтобы создать оптимизированныйDockerfileдля каждого сервиса. - Сохраняет их в соответствующих директориях.
Все это занимает у меня буквально минуты. Вместо того чтобы тратить часы на рутину, я могу заниматься более сложными задачами. Это смещение фокуса с механической работы на архитектуру и логику. И это именно то, ради чего я использую Claude каждый день.
Если я захочу изменить правила, например, использовать другой базовый образ или изменить директорию, я просто обновлю CLAUDE.md. Claude "переучится" на лету.
Почитайте еще про Claude: 5 шорткатов, что экономят часы, там я рассказываю про другие фишки, которые ускоряют работу. Мой рабочий сетап Claude в 2026 году — это живая, постоянно развивающаяся система, которая каждый день помогает мне и моим клиентам.
Часто задаваемые вопросы о настройке Claude
Как Claude обеспечивает безопасность при работе с файловой системой?
Claude по умолчанию работает в безопасном режиме, запрашивая подтверждение на каждое действие. Для более глубокой интеграции я использую dev контейнеры, как описано в этой статье. Это позволяет дать модели полный доступ к shell, но ограничить его изолированной средой контейнера.
Можно ли настроить Claude для работы с моими внутренними API?
Да, для этого используются MCP-серверы. Вы можете создать MCP, который будет слушать запросы от Claude и взаимодействовать с вашими внутренними API, предоставляя ему доступ к данным и функциям, которые ему нужны. Я писал про подключение Claude к БД с помощью MCP.
Сколько времени занимает настройка Claude под свой воркфлоу?
Базовая настройка с CLAUDE.md и несколькими простыми skills может занять от нескольких часов до пары дней. Более глубокая интеграция с кастомными MCP-серверами и сложными hooks может потребовать недель, но это инвестиции, которые окупаются сторицей в виде сэкономленного времени и повышения продуктивности.
Что, если у меня нет опыта программирования? Могу ли я настроить Claude?
Некоторые базовые настройки, вроде редактирования CLAUDE.md, доступны и без глубоких знаний программирования. Однако для создания кастомных skills и MCP-серверов требуются навыки разработки. Если вы хотите системно разобраться в работе с ИИ и Claude, если устали от "approval fatigue" и хотите, чтобы ваш ИИ-помощник был по-настоящему автономным и полезным, у меня есть гайд «ИИ вместо команды». Там я собрал готовые системы и команды, которые настраиваются за вечер, и которые помогут вам построить свой эффективный воркфлоу.
Как убедиться, что Claude всегда использует актуальную информацию?
Для этого я использую CLAUDE.md с актуальными данными о проекте, а также hooks, которые могут подтягивать свежие данные из внешних источников или обновлять контекст. Кроме того, активно применяю Context7 MCP, чтобы Claude использовал актуальную документацию библиотек и фреймворков.
AI-аудит
Автоматизируйте свой бизнес с AI
Напишите «Аудит» в Telegram — разберу ваши процессы и предложу конкретное решение
Написать в Telegram →