zeroshot — обязательный code review для Claude Code, Codex и Copilot
📂 Исходный код на GitHubzeroshot — движок обязательного контроля качества для ИИ-агентов. Вы задаёте граф проверок до запуска, движок идёт по нему механически: реализация, параллельные ревьюеры приёмки и качества кода, ограниченный цикл починки, затем доставка в Git.
zeroshot — обязательный code review для Claude Code, Codex и Copilot
zeroshot решает одну проблему: ИИ-агент сам пишет код и сам же объявляет его готовым. Авторы проекта устали от агентов, которые уверяют, что сломанный код работает. Поэтому они сделали отдельный слой над агентом — слой, который агент не может пропустить.
Принцип проекта звучит так: агент, который написал код, не должен решать, работает ли этот код. В zeroshot вы заранее описываете граф проверок: кто ревьюит, что должно пройти, куда возвращается отклонённая работа. Движок проходит по этому графу механически, пока ревьюеры не примут результат или не кончится лимит повторов.
Важная деталь: zeroshot не заменяет Claude Code, Codex или GitHub Copilot. Он запускает любой из них дважды — как исполнителя задачи и как ревьюера.
Граф вместо скилла
Скилл — это совет. Агент сам решает, последовать замечанию ревьюера или нет, и сам решает, когда остановиться. Граф zeroshot устроен иначе: нужные ревью и цикл починки заданы до старта, и движок следует им механически.
В граф можно добавить свои узлы — свои агенты. Например, отдельного ревьюера по безопасности, агента-багфайндера, который пишет тесты, или агента, который проверяет приложение в браузере. Для каждого узла вы выбираете модель и инструкции, решаете, какие узлы идут параллельно, и указываете, куда уходит отклонённая работа.
Что делает встроенный workflow software-change
- Рабочий агент реализует задачу.
- Ревьюеры приёмки и качества кода независимо проверяют результат. Они идут параллельно.
- Отклонённая работа уходит одному агенту починки вместе с замечаниями обоих ревьюеров. Затем она снова проходит оба ревью.
- Если доставка включена, принятая работа проходит настроенные шаги Git и CI.
- Конфликты при доставке снова уходят на починку и ревью.
Граф задаёт порядок, параллельные шаги, пути повторов и условия выхода до начала работы. Каждый запуск ограничен по времени, а все события пишутся в постоянную базу 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.