AI Text Watermark Audit
Local-first tools for examining invisible signals in text and testing claims about AI text watermarks. The first research target is Claude; the scanner itself is provider-neutral.
简体中文 · Claude watermark notes · Methodology · FAQ
Why this exists
Anthropic says supported Claude models embed an imperceptible watermark in generated text. It has not yet published the technical detector required to verify that statistical signal. This project keeps two questions separate:
- Does a document contain observable Unicode or formatting signals?
- Does an official detector verify a provider watermark?
Today, textmark can answer the first question. For Claude's model-level watermark, it reports the public evidence and an honest not-publicly-documented detector status instead of guessing.
Install
Python 3.10 or newer is required.
pipx install git+https://github.com/steven-panxd/ai-text-watermark-audit.git
For development:
git clone https://github.com/steven-panxd/ai-text-watermark-audit.git
cd ai-text-watermark-audit
python -m pip install -e .
Use
Scan a UTF-8 file:
textmark scan draft.txt
Produce JSON and fail CI on warning-level findings:
textmark scan draft.txt --json --fail-on warning
Compare two versions:
textmark compare original.txt edited.txt --json
Show sourced vendor claims and detector availability:
textmark claims
The scanner currently reports:
- zero-width and format characters;
- bidirectional text controls;
- Unicode tag characters;
- unusual spaces and variation selectors;
- mixed Latin/Cyrillic or Latin/Greek tokens;
- exact positions, Unicode names, escaped values, and SHA-256 hashes.
It runs locally, has no runtime dependencies, and does not upload text.
What a finding means
A hidden character is not proof that text was generated by AI. Many invisible characters have legitimate uses in typography, emoji, and non-Latin writing systems. Conversely, a clean scan does not prove human authorship and does not rule out a statistical watermark.
The report is forensic input, not an authorship verdict.
Current Claude status
As of 14 August 2026:
- Anthropic says Claude models launched on or after 2 August 2026 support machine-readable marking at launch.
- It says older models are being updated.
- Marking applies worldwide on supported models.
- Anthropic has not yet published technical documentation for third-party detection.
Primary source: How Claude marks AI-generated content.
Roadmap
- A stable detector-adapter interface for official vendor tools
- Corpus manifests and reproducible robustness runs
- File provenance inspection for supported formats
- Exportable Markdown and SARIF reports
- Multilingual false-positive fixtures
Development
python -m unittest discover -s tests -v
See CONTRIBUTING.md before proposing a detector or vendor claim. Security-sensitive findings should follow SECURITY.md.
License
MIT. This project is independent and is not affiliated with Anthropic or other model providers.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ai_text_watermark_audit-0.1.0.tar.gz.
File metadata
- Download URL: ai_text_watermark_audit-0.1.0.tar.gz
- Upload date:
- Size: 9.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2efad380e140ee2e3ec2b59fd9a424234180638abad82b5da3f6bdf4becceadf
|
|
| MD5 |
1a96884d45adef277b13d7cda89cb8a3
|
|
| BLAKE2b-256 |
643fc8f511a5e7b83f4f11a5bb48030a43abf840eaafd9fd8e21446276cf5cd6
|
Provenance
The following attestation bundles were made for ai_text_watermark_audit-0.1.0.tar.gz:
Publisher:
release.yml on steven-panxd/ai-text-watermark-audit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_text_watermark_audit-0.1.0.tar.gz -
Subject digest:
2efad380e140ee2e3ec2b59fd9a424234180638abad82b5da3f6bdf4becceadf - Sigstore transparency entry: 2485162554
- Sigstore integration time:
-
Permalink:
steven-panxd/ai-text-watermark-audit@8cc87363b7f086fcea36027e66b06f8aeb4a59fb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/steven-panxd
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8cc87363b7f086fcea36027e66b06f8aeb4a59fb -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file ai_text_watermark_audit-0.1.0-py3-none-any.whl.
File metadata
- Download URL: ai_text_watermark_audit-0.1.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
26efd3da19a6cd2cb10922ad093db602a91cc3c27332516ec860569754144d93
|
|
| MD5 |
5b112e99756ae09f6b9b702e0fcc9355
|
|
| BLAKE2b-256 |
21ab891e94a2d6786f6b21735de02ae1263e8d52cf078d1208763125bfacb217
|
Provenance
The following attestation bundles were made for ai_text_watermark_audit-0.1.0-py3-none-any.whl:
Publisher:
release.yml on steven-panxd/ai-text-watermark-audit
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ai_text_watermark_audit-0.1.0-py3-none-any.whl -
Subject digest:
26efd3da19a6cd2cb10922ad093db602a91cc3c27332516ec860569754144d93 - Sigstore transparency entry: 2485162831
- Sigstore integration time:
-
Permalink:
steven-panxd/ai-text-watermark-audit@8cc87363b7f086fcea36027e66b06f8aeb4a59fb -
Branch / Tag:
refs/heads/main - Owner: https://github.com/steven-panxd
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@8cc87363b7f086fcea36027e66b06f8aeb4a59fb -
Trigger Event:
workflow_dispatch
-
Statement type: