Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

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

Moderator: Ras

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

Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by Dylan »

Hi all,

I'd like to share Sable 1.6, a UCI engine I built over about a week.

Full disclosure up front, because it's part of why I'm posting it: the code was written by an AI (Anthropic's Claude) working under my direction. I designed the approach, ran all data generation, training and testing on my own hardware, debugged the pipeline, and verified strength at every step. The NNUE was trained from zero on self-play data generated on my own PC (i7-11700K + RTX 3070) — no external data, no pretrained weights, and no code derived from another engine. I'm releasing it partly to show what one person and a current AI model can build together in a few days.

Repo (MIT — source + net + training scripts):
https://github.com/dylan2554/sable

Technical summary
  • Bitboards + magic move generation (perft-verified, incl. Kiwipete)
  • PVS / alpha-beta, transposition table, null-move, LMR, singular + double extensions
  • Reverse-futility / futility / razoring, late-move + history pruning, SEE pruning
  • Killers, counter-moves, butterfly + continuation history (with maluses)
  • Quiescence with SEE filtering, delta pruning, and quiet checks
  • Lazy SMP (1–16 threads)
  • NNUE 768->512x2->1, clipped-ReLU, int16 quantized, AVX2 incremental inference
  • Net trained across 4 self-play generations (each generation regenerates data using the previous, stronger net to label positions, then retrains)
Strength — single-threaded, the way CCRL tests. Triangulated against engines with published CCRL Blitz ratings, under fair conditions (single thread both sides, equal 128 MB hash, 2'+1"):

Code: Select all

  Opponent (CCRL Blitz)    Sable score   Games   Implied
  Inanis 1.6.0  (~3000)       70%         100     ~3150
  Stash v27     (~3057)      ~76%         180     ~3260
  Stash v30     (~3166)      ~54%         180     ~3195
  Stash v32     (~3252)      ~43%         180     ~3200
The anchors agree on roughly ~3200 CCRL single-threaded. This is my own estimate, not an official listing — I'd be very grateful if anyone is willing to test it for a list.

Notes
  • Binaries are unsigned, so Windows SmartScreen will warn; or build from source: [c]g++ -O3 -mavx2 -pthread sable.cpp[/c]. A non-AVX2 fallback build is also included.
  • Keep [c]sable.nnue[/c] next to the executable — it loads automatically.
Feedback very welcome — this is my first released engine and I'd love to hear how it does on other hardware and time controls.

Thanks!
chessica
Posts: 1113
Joined: Thu Aug 11, 2022 11:30 pm
Full name: Esmeralda Pinto

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by chessica »

Code: Select all


    Program                          Elo    +   -   Games   Score   Av.Op.  Draws

  1 Stockfish 18                   : 3814   93  80    72    88.9 %   3453   22.2 %
  2 Rems M-091024                  : 3757   78  68    72    84.7 %   3460   30.6 %
  3 Cheng 4.48a (bundled)          : 3560   61  60    72    61.1 %   3482   44.4 %
  4 Cheng 4.48a (legacy SSE2, bundled) : 3533   58  57    72    56.9 %   3485   50.0 %
  5 EveAnn 5.0 64-bit (bundled)    : 3468   64  64    72    46.5 %   3492   37.5 %
  6 IsaBB NN 4.5 (compat, bundled) : 3400   52  54    72    36.1 %   3499   55.6 %
  7 IsaBB NN 4.5 (avx2, bundled)   : 3391   64  65    72    34.7 %   3500   38.9 %
  8 Myrddin 0.95 (bundled)         : 3381   64  65    72    33.3 %   3501   38.9 %
  9 Sable 1.6                      : 3356   65  67    72    29.9 %   3504   37.5 %
 10 IsaBB NN 4.5 (sse42, bundled)  : 3340   66  68    72    27.8 %   3506   36.1 %
Dylan
Posts: 4
Joined: Sat Jun 13, 2026 4:49 pm
Full name: Dylan Hogarth

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by Dylan »

Thank you very much for testing it, chessica, I really appreciate you taking the time, especially so quickly.
Slotting in around Myrddin 0.95 in that field is honestly better than I'd hoped for a first release. Could I ask what time control and conditions you used? I'd like to understand how that ~3356 relates to my own CCRL-anchored estimate - the two scales clearly differ and I'd like to calibrate properly.
Thanks again!
smatovic
Posts: 3791
Joined: Wed Mar 10, 2010 10:18 pm
Location: Hamburg, Germany
Full name: Srdja Matovic

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by smatovic »

~3200 CCRL Elo engine from scratch vibe-coded over a week, interesting, thanks for sharing.

So we are meanwhile in the Centaur phase of programming.

The computer chess community had an impact with neural networks, which replaced hand crafted eval, now we have another kind of impact.

Question remains open, how long the Centaur phase will last.

--
Srdja
chessica
Posts: 1113
Joined: Thu Aug 11, 2022 11:30 pm
Full name: Esmeralda Pinto

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by chessica »

Dylan wrote: Mon Jun 15, 2026 12:06 am Thank you very much for testing it, chessica, I really appreciate you taking the time, especially so quickly.
Slotting in around Myrddin 0.95 in that field is honestly better than I'd hoped for a first release. Could I ask what time control and conditions you used? I'd like to understand how that ~3356 relates to my own CCRL-anchored estimate - the two scales clearly differ and I'd like to calibrate properly.
Thanks again!
Well, I used Google to find Stockfish's Elo rating. Google told me Stockfish 18 is rated between 3600 and 4000 Elo. I took the midpoint—3800—but since you’ve settled on the CCRL figure, that puts it at 3650 Elo, or 150 points lower. So, you can simply reduce all the values ​​in my table by 150 points.

One more thing: Elo ratings aren't absolute values; they are only relative to one another.


TC: 2' +1"
chessica
Posts: 1113
Joined: Thu Aug 11, 2022 11:30 pm
Full name: Esmeralda Pinto

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by chessica »

smatovic wrote: Mon Jun 15, 2026 8:30 am ~3200 CCRL Elo engine from scratch vibe-coded over a week, interesting, thanks for sharing.

So we are meanwhile in the Centaur phase of programming.

The computer chess community had an impact with neural networks, which replaced hand crafted eval, now we have another kind of impact.

Question remains open, how long the Centaur phase will last.

--
Srdja
Yeah, that’s how it is these days: AI makes it possible—stealing code and mixing it all together. It has no concept of copyright.
glav
Posts: 93
Joined: Sun Apr 07, 2019 1:10 am
Full name: Giovanni Lavorgna

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by glav »

Congrats, Dylan. Nice work. I have just a couple of questions, if you don't mind.
1) I saw you kind of concentrate everything in one or two source files. Was it a design choice to keep it simple? Did the model sometimes loose the contest because of this?
2) Was this an agentic work or you just used the LLM chatbox? In the latter case, would you mind to share the chat too?

Thanks for your consideration and keep up the good work.
Dylan
Posts: 4
Joined: Sat Jun 13, 2026 4:49 pm
Full name: Dylan Hogarth

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by Dylan »

glav wrote: Mon Jun 15, 2026 1:58 pm Congrats, Dylan. Nice work. I have just a couple of questions, if you don't mind.
1) I saw you kind of concentrate everything in one or two source files. Was it a design choice to keep it simple? Did the model sometimes loose the contest because of this?
2) Was this an agentic work or you just used the LLM chatbox? In the latter case, would you mind to share the chat too?

Thanks for your consideration and keep up the good work.
Thanks a lot,
1.Yeah, the single file was a deliberate choice - it kept iteration fast (one command to recompile and re-test) and made it easy to share. It didn't cost anything competitively. it compiles to identical code whether it's one file or split into twenty, so the structure is purely cosmetic. The only real downside was that navigating it got a bit unwieldy once it grew past ~1800 lines. If I keep developing it I'll probably split it into proper modules, but functionally it changes nothing.
2.It was the chatbox, not an autonomous agent - though the assistant could write code, compile it, run perft tests and self-play games, and verify things in its own sandbox before handing files over. So the workflow was: I'd set the goals and make the design decisions, the model wrote and tested the code, and I ran all the training and real-hardware testing on my own machine and fed results back. Lots of iterative back-and-forth over several days, including plenty of debugging when things didn't work.

I'd rather not share the full chat, though - it's quite messy and has some personal information in it I'd prefer to keep private. Hope you understand. Happy to answer any specific questions about how a particular part was done, though.
Thanks again for the interest!
MOBMAT
Posts: 416
Joined: Sat Feb 04, 2017 11:57 pm
Location: USA

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by MOBMAT »

Hi, thanks for the new engine.
A couple of suggestions.
1) increase the maximum hash size. 2Gb is pretty small on modern equipment.
2) output the hash usage (this is done via the UCI command "hashfull") so that we can gauge how fast the engine is filling up the hash.

thanks
i7-6700K @ 4.00Ghz 32Gb, Win 10 Home, EGTBs on PCI SSD
Benchmark: Stockfish15.1 NNUE x64 bmi2 (nps): 1277K
Uri Blass
Posts: 11221
Joined: Thu Mar 09, 2006 12:37 am
Location: Tel-Aviv Israel

Re: Sable 1.6 - from-scratch C++ engine with a self-trained NNUE (~3200 CCRL, AI-assisted build)

Post by Uri Blass »

Dylan wrote: Sun Jun 14, 2026 12:08 pm Hi all,

I'd like to share Sable 1.6, a UCI engine I built over about a week.

Full disclosure up front, because it's part of why I'm posting it: the code was written by an AI (Anthropic's Claude) working under my direction. I designed the approach, ran all data generation, training and testing on my own hardware, debugged the pipeline, and verified strength at every step. The NNUE was trained from zero on self-play data generated on my own PC (i7-11700K + RTX 3070) — no external data, no pretrained weights, and no code derived from another engine. I'm releasing it partly to show what one person and a current AI model can build together in a few days.

Repo (MIT — source + net + training scripts):
https://github.com/dylan2554/sable

Technical summary
  • Bitboards + magic move generation (perft-verified, incl. Kiwipete)
  • PVS / alpha-beta, transposition table, null-move, LMR, singular + double extensions
  • Reverse-futility / futility / razoring, late-move + history pruning, SEE pruning
  • Killers, counter-moves, butterfly + continuation history (with maluses)
  • Quiescence with SEE filtering, delta pruning, and quiet checks
  • Lazy SMP (1–16 threads)
  • NNUE 768->512x2->1, clipped-ReLU, int16 quantized, AVX2 incremental inference
  • Net trained across 4 self-play generations (each generation regenerates data using the previous, stronger net to label positions, then retrains)
Strength — single-threaded, the way CCRL tests. Triangulated against engines with published CCRL Blitz ratings, under fair conditions (single thread both sides, equal 128 MB hash, 2'+1"):

Code: Select all

  Opponent (CCRL Blitz)    Sable score   Games   Implied
  Inanis 1.6.0  (~3000)       70%         100     ~3150
  Stash v27     (~3057)      ~76%         180     ~3260
  Stash v30     (~3166)      ~54%         180     ~3195
  Stash v32     (~3252)      ~43%         180     ~3200
The anchors agree on roughly ~3200 CCRL single-threaded. This is my own estimate, not an official listing — I'd be very grateful if anyone is willing to test it for a list.

Notes
  • Binaries are unsigned, so Windows SmartScreen will warn; or build from source: [c]g++ -O3 -mavx2 -pthread sable.cpp[/c]. A non-AVX2 fallback build is also included.
  • Keep [c]sable.nnue[/c] next to the executable — it loads automatically.
Feedback very welcome — this is my first released engine and I'd love to hear how it does on other hardware and time controls.

Thanks!
I wonder if the technical details that you mentioned like Bitboards + magic move generation are things that the AI suggested or things that you suggested to the AI to do when the AI wrote the things based on your suggestions(or maybe part based on your ideas and part based on the AI suggestions how to build a chess engine.