Chessko · Difficulty
How Chessko's difficulty levels work: temperature, slips and Stockfish limits
A weak chess opponent is harder to build than a strong one. Making a program play badly in a way that feels human, without hanging its queen for no reason, takes deliberate design. Here is how each of Chessko's seven levels is made.
The seven levels
| # | Name | Brain | How it is weakened |
|---|---|---|---|
| 1 | Jiggly | Jelly search, depth 4, 800 ms | Wobble 340 cp, 45% slips |
| 2 | Wobbly | Jelly search, depth 4, 800 ms | Wobble 210 cp, 28% slips |
| 3 | Bouncy | Jelly search, depth 4, 800 ms | Wobble 120 cp, 14% slips |
| 4 | Springy | Jelly search, depth 4, 800 ms | Wobble 55 cp, 5% slips |
| 5 | Blobmaster | Jelly search, depth 4, 800 ms | None: always the best move it finds |
| 6 | Gelatitan | Stockfish 19 (WASM), 700 ms | UCI_Elo 2000 |
| 7 | Set in Stone | Stockfish 19 (WASM), 1500 ms | None: full strength |
Levels 1 to 5 share the same search depth. What differs is how often, and how far, the engine steps away from the best move it found.
Wobble: sampling instead of always picking the best
After searching, the jelly engine has a score for each legal root move. At level 5 it plays the top one. At lower levels it samples: each move gets weight exp((score − best) / temperature), the weights are normalised, and a move is drawn at random. A move 100 centipawns worse than the best is barely less likely at a high temperature, and rare at a low one. The temperature is the “wobble” number in the table, in centipawns: bigger means a wilder spread of moves.
This is the same idea as temperature in language-model sampling, applied to chess moves. It makes the engine's mistakes graded (it is much more likely to play the second-best move than the fifth-best) instead of uniformly random.
Slips: deliberate blunders
Sampling alone makes mistakes small. Beginners also make occasional large ones, so each low level has a “slip” probability. On a slip, the engine picks at random from the moves that are worse than the best by more than 25 centipawns but less than 900, so it errs noticeably but does not throw the queen away. Level 1 slips in about 45% of moves, level 4 in about 5%.
Why the top levels use Stockfish
The jelly search is a small JavaScript engine with a 16-weight evaluation. It is meant to be beatable, and to wobble. To give stronger players something real to play against, the ladder changes engine above level 5 instead of stretching the same one: Stockfish limited by its own Elo limiter at level 6, unlimited at level 7. See Stockfish in the browser for how that works.
Adapting to you
Not knowing which level to pick is normal. The UCB1 bandit watches how well you play on the jelly levels and suggests a step up or down. It leaves the two Stockfish levels alone: they are fixed points on the ladder.
Ready? Play Chessko.
Quick answers
- How does Chessko make the computer play worse?
- On the lower levels it samples among the engine's candidate moves with a temperature, so it sometimes plays a slightly worse move, and it adds an occasional deliberate slip. The two Stockfish levels use Stockfish's own UCI_Elo limiter, or no limit at all.