Skip to content
Agentmart
Submit a tool

mph-voice-refresh

Mine Claude Code chat transcripts for Michael Hanko's actual phrasing patterns and refresh the VOICE.md corpus.

Skill by mphinance

IndexedMIT★ 29
Write a review

Install

Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install skill/mphinance-mph-voice-refresh

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Mine Claude Code chat transcripts for Michael Hanko's actual phrasing patterns and refresh the VOICE.md corpus. Triggers on "refresh my voice", "update VOICE.md", "mine my chats for voice", "what does my voice sound like lately", "refresh voice corpus", or when mph-substack-writer output has started sounding stale/repetitive.

Use cases: agent-building

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.

Tools
No tools found
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Network hosts it talks to 1

  • codeload.github.com · found in install command

Files it touches

  • ~/.claude/skills/mph-voice-refresh

What's inside

Skill name
mph-voice-refresh
Description
Mine Claude Code chat transcripts for Michael Hanko's actual phrasing patterns and refresh the VOICE.md corpus. Triggers on "refresh my voice", "update VOICE.md", "mine my chats for voice", "what does my voice sound like lately", "refresh voice corpus", or when mph-substack-writer output has started sounding stale/repetitive.
License
MIT
Instructions
58 lines in SKILL.md · view on GitHub

Before installing

  • Ships executable scripts

Files (4)

  • SKILL.md
  • VOICE.md
  • mine_feed.py · scripts/
  • mine_voice.py · scripts/

SKILL.md (first lines)

# MPH Voice Refresh

Keeps the [VOICE.md](VOICE.md) corpus alive. Without this, the writer keeps reusing the same "Michael impersonations" until they sound canned.

## When to invoke
- User asks to refresh / update / mine the voice corpus
- User says drafts are "sounding the same" or "you keep using that phrase"
- It's been more than ~3 weeks since last refresh (check the date at the bottom of VOICE.md)

## Two sources, two miners

| Source | Script | What it captures |
|---|---|---|
| Chat transcripts (`~/.claude/projects/*/*.jsonl`) | `scripts/mine_voice.py` | Unfiltered, conversational — tics like `..`, `lol`, `or whatever`, `Ugh.`, mid-sentence self-corrections. The way Michael actually types. |
| Substack RSS feed (`mphinance.substack.com/feed`) | `scripts/mine_feed.py` | Polished, published — paired openers, contradiction-filter constructions, punchy closers. The way Michael writes for readers. |

Both write to the **same VOICE.md**, but into separate sections. Don't mix them — chat voice has tics that don't belong in a Substack draft, and published voice has constructions that would sound forced in chat.

## Flow

1. **Read current state.** Read [VOICE.md](VOICE.md) so you know what's already in the corpus and what's already retired.

2. **Run the relevant miner.**
   - For chat voice refresh (most common — run every few weeks):
     ```
     python skills/mph-voice-refresh/scripts/mine_voice.py --days 30
     ```
   - For published voice refresh (run after Michael ships a new Substack post):
     ```
     python skills/mph-voice-refresh/scripts/mine_feed.py --limit 8
     ```
   - Run both back-to-back if it's been a while.

3. **Review with Michael.** Show the candidate lists. Do NOT auto-apply. Ask which additions to keep and which retirements to confirm. Voice is subjective; the miner is a candidate generator, not the authority.

4. **Apply approved changes.** Append confirmed additions to the appropriate section of VOICE.md:
   - Chat candidates → "Idioms & tics" / "Sentence rhythms" / "Long-form examples"
   - Feed openers/closers → "Published voice — Substack patterns"
   - Confirmed Claude repeats → `RETIRED`
   - Update the "Last refreshed" date at the bottom.

5. **No commits.** Leave the file dirty. Michael decides when/if to commit changes to the alpha-skills repo.

## What counts as "voice-worthy"

The miner looks for plain-string user messages (not tool results, not system reminders) that contain at least one informal marker: multi-dot punctuation (`..` / `....`), `lol`, `lmao`, `tbh`, `ngl`, `or whatever`, `kinda`, `sorta`, `I mean`, `I guess`, `wait`, `actually`, `yeah`, `damn`, `bullsh*t`, etc. It also requires length between 10 and 400 chars so we skip both one-word prompts and pasted essays.

## What counts as "stale"

Any 5-word phrase that appears in 3+ separate session transcripts (counted from assistant messages). The miner is intentionally aggressive here — better to surface a false positive Michael can ignore than miss a real tic. The user has explicitly said: "you end up reusing the same 'quotes' or whatever all the time" — this is what we're hunting.

## Hard rules

- **Never auto-apply.** Always present candidates for review.
- **Never delete the RETIRED section.** It's a permanent ban list.
- **Don't mine SSH-session transcripts** (project paths starting with `ssh-`). Those are remote work, often not in Michael's voice.

From mphinance/alpha-skills, MIT.

More from mphinance/alpha-skills

Signals

Stars
29
Forks
6
Open issues
0
Last commit (this folder)
Jun 16, 2026 (4 months ago)

From GitHub (fetched Oct 24, 2026).

Details

License
MIT
First seen
Oct 24, 2026
Last checked
Oct 24, 2026

More from mphinance

Cite this page

mph-voice-refresh skill. Agent Mart. https://agentmart.dev/skills/mphinance-mph-voice-refresh (last updated 2026-10-24)