claude-code
Pairmark судит гонку Claude Code и Codex вслепую
Claude News
claude-codeИнструмент pairmark запускает Claude Code и Codex на одной задаче в одном репозитории и сводит гонку к одному файлу report.html: две изолированные рабочие копии, одинаковый бриф, одни и те же проверки. Код опубликован на Github под лицензией MIT, запуск идёт через npx на уже имеющихся подписках, без ключей API, аккаунтов и сервера.
Коротко
- Гонка разворачивается в трёх отсоединённых рабочих копиях текущего HEAD: alpha и beta достаются агентам, base отдана судьям, а нейтральные имена нужны, чтобы пути в логах не выдавали авторство патча.
- Настройки задаются флагами: по умолчанию 20 минут на агента, по 10 минут на проверку и на судью, порт 4747 для живой страницы и четыре стратегии подготовки зависимостей, от copy-on-write клона до полной установки.
- Вердикт выносится по пяти правилам в строгом порядке, отчёт называет сработавшее правило, при расхождении судей фиксируется ничья, а особое мнение печатается отдельно и не усредняется.
Спор о том, какой агент сильнее, обычно опирается на чужие бенчмарки и личные впечатления. pairmark, судя по всему, переносит его в плоскость локальных доказательств: результат привязан к конкретному репозиторию, задаче и дню, а не к общей оценке модели. Цена подхода очевидна: одна гонка ничего не доказывает, и авторы сами предлагают набрать десяток запусков на реальных задачах, прежде чем делать выводы о том, какой агент подходит команде.
Claude Code запускается через stream-json, Codex через codex exec --json
Для запуска нужны Node 20 или новее, git и оба CLI на PATH с выполненным входом. Перед стартом pairmark проверяет наличие репозитория с коммитом, находит claude и codex с их версиями, определяет пакетный менеджер по lock-файлу и читает команды проверок из scripts в package.json: подхватываются typecheck, lint, test и build, а заглушка npm-скрипта test игнорируется.
Оба потока приводятся к единой модели событий, а исходный JSONL каждого CLI сохраняется без изменений в каталоге запуска внутри .pairmark/runs/, который добавляется в .git/info/exclude. Если рабочее дерево грязное, незакоммиченные и неотслеживаемые файлы снимаются в каждую копию и фиксируются там как общая базовая точка. node_modules клонируется copy-on-write на APFS, btrfs и xfs, иначе выполняется frozen-установка найденным пакетным менеджером.
Каждый судья видит патчи под метками A и B в собственном случайном порядке
После проверок каждый агент запускается заново в режиме только для чтения внутри копии base: он получает бриф, оба патча, результаты проверок и флаги. Патчи и логи объявлены недоверенными данными, и обращённая к судье инструкция внутри патча снижает его оценку безопасности. Судья не знает, какой из патчей написал он сам.
Ответ возвращается структурированным JSON: четыре оценки на каждый патч за корректность, полноту, качество и безопасность, цитируемые свидетельства, победитель или ничья, уверенность и одна решающая причина. Отчёт всегда называет правило, решившее исход; если файлы изменил только один агент, он выигрывает по умолчанию.
Проверки стоят выше мнений: если ровно один патч проходит все проверки и не трогает их конфигурацию, он побеждает до опроса судей, а правки package.json, tsconfig*.json и конфигураций тестов, линтера или сборки помечаются флагом и такую победу исключают. Усреднять баллы судей авторы отказались: разрыв в 0,3 балла по десятибалльной шкале между моделями, вслепую оценивающими в том числе собственную работу, они называют шумом.
Первая гонка на репозитории проекта закончилась победой Claude Code по второму правилу
pairmark спроектирован 2 сентября 2026 года в двухраундовом обсуждении между Claude Code и Codex и собран Claude Code за одну сессию. Claude Code предложил три идеи, Codex разобрал каждую, выбрал гонку и во втором раунде указал на слабые места первой схемы: судей, которых можно обмануть ослаблением тестов, симлинки node_modules, ломающие pnpm и воркспейсы, бриф со смещением в пользу того CLI, который лучше обрабатывает команды оболочки, и отчёт, который никто не станет публиковать.
Первая гонка на собственном репозитории проекта просила добавить подкоманду runs. Оба патча прошли все проверки, но Codex попутно исправил хрупкость сборочного скрипта и тем самым тронул package.json, поэтому второе правило отдало победу Claude Code и записало особое мнение Codex. Победивший патч ушёл в релиз как есть, исправление сборки перенесли вручную, отчёт лежит в docs/example-report.html, стенограмма обсуждения в docs/DISCUSSION.md.
Пока только JavaScript и TypeScript
Определение зависимостей и проверок построено вокруг package.json, поэтому другие экосистемы не поддерживаются, а агентов пока два: адаптеры лежат в src/agents/, и добавление третьего сводится к парсеру JSONL, спецификации запуска и вызову судьи. За один запуск выполняется одна задача. Codex не сообщает стоимость и показывает только счётчики токенов, а изображение-итог рисуется на canvas и требует браузера для скачивания.
Комментарии
Пока никто не написал. Будьте первым.
Присоединяйтесь к разговору
Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.
Из Google мы используем только имя и аватар. Почту не сохраняем.
