A Blundermind bot is a layered configuration that wraps a chess engine in a personality.
Each layer adds constraints and biases on top of the engine's raw move candidates, producing a bot with a
distinctive — and reproducible — playing style. Bots can be saved, loaded, and shared as .json files.
The Engine section determines which brain generates move candidates and how strong it plays. All engines share the same Centipawmeter strength dial (ELO 600–2600).
A neural network trained on tens of millions of human Lichess games. Maia produces a ranked probability distribution over legal moves rather than a single best move, which makes it uniquely suited for human-like, stylistic play. Strength is set directly in ELO — the network itself is selected to match.
Stockfish 18 Lite (WASM). Alpha-beta search with NNUE evaluation. Strength is controlled via Skill Level (0–20) mapped from the ELO dial. Deterministic by default; temperature sampling can be applied on top of Stockfish's MultiPV output to add variety.
Opens from the Lichess Masters or Lichess community database for a configurable number of moves, then hands off to Maia for the midgame. The opening ELO and Maia ELO are set separately.
Same opening-book phase as Lichess-Maia, then falls back to Stockfish. Good for bots that should know their theory but play engine-style after the opening.
Blends Maia and Stockfish by weight for every move. A 70/30 Maia/SF split plays mostly human-style but with occasional engine precision.
Temperature reshapes Maia's probability distribution before sampling. It has no effect when using pure Stockfish without MultiPV.
| Preset | T value | Behaviour |
|---|---|---|
| Top move | argmax | Fully deterministic — always Maia's #1 pick |
| Focused | 0.4 | Mostly top 1–2 moves; small variation |
| Neutral | 1.0 | Samples Maia's unmodified distribution |
| Varied | 1.8 | Wider sample; surprise moves more frequent |
| Wild | 3.0 | Even low-probability moves get meaningful weight |
The slider accepts any value from 0.1 to 4.0. The live chart shows the full per-move pipeline on a reference position: Maia's raw distribution → after temperature → after the personality reweighting scaled by the CP Budget. Note that temperature governs only the sampled 70% of moves — 30% of the time the bot plays its top-ranked choice outright.
The personality layer operates on the ranked list of candidate moves produced by the Maia engine.
The Centipawmeter sets the personality's allowance: the most real, engine-calculated centipawns a personality-driven pick may lose versus Maia's most-popular move. It does double duty — it scales how hard the attractor sliders push, and it is enforced literally: when the personality's pick differs from the popular move, Stockfish evaluates both, and a pick over budget is rejected (the bot walks down its preference list until a move fits). At 0 cp personality traits are effectively disabled; at 300 cp the bot can genuinely sacrifice a knight to satisfy its style. On each move the bot plays its top-ranked choice outright 30% of the time and temperature-samples the other 70% — opinionated, but never perfectly predictable.
A separate slider (always ≥ Budget) that is the absolute backstop on everything else — temperature sampling, Luck, Bad Day, and time-pressure mechanics. No played move may be more than the Floor's centipawns worse than the most-popular move, engine-checked. Slide it to the top (Off) and nothing is capped — a beginner-level bot can genuinely hang its queen, which keeps games winnable and fun for novices. The Engine panel shows both values beside the Elometer, with a one-click recommendation matched to the chosen ELO. Budget and Floor get separate ELO-scaled recommendations: Budget is the persistent per-move style spend (10 cp at master level up to ~120 cp for novices), while the Floor bounds the worst single move (80 cp up to ~520 cp).
A dual-thumb slider that selects a band within the candidate list ranked by Maia probability — how often players at the chosen rating play each move, which is not the same as engine quality. The right thumb excludes the most-expected mainstream moves; the left thumb excludes the rare tail. The tail isn't a defect zone: sharp tactics and unconventional ideas often live there, so restrict it only if you want predictable, book-standard play. Default: 0–100% (the full distribution).
The 11-spoke radar summarises the active attractor profile. Drag any spoke node directly, or use the sliders below the radar. The radar updates live.
Each attractor adds a continuous bias score to candidate moves. Scores are summed across all active attractors and re-rank the whole candidate list; the bot then plays its top-ranked choice 30% of the time and temperature-samples the re-ranked list the other 70%, with the CP Budget verifying the final pick's real cost. Sliders run −5 (left label) to +5 (right label); 0 = neutral (no effect).
| Attractor | Left (−) | Right (+) | Mechanism |
|---|---|---|---|
| Chaos Agent | Simplifier | Chaos Agent | Scores via Stockfish MultiPV σ (std-dev of top-N evaluations). High σ = tactical, branching position. |
| Complicate When Winning | Simplify when winning | Complicate when winning | Activates when eval ≥ +100 cp. Boosts (or suppresses) moves that increase MultiPV variance — keeping complications alive vs. trading into a clean win. |
| Space Cadet | Space Waster | Space Cadet | Counts weak squares (empty, unattacked) in own camp before/after each candidate using full attack maps. Positive = reduce weak squares; negative = cede space. |
| Fort Knox | Glass Cannon | Fort Knox | Sums total defender count across all own pieces. Positive = maximise defensive support; negative = expose pieces aggressively. |
| Gambito | Gambit Shy | Gambito | Opening phase only (first 20 moves). Boosts ECO-matched gambit lines; falls back to pawn-sacrifice detection (pawn moving to an opponent-attacked, undefended square). |
| Trade Seeker | Trade Avoider | Trade Seeker | Reweights by capture and threat value. Positive = boost captures and new threats; negative = avoid exchanges. |
| Structure | Loose structure | Rigid structure | Pawn structure delta via Stockfish's pawn evaluation (isolated, doubled, pawn islands). Positive = consolidate; negative = open, mobile structure. |
| Hustle | Overthinker | Coffeehouse Hustler | Scales think-time allocation: t = base × (1 − v × 0.15). Also feeds directly into the degradation curve input — a hustler at +5 thinks ~0.3 s and sees steep ELO drops. |
| Luck | Good day | Bad day | Shifts the sampling window within Maia's ranked list. Positive = sample from the tail (off-form, lower-probability moves); negative = sample from the top of the distribution. |
| Panicky | Calm under pressure | Panicky | Scales the steepness of the time-pressure ELO degradation curve. Positive = sharper ELO drop in the final seconds; negative = flat curve regardless of clock. |
| Attacker | Peacemaker | Attacker | Scores by total opponent pieces under attack after the move: score += w × tanh(Σ_threats / 6). Positive = maximise threat coverage; negative = prefer quiet positions. |
Six additional sliders bias move selection toward or away from moves that involve specific piece types. Range −5 to +5. Example: a Queen +4 bot will preferentially find moves where the queen participates, within the cp budget.
Boosts/suppresses pawn advances and pawn captures. Does not affect forced captures.
Rewards knight manoeuvres. Combines well with closed-position preferences (rigid structure + Fort Knox).
Boosts diagonal play and bishop-pair exploitation. Works well with a loose-structure preference.
Rewards rook lifts and file seizure. Most impactful in the middlegame/endgame transition.
Positive = active queen, early development, queen-led attacks. Negative = conservative, avoid premature queen exposure.
Positive = king activity and endgame aggression. Negative = king-safety priority, prefer the castled position.
Pre-configured attractor profiles that set all 11 attractors at once. Any individual slider can be tweaked after applying a personality — the name clears when a manual edit is made.
| Name | Tag | Character |
|---|---|---|
| Captain Entropy | Chaos | Maximises complexity; keeps complications alive; attacks aggressively. Chaos +4, Gambit +3, Attacker +2. |
| Norm | Order | Prefers closed, simplified positions. Chaos −4, Complicate −4, Structure +4. |
| Attacky McTackerson | Captures | Favours captures and threats within the cp ceiling. Trade +4, Attacker +3. |
| Overthinker | Methodical | Deliberate; long think times; likely gets into time trouble. Hustle −4, Panicky −3, Structure +3. |
| Coffeehouse Hustler | Fast | Fast imprecise early play, tightens in the endgame. Hustle +5, Luck +2, Gambit +2. |
| The Blunderer | Human | Plays well then cracks unexpectedly under pressure. Luck +3, Panicky +5. |
| The Hoarder | Material | Never sacrifices material voluntarily. Trade −3, Gambit −3, Luck −2. |
| Pawn Chain Gang | Pawns | Maximises connected pawns and pawn structure. Structure +5. |
| Spite Check | Checks | Always checks if a check exists. Chaos +3, Attacker +3, Trade +2. |
| Clock Watcher | Clock | Conservative when ahead on time; reckless when behind. Panicky −3, Complicate −2. |
| Grandmaster Bad Day | Human | Maia 2400 skill but samples from low-probability moves. Luck +5, Panicky +2. |
Custom controls let you write board-feature rules not covered by the fixed attractors. Each control selects a metric, optionally gates on game phase, advantage state, and time pressure, then applies a continuous bias to move candidates that increase (or decrease) that metric.
| Category | Metric | What it measures |
|---|---|---|
| Pawns | Passed pawns | Own passed pawns (no enemy pawn ahead on file or adjacent files) |
| Pawn advancement | How far own pawns have advanced from the start rank | |
| Doubled pawns | Own doubled pawns | |
| Isolated pawns | Own isolated pawns (no friendly pawn on an adjacent file) | |
| Pawn islands | Number of separate pawn groups | |
| Connected pawns | Pawns supported by a neighbour (phalanx or chain) | |
| Pawn structure | Overall health — fewer islands, doubled and isolated pawns | |
| Pieces & activity | Centralization | Rewards knights, bishops, rooks and queens near the centre |
| Outposts | Minor pieces on advanced squares defended by own pawn, unchallenged | |
| Mobility | Total squares own pieces attack — proxy for activity | |
| Bishop pair | Whether own side holds both bishops | |
| Rooks on open files | Own rooks on files with no pawns | |
| Rooks on the 7th | Own rooks on the enemy's second rank | |
| Development | Knights and bishops off the back rank. Best gated to the Opening phase. | |
| Material | Material balance | Own material minus opponent's (P=1, N/B=3, R=5, Q=9) |
| Pieces on board | Total pieces — slide left to simplify, right to complicate | |
| Queens on board | Queens still on the board | |
| King | Enemy king pressure | Own attacks on the 9 squares around the enemy king |
| My king safety | Enemy attacks on the 9 squares around own king | |
| My pawn shield | Friendly pawns sheltering own king | |
| Gives check | Boosts moves that put the enemy king in check | |
| Threats | Enemy pieces attacked | Distinct enemy pieces own side attacks after the move |
| Loose enemy pieces | Enemy pieces attacked and undefended — free-material radar | |
| My hanging pieces | Own undefended attacked pieces | |
| Piece defense | Total defensive coverage of own pieces | |
| Square control | My weak squares | Empty squares in own camp no longer controlled |
| Holes in enemy camp | Empty squares in the enemy half the opponent doesn't control | |
| Central control | Control of d4, e4, d5 and e5 | |
| Space | Empty squares in the enemy half own side controls |
Any — fires every move
Opening — first ~20 moves
Middlegame — pieces on board
Endgame — few pieces remain
Any result — always active
When winning — eval ≥ +100 cp
When losing — eval ≤ −100 cp
When equal — |eval| < 100 cp
Any clock — always active
Bot pressured — bot < 30 s or < 15%
Opp pressured — opponent in time trouble
Either side — either clock low
Custom controls can be stacked. All active controls score candidates simultaneously; the scores are summed with the attractor scores before selection.
No opening book. The engine picks from move 1.
Follows the most popular book moves from either the Lichess Masters database or the Lichess community database, up to a configurable book depth (default 20 moves). A "Modern only" filter restricts to games from 2010 onward. White and Black can have separate settings.
Define up to several opening lines by name (e.g. "Sicilian Defence", "King's Gambit"). Each line gets a percentage weight. The bot randomly selects a line each game according to the weights, then follows the Lichess book within that opening. White and Black repertoires are configured independently.
Book sources: Lichess Masters · Lichess Community
Think time is computed before the engine is queried. It combines the timing mode, the Hustle attractor, clock-pressure shortcuts, and a ±20% jitter to produce an actual seconds value — which then feeds directly into the time-pressure degradation curves.
| Mode | Behaviour |
|---|---|
| Fixed interval | Constant pause between all moves. Set the delay in seconds. Simplest and most predictable. |
| Instantaneous | Responds at engine speed (effectively 0 delay). Useful for analysis or speed variants. |
| Complexity scaled | Think time scales with position complexity (measured as Stockfish MultiPV variance). Tactical positions get more time; forced sequences get less. Mimics human time allocation. |
| Mirror user | Bot matches the human's move rhythm ± a configurable offset. If you played fast the bot plays fast; if you took 30 seconds it will too. Creates a psychologically realistic feel. |
The Hustle attractor (from the Personality section) acts as a global multiplier on the timing mode's base time:
A Hustle +5 bot cuts think time by 75%. This same t_actual value is the input to both degradation
curves — not a clock percentage.
Each mode's setting sits directly beneath it in the panel — Fixed interval has its Duration, Mirror user its Speed offset — so you can see what every mode is tuned by without selecting it first.
Three modifiers layer on top of whichever mode you pick, and they are what make the pacing feel human rather than mechanical:
| Modifier | What it does |
|---|---|
| Reconsideration pauses | Occasionally hesitates and takes noticeably longer, as if changing its mind mid-thought. |
| Move blink on forced moves | Plays obvious recaptures and forced replies almost instantly (200–500 ms) — the human reflex of not thinking about a move that has only one sensible answer. |
| Clock-pressure mirroring | Speeds up when your clock runs low, the way a real opponent presses when they smell a flag. |
Blink overrides your timing mode. It is checked before the mode is consulted, so a bot set to a fixed 22-second interval will still snap out obvious recaptures in a fraction of a second. So that the interval you set is the interval you get, selecting Fixed interval switches blink off and highlights the row to say why. Switch it back on whenever you want that behaviour — the panel respects your choice.
In fast chess, players premove: they queue their reply before the opponent has moved, so it fires the instant the opponent's move lands. It saves precious seconds — but it commits blind. The premove doesn't react to what you actually played. That is the whole point, and the reason it can be punished.
Switch premoving on and the bot does the same thing: it guesses your reply using Maia, decides its own answer in advance, and plays that answer the moment you move — whatever you actually played.
How to trap it. Play a move the bot didn't predict and its committed reply can walk a piece onto a square you control, or leave something hanging. If your move makes the premove illegal — you pin the piece, capture it, or move its target away — the premove is busted: the bot has to think from scratch and burns extra time on its own clock. Baiting premoves is a real bullet skill, and this is where to practise it.
| Control | What it does |
|---|---|
| Min confidence | The one that matters most. How sure Maia must be of your reply before the bot commits. 85% mirrors real play — humans premove on near-forced replies, not coin flips. Drop it far below ~60% and the bot premoves into positions a human never would, so its play looks erratic rather than fast. |
| Premove rate | Of the moves that already cleared the confidence bar, the percentage it actually premoves — not a percentage of all moves. 100% = every time it's confident. |
| Only when low on clock | Optional. Restricts premoving to time scrambles, as humans do. Two independent triggers sit under it — your clock, or the bot's — and either one alone is enough to start it premoving. |
| Busted-premove delay | Extra thinking time when you bust one — the "didn't see that coming" stall. This is your reward for springing the trap. It can never flag the bot. |
Premoving requires the Maia 3 model, since the prediction runs on it. Live counts of premoves armed, fired and busted appear in the panel while you play, and the collapsed Move Timing header always reports whether premoving is on — a bot that answers instantly looks broken if you don't know the setting is active.
Two independent curves describe how the bot's play deteriorates as its clock runs low.
As think time per move shrinks, the bot's effective ELO is reduced. The curve starts on a power-law time–rating model: D(s) = 339 − 1442·s−0.283, shifted so the bot plays its full configured ELO at the nominal pace of the chosen time control (base/60 + increment seconds per move) and degrades from there — halving think time costs roughly 100 ELO at rapid pace, more in blitz. It is a fit of IM Kenneth Regan's rating-loss vs time-control data, from his Perpetual Chess Podcast interview with Ben Johnson. The Max ELO drop slider caps how far the curve can fall, and every control point stays draggable, so you can reshape the curve directly on the chart.
A bot configured at ELO 2400 in time trouble does not suddenly play like a calm 1900 — it plays like a stressed 2300: still strong, but more likely to pick from the wrong part of the distribution.
Separately, the move quality window shifts under time pressure. At full time the bot samples from its normal quality range. As time runs low, the window shifts downward (toward weaker moves) by a configurable amount. This captures the empirical finding that time-pressured players don't just play at a lower "level" — they make a specific kind of mistake: playing the first plausible move rather than the best one.
Both curves can be disabled with the Pressure Off toggle — for a bot that never cracks no matter the clock.
Any bot configuration can be saved as a .json file and reloaded in any Blundermind session.
Click Start to lock in the current configuration. Use the Save bot file
button to download a .json snapshot. Optionally give the bot a name — the name is stored in the file.
Click Load bot file and select a .json file. All settings are restored: engine,
ELO, temperature, all attractors, piece preferences, custom controls, openings, timing, and degradation curves.
The loaded bot's name is displayed above the controls.
What is saved: engine mode, ELO, temperature value, all 11 attractor values, 6 piece-preference values, all custom controls (metric, phase, advantage gate, time-pressure gate, strength), opening mode and repertoire for each colour, book source and depth, timing mode and parameters, both degradation curves, and the personality name if one is selected.
Configure the bot in the Bot Controls panel. Select your colour (White / Black / Random). Set the time control (untimed, or any Fischer/delay format). Press Start. The board switches to playing mode, and Bot Controls remains open to let you monitor the bot's active state during the game.
Resign — ends the game immediately; prompts for confirmation.
Draw offer — handled by the bot's draw behaviour (Personality → Draws & Desperation): it can
accept and offer draws judged at its own rating's blurred evaluation, and seek stalemate swindles when
lost — or leave it all off for a bot that always plays on.
Save game — download the game as PGN at any point.
Rematch — immediately restarts with the same bot settings and swaps colours.
In Expert (pro) mode: the result is displayed in the notation column; Resign and Draw buttons disable after game over.
While playing a bot, all board-vision indicators remain available in Learning mode: threat circles, capture safety, pins, forks, discovered attacks, x-ray pressure, overloaded pieces, weak squares, and the check-threat overlay. These are independent of the bot and provide real-time positional feedback.
| Goal | Key settings |
|---|---|
| Human-like club player | Maia 1200–1500 · Neutral temp · Luck +2 · Panicky +1 · Fixed timing 3–8 s |
| Tactical slugger | Maia or SF 1800 · Varied temp · Attacker +4 · Chaos +3 · Trade +3 |
| Positional grinder | SF 1600 · Top move or Focused temp · Structure +3 · Fort Knox +2 · Hustle −3 |
| Gambit specialist | Maia 1400 · Varied temp · Gambito +4 · Chaos +2 · Repertoire openings |
| Time-trouble simulator | Any engine · Pressure degradation enabled · Panicky +3 · Hustle +3 |
| Openings trainer | Lichess-SF 2200 · Repertoire with target lines · Depth 25 · Instant timing |
| Endgame trainer | SF 2000 · Top move · Pawn-advancement custom control (Endgame gate) |
| Bad-day Grandmaster | Maia 2400 · Wild temp · Luck +5 · Panicky +2 · "Grandmaster Bad Day" preset |
All ELO values are relative playing strengths within the Blundermind engine; they are not official FIDE ratings. · Back to top ↑