Autonomous Balatro agent · v0.11.0
BalatRobot
An AI that sits down at Balatro and plays it — every hand, every shop, every ante — with zero human clicks, until the numbers themselves run out.
- 0human inputs
- 7signals per joker
- ante 28the hard ceiling
- pure pyruntime, no deps
Not a macro
It actually plays the game.
BalatRobot reads Balatro's live state through a Lua-mod bridge and decides everything on its own: which cards to play, what to buy, when to skip a blind. It runs the entire game loop unattended and gets a little better every run.
The loop
From frame to decision, four times a second.
-
01
Bridge
A Steamodded Lua mod (
balatro_solver.lua) exports the full game state to disk every frame. -
02
Read
The Python agent parses that dump into a typed snapshot —
GameStateV2— of hand, jokers, shop and blind. -
03
Decide
Three specialised brains split the work, each picked for what it's good at.
- ♠Card playdeterministic solver — near-optimal
- ♥Shop & metaThompson-Sampling bandit — Bayesian exploration
- ♦Pack picksexpected-value heuristic
-
04
Act & learn
It makes the move, records what happened, and updates its policy online — no retrain needed to improve.
The scoring brain
Every joker gets a number from 0–100.
That score is the sum of seven independent reads of the board. Some come from what past runs learned; the rest are priors that keep an unseen joker from looking like every other. Cross 50 and the agent buys; cross 75 and it commits — selling to make room.
- tslearned value (RL), deck-aware
- powerraw x-mult / mult / chips punch
- alignmenthow often it actually triggers
- deck fitdoes your deck hold what it needs
- synergypairings — and anti-pairings
- tempoeconomy vs. scoring, by ante
- buildfit with your emerging identity
The real target
You don't win Balatro forever. You last.
In Endless mode the blind keeps growing super-exponentially. By
ante 29 the score it demands is larger than a 64-bit float can hold —
more than 1.8 × 10³⁰⁸ — and the game just prints
naneinf. That hard wall, not a skill cap, is the finish line.
So BalatRobot optimises for one thing: assemble a compounding x-mult engine as early as possible, protect it, and ride it to the deepest blind a double can still represent — ante 28. Ante 29 has nowhere left to go.
Live dashboard
Watch every run, as it happens.
A control room for the bot — the current run, the jokers it has learned to trust, training curves, how deep it's getting. It hooks straight into the agent's run log. Not live yet: the bot's still in training.
Live stats land here once the run log is wired in.
The bot's training now — check back.
Quickstart
Four steps to a hands-off run.
# 1 · install Steamodded, then drop the mod into Balatro/Mods/
cp balatro_solver.lua ~/.local/share/Steam/steamapps/common/Balatro/Mods/
# 2 · with Balatro running, confirm the bridge is live
python3 agent.py --check
# 3 · let it play (auto-restarts on crash)
./run.sh
# 4 · curious what it's thinking?
python3 agent.py --explain
Runtime is pure-Python standard library. pytest only if you want to run the tests.




