
Voice Generate
Turn raw notes or source material into on-brand voice text with Opus generation, silent style fixes, and optional multi-agent review before publish.
Overview
voice-generate is an agent skill most often used in Grow (also Validate landing, Launch distribution) that runs a staged voice pipeline from notes through Opus generation, auto-fix, and optional review.
Install
npx skills add https://github.com/athola/claude-night-market --skill voice-generateWhat is this skill?
- End-to-end pipeline: frame notes → profile/register/craft rules → Opus generate → auto-fix → optional review agents → us
- Silent auto-fix for em dashes and a fixed banned-phrase list (Furthermore, delve, leverage, seamless, etc.)
- Model routing table: Opus for generation; regex for auto-fix; optional review dispatch
- Optional learning snapshots pre/post review and user-triggered /voice-learn after edits
- Pipeline documents 8+ sequential stages from source material to optional /voice-learn
- Silent auto-fix covers em dashes plus 8+ named banned phrase patterns
- Module metadata lists estimated_tokens: 500
Adoption & trust: 1 installs on skills.sh; 304 GitHub stars; 2/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Who is it for?
Solo founders producing newsletters, landing copy, or lifecycle emails who already maintain a voice profile in the Night Market stack.
Skip if: One-off code generation, audio TTS rendering, or teams without a defined register/craft rules file to load.
When should I use this skill?
You have source material to turn into voice-aligned text and want generation-pipeline auto-fix plus optional review.
What do I get? / Deliverables
You get auto-corrected, review-ready voice text with optional agent advisories applied to your decisions, ready to publish or feed /voice-learn.
- Auto-fixed generated voice text
- Optional review advisories and post-decision final draft
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Compounding distribution and lifecycle content is the primary shelf, though the same pipeline supports earlier draft assets. The module is explicitly voice-generation and editorial content production, not analytics dashboards or support macros.
Where it fits
Frame founder interview notes and generate hero plus FAQ copy that already passes banned-phrase auto-fix.
Run Opus generation on a product update outline, dispatch review agents, and apply advisories before the newsletter send.
Produce launch-thread variants from the same source material after register/craft rules load.
How it compares
Structured voice pipeline with mandatory style auto-fix—not a generic “write a blog post” prompt or an MCP connector.
Common Questions / FAQ
Who is voice-generate for?
Indie builders using athola Claude Night Market who want procedural copy generation that respects profile, register, and craft rules.
When should I use voice-generate?
Use in Grow/content for lifecycle copy; in Validate/landing for draft page narrative; in Launch/distribution when turning notes into channel-ready posts after optional review agents.
Is voice-generate safe to install?
It depends on Read/Write/Agent access to your notes and profiles; review the Security Audits panel on this Prism page and scope filesystem paths before enabling review sub-agents.
SKILL.md
READMESKILL.md - Voice Generate
# Generation Pipeline Module End-to-end generation flow from source material to reviewed text. ## Pipeline Stages ``` Source Material | v [Frame as raw notes] | v [Load profile + register + craft rules] | v [Generate with Opus] | v [Auto-fix: banned phrases, em dashes] | v [Snapshot: pre-review] (if learning active) | v [Dispatch review agents] (optional) | v [Present advisories to user] | v [Apply user decisions] | v [Snapshot: post-review] (if learning active) | v Final text (user may edit further) | v [/voice-learn captures post-edit] (user-triggered) ``` ## Auto-Fix Rules (Silent) Applied immediately after generation, before review: ```bash # Em dash replacement (context-aware) # Before a clause: use comma or colon # Parenthetical: use parentheses # List separator: use semicolons # Banned phrase removal # "Furthermore," -> "" (start sentence without it) # "It's important to note" -> "" (remove entirely) # "delve" -> "explore" or "examine" # "utilize" -> "use" # "leverage" -> "use" or remove # "comprehensive" -> "thorough" or "complete" # "robust" -> "solid" or remove # "seamless" -> "smooth" or remove ``` ## Model Routing | Stage | Model | Reason | |-------|-------|--------| | Generation | Opus | Tonal shifts, parenthetical subversion | | Auto-fix | Regex/local | No model needed | | Prose review | Sonnet | Structured detection prompts | | Craft review | Sonnet | Structured evaluation prompts | | Learning analysis | Opus | Nuanced pattern comparison | ## Error Recovery If generation fails quality checks (> 5 hard failures): 1. Re-generate with stronger emphasis on banned phrases 2. If second attempt still fails, present to user with warning 3. Never loop more than twice (prevents infinite retry) ## Streaming Considerations For long-form content (> 1000 words): - Generate in sections (one per major heading) - Apply auto-fix per section - Allow user to review section-by-section or all at once - Snapshot captures the complete assembled text --- module: register-selection category: voice-generation dependencies: [Read, Bash] estimated_tokens: 300 --- # Register Selection Module Choose the appropriate voice register for generation. ## Selection Priority 1. **Explicit request**: User says "use casual register" 2. **Context match**: Register metadata matches the task 3. **Default**: Fall back to `registers/default.md` ## Context Matching Each register file has a `## Context` section describing when to use it. Match against the user's stated purpose: ``` User: "Write a blog post about..." -> default or narrative User: "Draft a technical doc for..." -> technical User: "Reply to this Reddit thread..." -> casual User: "Write an email to my team..." -> professional ``` ## Register Loading ```bash PROFILE_DIR="$HOME/.claude/voice-profiles/$PROFILE_NAME" REGISTER_FILE="$PROFILE_DIR/registers/${REGISTER_NAME}.md" if [ ! -f "$REGISTER_FILE" ]; then echo "Register '$REGISTER_NAME' not found. Available:" ls "$PROFILE_DIR/registers/" echo "Using default register." REGISTER_FILE="$PROFILE_DIR/registers/default.md" fi ``` ## Inheritance Non-default registers inherit from default unless they explicitly override a section. When loading a non-default register: 1. Read `default.md` as base 2. Read `{name}.md` for overrides and additions 3. Merge: override sections replace, additions append ## Listing Available Registers When user asks what registers exist: ```bash echo "Available voice registers for $PROFILE_NAME:" for f in "$PROFILE_DIR/registers/"*.md; do name=$(basename "$f" .md) context=$(grep -A1 "^## Context" "$f" | tail -1) echo " $name: $context" done ``` --- module: source-framing category: voice-generation dependencies: [] estimated_tokens: 400 --- # Source Framing Module How