6

Pitch: no-watermark: seu texto pode ja estar marcado, um jeito de checar

A Anthropic confirmou: o Claude agora embute um watermark imperceptivel direto no texto que gera. Segundo o proprio artigo do help center deles, "voce nao vai ver, e isso nao muda o sentido, qualidade ou legibilidade". A marca sobrevive a copiar e colar, e cobre o app do Claude, Claude Code, Claude Cowork, Claude Tag, a API, e as integracoes com AWS, Google Cloud e Microsoft Foundry, no mundo todo. Arquivos ganham metadata de proveniencia assinada no padrao C2PA. O motivo e a Anthropic ter assinado o Article 50(2) do EU AI Act, o Code of Practice on Transparency of AI-Generated Content. Modelos lancados a partir de 2 de agosto de 2026 ja saem com isso ativo, e modelos anteriores estao recebendo a marca aos poucos.

Vale separar os dois mecanismos. O watermark que a Anthropic descreve e estatistico: vies na escolha de token durante a geracao (linha SynthID-Text, do Google), sem nenhum caractere extra no texto ΓÇö o no-watermark nao toca nesse tipo de marca (ver "O que ele nao faz" mais abaixo).

Watermark por caractere invisivel e outra tecnica, mais antiga, que ainda circula bastante em texto de IA de varias origens: zero-width space, zero-width joiner, variation selectors, encoding em tag-block, controles de bidi, espacos Unicode fora do padrao. Nada disso aparece na tela. Tudo isso sobrevive quando voce cola o texto num documento, numa descricao de PR, num email pro cliente.

Escrevi o no-watermark pra inspecionar e remover essa camada via normalizacao deterministica de caracteres, sem modelo nenhum tentando adivinhar padrao.

O que ele remove

  • Caracteres de formatacao: zero-width space/joiner/non-joiner, word joiner, BOM, controles bidi
  • Variation selectors (U+FE00-FE0F, U+E0100-E01EF)
  • Tag block (U+E0000-E007F)
  • Espacos anomalos: as 16 variantes nao-ASCII da categoria Unicode "Zs", normalizadas pra espaco comum
  • Variantes de quebra de linha: NEL, LINE SEPARATOR, PARAGRAPH SEPARATOR, convertidas pra newline
  • Soft hyphen, Mongolian vowel separator, combining grapheme joiner

Alem da camada de caracteres invisiveis, ele tambem ataca tells estilisticos que denunciam texto de IA pra detectores: travessao em excesso, estrutura formulaica.

Guarda de seguranca

Zero-width joiner tambem e o mecanismo por tras de sequencias legitimas de emoji (familia, casal, bandeira), e ZWNJ tem uso linguistico real em scripts indicos. Os dois ficam preservados por padrao. Da pra passar --no-emoji-guard se quiser remocao incondicional.

O que ele nao faz

A propria Anthropic admite que a marca deles nao prova autoria, so sinaliza que o texto "pode ter passado pelo Claude", e some com edicao pesada, paráfrase ou traducao. Minha ferramenta tem um limite parecido: watermarking estatistico por distribuicao de tokens, tipo green/red list do Kirchenbauer, fica fora do escopo. Esse tipo de marca nao e um conjunto de caracteres extras, e um vies em qual token foi escolhido durante a geracao, e remover isso exige parafrasear o texto, nao normalizar caractere.

Uso

pip install -e .

nowatermark detect suspeito.txt
nowatermark clean suspeito.txt -o limpo.txt --report
echo "texto" | nowatermark clean -

Python, testado com pytest, licenca MIT. Tem uma skill do Claude Code junto, pra rodar deteccao direto de dentro de uma conversa e ver o que realmente ta embutido no texto que voce ta usando.

Ta em estagio inicial, funcional, e o cenario de marcacao invisivel acabou de ficar bem mais comum. Repo em https://github.com/obrenoalvim/no-watermark, issues e PRs sao bem-vindas. Ja checou o que pode estar escondido no texto que voce copiou de uma IA recentemente?

Ps.: Desenvolvo o BloodLink, plataforma gratuita que conecta doadores de sangue a campanhas de doacao. Se quiser conhecer, vale a visita.

Carregando publicação patrocinada...
1

Esse artigo não está de todo errado.
Watermark com caracteres invisível, control codes, etc, pode ser usado por IAs.

O que seu artigo erra é entender que esse mecanismo é o que foi adotado pela Anthropic, coisa que a própria já afirma que não fez.

Em uma postagem que eu li dias atrás, foi explicado que não há nada no texto que foi adicionado, como afirma a própria Anthropic, e realmente, uma vez que você lê o artigo, entende como foi possível codificar uma watermark que não existe no texto.

Então é isso, seu post tem alguma serventia didática, mas está errado na solução adota pela Anthropic baseada na tecnologia que o Google criou.

0

Pedi ao ChatGPT para ler a explicação da Anthropic e formar uma explicação.
https://www.anthropic.com/news/claude-text-watermark

O “watermark” descrito pela Anthropic é bem diferente da marca d’água que conhecemos em imagens. Não existe uma palavra escondida, um código invisível ou caracteres especiais inseridos no texto.

O que existe é um padrão estatístico nas escolhas das palavras feitas pelo modelo durante a geração.

Uma forma simples de entender é esta.

Imagine que o Claude esteja escrevendo:

“O dia estava frio e ______.”

Ele pode considerar várias continuações igualmente boas, como “nublado”, “cinzento”, “úmido” etc. Normalmente, modelos de linguagem atribuem probabilidades às possíveis continuações e fazem uma escolha com algum grau de aleatoriedade.

Com o watermark, essa escolha continua parecendo normal, porém uma chave secreta participa do mecanismo que determina qual das alternativas aceitáveis será escolhida. O resultado poderia ser:

Sem watermark:

O dia estava frio e cinzento.

Com watermark:

O dia estava frio e nublado.

As duas frases são perfeitamente normais. Um ser humano olhando para elas não consegue saber qual contém watermark.

O segredo está na repetição

Uma única escolha como “cinzento” versus “nublado” não significa praticamente nada.

Porém, em um texto com centenas ou milhares de palavras, o Claude faz muitas dessas pequenas escolhas.

De forma simplificada:

O modelo chega a um ponto em que existem várias palavras aceitáveis.
A chave do watermark, combinada com algumas palavras anteriores, gera uma espécie de número pseudoaleatório.
Esse número influencia qual candidato será escolhido.
Isso acontece repetidamente ao longo do texto.
Quando alguém posteriormente analisa o texto usando a mesma chave, consegue verificar se essas escolhas apresentam o padrão esperado.

Portanto, poderíamos imaginar um texto assim:

Hoje fui ao mercado e percebi que o movimento estava grande. Depois resolvi voltar para casa porque o tempo estava nublado.

Talvez, sem watermark, as escolhas fossem:

Hoje passei no mercado e percebi que o movimento estava intenso. Depois resolvi retornar para casa porque o tempo estava cinzento.

Não são necessariamente essas palavras específicas que o sistema usa; estou apenas ilustrando o princípio. O padrão real ocorre no nível dos tokens, as unidades que o modelo utiliza para gerar texto. O SynthID-Text modifica justamente o processo de seleção do próximo token.

Uma analogia ainda melhor

Imagine que eu lhe diga para jogar uma moeda 500 vezes.

Uma moeda comum deveria produzir algo próximo de:

cara, coroa, cara, cara, coroa, coroa...

Agora imagine que eu tenha uma regra secreta que influencia levemente alguns resultados, sem produzir algo obviamente artificial.

Para você, a sequência continua parecendo aleatória.

Mas eu, conhecendo a regra secreta, consigo olhar para as 500 jogadas e perguntar:

“Essa sequência combina muito mais com minha regra secreta do que seria esperado por puro acaso?”

Se a resposta estatística for muito forte, posso concluir:

“Existe uma grande probabilidade de que essa sequência tenha sido produzida usando minha regra.”

É basicamente isso que acontece com as palavras.

A própria Anthropic usa uma analogia semelhante: em vez de lançar dados num jogo, os números poderiam ser retirados de uma sequência previamente determinada, como os dígitos de π. Para quem joga, o resultado continua parecendo aleatório; quem conhece a regra consegue posteriormente reconhecer o padrão.

Isso também explica uma coisa importante: o detector não procura uma “assinatura”

Ele não faz algo como:

procurar X7F92-CLAUDE-2026

porque isso simplesmente não está dentro do texto.

Ele pega o texto e, conhecendo a chave secreta, recalcula como aquelas escolhas deveriam se comportar. Depois atribui uma pontuação estatística ao conjunto. O artigo técnico do SynthID-Text descreve exatamente esse processo: a detecção mede a correlação entre os tokens encontrados e os valores que seriam esperados segundo a chave do watermark.

Por isso o resultado é do tipo:

“Este texto tem alta probabilidade de ter sido produzido com o watermark do Claude.”

e não:

“Temos prova absoluta de que Claude escreveu este texto.”

A própria Anthropic enfatiza essa limitação.

E se eu copiar e colar o texto?

O watermark continua lá.

Copiar do Claude para Word, e-mail, site, bloco de notas ou PDF não o elimina, porque a marca está no padrão das palavras escolhidas, e não na formatação ou nos metadados.

Por exemplo:

Claude → copiar → Notepad → copiar → Word → publicar na internet

Se as palavras permanecerem essencialmente iguais, o padrão estatístico permanece.

E se eu alterar algumas palavras?

Uma pequena edição provavelmente enfraquece o sinal, porém pode continuar existindo informação suficiente para detectá-lo.

Se você alterar profundamente o texto ou pedir que outro modelo o reescreva integralmente, o padrão pode desaparecer. A Anthropic afirma explicitamente que pequenas edições provavelmente não removem completamente a marca, enquanto uma reescrita integral pode removê-la.

Isso ocorre porque você começa a destruir aquelas centenas de pequenas decisões que formavam o padrão.

Textos pequenos são um problema

Considere:

“Obrigado pela informação. Até amanhã.”

São poucas palavras e poucas decisões.

Não existe informação estatística suficiente para o detector ter muita confiança.

Em um texto de várias páginas, existem muito mais decisões e, consequentemente, muito mais evidências. A Anthropic diz que a confiança da detecção aumenta conforme o trecho fica maior.

E textos muito objetivos?

Também são mais difíceis de marcar.

Por exemplo:

“2 + 2 = 4.”

O modelo praticamente não tem escolha.

Ele não poderia colocar:

“2 + 2 = 5”

apenas para fortalecer a marca d’água.

O mesmo acontece com nomes próprios, fatos muito específicos e vários trechos de código. Nessas situações existem menos escolhas equivalentes e, portanto, menos oportunidades para introduzir o padrão estatístico.

Essa é também a razão pela qual revisar um texto humano pode deixar pouco watermark. Se você escrever 2.000 palavras e pedir ao Claude apenas para corrigir três erros gramaticais, quase todas as decisões continuam sendo suas. Há muito pouco material gerado pelo Claude no qual o watermark possa aparecer.

O ponto mais importante

Portanto, pense no watermark do Claude assim:

O texto não contém uma mensagem escondida.

Ele contém uma impressão digital estatística criada pela maneira como o modelo escolheu entre palavras igualmente aceitáveis.

Um leitor não vê nada.

Um editor de texto não vê nada.

Copiar e colar não revela nada.

Mas quem possui a chave utilizada pelo sistema consegue analisar centenas de escolhas e verificar se elas obedecem ao padrão esperado.

E há uma consequência interessante: o watermark não identifica você. Segundo a Anthropic, ele não contém usuário, organização, conversa, conta ou qualquer identificador pessoal. Ele serve para indicar que Claude provavelmente participou da produção daquele conteúdo, e a empresa anunciou que disponibilizará uma API específica para essa verificação.

Então para remover a watermark, deve-se fazer várias trocas de palavras, só assim diminui-se o score do texto como sendo produzido por IA.

1

Voce tem razao no ponto tecnico. Watermark da Anthropic nao insere caractere nenhum, e vies estatistico na escolha de token durante a geracao (linha SynthID-Text, do Google DeepMind). Nada de zero-width, nada de tag block.

O README do no-watermark ja marca isso fora de escopo, na secao "O que ele nao faz": cito Kirchenbauer explicitamente e explico que esse tipo de marca exige parafrasear, nao normalizar Unicode.

O post confundiu os dois assuntos na abertura. Vou corrigir isso.