zeroshot — обязательный code review для Claude Code, Codex и Copilot

· 7 мин чтения
code-review multi-agent claude-code orchestration qa
📂 Исходный код на GitHub

zeroshot — движок обязательного контроля качества для ИИ-агентов. Вы задаёте граф проверок до запуска, движок идёт по нему механически: реализация, параллельные ревьюеры приёмки и качества кода, ограниченный цикл починки, затем доставка в Git.

zeroshot — обязательный code review для Claude Code, Codex и Copilot

zeroshot — обязательный code review для Claude Code, Codex и Copilot

zeroshot решает одну проблему: ИИ-агент сам пишет код и сам же объявляет его готовым. Авторы проекта устали от агентов, которые уверяют, что сломанный код работает. Поэтому они сделали отдельный слой над агентом — слой, который агент не может пропустить.

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

Важная деталь: zeroshot не заменяет Claude Code, Codex или GitHub Copilot. Он запускает любой из них дважды — как исполнителя задачи и как ревьюера.

Граф вместо скилла

Скилл — это совет. Агент сам решает, последовать замечанию ревьюера или нет, и сам решает, когда остановиться. Граф zeroshot устроен иначе: нужные ревью и цикл починки заданы до старта, и движок следует им механически.

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

Что делает встроенный workflow software-change

  1. Рабочий агент реализует задачу.
  2. Ревьюеры приёмки и качества кода независимо проверяют результат. Они идут параллельно.
  3. Отклонённая работа уходит одному агенту починки вместе с замечаниями обоих ревьюеров. Затем она снова проходит оба ревью.
  4. Если доставка включена, принятая работа проходит настроенные шаги Git и CI.
  5. Конфликты при доставке снова уходят на починку и ревью.

Граф задаёт порядок, параллельные шаги, пути повторов и условия выхода до начала работы. Каждый запуск ограничен по времени, а все события пишутся в постоянную базу SQLite.

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

Установка

Нужен Node.js 18 или новее. Установщик ставит проверенный нативный бинарник для Linux x64/arm64, macOS x64/arm64 или Windows x64. Заодно он ставит один скилл zeroshot для Codex, GitHub Copilot и Claude Code на уровне пользователя.

npm install -g @the-open-engine-company/zeroshot

Для локального запуска нужно отдельно установить и авторизовать Codex, Claude Code или GitHub Copilot. Локальные запуски переиспользуют существующий логин агентной обвязки (harness), в том числе сессии по подписке. Требования к обвязке описаны в руководстве по установке.

Первый запуск

В примере используется Codex, а результат остаётся локальным. Рабочий агент правит файлы прямо в текущем Git worktree, поэтому начинайте с чистого worktree, выделенного под задачу.

Создайте input.json и подставьте свою задачу:

{
  "task": "Add JSON output to the status command and cover it with focused tests."
}

Создайте runtime.json. Значение YOUR_MODEL_ID замените на идентификатор модели, поддерживаемый вашим Codex CLI:

{
  "harness": "codex",
  "provider": "openai",
  "model": "YOUR_MODEL_ID",
  "effort": "high"
}

Запустите задачу. Флаг --validate-only сначала только проверяет граф, настройки запуска и входные данные:

zeroshot run \
  --title "Add JSON status output" \
  --template software-change \
  --input input.json \
  --uniform-runtime-config runtime.json

Посмотреть запуск можно в браузере:

zeroshot ui

Дальше откройте http://127.0.0.1:4173/ui/ и раздел Runs. Остановка сервера интерфейса не останавливает активные запуски. У CLI есть ещё команды zeroshot list, zeroshot status RUN_ID и zeroshot logs RUN_ID.

Другие агентные обвязки и провайдеры описаны в разделе Runtimes and connections.

Свой граф

Для каждого агента можно выбрать свою модель и свои инструкции, решить, какие шаги идут параллельно, и задать момент повтора. Так выглядит пример топологии, где после цикла ревью добавлены свои стадии:

Implementation
      ↓
Code review + acceptance review
      ↓
Bugfinder: adversarial tests
      ↓
E2E tests
      ↓
Delivery

Цикл ревью для изменений кода, граф auto-research и доставка уже встроены. Остальные стадии, их инструменты, сервисы и учётные данные, а также маршруты для починки вы определяете сами.

Посмотреть встроенный граф как отправную точку:

zeroshot template show software-change

Описание контракта графа — в graph contract. Про сервисы и зависимости — в Prepare a runtime environment.

Профили и разные модели

Профиль хранит граф вместе с его настройками запуска. Редактируйте и сохраняйте профили в разделе Profiles в браузерном интерфейсе. Можно держать отдельные профили под разные виды работы или переиспользовать один для следующей задачи.

У каждого шага может быть своя модель. Для этого вместо --uniform-runtime-config передайте --runtime-config с привязкой для каждого узла:

{
  "harness": "claude",
  "provider": "anthropic",
  "size": "medium",
  "nodes": {
    "worker": { "kind": "agent", "model": "WORKER_MODEL_ID", "effort": "high" },
    "acceptance": { "kind": "agent", "model": "REVIEW_MODEL_ID", "effort": "high" },
    "code": { "kind": "agent", "model": "REVIEW_MODEL_ID", "effort": "max" },
    "review_repair": { "kind": "agent", "model": "WORKER_MODEL_ID", "effort": "high" }
  }
}

Запуски с включённой доставкой требуют ещё привязку delivery_repair. Список названий узлов показывает команда zeroshot template show software-change. Все поля описаны в RuntimePlan reference.

Сохранённый локальный профиль my-profile используется так:

zeroshot run \
  --title "My next task" \
  --profile local:my-profile \
  --input input.json

Доставка результата

Первый результат лучше оставить локальным, а дальше выбрать режим доставки под свой процесс:

Режим Что происходит
Без флага доставки Работа остаётся локальной
--push Ветка отправляется в репозиторий
--pr Готовится pull request, который можно слить, но слияния не будет
--ship Полный путь: pull request, CI и слияние

Запуски с pull request и слиянием по умолчанию учитывают видимые замечания к pull request. Флаг --no-pr-feedback их игнорирует.

Графы выполняются локально или на своём сервере. У каждого окружения свои инструменты и своя авторизация.

Свой сервер на Docker

Если нужны собственная инфраструктура и постоянное состояние, запустите образ target. В него входят нативный движок и закреплённые версии CLI для Codex, Claude и GitHub Copilot.

docker run --detach --restart unless-stopped --name zeroshot-target \
  -p 127.0.0.1:8080:8080 \
  -v zeroshot-data:/var/lib/zeroshot \
  ghcr.io/the-open-engine/zeroshot-target:latest

zeroshot target add local --url http://127.0.0.1:8080 --direct

Сервер также отдаёт редактор профилей и просмотрщик запусков на http://127.0.0.1:8080/ui/. Про постоянное хранилище, изоляцию сети, сборку и HTTPS рассказывает руководство по образу target.

Упавший запуск с целым рабочим окружением можно перезапустить или продолжить.

Граф auto-research

Кроме основного сценария, в zeroshot есть граф auto-research. По умолчанию он делает десять итераций. Другое число задаётся положительным значением options.iterations во входных данных запуска.

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

Принятые, просто зафиксированные и прерванные результаты хранятся в .zeroshot/research. Флаг --push публикует каждую завершённую итерацию.

zeroshot template list
zeroshot template show auto-research

Правила принятия решений и требования к доказательствам описаны в разделе Execution.

Разработка

npm ci
npm run check
cargo test --workspace # Unix; Windows: powershell -NoProfile -File scripts/test-windows.ps1

Node.js собирает статичный интерфейс, отвечает за инструменты репозитория и публикацию в npm. Rust обслуживает интерфейс. Подробности — в UI development, а также в CONTRIBUTING.md, PUBLISHING.md и SECURITY.md репозитория.

Лицензия — MIT.

Источник: https://github.com/the-open-engine/zeroshot