Show HN: Pairmark, race Claude Code vs. Codex on your repo, blind cross-judged Pairmark, a new open-source tool by Hemanshu Upadhyay, lets developers race Anthropic's Claude Code against OpenAI's Codex CLI on the same task in their own repository, with blind cross-judging and an evidence-backed verdict. The tool runs locally via npx pairmark, requires Node 20 or newer and git, and produces a report.html with a verdict card, receipt image, and detailed evidence tables. It aims to settle arguments about which coding agent is better by providing concrete, repo-specific comparisons. Run Claude Code and Codex on the same task in your own repo, side by side, and get a verdict backed by evidence. npx pairmark "add rate limiting to POST /api/login" One command. Two isolated worktrees. Both agents get the identical brief. You watch them work in a split screen, the same checks run in each worktree, each agent then reviews both patches blind, and you get a single report.html you can post. It runs on the subscriptions you already have. No API keys. No accounts. No server. Nothing leaves your machine except the calls the two CLIs make on their own. The receipt above is real. It comes from pairmark's own repository, where the two agents were asked to add the runs subcommand. The full report is docs/example-report.html /Hemanshu-Upadhyay/pairmark/blob/main/docs/example-report.html , and the winning patch is the runs command you can run today. Why why Quick start quick-start What you see what-you-see How a race works how-a-race-works Verdict rules verdict-rules Commands commands Options options The run directory the-run-directory Fairness fairness Safety safety Monorepos, dirty trees, dependencies monorepos-dirty-trees-dependencies Troubleshooting troubleshooting Limits limits How it was built how-it-was-built Contributing contributing Every AI native argues about which coding agent is better. Almost nobody has evidence from their own codebase, because getting it means two worktrees, two CLIs, two sets of permission flags, running the tests twice, and reading two diffs with the context of both in your head. So the argument stays an argument. pairmark turns it into a receipt. The answer it gives is not "which agent is smarter". It is "which agent did better on this task, in this repo, today, and here is exactly why". Run it ten times on ten real tasks and you have a basis for a decision. Run it once and you have something worth posting. Requirements: - Node 20 or newer, and git Claude Code https://docs.anthropic.com/en/docs/claude-code on your PATH, signed in Codex CLI https://github.com/openai/codex on your PATH, signed in- A JavaScript or TypeScript repository with at least one commit Check your setup: npx pairmark doctor Race: cd your-repo npx pairmark "your task, written the way you would brief a colleague" A browser tab opens with the live view. The terminal prints progress. When both agents finish, the checks run, the judges run, and the verdict prints with the path to the report. Writing a good task brief matters more than anything else. Say what done looks like. Name the file or function if you know it. Say what not to touch. Both agents get exactly your words plus a short working agreement see The brief how-a-race-works . Live. A split screen with one column per agent on one clock. Each column shows the agent's messages, every file it writes, every command it runs, command output when it fails, and a running count of files, commands, tokens and for Claude Code cost. A thin activity strip above each feed shows the rhythm of the run at a glance. A phase bar at the top tracks worktrees, racing, checks, judging, verdict. The verdict card. The winner, the rule that decided it, the reasons in plain sentences, and any dissent from a judge who would have picked differently. Dissent is always shown, never averaged away. The receipt. A 1200 by 630 image drawn in the page, with a download button and a copyable text summary. Task, verdict, both agents' time, files, lines, checks and judge scores, repo and commit. Made to be posted. Evidence. One table: outcome, time, files changed, each check with its duration, whether the check configuration was touched, which test files were touched, tokens in and out, reported cost, average judge score, model. Judges. One card per judge with its pick, confidence, the decisive reason, and per-patch scores on correctness, completeness, quality and safety with cited evidence. Each card says which patch that judge saw as A and which as B. Timelines. The full event feed of each agent, as it was streamed live, plus the agent's own closing summary. Patches. Everything each agent changed against the shared baseline, per file, with additions and deletions coloured. Patches that touched check configuration carry a flag. Run. CLI versions, models, exact command lines, flags, base commit, dependency strategy, and the brief both agents received. The same HTML file is the live page and the report. Live, it reads a server-sent event stream. As a report, it reads JSON embedded in the file. Nothing external is loaded, so the report works offline and as an email attachment. - Preflight. Confirms a git repository with a commit, finds claude and codex on the PATH with their versions, detects the package manager from the lockfile, and reads check commands from package.json scripts in the directory you ran from. typecheck , lint , test and build are picked up when present. The npm placeholder test script is ignored. - Run directory. .pairmark/runs/