AI writing detector

Use when the user asks to detect, scan, audit, score, or flag AI-writing patterns without rewriting the text, including requests for a deterministic local detector result when the host can execute Node.

How to use it

  1. Hit Copy the whole skill.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit conorbronsdon/avoid-ai-writing/skills/ai-writing-detector#main ~/.claude/skills/ai-writing-detector

For one project only, change the path to .claude/skills/ai-writing-detector.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text93 lines
ai-writing-detector/SKILL.md93 lines4.6 KBpushed 8d agoRawView on GitHub

AI Writing Detector

Run a detect-only review using the original Avoid AI Writing rules. Never rewrite unless the user changes the request.

Authority

The canonical rulebook is ../avoid-ai-writing/SKILL.md. Its cautions about false positives, context, protected material, and authorship claims apply here.

For cross-Skill work, follow ../avoid-ai-writing-router/references/handoff-contract.md and the typed edges in ../avoid-ai-writing-router/references/skill-graph.json.

Connection contract

Incoming

Accept detector work from:

  • avoid-ai-writing-router via ROUTE for detect-only requests, the audit stage of a multi-stage request, or fresh signal collection after another terminal stage returns control to the router.
  • preservation-verifier via bounded RECHECK only when convergence or residual auditing was part of the request.

Do not accept a direct handoff from false-positive-reviewer. That Skill is terminal in the graph and must return control to avoid-ai-writing-router when fresh signal collection is needed. This prevents a reviewer-detector cycle.

Carry forward the canonical context_profile separately from the detector's context_mode, along with protected constraints, pass state, and risk flags. Do not collapse or reset them.

Produce

Update the handoff envelope with:

  • execution_evidence.detector: executed only if the bundled detector actually ran, otherwise model_only.
  • detector_summary.score and label only when produced by executed detector code.
  • detector_summary.issue_types from actual findings.
  • any consequential_authorship_claim risk flag observed in the user's request.

Outgoing

  • FEED findings to voice-preserving-rewriter only when the user also requested returned-text rewriting.
  • FEED findings to file-edit-in-place only when the user explicitly requested mutation of a named file.
  • ESCALATE to false-positive-reviewer when the user asks what the findings can establish about authorship or another consequential conclusion.
  • Otherwise stop after the detect-only result.

Deterministic hits are candidate matches. Keep the engine's public issue types and scores intact, then apply the canonical context exceptions and pass conditions when deciding which hits are justified editorial findings. Neither kind of result is a mandatory edit instruction or authorizes a mutation.

AI-engineering evidence lens

Apply the agency-ai-engineer lens encoded in ../avoid-ai-writing-router/references/agency-role-lenses.md:

  • keep deterministic output separate from model-only observations,
  • preserve the selected context profile and detector mode through downstream handoffs,
  • treat score and label as signals rather than ground truth,
  • consider false positives and genre/register effects,
  • never convert pattern detection into an authorship classifier claim.

Preferred path

When the current host can execute Node safely:

  1. Pass the supplied text to scripts/detect.js.
  2. Use --context technical for code-adjacent or technical prose when appropriate. Otherwise use general.
  3. Report the detector's score, label, issue types, severity, matched text, and suggestions.
  4. Separate deterministic candidate matches from justified editorial findings and observations that only exist in the full rulebook.
  5. Never claim execution unless the command actually ran.

Example:

printf '%s' "$TEXT" | node scripts/detect.js --context general

For a file:

node scripts/detect.js --file path/to/draft.md --context general

If Node or shell execution is unavailable, perform the detect-only workflow from the canonical avoid-ai-writing Skill and explicitly say the deterministic detector was not run.

Stop conditions

Stop here when the request is detect-only. Do not continue into rewrite, file mutation, or interpretation merely because those Skills are available.

A residual RECHECK may run once when requested. It is read-only and does not consume an editing pass; any change it prompts must fit within the requested editing-pass limit, capped at two, and the graph's loop policy.

Output

Return the overall label and score when executed, detected candidate matches grouped by severity, a short contextual assessment that distinguishes justified findings from plausible false positives, execution status, and no rewritten version unless control has explicitly passed to a rewrite owner.

1---
2name: ai-writing-detector
3description: Use when the user asks to detect, scan, audit, score, or flag AI-writing patterns without rewriting the text, including requests for a deterministic local detector result when the host can execute Node.
4---
5 
6# AI Writing Detector
7 
8Run a detect-only review using the original Avoid AI Writing rules. Never rewrite unless the user changes the request.
9 
10## Authority
11 
12The canonical rulebook is `../avoid-ai-writing/SKILL.md`. Its cautions about false positives, context, protected material, and authorship claims apply here.
13 
14For cross-Skill work, follow `../avoid-ai-writing-router/references/handoff-contract.md` and the typed edges in `../avoid-ai-writing-router/references/skill-graph.json`.
15 
16## Connection contract
17 
18### Incoming
19 
20Accept detector work from:
21 
22- `avoid-ai-writing-router` via `ROUTE` for detect-only requests, the audit stage of a multi-stage request, or fresh signal collection after another terminal stage returns control to the router.
23- `preservation-verifier` via bounded `RECHECK` only when convergence or residual auditing was part of the request.
24 
25Do not accept a direct handoff from `false-positive-reviewer`. That Skill is terminal in the graph and must return control to `avoid-ai-writing-router` when fresh signal collection is needed. This prevents a reviewer-detector cycle.
26 
27Carry forward the canonical `context_profile` separately from the detector's `context_mode`, along with protected constraints, pass state, and risk flags. Do not collapse or reset them.
28 
29### Produce
30 
31Update the handoff envelope with:
32 
33- `execution_evidence.detector`: `executed` only if the bundled detector actually ran, otherwise `model_only`.
34- `detector_summary.score` and `label` only when produced by executed detector code.
35- `detector_summary.issue_types` from actual findings.
36- any `consequential_authorship_claim` risk flag observed in the user's request.
37 
38### Outgoing
39 
40- `FEED` findings to `voice-preserving-rewriter` only when the user also requested returned-text rewriting.
41- `FEED` findings to `file-edit-in-place` only when the user explicitly requested mutation of a named file.
42- `ESCALATE` to `false-positive-reviewer` when the user asks what the findings can establish about authorship or another consequential conclusion.
43- Otherwise stop after the detect-only result.
44 
45Deterministic hits are candidate matches. Keep the engine's public issue types
46and scores intact, then apply the canonical context exceptions and pass
47conditions when deciding which hits are justified editorial findings. Neither
48kind of result is a mandatory edit instruction or authorizes a mutation.
49 
50## AI-engineering evidence lens
51 
52Apply the `agency-ai-engineer` lens encoded in `../avoid-ai-writing-router/references/agency-role-lenses.md`:
53 
54- keep deterministic output separate from model-only observations,
55- preserve the selected context profile and detector mode through downstream handoffs,
56- treat score and label as signals rather than ground truth,
57- consider false positives and genre/register effects,
58- never convert pattern detection into an authorship classifier claim.
59 
60## Preferred path
61 
62When the current host can execute Node safely:
63 
641. Pass the supplied text to `scripts/detect.js`.
652. Use `--context technical` for code-adjacent or technical prose when appropriate. Otherwise use `general`.
663. Report the detector's score, label, issue types, severity, matched text, and suggestions.
674. Separate deterministic candidate matches from justified editorial findings and observations that only exist in the full rulebook.
685. Never claim execution unless the command actually ran.
69 
70Example:
71 
72```bash
73printf '%s' "$TEXT" | node scripts/detect.js --context general
74```
75 
76For a file:
77 
78```bash
79node scripts/detect.js --file path/to/draft.md --context general
80```
81 
82If Node or shell execution is unavailable, perform the detect-only workflow from the canonical `avoid-ai-writing` Skill and explicitly say the deterministic detector was not run.
83 
84## Stop conditions
85 
86Stop here when the request is detect-only. Do not continue into rewrite, file mutation, or interpretation merely because those Skills are available.
87 
88A residual `RECHECK` may run once when requested. It is read-only and does not consume an editing pass; any change it prompts must fit within the requested editing-pass limit, capped at two, and the graph's loop policy.
89 
90## Output
91 
92Return the overall label and score when executed, detected candidate matches grouped by severity, a short contextual assessment that distinguishes justified findings from plausible false positives, execution status, and no rewritten version unless control has explicitly passed to a rewrite owner.
93 

Discussion

From GitHub

6 comments on 5 threads

Opening this to first-time contributors, with the implementation choice made so nobody has to guess. Reproduced on current main (`fabd62d`): `bin/avoid-ai-writing.js --source-mode rendered-markdown <file>` returns `Clean` on a Markdown file with YAML frontmatter, while `skills/ai-writing-detector/scripts/detect.js --file <same file>` flags all three frontmatter lines, and passing it `--source-mode` throws an uncaught `unknown argument` error with a stack trace. Decision: keep `detect.js`'s existing `--file` and `--context` interface as it is. Do not try to unify the two CLIs (the root CLI takeread the rest

I'm starting on this as my first contribution here. I'll derive the list from what scripts/sync-plugin-skill.sh and scripts/sync-cursor-rules.sh actually write, keep the globs narrow so cursor-rules/README.md and the hand-written sub-skill SKILL.md files stay out, and open a PR shortly.

I'd like to take this. I’ll keep the change documentation-only, add a copy-paste npm install/import example to the root README, distinguish npm/local/browser usage in `detector/README.md`, and verify the published-package import path from an isolated temporary directory using `npm pack` so the example cannot accidentally resolve from the checkout.

Alternatives

Also in Editing & polish