Configuration
Bot Builder
Text
◔ Random
♔ White
♚ Black
Restores every control to its shipped default. Your saved bots are not affected.
Engine
Move generation, ELO, sampling, and quality controls
Maia 3 · 1500
Engine mode
Maia 3
Human-like neural net. Choose ELO 600–2600.
Stockfish
Classical engine. Set level SF1–SF10.
Hybrid
Weighted blend of Maia ELOs + SF levels.
LC + Stockfish
Lichess explorer fallback + Stockfish.
LC + Maia 3
Lichess explorer fallback + Maia 3.
Maia 3 — ELO
Maia 3 model
Human-like neural net · plays at any ELO (600–2600)
One-time download to your browser's local storage
(private/incognito windows don't share storage, so the model re-downloads there)
Checking storage…
1500 600 2600 Maia 3 Elometer
ELO
Click arc · drag needle · or type ELO · snaps to ±25
Rec. for ELO 1500
Budget = the personality's engine-calculated spend · Floor = worst-move backstop · click a tile to fine-tune in the Personality panel
Maia is a human-like neural net with its own free web app — analysis tools, puzzles, and play against Maia bots: maiachess.com
Move sampling — temperature
Focused Neutral Varied Wild
▲ Top move4.0 ▲
CP Budget 100 cp
Same dial as the Personality section's Centipawmeter — move either one. The third (blue) bar shows an illustrative personality (loves c4, dislikes d4) pushing the temperature-shaped distribution: the push grows with Budget, and in play a Stockfish check caps the real cost of any personality pick at the Budget.
Personality
Preset personalities, style attractors & centipawn budget
Neutral
Max Centipawn Budget 100 cp
Pure engineSubtleModerateBoldReckless
Budget 0300 100 cp
Hard Floor 01,000 100 cp
Budget = the personality's style allowance, engine-calculated. Hard Floor = the cap on everything else (top = Off). Click ⓘ how they work together.
Move Distribution Range
Exclude lowest: 0% Exclude moves above: 100%
← Rare, less-expected movesMainstream, most-expected moves →
The slice of Maia's move distribution the bot may pick from — popularity at this rating, not move quality. Click ⓘ for details.
Personality fingerprint
drag nodes or click axis to set value
Clock tactics
Time Weaponizer
When the opponent is low on clock, plays fast + drops ELO to pressure flagging. Fine-tune in Move Timing.
Clock-pressure mirroring
Bot speeds up when your clock runs low
Custom controls
Build your own attractor — pick a board feature, a phase, and a direction. Opens the Custom Controls tab.
Custom controls
Build your own attractor: pick a board feature, the game phase it applies in, and a direction. Each attactor re-ranks the engine's candidate moves. The centipawn budget is shared only among controls currently active, so full cp budget is available for every move.
Strategic preferences
Piece focus
Left = avoid · Right = seek · Center = neutral
Preset personalities — sets all attractors
Draws & desperation
Accepts draw offers
Accepts your ½ offer unless it thinks it's clearly ahead — judged at its own rating
Offers draws
Occasionally offers a draw in level positions — playing for the half point
Seeks stalemate when losing
Desperation: locks its own pieces and dumps material hoping for stalemate
Opening Behavior
Book source, depth, and repertoire preferences
Off
As White
Off
Main Line
Repertoire
As Black
Off
Main Line
Repertoire
Off = straight to engine · Main Line = popular book moves · Repertoire = your selected openings (sum to 100%). Adding an opening switches that colour into Repertoire automatically.
Move Timing
How the bot allocates time between moves
Fixed interval
Timing mode
Instantaneous
Engine speed, no delay
Fixed interval
Constant pause between moves
Duration2s
Mirror user
Matches your rhythm ± offset
Speed offset 0%
Negative = bot moves faster than you. Positive = slower. At 0% it matches your pace move for move.
Complexity scaled
Scales with position complexity
Base time 3s
Average-complexity think time. Simple = faster; complex = slower.
Min multiplier 0.4×
Max multiplier 2.5×
Range: 0.4× (obvious moves) → 2.5× (highly complex).
Premove
Enable premoving
Commits its reply in advance and plays it instantly — bait the guess to punish it
Human behaviour modifiers
Reconsideration pauses
Occasionally hesitates then takes longer — as if changing its mind
Clock-pressure mirroring
Bot speeds up when your clock runs low
Time Weaponizer
Enable Time Weaponizer
When the opponent is low on clock, plays fast + drops ELO to pressure flagging. Opt-in.
Time Pressure Play Degradation
How bot performance degrades as clock runs down
Dual curve
Both curves active — bot degrades with clock- Note that ELO drop occurs BEFORE hard floor is anchored to most likely move Base ELO: 1500
ELO degradation — drag points
Effective ELO vs think time — full ELO at the time control’s pace
Regan baseline Your curve Drag handle
Max ELO drop300 ELO
Move sampling temperature — drag points
Sampling temperature vs think time — base temp at the time control’s pace
Sigmoid baseline Your curve Drag handle
Max tempT 8.0
Start ELO
1500
ELO @ 3s
Min ELO
Max Temp
8.0
Options
Can flag
Allow bot to run out of time completely
Time–rating model
ELO(s) = ELO₀ + D(s) − D(anchor)
D(s) = 339 − 1442·s−0.283
s = think seconds per move · anchor = base/60 + increment
Halving think time ≈ −100 ELO at rapid pace, steeper in blitz
Power-law fit described by IM Kenneth Regan’s rating-loss vs time-control data, from his Perpetual Chess Podcast interview with Ben Johnson.
How time pressure simulation works
The bot simulates a rated player under time pressure using two complementary mechanisms:
▸ ELO reduction — Maia is called at a lower ELO as think time shrinks. The curve starts on variation of Regan’s power-law fit (note that the correlation described by Regan correlates ELO performance as a function of time control for an entire game, not a function of time taken for an individual move) — full ELO at the time control’s nominal pace (base/60 + increment seconds per move), degrading below it — and every point is draggable if you want a different shape.
▸ Temperature escalation — ELO stays fixed but sampling temperature rises as think time shrinks, flattening Maia's move probabilities toward uniform without ever reordering them: a near-forced move stays the near-certain pick, while a genuine toss-up becomes far less predictable (instinctive, less creative play — typical of a strong player with no time to calculate). A quick engine check ensures a degraded pick never improves on Maia's top choice.
Each curve has its own ON/OFF toggle next to its title, so you can run either mechanism alone, both together, or switch both off for constant strength regardless of clock.
How Bot Behavior Works
Move timing, quality degradation, and move selection pipeline
Reference
Move selection pipeline — order of operations
1
THINK TIME — calculated first, drives everything downstream
Think time per move is computed before the engine is queried. It combines the timing mode (pace, complexity-scaled, fixed, mirror), the Hustle attractor (fast +5 → slow −5 multiplier on base time), clock-pressure shortcuts (weaponizer, clock-mirror), and a ±20% jitter. This produces an actual think time in seconds that is then fed into both degradation curves — not a clock average. A hustler thinking 0.3 s sees heavy degradation; an overthinker thinking 12 s sees almost none.
2
ENGINE QUERY — Maia ELO degraded by think time (curve A)
Maia3 is queried at an ELO that curve A maps from the computed think time. Long think → ELO stays near target. Short think → ELO drops, producing the move distribution of a lower-rated player. The result is a probability for every legal move reflecting what a human at that (possibly degraded) rating would actually play.
3
SAMPLING TEMPERATURE — margin-aware softening keyed on think time (curve B)
Curve B maps the same think time from step 1 to a sampling temperature T, ramping from the Engine panel's base Temperature (comfortable think time) up to the Max temp slider's ceiling (default 8, minimal think time). Raising T flattens Maia's probabilities toward uniform (p^(1/T)) WITHOUT reordering them — a near-forced move (e.g. 99% vs 1%) stays dominant even at the ceiling, while a close call (e.g. 41% vs 40%) flattens fast. That is the point of softening by temperature rather than by a rank cutoff: pressure scales with how contested the position already is, not with an arbitrary window width. The Day Lower / Upper sliders still define a static percentile band (unaffected by think time); Luck shifts that band toward higher- or lower-probability moves without changing its width.
4
MIN-PROBABILITY FILTER — absolute popularity floor
Any move below the absolute minimum probability (the "Exclude lowest %" slider) is discarded. This is a pure distribution control — real centipawn protection happens at step 7, with actual engine evals rather than probability as a stand-in.
5
ATTRACTOR REWEIGHTING — per-move probability boosts
Each eligible move is simulated on a scratch board and scored against every active attractor slider. Result: p′ = p × exp(Σ logBoost). Attractors stack multiplicatively. CP Budget controls total magnitude — at 0 cp all attractors are silent.
Piece type — boosts moves by selected piece
Trade seeker — boosts captures + threats created
Space Cadet — boosts moves that reduce bot's weak squares (full board; discoveries + blocks counted)
Fort Knox — boosts moves that increase friendly coverage
Gambito — boosts ECO gambit continuations in opening
Attacker — boosts moves that increase pieces threatened
Structure — boosts pawn moves that tighten/loosen islands
Pawn strategic — flat boost to all pawn advances
6
TEMPERATURE SAMPLING — weighted random draw
Each reweighted probability is raised to p^(1/T), then one move is drawn proportionally. T < 0.15 → always picks the top move; T = 1.0 → unmodified Maia distribution; T > 1 → flattened toward uniform. Curve B (step 3) ramps T from the base Temperature up toward the Max temp slider's ceiling (default 8) as think time shrinks, scaled by the Panicky pressure setting — a steady personality barely raises T even at 0s left, a panicky one reaches the ceiling well before then. The Coffeehouse Hustler personality overrides T with a phase curve instead: T = 5.0 in the opening (many pieces), fading to T = 0.6 in the endgame.
7
CP BUDGET ACCEPTANCE — real engine check
Runs only when attractors reshaped the distribution and the sampled pick differs from Maia's most-popular move. One shallow Stockfish probe evaluates the pick, the most-popular move, and the next few personality favourites. The pick is played only if it loses ≤ CP Budget versus the most-popular move; otherwise the bot walks down its preference order, falling back to the most-popular move itself. This is what makes the Centipawmeter real centipawns — probability is never used as a stand-in for move quality.
Think time feeds move quality — not just pacing
Think time is the central input to both degradation curves. Controls that shorten think time — the Hustle slider, the Weaponizer, clock-mirroring, the Blink shortcut — all reduce move quality through curves A and B, not just move speed. A bot configured to think 0.3 s per move will have its ELO degraded and its move pool narrowed to first-pass instinctive choices on every move, exactly as a human would under severe time pressure.
Think time — order of precedence
These are checked in order, and the first one that applies wins — the timing mode is consulted only if nothing above it fired:
1 · Premove — if a premove is armed and still legal it fires instantly, bypassing think time entirely.
2 · Instantaneous mode — returns 0.
3 · Time Weaponizer — opponent under the trigger: play at the minimum move time.
4 · Move blink — near-forced position (entropy < 0.5): 200–500 ms.
5 · Timing mode — fixed / mirror / complexity-scaled / pace, then the human modifiers, familiarity decay and jitter.
Because blink sits above the mode, leaving it on with Fixed interval would let obvious recaptures ignore the duration you set — so selecting Fixed switches blink off and marks the row. You can switch it back on if you want that behaviour.
Premove simulation
Human speed-chess players premove: they queue a reply before the opponent has moved, and it fires the moment the opponent's move lands. It saves seconds but commits blind — which is what makes it exploitable.
The bot reproduces this in two Maia passes, run while you are on move so it never blocks you:
1 · Predict your move from the current position. If Maia's confidence is under Min confidence, it doesn't commit.
2 · Apply that predicted move and ask what it should play in the resulting position — and lock that answer in.
When you move, the locked reply fires instantly whatever you actually played. If your move made it illegal, the premove is busted: the bot must think from scratch and pays the Busted-premove delay off its own clock. That is the reward for springing the trap — and the reason to bait one.
Min confidence is the setting that matters most. At 85% the bot only premoves on near-forced replies, as humans do. Far below ~60% it premoves into positions no human would, and play looks erratic rather than fast. Premove rate is a percentage of the moves that already cleared that confidence bar, not of all moves. The low-clock gate is optional and has two independent triggers — the opponent's clock or the bot's own — and either alone is enough to arm one.
Requires the Maia 3 model, since the prediction runs on it. Premoving is reported in the collapsed Move Timing header, because a bot replying instantly looks like a malfunction if you don't know it's switched on.
👑 Grandmaster Bad Day

This personality will set:

  • Engine → Maia 3
  • ELO → 2400
  • Plays lowest probability move that is greater than 4%

You can adjust any of these manually afterwards.