Source Authorship Forensics

Was this chess engine written by a human — or generated by AI?

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.

14
engines examined
2
AI-generated
2
AI-assisted
10
human-written

The authorship spectrum

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.

AI-generated

The code itself was produced by AI. The human contribution is direction and prompting, not authorship.

  • Luna — careless paste (Gemini), unreviewed
  • Owen — competent agent build (Claude Code), one-shot
AI-assisted human

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.

  • Triumviratus — human-led: 2.5 yrs of SPRT/SPSA work; a CLAUDE.md tool in the loop
  • Onyx — co-written & self-disclosed: author Dylan (with Claude)
Human-written

Authored by a person — hobbyist to expert to veteran. AI absent, or only at the trivial margins (an occasional bot PR).

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

The verdicts

Ordered from machine-authored to unmistakably human. Click any engine for the full analysis.

EngineLangVerdictDecisive 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 →

Similarity to Stockfish

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.

← Independent / own designBuilt on Stockfish →
EngineSimilarityBasis
OwenDerivedRuns on Stockfish's own HalfKP NNUE network (via nnue-probe); Fathom tablebases; SF-style engine idioms
TriumviratusDerivedShips Stockfish's NNUE code; used SF's net as default until v4.2; "SF-style" LMP / depth-pruning blocks
CatalystStrongStockfish techniques, independently coded: lockless XOR-verified TT, Lazy SMP, continuation history
rudimStrongSF-lineage search + a true incremental NNUE accumulator; own Bullet-trained net (Rust)
EmberStrongNNUE, Syzygy, SEE, correction history, LMP; own net (Rust)
LunaModerateGeneric bitboard + NNUE modern architecture, but a naive own implementation
OnyxModerateMagic bitboards, PVS/LMR, a PeSTO base plus a self-trained NNUE (single file)
LozzaModerateModern NNUE with incremental accumulators; independent pure-JS lineage
GyatsoModerateModern search (TT clustering, IIR, NMP, LMR); independent, written in Nim
CrustikIndependentClassical hand-crafted (PeSTO) evaluation; magic bitboards; no NNUE
chessnixIndependentHand-crafted evaluation, written in Zig; its own approach
PorcupineIndependentCustom move generator; deliberately HCE (NNUE added then removed)
RatsuIndependent0x88 board representation — explicitly not bitboards like Stockfish; own Rust design
tomitankChessIndependentIts 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.

How the reads are done

Authorship is inferred from convergent evidence across the repository — not a single test.

Generated-text residue

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.

Commit history shape

Incremental, individually-motivated patches over weeks (human) versus a single wholesale dump or a handful of same-day commits (generated).

Code texture

Jokes, typos, abandoned experiments, messy includes and tuning notes (human) versus uniform, over-explained, plausible-but-shallow output (AI).

Engineering depth

Whether the hard parts are actually right — an incremental NNUE accumulator, huge-page TT, lockless-hash verification — or merely imitated in shape.

Process & testing

SPRT/OpenBench discipline, Elo-measured releases, PR collaboration, bespoke regression suites — evidence of a real development loop.

Identity & timeline

Real named authors, plausible email identities, and a history that predates — or doesn't — the availability of AI code generation.

Also swept: the CCRL 40/40 top 50

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.

See the CCRL Top 50 survey →   Standouts: Stockfish (the reference) · Arasan (veteran, AI-assisted) · Chess System Tal (#19, this site's own).
A note on fairness. These reads infer authorship from technical and process evidence; they are well-supported readings, not certifications. AI assistance is now common and legitimate — the question here is whether a repository was authored by a person or generated wholesale. Where a developer has responded (as Luna's did, confirming the finding), that response is reflected in the analysis.