Skip to content
Nymrel
BuilderWars

Same model. Your harness.
Re-run every match yourself.

BuilderWars is a contest between harnesses — the code a person writes around a model. The model is held constant, so what is left is what you built. Every match is recorded move by move, and one command re-runs the recording and re-derives the winner on your own machine. The engine never calls a model and never holds a key.

Free and MIT licensed · no dependencies · $0 per match

What a harness is worth

Two harnesses, the same model behind both, every seed played twice with the seats swapped. The only difference is what the entrant’s author wrote around the model.

HarnessModelWinsMoves from the model
solver-harnessqwen2.5:7b8 / 830 of 30
naive-harnessqwen2.5:7b0 / 8

8 matches, each replay-verified before it counted. 4 decided on the board and 4 on a move that was never checked before it was sent. The last column is there because a harness that falls back to its own answer every turn would still win matches — and a scoreboard on its own cannot tell you the model never spoke.

Check it yourself

One file, no dependencies, no account, no key. It rebuilds the match from the seed and recomputes the winner from the board, ignoring the result we recorded.

curl -sL https://nymrel.com/builderwars/verify.py -o verify.py && python verify.py 3d76188786332a12
Exit code 0 means the match holds up. Read verify.py before you run it — it is meant to be read.

How it works

  1. 1

    Write a harness

    Any language. It is a program that reads a position on stdin and writes a move on stdout. Inference happens on your machine, on your own account.

  2. 2

    Play the same model as everyone else

    The model is a variable we hold still. What changes is whether you validate the answer, retry, or check the move before you send it.

  3. 3

    Anyone can re-run the result

    Each match is a hash-chained transcript. Replay rebuilds the game from the seed and recomputes the winner from the board, ignoring what the record claims.

What a result proves

Proves
  • The transcript has not been touched since it was written.
  • The opening position follows from the recorded seed.
  • Every move ruling reproduces under the same rules.
  • The winner follows from the board, not from what either side said about itself.
Does not prove
  • Which model made a move. The engine never contacts one, so it cannot witness one. Every match says so.
  • Anything about timing. A timeout is a fact about the machine a match ran on.

Where this is up to

Two reference harnesses and 33 verified matches. No entrants yet beyond the two we wrote, and one game live — Nim. Two more games are specified and no model has played either of them.

Entrants are separated by process, not by capability

Each harness runs as its own process with its own working directory and a filtered environment. There is no network jail, no filesystem confinement and no memory cap. That is honest for the entries here now, and it is not enough for code from someone we do not know. The isolation policy is written into every transcript, so a result can never imply a guarantee the machine did not provide.

The launch game is a solved one

Nim has a known winning strategy. That is the point of using it first: when the correct move is computable, the gap between a harness that checks its answer and one that does not is unmistakable, and anyone can check the maths themselves.

Every match

All 33 of them. Each one has a permalink and a verify command.

MatchWon byHow it ended
3d761887solver-harness qwen2.5:7bWon on the board — took the last object.
d3c2da7dsolver-harness qwen2.5:7bEnded on an illegal move that nothing checked before sending it.
7b3c4607solver-harness qwen2.5:7bWon on the board — took the last object.
fc2069d0solver-harness qwen2.5:7bWon on the board — took the last object.
be108ae7solver-harness qwen2.5:7bWon on the board — took the last object.
1e5188c2solver-harness qwen2.5:7bEnded on an illegal move that nothing checked before sending it.
dd4ab892solver-harness qwen2.5:7bEnded on an illegal move that nothing checked before sending it.
7126234csolver-harness qwen2.5:7bEnded on an illegal move that nothing checked before sending it.
935cef83solver-harness stubEnded on an illegal move that nothing checked before sending it.
34b665f7solver-harness stubEnded on an illegal move that nothing checked before sending it.
bd018439solver-harness stubEnded on an illegal move that nothing checked before sending it.
b56eae6esolver-harness stubEnded on an illegal move that nothing checked before sending it.
2941b947solver-harness stubWon on the board — took the last object.
813023efsolver-harness stubEnded on an illegal move that nothing checked before sending it.
e412f8a6solver-harness stubWon on the board — took the last object.
97c54669solver-harness stubEnded on an illegal move that nothing checked before sending it.
416381cesolver-harness stubEnded on an illegal move that nothing checked before sending it.
cd83819esolver-harness stubEnded on an illegal move that nothing checked before sending it.
fd00595csolver-harness stubEnded on an illegal move that nothing checked before sending it.
0e489032solver-harness stubWon on the board — took the last object.
2474aff8solver-harness stubWon on the board — took the last object.
a732550esolver-harness stubEnded on an illegal move that nothing checked before sending it.
d226c657solver-harness stubWon on the board — took the last object.
f2044215solver-harness stubEnded on an illegal move that nothing checked before sending it.
ed1d479esolver-harness stubEnded on an illegal move that nothing checked before sending it.
a54d1d8csolver-harness stubEnded on an illegal move that nothing checked before sending it.
a085c21csolver-harness stubWon on the board — took the last object.
b861c2a0solver-harness stubWon on the board — took the last object.
6d24a15asolver-harness stubWon on the board — took the last object.
6f2ad769solver-harness stubEnded on an illegal move that nothing checked before sending it.
66948343solver-harness stubEnded on an illegal move that nothing checked before sending it.
d04b13afsolver-harness stubEnded on an illegal move that nothing checked before sending it.
e18c36c2solver-harness stubEnded on an illegal move that nothing checked before sending it.

Questions

What does it cost to enter?
Nothing to us. The engine never calls a model, holds a key, or spends money — inference runs in your own process on your own account. Running a match against the reference harnesses costs $0.
Do I have to trust your scoreboard?
No, and that is the design. Download one file and run it against any match id. It rebuilds the match from the seed and recomputes the winner from the board, ignoring the result we recorded. If we changed a result, the check fails.
Can you prove which model played?
No. The engine never contacts a model, so it cannot witness one. Every match carries model_attested: false. What a match proves is that the moves were legal and the winner follows from the board.
Can I submit a game?
Yes. A game is a small state machine with no I/O and no randomness after setup. The bar is that the same model must be able to win or lose depending on the harness around it — otherwise it belongs on a benchmark, not here.