The project's README from github.com/mikiane/claude-watermark-cleaner. As one markdown file: README.md.
Projet expérimental et critique : ce dépôt cherche à démontrer qu'un watermark statistique appliqué au texte est contournable et risque surtout de provoquer davantage de calcul, de coût et de consommation énergétique.
Ce projet défend une thèse assumée : imposer un watermark statistique à du texte généré est une contrainte techniquement absurde. Une marque que l'on peut affaiblir en reformulant le texte ne constitue pas une preuve fiable de son origine. Elle crée en revanche une forte incitation à effectuer une seconde passe avec une autre IA.
Le résultat prévisible est contre-productif :
Autrement dit, la contrainte européenne risque d'obtenir l'inverse de l'effet recherché : elle ne supprimera pas les usages que ses utilisateurs veulent dissimuler, mais fera exploser les usages d'IA destinés à contourner la marque. Ce dépôt matérialise cette critique avec un outil volontairement simple.
La nouvelle marque annoncée par Anthropic n'est pas décrite comme une simple suite de caractères Unicode cachés. Elle est appliquée pendant la génération, au niveau du modèle, puis voyage avec le texte lors d'un copier-coller. La documentation technique du détecteur n'est pas encore publiée.
La méthode exacte n'est donc pas publiquement vérifiable à ce jour. L'hypothèse technique la plus crédible est une signature statistique : le modèle favorise légèrement certains tokens parmi plusieurs choix valides, et le détecteur mesure ce biais sur un passage suffisamment long. Il s'agit ici d'une inférence, pas d'un détail confirmé par Anthropic. Elle correspond toutefois au fonctionnement publié de systèmes comparables comme SynthID Text. Dans ce cas :
Sources :
clean_claude_watermark.py réalise deux étapes :
Le script protège les blocs de code, le code en ligne, les URL et les variables. Il refuse également une sortie si un nombre a changé. Il fonctionne uniquement avec la bibliothèque standard de Python.
L'outil utilise actuellement Ollama et Codex :
Ollama n'injecte actuellement pas de watermark par lui-même. Le comportement exact dépend néanmoins du modèle chargé. Codex est un fallback pratique, mais un service distant pourrait toujours faire évoluer sa politique de marquage.
Si Ollama, Codex ou les modèles utilisés ajoutent un watermark à l'avenir, le projet basculera vers un modèle open source dont la chaîne de génération est auditable et pour lequel le watermarking peut être explicitement désactivé. Pour une démonstration sans dépendance à un fournisseur distant, le mode Ollama avec un modèle open source est donc recommandé.
Traiter un fichier :
python3 clean_claude_watermark.py texte.md -o texte-nettoye.md
Traiter directement le presse-papiers macOS :
python3 clean_claude_watermark.py --clipboard
Utiliser explicitement un modèle Ollama local :
python3 clean_claude_watermark.py texte.md -o texte-nettoye.md \
--engine ollama --model qwen3:8b
Le mode par défaut effectue jusqu'à deux tentatives et conserve la plus forte. Il s'arrête après la première si au moins 70 % des séquences de cinq tokens ont déjà été perturbées. Pour limiter le traitement à une tentative :
python3 clean_claude_watermark.py texte.md -o texte-nettoye.md --passes 1
Ne retirer que d'éventuels caractères invisibles, sans reformuler :
python3 clean_claude_watermark.py texte.md -o texte-normalise.md --engine clean
Le script affiche sur la sortie d'erreur le moteur utilisé, le nombre de caractères invisibles retirés et le taux de variation lexicale. Une variation des séquences de cinq tokens inférieure à 60 % déclenche un avertissement.
Le projet n'utilise aucune dépendance Python externe. La suite de tests se lance avec :
python3 -m unittest discover -s tests -v
Cet outil n'affirme pas qu'un texte réécrit devient humain. Il montre qu'un watermark probabiliste n'est pas un mécanisme robuste de preuve ou d'attribution face à un utilisateur motivé. La provenance utile devrait reposer sur des mécanismes explicites, vérifiables et proportionnés, pas sur une contrainte qui pousse mécaniquement à consommer une seconde inférence.