Configuration
Bot Builder
Text
Engine
Rating 1500
6002600
Openings
◔ Random
♔ White
♚ Black
0 · instant1 min
Centipawn budget 100 cp
0 · pure engine300 · reckless
How many centipawns the personality may give up on a move to play in its style. At 0 the style sliders do nothing.
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 recommended
Human-like neural net, ELO 600–2600. One-time 44MB download.
Flounder
Based on Stockfish, moves sampled with Flounder to tune ELO level. 600–2400, nothing to download.
Hybrid
Weighted blend of Flounder and Maia ratings, mixed move by move.
Lichess Opening Book
Lichess ELO
While the game is still in book, play what real players of this rating actually chose
Maia 3 — ELO
Maia 3 model
Checking storage…
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)
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
Neutral T = 1.00
Focused Neutral Varied Wild
▲ Top move4.0 ▲
Conviction Chooses among Maia distribution based on personalityAlways chooses favorite move 0%
CP Budget 100 cp
Same dial as the Personality section's Centipawmeter — move either one. The middle (blue) bar shows an illustrative personality (loves c4, dislikes d4) reshaping Maia's odds; the last bar is what the bot plays: Conviction's share on the top move, the rest temperature samples.
Personality
Preset personalities, style attractors & centipawn budget
Neutral
Every control below is documented — what it measures and the exact formula it uses.
Max Centipawn Budget 100 cp
Pure engineSubtleModerateBoldReckless
Budget 0300 100 cp
Conviction Chooses among Maia distribution based on personalityAlways chooses favorite move 0%
Hard Floor 01,000 100 cp
Budget = the personality's style allowance, engine-calculated. Conviction = how often it plays its favorite move outright (same slider as in Engine). 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 valuetap an axis to open its control
Clock tactics
Time Weaponizer
When the opponent is low on clock, plays fast to pressure flagging — and, with the ELO degradation curve on, at that curve's floor. 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
Accept margin200 cp
Accepts when its perceived advantage is at most this many centipawns. Perception = engine eval blurred to the bot's rating — a 700 misjudges by ±200 cp, a 2400 barely at all. Clock-aware: never accepts while you're about to flag (it's playing for the win on time), and gets far more agreeable when it's the one about to flag. Declines are wordless, like a human's.
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
Repertoire, then main line, for each colour
Off
As White
As Black
The bot works down each column: Repertoire steers into your openings (shares sum to 100%), Main Line then plays the database's most popular move from wherever the game stands, and the engine plays the rest. With both on, the repertoire hands over as soon as its opening is on the board.
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
Average think time
From the clock
Fixed seconds
Plan for a game of
60 moves
40 moves
Min multiplier 0.4×
Max multiplier 2.5×
Multipliers on the average: Min for obvious moves, 1× for a typical position, Max for highly complex ones.
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 to pressure flagging — and, with the ELO degradation curve on, at that curve's floor. 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
Baseline Your curve Drag handle
Max ELO drop 0900 300 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 temp 08 T 2.0
Start ELO
1500
ELO @ 3s
—
Min ELO
—
Max Temp
2.0
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
Degradation curve based on fit shown by IM Professor Kenneth Regan describing ELO as a function of time-control, during 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 — Full credit to Professor Regan for his work, full blame to me for extrapolating his data-based findings based on full games under different time controls to this unsubstantiated estimation of ELO drop for individual moves under different time constraints. Maia is called at a lower ELO as think time shrinks under time pressure: full ELO at the time control’s nominal pace (base/60 + increment seconds per move), degrading below it following the curve shown above. Every point is draggable if you want a shape different from the formula, and Match Regan model puts them all back on it — the Max ELO drop slider caps how deep the curve goes, so at its default the curve stops short of the model in faster time controls
▸ 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. How far up the curve the bot actually goes is set by Calm ↔ Panicky in Personality: at 0 it follows the curve as drawn (mild by default — Max temp 2), toward Calm it rises less, fully Calm leaves the temperature untouched, and fully Panicky rises 2.5× as fast.
▸ Only when time is really short — both curves describe a bot being forced to move faster than it would like. With Fixed interval or Instantaneous timing the pace is a number you set, not something the clock forced, so neither curve runs. Complexity scaled (From the clock) budgets from the clock and uses them; so does Mirror user, which plays at your pace — when you speed up under time pressure it speeds up with you, and degrades the way you do. Premoves are one-second decisions, and play at the rating and temperature these curves give for 1 s.
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.

Conviction set to 100%
With a personality chosen, the bot always chooses its favorite move. You can adjust this with the Conviction slider under the Centipawn Budget.