Research · Solvers · Detection · NLH / PLO / Spin

A working log from our GGPoker bot crew.

We've been running solver-driven engines on GGPoker since the anonymous-table rollout shook out our HUDs. What we keep coming back to: the long-horizon read is gone, the opponent model has to converge in 80-150 hands, and the cleanest GTO output we ship is the easiest one to flag. These pages are how we keep that knowledge in one place.

By Raul Moriarty ·

Contact the team Questions, implementation talk, or just curious — message the team.
Dark GGPoker cash-game table — the live environment a solver-anchored decision engine reads from visible state.
The table state a decision engine actually sees — cards, pot, position, betting history.

Key points

  • In 2026 a "poker bot" means a decision engine anchored to a solver that acts on the client's visible game state. It does not read packets, predict cards, or exploit the server — none of those work against a modern operator.
  • GGPoker (NSUS Group) runs a four-layer detection stack: behavioural fingerprinting, statistical play-pattern analysis, anti-collusion graph models, and human review of high-volume accounts.
  • Anonymous tables and rotating screen names are what make opponent modelling hard. Long-horizon HUD tracking is dead at GG, so the model has to converge online inside roughly 100–200 hands.
  • The open research sits in multi-table state isolation, latency-aware inference, and detection-aware behavioural shaping. Pure GTO output (Game Theory Optimal) is paradoxically easy to flag — it reads as a fingerprint.
  • This site is a working notebook from the Poker Bot AI development team. If you want a straight answer on what is actually feasible on GGPoker — not the marketing version — talk to our team; researchers and curious players both welcome.

What we mean by "poker bot" in 2026

The phrase "poker bot" gets stretched so far in public discussion that most conversations start from a wrong premise. For the purposes of this site, a poker bot is software that takes visible game state as input — your own hole cards, the community cards, the betting history, stack sizes, position — and produces an action under a real-time latency constraint. It does not receive raw packets, it does not know an opponent's hidden cards, and it has no knowledge of the unshuffled deck. Everything a bot does, a human could do with the same information; the bot's only edge is doing it quickly, consistently, and at scale.

The interesting work sits in three layers stacked under that definition. The first is a solver-anchored baseline: precomputed strategies from counterfactual regret minimisation (CFR) variants, usually PioSolver or GTO+ for heads-up trees and MonkerSolver for multiway spots. These outputs are too large to run online and too slow to query naively, so the production system compresses them into action-frequency tables keyed on bucketed game states. The second layer is the opponent model, where most of the current research lives: lightweight online updates that converge in tens to low hundreds of hands against an anonymous opponent. The third is a policy combiner that decides how far to deviate from the baseline given the current opponent estimate, and folds in detection-aware behavioural noise.

Decision-engine flow: visible game state feeds a solver baseline and an online opponent model; a policy combiner merges them with timing noise to produce an action.
One action, three layers: solver baseline + online opponent model → policy combiner.

Working on something adjacent?

Building in this space, or want to understand how a particular piece works? The chat here is low-volume and read directly by the development team.

Contact the team

The GGPoker ecology in one page

GGPoker has been run by NSUS Group since launch, and by traffic it is the largest cash-game and tournament site in 2026. What matters to researchers is not the marketing surface — the WSOP affiliation, the ambassador roster — but the design and architecture decisions that govern what a bot can and cannot do on the platform.

Three of those decisions matter most. Anonymous tables with rotating screen names collapse the long-horizon HUD attack: there is no stable identifier to accumulate 50,000 hands against. The Smart HUD is operator-controlled and deliberately limited, and third-party HUDs and overlays are banned outright. And PokerCraft, the customer-facing analytics product, exposes only a thin slice of a much larger internal model that the security team runs against the entire player base to find statistical outliers. That internal model is the real teeth of detection — not the dashboards players actually see.

GGPoker formats by automation difficulty
FormatStack depthState complexitySolver coverageAutomation difficulty
NLH 6-max cash100bbMediumStrong (Pio, GTO+)Low — solved baseline, exploit layer dominates
NLH full-ring cash100bbHigh (multiway)Partial (Monker)Medium — multiway trees blow up
Rush & Cash100bbMediumSame as 6-maxLow, but seat-changes complicate opponent model
PLO 6-max / Rush & Cash100bbHighModerate (MonkerSolver)Medium-high — equity distributions flatten
Spin & Gold25bb startMediumStrong (Pio HU/3-max)Low for math, medium for multiplier-aware ICM
MTTVariableVery high (ICM, bubble)PatchyHigh — open research area

How detection actually works

GGPoker four-layer detection stack: behavioural fingerprinting, statistical play-pattern analysis, anti-collusion graph models, and human review on high-volume accounts.
Four weighted layers; escalation fires only once accumulated signal crosses a false-positive threshold.

The detection topology is layered, asynchronous, and weighted. No single event flags an account. Instead, signals accumulate over time, and an escalation fires only once the combined score crosses a threshold set conservatively against a false-positive budget.

Behavioural fingerprinting
Per-session client telemetry: the distribution of input timing, how long a finger rests on a button before selecting it (touch dwell on mobile), how curved the cursor path is on desktop, and the latency between choosing an action and confirming it. Cheap to compute, runs continuously, and bites naive implementations hardest.
Statistical play-pattern analysis
Distributional outliers: VPIP/PFR ratios sitting on solver mass with too little variance, bet-sizing clustered on exact pot fractions, fold-to-3bet frequencies that track the population to within ±0.5pp across thousands of hands. Pure GTO output is paradoxically easier to flag here than a noisier strong-human strategy, because population variance is the baseline.
Anti-collusion graph models
Account graphs joined by IP, device fingerprint, deposit method, KYC document, and table co-occurrence. This layer catches most of the high-impact bans (chip dumping, soft-play) — botting is a side-product when an operator runs a bot farm under one fingerprint.
Human review on flagged accounts
The decisive layer. Mathematical models propose; humans decide. A reviewer reads hand history, looks at chat behaviour, checks whether the account ever sits out for a phone call. Most botting bans are signed off here, not in an automated rule.

Areas covered on this site

Open questions for developers

The notes on this site are not finished. Five threads I think are genuinely open and would welcome discussion on:

  1. Online opponent-model convergence. Under anonymous-table rotation, what is the minimum hand count for a useful exploitative deviation? The current empirical floor sits around 80-150 hands for a generic VPIP/PFR/3-bet sketch; can a Bayesian prior on the population distribution cut this to 40-50 while staying robust to fish-vs-reg priors?
  2. Multi-table state isolation. Running four GGPoker tables on a single device with a shared opponent cache without leaking timing correlations across hands. The naive implementation gets caught on cross-table action-latency synchronisation.
  3. Detection-aware policy combiners. Treating the operator's classifier as a noisy adversary and shaping the output distribution to maximise EV under a budgeted detection probability. The literature on adversarial classification (Dalvi et al. 2004 onward) is mostly about spam; the poker case is more interesting because the cost matrix is asymmetric.
  4. LLM-augmented decision support. Frontier LLMs are bad at poker — they hallucinate ranges, misapply ICM, and have no calibrated frequency intuition. Are they useful at all? Tentatively, yes, for hand-history annotation and exploit hypothesis generation, but not for live decisions.
  5. MTT automation. ICM, bubble factor, and stack-depth variance make tournaments meaningfully harder to automate than cash. The interesting question is not "can it be done" but "where does the EV-per-engineering-hour curve flatten."

Contributions are welcome from anyone with first-hand knowledge of implementations or datasets touching the above. I try to answer every serious message, and good correspondence moves these notes forward far faster than I could alone.

Bottom line

This is a hard, fast-moving problem, and what gets advertised rarely matches what is actually engineerable against a modern operator. Most "GGPoker hack" claims are sales copy; the real work is narrow, adversarial, and unglamorous. If you want a straight answer on what is genuinely feasible on GGPoker today — and what is not — talk to our team. No pitch, just the real picture.

Get in touch

Low-volume channel for questions and discussion. Read directly by the Poker Bot AI team.

Contact the team