Runs parallel prose and craft review agents against a voice profile
设计与多媒体
voice-learn
试用Improves a voice profile by learning from manual edits. Use after editing generated text to refine registers and close voice drift over time
它能做什么
Improves a voice profile by learning from manual edits. Use after editing generated text to refine registers and close voice drift over time
技能文档
Night Market Skill — ported from claude-night-market/scribe. For the full experience with agents, hooks, and commands, install the Claude Code plugin.
Voice Learning Skill
Learn from user edits to improve the voice profile over time.
Method: Three-Stage Comparison
Every piece flows through three stages:
- Pre-review: Raw generation output (before review agents)
- Post-review: After user accepts/rejects advisory fixes
- Post-edit: User's manually edited final version
The learning agent compares stages 2 and 3 (post-review vs post-edit) to identify patterns in what the user changed. These patterns inform register and rule updates.
Core Rules
- Sharpen, don't add: Modify existing rules to cover new patterns. Rule bloat degrades output.
- Tag specificity: Register-specific patterns go to registers. Universal patterns go to craft rules or agents.
- Flag contradictions: Opposite patterns across pieces require user resolution.
- Evidence threshold: Patterns need 3+ instances (or 1-2 matching existing accumulator entries) before becoming rules.
- Detection surface: Structural changes increase AI detectability. Craft-level changes are neutral. Prefer craft-level updates.
- Rule count check: Suggest consolidation if any section has 8+ rules.
Required TodoWrite Items
voice-learn:snapshots-loaded- All three stages readvoice-learn:diff-analyzed- Changes categorizedvoice-learn:accumulator-checked- Prior patterns reviewedvoice-learn:proposals-generated- Updates proposedvoice-learn:user-approved- Changes accepted by user
Step 1: Load Snapshots
Load: @modules/snapshot-management
PROFILE_DIR="$HOME/.claude/voice-profiles/{name}"
SNAP_DIR="$PROFILE_DIR/learning/snapshots"
# Find the most recent snapshot set
# Format: {piece-name}-{timestamp}-{stage}.md
Read all three stages for the target piece.
Step 2: Diff Analysis
Load: @modules/pattern-analysis
Compare post-review vs post-edit. Categorize every change:
| Category | Example |
|---|---|
| Tone adjustment | Softened a claim, added hedge |
| Voice insertion | Added parenthetical, aside, humor |
| Structure change | Broke paragraph, reordered |
| Precision edit | Replaced vague with specific |
| Deletion | Removed fluff or decoration |
| Addition | Added context, example, anchor |
Step 3: Check Accumulator
Read learning/accumulator.json:
{
"patterns": [
{
"id": "pat-001",
"category": "tone_adjustment",
"description": "Softens confident claims about tool capabilities",
"instances": [
{"piece": "blog-post-1", "date": "2026-04-08", "diff": "..."}
],
"target": "register",
"status": "accumulating",
"first_seen": "2026-04-08",
"last_seen": "2026-04-08"
}
],
"staleness_threshold_days": 30
}
Match new changes against existing patterns:
- Semantic similarity (same category + similar description)
- If match found: merge instance, check if threshold reached
- If no match: create new accumulator entry
Step 4: Generate Proposals
For patterns that reach threshold (3+ instances or 1-2 matching prior accumulator entries with 2+ instances):
Apply (strong evidence)
## Proposed Update
**Pattern**: {description}
**Target**: {register file or craft-rules.md}
**Evidence**: {N instances across M pieces}
| Piece | Date | Change Made |
|-------|------|-------------|
| ... | ... | ... |
**Proposed edit**:
- File: {path}
- Section: {section name}
- Current: "{current text or 'new addition'}"
- Proposed: "{new text}"
Hold (insufficient evidence)
Add to accumulator with current instances. Report:
Holding: "{pattern description}" (N instances, need 3+)
Contradictions
If a new pattern contradicts an existing accumulator entry:
Contradiction detected:
- Existing: "{accumulator pattern}"
- New: "{contradicting pattern}"
- Resolution required: user must choose
Step 5: User Approval
Present proposals to user:
Learning found N patterns ready to apply:
[1] {pattern}: {proposed change}
Evidence: {N instances}
[a]pply / [s]kip / [v]iew evidence?
[2] ...
Apply approved changes to the target files.
Staleness
Patterns in the accumulator expire after staleness_threshold_days
(default 30). If a pattern hasn't recurred within that window,
it was likely a one-off preference rather than a voice trait.
On each learning pass, prune stale entries:
# Remove patterns older than threshold with < 3 instances
Snapshot Capture
The learning system captures snapshots automatically when voice-review completes. Snapshot naming:
{piece-filename}-{YYYYMMDD-HHMMSS}-pre-review.md
{piece-filename}-{YYYYMMDD-HHMMSS}-post-review.md
{piece-filename}-{YYYYMMDD-HHMMSS}-post-edit.md
The post-edit snapshot is captured when the user runs
/voice-learn after finishing their manual edits.
Exit Criteria
- Snapshots loaded and compared
- Changes categorized
- Accumulator checked and updated
- Proposals generated for threshold patterns
- User approved/rejected proposals
- Approved changes applied to profile files
- Stale accumulator entries pruned
相关技能
Extracts a user's writing voice from text samples via SICO comparative analysis
Build, measure, edit, or switch a personal writing voice profile for the rabbit-writes plugin. Three ways in, from writing samples, from an interview, or from both together, which is the one to recommend. Use when the user wants to teach the system how they write, create their own writing style, set up or replace a voice, capture their tone, analyze documents they wrote to extract a voice, be interviewed about their style, change whose voice is active, blend two voices, or convert their writing samples into a reusable style profile. Also use when a draft "doesn't sound like me" and the saved profile needs correcting.
Extracts writing style patterns from exemplar text into a reusable profile
Turn a murder-mystery or indie-game script into a labeled multi-character voice pack. This AI game voice pack and character dialogue studio casts one consistent voice per role, records every line in script order, and delivers numbered clips with character IDs ready for an engine or tabletop production. Use it for game voice acting, indie game dialogue, murder mystery voiceover, multi character TTS, NPC voice acting, interactive story audio, tabletop voice pack work, and scripted game audio.
Generate spoken voiceover and narration from a script, one speaker, with control over emotion, pacing, and voice. Use when the user says "read this in a warm...