Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Critique-and-rewrite loop for voice fidelity validation.
.claude/skills/notque-voice-validator/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 149% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 86% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 108% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 60% | 0% |
This skill operates a rigorous critique-and-rewrite enforcement loop for voice fidelity. It scans content against voice-specific negative prompt checklists, documents violations with evidence, fixes them while preserving intent, and rescans to confirm the revision passes — up to 3 iterations maximum.
The workflow implements the Iterative Refinement pattern: scan → document violations → revise → rescan. This ensures voice violations are caught systematically and fixed methodically without over-engineering or changing meaning.
CRITICAL CONSTRAINT: Never revise content without first scanning against the full checklist. Every violation must cite a specific quote. After 3 failed iterations, output with flagged concerns rather than continuing indefinitely.
| Signal | Load These Files | Why | |---|---|---| | validating narrative content of 500+ words | narrative-patterns.md | Supplies the full narrative-fidelity rubric. |
Goal: Determine the voice, mode, and content to validate.
Step 1: Identify voice target
Step 2: Load content
Gate: Voice target and mode identified. Content loaded. Proceed only when gate passes.
Goal: Run full checklist against content and identify all violations with evidence.
Step 0: Run deterministic stylometry checks
When the target voice has a profile.json, run the stylometry script first. It emits structured findings (rule_id, span, severity) that anchor the scan in measured data:
bashpython3 scripts/voice-stylometry.py check \ --profile skills/voice-{name}/profile.json \ --draft <content-file>
Deterministic checks it runs:
burstiness.band, warning): draft sentence-length variance must fall inside the author's measured band; uniform sentence length is an AI tell.punctuation.em_dash|semicolon|parenthetical, warning): em-dash, semicolon, and parenthetical rates classified never/rare/habitual; flags drafts whose class deviates from the author's.ai_tell.corrective_antithesis, error): "not X, it's Y" constructions, inline and across sentence pairs.ai_tell.temporal_opener, error): throat-clearing paragraph openers ("In today's...", "In an era...", "Now more than ever...").ai_tell.uniform_paragraphs, error): four or more consecutive paragraphs with identical sentence counts.profile.stale, advisory): profile older than its refresh_after_days window. Advisory only — it asks for a profile refresh and never blocks the draft. Exit code stays 0 when only advisory findings exist.Exit code 1 means error/warning findings exist; carry each finding into the violation list below. Profiles without stylometry or decay fields skip those checks and remain valid.
Step 1: Run negative prompt checklist
Check all categories against the target voice's checklist. Standard categories include:
references/narrative-patterns.md):Step 2: Check pass conditions
Verify the content matches the target voice's positive identity markers. Common pass conditions include:
Step 3: Document violations
For each violation, record:
Key constraint: Only scan at this stage; save revisions for the next phase. Subjective assessment without a checklist misses specific violations.
Gate: Full checklist scanned. All violations documented with evidence. Proceed only when gate passes.
Goal: Fix all violations while preserving content intent and substance.
Step 1: Apply fixes
Step 2: Verify no overcorrection
Key constraint: Make the smallest change that resolves each violation. Preserve all meaning. Changing substance is scope creep.
Gate: All documented violations addressed. Intent preserved. Proceed only when gate passes.
Goal: Confirm revised content passes all checks.
Step 1: Rescan revised content
Run the full checklist from Phase 2 against the revised version.
Step 2: Evaluate result
Key constraint: Always rescan. "Should be fine" is a rationalization. Fixes can introduce new violations.
Step 3: Output validation report
VOICE VALIDATION: [Voice Name] Mode [mode]
SCAN RESULT: [PASS/FAIL]
VIOLATIONS DETECTED: [N]
ITERATION: [1-3]
[If violations:]
1. [Category]: "[quoted violation]"
Fix: [specific correction]
2. [Category]: "[quoted violation]"
Fix: [specific correction]
REVISED OUTPUT:
[Corrected content]
RESCAN RESULT: [PASS/FAIL]Gate: Content passes all checks, or maximum iterations reached with flagged concerns. Validation complete.
User says: "Validate this draft is in the right voice"
Actions:
Result: Clean content with validation report
User says: "Does this sound like the right voice?"
Actions:
Result: Content matches voice profile
Cause: Content doesn't specify which voice to validate against, or context is ambiguous
Solution:
Cause: Fundamental mismatch between content substance and voice requirements, or conflicting checklist items
Solution:
Cause: Fixing one category created violations in another (e.g., removing dramatic sentences introduced polished phrasing)
Solution:
voice-{name} - Generates content in a specific voice (validate output with this skill)voice-writer - Unified voice content generation pipeline that invokes this skill| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 12,424 | 2,275 | -82% | 1 | 1 | 0% | 1,871 | 2,604 | +39% | 0 | 0 | — |
case-20 | pass→fail | 10,333 | 12,473 | +21% | 1 | 1 | 0% | 1,612 | 4,325 | +168% | 0 | 0 | — |
case-02 | pass→pass | 12,024 | 3,809 | -68% | 1 | 1 | 0% | 1,768 | 2,803 | +59% | 0 | 0 | — |
case-03 | pass→pass | 8,087 | 3,200 | -60% | 1 | 1 | 0% | 1,204 | 2,816 | +134% | 0 | 0 | — |
case-04 | fail→pass | 9,105 | 4,774 | -48% | 1 | 1 | 0% | 1,234 | 3,075 | +149% | 0 | 0 | — |
case-05 | fail→pass | 12,290 | 7,042 | -43% | 1 | 1 | 0% | 1,796 | 3,337 | +86% | 0 | 0 | — |
case-06 | pass→pass | 9,887 | 5,860 | -41% | 1 | 1 | 0% | 1,373 | 3,209 | +134% | 0 | 0 | — |
case-07 | pass→pass | 9,777 | 3,707 | -62% | 1 | 1 | 0% | 1,371 | 2,944 | +115% | 0 | 0 | — |
case-08 | pass→pass | 8,279 | 4,468 | -46% | 1 | 1 | 0% | 1,328 | 2,951 | +122% | 0 | 0 | — |
case-09 | pass→pass | 11,012 | 3,318 | -70% | 1 | 1 | 0% | 1,661 | 2,762 | +66% | 0 | 0 | — |
case-10 | pass→pass | 7,242 | 4,098 | -43% | 1 | 1 | 0% | 1,035 | 2,873 | +178% | 0 | 0 | — |
case-11 | pass→pass | 9,855 | 2,406 | -76% | 1 | 1 | 0% | 1,418 | 2,688 | +90% | 0 | 0 | — |
case-12 | pass→pass | 8,097 | 3,739 | -54% | 1 | 1 | 0% | 1,294 | 2,878 | +122% | 0 | 0 | — |
case-13 | fail→pass | 9,332 | 4,110 | -56% | 1 | 1 | 0% | 1,387 | 2,883 | +108% | 0 | 0 | — |
case-14 | pass→pass | 4,997 | 3,472 | -31% | 1 | 1 | 0% | 703 | 2,845 | +305% | 0 | 0 | — |
case-15 | fail→pass | 11,726 | 3,000 | -74% | 1 | 1 | 0% | 1,669 | 2,671 | +60% | 0 | 0 | — |
case-16 | pass→pass | 5,573 | 2,038 | -63% | 1 | 1 | 0% | 765 | 2,550 | +233% | 0 | 0 | — |
case-17 | pass→pass | 11,357 | 7,385 | -35% | 1 | 1 | 0% | 1,635 | 3,354 | +105% | 0 | 0 | — |
case-18 | fail→pass | 4,969 | 3,890 | -22% | 1 | 1 | 0% | 862 | 3,015 | +250% | 0 | 0 | — |
case-19 | fail→pass | 6,208 | 7,028 | +13% | 1 | 1 | 0% | 904 | 3,394 | +275% | 0 | 0 | — |
case-21 | pass→pass | 3,109 | 5,936 | +91% | 1 | 1 | 0% | 425 | 3,232 | +660% | 0 | 0 | — |
case-22 | fail→fail | 9,280 | 9,088 | -2% | 1 | 1 | 0% | 1,576 | 3,814 | +142% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +27 percentage points is the difference between those two pass rates over the 22 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.