{"id":14726,"date":"2026-08-25T08:39:27","date_gmt":"2026-08-25T07:39:27","guid":{"rendered":"https:\/\/www.blopig.com\/blog\/?p=14726"},"modified":"2026-08-25T08:39:29","modified_gmt":"2026-08-25T07:39:29","slug":"claude-now-watermarks-its-text-heres-what-is-actually-happening-under-the-hood","status":"publish","type":"post","link":"https:\/\/www.blopig.com\/blog\/2026\/08\/claude-now-watermarks-its-text-heres-what-is-actually-happening-under-the-hood\/","title":{"rendered":"Claude now watermarks its text: here&#8217;s what is actually happening under the hood"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">On 11 August Anthropic announced that every Claude model released after 2 August 2026 will watermark the text it produces. Not just in the chat app: the watermark lives at the model level, so it is there whether the text came through the API, Claude Code, Cowork, or anything else built on top. A <a href=\"https:\/\/www.anthropic.com\/news\/claude-text-watermark\" data-type=\"link\" data-id=\"https:\/\/www.anthropic.com\/news\/claude-text-watermark\">follow-up post<\/a> a few days later explained the mechanism, and the short version is that it&#8217;s a version of DeepMind&#8217;s SynthID-Text, which in turn descends from a scheme Scott Aaronson sketched out while at OpenAI in 2022.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Predictably it has caused a lot of confusion, especially in the academic circles (&#8220;is it zero-width characters?&#8221;, &#8220;can I strip it with a regex?&#8221;, &#8220;does this mean Turnitin finally works?&#8221;), most of which comes from not knowing how an LLM actually turns a probability distribution into words. So this post starts there, builds the watermark up from the sampler, and then tries to be honest about what it does and doesn&#8217;t mean for people who write papers and mark essays for a living.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nothing here is hidden: the watermark is not metadata, not invisible Unicode, not a hidden token. It is a statistical pattern in which words were chosen, which is exactly why it survives copy-paste and exactly why it fades when you rewrite.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">The easy part: how a language model decodes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A language model does not emit words. At every step it emits a vector of logits, one per entry in its vocabulary (tens of thousands of tokens: words, sub-words, punctuation), and a function called softmax turns that into a probability distribution over what comes next:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq1_softmax.png?ssl=1\"><img decoding=\"async\" width=\"568\" height=\"198\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq1_softmax.png?fit=568%2C198&amp;ssl=1\" alt=\"\" class=\"wp-image-14734\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq1_softmax.png?w=568&amp;ssl=1 568w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq1_softmax.png?resize=300%2C105&amp;ssl=1 300w\" sizes=\"auto, (max-width: 568px) 100vw, 568px\" \/><\/a><figcaption class=\"wp-element-caption\">The softmax: p of token t given context equals exp(z_t over T) divided by the sum over all tokens of exp(z over T)<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">where <strong><em>z<\/em> <\/strong>are the logits and <strong>T<\/strong> is the temperature. Something outside the model, the <em>sampler<\/em>, then has to pick one token from that distribution, append it to the context, and run the forward pass again. Greedy decoding takes the argmax; ordinary sampling draws from <em>p<\/em>. That draw is where the randomness in &#8220;regenerate response&#8221; comes from, and that randomness is the entire raw material of the watermark.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?ssl=1\"><img decoding=\"async\" width=\"1760\" height=\"640\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?fit=625%2C227&amp;ssl=1\" alt=\"\" class=\"wp-image-14740\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?w=1760&amp;ssl=1 1760w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?resize=300%2C109&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?resize=767%2C279&amp;ssl=1 767w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?resize=624%2C227&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?resize=1024%2C372&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?resize=1536%2C559&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig1_next_token.png?w=1250&amp;ssl=1 1250w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption class=\"wp-element-caption\">Figure 1. Two next-token distributions. On the left the model is genuinely undecided between several good adjectives; on the right there is only one sensible continuation.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The important quantity is the entropy of that distribution. In Figure 1, the left-hand prompt has lots of roughly-equivalent continuations; the model has a few bits of freedom, and whichever word is picked, the reader would not notice. The right-hand prompt has essentially no freedom. Keep that asymmetry in mind: a watermark can only hide in freedom the model already has. Anthropic&#8217;s own description is that it &#8220;uses low-stakes choices&#8221; and that the words &#8220;are still random, but the source of the randomness is different&#8221;.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The idea in one sentence<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Replace the sampler&#8217;s true random number generator with a <em>pseudo<\/em>-random one seeded by a secret key and the last few tokens. Anyone with the key can then re-derive what the random numbers &#8220;should&#8221; have been at each position and check whether the text is suspiciously consistent with them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That&#8217;s it. Everything else is engineering to make the pattern detectable after a few hundred tokens while keeping the distribution of text (almost) unchanged.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The lineage: from Aaronson&#8217;s Gumbel trick to SynthID<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">It&#8217;s worth walking through the three generations of this idea, because Claude&#8217;s scheme is the third and is easiest to understand as a refinement of the first two.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Aaronson (2022), the &#8220;exp-minimum&#8221; \/ Gumbel sampler.<\/strong> A standard fact: if you want to sample a token from <em>p<\/em>, draw an independent uniform <em>*u&lt;sub&gt;t&lt;\/sub&gt;*<\/em> \u2208 [0,1] for every token and pick the <em><strong>t<\/strong><\/em> that maximises <em>*u&lt;sub&gt;t&lt;\/sub&gt;*<\/em>&lt;sup&gt;1\/<em>*p*<\/em>&lt;sub&gt;<em>*t*<\/em>&lt;\/sub&gt;&lt;\/sup&gt;. The result is <em>exactly<\/em> distributed as <em>p<\/em>, as long as the <em>*u&lt;sub&gt;t&lt;\/sub&gt;*<\/em> are uniform and independent of <em>p<\/em>. Aaronson&#8217;s trick is to make <em>*u&lt;sub&gt;t&lt;\/sub&gt;*<\/em> not truly random but <em>*u&lt;sub&gt;t&lt;\/sub&gt;*<\/em> = PRF&lt;sub&gt;<em>*k*<\/em>&lt;\/sub&gt;(last <em>H<\/em> tokens, <em>t<\/em>), a pseudo-random function of a secret key <em>k<\/em> and a short context window. Per-step, the output distribution is still exactly <em>p<\/em> (the <em>*u*<\/em>&#8216;s are still uniform as far as anyone without the key is concerned). But a detector with the key can recompute <em>*u*<\/em> for each emitted token and compute the score<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq2_score.png?ssl=1\"><img decoding=\"async\" width=\"454\" height=\"141\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq2_score.png?fit=454%2C141&amp;ssl=1\" alt=\"\" class=\"wp-image-14748\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq2_score.png?w=454&amp;ssl=1 454w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq2_score.png?resize=300%2C93&amp;ssl=1 300w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/a><figcaption class=\"wp-element-caption\">S equals the sum over positions of minus log of one minus u<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For human text, each <em>u<\/em> is just a uniform number, so <em>S<\/em> is a sum of Exp(1) variables with mean <em>n<\/em>. For watermarked text, the sampler systematically chose tokens with large<em> u<\/em>, so <em>S<\/em> is inflated, and the inflation is larger wherever the entropy of <em>p<\/em> was high. A z-test on <em>S<\/em> gives you a p-value.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Kirchenbauer et al. (2023), the &#8220;green list&#8221;<\/strong>. A blunter, more robust variant: seed a PRNG with the hash of the previous token(s), use it to split the vocabulary into a &#8220;green&#8221; half and a &#8220;red&#8221; half, and add a bias \u03b4 to every green logit before softmax. Detection just counts green tokens; under the null, about half should be green. This is easy to reason about but it <em>does<\/em> change the text distribution (you are literally pushing logits), and with a large \u03b4 it degrades quality.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>SynthID-Text (Dathathri et al., <em>*Nature*<\/em>, 2024), tournament sampling.<\/strong> This is what Claude uses. The two ingredients are:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>1. <\/strong><em><strong>g-values.<\/strong><\/em> For each decoding step, hash the key together with the previous <em>H<\/em> tokens (the paper uses a sliding window of a few tokens) to seed a PRNG, and use it to assign each vocabulary token a pseudo-random score <em>g<\/em>&lt;sub&gt;\u2113&lt;\/sub&gt;(<em>*t*<\/em>) \u2208 {0,1}, independently for each of <em>m<\/em> &#8220;layers&#8221; \u2113 = 1..<em>m<\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>2. <em>Tournament sampling.<\/em> <\/strong>Instead of drawing one token from <em>p<\/em>, draw 2&lt;sup&gt;<em>*m*<\/em>&lt;\/sup&gt; candidates i.i.d. from <em>p<\/em>. Pair them up; in each pair the candidate with the higher <em>g<\/em>&lt;sub&gt;1&lt;\/sub&gt; wins (ties broken at random). Pair the winners; now compare <em>*g*<\/em>&lt;sub&gt;2&lt;\/sub&gt;. Continue for <em>*m*<\/em> rounds and emit the single survivor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?ssl=1\"><img decoding=\"async\" width=\"1920\" height=\"736\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?fit=625%2C240&amp;ssl=1\" alt=\"\" class=\"wp-image-14752\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?w=1920&amp;ssl=1 1920w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?resize=300%2C115&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?resize=624%2C239&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?resize=767%2C294&amp;ssl=1 767w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?resize=1024%2C393&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?resize=1536%2C589&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig2_pipeline.png?w=1250&amp;ssl=1 1250w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption class=\"wp-element-caption\">Figure 2. One decoding step with a SynthID-style watermark. The model&#8217;s forward pass and the softmax are untouched; the orange boxes are the only additions.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Why the tournament rather than the Gumbel trick? Two reasons. First, the outcome is biased toward tokens with high <em>g<\/em> <em>without<\/em> modifying the logits, so the language model itself needs no change; it is purely a sampler swap, which is exactly why Anthropic can say it has &#8220;negligible impact on the speed of models&#8221; and &#8220;produces no extra tokens&#8221;. Second, because the candidates are drawn from <em>p<\/em>, a token with probability 0.94 will show up in nearly every slot of the tournament and win regardless of its <em>g<\/em>, while a token at 0.05 only wins when its <em>g<\/em> happens to be high. The watermark strength is automatically proportional to the entropy available. The paper also shows you can get a <em>non-distortionary<\/em> version (the per-step expected distribution over a batch of responses equals <em>p<\/em>) by tracking and re-using the random seeds, and a stronger <em>distortionary<\/em> version that sacrifices a little diversity for a stronger signal. Anthropic hasn&#8217;t said which knob settings they&#8217;ve chosen, only that they implemented &#8220;a version of&#8221; the approach.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Detection: it&#8217;s a hypothesis test, not a classifier<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The detector needs the key (that&#8217;s why Anthropic is offering a detection <em>API<\/em> rather than publishing weights for a detector). Given a document, it re-tokenises it, slides the same <em>H<\/em>-token window along, recomputes the <em>g<\/em>-values for every layer and every position, and averages. For a human-written document, each <em>*g*<\/em> is a fair coin, so the mean sits at \u00bd with standard deviation \u221a(1\/(4<em>*mn*<\/em>)) over <em>n<\/em> tokens. For watermarked text the mean is pushed above \u00bd. The test statistic is just<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq3_ztest.png?ssl=1\"><img decoding=\"async\" width=\"386\" height=\"184\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq3_ztest.png?fit=386%2C184&amp;ssl=1\" alt=\"\" class=\"wp-image-14761\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq3_ztest.png?w=386&amp;ssl=1 386w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/eq3_ztest.png?resize=300%2C143&amp;ssl=1 300w\" sizes=\"auto, (max-width: 386px) 100vw, 386px\" \/><\/a><figcaption class=\"wp-element-caption\">z equals the mean g minus one half, divided by the square root of one over four m n]<\/figcaption><\/figure>\n<\/div>\n\n\n<p class=\"wp-block-paragraph\">and you pick a threshold for the false-positive rate you&#8217;re willing to live with. (The real SynthID detector learns a slightly smarter weighted score, and there&#8217;s a Bayesian variant, but the logic is the same.)<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I wrote a ~40-line toy version of all this, with a 50-token vocabulary, <em>m<\/em> = 4 layers, and synthetic &#8220;high entropy&#8221; and &#8220;low entropy&#8221; next-token distributions, to make two points visually. It&#8217;s a caricature, not a reproduction of Anthropic&#8217;s numbers, but the shape is what matters.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?ssl=1\"><img decoding=\"async\" width=\"1280\" height=\"720\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?fit=625%2C352&amp;ssl=1\" alt=\"\" class=\"wp-image-14765\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?w=1280&amp;ssl=1 1280w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?resize=624%2C351&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig3_zscore.png?resize=1024%2C576&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption class=\"wp-element-caption\">Figure 3. Toy simulation of the detection z-score as a function of sample length for high- and low-entropy text. The dotted line is the 99th percentile of unwatermarked text.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Two things fall out of Figure 3 that map directly onto caveats in Anthropic&#8217;s post. The signal grows like \u221a<em>n<\/em>: a tweet&#8217;s worth of text is hopeless, a paragraph is borderline, a page is unambiguous. This is the &#8220;doesn&#8217;t work well on small samples&#8221; caveat. And low-entropy text carries a much weaker signal because the tournament has nothing to choose between: &#8220;Watermarking is sparser on factual passages where there are fewer choices that can be made without decreasing the accuracy of the text.&#8221; Code is the extreme case; Anthropic says the watermark effectively lives only in comments, where there is free choice of wording, and that &#8220;where an exact output is required \u2026 the watermark isn&#8217;t applied&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?ssl=1\"><img decoding=\"async\" width=\"1280\" height=\"672\" loading=\"lazy\" src=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?fit=625%2C328&amp;ssl=1\" alt=\"\" class=\"wp-image-14772\" srcset=\"https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?w=1280&amp;ssl=1 1280w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?resize=300%2C158&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?resize=624%2C328&amp;ssl=1 624w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?resize=768%2C403&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.blopig.com\/blog\/wp-content\/uploads\/2026\/08\/fig4_editing.png?resize=1024%2C538&amp;ssl=1 1024w\" sizes=\"auto, (max-width: 625px) 100vw, 625px\" \/><\/a><figcaption class=\"wp-element-caption\">Figure 4. Toy simulation: replacing a fraction of the tokens in a 300-token watermarked passage with human-chosen ones. The z-score falls roughly linearly with the fraction replaced.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Figure 4 is the editing question. Each human-rewritten token contributes a fair-coin <em>g<\/em> instead of a biased one, so the signal decays smoothly with the fraction of text replaced rather than vanishing at the first edit. That&#8217;s why the official line is that &#8220;light editing probably won&#8217;t remove the watermark completely; a complete rewrite where every word is replaced will&#8221;. It&#8217;s also why a paraphrase through a <em>different<\/em> LLM is the canonical attack: the SynthID paper itself reports that paraphrasing degrades detection substantially, and nothing about Claude&#8217;s implementation changes that arithmetic. There is one subtlety the figure hides: because the <em>g<\/em>-values are seeded by the <em>preceding H<\/em> tokens, editing one word also scrambles the seeds for the next <em>H<\/em> positions, so real-world decay is a bit steeper than my token-replacement toy suggests. Conversely, inserting or deleting tokens doesn&#8217;t desynchronise the detector globally, because the window re-aligns after <em>*H*<\/em> tokens; this is the main advantage over schemes that key on absolute position.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What it proves, precisely<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is a zero-bit watermark. It encodes one bit of information: &#8220;the sampler that produced these word choices was holding Anthropic&#8217;s key.&#8221; It does not encode who you are, which conversation it came from, or which model. Anthropic&#8217;s post is explicit that &#8220;there&#8217;s nothing in the watermark, or its key, that would allow anyone to recover any information about the user, their organization, or their chats.&#8221;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It also, and this is the bit people keep getting wrong, does not distinguish <em>*authorship*<\/em> from <em>*processing*<\/em>. If you hand Claude your own paragraph and ask it to translate it, every output word is chosen by Claude, so the translation is fully watermarked. If you ask it to fix your commas, almost no words are chosen by Claude and the watermark has nothing to attach to. Anthropic&#8217;s framing: the detector can only answer &#8220;What is the likelihood this was partly written by Claude?&#8221;, and it cannot separate &#8220;Claude wrote this&#8221; from &#8220;Claude heavily edited this&#8221;. A positive result says Claude was in the pipeline somewhere; a negative result says nothing at all, because most of the world&#8217;s LLMs aren&#8217;t Claude and older Claude models aren&#8217;t watermarked yet either.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">So what does this mean for academia?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The assessment:<\/strong> The honest starting point is that the current generation of &#8220;AI detectors&#8221; used in universities are stylometric classifiers. They look at perplexity and burstiness, they have well-documented false-positive problems for non-native English writers, and several institutions have quietly stopped using them. A keyed watermark is a categorically different object. Its false-positive rate is a number you set, it does not care about your writing style, and the evidence it gives is a p-value rather than a vibe.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But look at what the test actually conditions on. It detects <em>Claude<\/em>, not <em>AI<\/em>. A student who uses a different model, an open-weights model on their laptop, or a Claude model from before August gets a clean result. A student who paraphrases Claude&#8217;s output through another model gets a clean result. A student who asks Claude to proofread a genuinely self-written essay gets a clean result, which is the outcome you&#8217;d want, while a student who writes a draft and asks Claude to &#8220;tighten this up&#8221; gets a partial signal that&#8217;s hard to interpret. So what a department could realistically do with the detection API, once it exists, is catch the laziest category of misuse (verbatim, long, high-entropy prose from the most recent Claude models) with very high confidence and essentially zero false accusations. That&#8217;s not nothing. The cases that cause the most damage to students are the false accusations, and this removes them for the subset it covers. It does not, though, give you a general &#8220;was this written by a human?&#8221; oracle, and any vendor who bundles the API into a product called &#8220;AI Detector&#8221; is selling the negative result as something it isn&#8217;t.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There&#8217;s also a governance question the announcement opens up rather than settles. The key is Anthropic&#8217;s. Detection goes through Anthropic. The EU Code of Practice is what forced this (Anthropic signed in July, with the watermark rolled out globally because, in their words, they &#8220;don&#8217;t yet have a durable way to scope it by region&#8221;), and the Code&#8217;s concern is disclosure of synthetic media, not academic integrity. Whether universities get access at all, at what rate limits, whether the results are auditable, whether students can run the check on their own work before submission: none of that is decided. My guess is that the short-term effect on assessment policy is small, and that the real lever remains what it was last year, which is designing assessment where using a model is either allowed and declared or genuinely unhelpful.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The literature:<\/strong> This is where I think it gets more interesting, and where I haven&#8217;t seen much discussion. Publishers have spent two years asking authors to declare LLM use with no way to check. For high-entropy prose (introductions, discussion sections, cover letters, reviewer reports) there is now, in principle, a key-holder who could check. A journal could ask Anthropic&#8217;s API whether a submitted manuscript is watermarked. So could a funder with a pile of grant applications, or a conference with a suspicious spike in reviews that all sound the same.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three consequences follow. The first is that the &#8220;processing, not authorship&#8221; point matters enormously here. Translation, the use case that non-native English speakers most legitimately depend on, is the one that watermarks most strongly. If editorial policies start treating a positive detection as evidence of undeclared ghost-writing, the people who get hurt are exactly the ones the stylometric detectors already hurt, just via a different mechanism. Any sane policy has to be &#8220;undeclared <em>drafting<\/em> is the issue&#8221;, and the watermark cannot tell you which one it&#8217;s looking at.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second is about the corpus itself. A persistent, keyed signal in a large fraction of newly written text is a tool that nobody in bibliometrics has had before. Anyone with key access could estimate what fraction of abstracts in a given journal, field, or year were Claude-touched. That&#8217;s a fascinating measurement and an obviously dangerous one if done per-author. Where the boundary sits is going to be fought over.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The third is methodological and closer to home for those of us who train models. Watermarked text is now entering the training data of the next generation of models, including our own fine-tunes on scraped literature. A SynthID-style watermark is designed to be invisible to the model&#8217;s own distribution, so in principle it is harmless to train on, but &#8220;in principle&#8221; is doing some work: a model trained heavily on Claude output will have learned a slight preference for high-<em>g<\/em> continuations under Anthropic&#8217;s key, which means the detector could light up, faintly, on text from a model that has never been near Anthropic&#8217;s servers. Whether that effect is measurable at realistic data mixtures is an open question, and a nice one for someone&#8217;s summer project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A few things I&#8217;d want to see before trusting it operationally<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The detector&#8217;s false-positive rate is a design parameter, but it&#8217;s a design parameter <em>*under the null of truly random g<\/em>-values. Real human text isn&#8217;t a random draw from Claude&#8217;s distribution; it has its own token statistics, and the hash of &#8220;the previous H tokens&#8221; is only pseudo-random if those tokens vary. Highly repetitive text (tables, boilerplate methods sections, citation lists) will produce repeated seeds, and repeated seeds produce correlated <em>g<\/em>&#8216;s and a broken variance estimate. SynthID deals with this by de-duplicating repeated windows before scoring, and I&#8217;d want to know Anthropic does too, and what the measured false-positive rate is on a realistic corpus of scientific writing rather than on web text.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;d also want to see the distortion numbers. Anthropic says there is &#8220;no impact of watermarking on the content, level of creativity, or readability&#8221;, which for the non-distortionary variant is true <em>in expectation across responses<\/em>, but tournament sampling with <em>m<\/em> layers and a fixed seed does reduce diversity within a single long response. For most use cases nobody will notice. For sampling-heavy scientific uses (generating many candidate sequences, say, and scoring them) it is at least worth measuring.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Finally: the key. Detection being an API run by the key-holder is fine as long as the key-holder is neutral, available, and around. Every sentence in that clause is an assumption.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The watermark is a change to the dice, not to the model. At each step, Claude draws a handful of candidate next tokens from its ordinary distribution and holds a small tournament between them, refereed by pseudo-random bits derived from a secret key and the previous few tokens. With the key you can replay the referee&#8217;s calls and test whether the text won its matches suspiciously often. The signal scales with length and with how much freedom the model had, which means it is strong for long creative prose, weak for short or factual text, nearly absent for code, and erased by a full rewrite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In my opinion, it is a good, precise tool for one narrow question (&#8220;was recent Claude in the loop here, at length?&#8221;) and a poor tool for the question everyone wants answered (&#8220;did a human write this?&#8221;). Treat it as a p-value with a specific null hypothesis, be careful about what that null is, and don&#8217;t let anyone tell you it&#8217;s a plagiarism detector.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sources<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; <a href=\"https:\/\/www.anthropic.com\/news\/claude-text-watermark\" data-type=\"link\" data-id=\"https:\/\/www.anthropic.com\/news\/claude-text-watermark\">How Claude&#8217;s text watermarking works \u2014 Anthropic<\/a> <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; <a href=\"https:\/\/techcrunch.com\/2026\/08\/11\/anthropic-says-it-will-watermark-text-generated-by-its-ai-models\/\" data-type=\"link\" data-id=\"https:\/\/techcrunch.com\/2026\/08\/11\/anthropic-says-it-will-watermark-text-generated-by-its-ai-models\/\">Anthropic says it will watermark text generated by its AI models \u2014 TechCrunch, 11 Aug 2026<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; <a href=\"https:\/\/techcrunch.com\/2026\/08\/15\/anthropic-shares-more-details-about-how-claudes-new-watermarks-will-work\/\" data-type=\"link\" data-id=\"https:\/\/techcrunch.com\/2026\/08\/15\/anthropic-shares-more-details-about-how-claudes-new-watermarks-will-work\/\">Anthropic shares more details about how Claude&#8217;s new watermarks will work \u2014 TechCrunch, 15 Aug 2026<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; <a href=\"https:\/\/www.searchenginejournal.com\/anthropic-reveals-what-the-watermark-is-and-how-it-can-be-defeated\/585930\/\" data-type=\"link\" data-id=\"https:\/\/www.searchenginejournal.com\/anthropic-reveals-what-the-watermark-is-and-how-it-can-be-defeated\/585930\/\">Anthropic reveals what the watermark is and how it can be defeated \u2014 Search Engine Journal<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&#8211; <a href=\"https:\/\/www.euronews.com\/next\/2026\/08\/11\/eu-compliance-delivered-globally-anthropic-to-watermark-claudes-output-worldwide\" data-type=\"link\" data-id=\"https:\/\/www.euronews.com\/next\/2026\/08\/11\/eu-compliance-delivered-globally-anthropic-to-watermark-claudes-output-worldwide\">EU compliance, delivered globally \u2014 Euronews<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>On 11 August Anthropic announced that every Claude model released after 2 August 2026 will watermark the text it produces. Not just in the chat app: the watermark lives at the model level, so it is there whether the text came through the API, Claude Code, Cowork, or anything else built on top. A follow-up [&hellip;]<\/p>\n","protected":false},"author":127,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","wikipediapreview_detectlinks":true,"_monsterinsights_skip_tracking":false,"ngg_post_thumbnail":0,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[633,915],"tags":[],"ppma_author":[810],"class_list":["post-14726","post","type-post","status-publish","format-standard","hentry","category-ai","category-llms"],"jetpack_sharing_enabled":true,"authors":[{"term_id":810,"user_id":127,"is_guest":0,"slug":"qurat_ul_ain","display_name":"Qurat Ul Ain","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/5d944f20580dcd92d39e5181dd1d503473b22b3674b6bca845ce79547918ccd1?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Ul Ain","first_name":"Qurat","job_title":"","description":""}],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/14726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/users\/127"}],"replies":[{"embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/comments?post=14726"}],"version-history":[{"count":5,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/14726\/revisions"}],"predecessor-version":[{"id":14786,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/posts\/14726\/revisions\/14786"}],"wp:attachment":[{"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/media?parent=14726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/categories?post=14726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/tags?post=14726"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.blopig.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=14726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}