athola/voice-review
Runs parallel prose and craft review agents against a voice profile. Use when checking generated content for AI patterns and voice drift before publishing.
npx skills add https://github.com/athola/claude-night-market --skill voice-review
Dispatch dual review agents and present unified findings.
scribe:voice-generate)scribe:slop-detector)
Two agents run in parallel on the generated text:
Hard failures (banned phrases, em dashes) are auto-fixed.
Everything else returns as advisory tables for user decision.
voice-review:text-loaded - Generated text readvoice-review:register-loaded - Voice register loadedvoice-review:agents-dispatched - Both reviewers launchedvoice-review:hard-fails-fixed - Auto-corrections appliedvoice-review:advisories-presented - Tables shown to uservoice-review:findings-verified - Citations confirmed by verifierRead:
Launch both agents in parallel:
Agent(prose-reviewer):
- text: {generated_text}
- register: {register_content}
- banned_phrases: {banned_list}
Agent(craft-reviewer):
- text: {generated_text}
- register: {register_content}
Apply all auto-fixes from prose reviewer silently:
Report: "Fixed N hard failures (X banned phrases, Y em dashes, Z patterns)"
Present both tables to the user:
Prose Review Advisories:
| # | Line | Anchor | Pattern | Current | Proposed fix |
|---|------|--------|---------|---------|--------------|
Craft Review:
| Dimension | Rating | Notes | Proposed improvement |
|-----------|--------|-------|---------------------|
For each advisory row, user can:
Present as:
[1] Prose: Frictionless transition at "Furthermore, the..."
Proposed: Cut transition, start mid-thought
[a]ccept / [r]eject / re[w]rite?
If the user has learning mode enabled:
before user decisions on advisories)
~/.claude/voice-profiles/{name}/learning/snapshots/When dispatched from voice-generate, the flow is:
Can also be run on any existing text:
/voice-review path/to/file.md --profile myvoice --register casual
voice-review:findings-verified)Every advisory row must cite a real line and a verbatim anchor. Write
findings to .review/findings.json and confirm each citation resolves:
python plugins/imbue/scripts/citation_verifier.py \
--findings .review/findings.json --repo-root .
Drop or label UNVERIFIED any finding the verifier fails (exit 1); only
verified findings enter the advisory tables. See Skill(imbue:review-core)
Step 5 and Skill(imbue:structured-output) for the schema.
After the review completes, validate these conditions:
Line (file:line) and verbatim Anchor;citation_verifier.py confirmed all citations (exit 0) or unverified
rows are dropped/labeled UNVERIFIED
The test suite (test_voice_review.py) validates:
Take athola/voice-review from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.