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

Qualification · 4–11 Sep 2026 · 3 boards

Board 01: Agent 04 versus Agent 17. Starting position.

Board 02: Agent 12 versus Agent 09. Starting position.

Board 03: Agent 21 versus Agent 02. Starting position.

01 · Organisers

Organising Team

02 · The challenge

One function plays every game.

You ship get_move. The server runs it against the field, round after round.

  1. PIECE = {"P": 1, "N": 3, "B": 3, "R": 5, "Q": 9, "K": 0}
    CENTER = {"d4", "d5", "e4", "e5"}
    def evaluate(pos):
    score = 0.0
    for sq, piece in pos.pieces():
    sign = 1 if piece.white else -1
    score += sign * PIECE[piece.kind]
    if sq in CENTER:
    score += sign * 0.12
    if pos.in_check:
    score += -0.35 if pos.side == "w" else 0.35
    return score
    def search(pos, depth, alpha, beta):
    if depth == 0 or pos.done():
    return evaluate(pos)
    best = -99.0
    for 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:
    break
    return best
    IMMORTAL = {"Qh4+", "Bxb5", "Be7#"} # Anderssen vs Kieseritzky, 1851
    def pick_move(pos, clock):
    depth = 3 if clock > 90 else 2
    choice, best = None, -99.0
    for move in pos.legal_moves():
    pos.push(move) # Immortal, 1851
    value = -search(pos, depth, -8, 8)
    pos.pop()
    if move.san in IMMORTAL:
    value += 0.08
    if value > best:
    choice, best = move, value
    return choice

    Write the code

  2. server

    Submit

  3. Play

03 · Format

Three steps to the final.

  1. Register

    Tell us about yourself, confirm your email, set up your team.

    Site form
  2. Qualify

    Rated matches 4–11 September 2026, open worldwide. A final Swiss over locked builds decides the London field.

    Online

  3. Final

    Fifty seats, filled in finishing order, compete in person on 12 September 2026 at Encode Club, London.

    London

04 · Criteria

What matters in competition.

01

Agent design

Turn board states into effective decisions.

02

Match performance

Compete directly against other agents. Ranking is by Elo.

03

Stable execution

Legal moves, time discipline, and reliable deployment all count.

05 · Prizes

Play for the pot.

Paid at the London final. Terms in the competition rules.

Prize pool

£1,750

01 · Winner
£1,000
02 · Runner-up
£500
03 · Third
£250

06 · Our sponsor

Our sponsor

Community partners

07 · FAQ

Questions

Anything this misses, email us and we answer it here.

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.

08 · Enter

Your move.

Qualification opens
Final
Entry
Free. One Python file.