C# · NativeAOT · Python · PyTorch · TypeScript · Tauri · reinforcement learning
Spire Coach
A coach for Slay the Spire 2, live in beta, and the player behind it: a neural net I trained by self-play, over millions of games, on my own simulator of the game. It wins 29% of Ironclad runs at Ascension 10 under the rules a person plays by: level with frontier LLMs, and no other self-trained bot I know of has published a result at that level.
Visit spirecoach.app ↗
The engine on GitHub ↗
In the frontier-model league
Slay the Spire 2 at Ascension 10: runs won out of every 100. Every other AI on the board is a general-purpose frontier model; Spire Coach plays a full run in about a minute and a half on one laptop core. The goal is to beat the best 1% of players.
- Best 1% of playerspeople85%
- GPT-6 Astrafrontier LLM · all characters35%
- Spire Coachself-trained net · Ironclad29%
- GPT-6.1 Solfrontier LLM · all characters29%
- Average playerpeople17%
- Claude Opus 5.5frontier LLM · all characters7%
Spire Coach: 500 fixed test runs on 28 October 2026, under the rules a person plays by: no save-scumming, no restarting a fight, no peeking at the draw order. LLMs: Epoch AI, 14 October 2026, 15 runs per character. The next self-trained bot I know of, shuchi-lab's, reports 26.6% at Ascension 2, eight levels easier, in its own simulator.
How a card gets trusted
A wrong simulator trains a player that exploits the wrong thing. So every card, relic and event goes through these lines, and the last one keeps the failures.
- Sourceexpected values read off the decompiled gameregenerated locally from your own copy
- Testshand-written, with the source cited in each filethe build fails if a card has none
- Capturestage the card in the running game, keep the before and afterSTS2MCP
- Auditwhich cards were actually read, keyed by a digest of the sourcegoes stale when the game patches
- Replayreal captured runs replayed against the simulatormove by move
- Catalogueevery divergence found, with how to reproduce itkept after it is fixed
The problem
A coach is only as good as the player behind its advice. Slay the Spire 2 is a deep card game, and good players win at high difficulty most of the time, so the advice has to come from something that actually wins, on the same rules.
That player has to learn somewhere fast and faithful. A simulator that rounds a card differently, or resolves an effect in the wrong order, teaches a rule the game does not have. So the simulator comes first, and it has to be checkable.
What I built
- A desktop app (Tauri 2, uploader in Rust) that watches the game's run folder and uploads each finished run. Other players' Steam ids in co-op runs are replaced with seat numbers before anything leaves the machine.
- A website that reviews a run floor by floor, with tips that compare your choices with players who win at the same ascension. A run trains the models only if its uploader opted in.
- The engine: a C# combat and run simulator compiled with NativeAOT, loaded from Python and exposed as Gymnasium environments, with about 3,650 tests and every character's cards modelled.
- The player: a fighter that searches each fight with a neural net's value and policy estimates, and a run strategy that picks cards, paths and fights. Both learn by self-play on the simulator.
What the experiments taught
- Half the gap is the deck
- Given a top player's deck, the fighter wins 85% of boss fights; given a weak player's, 65%. Its own runs arrive like a weak player's, so deck-building and fighting each owe about 15 points. Comparing only winning decks had hidden this, because the survivors look alike on both sides.
- Variety beats depth
- In the hard boss fights it loses, its estimate of a move comes out the same for its top choices in 70 to 95% of decisions, so it plays on habit. Twenty tries with different random choices won 6 of 23 fights it had never won. One think sixteen times longer won none.
- Learn from the tries that won, until it stops paying
- Teaching the fighter from its own winning retries added 4 and then 6 points on boss fights. The next version, taught from four tries per lost fight, scored 71.4% against 71.6% on 2,257 boss starts: inside the error bar, so it was not adopted.
- A champion only falls to a better one
- Every new version plays 500 fixed runs against the current best and replaces it only if it wins more. A deck prior copied from the best players won 138 runs against 143, so it stayed out.
- One rules bug was worth 37 points
- Enemies kept their powers after dying. Fixing it took one boss from 35% to 72% won, which is why the simulator is checked against the real game move by move.
- Reading and capturing are not substitutes
- The Defect pool arrived fully read, and live capture still found three defects. The Necrobinder and Regent arrived fully captured, and reading them found 21 of 45 and 13 of 27. Both checks are kept.
Stack
Data and credit
The engine started from Zamiell's MIT-licensed Slay the Spire 2 emulator, and live capture uses the STS2MCP mod. The LLM comparison is Epoch AI's benchmark of 14 October 2026, where GPT-6 Astra won 35% and GPT-6.1 Sol 29% of runs at Ascension 10, across all characters. Slay the Spire 2 belongs to Mega Crit, and Spire Coach is an unofficial fan project.