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)
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
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.
Thanks!