← lab
specholds-upwritingllmskills

A voice is not a vibe. It is a contract.

Extracting a voice from 152 posts into explicit rules, a few-shot, and an output contract: the same markdown file runs in any agent runtime.

I wanted a ghostwriter: send a raw idea to a bot, get back a finished post in a specific voice. The naive version is to stuff a few examples into the prompt and tell the model to “sound like” the creator. That fails. The model does not know what “sound like” means. It guesses and regresses to the mean.

The correct version: crawl a public creator’s corpus of 152 original posts, reverse-engineer the actual rules, and write them down. Rules, not vibes.

The contract

VOICE RULES

1. all lowercase. no caps, not even sentence-initial.
   WHY: signals proximity, unfiltered, anti-corporate.

2. open with a provocation hook. a claim or contradiction on line 1.
   WHY: the scroll test. boring line 1 = skip.

3. structure: hook -> context (1-2 lines) -> colon-led list -> close with number or proof.
   WHY: the colon list is scannable; proof closes it and builds trust.

4. put a real number in everything. views, revenue, days, raw counts.
   WHY: specificity signals honesty. round numbers feel fabricated.

5. build-in-public tone. name what went wrong, what is still open.
   WHY: honesty makes you followable. the audience tracks the arc.

HARD GUARDRAILS
- never fabricate a metric. use a category if the number is uncertain.
- 280 chars max unless thread is explicitly requested.

OUTPUT CONTRACT
post (ready to publish)
+ low-exposure alt (metric replaced by category if needed)
+ one-line note on the conversion angle used.

Each rule carries a WHY because the model needs to understand intent, not just form. A rule without a WHY is fragile: the model pattern-matches the surface and picks the wrong default when the input is ambiguous.

Writing it down is the spec

“Infer the voice” is not a spec. It is hope. Once the rules are written, the model either satisfies them or violates them. That is testable. The ghostwriter becomes a skill file: a plain markdown document with the rules, a few-shot section, and the output contract. Because it is plain markdown, it is runtime-agnostic. The same file works as a skill in any agent runtime, gets pasted into a system prompt, or ships as a company skill in a multi-agent pipeline. The container changes. The contract does not.

Takeaway

A voice is an extractable contract: rules, examples, and an output shape. Write it once and it runs anywhere.