| name | text-eval |
| description | Evaluate prose for AI-generated-text signatures and overbuilt writing, protecting the author's voice. Context-isolated evaluator grounded in a portable AI-tells pattern library. Use to check whether text reads as machine-written, find AI tells, or review drafts for authenticity. Report-only by default. |
| lane | creative |
| creative_scrub_ref_version | 1 |
| allowed-tools | Read, Glob, Grep, Task |
Text Evaluator
Reads prose with a forensic ear for machine cadence and reports AI-generated-text
signatures — by clustering, not by single signals — while protecting the
author's voice. Scaffolded by /skill-builder audit (Step 4c-bis) on the
install-on-absence rule; ships working but conservative (report-only). Tightening
any check into a blocking gate is a deliberate user act.
Detection policy is canonical in
.claude/skills/skill-builder/references/creative-integrity.md (the Nine Scrub
Principles, severity architecture, the cluster-density rule, the voice-protection
gate). This skill carries the detection content in
references/text-tells.md and the evaluation workflow
below. It does not restate policy.
Directives
(Seeded by audit, machine-owned. These are conservative defaults, not your words —
ratify your own with /skill-builder inline text-eval [directive], or document a
voice profile to activate the voice-dependent checks fully.)
Detection is by clustering, not single signals. No pattern blocks in isolation
unless its catalog row is marked [hard]. Default escalation: 1 signal → CONSIDER,
2 → SHOULD FIX, 3+ → MUST FIX. Dedupe by mechanism when counting clusters.
Protect the voice. Calibrate for human presence, not against AI. Any flagged
pattern matching a documented voice characteristic demotes to advisory. Absent a
documented voice profile, every voice-dependent judgment is advisory-only —
never blocking, especially on technical or non-English content. Never fabricate
imperfections.
Context isolation. The evaluator runs as a fresh-context subagent that never
shared the conversation that wrote the text (principle 6). It receives the pattern
library and the text — nothing else.
Report-only by default. This skill evaluates and reports. It never rewrites
the author's text and never triggers regeneration. Fix decisions are the author's.
Model-Lane Preflight
CHECKPOINT — Model-Lane Preflight Gate (slim, advisory-only; fires at the TOP of this skill's workflow, before any generative step):
- SKIP silently IF ANY of:
/route dispatched this invocation after running its own lane preflight (a lane advisory OR ask already printed, route otherwise ASSESSED the lane this turn, or it was deliberately suppressed — route's coverage extends to the whole endeavor whether route asked, matched, or the user declined, including skills this one chains); this skill's frontmatter sets model-lane-gate: off; the session is headless / non-interactive; this gate is executing inside a subagent (a subagent is already model-pinned via its own frontmatter); OR an advisory for this LANE already printed this endeavor AND the active model is unchanged (advise at most once per (lane, active-model) pair per endeavor).
- Resolve this skill's lane (own
lane: frontmatter → the Skill→Lane table in .claude/skills/skill-builder/references/model-lanes.md → NO LANE) and the lane's Preferred Model. IF no lane resolves OR the preferred-model cell is empty → silent no-op (correctly absent, not a gap). IF this skill declares per-function lanes AND the invocation's resolved mode has its own row → that function's lane governs; otherwise the skill-level lane covers all modes.
- Read ACTIVE_MODEL from the session system-context line "The exact model ID is …" (strip
[1m]/[200k], lowercase — model-lanes.md § Active-Model Detection; never an env var or Bash probe). IF the Preferred Model is malformed or names a clearly superseded family → emit the one-line stale-mapping advisory and proceed; never advise from a stale mapping, never validate against a hardcoded list.
- Compare. Match → silent no-op. Mismatch → print ONE advisory line and PROCEED: "Lane advisory: this skill declares the
<lane> lane (preferred <preferred>); the active model is <active> — to align, run /model <preferred> and re-invoke; proceeding as-is." Naming the command is INFORMATIONAL (named-command advisory directive, 2026-06-11): NEVER an AskUserQuestion, never a blocking wait (No-Switch-Prompt directive, 2026-06-06). A skill can NEVER switch the session model and never asks the user to.
- Primary-lane scope. This gate fires ONCE per invocation, for the resolved PRIMARY lane. Cross-lane mid-workflow steps never re-advise — they delegate via this skill's LANE-AGENT-EMBED Delegation Map when present (see .claude/skills/skill-builder/references/lane-delegation.md). Delegation is never a substitute for THIS gate: analytical primary work runs on the analytical main model — never a creative main session orchestrating analytical-pinned agents to dodge the lane.
Commands
| Command | Action |
|---|
/text-eval [path-or-paste] | Evaluate the supplied prose; return a tiered authenticity report |
Workflow: Evaluate
- Provenance guard. Confirm what you are evaluating — AI-drafted in-session
content, unknown, or human-authored. Never evaluate calibration/reference texts
or non-prose files. Provenance only changes the framing of the report, never
whether a tell is named.
- Calibrate by content type. Short-form (posts, captions, teasers) → single-signal
severity, skip corpus checks, apply the wit-shaped-noise single-line exemption.
Long-form → the full library. (Define a calibration table here if your project
needs one.)
- Spawn the context-isolated evaluator. Run the
ai-text-evaluator agent
(context: none) with the pattern library and the text only — never inline in the
conversation that produced the text. The agent grounds against
references/text-tells.md.
- Tier by cluster density (per the directives above and the catalog's
[hard]
rows): report blocking flags (MUST FIX + every [hard] hit) uncapped; cap
advisory flags (SHOULD FIX / CONSIDER) at 3–5 so the signal is not buried.
- Check FOR human presence first. Before requiring any change, count the
human-presence markers (
references/text-tells.md § Human-presence markers). 4+
strong markers plus a few rhetorical devices is human writing under revision
pressure — surface an over-correction warning rather than demanding edits.
- Report: the tiered findings with evidence + falsifiable test per flag, the
human-presence read, and (advisory) any cluster that crossed a blocking threshold.
Do not edit the text.
Severity Architecture
Three tiers — MUST FIX / SHOULD FIX / CONSIDER — ordered by cluster density, not
by detection. Two non-obvious rules (principle 7): report all blocking flags uncapped
but cap advisory flags (3–5), and any flag reflecting a hard project directive is
mandatory regardless of its tier. [hard] catalog rows (mechanical defects:
pipeline-artifact residue, invisible Unicode; factual-integrity failures: ghost
citations, fabricated experience) block at first occurrence — they are not subject to
the cluster rule.
Grounding
Before evaluating:
- Read references/text-tells.md (the pattern library —
pattern → tell → falsifiable test).
- State: "I will apply [PATTERN/TIER] from references/text-tells.md, scored by cluster
density per the directives."
- references/text-tells.md — portable AI-text-signature library (version-synced by audit)
.claude/skills/skill-builder/references/creative-integrity.md — canonical severity / cluster / voice policy + the Nine Scrub Principles