SHARINGAN-2: Open Six-Player Poker AI
SHARINGAN-2 is the open source poker AI model from Poker Sharingan: a six-player no-limit hold'em blueprint trained from scratch, played with real-time search on the turn and river. Weights and code are public. This page covers what the model is, how it was trained, its results with confidence intervals, how it plays, how to use it, and its limits.
What SHARINGAN-2 is
SHARINGAN-2 is a six-player poker AI. It is a strategy table (the blueprint) computed by self-play, combined with a search that refines decisions during the hand. It follows the method of Pluribus and is the model that ships with the open-source Pluribus reproduction.
The code is in Rust and licensed Apache-2.0 at github.com/markokraemer/poker-sharingan. The weights are at huggingface.co/markokraemer/sharingan-2. The model runs on CPUs. No GPU was used to train or play it.
The training run
There was one training run, called run "C," which used the medium bet-size menu. It trained to the full budget of 1.83e11 MCCFR iterations and finished on 2026-11-02. Earlier checkpoints are not separate models. They are snapshots of the same run at 2e10 and 4.77e10 iterations, so they are the same model trained less.
The algorithm is external-sampling Monte Carlo CFR with Linear CFR discounting early on and negative-regret pruning. Pruning applies to 95% of iterations and never on the river. Regrets live in a lock-free hash store. Training used rented bare-metal CPU servers.
Why train on CPUs? MCCFR is a sampling method. Each iteration walks a small piece of the tree and updates a table in memory, which suits many cores and large RAM better than the dense matrix work GPUs are good at. This is the same choice the Pluribus authors made.
The game is abstracted. Preflop is lossless with 169 hand classes. Flop, turn and river use 200 buckets each, with imperfect recall and suit isomorphism. Off-tree bets are handled with a "shadow game" state, which cut exploitability by about 37 times compared with naive nearest-size translation. The CFR page explains the algorithm family.
| Checkpoint | Iterations | Notes |
|---|---|---|
| Early | 2e10 | With search, +77.6 bb/100 over 2,329 live hands on a public bot arena. Leaderboard track ID sharingan-1. |
| Middle | 4.77e10 | Beat SvanBot, the top bot on that arena, in both seatings. |
| Final (SHARINGAN-2) | 1.83e11 | Full budget; the model released. |
Results
Head-to-head results use 3 vs 3 seating over 4M deals, with duplicate deals and AIVAT luck correction, at 95% confidence. The unit is mbb/game, thousandths of a big blind per hand. This page explains the method.
| Match | mbb/game (95% CI) |
|---|---|
| SHARINGAN-2 vs 2e10 checkpoint | +5.09 ± 1.16 |
| SHARINGAN-2 vs 4.77e10 checkpoint | +1.97 ± 0.97 |
More training helped, with diminishing returns: the gain over the 4.77e10 checkpoint is smaller than the gain over the 2e10 one. The live-arena numbers in the table above are from short runs and carry wide uncertainty.
Why report checkpoints at all? Because they show the training curve. A blueprint is only a snapshot of an iterative process, and each checkpoint is a point on that curve. The 2e10 checkpoint is already strong enough to be the leaderboard reference. The final model is better than it, but the step from 4.77e10 to 1.83e11 iterations is worth only about 2 mbb/game against the middle checkpoint.
As a sanity check, we trained a short best response for 12M iterations against the model. It found no profitable exploit and loses. This is not a measure of exploitability. A stronger exploiter might do better.
How it plays: blueprint plus turn and river search
Preflop and flop actions come from the blueprint. On the turn and river, the model runs a nested, unsafe, depth-limited Monte Carlo Linear CFR search with 200,000 iterations. It keeps Bayesian beliefs over the 1,326 possible hole-card pairs each opponent could hold, and at the leaves each player picks among four continuation strategies. A time budget applies, and if the search runs out of time the model falls back to the blueprint action.
"Unsafe" means the search does not guarantee the result is no worse than the blueprint. It is a practical trade, the same kind of one Pluribus made. The Pluribus page describes the original design in detail.
Search is also what makes the model respond to the specific hand. The blueprint is the same for every table, but the search starts from the current pot, stacks, board and action history, and it weights the opponent's possible holdings by how they have played so far. A bet that would be rare with a weak hand shifts those beliefs toward strong ones, and the search adjusts.
The search is nested. When an opponent's action inside the subgame takes the hand to a new decision, the search can re-solve from there. This keeps the cost bounded while allowing the strategy to react to unusual lines. The time budget protects against slow turns, so the model always returns an action.
How to use the weights
- Play against it. Open the browser table. No install.
- Download. Get the files from Hugging Face, for example with
huggingface-cli download markokraemer/sharingan-2, and clone the GitHub repo for the code. The docs have build and run steps. - Test your bot. Write
act(state)in Python and runsharingan submit mybot.py. A hosted run plays 20,004 hands and returns a verified score. The leaderboard reference opponent is the 2e10 checkpoint blueprint without search. - Use an agent. Tell your coding agent: "Read https://sharingan.poker/skill.md, then build a poker bot and get it on the leaderboard."
For guidance on building a bot, see poker bot, and for how solvers differ from bots, poker solver vs bot.
Limits
- SHARINGAN-2 has not played professional human players. Its results are against bots and earlier checkpoints.
- The best-response test was short. We do not claim the model is unexploitable or superhuman.
- It is a six-player model on a specific abstraction and bet menu. Other stack depths, rules or formats are out of scope.
- Search covers only the turn and river. Preflop and flop rely on the blueprint.
- Bots are for research and bot arenas. Real-money poker sites ban bots.
FAQ
What is SHARINGAN-2?
An open-source six-player no-limit hold'em AI: a blueprint trained with Monte Carlo CFR on CPUs, played with real-time search on the turn and river. Weights are on Hugging Face and code is on GitHub under Apache-2.0.
How was SHARINGAN-2 trained?
In one run of 1.83e11 MCCFR iterations on rented CPU servers, using the medium bet-size menu. Earlier checkpoints at 2e10 and 4.77e10 iterations are the same model trained less.
How strong is SHARINGAN-2?
It beats its own 2e10 checkpoint by +5.09 ± 1.16 mbb/game and the 4.77e10 checkpoint by +1.97 ± 0.97 mbb/game (3 vs 3, 4M deals, duplicate with AIVAT, 95% CI). It has not played human professionals.
Where can I download the SHARINGAN-2 weights?
At huggingface.co/markokraemer/sharingan-2. The code is at github.com/markokraemer/poker-sharingan.
Can I play against SHARINGAN-2?
Yes, in your browser at sharingan.poker/play/. You can also submit a Python bot and have it scored on the leaderboard.