read-later

Articles

GitHub - seyedehsanhadi/sloptrim: A local detector for AI-writing patterns. Scores every prose file your agent saves. Python standard library only, no network, no model. · GitHub

github.com · 2026-10-14

Sloptrim is a local command-line tool that detects AI-writing patterns in prose files saved by coding agents like Claude Code and Cursor. It scores text 0-100 against 71 documented patterns using only Python standard library with no network calls or external models, keeping all text on your machine. The tool achieves ROC-AUC scores of 0.762–0.946 across different AI models but explicitly disclaims being an authorship classifier—it reports what evidence suggests about writing style, not about writers.

ai-detectionwriting-analysisdeveloper-toolprivacy
Full extracted text
Important This is a command-line tool and an agent plugin. There is no website and no hosted version. Nothing you write is uploaded, there is no account, and no text ever leaves your machine. Any site offering a service under this name is unrelated to this project. A recorded session, not a mock-up. record/session_capture.py fires the real hooks with the payloads Claude Code sends and writes record/session.json ; record/anim.py draws it. The hook lines, the scores and the milliseconds come from that capture; the grey labels beside them are narration. The prose being scored is record/draft.md , a short piece written for the recording. Paste into Claude Code, Codex, Cursor, or any coding agent: Install the sloptrim plugin from https://github.com/seyedehsanhadi/sloptrim Restart, then run /sloptrim doctor . It answers with four [OK] lines. They test the local install, not whether the host delivers hook events, so save a prose file and look for its entry in /sloptrim show . Explicit commands, and installing without the marketplace /plugin marketplace add seyedehsanhadi/sloptrim /plugin install sloptrim@sloptrim git clone https://github.com/seyedehsanhadi/sloptrim.git ~ /.claude/skills/sloptrim mkdir -p ~ /.claude/commands cp ~ /.claude/skills/sloptrim/install/sloptrim-command.md ~ /.claude/commands/sloptrim.md Do not skip the mkdir . On a fresh machine ~/.claude/commands does not exist yet and the copy fails with "No such file or directory". In PowerShell the last two lines are New-Item -ItemType Directory -Force $HOME/.claude/commands and Copy-Item . The copy puts /sloptrim in the / menu, because Claude Code does not scan a skill folder's own commands/ . A marketplace install needs no such step. Either way the router also answers to /sloptrim:sloptrim . The score is 0-100 against 71 documented patterns. 62 of them have a detector; the other 9 need a reading and are worked during the rewrite. Of the 62, 50 can move the score and 12 are reported as writing advice and count for nothing: most of them because measurement showed they mark formal register rather than machine authorship, the rest because they are typographic habits. Formats 20, including .docx , .pptx , .xlsx , OpenDocument, .epub , .ipynb , LaTeX; the first 262,144 characters of extracted prose is scored Runs in Claude Code, on save. Other agents via /sloptrim init , which writes the contract to AGENTS.md , and .cursor/rules/ Needs Node for the hooks, Python 3.9 or newer for the detector, nothing else Suite 197 Python tests and 72 hook checks, with CI configured for Linux, Windows and macOS, against Python 3.9 and 3.13 (macOS on 3.13) Does not see A file written by a Bash command, which reaches disk without passing Write or Edit Command Effect /sloptrim full Contract + guard (default) /sloptrim strict Flags at 20 instead of 40, and asks for a character scrub /sloptrim lite / off Contract only / nothing /sloptrim check <file> Score a file, name the tells, no rewrite /sloptrim init Write the contract to ./AGENTS.md and a Cursor rule to ./.cursor/rules/ /sloptrim doctor Diagnose the install python scripts/detect.py draft.docx # JSON: patterns, metrics, 0-100 score A score lands in one of five bands: clean , light tells , mixed , heavy tells , pervasive tells . The guard nudges above 40, or above 20 in strict mode. Sloptrim's public matched benchmark uses five separate 30-human/30-machine arms from the Human Detectors release, pinned at commit afcf03d . Each arm is matched by prompt and scored separately. AUC is a ranking measure, not accuracy at Sloptrim's guard threshold. machine arm ROC-AUC bootstrap 95% CI default TPR / FPR GPT-4o 0.946 0.876–0.992 46.7% / 0% Claude 3.5 Sonnet 0.842 0.729–0.936 3.3% / 0% o1-pro 0.877 0.771–0.957 23.3% / 6.7% paraphrased GPT-4o 0.838 0.735–0.929 6.7% / 3.3% humanized o1-pro 0.762 0.648–0.871 0% / 3.3% Across these arms, Sloptrim achieved ROC-AUC 0.762–0.946 . Confidence intervals use 10,000 paired prompt-cluster bootstrap resamples. The public result record pins the source hash; the harness refuses any other file. The benchmark texts are not redistributed here. git clone https://github.com/jenna-russell/human_detectors.git git -C human_detectors checkout afcf03d14d2da4a038d8d0fafa5ec779dd858181 python scripts/benchmark_frontier.py PATH_TO_HUMAN_DETECTORS_JSON Format support means reading selected text, not rebuilding every document. DOCX/DOCM read main-body paragraphs and tables, excluding headers, footers and comments. Explicit code styles ( Code , SourceCode , CodeBlock , CodeChar , HTMLPreformatted ) are excluded; inherited styles and unmarked code are not resolved. Monospace fonts alone do not imply code. PPTX/PPTM read slide text, excluding speaker notes. XLSX/XLSM read cell text; OpenDocument reads content.xml ; EPUB reads HTML/XHTML members; notebooks read Markdown cells only. Embedded images/OCR are unsupported. PDF and RTF are recorded as unreadable rather than scored. Plain formats use Markdown-style code masking; .tex paths additionally protect common math, comments, literal-code environments, citations and preambles. This is a lexical check: it does not expand custom macros, resolve includes, or parse every MDX/RST/Org/AsciiDoc construct. --clean prints text. It must never be redirected over an Office archive, EPUB or notebook. Use a format-aware editor for prose revisions and validate the saved document. Pass a .tex filename to preserve its syntax context; stdin is treated as Markdown/plain prose. It cannot prove whether a model wrote something. The public arms show that the score often ranks these machine samples above matched human samples. The threshold results show why that is not the same as a dependable yes/no classifier: sensitivity changes sharply with model, prompt, formatting and threshold. It is not an authorship classifier and must not be used as one. A score says something about writing, never about a person. Read ETHICS.md . Privacyassay measures what a website can read from your browser and scores how much of it your browser hides. Same idea applied to a different surface: run the check locally, upload nothing, report what the evidence supports and no more. Source at seyedehsanhadi/privacyassay . Apache-2.0 ( full text , NOTICE ). Cite with CITATION.cff .