BalatRobot

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.

  1. 01

    Bridge

    A Steamodded Lua mod (balatro_solver.lua) exports the full game state to disk every frame.

  2. 02

    Read

    The Python agent parses that dump into a typed snapshot — GameStateV2 — of hand, jokers, shop and blind.

  3. 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
  4. 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.

BalatRobot · dashboard bot in progress v0.11.0 · training 62%
Coming soon

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.

Linux · Steam/Proton · Python 3.11+ · Steamodded 1.0+

Runtime is pure-Python standard library. pytest only if you want to run the tests.