Multi-model AI writing style detector
Project description
Claudiness
A CLI tool that detects AI writing patterns in text. Scores how closely a piece of writing matches the stylistic fingerprint of Claude, ChatGPT, Grok, or any AI model with a .style definition.
Unlike AI detectors that use machine learning (and frequently get it wrong), claudiness uses pattern matching against specific, documented markers that readers associate with AI-generated text. It tells you what people will think looks like AI, not whether AI actually wrote it.
Install
pipx install claudiness
Or with pip:
pip install claudiness
Usage
# Score a file against all known models
claudiness essay.txt
# Score against a specific model
claudiness essay.txt --model claude
claudiness essay.txt -claude # shorthand
# Inline text
claudiness --text "That's a great question. I think..."
# Pipe from stdin
echo "some text" | claudiness
# See which patterns matched
claudiness essay.txt --verbose
# Machine-readable output
claudiness essay.txt --json
claudiness essay.txt --score-only
Interpreting scores
- 0-30: Natural sounding, low AI fingerprint
- 31-60: Some AI patterns detected, may warrant editing
- 61-100: Strong AI writing patterns, should be rewritten
Use --verbose to see exactly which patterns triggered and rewrite those specific phrases.
What it detects
Each model has a .style file defining its fingerprint across categories like:
- Hedging - "it's worth noting", "it's important to consider"
- Balance markers - "on the other hand", "while...also"
- Vocabulary - model-specific word choices ("delve", "tapestry", "straightforward")
- Structural patterns - bullet ratio, em-dash frequency, parenthetical asides
- Safety disclaimers - "I should note", "it's important to remember"
- Penalties - patterns associated with other models reduce the score
Scores are normalized per 500 words and capped per category so no single pattern type dominates.
Bundled models
- Claude (Anthropic) - 7 categories
- ChatGPT (OpenAI) - 6 categories
- Grok (xAI) - 6 categories
Custom styles
Add your own .style files to:
~/.config/claudiness/styles/- user-wide./.claudiness/styles/- project-local
Or point to a directory:
claudiness essay.txt --style-dir /path/to/styles
See the bundled .style files in src/claudiness/styles/ for the format.
Updating style definitions
Style fingerprints can be refreshed from the web:
# Requires: pip install claudiness[fetch]
claudiness fetch # Update all models
claudiness fetch --model claude # Update one model
claudiness fetch --search # Search for new sources
List available models
claudiness list-models
No dependencies
Core functionality uses only the Python standard library. The fetch subcommand optionally requires requests:
pip install claudiness[fetch]
License
MIT
Project details
Release history Release notifications | RSS feed
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 claudiness-2.0.1.tar.gz.
File metadata
- Download URL: claudiness-2.0.1.tar.gz
- Upload date:
- Size: 20.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
952dc22a509094daf36c73bb86612350cd97a533f82275096fdd372a8274f52f
|
|
| MD5 |
b6d03da512af6fda0e8e54df1793ccd2
|
|
| BLAKE2b-256 |
6e737bc1f7c9e27ba213b2af437187ae1b4a40bf3b78ca785e9a28ab3a08edd7
|
Provenance
The following attestation bundles were made for claudiness-2.0.1.tar.gz:
Publisher:
publish.yml on DavidRickmann/Claudiness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claudiness-2.0.1.tar.gz -
Subject digest:
952dc22a509094daf36c73bb86612350cd97a533f82275096fdd372a8274f52f - Sigstore transparency entry: 1132653131
- Sigstore integration time:
-
Permalink:
DavidRickmann/Claudiness@28cf06502c73031dddd3262c7c5223ba6bbc2235 -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/DavidRickmann
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@28cf06502c73031dddd3262c7c5223ba6bbc2235 -
Trigger Event:
push
-
Statement type:
File details
Details for the file claudiness-2.0.1-py3-none-any.whl.
File metadata
- Download URL: claudiness-2.0.1-py3-none-any.whl
- Upload date:
- Size: 22.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5fd315f4eccf6151a4f17224a776ae3e2c60d2e30de008383dcfb07d8ca2dd91
|
|
| MD5 |
9762b184ea4db1da276bb483ebbb0a04
|
|
| BLAKE2b-256 |
5a03e34780b7e8af15804f311f29c8c23b7c0a5ecb025e8dff863449412da465
|
Provenance
The following attestation bundles were made for claudiness-2.0.1-py3-none-any.whl:
Publisher:
publish.yml on DavidRickmann/Claudiness
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
claudiness-2.0.1-py3-none-any.whl -
Subject digest:
5fd315f4eccf6151a4f17224a776ae3e2c60d2e30de008383dcfb07d8ca2dd91 - Sigstore transparency entry: 1132653254
- Sigstore integration time:
-
Permalink:
DavidRickmann/Claudiness@28cf06502c73031dddd3262c7c5223ba6bbc2235 -
Branch / Tag:
refs/tags/v2.0.1 - Owner: https://github.com/DavidRickmann
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@28cf06502c73031dddd3262c7c5223ba6bbc2235 -
Trigger Event:
push
-
Statement type: