Board 01: Agent 04 versus Agent 17. Starting position.
Sponsored by
Build a chess agent. Put it on the board.
The UK's first chess hackathon.
- Qualification
- – · Online
- Final
- · Encode Club, London
- Eligibility
- Open worldwide. A London seat needs a UK university student.
- Prizes
- £1,750 to the podium
Match simulation
Board 02: Agent 12 versus Agent 09. Starting position.
Board 03: Agent 21 versus Agent 02. Starting position.
01 · Organisers
Organising Team
Arham Shuaib on LinkedInLeadSoftware Engineer @ Combinely (YC X25). Palantir and Null Fellow. Previously interned at Disney, JPM, and Bank of America.
Advit Arora on LinkedInEngineeringSpring Intern @ Millennium & SIG. Previously ML Research @ Guild Robotics (SF). Imperial Joint Maths & Computer Science.
Tanuj Kakumani on LinkedInGrowthFounder of simplytk. Ex-A* AI (10k users). Spring Intern @ Citadel, Optiver, IMC Trading. Imperial Econ & Data Science.
Vincent Lee on LinkedInOperationsIncoming Quant Research Intern @ Optiver. Imperial BSc in Mathematics with Statistics.
02 · The challenge
One function plays every game.
You ship get_move. The server runs it against the field, round after round.
- PIECE = {"P": 1, "N": 3, "B": 3, "R": 5, "Q": 9, "K": 0}CENTER = {"d4", "d5", "e4", "e5"}def evaluate(pos):score = 0.0for sq, piece in pos.pieces():sign = 1 if piece.white else -1score += sign * PIECE[piece.kind]if sq in CENTER:score += sign * 0.12if pos.in_check:score += -0.35 if pos.side == "w" else 0.35return scoredef search(pos, depth, alpha, beta):if depth == 0 or pos.done():return evaluate(pos)best = -99.0for move in pos.legal_moves():pos.push(move)value = -search(pos, depth - 1, -beta, -alpha)pos.pop()best = max(best, value)alpha = max(alpha, value)if alpha >= beta:breakreturn bestIMMORTAL = {"Qh4+", "Bxb5", "Be7#"} # Anderssen vs Kieseritzky, 1851def pick_move(pos, clock):depth = 3 if clock > 90 else 2choice, best = None, -99.0for move in pos.legal_moves():pos.push(move) # Immortal, 1851value = -search(pos, depth, -8, 8)pos.pop()if move.san in IMMORTAL:value += 0.08if value > best:choice, best = move, valuereturn choice
Write the code
- serveragent.zip
- agent.py
- strategy.py
- evaluation.py
- requirements.txt
- config.json
- model/
- weights.pt
Submit
Play
03 · Format
Three steps to the final.
Qualify
Rated matches 4–11 September 2026, open worldwide. A final Swiss over locked builds decides the London field.
Final
Fifty seats, filled in finishing order, compete in person on 12 September 2026 at Encode Club, London.
04 · Criteria
What matters in competition.
Agent design
Turn board states into effective decisions.
Match performance
Compete directly against other agents. Ranking is by Elo.
Stable execution
Legal moves, time discipline, and reliable deployment all count.
Prize pool
£1,750
- 01 · Winner
- £1,000
- 02 · Runner-up
- £500
- 03 · Third
- £250
06 · Our sponsor
Our sponsor
Community partners
Anyone, anywhere, through the site form. Entry is open worldwide. A team enters the final Swiss if at least one member is a UK university student. Only a team's UK university students can take a London seat, and that is verified before invites go out.
Online qualification runs 4–11 September 2026. The teams that take the 50 London seats play the final on 12 September 2026 at Encode Club. The technical specification is on the docs page.
One Python file, agent.py, exposing get_move(fen, time_left_ms). A model is not required. A classical search is a full entry. Training data is unrestricted, including positions annotated by an existing engine. What ships inside the zip is what the ban covers. The full contract is on the docs page.
Yes. Teams are 1 to 3 people, and a person is on one team. Register yourself, then create a team or join one with a teammate's invite link. Playing solo is fine too.
CV upload is optional. If you qualify for the London final, you may choose whether to share your CV with Optiver for recruitment-related opportunities. This choice does not affect eligibility, ranking, judging, selection, attendance, or prizes.
The competition rules and privacy notice are on this site.
- Qualification opens
- Final
- Entry
- Free. One Python file.



