Results
NexusGTO is a six-player no-limit hold'em AI. It plays the blueprint, a strategy trained offline. Once the flop is dealt and only two or three players remain, it searches each time it is to act.
Two offline tests measure NexusGTO, both with 100-big-blind stacks and no rake. In the first, a local best responder (LBR) plays the blueprint and the search heads-up in the blinds. The best responder is a program that looks one step ahead to exploit the policy it faces. In the second, the search plays six-player matches against five copies of the blueprint (the blueprint field).
Results are in big blinds won per 100 hands (bb/100). Each ± is one standard error, and a 95% confidence interval (CI) is the estimate ± 1.96 standard errors.
01
Summary
The best responder played the same 2,000 deals against each policy. Its figures are range-expected: each showdown is scored as an average over every hand the policy could hold, an estimate with the same mean as the chips actually won (realized) and lower variance. The best responder took 114.8 ± 21.1 bb/100 from the blueprint alone (95% CI 73.5 to 156.0). A policy that folded every hand heads-up in the blinds would lose only its blinds, 75 bb/100. That falls just inside the blueprint's interval, but in chips won the blueprint lost 152.7 ± 27.9 (95% CI 98.0 to 207.5), wholly above 75, so it did worse than folding everything.
NexusGTO's search runs on the flop, turn and river (every-street search) and re-solves from the start of the current betting round. One version, the tracked search, also keeps track of its own range (the hands it could hold, given its actions so far). The best responder took 9.2 ± 18.6 from it (95% CI −27.3 to 45.7), which the test can't tell from zero. A stronger exploiter could still find an edge. The best responder looks only one step ahead and bets only NexusGTO's own sizes, so what it took from each policy is a lower bound. From the same search without own-range tracking (the untracked search), it took 64.4 ± 17.6.
In range-expected terms and paired deal by deal, the best responder took 105.6 ± 24.2 less from the tracked search than from the blueprint alone (95% CI 58.1 to 153.1). Searching without own-range tracking accounts for 50.4 of that drop (95% CI 1.6 to 99.2), and adding own-range tracking for the other 55.2 (95% CI 12.4 to 98.0).
The six-player matches use duplicate deals, each played six times, once with the search in each seat. AIVAT (Burch et al., 2018) scores each match after taking out the luck it can estimate from the players' known strategies and the card odds. Against the blueprint field, the tracked search won +5.73 ± 1.53 bb/100 over 14,250 duplicate deals (95% CI 2.74 to 8.72). The untracked search won +8.61 ± 1.72 on the same deals, but the best responder took 64.4 from it. Paired deal by deal, the tracked search's result was 2.88 ± 1.62 lower (95% CI −6.05 to 0.30), a difference that isn't significant.
The numbers
What a local best responder took from each policy.
02
The best responder
The best responder runs local best response (Lisý and Bowling, 2017), which estimates how much a policy can lose to an opponent that knows its strategy. It joined the tests on September 16. It plays a heads-up slice of the game, small blind against big blind with everyone else folded, and each deal runs twice with the seats swapped. At each of its own decisions, the best responder reads the policy's strategy for every hand the policy could hold and picks the action that scores best one step ahead. It can bet only NexusGTO's own sizes, so bets of other sizes go untested. A full best response, which looks ahead to the end of the hand and can bet any size, would take at least as much.
In chips won, the best responder took 121.0 ± 32.2 less from the tracked search than from the blueprint alone (95% CI 57.8 to 184.2). On that measure, searching without own-range tracking accounts for most of the drop, 90.2 ± 34.8, and the further 30.8 ± 30.8 from adding own-range tracking isn't significant.
The blueprint's 114.8 comes from a rerun on the searches' deals on October 4. In an earlier run on September 16, on 3,000 other deals, the best responder took 91.8 ± 15.9 from the blueprint, within noise of the rerun.
On one PC, a deal against the blueprint took 1.7 seconds, since the best responder only has to read the stored strategy. A deal against a search took about 30 seconds, because every node where the search acts, and every reply the best responder tests, needs its own 3-second re-solve. The re-solve behind a tested reply is a fresh one, not the solve the search goes on to play, so the best responder's model of a search is less exact than its model of the blueprint. Even so, it took 64.4 from the untracked search and 85.9 from the September 17 search.
Neither test measures six-player exploitability. In a separate test in August against an outside opponent, earlier configurations played GTO Wizard's heads-up benchmark at a deeper stack and finished below its always-fold baseline. The write-up gives the score and conditions under Limitations.
Table D. What a local best responder took from each policy in bb/100 over 2,000 deals, small blind against big blind at 100bb. Values are range-expected unless marked realized. The blueprint and the searches below it played the same deals, except where marked. The best responder could bet only NexusGTO's own sizes. (a) The best responder never played flop-only search, which searches only the flop and leaves the turn and river to the blueprint. The row is a September 17 run against an every-street search that used earlier range inputs. The project's results log used it as the flop-only figure for the rule's LBR clause. (b) The project's results log first printed a standard error of 21.3 for this gap; the 21.8 shown comes from a re-pool of the per-deal data. (c) An earlier run, on September 16, used the same best-responder code and settings on 3,000 other deals. It isn't paired with the other rows, and its per-deal data wasn't kept. The first row is a rerun of the blueprint on the searches' deals, on October 4.
03
How the matches work
Across the six seatings of each deal, most of the card luck cancels out. Each configuration's 14,250 deals on the blueprint field come to 85,500 hands, and the +5.73 bb/100 works out to 57 mbb (thousandths of a big blind) per hand. Pluribus's 48 mbb per hand over 10,000 hands came against professionals (Brown and Sandholm, Science 2019) and the search's 57 against copies of its own blueprint, so the two can't be compared.
AIVAT prices the luck of each turn and river card and of each action a seat sampled from its known strategy. It has no term for the flop cards, so their luck stays in the result.
Every configuration in Table A played the same deals, seeds 9101 to 9119, so each difference in Table B is paired deal by deal. Sharing deals also means the configurations' results aren't independent of each other.
Flop-only search re-solves only on the flop and lets the blueprint play the turn and river. With four or more players left, every configuration plays the blueprint.
With own-range tracking, the engine weights each hand it could hold by the chance it would have taken its actions so far with that hand. The weights come from the strategies the engine actually played, the search's where it searched and the blueprint's elsewhere, and each new search starts from that weighted range. Without tracking, each search assumes the engine played the blueprint, so the range the engine really has goes unprotected. Copies of the blueprint don't take advantage of that, but a best responder does; Pluribus tracked its own range to guard against the same leak.
The blueprint field is mostly a bug check, since copies of the blueprint play just as the search assumes. A loss to them would point to a bug in the search, and a win says little about other opponents. The best responder tests the search against play it doesn't assume, and so do the nit and maniac fields, two scripted shifts of the blueprint.
04
The blueprint field
Seven configurations played the same 14,250 deals against the blueprint field. Table A gives each result, and Table B their paired differences. Two of the seven search only the flop. The stored flop-only run played these deals on September 22, without the combo prior, which weights each preflop hand class by its number of card combinations. The matched flop-only run played them in the same batch as the every-street searches, with the untracked search's settings except that it searched only the flop.
The first search configuration played 3,000 deals on September 13, before the search's range inputs were fixed. That run and a second 3,000-deal run of the same configuration cover the first 6,000 of these 14,250 deals, and the last two rows of Table B compare the tracked and untracked searches with the first configuration on those 6,000. The noise-floor row compares two nearly identical configurations, so its 2.30 ± 1.37 is one measure of how far the search's own randomness can move a result on these deals.
Other configurations ran earlier, and the main ones, at 3,000 deals each, are under Earlier runs.
Table A. Each configuration against five copies of the blueprint (bb/100, AIVAT, 14,250 deals). The last column is what the best responder took heads-up in the blinds over 2,000 deals (Table D). † Worked out from the standard error, since the run reported no interval.
Table B. Each row subtracts one configuration's result from another's on the same deals; the last two rows use the 6,000 deals both configurations played. † Worked out from the standard error, since the run reported no interval.
05
The nit and maniac fields
The deviating fields in the decision rule below are the nit and maniac fields, and neither is a model of real players. Facing a bet, a nit seat moves half of the blueprint's call and raise probability to fold, and in an unopened pot it moves half of its bet probability to check. A maniac seat moves half of its check and call probability to raises and 30% of its fold probability to call. Each seat samples from its shifted strategy, so AIVAT still prices its actions exactly.
Rows marked "vs the blueprint" subtract what the blueprint itself won from the same seats on the same deals, and the other rows subtract one configuration from another.
On the nit field, the tracked search beat the blueprint by 2.53 ± 1.09 bb/100 over 6,000 deals (95% CI 0.39 to 4.68), which no earlier configuration had done at 95%. The first search configuration had scored 7.31 ± 1.78 below the blueprint there over 3,000 deals. The decision rule compares with the stored flop-only run, and on the nit field the tracked search beat that run by 2.54 ± 1.13 (95% CI 0.32 to 4.76). On the maniac field it scored 2.0 ± 3.7 below the matched flop-only run, a difference that isn't significant.
Table C. Results against the scripted nit and maniac fields in bb/100, paired on the same deals and scored with AIVAT, over 6,000 deals unless noted.
06
The decision rule
The decision rule, committed before the run started, was written to choose between every-street and flop-only search. Apart from the bracketed words, the quote is exact. In it, "flop-only" means the stored flop-only run.
Every-street [is adopted] if its minus-flop-only lower 95% bound on the blueprint field is above −1.5 bb/100, it beats flop-only at 95% on at least one deviating field, and LBR is not worse.
It [is adopted] outright if it beats flop-only on the blueprint field at 95%.
Otherwise flop-only [is adopted] and [the decision-audit cells] say what to fix next.
Times are US Eastern, from the project's commit history and logs.
- Sep 23, 2026, 08:42: rule committed
- 12:35: the run's configuration, own-range tracking included, committed to the results log
- 12:45: own-range tracking committed
- 12:49: run launched
- 13:02: a conditioning fix committed, with the job queues restarted on it
- 17:28: first results committed
- Sep 24, 00:52: the run's full results committed
The plan containing the rule named no configuration; it spoke of pairing "the best every-street configuration" with the stored flop-only run. It did list own-range tracking among the range fixes to build, and at 12:35, before launch, the project's results log named it in the run's configuration. Own-range tracking is the one difference between the tracked and untracked searches, and its code went in about four hours after the rule and four minutes before launch.
Taken literally, the rule falls through to flop-only for the tracked search (Table E, clause 3). Against the stored flop-only run, its lower 95% limit (the bottom of the 95% CI, which the rule calls the "lower 95% bound") was −1.61 and missed the −1.5 margin by 0.11. Clause 2 would adopt the untracked search outright, since it beat the stored run at 95% (lower limit 0.99). But the untracked search joined the run after it had started, and the rule doesn't say whether a configuration added then counts. The project's results log counted it, and the later configurations in Table A build on the untracked search. Even so, the tracked search leads these results, because the best responder, heads-up in the blinds, took about 55 bb/100 less from it than from the untracked search in range-expected terms (Table D). In chips won that gap is 30.8 ± 30.8, which isn't significant.
Table E. Each condition of the rule against what the run measured, in bb/100: 14,250 deals on the blueprint field, 6,000 on the nit field and 2,000 heads-up deals for the best responder. With no best-responder run against flop-only search, the LBR row compares with the 85.9 the best responder took from the September 17 search on other deals, as the project's results log did (Table D, note (a)).
07
Earlier runs
These runs came before the 14,250-deal runs. Each started opponents' ranges from a prior that gave every preflop hand class the same weight, so one card combination of a pair counted twice as much as one of an offsuit hand, and a suited combination three times as much. Every run in Table F but the last also built those ranges from preflop actions only. The last row's conditioned ranges had a suit-pooling defect, fixed on September 23.
The bar these runs had to clear was a win over the blueprint at 95% confidence. At 3,000 deals, though, the AIVAT standard errors against the blueprint ran 3.1 to 3.9 bb/100, too wide to pick out an edge of 4 bb/100. And the bar Pluribus itself had cleared was a significant win over professionals, never a win over its own blueprint. So from September 22 each configuration played 14,250 deals on the blueprint field, and the tests brought back the nit and maniac fields, which play differently from the blueprint and had first run on September 14.
To see which input fix mattered, a decision audit ran the search on 1,200 turn and river spots from blueprint self-play and scored each re-solve against the blueprint's own play at that spot. Because the spots come from self-play, its scores are first-order estimates. Given every player's true range, which the fixed conditioning reproduces in blueprint self-play, turn and river search scored +4.05 ± 2.02 bb/100 against the blueprint's play with the last iteration's strategy, the one the engine plays. Averaging the river strategy over iterations gave +3.51 ± 2.00. Compared spot for spot with the old inputs, correct ranges were worth +4.65 ± 1.48 and the combo prior alone +3.55 ± 1.13.
Table F. Search configurations with defective ranges against the blueprint field, 3,000 deals each, in bb/100. None used the combo prior. The second row is a paired difference between two budgets.
08
Search time and fallbacks
Each solve had a 3-second deadline on 8 threads. The deadline stopped the CFR iterations, and setting up the solve came on top of it, so the wall times in Table G run past 3 seconds. When a solve didn't return a usable strategy, the engine played the blueprint for that spot.
The tracked search applied own-range tracking in all 38,451 of its solves and fell back to the blueprint in 907 of them (2.36%). The run notes classify 906 of those fallbacks by cause.
- 537 where the search returned an exactly uniform strategy. Of these, 417 were all-in spots where the only legal action was a check, and about 120 were spots with a real choice.
- 310 three-player spots facing a second raise, where the game allowed a third raise and the search tree didn't.
- 52 three-player histories already past the two-raise cap.
- 7 where the strategy for the hand held too little mass to use.
Table G. Solves per configuration on the blueprint field over 14,250 deals. Each of the run's 19 jobs, one per seed, has its own median (p50) and 95th-percentile (p95) wall time, and the table gives the median of each across the jobs. The first configuration's row comes from its 3,000-deal run and gives a mean in place of the median.
09
Harness checks
Before any of its scores counted, the harness ran cases with known answers. A match of the blueprint against itself must score exactly zero, and an assertion in the code enforces that. Over 3,000 deals without AIVAT, the harness caught a blueprint that plays a random action 20% of the time but missed one that does so 5% of the time.
Over 20,000 deals, AIVAT cut the per-deal standard deviation from 2.545 to 1.775 bb per hand, so a result scored with AIVAT needs about half as many deals for the same precision.
Table H. Checks on the harness. The first three have known answers. The last two measure the noise between two nearly identical configurations and how often a lookup in blueprint self-play found a trained row.
Table I. AIVAT validation on a blueprint that plays a random action 5% of the time, over 20,000 deals.
Next
History