Show HN: WMTrace – See how LLM text watermarks work (Anthropic just adopted one) WMTrace, a new open-source forensic workbench for LLM text watermark detection, launched on Hacker News, offering scheme-aware analysis with evidence grades and abstention rather than opaque AI scores. The tool, which Anthropic recently adopted a watermark scheme from, includes detectors for KGW-style, unigram, zero-width, and lexical-codebook watermarks, and reports calibrated statistics such as z = 16.1 and Holm-adjusted p = 3.5e-48 in its demo. Forensic detection, benchmarking, and explainable analysis of LLM text watermarks, provenance signals, and hidden-payload channels. WMTrace is a scheme-aware forensic workbench, not a monolithic "AI detector". It answers narrow, honest questions — does this text carry calibrated evidence for a declared watermark scheme, key, and configuration? — and it states, with every result, exactly what that result does not prove. Important A negative watermark result does not mean text was human-written. A recovered payload does not prove who embedded it. No result here supports provider attribution without trusted key provenance. pip install -e ". dev " from a clone; Python 3.10+ wmtrace serve polished web UI at http://127.0.0.1:8177 The Analyze tab on a generated watermarked sample: summary pills per detector, calibrated statistics z = 16.1, Holm-adjusted p = 3.5e-48 , and the keyed green-token heatmap. Reproduce it locally with wmtrace serve → http://127.0.0.1:8177/?demo=1. Evidence, not verdicts. Results are versioned evidence bundles with categorical grades E0–E5 and mandatory scope statements — never an opaque "97% AI" score. Four problems, four namespaces. Watermark detection, generic AI-text detection, model attribution, and provenance verification stay separate in code, API, and UI, and are never averaged together. Abstention is an answer. Detectors declare unsupported E0 or insufficient E1 before scoring rather than guessing on short, low-entropy, or incompatible input. No guessed provider secrets. There is no anthropic or openai detector here and never will be until an official verification API or reproducible public specification exists. All keys in this build are published research keys. Executable documentation. Every worked example in the research spec /gtesei/llm-watermark/blob/main/docs/RESEARCH.md is reproduced exactly by golden tests — the docs cannot drift from the code. | Detector | Scheme | Claim status | Keyed? | Max grade | Round-trip demo | |---|---|---|---|---|---| kgw-toy | Contextual green-list KGW-style , γ=0.25, 2-word context | ILLUSTRATIVE | ✔ published demo key | E3 | ✔ green-biased generator | unigram-toy | Fixed keyed green-list | ILLUSTRATIVE | ✔ published demo key | E3 | ✔ green-biased generator | zero-width | Invisible Unicode payload U+200B=0, U+200C=1 | ILLUSTRATIVE | ✘ unkeyed | E2 | ✔ encoder | lexical-codebook | Synonym-pair payload bits | ILLUSTRATIVE | ✘ public codebook | E2 | ✔ encoder | unicode-inspector | Zero-width / bidi / unusual-space / mixed-script indicators | IMPLEMENTATION | ✘ keyless | E2 | — | Model-based detectors SynthID-Text reference, Fast-DetectGPT, Binoculars , C2PA verification, and provider adapters are roadmap items — see the research spec /gtesei/llm-watermark/blob/main/docs/RESEARCH.md for the full plan and the reasoning. wmtrace serve opens a responsive, dark/light, mobile-friendly interface: Analyze — paste text, get evidence cards per detector: grade badge, decision, exact statistics N, green count, z, exact binomial p, Holm-adjusted p , a per-token green heatmap, Unicode findings, and a "what this result means" scope statement. Embed — generate green-biased sample text under the demo key, or hide zero-width / lexical payloads in your own text, then round-trip it into the analyzer with one click. Invisible characters can be revealed inline. About — evidence-grade table, detector manifests, and responsible-interpretation guidance. Query parameters: ?demo=1 auto-loads a watermarked sample and analyzes it; ?theme=light|dark forces a theme used for the screenshots above . Run all detectors Holm-corrected across the run wmtrace scan document.txt wmtrace scan document.txt --json full evidence bundles One declared scheme wmtrace detect --scheme kgw-toy document.txt Unicode and formatting inspection only wmtrace inspect document.txt Demo embedding: generate a watermarked sample, reproducibly wmtrace embed --scheme kgw-toy --length 150 --seed 11 marked.txt wmtrace detect --scheme kgw-toy marked.txt Hide an ASCII payload in invisible Unicode echo "Meet at the usual place." | wmtrace embed --scheme zero-width --payload Hi --ascii php flowchart LR I Input text -- H Hash + explicit representations