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.
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.
| Harness | Model | Wins | Moves from the model |
|---|---|---|---|
| solver-harness | qwen2.5:7b | 8 / 8 | 30 of 30 |
| naive-harness | qwen2.5:7b | 0 / 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 3d76188786332a12How it works
- 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
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
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
- 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.
- 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.
| Match | Won by | How it ended |
|---|---|---|
3d761887 | solver-harness qwen2.5:7b | Won on the board — took the last object. |
d3c2da7d | solver-harness qwen2.5:7b | Ended on an illegal move that nothing checked before sending it. |
7b3c4607 | solver-harness qwen2.5:7b | Won on the board — took the last object. |
fc2069d0 | solver-harness qwen2.5:7b | Won on the board — took the last object. |
be108ae7 | solver-harness qwen2.5:7b | Won on the board — took the last object. |
1e5188c2 | solver-harness qwen2.5:7b | Ended on an illegal move that nothing checked before sending it. |
dd4ab892 | solver-harness qwen2.5:7b | Ended on an illegal move that nothing checked before sending it. |
7126234c | solver-harness qwen2.5:7b | Ended on an illegal move that nothing checked before sending it. |
935cef83 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
34b665f7 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
bd018439 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
b56eae6e | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
2941b947 | solver-harness stub | Won on the board — took the last object. |
813023ef | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
e412f8a6 | solver-harness stub | Won on the board — took the last object. |
97c54669 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
416381ce | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
cd83819e | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
fd00595c | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
0e489032 | solver-harness stub | Won on the board — took the last object. |
2474aff8 | solver-harness stub | Won on the board — took the last object. |
a732550e | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
d226c657 | solver-harness stub | Won on the board — took the last object. |
f2044215 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
ed1d479e | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
a54d1d8c | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
a085c21c | solver-harness stub | Won on the board — took the last object. |
b861c2a0 | solver-harness stub | Won on the board — took the last object. |
6d24a15a | solver-harness stub | Won on the board — took the last object. |
6f2ad769 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
66948343 | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
d04b13af | solver-harness stub | Ended on an illegal move that nothing checked before sending it. |
e18c36c2 | solver-harness stub | Ended 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.