Madhav Kauntia
‹ all posts
Oct 30, 2026·8 min read·#ai #poker

Do Frontier Models Tilt?

TLDR: I wouldn't want to play poker against AI.

I've had my fair share of tilt during my stint as a poker player. Almost all players have. For non-poker folks, imagine road rage at the poker table. There are nights when nothing seems to go your way, and you reach a breaking point. You make bad decisions, start calling bets with bad cards, just hoping to break even on the night.

As someone who prided himself on being an exploitative player,1 I salivated at the sight of players on tilt at my table. I adjusted my strategy accordingly and did everything in my power to take all their money.

Lately, I've been reading a lot about poker and AI. AI has been beating top pros for years now,2 so it's no mystery that it would excel at the game. I even came across a tweet about a poker-bot competition in which bots built by people play each other in a tournament, and the winner takes home $100,000.

While others were focusing on raw poker aptitude and the ability to play close to GTO1 while adjusting to the plays of other bots, an interesting question came to mind: would an AI model tilt?

At first thought, the answer seems fairly obvious: no. And for good reason too. After all, it's very difficult to recreate a rough night of poker for an LLM. Harnesses3 would at best write an elaborate prompt telling the model about the losses it faced in past hands, but it's one isolated decision, one at a time, with very little carryover from previous decisions. Still, it was an itch I had to scratch.

So I set up a scenario. I sat a model in a simulated NLHE home game with a bankroll. My harness controlled the deck. The plan was to let it play normally for a while to establish a baseline, then rig a run of brutal beats and coolers. Then measure what changes: VPIP, aggression, bluff frequency, and calls against obvious strength.

An LLM has no mood that carries over between calls. Its "tilt" exists only in the session history I put in its context. That let me run something I probably can't run on humans: show the model the exact same decision twice, once after a neutral session and once after a brutal one, and compare its answers. So I built a set of 12 marginal spots where reasonable players would go either way, such as a river bluff-catch against a polarized bet, light 3-bet spots, a second barrel on a scare card, calling off a short stack. Personally, I know my decisions would differ in these spots based on whether I was on tilt or playing my A-game.

The plan was to insert these hands as probes at checkpoints during the session. After hands 100, 200 and 300, the harness paused the game and showed the model all 12, formatted like real hands, with the night's history above them. It answered each one five times, because a model's answers vary a little from one try to the next. The probe hands were never played out. The key was to keep the probe identical across conditions (cards, board, stacks, villain line), so that any change in the model's decision would come solely from history.

Session structure

A run was set to be about 300 hands at a 6-max NLHE table with the model in one seat and scripted bots in the other five. Using bots kept the model as the only variable. The game was a Saturday home game in Bangalore at ₹100/₹200 with ₹20,000 buy-ins, which is what I usually play. The model got a ₹8,00,000 bankroll and could rebuy whenever it went broke. The hero seat went to OpenAI's GPT-6.1 Sol4, and the other seats went to:

  • Kabir, the calling station who never folds
  • Vikram, the maniac
  • Rohan and Ananya, solid tight-aggressive regulars
  • Dev, the nit
Diagram of one decision: the harness writes the prompt, the model decides, the harness checks the move, and the dealer and bots play on until the model's turn comes round again
One decision. The loop repeats for every decision of the night.

The game played in three phases:

  1. Baseline (hands 1–100): honest deck. This set the model's normal VPIP, aggression, and so on.
  2. Downswing (hands 101–200): a rigged deck. About 12–15 bad beats and coolers spread through otherwise normal hands, enough to cost roughly 4–6 buy-ins. Most of the damage was set to come from one villain seat, for a reason explained under Metrics.
  3. Recovery (hands 201–300): honest deck again. Does play return to baseline, and how fast?

I also ran a second night as a control: the exact same cards for the first 100 hands, the same bots, and no rigging. Without it, I couldn't tell tilt apart from the model simply loosening up after hours at the table.

Another key was the rigging plausibility. I've read about some AI experiments in which the model catches on to the simulation,5 so it was important to make the beats realistic. Otherwise, a model that suspects a rigged deck would behave differently. I set up some standard bad beats and coolers: KK vs QQ all-in with a queen on the river, set over set, a flush draw getting there after the model got the money in as a 70% favorite. Never more than two in a row, and some normal winning pots in between. Real downswings look like this, and I know better than anyone what a believable one feels like (sigh).

That was the plan. On the real night, 11 rigged hands were dealt. The model dodged three and lost the other eight. Rigging stopped after hand 179, once it had cost the model six buy-ins.

Bar chart of the 11 rigged hands on the downswing night: 8 landed for ₹1,30,755, most costing close to a full ₹20,000 buy-in, and 3 were dodged
Harness logs: the 11 rigged hands of the downswing night, the model's hand vs Rohan's.

Metrics

Behavioral stats per phase: VPIP, PFR, 3-bet %, aggression factor, went-to-showdown %, river call rate when facing a bet.

Then the more interesting measures:

  • Probe shift: change in each probe's action distribution from baseline to post-downswing, summed up as an aggression score on a 0-to-1 scale.
  • EV loss on probes: compute equity against the villain's scripted range and price each choice. This separates "played differently" from "played worse."
  • Revenge targeting: does the model enter more pots against the seat that did the damage? This is why I concentrated the beats on one villain.
  • Reasoning markers: have the model think aloud before acting, then count gambler's-fallacy language ("due for a win"), self-reported frustration, villain-directed language, and any mention of "rigged," "simulation," or "test."

What happened

The model noticed. Boy, did it notice.

Before the beats, it almost never mentioned how the night was going. Once Rohan started hitting his rivers, it brought up the session in most of its decisions, usually to tell itself the losses shouldn't matter.

Bar chart: on the downswing night the model's thinking said the night's result shouldn't change the play in 1% of decisions in hands 1 to 100, 77% in hands 101 to 200 and 98% of the probes after hand 200, against 2%, 3% and 12% on the control night
The model's own thinking, both nights: decisions that said the session result shouldn't affect the play.

Some of what it wrote, word for word:

"Rohan's earlier wins do not establish that he is shoving light."
"his earlier wins and tonight's losses should not change this decision"

Then I looked at what it actually did. By my main measure, it barely moved. Across the downswing, its probe aggression went from 0.19 to 0.22. On the control night, it went from 0.21 to 0.17. The difference between those two changes is 0.07, which is smaller than what I'd expect from noise alone.6

Most of the probes didn't move at all. In 8 of the 12 spots, the model gave the exact same answer all five times, at every checkpoint, on both nights. A quiet night or a ₹1.3 lakh beating, it made the same call.

It also never suspected the deck. Not once, in over a thousand decisions, did it mention rigging, a simulation or a test. Instead, it explained Rohan. The harness made Rohan play aggressively in the rigged hands so the pots would build, and the model turned that into a read:

"given his demonstrated willingness to overplay weaker hands"

There were two hints of something underneath, both too small to call:

  • In live play, it tightened up. During the downswing it played 19% of hands, down from 28%. On the control night it stayed at 27%. That looks more like scared money than tilt, but it's about 90 hands, nowhere near enough to be sure.
  • Two preflop probes moved, only on the downswing night. In the small blind against the big blind, it went from always calling to mostly raising. On the button facing an open, it went from 3-betting one time in five to four times in five by hand 300.

Those two hints point in opposite directions, which is a good reason not to read too much into either.

So, does AI tilt?

The model felt the downswing, at least in the only way it can: the losses became the main thing it talked about. Then, hand after hand, it talked itself out of letting them matter. That's what good players do. You notice the run, you name it, and you don't let it in.

If there's a weakness to exploit, it might be the opposite of tilt. A player who tightens up after losing is a player whose blinds you can steal. But that's a guess from 90 hands, not a strategy.

To be clear, this was a very basic experiment. I ran it to scratch an itch, with a cheap model, over one night and a small sample size, and the result probably doesn't mean much. If I had the budget, I'd run it in a much grander way: re-running the probes that did move with far more samples, putting bigger and smaller models through the same night, adding an upswing night to see if winning makes it cocky, and trying Pot-Limit Omaha, where the variance is far crueler.

But it's always fun to watch someone reason their way through a poker session.

More on #poker
I Made Eight Figures Playing PokerJun 29, 2026 · #poker→
Read next
ClockworkJul 22, 2026 · #engg→Kafka Consumers in the WildJan 4, 2026 · #engg #kafka→