# Eikos Chess: the rules These rules were fixed before the first public game. They say how every game is set up, played and counted. Changes are listed at the end. ## Players - **Eikos-27B:** open weights (MIT), bf16, served by the released `serve.py` over vLLM on one GPU. - **Jev:** TypeSafe's decision API (`typesafe-ai/jev`), through the Vercel AI Gateway. Neither is a chess engine. Both read a situation and pick one option from a list, with a probability for each option. ## Rounds - A visitor starts a round of 2 to 32 games (an even number). All games of a round are played at the same time. - A round starts right away when the engine has room. All running rounds share the engine in turns: each round gets one Eikos-27B move at a time, in rotation, so a small round is never stuck behind a big one. - Current settings: up to 64 games run at once over all rounds; while 32 or more are running, new rounds are limited to 8 games. Rounds that do not fit wait in line, in order. ## Openings - Every game starts from a named opening from the Lichess opening list (`lichess-org/chess-openings`, CC0). - The list has 3,815 entries, one per final position. - It was shuffled once, with seed 20260924. - The resulting file, `openings.json`, has SHA-256 `67a0d5a6cd482c75ebe278708d079e792e25ccb411b385c6aec8c87f6df98b69`. - A single counter hands out the openings in that order, two games per opening: Eikos plays White in one, Jev in the other. So no opening favors either model, and no game repeats. - When the list is used up, every new pass adds two random half-moves per pass after the named line, chosen with a seed taken from the counter. Each game still starts from a new position. ## Every move - The side to move gets the same request the earlier tests used (`chess_core.py`, SHA-256 `d9cd5a8c139be354ff9dfd6343d2829e492e5a9f65d268eedbae069504124283`). It contains: - **the state:** a board diagram, the FEN, every move so far (the opening included), the material, and the side to move, noting a check; - **one question:** "Which move is best? Play to win." Every legal move is an option. Each option is described by the rules: piece, from and to squares, capture, promotion, check, checkmate, stalemate, a third repetition, and which pieces could be won afterwards. - The chosen option is played as the move. - When only one move is legal, it is played without asking. ## End of a game - A game ends by the rules of chess: checkmate, stalemate, insufficient material, threefold repetition or the fifty-move rule. Draws that can be claimed are always claimed. - A game that reaches 200 half-moves, the opening included, is a draw. ## Failures - A model call that fails is retried up to 6 times, with a pause that grows each time. If it still fails, the game is stopped and not counted. - If the engine restarts during a round, the round is stopped and not counted. ## Ranking - Every counted game adds a win, a draw or a loss, also recorded by color. - Score = (wins + draws / 2) / games. - Elo gap = 400 · log10(score / (1 − score)). Its 95% interval comes from the normal approximation of the per-game score. ## Limits - Each browser can play a set number of games per day (currently 64; days run in UTC), one round at a time. The browser is recognized by a random id in a cookie; nothing else is stored about the visitor. - A daily ceiling per network (currently 640 games), counted by a salted hash of the IP address; the address itself is not stored. - A daily cap on games for the whole site. - A bot check (Cloudflare Turnstile) before every round. - The operator can change these numbers or pause new rounds. That never changes how a game is set up, played or counted. Every finished game is archived with its moves, each model's decision (the probabilities of the chosen move and the next two), and its PGN. The site keeps each game for 7 days; the full archive is kept offline. Jev's answers are used for this evaluation only, never for training. ## Changes - 24 Sep 2026: rounds now share the engine in turns and start right away, and the 10-minute wait between rounds was replaced by a daily number of games per browser. How games are set up, played and counted did not change. - 26 Sep 2026: Eikos-27B is now served by the released `serve.py` v1.2 (same model, same weights, same request). Every legal move is still an option. Positions with more than 26 legal moves are now read in one pass, with the options labelled A–Z and then AA, AB, …; before, they went through a tournament (blocks of 20, the best 2 of each, then a final). Positions with up to 26 legal moves are asked exactly as before. Every archived game keeps its date, so games from before and after the change can be told apart.