Рабочее место не-вайбкодера по методу Spec-Driven Development: запускаем Claude Code

Рабочее место не-вайбкодера по методу Spec-Driven Development: запускаем Claude Code

Привет! Я Даниил Подольский, программист и архитектор в YADRO. Уже девять месяцев я использую методологию Spec-Driven Development (SDD) и управляю AI-агентами, которые пишут код. При этом я не называю себя вайбкодером — мой подход шире, чем просто общение с ИИ.

Что такое SDD

Spec-Driven Development (SDD) — это подход к разработке ПО, при котором процесс начинается с формальной спецификации: контрактов интерфейсов, форматов данных или архитектурных правил. Эта спецификация становится единым «источником истины» для всей команды.

Метод SDD появился ещё в 1960-х в NASA, был стандартизирован в 2000-х, а в 2025 году получил новую волну популярности благодаря внедрению больших языковых моделей (LLM) в разработку.

Как собрать рабочее место

Для настройки рабочего места SDD-разработчика понадобится:

  • Провайдер моделей ИИ.
  • AI-агент — в нашем случае Claude Code.
  • Claude Code Router — для переключения моделей и конвертации протоколов.
  • Средства управления роутером — скрипты, которые мы напишем.
  • VSCode с плагином для Claude Code в качестве основной IDE.

Также потребуется доступ к LLM. Мы будем использовать OpenCode Go — платформу с доступом к нескольким моделям. Инструкция по настройке предполагает, что у вас есть подписка на этот сервис.

Настраиваем Claude Code

Можно использовать и другие агенты — например, RooCode, OpenCode или KiloCode. Но мне удобнее работать с Claude, пока я не создам собственный агент.

Установим Claude Code через Homebrew (подходит для macOS и Linux):

brew install claude-code@latest

После установки агент потребует подписку. Чтобы обойти это, настроим конфигурацию вручную.

Создадим файл ~/.claude/settings.json. В нём нужно указать ключ доступа:

Обратите внимание на параметр ANTHROPIC_API_KEY — туда вставляется ваш персональный ключ. Указанный в примере ключ уже удалён и работать не будет.

О ключах доступа

В конфигурации можно использовать два типа ключей:

  • ANTHROPIC_AUTH_TOKEN — отправляет заголовок Authorization: Bearer. Подходит для OpenAI-совместимых API, но не все провайдеры его поддерживают. Например, OpenCode Go не принимает его для Anthropic-совместимых точек доступа.
  • ANTHROPIC_API_KEY — отправляет заголовок X-Api-Key. Это стандарт для Anthropic-совместимых API. Работает с OpenCode Go, но не поддерживается некоторыми провайдерами, например Z.AI.

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

После настройки ключа Claude Code запускается без подписки.

Добавляем Claude Code Router

Зачем нужен Claude Code Router (CCR)? Чтобы решить две задачи:

  • Подключаться к OpenAI-совместимым точкам доступа через конвертацию протокола.
  • Переключать модели «на лету» для разных проектов.

Как работает Claude Code Router

Claude Code Router — это прокси-сервер, который принимает запросы по Anthropic-протоколу и перенаправляет их нужному провайдеру, при необходимости конвертируя формат.

Команда ccr code запускает Claude Code как дочерний процесс, предварительно выставив нужные переменные окружения. Посмотреть их можно через ccr activate.

Чтобы прокси работал, сервис CCR должен быть запущен. Управлять им можно командами:

  • ccr restart — перезапустить сервис.
  • ccr status — проверить состояние.

Установим CCR:

brew install claude-code-router

Создадим конфигурацию для CCR. После этого очистим конфиг Claude Code — теперь он будет работать только через роутер, который сам задаст нужные параметры.

Пишем управляющие скрипты

Создаем обертку для заголовков запроса

Нам нужно, чтобы CCR мог определить, к какому проекту относится запрос. Но Claude Code не передаёт эту информацию напрямую.

Решение — shell-обёртка, которая добавляет заголовок X-Project-Path с путём к проекту перед запуском агента.

Запуск через обёртку:

~/.claude-code-router/routing/wrapper.sh claude

Теперь CCR получает информацию о проекте и может применить нужную модель.

Скрипт custom_router

В конфиге CCR указан путь CUSTOM_ROUTER_PATH — он должен вести к скрипту custom_router.js. Полный код я вынес в отдельный файл, но опишу его логику.

Скрипт был сгенерирован по моему запросу с помощью minimax+kilocode. Я не пишу на JavaScript — мой стек это Go, но ИИ создал рабочую заготовку, которую я минимально отредактировал.

Что делает custom_router.js:

  • Извлекает x-project-path из заголовка запроса.
  • Ищет файл .claude/model.json в директории проекта.
  • Если файл отсутствует — создаёт его со списком моделей из конфига CCR и пустым полем model.
  • Проверяет актуальность списка моделей: при расхождении обновляет файл, сохраняя значение model.
  • Если model пуст — возвращает null (режим fallback).
  • Возвращает строку вида provider,model для выбора модели.

Формат model.json:

Логирование включается через config.LOG = true. Файлы логов сохраняются в ~/.claude-code-router/logs/routing-YYYYMMDD.log.

Добавляем VSCode

VSCode используется как оболочка для агента. Я тестировал и другие IDE — IntelliJ IDEA, OpenIDE, Zed — но остановился на VSCode. У него нет явных преимуществ, но он стабильно работает в моём стеке.

Установить VSCode можно через поисковик. Важно: плагины для агента могут не ставиться без прокси. Удобно прописать HTTP-прокси в настройках редактора.

Устанавливаем плагин anthropic.claude-code и настраиваем запуск агента через нашу обёртку.

Теперь всё готово к работе.

Выбор модели для проекта — через редактирование .claude/model.json. Желаемую модель указывают в поле model. Список доступных моделей автоматически подтягивается из конфига CCR в поле models.

На сегодня всё

Мы настроили рабочее место: подключили OpenCode Go к Claude Code и научились переключать модели динамически, в зависимости от проекта. В следующей статье добавим SDD toolkit и превратим рабочее место в полноценную станцию разработчика по методу Spec-Driven Development.

Читать оригинал