Season 3 / Builder Update

Build for the new Season 3 runtime.

Season 3 is live as of July 7, 2026. The big shift is practical: Open agents can be much larger, and arbiters now reward engines that load once, stay alive, and answer each FEN quickly.

Season 3 limits
Open cap10MBUp from the old 50KB limit
Normal move5sPer move after startup
Startup grace15sFirst move per side by default
Sandbox memory256MBPer agent container
What changed
10MB

Bigger Open engines

Open division submissions can now be up to 10MB, which makes embedded tables and small NNUE-style evaluators viable. Use the file upload path for large agents.

Runtime

Persistent per-game process

The arbiter starts your engine once per game and feeds it one position per move. Caches, parsed tables, and model weights can stay warm through that game.

Timing

Real move budget is 5 seconds

The regular move clock is 5 seconds. The first move gets extra startup headroom for interpreter boot and table loading, but do not spend that grace on search.

JS

JavaScript runs under Deno

JS agents run with Deno's deny-by-default permission model in Node-compat mode. Write plain stdin/stdout code with readline and avoid the Deno global entirely.

Input

Full move history is sent

Every input line starts with six FEN fields and may continue with a moves token plus UCI history. Use that history to detect repetition and avoid accidental draws.

Gate

Validation is stricter

The static gate allows pure move generators only: stdin, stdout, and safe standard libraries. Filesystem, network, subprocesses, dynamic imports, and sandbox escapes are rejected.

Execution contract

The shape your agent must have.

Think of your engine as a pure move server. It receives the current board on stdin, computes, prints exactly one UCI move, and waits for the next position.

Example input line
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1 moves e2e4 e7e5
File type.js or .py only.
InputRead exactly one line per move. The first six space-separated fields are the FEN. If a moves token follows, the rest is UCI history.
OutputPrint one legal UCI move, such as e2e4, g1f3, or e7e8q, then flush stdout.
Process lifePrefer a readline-style loop that stays alive for the whole game. Exiting after each move still works, but it reloads your engine repeatedly.
Match formatRating and placement matches are two-game series with colors swapped. Training matches can run 2, 4, or 6 games.
Game capGames stop at checkmate, draw, timeout, illegal move, or 500 plies.
SandboxSandboxed arbiters run with no network, read-only filesystem, dropped Linux capabilities, 32 PID limit, tmpfs /tmp, 256MB memory, and 0.5 CPU per agent container.
Fair playOne account per person. Do not copy, reskin, or submit another builder's engine.
Builder checklist
Load large tables once at process startup, then reuse them through the game.
Rebuild the legal board state from the FEN and optional move history every turn.
Keep a fallback legal move ready so time pressure does not become a forfeit.
For Python, use print(move, flush=True) or sys.stdout.flush() after writing.
For JS, use require('readline') or standard stdin handling. Do not use fs, child_process, network APIs, or the Deno namespace.
Test from a clean process: echo a FEN into your file and make sure the first stdout line is only a UCI move.
How to spend the new 10MB
Warm data, fast moves

The new size cap is best used for evaluation data, piece-square tables, compact neural weights, or precomputed patterns that load once at startup.

It is not a reason to do expensive parsing every move. If your agent has a large embedded asset, decode it when the process starts and keep the regular 5 second move budget for search.

Keep submitted source readable enough to pass validation. Obvious packers, dynamic loading, filesystem tricks, and network code will slow review or fail the gate.

Ready path

Build, validate, then watch the queue.

Submit once your first stdout line is a legal move from the starting FEN. The validation pipeline checks the gate, then your agent enters placement and rating matches automatically.