# Voice Profile

Extract a written voice profile from your own prior papers, then use it to keep new...

- Repository: https://github.com/pedrohcgs/claude-code-my-workflow (1676 stars)
- Category: Writing
- License: MIT
- Last updated: 2026-09-27
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add pedrohcgs/claude-code-my-workflow --skill voice-profile -g -a claude-code -y`
Codex: `npx skills add pedrohcgs/claude-code-my-workflow --skill voice-profile -g -a codex -y`
Cursor: `npx skills add pedrohcgs/claude-code-my-workflow --skill voice-profile -g -a cursor -y`
Gemini CLI: `npx skills add pedrohcgs/claude-code-my-workflow --skill voice-profile -g -a gemini-cli -y`

## Description

Extract a written voice profile from your own prior papers, then use it to keep new drafts sounding like you. Reads a corpus one document at a time via subagents, produces a reusable profile on disk (lexicon, sentence rhythm, how you open and close, hedging habits, deliberate quirks), and audits a draft against it. Use when the user says "make this sound like me", "match my voice", "profile my writing", "why does this draft not sound like my papers", or before drafting prose that will carry their name. The positive counterpart to /humanize, which only detects AI tells.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Voice profile, write toward something, not just away from tells

[`/humanize`](../humanize/SKILL.md) is the **negative** direction: it finds AI tells and says
what to remove. That leaves a draft that is merely *less bad*.

This is the **positive** direction: a written description of how *you* actually write,
extracted from your own published work, so a draft can be measured against a target instead of
a taboo list.

> **What this does not do.** A voice profile makes prose sound like your prose. It does **not**
> make model-generated text stop reading as model-generated to a neural detector, nothing an
> LLM applies to its own output does. See [`writing-with-ai.md`](../../rules/writing-with-ai.md).
> Use this to write well in your own register; write the load-bearing sentences yourself.

## Building the profile

### 1. Assemble the corpus, and count it

Three to twelve of **your own** pieces where you were the primary writer. Published papers
are best, they survived editing. Mix genres if you write in several (paper, referee report,
grant, teaching notes); the profile should note where your register changes.

```bash
find <corpus-dir> -maxdepth 1 \( -name '*.pdf' -o -name '*.tex' \) | wc -l
```

*(`find`, not a glob, in zsh an unmatched glob aborts the whole command, which
reports 0 and defeats the count this step exists for.)*

**Count before starting.** A corpus of eleven is a different task from four, and discovering
that halfway through is how a session gets reset.

### 2. One subagent per document, never load the corpus into one context

Per [`pdf-processing.md`](../../rules/pdf-processing.md): spawn **one subagent per document**
in a fresh context. Each reads **only its own file**, writes a ~300-word note to
`notes/voice/<name>.md` against the fixed schema below, and **returns only the filename**.

The main session then reads only the notes. Loading a whole corpus at once has repeatedly
forced a session reset after partial work was already lost.

The rest: https://github.com/pedrohcgs/claude-code-my-workflow/blob/HEAD/.claude/skills/voice-profile/SKILL.md
