---
name: founder-ghostwriter
description: Ghostwrite LinkedIn posts, X posts, replies and bylines in a specific founder's or executive's voice, grounded only in things they actually said. Use when drafting any post for a named person, setting up a ghostwriting system for a new client, or revising a draft after the person or an editor gives feedback. Requires the slop-edit skill.
---

# Founder Ghostwriter

A system for writing as a real person without putting words in their mouth. It is built around one rule:

> **No anchor, no post.** If an idea can't be traced to something the person said or wrote, it is our opinion wearing their name.

The system has three parts: a per-person **reference set** (files `01`–`08`), a **drafting pipeline** with gates and fresh-context readers, and a **feedback loop** that turns every correction into a rule the same session.

Required skill: **slop-edit** (lint script and construction pass). Read its `SKILL.md` before Step 6.

---

## Part 1. Set up the reference set (once per person)

Create a folder for the person (for example `ghostwriting/<person>/`) with these files. Templates are in `references/`.

| File | Holds |
|---|---|
| `00-README.md` | Index, who approves what, and load order. |
| `01-voice-corpus.md` | Their real writing, verbatim, split by source and era, with measured metrics. See `references/voice-corpus-method.md`. |
| `02-persona-constraints.md` | Per-surface rules: personal account vs company page vs byline vs replies. Topics that are off-limits, embargoes, contract terms, who signs off each surface. |
| `03-banned-patterns.md` | Project bans on top of slop-edit's defaults. Starts empty; grows from call-outs. |
| `04-anchor-bank.md` | Verified facts (with source and date), their quotable positions (verbatim, with meeting/date), a **verification queue** of claims that may not be used until confirmed. |
| `05-feedback-ledger.md` | Numbered entries: every draft accepted or rejected, with the reason. |
| `06-rewrite-pairs.md` | Before/after pairs from real edits: our draft line → their rewrite. The most valuable file once it has five entries. |
| `07-reader-briefs.md` | The fresh-context reader prompts for this person (Step 7). |
| `08-callouts.md` | Every correction from the person or editor, in their words. Format in slop-edit's `references/callouts-template.md`. |

**Calibration disclaimer.** Until the person has rewritten at least one draft by hand, every calibration is a hypothesis. Say so in every delivery: "Calibration: N real edits so far. Expect one revision round."

---

## Part 2. Drafting pipeline (every batch)

### Step 0. Mandatory loads
Read `08-callouts.md` and the last ten entries of `05-feedback-ledger.md` before writing anything. If a brand style model exists for this account (see the reference-style-model skill), load it now.

### Step 1. Route
Decide the surface: personal LinkedIn, company page, X, reply/comment, byline, blog. Load the matching section of `02-persona-constraints.md`. Voices do not cross surfaces: a company-page style never overwrites a person's personal voice, and the reverse.

### Step 2. Anchor gate
For each planned post, write the anchor first:
- **Opinions** need a verbatim, dated quote from the person (call transcript, their post, their email).
- **Facts** need an anchor-bank row with source and a verbatim excerpt.
- **A call is a source of the person's opinions about their industry, not a source of subjects.** Test before drafting: could this post have been written by someone who has never been on a call with this company? If it's about internal funnel, reach or cadence, it's not a post.

No anchor → drop the post or ask the person one question to get one.

### Step 3. Format worksheet
Pick the container from the person's corpus, not from a template:
- Which of their real post shapes does this match? (See the "shapes" table in `01`.)
- Target length from their real posts on this surface (LinkedIn personal posts that perform tend to sit around 700–1,600 characters; check the person's own range).
- Opener type. Story and contrarian openers tend to beat flat statements on LinkedIn; a flat fact gives the reader nothing to agree or argue with. Verify current platform data before quoting numbers to a client.
- One idea per post. A second argument goes in a separate post or a carousel.

An approved post is a guide to the voice, not a format to fill in. Don't reuse an approved skeleton within the same batch.

### Step 4. Draft in isolation
One drafting agent per post, each in its own clean context, run in parallel. The brief for each contains: the anchor, the format worksheet, `01` (voice corpus), `03` + slop-edit bans, `06` rewrite pairs, `08` call-outs. Drafting rule:

> Take the argument from the calls, the sentences from their human-written prose, the citation discipline from their best published pieces. Never copy sentences from AI-assisted pieces they've published; those are the bar to clear, not the voice to copy.

**Quarry, don't compose.** Prefer real transcript sentences, lightly cleaned, over generated connective tissue. Their sentences are typed, not composed: keep the plain connectors they actually use ("Sure,", "Like,", "of course", "etc.").

### Step 5. Gates A–F (on each draft)
- **A. Accuracy.** Every claim maps to an anchor-bank row. Copying a format that needs a number, without a real number, is a fabrication: kill it.
- **B. Slop lint.** Run slop-edit's `scripts/slop_lint.py` with the project's extra bans. Zero errors.
- **C. Sameness.** Compare against the rest of the batch and the last batch: no repeated opener shape, closer shape or skeleton.
- **D. Voice.** Check against `01` metrics (sentence-length range, contractions, emoji count, joke frequency, first person). If a brand style model applies, run its numbered pass here.
- **E. Humanizer.** Measured baselines: vary sentence length to match their range; no uniform paragraph lengths; no tidy repeated structure. Do not add invented personal detail to "sound human".
- **F. Sentence-subject check.** By hand, for every sentence: who does the verb? Read every heading for counts or lists of deliverables.

### Step 6. Construction pass
Run slop-edit's construction pass (`references/construction-rules.md` in that skill) on every sentence.

### Step 7. Fresh-context readers
Spawn each reader as a separate agent in a **clean context**. Its brief contains **only**: the person's verbatim posts from `01`, the ban list, `06` rewrite pairs, and the drafts. **It never sees the anchors or this skill.** (A reader that knows the intent will forgive the text.)

Minimum two readers, plus one persona reader where it fits:
1. **Cold reader.** "Here are N real posts by this person and N drafts. Which drafts would you not believe they wrote? Quote the lines and say why."
2. **Hostile expert.** "You are a hostile [domain expert, e.g. security researcher / clinician / CFO] reading this post. Find every uncited claim, overstated effect, wrong term, or line you'd screenshot to mock."
3. **Persona reader** (optional). The target reader: "You are a [buyer persona]. Which lines read as a pitch? Which tell you something you can check?"

Readers run on the **final** text, after revisions, not the draft before. Score each post 1–10 per reader. Don't deliver a post below 7/10 on the second read without saying so.

### Step 8. Deliver
Use `references/delivery-template.md`. Each post carries: surface, approver, the text, its anchor(s), a claims check (claim → source → verified/unverified), reader notes, visual (if any), open items. The batch header states the calibration disclaimer, what was deliberately left out and why, and scheduling notes.

---

## Part 3. Feedback loop

When the person or an editor reacts to a draft:
1. **Change only what they flagged.** Leave approved lines alone.
2. **Log it the same session.** Add a row to `08-callouts.md` (their words verbatim) and an entry to `05-feedback-ledger.md` (what was rejected/accepted and why).
3. **If they rewrote a line, add the pair to `06-rewrite-pairs.md`.** This is the strongest calibration signal you will get.
4. **Promote recurring patterns.** Flagged twice → lint rule (`--extra-bans`) and a line in `03`.
5. **Sync siblings.** If several skills write for the same client (founder posts, company page, blog), copy the new rule into each in the same session.
6. **Accuracy limits.** If you can't verify a detail from what you already have, cut it. Don't plan on the person checking it for you.

### Why a ban list alone doesn't converge
If drafts keep failing on different phrases each round, the problem is upstream: the positive corpus is too thin, you're composing from briefs instead of quarrying their speech, or every gate is the same model checking itself. Fixes, in order: get one post rewritten by the person by hand; ask them three questions and draft from the answers; add more real writing to `01` (newsletters, long-form, transcripts); shrink the batch and send two variants of each post.

---

## Files

- `references/voice-corpus-method.md`: how to build and measure `01`.
- `references/file-templates.md`: starter content for `00`–`08`.
- `references/reader-briefs.md`: copy-paste briefs for the fresh-context readers.
- `references/delivery-template.md`: the per-post and batch delivery format.
- `references/linkedin-notes.md`: platform notes and cross-account sequencing (re-verify numbers before quoting them).
