<!-- distributing-content -->
<!-- One Claude skill, flattened into a single markdown file. -->
<!-- To install: create ~/.claude/skills/distributing-content/ and split the FILE blocks below back out. -->
<!-- SKILL.md is everything above the first FILE heading. -->

---
name: distributing-content
description: Turns one published article into the channel assets that carry it, reading and writing a state file so openers, angles, and formats stop repeating week to week. Extracts the five reusable assets from a source piece, matches each to the format that fits it, applies a per-channel voice scrub, verifies every link resolves, and appends what went out to state.json. Use when asked to repurpose an article, write social posts from a piece, plan distribution, or turn a blog into LinkedIn posts or a newsletter segment. Do not use to write the source article (use drafting-content).
---

# Distributing Content

Every other content stage can be stateless, because each article arrives as a fresh problem. This one cannot: the model has no memory of what went out last week, so without a file to check, the same opener and the same handful of framings come back on a schedule.

## Workflow

Copy this checklist and track progress:

```
Distribution progress:
- [ ] Step 1: Read state.json
- [ ] Step 2: Extract the five assets
- [ ] Step 3: Choose formats, checked against state
- [ ] Step 4: Draft, then scrub per channel
- [ ] Step 5: Verify every link
- [ ] Step 6: Append to state.json
```

### Step 1: Read state.json

```bash
cat state.json
```

Create it when missing:

```json
{"posts": []}
```

Load the last 10 entries. Everything below gets checked against them.

### Step 2: Extract the five assets

From the source article, list:

1. The most surprising figure, with its source
2. The most concrete artifact: a file, a screenshot, a piece of output
3. The strongest opinion it takes
4. Whatever the piece admits does not work
5. Any table or chart worth reproducing

Item 4 usually makes the best post in the set and gets overlooked most often. A published admission travels further than a claim, because a claim asks the reader to take your word and an admission has already spent something.

### Step 3: Choose formats, checked against state

Pick two or three assets. Five forces posts nobody engages with.

| Asset | Format that fits |
|---|---|
| A number with a story behind it | Short post, figure in the first line, source linked |
| An artifact | Post with the image doing the work, minimal copy |
| An opinion | Text only, no visual, the claim in the opening line |
| A sequence or process | Carousel, one idea per panel |
| An admission | Text only, plainly worded, no framing device |

Check state before committing. When the last two posts were carousels, this one is not. When the last three opened on a figure, this one opens elsewhere.

### Step 4: Draft, then scrub per channel

Set the channel first, then apply `reference/voice-scrub.md`.

The pronoun rules invert between a company handle and a personal byline, and a post scrubbed for the wrong one reads wrong immediately.

### Step 5: Verify every link

Fetch each URL in each asset and confirm it resolves and points where intended.

A dead link in a live post cannot be corrected after the fact, and one pointing at the wrong company's domain is worse than dead.

### Step 6: Append to state.json

```json
{
  "source": "article-slug",
  "date": "YYYY-MM-DD",
  "channel": "linkedin",
  "format": "text",
  "opener": "the first eight words, verbatim",
  "angle": "one line describing the take",
  "asset_used": "admission"
}
```

Store the opener word for word. Paraphrasing defeats the purpose when the thing being caught is the phrasing coming back.

## Verification loop

Before handing the assets over:

1. No opener repeats a phrase in the last 10 state entries
2. No format repeats the last two entries for that channel
3. Every link fetched and confirmed
4. Every figure carries its source
5. The channel scrub matches the channel

Any failure sends the asset back to Step 3 or Step 4.

Keep a `rejections.md` alongside state: one line per thing that got sent back and why. It stops the same correction getting made twice.

## Test it

1. A source article whose last three posts all opened on a figure. The skill should open elsewhere.
2. An article written in first person, targeted at a company handle. The scrub should rewrite every singular pronoun to "we" and leave quoted speech alone.
3. A reference article with one angle. The skill should produce one asset, not five.

## What still needs a person

Whether the article deserves distribution at all. Some pieces are reference material that should sit and rank, and pushing them through a channel pipeline produces posts nobody engages with while diluting the ones that matter. This skill will build assets for any article handed to it, including the ones that should not have been.


---

## FILE: `distributing-content/reference/voice-scrub.md`

Save this block at `~/.claude/skills/distributing-content/reference/voice-scrub.md`

```markdown
# Voice Scrub

## Contents
- Channel 1: company handle
- Channel 2: personal byline
- Rules for both channels
- The last check

Set the channel first. Every rule below depends on it.

## Channel 1: company handle

The account speaks as the organization, so first-person singular comes out.

| Found | Rewrite to |
|---|---|
| I / I've / I'd / I'm | we / we've / we'd / we're |
| my / me / mine | our / us / ours |
| In my experience | In our experience, or: across the accounts we run |
| I tested | We tested |
| My take | Our read |
| I haven't seen | No sign of it in our accounts |

**One exception.** A direct quote from a named person keeps its original pronouns. The quote belongs to them. Outside the quotation marks, back to "we".

## Channel 2: personal byline

The opposite. First-person singular is the point, and "we" gets specific or goes.

| Found | Rewrite to |
|---|---|
| We believe / We think | I think |
| Our data shows | the numbers I pulled show |
| We tested | I tested |
| We (meaning the industry) | marketers, or name the group |

A vague "we" on a personal account is the tell that a company post got repurposed without editing.

**One more distinction that matters.** Aggregate portfolio data belongs to a team even on a personal byline. "The accounts our team tracks" is accurate; "the accounts I sample" claims one person ran 60 client workspaces. Keep "I" for personal craft and personal judgement, and "we" for anything the organization observed.

## Rules for both channels

### Banned words

```
game-changer, revolutionary, groundbreaking, transformative,
disruptive, paradigm shift, must-have, leverage, unlock,
harness, elevate, supercharge, dramatically, fundamentally,
significantly, actually, shift, robust, comprehensive, holistic,
cutting-edge, world-class, best-in-class, industry-leading,
seamless, streamline, next-gen, future-proof, innovative,
real, really, fix, 10x
```

### Banned constructions

**Reframes.** "This isn't X, it's Y." "X, not Y." "We didn't X, we Y." State the positive claim and delete what comes before it.

**The balanced-number slogan.** "Two things, one platform." "Three launches, one bet." A top headline tell, hard to unsee once noticed. Name the actual things.

**Generic titles.** "What's inside." "Why it matters." "The big picture." Apply the swap test: replace the brand with any other brand, and if the title still works it is filler. Every title needs a number, a named thing, or a specific claim.

**Openers to avoid.** "In today's [anything]." "Most marketers..." as a cold open. "5 ways to..." as the first line. "And that's a wrap."

**Mechanical connectors.** Furthermore, Moreover, Additionally, That said.

### Formatting

- No em dashes or en dashes. Commas, periods, colons, parentheses.
- No ALL CAPS for emphasis.
- Exclamation marks: none, unless quoting someone.
- Bold: one or two moments, and only where the platform renders it.
- Line breaks rotate. Three single-line paragraphs in a row reads as a template.
- Every figure carries a source. A number with no attribution invites a comment asking for it and leaves no good answer.

## The last check

Read the post aloud. If it sounds like a brand while posting as a person, or like a person while posting as a brand, the scrub ran against the wrong channel. Start again with the right one.
```
