fragRoger · Analysis · 15 August 2026
DeutschClaude's watermark: statistical word choice & a quick check
Anthropic has been marking Claude's texts invisibly since 2 August 2026. Not a hidden character, but a skewed word choice that is only provable with the secret key. Below you find a detector to try out, then the explanations, and a skill for writing more human text.
First, the terminology
Why «watermark» is a misleading word here
The term suggests a physical feature like the one on a banknote, visible to the naked eye. Anthropic describes the opposite: the watermark is entirely indistinguishable for readers and changes neither the meaning nor the quality of the text.
There is no string to search for, no suspicious spacing to measure and nothing a manual inspection could surface. The actual mechanism manipulates the source of randomness the model uses to pick between equivalent candidate words — «fast», «quick» and «rapid» in a context where all three mean the same thing.
Text forensics in the browser
Check a text
The same logic as the Anthropic-style module, executed right here. Please note: without Anthropic's real key this is a methodology demo, not proof of Claude authorship. A genuine Claude text is therefore not detected here — the test only measures bias towards the key set below.
The self-test generates text watermarked with exactly this key — the detector must flag it. That proves the statistics work, and that unremarkable results on foreign texts are not a bug but the consequence of not knowing the key.
Important: in the word-choice test the AI sample also stays unremarkable, and that is correct. This test only measures whether the word choice matches the configured key — not writing style. To see the difference, switch to «Typical AI phrasing». The AI sample also contains invisible characters for the third check.
Three checks, three different traces
Counts phrases that language models use far more often than people do. A stylistic clue, not proof.
The text is too short for a reliable assessment. The index becomes meaningful from roughly 150 words.
Reliability: not assessable · 35 words · 0 phrase hits
–
Features and evidence points
Sentence-length variation
Low values mean similarly long sentences — a typical model pattern.
Stylometry · value 0.03 · low = machine-like
Generic phrasing
Share of detected generic or formulaic phrasing.
Discourse patterns · value 0.0 % · high = machine-like
Standardised transitions
Share of sentences with typical transition or summary formulas.
Discourse patterns · value 0.0 % · high = machine-like
Repeated sentence openings
Share of sentences starting with the same two words.
Stylometry · value 0.0 % · high = machine-like
Repeated word sequences
Share of repeated three-word sequences.
Discourse patterns · value 0.0 % · high = machine-like
Lexical diversity
Low values can indicate a uniform vocabulary.
Stylometry · value 0.83 · low = machine-like
Detected stock phrases
None of the known AI stock phrases from the text-humanizer skill were found. That is a style finding, not proof of origin.
What this result does not say
- –The thresholds are example values from the reference script and are not calibrated against an own reference corpus.
- –The token-statistical features (surprisal, entropy, top-k shares) are missing because they would require a locally run language model.
- –The result describes statistical similarity and proves neither authorship nor a specific model.
- –Stock phrases are a style signal, not proof of origin. People write «in conclusion» or «moreover» too, and a well-edited AI text stays clean here.
Orientation
Three levels of AI traces
«AI watermark» is an umbrella term for three technically unrelated levels. Mixing them up means looking in the wrong place.
Trace 1 · Typical AI phrasing
Formulations and sentence patterns that language models use far more often than people do. A stylistic clue, not proof.
Testable here · indication, not proof
Trace 2 · Biased word choice (the watermark)
While writing, the model favours a secret word list. No special character in the text, only a frequency anomaly.
Methodological only · the key is not public
Trace 3 · Invisible characters in the text
Zero-width characters, control characters, variation selectors and look-alike letters that sit in the text but are never rendered.
Testable here · unambiguous hits
The checker above covers traces 1 and 3 verifiably, and trace 2 only as a method, because Anthropic's key is not public. File metadata is out of scope here and is handled by the text-humanizer skill.
The technical mechanism
Green list and red list
Anthropic confirms that Claude's approach is a variant of Google DeepMind's SynthID Text, which traces back to a design idea proposed by Scott Aaronson in 2022. This family of methods, which also includes the KGW method published in 2023 (Kirchenbauer, Geiping, Wen et al.), works as follows:
- 01At every generation step the model holds several candidate tokens with almost identical probability.
- 02A secret key is combined with the preceding tokens and hashed pseudorandomly to split the entire vocabulary into a green list and a red list.
- 03Green-list tokens receive a small positive bonus on their selection probability before the model draws the next token.
- 04That bonus only takes effect where candidates were near-equivalent anyway; it never overrides a strong model preference, which is why grammar and factual content stay unchanged.
- 05Across a long text the bias accumulates into a statistically measurable pattern, even though every individual word choice looks unremarkable on its own.
Formally, a watermark-free model samples the next token w_t from a conditional distribution P_t over the vocabulary W. A watermarked model additionally couples that choice to a pseudorandom variable ζ_t known only to the verifier, so that w_t = S(P_t, ζ_t), where S is a deterministic decoder function.
Detection
Nothing but a significance test
Detection runs in reverse: with the same secret key the verifier applies the same hashing scheme to the text under review, counts the share of tokens falling into the green list and compares that share with the value expected under pure chance, typically 50 percent at γ = 0.5. If the observed share deviates significantly upwards, the text is considered likely Claude-generated. The test works without access to the model, but it strictly requires the key.
A positive hit only proves that Claude was involved in producing the text, not who supplied the content or the ideas. A self-written text that Claude merely proofread or translated can trigger exactly the same mark as a fully AI-generated one. Conversely, the absence of a mark is no proof of human authorship.
Current status
Public detection does not exist yet
At the time of the announcement Anthropic had not released a public detection API; the company is working on tools for users and third parties without a binding timeline. Without the real Anthropic key the original procedure cannot be rebuilt or verified externally.
Commercial «AI detectors» that already claim to spot Claude text instead rely on generic stylistic analysis: predictable phrasing, uniform sentence rhythm, recurring structure. Michael Wade's analysis explicitly classifies that as a fundamentally different and far less reliable technique. The regulatory driver behind the measure is Article 50(2) of the EU AI Act, which Anthropic formally signed up to via the Code of Practice.
Build it yourself
A text checker on the same principle
The underlying principle is openly documented and can be rebuilt for your own purposes, for instance to watermark self-hosted LLM pipelines, even though Anthropic's concrete key stays out of reach. The Python module below implements the core logic: pseudorandom green-list generation per preceding token plus key, and a z-test detector that compares the observed hit rate against the chance expectation.
"""
Claude / LLM Text-Watermark Checker (KGW-Stil / Green-Red-List)
-----------------------------------------------------------------
Implementiert das statistische Grundprinzip, das Anthropic fuer
Claude-Wasserzeichen beschreibt (SynthID-Text / KGW-Familie):
Bei jedem Generierungsschritt wird das Vokabular pseudorandom -
gesteuert durch einen Secret Key + die vorherigen Tokens - in eine
"Green List" und eine "Red List" gesplittet. Ein wasserzeichen-
behaftetes Modell bevorzugt statistisch die Green-List-Tokens.
Ohne den Key ist dieser Bias fuer Menschen unsichtbar, aber mit
genuegend Text statistisch nachweisbar (z-Test).
WICHTIG: Ohne Anthropics echten Secret Key kann dieses Skript
Claude-Wasserzeichen NICHT verifizieren. Es demonstriert die
Methodik und kann fuer eigene, selbst erzeugte Wasserzeichen
(z.B. in eigenen LLM-Pipelines) produktiv genutzt werden.
"""
import hashlib
import math
import re
from typing import List, Dict, Optional
def _hash_token(seed_str: str, token: str) -> int:
return int(hashlib.sha256(f"{seed_str}:{token.lower()}".encode()).hexdigest(), 16)
def get_green_list(prev_token: str, key: str, vocab: List[str], gamma: float = 0.5) -> set:
"""Pseudorandomer Split des Vokabulars in Green/Red, seeded durch prev_token + Key."""
seed_str = f"{key}:{prev_token.lower()}"
scored = sorted(vocab, key=lambda w: _hash_token(seed_str, w))
n_green = int(len(vocab) * gamma)
return set(scored[:n_green])
def tokenize(text: str) -> List[str]:
"""Einfache Wort-Tokenisierung (fuer Produktionseinsatz: echten LLM-Tokenizer verwenden)."""
return re.findall(r"[A-Za-zÀ-ÿ]+(?:'[a-z]+)?", text)
def detect_watermark(
tokens: List[str],
key: str,
gamma: float = 0.5,
vocab: Optional[List[str]] = None,
z_threshold: float = 4.0,
) -> Dict:
"""
Fuehrt den z-Test auf der Green-List-Traefferquote durch.
- gamma: Erwarteter Anteil Green-Tokens unter Nullhypothese (kein Wasserzeichen).
- z_threshold: Klassischer Schwellenwert (~4.0) fuer "wahrscheinlich wasserzeichenbehaftet".
"""
if vocab is None:
vocab = list(set(t.lower() for t in tokens))
if len(tokens) < 2:
return {"error": "Zu wenige Tokens fuer verlaessliche Erkennung (mind. ~75-100 empfohlen)."}
green_hits = 0
n = 0
for i in range(1, len(tokens)):
prev_tok, cur_tok = tokens[i - 1], tokens[i]
green = get_green_list(prev_tok, key, vocab, gamma)
if cur_tok.lower() in green:
green_hits += 1
n += 1
observed_frac = green_hits / n
se = math.sqrt(gamma * (1 - gamma) / n) if n > 0 else 0
z = (observed_frac - gamma) / se if se > 0 else 0.0
p_value = 0.5 * math.erfc(z / math.sqrt(2))
return {
"tokens_tested": n,
"green_hits": green_hits,
"observed_fraction": round(observed_frac, 4),
"expected_fraction_null": gamma,
"z_score": round(z, 3),
"p_value_one_sided": round(p_value, 6),
"likely_watermarked": z > z_threshold,
"reliability_note": (
"Ausreichend Text (>=100 Woerter empfohlen)."
if n >= 100 else
"Warnung: Textmenge unter empfohlenem Minimum, Ergebnis unsicher."
),
}
def check_text(text: str, key: str, gamma: float = 0.5) -> Dict:
"""High-Level-Funktion: Text -> Tokenisierung -> Watermark-Check."""
tokens = tokenize(text)
return detect_watermark(tokens, key, gamma=gamma)
if __name__ == "__main__":
# Beispieltext (menschlich verfasst, kein echtes Anthropic-Wasserzeichen)
demo_key = "beispiel-secret-key"
demo_text = (
"Der Regen fiel leise auf das Dach, waehrend die Katze am Fenster sass "
"und nach draussen schaute. Es war ein ruhiger Nachmittag, an dem nichts "
"Aussergewoehnliches geschah, ausser dem gleichmaessigen Klang des Wassers."
)
result = check_text(demo_text, demo_key)
for k, v in result.items():
print(f"{k}: {v}")
For every text the detector returns the number of tokens tested, the green-list hit rate, the z-score and a one-sided p-value. As a rule of thumb from the literature, a z-score above roughly 4 is strong evidence of a watermark, while below 100 words reliability drops sharply. Production use against real models additionally requires the exact tokenizer of the target model instead of naive word tokenisation, the provider's actual secret key, plus knowledge of the gamma parameter and of the context window size used for hash seeding.
On top of that, the module ki_text_evidenz.py is available for download. It is deliberately not a percentage detector but a transparent evidence key: measurable features score 0 to 3 points each, grouped and weighted into an index with a stated reliability. The «typical AI phrasing» mode above uses exactly that logic — minus the token-statistical features, which would require a locally run language model.
Practice
The matching skill
If you need the other direction, that is checking and removing provenance marks in your own files, my skill for that lives on skills.fragroger.ai.
Remove multi-vendor AI provenance marks
- Style · typical AI phrasing, defused by rewriting
- Word choice · statistical text watermarks
- Characters · invisible characters in the text
- Files · C2PA, EXIF, XMP and container metadata in PNG, JPEG, WebP, SVG, PDF, DOCX, ODT, HTML, MD
Covers Claude, Gemini and the SynthID class, OpenAI provenance and sampling marks of open LLMs. Invoked via /remove-ai-marks (alias /remove-claude-marks).
Intended for your own content, for privacy, hygiene and research. A cleaned text is no proof of human authorship — and should not be sold as one.
Orientation
Further information
Related approaches
Google DeepMind runs a similar sampling watermark with SynthID Text, on top of SynthID for image, audio and video. OpenAI has built a text watermark but has not shipped it.
Provenance instead of watermarks
C2PA, also known as Content Credentials, attaches cryptographically signed metadata to files. That is robust against rewriting but does not survive copy-pasting plain text.
Attacks from the literature
Paraphrase attacks, translation round-trips and spoofing are well documented. Increasing the green-list bias for robustness lowers text quality — a direct trade-off.
False positives
The z-test is a statistical test, not a proof. With short texts, lists, code or fixed phrasing the risk of misclassification rises sharply.
Practice for schools and HR
A detector result alone carries no sanction. It works as a reason to talk, combined with process evidence such as version history, drafts and sources.
FAQ
Frequently asked questions
Can Claude's watermark be detected without Anthropic's key?
No. The statistical test only works with the secret key that splits the vocabulary into a green and a red list. Without it, a genuine Claude text looks statistically unremarkable.
Does translating or rewriting a text remove the watermark?
Translation destroys the signal completely because the token sequence is regenerated. Heavy paraphrasing usually destroys it as well; light copy-editing often leaves part of the signal intact.
How long does a text have to be for detection to be reliable?
Roughly 75 to 100 words is the lower bound. Below that the z-score is dominated by noise and the result cannot be trusted.
Is a positive detection proof of AI authorship?
No. A hit shows that the model contributed to the text, not who supplied the ideas. A human-written text merely proofread by Claude can trigger the same mark, and a missing mark proves nothing either.
Evidence
Sources
- Anthropic
Primary source for the announcement and the conditions around the watermark.
- Kirchenbauer et al., A Watermark for Large Language Models
The KGW method: green list, logit bias and the z-test used by the detector above.
- Kirchenbauer et al., On the Reliability of Watermarks
Robustness against paraphrasing, translation and human editing.
- Sadasivan et al., Can AI-Generated Text be Reliably Detected?
Theoretical and practical limits of detection, including spoofing.
- Dathathri et al., SynthID-Text (Nature 2024)
Google's production text watermark using tournament sampling.
- C2PA Specification
Standard for signed provenance metadata, complementary to statistical watermarks.