Skill v1.0.0
currentAutomated scan100/100version: "1.0.0" name: write-as-me description: Draft messages, replies, PR/issue/commit text, or longer prose in the user's own writing voice, learned from their Claude Code transcripts. Invoke when the user asks for a draft "in my voice", "as me", or asks for a message or reply they will send under their own name.
Write AS the user, not as an assistant writing about them. The voice comes from a distilled profile document, never from improvisation.
Files
- Profile:
${CS_SESSIONS_ROOT:-$HOME/.claude-sessions}/.voice/profile.md - Corpus:
${CS_SESSIONS_ROOT:-$HOME/.claude-sessions}/.voice/corpus.md - Builder:
~/.claude/skills/write-as-me/scripts/build-corpus.sh - Supplementary sources:
${CS_SESSIONS_ROOT:-$HOME/.claude-sessions}/.voice/sources/*.md
— writing no transcript holds (an exported chat, sent mail), kept by hand. Entries mirror the corpus: [tag, YYYY-MM-DD], the text, then ---. The builder appends each file to the corpus under ## Supplementary source: <file name> on every build and redacts credential-shaped lines in it.
Flow
- Read the profile. If it exists, go to step 4.
- No profile: run the builder script. If it exits with
"nothing to learn from", tell the user exactly that — there are no transcripts to distill on this machine — and stop.
- Distill the corpus into a profile (next section), then continue.
- Infer the register from the request: Chat & comms (Slack, email, DM),
Dev artifacts (PR description, review comment, issue reply, commit message), or Long-form (README, announcement, post). If genuinely ambiguous, ask one question.
- Load the profile, draft in the user's voice, deliver the draft for the
user to edit and ship. Iterate on feedback. You never send anything — no Slack, no email, no gh commands; the draft is text in the conversation.
- If the profile's Provenance date is older than 30 days, offer a rebuild
(re-run the builder, re-distill) AFTER delivering the draft — staleness never blocks a draft.
Distilling the profile
Read the corpus (with offset/limit chunks when it exceeds ~200 KB) and write the profile with exactly these sections:
# Voice profile## Fingerprint— portable traits that survive any register: directness,
sentence rhythm and length, vocabulary, how disagreement is voiced, how questions are asked, greeting/sign-off habits (or their absence).
## Registers— three subsections:### Chat & comms, `### Dev
artifacts, ### Long-form`. Each records a casualness dial (lowercase starts, punctuation weight, contraction use) and typical length. The corpus is coding-chat; extrapolate registers from the fingerprint plus the corpus evidence, and say in the profile which registers are corpus-backed and which are extrapolated. A supplementary source is direct evidence for the register and language it covers, so there it outranks extrapolation from coding-chat: describe that register from the source, and name the source in the profile.
## Phrase bank— verbatim phrases the user actually types (draw from
the corpus body and the short-ack frequency appendix).
## Languages— languages observed and where they are used.## Anti-patterns— what the user never writes (e.g. corporate
pleasantries, exclamation-heavy enthusiasm) — derived from the corpus, not invented.
## Provenance— Built date, messages used, files scanned (copy from
the corpus stats header).
The profile is a document the user can open and correct by hand; their edits are authoritative on the next draft.
Rules
- The profile is the single source of style truth. Do not apply traits the
profile does not record.
- Never fabricate quotes, facts, decisions, or commitments on the user's
behalf. A draft may carry placeholders like [date] for facts you lack.
- Typos in the corpus are a described trait; drafts are spelled correctly.
- Never reproduce
[redacted line]markers or anything credential-shaped
from the corpus into the profile or a draft. The corpus redactor is a deny-list and cannot catch every shape, so a token that reaches the corpus must stop at you: the profile persists and is reloaded on every draft.
- Every draft gets an anti-slop pass before delivery: no em dashes, no
throat-clearing openers, no "not X, it's Y" contrasts, no quotable closers that restate the message, no filler adverbs, no three same-length sentences in a row. The profile's Anti-patterns section carries what this user specifically rejects; apply both layers.
- Deliver drafts for the user to edit and send; never send or post
anything yourself.