Source Authorship Forensics
A series of source-level reads of chess-engine repositories. Each one is examined for the fingerprints of AI generation versus genuine human development, and contrasted with Stockfish. This page indexes them all.
Authorship isn't a clean binary. It runs from wholesale machine generation, through genuine human work done with AI assistance, to entirely hand-built — and this set now holds an example of each.
The code itself was produced by AI. The human contribution is direction and prompting, not authorship.
A person's project with an AI assistant in the loop — spanning human-led (AI as a tool) to more heavily co-written. Legitimate and increasingly normal.
CLAUDE.md tool in the loopauthor Dylan (with Claude)The hard call is rarely the extremes — it's telling the middle band from the left one, since both can have an AI in the picture. What separates them is the shape of the work: an incremental, multi-year history with a real empirical testing loop (assistance) versus a one-shot dump with a placeholder identity (generation).
Ordered from machine-authored to unmistakably human. Click any engine for the full analysis.
| Engine | Lang | Verdict | Decisive signal | |
|---|---|---|---|---|
spunc595/luna-chess-engine |
Rust | AI-Generatedcareless paste · developer-confirmed | 147 leftover [cite:] markers pasted from Gemini; conflicting versions; an orphaned source file |
Read → |
HSR-projects/Owen |
C++ | AI-Generatedagent-built · human-directed | A committed claude npm dependency (Claude Code workspace); the whole engine in one 11,472-line commit |
Read → |
znxftw/rudim |
Rust | Human | 605 SPRT-style commits; a genuinely incremental NNUE accumulator (vs a naive from-scratch recompute) | Read → |
Dejon51/Crustik |
C | Human | Jokes and abandoned experiments left in the source; OpenBench bench: commit discipline |
Read → |
AnanyTanwar/Catalyst |
C++ | Humanexpert | Systems-level depth: huge-page TT allocation, cache-line cluster packing, XOR key verification | Read → |
Tors3/Triumviratus |
C++ | AI-assistedexpert human-led · SF-derived | 2.5 years of SPRT/SPSA-tuned, Elo-measured commits; a CLAUDE.md shows AI as a tool in the loop, not the author |
Read → |
dylan2554/onyx |
C++ | AI-assistedself-disclosed | The UCI banner literally reports author Dylan (with Claude); competent single-file engine, own net, uploaded as finished files |
Read → |
tomitank/tomitankChess |
JavaScript | Humancertain | A nine-year commit history since 2017 — predates AI code generation entirely | Read → |
ExxDreamerCode/Ember |
Rust | Humancollaborative | Two developers via real PRs; a video-documented "stupidities" suite of the engine's own blunders | Read → |
op12no2/lozza |
JavaScript | Humanveteran | Long-running pure-JS NNUE engine; incremental, bench-fingerprinted commits by a known author | Read → |
ericlangedijk/chessnix |
Zig | Human~3300 Elo | A known author writing in Zig; organic refactor history and a hand-crafted evaluation | Read → |
GyatsoYT/GyatsoChess |
Nim | Human | Written in Nim; commit log of specific search improvements with CCRL gains (2095 → ~3300) | Read → |
ranzuh/ratsu |
Rust | Human | 114 commits over ~16 months; honest feature-by-feature increments, CCRL-tracked | Read → |
TheChii/Porcupine-Chess-Engine |
Rust | Human | Added NNUE then deliberately reverted to HCE — a judgement call no dump makes | Read → |
A second, independent axis — not "AI or human" but "how close to Stockfish?" It runs from engines with their own board representation and hand-crafted evaluation, through modern NNUE designs that share Stockfish's ideas, to engines built directly on Stockfish's own search code and network. Distance here is neutral: Stockfish is GPL and learning from it is normal — being SF-like is neither good nor bad.
| Engine | Similarity | Basis |
|---|---|---|
| Owen | Derived | Runs on Stockfish's own HalfKP NNUE network (via nnue-probe); Fathom tablebases; SF-style engine idioms |
| Triumviratus | Derived | Ships Stockfish's NNUE code; used SF's net as default until v4.2; "SF-style" LMP / depth-pruning blocks |
| Catalyst | Strong | Stockfish techniques, independently coded: lockless XOR-verified TT, Lazy SMP, continuation history |
| rudim | Strong | SF-lineage search + a true incremental NNUE accumulator; own Bullet-trained net (Rust) |
| Ember | Strong | NNUE, Syzygy, SEE, correction history, LMP; own net (Rust) |
| Luna | Moderate | Generic bitboard + NNUE modern architecture, but a naive own implementation |
| Onyx | Moderate | Magic bitboards, PVS/LMR, a PeSTO base plus a self-trained NNUE (single file) |
| Lozza | Moderate | Modern NNUE with incremental accumulators; independent pure-JS lineage |
| Gyatso | Moderate | Modern search (TT clustering, IIR, NMP, LMR); independent, written in Nim |
| Crustik | Independent | Classical hand-crafted (PeSTO) evaluation; magic bitboards; no NNUE |
| chessnix | Independent | Hand-crafted evaluation, written in Zig; its own approach |
| Porcupine | Independent | Custom move generator; deliberately HCE (NNUE added then removed) |
| Ratsu | Independent | 0x88 board representation — explicitly not bitboards like Stockfish; own Rust design |
| tomitankChess | Independent | Its own long-standing pure-JS lineage; deliberately readable, "unlike stockfish-js" |
Note the two axes are orthogonal: a human-written engine can be very Stockfish-like (Catalyst), and an AI-touched one can lean either way (Owen is derived; Triumviratus is derived but human-led). "Close to Stockfish" measures lineage and technique — not who, or what, did the typing.
Authorship is inferred from convergent evidence across the repository — not a single test.
Un-scrubbed AI artifacts pasted into the code — e.g. Gemini [cite:] markers — or committed agent dependencies like a claude npm package in a C++ project.
Incremental, individually-motivated patches over weeks (human) versus a single wholesale dump or a handful of same-day commits (generated).
Jokes, typos, abandoned experiments, messy includes and tuning notes (human) versus uniform, over-explained, plausible-but-shallow output (AI).
Whether the hard parts are actually right — an incremental NNUE accumulator, huge-page TT, lockless-hash verification — or merely imitated in shape.
SPRT/OpenBench discipline, Elo-measured releases, PR collaboration, bespoke regression suites — evidence of a real development loop.
Real named authors, plausible email identities, and a history that predates — or doesn't — the availability of AI code generation.
Beyond these new releases, I ran the same tests across the strongest engines in the world. The result: no AI-generated engines (no model builds a 3500-Elo engine), a near-total convergence on the Stockfish paradigm, and exactly one AI-marker hit — Arasan, human since 1994, now using an AI assistant.