AI Text Watermark Audit
Local-first tools for examining invisible Unicode signals in text and tracking public AI text watermark claims. The first research target is Claude; the scanner itself is provider-neutral.
简体中文 · Claude watermark notes · Methodology · FAQ · Examples
Search phrases this project is designed to answer honestly: Claude watermark detection, AI text watermark audit, invisible Unicode scanner, hidden character detector, LLM watermark claims, and text forensics for generated text.
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 ai-text-watermark-audit
Or with pip:
python -m pip install ai-text-watermark-audit
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
Try the demo fixtures:
git clone https://github.com/steven-panxd/ai-text-watermark-audit.git
cd ai-text-watermark-audit
textmark scan examples/hidden-zero-width.txt
textmark compare examples/clean.txt examples/hidden-zero-width.txt
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
- Copy-paste demo corpus for common hidden-character cases
- 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.
Metadata
Release files for ai-text-watermark-audit 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ai_text_watermark_audit-0.1.1.tar.gz | 9.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ai_text_watermark_audit-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 20.1 kB
Release files / ai_text_watermark_audit-0.1.1.tar.gz
| Download URL | ai_text_watermark_audit-0.1.1.tar.gz |
|---|---|
| Size | 9.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c1101683855cd871e6b9e5a9071aa3fdebae46de88794070284d367a993e525a
|
|
BLAKE2b-256 checksum How to use checksums |
1cdc939c02374e31770e283accca3f825460a2e08298ba116dc5850e2cf7db51
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency logRelease files / ai_text_watermark_audit-0.1.1-py3-none-any.whl
| Download URL | ai_text_watermark_audit-0.1.1-py3-none-any.whl |
|---|---|
| Size | 10.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
5a4ceab4b1250ee937b0a9e4378703bd5f86f9c45720d2fc3f54d9bd97f794f6
|
|
BLAKE2b-256 checksum How to use checksums |
a4041fba55cf9488f8b50ea82179a8265d3b81d470bef897e7f11c72e419e413
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 16, 2026.
Transparency log