Skip to content
Back to skills

Voice Learn

ASecurity

Improves a voice profile by learning from manual edits. Use after editing generated text to refine registers and close voice drift over time.

  • 666 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added September 2, 2026
ai-agentsgobash

Security analysis

A100/100

Scanned September 2, 2026

npx -y skills add majiayu000/claude-skill-registry --skill voice-learn --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Voice Learn?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Voice Learn
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/majiayu000-voice-learn/badge)](https://www.skillsdirectory.com/skills/majiayu000-voice-learn)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: voice-learn
description: Improves a voice profile by learning from manual edits. Use after editing generated text to refine registers and close voice drift over time.
globs: "**/*.{md,txt}"
alwaysApply: false
category: writing-quality
tags:
- voice
- learning
- improvement
- feedback
- iteration
tools: []
complexity: high
model_hint: opus
estimated_tokens: 2000
progressive_loading: true
modules:
- modules/snapshot-management.md
- modules/pattern-analysis.md
dependencies:
- scribe:voice-extract
- scribe:voice-generate
- scribe:voice-review
---

# Voice Learning Skill

Learn from user edits to improve the voice profile over time.

## Method: Three-Stage Comparison

Every piece flows through three stages:
1. **Pre-review**: Raw generation output (before review agents)
2. **Post-review**: After user accepts/rejects advisory fixes
3. **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

1. **Sharpen, don't add**: Modify existing rules to cover new
   patterns. Rule bloat degrades output.
2. **Tag specificity**: Register-specific patterns go to
   registers. Universal patterns go to craft rules or agents.
3. **Flag contradictions**: Opposite patterns across pieces
   require user resolution.
4. **Evidence threshold**: Patterns need 3+ instances (or 1-2
   matching existing accumulator entries) before becoming rules.
5. **Detection surface**: Structural changes increase AI
   detectability. Craft-level changes are neutral. Prefer
   craft-level updates.
6. **Rule count check**: Suggest consolidation if any section
   has 8+ rules.

## Required TodoWrite Items

1. `voice-learn:snapshots-loaded` - All three stages read
2. `voice-learn:diff-analyzed` - Changes categorized
3. `voice-learn:accumulator-checked` - Prior patterns reviewed
4. `voice-learn:proposals-generated` - Updates proposed
5. `voice-learn:user-approved` - Changes accepted by user

## Step 1: Load Snapshots

Load: `@modules/snapshot-management`

```bash
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`:

```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)

```markdown
## 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:
```bash
# 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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.