Install any skill in seconds. Free to start, no credit card required.
Get Started Free →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 thei
.claude/skills/pedrohcgs-voice-profile/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 104% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 6% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 80% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 6% | 0% |
/humanize 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. > Use this to write well in your own register; write the load-bearing sentences yourself.
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.
bashfind <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.
Per pdf-processing.md: spawn one subagent per document with context: fork. 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.
Per-document note schema — the same six headings every time, so the synthesis can compare:
## Lexicon words and phrases used repeatedly; words conspicuously avoided
## Rhythm typical sentence length; variance; where long sentences appear
## Openings how sections and paragraphs begin; how the paper opens
## Transitions the actual connectives used, verbatim, with rough frequency
## Hedging how uncertainty is expressed; how strong claims are made
## Quirks anything distinctive — punctuation habits, first person, humour, footnotesRead only the notes. A trait belongs in the profile if it appears across most of the corpus, not because one paper did it once. Record frequencies where you can: "'note that' appears in 7 of 9 papers; 'delve' appears in none."
Write to voice-profile.md at the repo root (allowlisted in the repo-hygiene gate). Include:
how results are framed.
than a model's default.
stops /humanize from flagging a habit as an AI tell.
/humanize reads voice-profile.md when present and respects documented preferences — a quirk you have declared deliberate is no longer a finding. Point drafting work at the profile before it writes, not after.
Pass --audit followed by a filename to compare an existing draft against the profile instead of building one:
/voice-profile --audit main.texReport, per section: distance from the profile, with concrete evidence — vocabulary outside your range, hedging denser than your baseline, transitions you do not use, sentence rhythm that has flattened. Every finding cites the profile line it violates, so it is a deduction rather than taste.
Read-only. Auto-rewriting prose degrades it and introduces new tells, and it cannot change what a detector sees. The report says where and why; the author edits.
do. Voices change; re-profile after a few new papers.
yours — the corpus must be work you wrote.
an AI-use statement, make one (/submission-disclosures).
writing-with-ai.md — readability vs provenance, and the human-readable standard/humanize — the negative direction; reads this profile when it exists/proofread — grammar and consistency, a separate lenspdf-processing.md — the one-subagent-per-document pattern| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 12,275 | 9,410 | -23% | 1 | 1 | 0% | 2,171 | 1,748 | -19% | 0 | 0 | — |
case-02 | fail→fail | 6,221 | 7,215 | +16% | 1 | 1 | 0% | 833 | 1,587 | +91% | 0 | 0 | — |
case-03 | fail→fail | 6,338 | 8,886 | +40% | 1 | 1 | 0% | 920 | 1,916 | +108% | 0 | 0 | — |
case-04 | fail→pass | 7,651 | 14,834 | +94% | 1 | 1 | 0% | 1,085 | 2,218 | +104% | 0 | 0 | — |
case-05 | fail→fail | 4,481 | 13,123 | +193% | 1 | 1 | 0% | 425 | 1,643 | +287% | 0 | 0 | — |
case-06 | pass→fail | 10,097 | 9,583 | -5% | 1 | 1 | 0% | 1,268 | 1,622 | +28% | 0 | 0 | — |
case-07 | pass→pass | 43,419 | 10,116 | -77% | 1 | 1 | 0% | 1,852 | 2,033 | +10% | 0 | 0 | — |
case-08 | pass→pass | 15,358 | 5,197 | -66% | 1 | 1 | 0% | 2,423 | 1,815 | -25% | 0 | 0 | — |
case-09 | fail→pass | 10,798 | 4,516 | -58% | 1 | 1 | 0% | 2,002 | 1,898 | -5% | 0 | 0 | — |
case-10 | pass→pass | 10,339 | 5,097 | -51% | 1 | 1 | 0% | 1,376 | 2,003 | +46% | 0 | 0 | — |
case-11 | fail→pass | 30,941 | 6,764 | -78% | 1 | 1 | 0% | 2,102 | 2,221 | +6% | 0 | 0 | — |
case-12 | fail→pass | 7,379 | 3,690 | -50% | 1 | 1 | 0% | 874 | 1,573 | +80% | 0 | 0 | — |
case-13 | fail→pass | 13,512 | 12,514 | -7% | 1 | 1 | 0% | 2,109 | 2,245 | +6% | 0 | 0 | — |
case-14 | fail→pass | 24,521 | 11,045 | -55% | 1 | 1 | 0% | 2,611 | 2,537 | -3% | 0 | 0 | — |
case-15 | pass→fail | 11,623 | 7,093 | -39% | 1 | 1 | 0% | 1,781 | 2,048 | +15% | 0 | 0 | — |
case-16 | pass→pass | 11,638 | 7,865 | -32% | 1 | 1 | 0% | 1,715 | 2,250 | +31% | 0 | 0 | — |
case-17 | pass→pass | 12,587 | 5,286 | -58% | 1 | 1 | 0% | 1,628 | 1,932 | +19% | 0 | 0 | — |
case-18 | fail→pass | 12,617 | 2,706 | -79% | 1 | 1 | 0% | 1,726 | 1,575 | -9% | 0 | 0 | — |
case-19 | fail→pass | 14,277 | 4,807 | -66% | 1 | 1 | 0% | 2,242 | 1,617 | -28% | 0 | 0 | — |
case-20 | pass→pass | 16,300 | 8,390 | -49% | 1 | 1 | 0% | 2,331 | 2,461 | +6% | 0 | 0 | — |
case-21 | pass→pass | 29,555 | 10,274 | -65% | 1 | 1 | 0% | 2,404 | 2,707 | +13% | 0 | 0 | — |
case-22 | fail→pass | 30,628 | 9,439 | -69% | 1 | 1 | 0% | 2,352 | 2,834 | +20% | 0 | 0 | — |
case-23 | fail→pass | 17,400 | 2,424 | -86% | 1 | 1 | 0% | 2,653 | 1,562 | -41% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 19 counted toward the lift figure. The other 4 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +35 percentage points is the difference between those two pass rates over the 19 comparable cases. 3 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.