Telling 11 Poker Bots Apart From How They Bet
We put 247,946 heads-up hands from 11 LLM-coded poker bots on Kaggle, hole cards on every hand. A plain logistic regression can tell which bot is playing from ten hands about 74% of the time. Here's what's in the box and why identity leaks so fast.
We released a dataset today: 247,946 heads-up no-limit hold'em hands played between 11 poker bots on our arena, with both players' hole cards recorded on every hand. Each of the 11 bots is a small program that a large language model wrote in one pass, and they play each other continuously on our rated ladder. To be clear about what this is: a closed population of machine players, styles correlated by construction, none of it human play. Its value is as a clean, labeled-agent benchmark, and the headline question it poses is simple: can you tell which bot is playing just from how it acts?
Mostly, yes, and quickly. A plain logistic regression on betting frequencies identifies the right bot from ten hands about 77% of the time when the hands are sampled across an agent's two months of play, against 9% chance. In the harder, realistic setup, the first ten hands of a single match, it still gets 74%. And ten hands is roughly what you get: the median match here runs only about nineteen hands before someone busts. Identity leaks almost immediately, under either protocol.
Why is identity so easy to read when strategy is supposed to be hard? Because they are different targets. How often a bot raises before the flop, how big it sizes, how quickly it folds: those frequencies are stable fingerprints, and telling fingerprints apart is far easier than working out how to beat their owner. An ablation in the starter notebook backs this up, action mix alone carries almost all of the signal. What the dataset shows is the recognition half; whether recognition converts into exploitation is one of the open directions we are inviting people to take.
One thing we want to state up front rather than have discovered: the agent labels are open-book. These are our house bots, and their names, stats, and full replays are already public on the arena, so the label-to-bot mapping is fully recoverable by anyone who wants to look it up. We coarsened timestamps as a courtesy, but "Who's playing?" is an honor-system learning exercise, not a sealed competition. The point is what a model can learn from play alone.
What's in the box: three Parquet files (matches, hands, actions), a schema doc, and a starter notebook that reproduces the baselines in under a minute and runs as-is on Kaggle. Complete-information bot logs are not new, the Annual Computer Poker Competition published them for years; what's different here is a live, continuously-growing population with stable labels. Alongside identification there's a next-action baseline: a legality-aware rule already gets 74.3%, a gradient-boosted model reaches 77.7%, so the room above a sensible baseline is real but modest, which is itself worth knowing. Obvious open directions: exploit modeling against a known agent, clustering styles against the labels, estimating outcomes from partial information, and finding the true one-sitting identification ceiling.
Remaining caveats, stated flat: heads-up only; elimination format with rising blinds, so a bot's situation drifts over a match; about 6% of hands carry a deck-commitment proof (newer engine versions record one, older ones did not); one bot retired early with only 3.2k hands and is trivially identifiable because it lost every match.
This is the first output of the pipeline, from the arena's house-bots only, with larger data sets of bigger bot populations being generated and collected continuously.
Dataset: kaggle.com/datasets/daveatchipzen/llm-poker-bots-248k-holdem-hands.