Onyx 2.0 (ex-Sable) - AI-built engine, now ~3390 CCRL blitz, fully documented experiment log

Discussion of anything and everything relating to chess playing software and machines.

Moderator: Ras

Dylan
Posts: 6
Joined: Sat Jun 13, 2026 4:49 pm
Full name: Dylan Hogarth

Onyx 2.0 (ex-Sable) - AI-built engine, now ~3390 CCRL blitz, fully documented experiment log

Post by Dylan »

Hi all,

Last month I posted Sable 1.6 here (~3200, built by an AI under my direction - that thread). Two updates since then, one small and one big.

The small one: the engine is now called Onyx - it turned out "Sable" already belonged to another engine, so it was renamed to avoid stepping on anyone's toes. Same project, same lineage; new repo:

https://github.com/dylan2554/onyx (MIT - source, net, binaries, training pipeline)

The big one: Onyx 2.0 is roughly +190 Elo stronger than the 1.6 I posted, and this time the development process itself might be the most interesting part. The work was done by two AI agents (Anthropic's Claude and OpenAI's Codex) working in alternating shifts, auditing each other's changes, with every single change gated by SPRT before acceptance. The full log - every accepted AND rejected experiment with games, Elo, and LLR - ships in the repo as EXPERIMENT_LOG.md. Roughly 45 experiments; about a quarter survived. Things that famously work elsewhere (ProbCut, TT buckets, 2-ply continuation history) measurably failed here and are documented failing.

What changed from 1.6 to 2.0, briefly:
  • Search: qsearch TT, correction histories (pawn-structure, previous-move, non-pawn placement, pawn-king), quiet-SEE pruning with check guards, SEE-filtered quiet checks in qsearch, depth-8 LMP, a TT replacement fix that alone was worth ~+30, and two full SPSA re-tunes of all constants (margins and structural constants like depth ceilings and the null-move formula).
  • NNUE: new 768x2 net ("gen8") trained on ~100M self-play positions. The interesting part: the entire data generation and training pipeline now runs on free Kaggle compute (CPU sessions for datagen, one T4 GPU session for training - the final net trained in about 65 minutes at 200k pos/s). Nothing external: Onyx generates its own data, labels it with its own search, and trains its own successor. The pipeline notebooks are in the repo.
Strength - single-threaded, measured the same way as last time:

Code: Select all

  Opponent (CCRL Blitz)     Onyx score   Games   Implied
  Stash v34.0    (3328)       58.95%     1000     ~3390
(+62.9 +/- 17.1 at 10s+0.1s, 1 thread, 128 MB hash each, paired openings.) So my estimate is ~3390 CCRL blitz equivalent, up ~190 from Sable 1.6. As before this is my own measurement, not an official listing - I'd be very grateful if anyone wants to test it for a list. Single-threaded is its best configuration; SMP exists but is primitive.

Notes:
  • Keep onyx.nnue next to the exe - it loads automatically. The release has an AVX2 build (recommended) and a generic x64 fallback.
  • Binaries are unsigned, so SmartScreen will warn; or build from source: [c]g++ -O3 -march=native -pthread onyx.cpp[/c]
  • Old Sable nets still load (the file format kept backward compatibility).
Feedback very welcome - especially interested in results on other hardware, longer time controls, and anything the experiment log makes you curious about.

Thanks!