Bypassing Claude's invisible watermark
August 12, 2026
A viral thread claimed Claude now stamps a trackable fingerprint into every answer that points back to you. I reproduced the underlying method in a closed loop on one modern model (Qwen3.5-4B, fixed seed): generate text with a secret key, detect it with the same key. The result that mattered was the threshold. With a naive cutoff the watermark looks weak, which is the mistake I made first. Calibrate the cutoff on a control group and the same runs detect watermarked text 100% of the time from 200 tokens, with almost no false positives. The mark is reliable, and it survives light edits to about 10 to 20% of the tokens. But one full paraphrase drops the score to the human-text baseline, past the calibrated detector, because a rewrite re-tokenises everything. And the published scheme detects AI, not identity.
You are reading the plain-language version. Switch to Tech for the code and the architecture.
Question
Claude wrote this paragraph. Can the watermark detector prove it?
Answer
On unedited text of a few hundred words, yes. Replay the secret key over the tokens and watermarked text scores far above human writing; a threshold calibrated on human text flags it every time, with almost no false alarms. But run the paragraph through any model for a quick rewrite first, and the score falls back to the human baseline. So the mark proves "unedited AI", not "AI", and never "this person".
Sources
SynthID-Text · Dathathri et al. · Nature 2024SynthID-Text in Hugging Face Transformersclosed-loop reproduction · generate with key, detect with keyAnthropic confirmed, on its support page, that supported Claude models now weave an invisible watermark into the text they generate. A wave of posts read that as surveillance: your prompt fingerprinted, traceable back to you, strip it before it’s too late. I reproduced the method and measured it, so I can tell you which parts are true.
A secret key biases word choice at generation. The detector replays the key on long text. One rewrite erases the signal.
The public method that fits is SynthID-Text, out since 2024. When the model writes, a secret key nudges it toward some word choices over other equal ones. Replay the key over the text and a statistics test finds the bias. You don’t see it, and the meaning holds.
Why this matters to you
This goes past Anthropic. The EU AI Act (Article 50) will require providers of generative AI to mark AI-generated text in a machine-readable way, and the obligation starts to apply in August 2026. Anthropic already signed the transparency Code of Practice. So watermarking is about to be table stakes across the industry. If any part of your product decides something from whether text is AI-generated, or if your worry is being tracked by the mark, the question that matters is what this signal proves and what it doesn’t.
What the watermark actually proves
It’s reliable on normal-length text, if the detector is set up right. In my run it caught watermarked text 100% of the time from 200 tokens up, with almost no false alarms on human text. A lazy threshold hides the signal completely, so whoever runs the detection has to calibrate it or it looks broken.
It fails on short text. A tweet or a product blurb has too few words to carry a signal. Below roughly a paragraph, there’s nothing to detect.
One rewrite erases it. I paraphrased watermarked text with another model, and the detection score fell to the level of text that was never marked, every time, past a properly tuned detector. Light edits are different: the mark survives a word swapped here and there, up to about 10 to 20% of the text. A full rewrite, the kind anyone does for tone, deletes it. So as proof of “this is AI”, it catches unedited use and misses anything someone bothered to rework.
It doesn’t identify you. The published scheme detects that text is AI-generated. It says nothing about which person generated it. The claim that it encodes your prompt and tracks you back doesn’t hold up anywhere I could measure, and a tracker that one paraphrase deletes would be a poor tracker.
What this means for your product
If any part of your product leans on detecting AI-generated text, treat a positive as a good signal on unedited text and never as forensic proof. Treat a negative as meaningless, because the text could be short or one rewrite away from clean. The signal is real, but it’s easy to remove on purpose.
If your worry is the opposite, privacy, today’s watermark doesn’t point back to a person. The version that could, in theory, is defeated by the same rewrite you’d run for tone anyway.
What I can do
If you’re weighing an AI-provenance or content-authenticity feature, I give you a grounded read on what actually holds up: what a watermark can prove and where it breaks. I’ve reproduced the method end to end, calibrated the detector, and measured the bypass, so the read comes from measured numbers rather than vendor claims.
The honest answer is undramatic. The watermark does what it claims, and one rewrite gets past it. If you want that read on your own provenance plan, I’m happy to look at yours, in writing.
Anthropic’s support page says it plainly: supported Claude models weave an imperceptible watermark into the text they generate. Online, that grew into a bigger claim, that the mark fingerprints your prompt and traces the text back to you. So I reproduced the method and measured it.
I didn’t touch Claude’s watermark. Its key is secret, so no one can read it from outside. I reproduced the published mechanism on my own model, with my own key, and broke that. The weakness lives in the method itself, so it transfers to any key.
A secret key biases word choice at generation. The detector replays the key on long text. One rewrite erases the signal.
tl;dr
- The public method that fits is SynthID-Text (Nature, 2024). Anthropic has not confirmed the algorithm, so treat it as the closest public match, unconfirmed.
- One model, one config, a fixed seed: Qwen3.5-4B. Every number is from that run.
- Calibrate the detection threshold and it catches watermarked text 100% of the time from 200 tokens up, with almost no false alarms. A naive threshold hides the signal.
- Random edits survive to about 10 to 20% of the tokens. One full paraphrase drops the signal to zero. That’s the bypass.
- The published scheme is zero-bit: it flags that a text is AI, and says nothing about who wrote it.
Why now: the EU AI Act
The push is regulatory. Anthropic signed the EU AI Act’s Article 50(2) Code of Practice on transparency. From August 2026, the Act makes generative-AI providers mark their output in a machine-readable way. Watermarking is how you meet that at the model level, so every large provider will ship one. Worth knowing how well it holds.
How the watermark works
At each step the model has a probability for every next token. A key-seeded function gives each candidate a g-value, close to a 0 or a 1. The sampler leans toward high g-value tokens, choosing between near-equal phrasings, so the meaning holds. To detect, you replay the key and average the g-values: human text sits near 0.50, watermarked text is pushed up. The whole detector is a few lines.
import numpy as np
def detect(token_ids, processor):
g = processor.compute_g_values(token_ids) # (1, L, depth)
mask = processor.compute_context_repetition_mask(token_ids).float()
per_token = g.float().mean(dim=-1) # score each token
n = mask.sum().item() # scored tokens
mean_g = (per_token * mask).sum().item() / n
z = (mean_g - 0.5) / np.sqrt(0.25 / n)
return mean_g, z, nThis is the simple mean g-value test. SynthID ships a stronger trained detector, so every “not detected” below is a lower bound.
Watermarked or not, you can’t tell
Same prompt, “Explain how a suspension bridge carries load.”
Watermarked (detected):
A suspension bridge carries load through a distinct chain of tension and compression forces that transfers the weight of the bridge and its traffic to tall anchorages on either side of the river or valley.
Control, no watermark (not detected):
A suspension bridge carries load through a specific sequence of mechanical forces that transfer the weight of the bridge and traffic from the deck up through cables, into towers, and finally into the ground via anchorages.
You can’t tell them apart. That’s the design.
Calibrate the threshold, and it works
The z-scores run small, so a theoretical cutoff of z greater than 4 makes the watermark look weak. Don’t pick the threshold from theory; pick it from the control group. Human z-scores had a mean of -0.11 and a standard deviation of 0.28, so I set the cutoff at their 99th percentile: 0.56. Human text almost never lands above it.
| generated length | detection (watermarked) | false positives (control) |
|---|---|---|
| 200 tokens | 100% | ~0% |
| 400 tokens | 100% | ~0% |
| 800 tokens | 100% | ~0% |
| 1200 tokens | 100% | ~0% |
Watermarked z-scores ran 1.2 to 6.9. Control never passed 0.56. No overlap. So the watermark is reliable from a couple hundred tokens. Six trials per cell, one seed. Short text stays unmarkable.
Stronger mark, worse text
The mark hides in the choice between near-equal tokens. A confident model spends its probability on one token, so there’s little room to bias, and the raw signal is small. Raise the temperature and the signal climbs, but the text degrades. Swept at 400 tokens:
| temperature | watermark z-score | text quality |
|---|---|---|
| 1.0 | 2.8 | clean |
| 1.2 | 4.2 | clean |
| 1.4 | 6.5 | starts to drift |
| 1.6 | 9.6 | gibberish |
A strong, edit-resistant mark costs text quality. A clean output ships a faint mark. That trade-off is fixed.
What erases it
Both attacks are measured against the calibrated threshold.
Random token corruption, the crudest possible edit (garbage in place of words), so an upper bound on how easy a real edit is:
| tokens corrupted | detection |
|---|---|
| 0% | 100% |
| 5% | 100% |
| 10% | 100% |
| 20% | 83% |
| 30% | 50% |
The mark survives to about 10 to 20% before it falls. A careful editor swapping a word here and there stays well under that.
Paraphrase. Rewrite the text with another model, no key, then detect:
rewrite = "Rewrite this in different words, same meaning:\n\n" + watermarked_text
paraphrased = model.generate(**tok(rewrite), do_sample=True) # no keyAcross six texts, the originals averaged z 3.1, all detected. After one paraphrase they averaged 0.0, none detected. The rewrite re-tokenises everything, so the n-grams that carried the signal are gone. Corruption nibbles at the signal; a paraphrase deletes it, and gets past even the calibrated detector.
Why text is softer than an image
An image watermark spreads a signal across millions of pixels, built to survive JPEG compression and resizing. Killing it means degrading the image visibly. Image marks fall too, to regeneration and diffusion attacks, but you pay in pixels. A text watermark lives in a few hundred token choices, and language is redundant in meaning. You can’t paraphrase an image without wrecking it, while you can paraphrase a sentence and lose nothing. That’s the whole difference.
The watermark does what it claims, and a single rewrite still gets past it. The code and the benchmark are in the repo; change the keys and break your own.
Got this problem? I'll look at yours, in writing.
Book a call