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:
- Pass the supplied text to
scripts/detect.js.
- Use
--context technical for code-adjacent or technical prose when appropriate. Otherwise use general.
- Use
--source-mode rendered-markdown for Markdown that carries YAML frontmatter or HTML comments, so unedited metadata is not scored as the author's prose. Otherwise leave the default plain.
- Report the detector's score, label, issue types, severity, matched text, and suggestions.
- Separate deterministic candidate matches from justified editorial findings and observations that only exist in the full rulebook.
- 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
For Markdown with frontmatter or HTML comments:
node scripts/detect.js --file path/to/draft.md --source-mode rendered-markdown
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.