# Style Learning Loop

> How to learn and refine the user's writing style from their sent emails, and when to consolidate fingerprints into a tight rulebook

- Skill: `folken2/style-learning-loop-3` (Agent Skill)
- Install (CLI): `npx skillmds@latest add folken2/style-learning-loop-3`
- Raw SKILL.md: https://api.skillmd.com/api/skills/folken2/style-learning-loop-3/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: Folken2 (https://skillmd.com/u/folken2)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/folken2/style-learning-loop-3

---


# The style learning loop

The agent gets better at sounding like the user over time. The mechanism is a markdown topic called `writing-style` that accumulates fingerprints and gets compressed into rules.

## Stage 1 — collect fingerprints (every send)

For each sent email, call `learn_style_from_sent_email(body, recipient, subject)`. This appends a structured note like:

```
## Sent sample
- to: anna@…
- subject: Q3 budget
- words/sentences: 84/6 (avg 14.0 w/s)
- opener: "Hi Anna,"
- signoff: "Thanks, J"
- punctuation: 0! / 1? / 6 contractions / 2 em-dashes / 0 bullet lines
```

These are raw signals, not rules. Don't show them to the user; they're working memory.

## Stage 2 — consolidate (every ~10 samples)

When fingerprints accumulate, read them and derive durable rules. Then call `consolidate_writing_style(distilled_markdown)` with a tight rulebook.

A good rulebook looks like:

```markdown
# User voice — rulebook (v3)

## Opener
- Default: `Hi <name>,` on first-touch threads.
- In replies, no opener — jumps straight in.

## Sign-off
- Almost always: `Thanks, J`
- Casual / one-liner: just `J`
- Never: `Best regards`, `Sincerely`, `Kind regards`

## Sentence shape
- Average 14 words per sentence; cap at 25.
- 5–8 sentences per email is the common shape.

## Voice tics
- Uses contractions freely (~6 per email).
- Em-dashes for asides — comfortably.
- Zero exclamation marks. Convert ! → . if drafting.
- One rhetorical question per email is fine; more is rare.

## Recipient-specific overrides
- See `recipient-<email>` memories for one-off calibrations.
```

Keep it under ~2KB. Rules the drafting/coaching tools can apply mechanically.

## Stage 3 — when the user edits before sending

If the taskpane reports an edit (sent body ≠ drafted body), the edit is the strongest learning signal. Save the *delta* as a memory note:

```
recall_memory → check for "edit-patterns" topic
save_memory(topic="edit-patterns", content="Cut 'Just wanted to check in — ' from openers. User prefers cold-start.")
```

These get folded into the rulebook on the next consolidation.

## Anti-patterns

- **Over-fitting to one email.** One short reply doesn't mean the user always wants short replies. Wait for ≥5 samples before claiming a rule.
- **Treating subject lines as rules.** Subjects are highly contextual; don't generalize from them.
- **Burying durable rules in raw fingerprints.** That's why Stage 2 exists. The rulebook is what `recall_writing_style` returns to drafting/coaching; raw fingerprints should be pruned.
- **Forgetting to consolidate.** If the writing-style topic grows past ~5KB, consolidate now.

