The first rigorous opponent-modeling framework grounded in solver data
GTO is not the goal at a real table. The goal is maximum EV against the player you're actually facing. This book takes the Cash 1.1.0 baseline from Book 1 and asks: given that a specific opponent departs from it systematically, how does your strategy change?
The framework is three layers per player type: Profile (what do they actually do?), Deviation Analysis (how far is it from GTO and where is the EV gap largest?), and Best Response (what exactly do you change, and how far from GTO should you go?). Layer 1 — the bot behavioral profile — is complete from external consultant analysis. Layers 2 and 3 await solver query data.
The first player type is bots. They are the most documented non-GTO player in our pool: three consultant reports, Darius's aggregate comparison sheet, and April 2026 meeting notes. The signal is extreme and unambiguous — donk rates at 32× GTO baseline, a full inversion of the standard size-to-hand-strength relationship, and a surface profile that actively misleads anyone relying on VPIP/PFR alone.
Profile data (Layer 1) comes from external consultant analysis — three specialist reports synthesized by John Andress, plus Darius's aggregate comparison sheets covering bot vs CFR behavior in STR+Ante format. All quantitative entries carry explicit confidence labels: ✅ confirmed (cited from aggregates or hand review), ⚠️ hypothesized (from meeting notes), ❌ missing (no source).
Deviation and best-response data (Layers 2–3) will come from direct solver queries — the same methodology used in Books 1–3. Format caveat: all current bot data is from STR+Ante format. Format adjustment deltas are available from Book 3. When a number may not generalize to standard cash, the chapter annotates it explicitly.
Six behavioral patterns that define the bot fingerprint
The "fake nit" paradox
32 VPIP / 24 PFR / 8% 3-bet looks like a tight-aggressive reg. Hidden underneath: AF >4.1 concentrated in specific node classes, trash 3-bet bluffs (73o, K8o), limp-behind and limp-raise of premiums, and aggression patterns no human with those surface stats produces. The mismatch between surface VPIP/PFR and actual behavior is itself a standalone detection signal.
Rounded bets and size schemes
Bots use round-BB chip amounts that produce unnatural pot fractions (4bb into 16.4bb pot; 13.5bb into 48.7bb pot). They also repeat multi-street size sequences — S-M-S, L-M-S, Block/Big/Block — that no human reg applies consistently. Detectable from bet amounts alone within 10–20 hands, without hand-strength data.
32× donk rate in 3-bet pots
Bot leads into the 3-bet aggressor at all three streets at frequencies the GTO baseline nearly never produces: 16% flop, 15% turn, 22% river vs a ~0.5% GTO baseline on flop. Sizes are half-pot and three-quarter-pot — the exact range where pool passivity is most exploitable (pool raises ~12%, GTO raises 25%+).
OOP continuation bet at 60–70% across all lines
Bot cbets OOP at dramatically elevated frequency: 60% SRP RFI flop, 59% turn, 48% river triple barrel; 70% 3BP flop, 58% turn, 65% river triple barrel. Turn overbets are 82% weak. Range composition is inverted — big OOP cbets are disproportionately bluffs, not protection.
"Big is weak" — sizing polarity inversion
The most strategically significant finding. Bots invert the standard size-to-hand-strength relationship: turn overbets OOP are 82% weak, river overbets ~50% weak, triple barrels in 3BP are super bluff-heavy. Any defensive strategy built on "big bet = strong" over-folds against bots by design.
Selective balance and pool-exploitation design
Bots are balanced in some nodes while running pool exploits in others — a combination no human reg produces. They use mid-sized donks precisely because the pool only raises ~12% against them (GTO raises 25%+). Selective balance is itself a detection signal: humans have consistent leaks everywhere, bots don't.
Framework
Why this book exists
The other books in this series ask: "what does our solver do?" This book asks a different question. What do real opponents do, how far is it from the solver, and what do you do about it?
GTO (Game Theory Optimal — the strategy a solver converges on when neither player can improve unilaterally) is not the goal at a real table. The goal is maximum EV against the player you're actually facing. Sometimes that's close to GTO. Sometimes it requires radical adjustment — 20pp more folds, ignoring bet-size tells entirely, snapping off overbets with bluff-catchers.
This book measures both where GTO is already correct and where you must deviate. It sits between theory and practice. The earlier books — Cash, Squid, Format Transitions — establish what the solver does. This book takes that baseline and asks: given that a specific opponent departs from it systematically, how does your strategy change?
The three-layer structure
Every chapter follows the same three-layer analysis. Think of it as a zoom lens: each layer pulls you closer to the opponent's actual strategy and closer to a concrete counter-adjustment.
Layer 1 — Profile
What does this player type actually do?
Profile data comes from external sources: consultant hand reviews, aggregate comparison sheets, meeting notes. It cannot be derived from the solver — the solver models GTO, not humans or bots. Profile data has quality gradations (confirmed vs hypothesized vs missing).
Three sub-layers build on each other:
- Surface stats — VPIP (voluntarily put money in pot), PFR (preflop raise percentage), 3-bet %, aggression factor. These are the first-order observables.
- Node-level frequencies — per-street action rates by pot type, position, and size bucket. This is the primary classification signal.
- Range composition — hand strength conditional on action. Requires showdown data. Most powerful, but hardest to measure.
Layer 2 — Deviation analysis
How far is this player type from GTO, and where does it cost the most EV?
Two questions drive this layer:
- Opponent's EV loss — how much does the opponent give up vs a GTO player by playing this way?
- Your exploitative gain — how much do you gain by adjusting, vs playing GTO yourself?
Deviation analysis requires solver queries. You take the opponent's node-level frequencies as fixed inputs and compute what GTO says the best response is. This is Chapter 2 for bots — currently blocked on data.
Layer 3 — Best response
What exactly should you change, and how far from GTO should you go?
Per node: raise frequency adjustment, call frequency adjustment, fold frequency adjustment, size adjustments. Presented as delta tables against the GTO baseline. This is the key output for coaching and article content.
Not all deviations are worth exploiting. Some are large EV gaps but require information you can't reliably have in real time. Chapter 3 ranks adjustments by actionability, not just EV magnitude.
The baseline: Cash 1.1.0
Every delta in this book is measured against Cash 1.1.0 — the solver's default 6-max cash game configuration: 6 players, 2 blinds, no ante, 100bb stacks, 3%/3bb rake.
This is the same baseline used in the format-transitions book. When a chapter says "bot OOP cbet SRP is 60% vs GTO baseline," that baseline is Cash 1.1.0's OOP cbet frequency at that node.
Important format caveat. Current bot data comes from a straddle+ante format (STR+Ante). The straddle and ante widen ranges and affect cbet frequencies. These numbers are not directly comparable to Cash 1.1.0 without adjustment. This caveat is repeated in every chapter that uses STR+Ante data.
The first player type: bots
Chapter 1 covers bot player types in our cash pool — software agents running CFR-derived (counterfactual regret minimization) or MDA-exploit (maximally exploitative adjustment) strategies that systematically deviate from human behavior.
Bots are the right starting player type for three reasons:
- Richest data. External consultant analysis (3 source docs), aggregate comparison sheets, meeting notes. More documented than any other player type in our pool.
- Extreme, clear-signal deviations. 3-bet pot donks at 32× the GTO frequency, inverted bet-size-to-hand-strength correlation, mechanical sizing fingerprints. The signal is strong enough to be unambiguous.
- Two immediate consumers. Anti-cheat (detection feature engineering) and coaching product (exploit content). Both teams need the same underlying analysis.
The 12 ranked signatures from the consultant's analysis provide the structure for Chapter 1. They are ranked by detection value and deviation magnitude — useful for anti-cheat triage. Chapter 1 reorganizes them by strategic category — useful for coaching and best-response analysis.
What each chapter covers
| Chapter | Player type | Data source | Status |
|---|---|---|---|
| Ch01 | Bots | Consultant analysis + Darius aggregates (STR+Ante) | ✅ complete |
| Ch02 | Bots — deviation EV | Solver queries (pending B1+B2 data blockers) | 🔴 blocked |
| Ch03 | Bots — best response | Solver queries (depends on Ch02) | 🔴 blocked |
| Ch04 | Solver-calibrated regs | Cash 1.1.0 proxy | Planned |
| Ch05 | Fish / passive callers | Platform aggregate (needs collection) | Planned |
What this book does not cover
- Bot detection algorithms. Feature engineering notes in Ch01 point toward detection, but building the model is anti-cheat's work.
- GTO theory from scratch. Covered in the Cash book. This book assumes the GTO baseline is understood.
- Variant-specific opponent behavior. "How do bots play Squid?" is out of scope for v1.0.
- ICM adjustments. Not in scope.
- Opponent modeling in real-time. This book describes strategy adjustments given a known player type. How to classify an opponent in real time is a separate problem.
What we didn't test in Chapter 0
Chapter 0 is a framing chapter — no new measurements. The coverage limits it inherits from the rest of the book:
- Non-bot player types. Ch04 (solver-calibrated regs) and Ch05 (fish / passive callers) are planned, not shipped. The three-layer framework is presented as general, but only Ch01 (bots) exercises it end-to-end in v0.1.0.
- Layer 2 and Layer 3 for bots. Deviation EV (Ch02) and best-response deltas (Ch03) are blocked on solver queries. Until those run, Layer 1 (profile) is the only layer with verified data in this book.
- Cash 1.1.0 baseline assumption. Current bot data is STR+Ante, not standard Cash 1.1.0. The baseline caveat is repeated per-chapter, but the "every delta is against Cash 1.1.0" framing in the intro is aspirational for v0.1.0 — deltas against Cash 1.1.0 require the format-transitions adjustments to be applied first.
- Real-time classification. The book assumes an opponent's player type is already known. How you detect that at the table is out of scope.
4 practical takeaways for reading this book
- Treat Layer 1 as the only solid ground in v0.1.0. Profile data is measured. Deviation EV and best-response deltas are spec'd but not yet computed.
- Mind the format caveat every time you see a bot frequency. STR+Ante ≠ Cash 1.1.0. Apply findings qualitatively; wait for the format-transitions adjustment for numeric claims.
- Use the three-layer framework as a classifier, not a ranking. Surface stats → node frequencies → range composition. Each layer is harder to measure and more diagnostic.
- Don't wait for Ch02 to act on Ch01. Ch01's practical takeaways stand on their own — the counter-strategy preview is usable today. Full EV ranking comes later.
Research notes
Structural chapter — methodology context only. Coaching readers can stop at the takeaways above.
Book version. This is book-4 v0.1.0. The source engineering-department/.../opponent-modeling/VERSION file governs; sources/manifest.yaml records the exact hash at build time. Per-section content regenerates from source on version bump.
Framework inheritance. The three-layer structure (profile → deviation → best response) is inherited from the anti-cheat consultant's framing and the Apr 15 2026 meeting consensus. It is not a novel framework invented for this book.
Cross-book coupling. This book consumes the Cash 1.1.0 baseline from book-1 and the format-transitions parametric model from book-3. When either source bumps a version, the numeric baselines referenced here go stale and need a rebuild.
Data provenance. Three external inputs ground Ch01: (1) John Andress's consultant synthesis doc, (2) Darius's Global Aggregates sheet (STR+Ante), (3) Apr 15 2026 meeting notes. Confidence labels (✅ / ⚠️ / ❌) are defined in PLAYER-TYPES.md and applied per row in Ch01.
Out-of-scope items, for the record. Real-time classification, ICM adjustments, variant-specific bot play (Squid / PLO / MTT), and bot detection model construction are explicitly out of scope for book-4 v1.0.0. They may land in separate books or in anti-cheat's internal documentation.
Further reading
[To be expanded as book-4 matures toward v1.0.0. Planned entries: opponent modeling theory (non-competitor sources per §9 citation policy), MDA / maximally-exploitative-adjustment framework, population exploitation literature.]
Sources: anti-cheat consultant analysis (Apr 2026), Darius's aggregate sheets, Apr 15 2026 meeting notes. Methodology: ../shared/methodology.md.
Bot Behavioral Profile
What this chapter establishes
This is the behavioral fingerprint for bot player types in our cash pool. Six signal categories, organized from fastest to confirm (mechanical fingerprints — no hand-strength data required) to highest exploit value (range composition inversions — require showdown data).
This chapter has two downstream consumers with different needs:
- Anti-cheat: use the ranked detection order (§1.0) and feature-engineering notes per section
- Coaching / exploit content: use the strategic organization (§1.1–§1.7) and detection notes for players
Format caveat: All quantitative baselines in this chapter come from Darius's "Global Aggregates STR + Ante" sheet — straddle + ante cash format. Whether these frequencies generalize to non-straddle standard cash is unconfirmed. See §1.8 and PLAYER-TYPES.md.
1.0 Detection Priority Index (anti-cheat reference)
Not every bot tell is equally useful. The consultant ranked twelve signatures by how fast they converge and how reliably they separate bots from regs.
| Rank | Signature | Category | Convergence speed | Data quality |
|---|---|---|---|---|
| 1 | Rounded bet sizes | Mechanical | Fast — visible from bet amounts alone | ✅ Confirmed (qualitative) |
| 2 | Donks in 3BP (all streets) | Aggression | Fast — donk freq converges in ~30 hands | ✅ Confirmed with numbers |
| 3 | Donks in SRP | Aggression | Fast | ✅ Confirmed with numbers |
| 4 | OOP cbet elevated (all sizes) | Aggression | Medium — needs per-size breakdown | ✅ BOT values confirmed; CFR missing |
| 5 | Big sizes = bluff (inverted MDA) | Range composition | Slow — needs showdown data | ✅ Confirmed (range comp numbers) |
| 6 | Cbetting OOP too much (frequency) | Aggression | Medium | ✅ BOT values confirmed; CFR missing |
| 7 | Unusual 3-bet / squeeze combos | Preflop | Medium — needs hand history review | ✅ Qualitative (examples cited) |
| 8 | High IP raise SRP flop and turn | Aggression | Medium | ✅ Partially confirmed with numbers |
| 9 | Turn sizing split + range composition | Aggression/Composition | Slow | ✅ Qualitative (from meeting notes) |
| 10 | River block-bet + overbet pattern | River | Slow | ✅ Some numbers, pattern confirmed |
| 11 | Weird multi-street size schemes | Mechanical | Medium | ✅ Qualitative (consultant cited) |
| 12 | Expanded opens (deepstack) | Preflop | Slow | ⚠️ Hypothesized; low priority |
1.1 Surface Profile — The "Fake Nit" Paradox
The bot population's HUD stats (heads-up display — the stat overlay most tracking software shows) look tight on first inspection.
| Stat | Approximate value | Confidence |
|---|---|---|
| VPIP | ~32% | ⚠️ Hypothesized — bot-vs-bot hand pollution suspected |
| PFR | ~24% | ⚠️ Hypothesized |
| 3-bet % | ~8% | ⚠️ Hypothesized |
| Aggression factor | > 4.1 | ✅ Confirmed from aggregates |
| Human reg AF ceiling | ~3.0 | ✅ Consultant statement |
32 VPIP / 24 PFR looks like a typical tight-aggressive winning regular. The 8% 3-bet is in-range for standard regs. But the actual strategic fingerprint is completely different from any human player with those surface stats.
The "fake nit" tell: bot surface stats look tight; range construction and node-level behavior reveal a wide, exploitative, high-aggression strategy hidden underneath. The mismatch between surface VPIP/PFR and actual play is itself a strong standalone read.
Here's where the surface stats break down:
- Cold-calls AK/AQ "at random" (VPIP looks wider/passive), but donks aggressively when it hits
- Limp-behind or limp-raise premiums (looks passive preflop), but fires all three streets postflop
- Trash 3-bet bluffs (73o, K8o) that don't show in surface PFR pattern until reviewed by hand
- AF > 4.1 at overall level, but concentrated in specific node classes — not evenly distributed
What this means: tracking only surface stats (VPIP/PFR/3-bet) against threshold-based rules will miss bots with tuned surface profiles. Node-level features are required for reliable detection.
1.2 Mechanical Fingerprints
These are the fastest-converging signals. No hand-strength data required — detectable from bet amounts alone within ~10–20 hands.
1.2.1 Rounded bet sizes
Detection priority rank: #1 (highest). Bots use round-number chip amounts that produce unnatural pot fractions. Consultant-cited examples: 4bb bet into a 16.4bb pot; 13.5bb bet into a 48.7bb pot.
Watch the chip amount, not the pot percentage. Across a handful of hands, if a villain's bets keep landing on integer BB counts while the pot is anything but round, flag the player — you're almost certainly not facing a human client.
Based on general poker theory: pot-geometry mismatch. Bots likely use integer BB-denominated internal sizing rather than the pot-fraction buttons that human clients default to — so their bet amounts consistently miss the preset fractions (33%, 50%, 66%, 75%, 100% of pot) that human bets cluster around. Falsifier: if bots used the same client interface as humans, their bet amounts would cluster near the same preset fractions — they don't.
| Signal | What to measure |
|---|---|
bet_bb_multiple |
Is bet_amount / bb near an integer or half-integer? |
bet_fraction_distance |
Distance from nearest preset button (33/50/66/75/100% pot) |
distinct_size_bucket_count_per_line |
>2 distinct sizes = rare for humans |
Meeting note (Apr 15): "The most valuable piece of detection here is the 'Rounded Sizings' + 'Size Scheme'... in addition to the MDA exploit alignment."
For players: if a villain consistently bets round-BB numbers (amounts ending in 0 or .5) across varying pot sizes, flag them.
1.2.2 Multi-street size schemes
Detection priority rank: #11. Bots use consistent multi-street size sequences that no human reg repeats systematically:
- S-M-S (small flop, medium turn, small river)
- L-M-S (large flop, medium turn, small river)
- Block / Big / Block
- Big / Block / Medium
"Even having 3 bet sizes like this all used consistently is very unusual for a strong human player." — consultant.
| Signal | What to measure |
|---|---|
street_size_sequence_bucket |
3-char string encoding {small/medium/large} per street |
rare_sequence_rate |
Frequency of sequences not in top-5 human patterns |
distinct_size_buckets_per_line |
Player-level entropy of size choices |
What this means: if a villain shows three different size choices across flop/turn/river in a single hand and repeats the pattern across sessions, treat it as a strong bot signal. No human reg uses three distinct sizes per line consistently.
1.3 Preflop Deviations
1.3.1 Unusual squeeze / 3-bet / 4-bet combos
Detection priority rank: #7.
Bots use "any two" hands in preflop pressure spots at non-trivial frequency. Examples from consultant hand review:
| Action | Example hands |
|---|---|
| 3-bet bluff | 73o; K8o BB vs SB 3-bet |
| Squeeze (3rd blind) | QJo squeeze vs CO iso |
| 4-bet bluff | A8ss tripling AT2ccc26 "to fold off better Ax" |
| Limp-behind | QQ, AA in spots where raise is standard |
| Limp-raise | TT+/AK from SB vs BB |
The detection signal: bots' bluff range has flat blocker share — they pick "any trash not blocking folds" rather than the blocker-concentrated bluffs that solver-studied regs use. Limp-behind and limp-raise with premiums are specific tells not present in any reg baseline.
| Signal | What to measure |
|---|---|
bluff_range_blocker_share |
Expected % of blockers in 3b/4b bluff range vs random |
limp_behind_premium_freq |
VPIP with TT+/AK in limp-behind spots |
limp_raise_freq_sb_vs_bb |
SB limp-raise frequency with TT+/AK |
What this means: adjust preflop ranges vs suspected bots — they will show up with any two in squeeze / light 3-bet / 4-bet spots at non-trivial frequency. Your 4-bet bluff-catch and flop calls vs their cbet need to account for the trashy bottom of their range.
Based on general poker theory: blocker effects. Blocker-concentrated bluffs work because they remove combos from villain's continuing range; a bluff range that ignores blockers leaks equity on paper but compensates by being wider than a human reg's bluff range — so you face more bluffs overall, but each individual bluff is less strategically constructed than a solver-trained reg's would be. Falsifier: if bots used standard blocker-weighted bluffs, their 3-bet/4-bet bluff range would concentrate in Ax and suited broadways — instead it includes 73o and K8o.
1.3.2 Expanded open ranges — deepstack
Detection priority rank: #12 (lowest).
Wider-than-baseline preflop opens concentrated at deeper stack depths. Lower priority — confirmation signal, not primary tag. No aggregate numbers from the consultant.
| Signal | What to measure |
|---|---|
open_freq_by_depth_bucket |
Position-conditioned open frequency at 100bb / 150bb / 200bb+ |
1.4 Flop Aggression Patterns
1.4.1 Donks in 3-bet pots — all streets
Detection priority rank: #2 — the second most useful bot tell after rounded sizing.
Bots lead (donk) into the 3-bet preflop aggressor at all three streets, at frequencies the GTO baseline produces almost never.
| Node | CFR baseline | BOT | Multiple |
|---|---|---|---|
| 3BP OOP Donk Flop | ~0.5% | 16% | 32× |
| 3BP OOP Donk Turn | — 🔲 GTO-01 | 15% | — |
| 3BP OOP Donk River | — 🔲 GTO-02 | 22% | — |
CFR turn/river 3BP donk baselines not in source — fillable via solver queries GTO-01/GTO-02.
Based on general poker theory: fold equity. Donking into the 3-bet aggressor forces them into a node their study has under-covered; bots use half-pot and 3-quarter-pot sizes where GTO would raise ~12% (population raises less) while small donks face ~25%+ raise frequency from GTO — so bots over-realize equity by pricing themselves in at the "fat middle" raise zone the pool doesn't punish. Falsifier: if the pool raised donks at GTO frequency (~25%+ vs small donks), the bot's EV from this line would collapse and they'd stop using it.
The consultant's assessment: "off-book" — not a solver line. Designed to manipulate and confuse human opponents operating on standard c-bet assumptions.
| Signal | What to measure |
|---|---|
donk_freq_3bp_flop/turn/river |
Per-street donk rate in 3BP OOP |
donk_size_mean_3bp |
Average donk size as fraction of pot |
donk_size_bucket_dist_3bp |
Distribution of half/3q/pot donk sizes |
What this means: very few human regs donk 3BP (three-bet pots) at all. Against a non-maniac villain, any 3BP donk is a bot signal. Raise more vs small donks (the GTO response); call wider vs half/3-quarter-pot donks — bots are not weighted to value and their range composition is flatter than human donkers'.
1.4.2 Donks in single-raised pots
Detection priority rank: #3.
In SRP (single-raised pots), bots lead into the preflop raiser with half-pot or 3-quarter-pot sizes at elevated frequency.
| Configuration | CFR OOP Donk Flop | BOT (overall SRP) |
|---|---|---|
| Overall SRP OOP | — 🔲 GTO-03 | ~20% |
| BTN vs BB | 4% | — |
| CO vs BB | 2% | — |
| HJ vs BB | 2.5% | — |
| BTN vs SB | 20% (positional artifact) | — |
| CO vs SB | 15% | — |
"Isolation bet followed by a call and a half-pot donk on A7" = dead-ringer tag per Apr 15 meeting.
Range composition by size: bigger SRP donks are more bluff-heavy. Smaller donks (blockbet turn cbet line) are strong; pot-size donk is weak; river overbet is strong.
| Signal | What to measure |
|---|---|
donk_freq_srp_flop |
OOP donk rate in SRP by villain position |
donk_bluff_ratio_by_size_srp |
Value/bluff split per size bucket (needs showdown data) |
What this means: against a non-maniac, half-pot or 3-quarter-pot donk on a dry board is a strong bot tell. Invert standard call/fold logic — over-fold to small donks (value-heavy), call wider to big donks (bluff-heavy).
1.4.3 OOP cbet elevated across all lines
Detection priority ranks: #4 (size-bucket breakdown) and #6 (overall frequency).
Bots continuation-bet out-of-position at dramatically elevated frequency.
| Line | CFR baseline | BOT | Note |
|---|---|---|---|
| SRP RFI OOP Flop Bet | — 🔲 GTO-04 | 60% | All size buckets combined |
| SRP RFI OOP Turn Bet | — 🔲 GTO-05 | 59% | |
| SRP RFI OOP River B-B-B | — 🔲 GTO-06 | 48% | Triple barrel |
| 3BP OOP Flop Cbet | — 🔲 GTO-07 | 70% | |
| 3BP OOP Turn Cbet | — 🔲 GTO-08 | 58% | |
| 3BP OOP River B-B-B | — 🔲 GTO-09 | 65% | Triple barrel |
CFR baselines fillable via solver queries GTO-04 through GTO-09 (see query-campaign.md Phase 0).
Range composition (confirmed): turn overbets are 82% weak; river overbets ~50% weak. This inverts the standard "big = strong" MDA (minimum defense adjustment — the framework that tells you how often to call based on bet size). Bots cbet too often at all sizes, and when they use big sizes OOP, the range is disproportionately bluff-heavy.
What this means: float OOP cbets more liberally and probe aggressively when they check back. Against a suspected bot, do not over-fold to big OOP cbets — the range is frequently weak. Full EV analysis depends on Ch02 solver queries.
1.4.4 High IP raise frequency in SRP
Detection priority rank: #8.
Bots raise IP more often than regs, with a mergey range (weak top pairs, not just nutted hands).
| Line | CFR | BOT |
|---|---|---|
| SRP: IP Raise vs OOP flop bet | 14–18% | 19% |
| SRP: OOP bets turn, IP X-R | — 🔲 GTO-10 | 23% |
| SRP: OOP bets turn, IP C-R | — 🔲 GTO-11 | 25% |
| 3BP: IP Raise flop vs OOP cbet | 8–15% (pos-dependent) | 12% |
| 3BP: IP X-F turn after check | — 🔲 GTO-12 | 58% |
CFR turn X-R, C-R, and 3BP XF fillable via solver queries GTO-10 through GTO-12.
The range is mergey — bots raise with weak top pairs where regs would call. This is detectable via showdown analysis (raise-then-show frequency vs range strength expectation).
1.5 Turn and River Patterns
1.5.1 Turn sizing split with range composition tell
Detection priority rank: #9.
Bots split their turn cbet between two size buckets (~1/3 pot and ~3/4 pot) where regs typically use one size per line:
- The smaller size merges more draws than the standard usage for that size bucket
- The larger size is used for a different range segment (value-protection lines)
"Another key bet sizing tell is the bots splitting their continuation bet sizing between one-third and three-quarters pot, with the smaller size often merging more draws." — Apr 15 meeting notes.
Exact bluff/value ratios per bucket are flagged in Darius's sheet but not quantified in the consultant analysis — this is a data gap.
| Signal | What to measure |
|---|---|
turn_cbet_size_dist_entropy |
Shannon entropy of size-bucket distribution per player per line |
distinct_size_buckets_turn |
Count of distinct size buckets used on turn per line |
draw_merge_by_size_turn |
% of draws in each turn size bucket (showdown data needed) |
1.5.2 River block-bets IP + high overbet frequency
Detection priority rank: #10.
Bots run a specific 3-street pattern: big flop → block turn → fire river with missed flush draw ("bad blockers").
| Line | BOT frequency |
|---|---|
| 3BP IP River triple barrel | 74% |
| SRP IP River triple barrel | 59% |
"River overbet bluffs at high freq with missed nut flush draws etc (BAD HANDS)" — consultant ranked doc.
River overbets are ~50% weak (inverted from standard sizing logic). The block-bet turn sets up the river overbet as a line that forces poor GTO responses — the pot has been inflated on the flop, then the turn block-bet constrains the pot, then the river overbet forces a high-SPR fold decision.
| Signal | What to measure |
|---|---|
big_flop_block_turn_river_rate |
Per-player frequency of the specific B-b-B pattern |
river_overbet_blocker_quality |
% of river overbets holding missed NFD / bad blockers |
river_overbet_showdown_win_rate |
Expected to be below GTO bluff-catch threshold |
What this means: snap-call river overbets from villains running this exact big-block-big pattern with any bluff-catcher. The measured bluff frequency is high enough that calling is clearly +EV.
Based on general poker theory: pot geometry. The block-bet turn is what makes this work — inflating the pot on the flop then constraining it on the turn sets up a river where SPR (stack-to-pot ratio) is unusually high relative to expectation, forcing the opponent into a large fold decision they're probably over-calibrated to make. Falsifier: if opponents raised the turn block-bet at GTO frequency instead of flatting passively, the bot would lose its river fold equity and the line would collapse.
1.6 Range Composition Inversions
1.6.1 "Big is weak" — the sizing polarity inversion
Detection priority rank: #5. The most strategically significant finding in the consultant's analysis.
Bots invert the standard size-to-hand-strength relationship.
| Node | Standard human logic | Bot range composition |
|---|---|---|
| Turn overbet OOP | Strong (protection / value) | 82% weak ✅ |
| River overbet | Strong | ~50% weak ✅ |
| Block-bet / small sizes | Thin value / protection | Value-heavy |
| Triple barrel 3BP | Strong | Super bluff-heavy / value-light |
"Big is weak, small is strong" — the entire bot playbook reverses the standard size-tell framework.
What this means: any GTO defensive strategy built on "big bet = protect your strong hands, fold bluff-catchers" significantly over-folds against bots. The bot is betting big because you fold too much, not because it has a strong hand. Defend harder against their big bets; fold more against their small bets.
Based on general poker theory: fold equity. The inversion works because standard MDA counter-strategy assumes opponents size up for polarization (value + nut draws) — a player who instead sizes up for fold equity inverts the conditional distribution, making the defender's "call more small, fold more big" heuristic the exact wrong response. Falsifier: if bots used standard polarized sizing (big = value-heavy), showdown data would show positive correlation between bet size and hand strength — instead the correlation is negative.
| Signal | What to measure |
|---|---|
bet_size_hand_strength_correlation |
Signed correlation between bet-size-bucket and equity at showdown. Negative = bot-like. |
overbet_bluff_ratio |
Fraction of overbets that are bluffs (showdown-conditioned) |
1.7 Meta-Observations
Five composite patterns emerge across signatures — not single metrics but behavioral profiles.
1.7.1 Inverted MDA on big sizes
Regs play "big = strong, triple barrel = strong." Bots invert: big sizes are disproportionately bluffs; triple barrels in 3BP are super bluff-heavy. The inversion is consistent, not random. Standard MDA counter-strategy (fold to big = value, call to small = polarized) is incorrectly calibrated against bots.
1.7.2 "Fake nit" profile
Surface VPIP/PFR look tight; cold-calls AK/AQ passively; looks like a nitty strong player. Hidden: donks aggressively, runs trash 3-bets, limp-behinds premiums then fires. The mismatch between surface and actual is a standalone read — no tracker needed if you're watching hand-selection closely.
1.7.3 "Set their own price" exploit
On half-pot / 3-quarter-pot donks, GTO raises 25%+. The population only raises ~12%. Bots use exactly these sizes because they over-realize equity on a non-solver line — a pure exploit of pool passivity that standard GTO training does not equip you to defend against.
Based on general poker theory: equity realization. Equity realization (the share of raw equity you actually convert to EV given position, stack depth, and opponent range) goes up when the opponent under-raises your donk, because you get to see more cheap turns and rivers with the weak portion of your range — the bot's half-pot donk is specifically calibrated at the size where pool-vs-GTO raise frequency has its largest gap. Falsifier: if the pool raised donks at GTO frequency (~25%+), the bot's extra equity realization would vanish and the donk line would become -EV.
1.7.4 Surgical balance, selective exploitation
Bots are "weirdly balanced / perfect" in some frequencies while leaning hard into MDA exploits in others. The selective balance is itself unnatural — human regs have consistent weaknesses everywhere. A player who appears to play correctly in some spots and wildly exploitatively in others is a bot tell.
1.7.5 Bot-vs-bot HU inflation
Consultant hypothesis: bots may deliberately play each other heads-up to inflate in-client VPIP and conceal real frequencies — making their management stats look wider/looser than their actual 6-max play. If confirmed, this makes surface-stat-based detection even less reliable and means bot aggregate frequencies in our pool data are contaminated by bot-vs-bot play.
What we didn't test in Chapter 1
Coverage limits every coaching reader should carry out of this chapter:
- Cash 1.1.0 comparability. All quantitative baselines in §1.1–§1.7 come from Darius's Global Aggregates STR + Ante sheet — straddle + ante cash, not standard Cash 1.1.0. Whether the frequencies generalize to non-straddle standard cash is unconfirmed. Apply the findings qualitatively until the GTO-01 through GTO-12 queries run in both formats.
- CFR baselines for 🔲 cells. Rows flagged with 🔲 GTO-01 through GTO-12 in the §1.4 tables have no solver baseline yet. The BOT values are confirmed; the deltas are not.
- Multiway pots. Darius's multiway tab is empty. Nothing in this chapter speaks to bot behavior in multiway — treat SRP/3BP findings as strictly heads-up-postflop.
- 3-bet spot specificity. Whether the 3-bet frequency deviation is concentrated in a few spots or spread thinly across many isn't resolved. Both dimensions matter for detection feature engineering and for counter-strategy tightness.
- Randomization vs pure strategy. We don't know whether bots use RNG-driven mixed strategies or deterministic actions per spot. Frequency-regularity features work for deterministic bots and fail for fully randomized ones.
- Turn sizing range composition. Exact bluff/value ratios per turn size bucket are flagged in Darius's sheet but not quantified in the consultant analysis.
- Deepstack opens. The §1.3.2 expanded-open hypothesis has no aggregate numbers behind it yet — confirmation signal only.
8 practical takeaways for playing against suspected bots
- Watch chip amounts, not pot fractions. Integer-BB bets into non-round pots across multiple hands is the single cleanest tag.
- Treat any 3BP donk as a bot signal. Non-maniac regs almost never donk 3BP. Raise small donks aggressively; call wider against half/3-quarter-pot donks.
- Treat half/3-quarter SRP donks on dry boards the same way. Over-fold to small donks (value-heavy), call wider to big donks (bluff-heavy).
- Don't over-fold to big OOP cbets. Range is frequently weak at bigger sizes — the "big = strong" assumption is upside-down here.
- Float OOP cbets more liberally and probe when they check back. Elevated cbet frequency across all lines implies thinner value + more air.
- Adjust preflop for any-two bluffs. Bots show up in squeeze / light 3-bet / 4-bet with trash at non-trivial frequency. Expect a wider, blocker-blind bluff range.
- Snap-call river overbets that follow big-block-big. The specific 3-street pattern is a documented bluff-heavy spot.
- Invert MDA on big sizes. Bot big bets are the line to defend harder; bot small bets are the line to fold more.
Research notes
Readers who only want the coach-facing pattern can stop at the takeaways above. Everything below is methodology context for anti-cheat and research reviewers.
Source provenance. The chapter synthesizes ../../../anti-cheat/docs/bot-signatures-consultant-analysis.md (John Andress, 2026-04-15), which in turn compresses 4 external consultant docs — see PLAYER-TYPES.md for the full chain. All quantitative BOT frequencies trace to Darius's "Global Aggregates STR + Ante" Google Sheet (127AmpRrlb7406mmqpg1WjvL3twLAg8ES1Ce3JLYlAhQ). Qualitative signatures (rounded sizing, multi-street schemes, squeeze combos) trace to the consultant hand-review doc (1nigfRSlqPndiuF-mg-XOZ32MJcTI0XxF47FbhNBP84M).
Confidence labels. Data marked ✅ is cited from source; ⚠️ is meeting-note hypothesis; ❌ is missing from all sources. See the om-player-types reference snapshot for the full taxonomy.
Pending actions from Apr 15 meeting. - Confirm average bot profile (~32 VPIP / 24 PFR / 8% 3-bet) after filtering bot-vs-bot hand pollution. Owner: anti-cheat group. - Produce 30–50 specific hands for tagging enforcement. Consultant says this is enough for high-confidence tagging. Owner: anti-cheat group.
Solver query tasks (not blockers — ready to run).
- GTO-01 through GTO-12 fill all 🔲 CFR cells. Query in STR+Ante format for like-for-like comparison, and Cash 1.1.0 for canonical reference. See query-campaign.md Phase 0.
- STR+Ante vs standard cash delta: query in both formats; use the format-transitions book to annotate any >5pp format-driven differences.
Consultant-flagged uncertainties (not yet resolved). - Turn sizing range composition: exact bluff/value ratios per size bucket are flagged but not quantified. - 3-bet spot specificity: "high frequency in specific spots, or low frequency across many spots? Where are they NOT 3-betting like pop?" — open.
Known data contamination. §1.7.5 bot-vs-bot HU hypothesis, if confirmed, means surface aggregate stats in our pool are inflated by bot-vs-bot play. Any surface-stat detection threshold derived from current aggregates needs revisiting once bot-vs-bot is filtered.
Further reading
[To be expanded as book-4 matures toward v1.0.0. Future entries will cover opponent modeling theory, MDA-exploit framework references, and bot-detection literature from non-competitor sources — per §9 citation policy.]
Sources: ../../../anti-cheat/docs/bot-signatures-consultant-analysis.md (John Andress, 2026-04-15); original consultant docs listed in PLAYER-TYPES.md.
Deviation Analysis
Chapter status: Coming in v1
EV analysis of bot deviations — which of the 12 signatures produce the largest exploitable gaps. Requires 12 GTO baseline solver queries (Phase 0 of query-campaign.md) plus STR+Ante vs standard cash format deltas. Bot surface stats require confirmation after filtering bot-vs-bot hand contamination.
Preview of what's in this pillar: Deviation EV tables per node, GTO-01 through GTO-12 baselines, STR+Ante format adjustment, exploit gain vs GTO-play baseline
Best Response Strategy
Chapter status: Coming in v1
Per-node adjustment tables against bots — raise more vs donks, call wider vs large OOP cbets, snap river overbets with bluff-catchers, fold more to small sizes. Ranked by actionability, not just EV magnitude. Final exploit EV tables depend on Piotr's BEX model once bot profile is confirmed.
Preview of what's in this pillar: Delta tables vs GTO baseline (raise/call/fold freq per node), BEX exploit EV, adjustments ranked by actionability, detection-to-adjustment mapping
Further reading
The opponent-modeling framework builds on foundational GTO theory and academic work in AI opponent modeling. The bot behavioral data in Chapter 1 comes from external consultant analysis rather than these published works, but the conceptual framework is grounded in the literature below. None of our specific numbers are from these sources — they come from the consultant analysis and Darius's aggregate sheets.
Opponent modeling and exploitation in poker AI
- Noam Brown & Tuomas Sandholm, "Superhuman AI for multiplayer poker," Science Vol. 365 (2019) — Pluribus. The first peer-reviewed demonstration of superhuman AI in 6-player NLHE; establishes how CFR-based AI plays in a population of non-GTO opponents.
- Sam Ganzfried & Tuomas Sandholm, "Safe Opponent Exploitation," ACM Transactions on Economics and Computation Vol. 3, No. 2 (2015) — foundational treatment of when and how to deviate from GTO to exploit a known opponent type without catastrophic risk.
Modern GTO treatment relevant to best-response computation
- Matthew Janda, Applications of No-Limit Hold'em (Two Plus Two Publishing, 2013) — the GTO baseline this book deviates from. Essential for understanding what "deviation from GTO" means in direction and magnitude.
- Will Tipton, Expert Heads Up No-Limit Hold'em (D&B Publishing, 2013–2014, 2 volumes) — rigorous treatment of range vs range dynamics and best-response computation.
Foundational poker mathematics
- Bill Chen & Jerrod Ankenman, The Mathematics of Poker (ConJelCo, 2006) — the mathematical foundations of GTO poker that the deviation analysis is measured against.