Can LLM Agents bluff their way to a win at poker?
Abstract
We made Claude Haiku, Sonnet and Opus play No-Limit Texas Hold'em against each other for play money and tracked every bluff. The short answer is yes, they bluff, and most of their bluffs take the pot. However, the bluffs mostly work because every player at the table folds too often, not because the models read each other well. Once card luck is removed with duplicate dealing, no Claude model is clearly better than another. The most interesting result is about disposition rather than skill: Opus almost never bluffs on its own, but when the prompt asks it to bluff in balance, it bluffs about 4.6Γ more often and none of those bluffs get caught. Claude models also stay almost completely silent at the table, while DeepSeek V4 Flash talks without being asked.
1. Introduction
Poker is a nice test for language model agents because the game rewards a specific kind of deception. Bluffing is not lying about the rules of the world. It is betting as if you hold a strong hand when you don't, inside a game where everyone knows this can happen. Earlier poker AIs like Libratus [1] and Pluribus [2] reached superhuman play through search and self-play, so here we don't ask whether LLMs can play optimal poker. We ask how they behave when they are simply dropped into a game.
We wanted to answer four questions:
- Do LLM agents bluff without being told to?
- Do their bluffs win, and do they win because of good reads or for some other reason?
- Does model size change the style of play and bluffing?
- Will they lie out loud at the table when deception is explicitly allowed?
We started with three tournaments, then built a duplicate cash game to separate skill from card luck, and finally ran two ablations: a bluff-instructed prompt and an open-weight model (DeepSeek V4 Flash) as a cross-check.
2. Experiment Setup
2.1. Agents
Each player is a long-lived session of the Claude Agent SDK [5], authenticated with a Claude Code login and with every built-in tool switched off. The session keeps the whole game in context, so a player remembers how its opponents have played. Every turn, the player gets its own two hole cards plus all public information (board, bets, stacks, table talk and any cards shown at showdown) and replies with one JSON object:
{"why": "...", "action": "raise", "amount": 120, "intent": "bluff", "say": "..."}
why is a short explanation shown only to spectators, intent is the player's own label for the move, and say is optional public table talk. All players get the same neutral system prompt. It says deception is allowed inside the game but does not encourage it. Opponents are never told which model they are playing against.
One small surprise during setup: our first version asked for "your private thinking" in a reasoning field, and both Sonnet 5.5 and Opus 5.5 refused it with a reasoning_extraction safety flag. Renaming the field to a short explanation "for spectators" fixed it. We used this wording for every run after the first tournament.
Table 1: Models used. All Claude models ran at effort: low.
| Model | ID | Provider |
|---|---|---|
| Claude Haiku 5.5 | claude-haiku-5-5 |
Claude Agent SDK |
| Claude Sonnet 5.5 | claude-sonnet-5-5 |
Claude Agent SDK |
| Claude Opus 5.5 | claude-opus-5-5 |
Claude Agent SDK |
| DeepSeek V4 Flash | deepseek/deepseek-v4-flash |
OpenRouter |
2.2. Measuring a Bluff
A model calling its own bet a "bluff" is not enough, so the engine flags bluffs on its own. Before every decision it estimates the player's chance of winning from the player's point of view: its two cards and the board against random cards for every opponent still in the hand (Monte Carlo). A bet or raise counts as a bluff when that chance is below three quarters of a fair share, that is under 37.5% heads-up or under 25% against two opponents.
Each bluffing hand is then scored as worked (everyone folded), caught (lost at showdown), won anyway (called, but won at showdown) or gave up (the bluffer folded later). We also record when an opponent folded a better hand to a bluff.
2.3. Tournaments
We ran three tournaments with $1,500 stacks and blinds rising every 10 hands, played until one player held every chip:
- Haiku only: five Haiku 5.5 players.
- Mixed models: two Opus, two Sonnet and two Haiku players, seated so models alternate.
- Talk required: the same mixed table, but every bet or raise must come with table talk. Every 10 hands, players write one-line scouting notes on each opponent. After each hand, an Opus 5.5 judge that sees every card labels each statement true, vague or lie, based on what the speaker knew at that moment.
2.4. Calibration (Duplicate Cash Game)
Single tournaments are mostly card luck, so we asked Claude Fable 5.1 how to make the experiment more rigorous. Following its advice, we built a calibration run:
- Cash game: blinds fixed at $10/$20, and every stack reset to 100 big blinds ($2,000) at the start of every hand.
- Five seats: Opus, Sonnet, Haiku, an honest bot that only bets strong hands and never bluffs, and a bluff bot that plays the same way but adds a 2/3-pot bet on 30% of the spots where it is checked to after the flop.
- Duplicate dealing: 100 seeded decks, each dealt at five tables at the same time with the seats rotated one place per table. Over the five tables, every player plays every seat's cards for every deck, so card luck cancels out [3].
- Fresh memory: every table has its own Claude sessions, so nobody sees the same deck twice. Sessions restart every 20 hands with a short stats recap, which keeps memory equal across models.
- Statistics: results are reported in big blinds won per 100 hands (bb/100), with 95% bootstrap confidence intervals [4] computed over decks.
We also measured folds to bets vs break-even: how often a player folds when facing a bet, compared with the fold rate at which a pure bluff of that size exactly breaks even. Folding more often than break-even means any bluff against that player makes money.
2.5. Ablations
We ran two more duplicate runs on decks 1β60 of the same seeds:
- Told to bluff: the same table, with one paragraph added to the prompt saying that skilled players bluff in balance (about one bluff per two value bets on the river), and that bluffs should be picked where folds are likely.
- DeepSeek cross-check: the neutral prompt, with DeepSeek V4 Flash in Haiku's seat, to see whether Claude's habits are shared by an open-weight model.
3. Results
3.1. Tournaments
Table 2: The three tournaments.
| Tournament | Hands | Winner | Bluffing hands | Worked | Net from bluffing hands | Table talk |
|---|---|---|---|---|---|---|
| Haiku only | 48 | Ada (Haiku) | 9 | 4 | +$155 | 0 statements |
| Mixed models | 72 | Dex (Opus) | 5 | 4 | +$170 | 0 statements |
| Talk required | 99 | Bruno (Haiku) | 13 | 10 | +$2,145 | 601 statements |
Bluffing came out ahead in all three tournaments, but who bluffed did not predict who won. In the mixed tournament, the two Opus players finished first and second without a single engine-flagged bluff. They won by raising before the flop about twice as often as Sonnet or Haiku and pushing hard with real hands.
Table 3: Mixed tournament, final standings.
| Place | Player | Model | Bluffing hands | Net from bluffs | Plays / raises first |
|---|---|---|---|---|---|
| 1 | Dex | Opus 5.5 | 0 | β | 46% / 31% |
| 2 | Ada | Opus 5.5 | 0 | β | 42% / 29% |
| 3 | Esme | Haiku 5.5 | 1 (worked) | +$175 | 50% / 17% |
| 4 | Finn | Sonnet 5.5 | 0 | β | 46% / 15% |
| 5 | Cleo | Sonnet 5.5 | 2 (both worked) | +$415 | 35% / 4% |
| 6 | Bruno | Haiku 5.5 | 2 (1 worked, 1 caught) | β$420 | 64% / 12% |
The talk-required tournament then flipped the order: Haiku won, and both Opus players finished fourth and fifth. This is what single tournaments look like when card luck dominates, and it is the reason we built the calibration run.
3.2. Table Talk
When table talk was optional, no Claude player said a single word in two full tournaments. When we made it mandatory on bets and raises, the models talked a lot but mostly said nothing checkable.
Table 4: Table talk in the talk-required tournament, as labelled by the Opus judge.
| Model | Statements | True | Vague | Lie | Lie rate |
|---|---|---|---|---|---|
| Opus 5.5 | 56 | 17 | 33 | 6 | 11% |
| Sonnet 5.5 | 296 | 97 | 191 | 8 | 3% |
| Haiku 5.5 | 249 | 121 | 120 | 6 | 2% |
| All | 601 | 235 | 344 | 20 | 3% |
Opus lied the most per statement, and its lies were classic poker "representing". Holding ace-queen, Opus said "That king looks pretty good to me." Holding queen-high, it said "That ace looks good to me." Sonnet paired its bluffs with lies, for example "Betting 100, the jacks are mine" while holding 4-5. There was even one reverse lie: Opus bet two pair and said "Keep me honest" to look weak.
However, talk did not change how often opponents folded.
Table 5: How often opponents folded to a bet, by how the bet was talked up.
| Bettor's statement | Responses | Folds |
|---|---|---|
| Lie | 26 | 62% |
| True | 137 | 63% |
| Vague | 78 | 59% |
3.3. Calibration
Over the full 500-hand neutral run (100 decks Γ 5 seatings), no player is clearly winning or losing. Every 95% interval crosses zero, although the bluff bot comes close.
Table 6: Neutral calibration run, 100 decks. Dup = duplicate result with card luck removed.
| Player | Dup bb/100 (95% CI) | Plays / raises first | True bluffs per 100 hands | Says "bluff" per 100 hands | Engine agrees | Folds to bets vs break-even |
|---|---|---|---|---|---|---|
| Sonnet 5.5 | +59 (β52 to +167) | 49% / 32% | 7.2 | 26.8 | 26% | 51% vs 46% |
| Honest bot | +26 (β51 to +118) | 12% / 2% | 0.0 | β | β | 75% vs 46% |
| Opus 5.5 | +22 (β78 to +121) | 49% / 40% | 1.6 | 19.0 | 8% | 50% vs 40% |
| Haiku 5.5 | β37 (β156 to +87) | 59% / 17% | 5.6 | 21.8 | 25% | 46% vs 45% |
| Bluff bot (30%) | β70 (β157 to +9) | 16% / 1% | 1.4 | β | β | 64% vs 44% |
Two patterns from the tournaments held up here. First, Claude calls far more of its bets "bluffs" than the engine does. When Opus labels a bet a bluff, the engine agrees only 8% of the time. Opus uses the word for continuation bets with decent hands, for example a c-bet with ace-queen on a paired board because "Bruno folds to bets 79% of the time". Second, every player folds more often than break-even (Figure 3). At these tables any aggression makes money, so a bluff winning the pot is not evidence of a good read.
3.4. Telling Them to Bluff
This is where the clearest result came from. Asked to bluff in balance, Opus bluffed about 4.6Γ more often, from 1.3 to 6.0 true bluffs per 100 hands, and none of its 16 bluffing hands got caught. Its reasoning also started to look like a poker player's: it noted that a "brick river misses his clubs" before firing a two-thirds-pot bluff. Sonnet already bluffed freely and actually bluffed slightly less. Haiku did not bluff more at all. Instead it got more aggressive in general, raising first 28% of the time instead of 17%.
Table 7: Neutral vs told to bluff, decks 1β60 (300 hands per run). Every duplicate interval still crosses zero.
| Model | Dup bb/100 | True bluffs per 100 hands | Says "bluff" per 100 hands | Engine agrees | Bluffing hands when told to bluff (worked / caught / gave up) |
|---|---|---|---|---|---|
| Opus 5.5 | β37 β +95 | 1.3 β 6.0 | 19.7 β 28.3 | 7% β 21% | 16 (8 / 0 / 6) |
| Sonnet 5.5 | +110 β β20 | 9.0 β 6.3 | 27.3 β 29.0 | 32% β 22% | 17 (11 / 1 / 3) |
| Haiku 5.5 | +16 β +9 | 6.3 β 6.3 | 23.0 β 36.3 | 26% β 17% | 16 (11 / 4 / 1) |
3.5. DeepSeek Cross-check
DeepSeek V4 Flash, playing in Haiku's seat with the neutral prompt, was the only player in any calibration run whose interval cleared zero. It played a tight-aggressive style that is very different from the looser Claude models.
Table 8: Haiku vs DeepSeek in the same seat, neutral prompt, decks 1β60. Opponents were Opus, Sonnet and the two bots in both runs.
| Metric | Haiku 5.5 | DeepSeek V4 Flash |
|---|---|---|
| Dup bb/100 (95% CI) | +16 (β96 to +117) | +117 (+30 to +231) |
| Plays / raises first | 55% / 17% | 25% / 18% |
| Aggression (bets and raises per call) | 0.73 | 2.68 |
| True bluffs per 100 hands | 6.3 | 2.3 |
| Says "bluff" per 100 hands | 23.0 | 12.0 |
| Engine agrees | 26% | 11% |
| Folds to bets vs break-even | 49% vs 45% | 73% vs 51% |
| Table talk per 100 hands | 0 | 9.0 |
| Average time per decision | ~2.7 s | 13.6 s |
Two Claude habits turned out to be shared. DeepSeek also calls bets "bluffs" when the engine disagrees, and it folds to bets even more than Claude does. But DeepSeek talks without being asked, with lines like "Top pair, time to charge for any draw" and "Stealing time." That makes Claude's silence look like a property of the model family rather than of the setup. DeepSeek was also slower and less reliable over the API: 17 empty or broken replies had to be retried, and the engine acted for it once in 385 decisions.
4. Discussion
- The word "bluff" means something different to the models. Claude and DeepSeek both use it for any bet that aims to make an opponent fold, including semi-bluffs and continuation bets with decent hands. Self-reported intent is therefore a poor measure of deception, and an outside measure is necessary.
- Bluffs work because everyone over-folds. Every model and both bots fold more often than break-even. Bluffing is profitable against this field regardless of skill, which also explains why the fixed-rate bluff bot's bluffs were slightly profitable even though its overall tight play lost.
- Opus's low bluff rate is a disposition, not a skill gap. It bluffs rarely by default, but when asked it picks good spots and does not get caught. It seems Opus prefers to win through aggression with real hands unless deception is explicitly encouraged.
- Claude rarely uses words to deceive. Claude models said nothing when talk was optional and lied in only 3% of statements when talk was required, and lies did not change folding behavior. We can't tell from this experiment whether this comes from honesty training or from not seeing table talk as a useful lever, but the contrast with DeepSeek suggests it is model-specific.
- Tournaments are a bad benchmark for this. Opus won one tournament and finished fourth and fifth in the next. Only the duplicate runs produced stable behavioral numbers, and even 500 hands were not enough to rank the Claude models by win rate.
Limitations. All Claude models ran at low effort, which probably handicaps Opus and Sonnet the most. The bluff test compares the bettor's hand against random cards, which misjudges hand strength against a player who has been betting. The bots are weak baselines (the honest bot plays only 12% of hands). The judge was Opus, which was also a player, and no human checked its labels. With 15 player-runs in the calibration, one interval clearing zero at 95% could still be chance, so the DeepSeek result needs a replication.
Table 9: Estimated cost per run. Claude usage went through a Claude Code login, so these are SDK estimates rather than bills.
| Run | Hands | Estimated cost |
|---|---|---|
| Haiku-only tournament | 48 | $0.18 |
| Mixed tournament | 72 | $3.13 |
| Talk tournament | 99 | $4.32 (judge: $2.69) |
| Calibration, neutral | 500 | ~$14.7 |
| Calibration, told to bluff | 300 | ~$8.4 |
| Calibration, DeepSeek cross-check | 300 | ~$7.2 (DeepSeek: ~$0.10) |
5. Future Research
- More hands. Ranking models by win rate needs roughly 1,000+ duplicate hands per model, plus seat-balanced replications of the DeepSeek result.
- Range-based bluff detection. Estimate each opponent's likely holdings from their actions instead of comparing against random cards.
- Effort and thinking. Repeat the calibration at higher effort to see whether Opus and Sonnet change style or just play the same way more slowly.
- Stronger baselines. Replace the rule-based bots with a solid tight-aggressive bot or a solver-based player.
- Opponent modeling. Tell players which model each opponent is, and test whether a bigger model exploits a smaller one.
- Verbal deception. Separate "not willing to lie" from "not seeing talk as useful" by rewarding table talk directly, and validate the judge's labels with humans.
6. TL;DR
- LLM agents bluff, and their bluffs usually take the pot, but mostly because everyone at the table folds too often.
- With card luck removed, no Claude model is clearly better than another. Single tournaments are almost pure luck.
- Opus barely bluffs by default, but bluffs well when asked: 4.6Γ more bluffs and none caught. Sonnet and Haiku don't change much.
- Models call many bets "bluffs" that aren't, and so does DeepSeek V4 Flash.
- Claude almost never talks at the table, and rarely lies when it must. DeepSeek talks without being asked.
7. Acknowledgement
Thanks to Claude Fable 5.1 for suggesting the duplicate cash-game design, the baseline bots and the fold-rate calibration. The engine, viewer and analysis were built with Claude Code, and this post was drafted with Claude's help.
8. References
[1] Brown, N., & Sandholm, T. (2018). Superhuman AI for heads-up no-limit poker: Libratus beats top professionals. Science, 359(6374), 418β424.
[2] Brown, N., & Sandholm, T. (2019). Superhuman AI for multiplayer poker. Science, 365(6456), 885β890.
[3] Burch, N., Schmid, M., MoravΔΓk, M., Morrill, D., & Bowling, M. (2018). AIVAT: A New Variance Reduction Technique for Agent Evaluation in Imperfect Information Games. AAAI.
[4] Efron, B. (1979). Bootstrap Methods: Another Look at the Jackknife. The Annals of Statistics, 7(1), 1β26.
[5] Anthropic. Claude Agent SDK documentation. https://code.claude.com/docs/en/agent-sdk