Rewrite anything in the voice of a writer you admire.
Paste an email, a memo, a launch post. Get it back the way Paul Graham would have written it: plain words, short sentences, the point up front. Measured against his real essays, not just claimed.
Same facts. Different writer.
Samples from the published eval run 2026-10-10T18-16-pg-v1-claude-fable-5-1, one per category. Inputs are synthetic or public domain; nothing here was written by a customer.
Indistinguishable is a number, not an adjective.
Every prompt or model change runs a frozen set of 120 inputs through six families of metric. Nothing ships unless all six pass. The current numbers:
2026-10-10T18-16-pg-v1-claude-fable-5-1: pg prompt v1, claude-fable-5-1, n=120. Failed: style, jury_2afc, checklist, detector. Jury: gpt-6-sol, gpt-oss:120b, claude-opus-5-5.Style embedding fail
Jury 2AFC fail
Checklist fail
Meaning preserved pass
AI detection fail
Length and format pass
Contamination caveat: PG's essays are in every pretraining set. The rewrite task (new input text, not continuation) limits regurgitation credit, and claim precision catches fabricated PG positions.
Full methodology and every definition: how we measure.
One voice live. More when they pass.
Paul Graham live
Essays, 1993 to 2024. Holdout essays from 2025 on are never used in prompts or training, so the evals test imitation, not recall.
Serving: prompt v1, model claude-fable-5-1. Voice id pg, X handle @paulg.
More voices coming request
Tell us which writer you'd want, and where to reach you when that voice passes the same gate.
One endpoint. Bring a key.
Free keys, fifty rewrites and twenty thousand words a day. Sign in with Google to mint one, then:
curl https://betterwriting.ai/api/v1/rewrite \
-H "Authorization: Bearer bw_live_..." \
-H "Content-Type: application/json" \
-d '{"voice":"pg","text":"We are excited to announce..."}'Add "stream": true for server-sent events. GET /api/v1/voices lists the roster. Errors come back as {"error","message"} with the usual status codes. Full reference.
Or make your agent write this way.
A Claude Code plugin rewrites every response and every prose file the agent writes, in the voice you pick. No account for the first 15,000 words. Set it up in one line.
claude plugin marketplace add dsiroker/betterwriting-agent && claude plugin install betterwriting@betterwriting-agent /voice pg
Or just tag the bot.
Reply to any tweet with @betterwriting as @paulg. The bot rewrites the tweet you replied to and answers in the thread, one reply per mention.