Tempest logo

Tempest

A chess engine written from scratch in C++. No Stockfish, no Leela, no borrowed code — every bitboard, every pruning rule and every evaluation term is its own. It plays rated games on lichess as ProsperoBot, and it is still getting stronger.

The engine

Everything in it was built here

Tempest is a complete alpha-beta chess engine: bitboard move generation, a principal-variation search with the modern pruning stack, a hand-written tapered evaluation, endgame tablebases, and time management that knows when to keep thinking. It speaks UCI, so it runs under any chess interface — but it spends most of its life on lichess, playing strangers.

On honesty about strength. This site quotes no invented Elo. The engine's rating is whatever lichess says it is after a few thousand rated games, and the Elo figures attached to individual changes come from self-play matches under a sequential probability ratio test — colour-swapped opening pairs, stopped when the likelihood ratio resolves, not when the number looks good.

Changes that failed that test were reverted, including several that seemed obviously correct at the time.

Playing strength

Two thousand rated games, in public

Every point on this chart was earned against a real opponent on lichess. The engine arrived in July at roughly 2200 and spent the month climbing — not smoothly, and not without the two visible collapses that followed changes later found to be regressions.

Score against the field

Measured over 200 recent games. The amber marker is what its rating says it should score. Tempest punishes weaker opponents far above expectation and under-performs against stronger ones — the signature of an engine that converts mistakes well but struggles to create an advantage on its own.

Changes that survived testing

Elo measured in self-play against the immediately preceding build. Every large validated gain in this project has been structural — search shape and time allocation — never a new evaluation term.

Recent development

What has changed lately

Development runs in rounds: mine the engine's own games for a defect, reproduce it as a failing test, fix it, then prove the fix in a few thousand games before it ships.

Sample games

Watch it play

Real rated games from lichess, replayable move by move. Four wins against opponents rated 2600 and above, one six-move mate, and — because they are more instructive — two losses to the opponents it cannot beat.

0 / 0

Nemeses

The opponents it cannot beat

Every engine has them. What makes these interesting is that Tempest does not blunder against them — against bot_adario it errs at less than half its own average rate and still loses. It is not making mistakes. It is being outplayed, which is a much harder problem to find and a much harder one to fix.

And the ones it feasts on

The other half of the picture. Against opponents it out-rates, Tempest scores far above what its rating predicts.

Roadmap

Where the remaining strength is hiding

For a while the plan was to mine lost games for evaluation blind spots. That work was real but the findings kept coming back small, and the reason turned out to be structural: an audit that compares the evaluation against a search using that same evaluation can only ever detect self-contradiction, never self-consistent error. The current plan targets the search itself.