Skip to content
Development
Skill

/voice-validator

Critique-and-rewrite loop for voice fidelity validation.

From plugin
vexjoy-agent
421122 skills198 agents11 commands76 hooks
Install
$ npx -y skills add notque/vexjoy-agent --skill voice-validator --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/voice-validator

Context preview

The summary Claude sees to decide when to auto-load this skill.

Critique-and-rewrite loop for voice fidelity validation.

SKILL.md

voice-validator.SKILL.md
name: voice-validator
description: "Critique-and-rewrite loop for voice fidelity validation."
user-invocable: false
allowed-tools:
  - Read
  - Write
  - Bash
  - Grep
  - Glob
  - Edit
  - Task
  - Skill
routing:
  triggers:
    - "validate voice"
    - "check voice fidelity"
    - "voice critique"
    - "voice fidelity"
    - "writing style check"
  category: voice
  pairs_with:
    - voice-writer
    - joy-check

Voice Validator Skill

Overview

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.

---

Reference Loading Table

| Signal | Load These Files | Why | |---|---|---| | validating narrative content of 500+ words | `narrative-patterns.md` | Supplies the full narrative-fidelity rubric. |

Instructions

Phase 1: IDENTIFY TARGET

**Goal**: Determine the voice, mode, and content to validate.

**Step 1: Identify voice target**

  • Determine target voice from context or user instruction
  • Identify mode if applicable — casual modes may have additional specific checks
  • Reference the target voice's checklist (contact user if unclear)

**Step 2: Load content**

  • Read the content to validate
  • Note content length — longer content is more prone to drift

**Gate**: Voice target and mode identified. Content loaded. Proceed only when gate passes.

Phase 2: SCAN

**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:

python3 scripts/voice-stylometry.py check \
  --profile skills/voice-{name}/profile.json \
  --draft <content-file>

Deterministic checks it runs:

  • **Burstiness band** (`burstiness.band`, warning): draft sentence-length variance must fall inside the author's measured band; uniform sentence length is an AI tell.
  • **Punctuation profile** (`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.
  • **Corrective antithesis** (`ai_tell.corrective_antithesis`, error): "not X, it's Y" constructions, inline and across sentence pairs.
  • **Temporal openers** (`ai_tell.temporal_opener`, error): throat-clearing paragraph openers ("In today's...", "In an era...", "Now more than ever...").
  • **Uniform paragraph shapes** (`ai_tell.uniform_paragraphs`, error): four or more consecutive paragraphs with identical sentence counts.
  • **Profile decay** (`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:

  • **Tone**: Does the tone match the voice profile? (e.g., too polished, too corporate, missing warmth)
  • **Structure**: Does the structure match? (e.g., front-loaded constraints, clean outlines, wrap-ups)
  • **Sentences**: Do sentence patterns match? (e.g., dramatic short sentences, rhetorical flourishes, symmetrical structure)
  • **Language**: Any banned words? (amazing, terrible, revolutionary, perfect, game-changing, transformative, incredible, outstanding, exceptional, groundbreaking), marketing/hype, inspirational, unnecessary superlatives
  • **Emotion**: Does emotion handling match? (e.g., explicitly named emotions, venting/ranting, moralizing)
  • **Questions**: Do question patterns match? (e.g., open-ended brainstorming, vague curiosity)
  • **Metaphors**: Do metaphor patterns match? (e.g., journey/path, biological/growth, narrative/story)
  • **Narrative** (500+ words only; full 13-check rubric in `references/narrative-patterns.md`):
  • Evidence speaks for itself, or narrator over-explains the point?
  • Emotional registers mixed (named feelings + behavioral cues + sensation)?
  • Secondary threads present that enrich the main argument?
  • Reader's experience acknowledged?
  • Temporal structure varied (callbacks, non-linear points)?
  • References specific (named people, works, sources)?
  • Room for uncertainty and loose ends, or subject has every answer?
  • Intensity varies (peaks and valleys), or flat throughout?
  • Event types diverse, or every paragraph does the same thing?
  • Ending carries forward motion, or defaults to tidy realization epilogue?

**Step 2: Check pass conditions**

Verify the content matches the target voice's positive identity markers. Common pass conditions include:

  • Feels like the person actually wrote it
  • Voice-specific patterns are present (thinking out loud, warmth, precision, etc.)
  • Could NOT be posted on LinkedIn without edits (for casual voices) — this heuristic catches ~80% of voice violations
  • Does NOT sound like AI wrote it
  • Narrative structure shows variety — secondary threads, temporal variation, forward-motion ending
  • Mode-specific patterns are present (casual modes: no
Read more
Ships withvexjoy-agent

Essays and writing behind this toolkit live at vexjoy.com. VexJoy Agent connects plain-English requests to specialist agents, skills, and workflows. /do selects the knowledge and tools needed for your task.

Get the whole plugin

Other skills on vexjoy-agent.