Marketing Prompt Hub
All posts
Published · 9 October 2026 · 11 min read · Agent build

A content-repurposer agent: one post to eight, on a schedule

Most repurposing tools summarize. The useful ones extract, and that difference is the whole build.

What this post covers
  1. What changes when you put a ledger in the middle
  2. The folder layout
  3. The ledger prompt
  4. The render prompt
  5. The eight outputs, and which ones actually survive
  6. Scheduling it without building a slop machine
  7. The failure modes I hit
  8. The free version of this
  9. Where the Hub fits

Here is the real deal. A content repurposing agent is not a machine that rewrites your blog post eight ways. It is a machine that reads one piece of source material, pulls out the handful of things in it that are actually true and specific, and then writes eight short artifacts that each do a different job with those things. The rewriting is the easy part and it is not where the value is. The extraction is where the value is, because that is the step that stops all eight outputs from independently inventing the same plausible nonsense.

The usual take on this is wrong in a specific way. Every "turn one post into 20 assets" workflow I have tried, including the first two I built myself, treats the blog post as the input to each channel. So the agent summarizes the post for LinkedIn, summarizes it again for the newsletter, summarizes it again for a video script. Eight summaries of the same thing read like eight summaries of the same thing. Worse, each pass is a fresh chance to drift: by output six the agent has rounded "I ran this for a few weeks" into "after a month of testing," and nobody caught it because nobody reads output six carefully. The fix is an intermediate artifact. The agent builds a claim ledger from the source first, then every channel writes from the ledger, never from the post. One extraction, eight renderings.

What changes when you put a ledger in the middle

Summarizer repurposingExtraction repurposing
Input to each channelThe full postA fixed claim ledger
DriftCompounds per outputCaught once, at the ledger
VoiceFlattens toward genericInherits from your voice file, applied once per render
Review costRead eight outputs closelyRead one ledger closely, skim eight
Failure modeConfident invented detailVisible [MISSING: REAL NUMBER] holes
Reuse across runsNone, each run starts coldLedgers accumulate, dedupe becomes possible

The last row is the sleeper. Once ledgers are files on disk, you can ask the agent "have I used this hook before," which is the thing that keeps a scheduled content agent from posting the same insight every Tuesday forever.

The folder layout

This is the whole project. No database, no tool, just files the agent can read and write.

repurpose/
├── CLAUDE.md             # how the agent behaves, read every run
├── voice.md              # 15 lines max. rules, not vibes.
├── never.md              # claims/topics/phrasings that are off-limits
├── history.md            # append-only log: date, source, hooks used
├── channels/
│   ├── linkedin.md       # one brief per channel: job, length, shape, bad example
│   ├── forum.md
│   ├── newsletter.md
│   ├── video-spine.md
│   ├── carousel.md
│   ├── email-ps.md
│   ├── faq-snippet.md
│   └── replies.md
├── source/
│   ├── _done/            # processed, agent ignores
│   └── 2026-10-09-agent-post.md
└── out/
    └── 2026-10-09-agent-post/
        ├── _ledger.md    # built first, reviewed first
        ├── _review.md    # flags, holes, what the agent refused to write
        └── linkedin.md ... replies.md

The channel briefs are the part people skip and they are the part that matters. A brief that says "write a LinkedIn post, professional tone, 1300 characters" produces LinkedIn slop. A brief that says what the post is for, plus one example of the failure you keep seeing, produces something usable. Mine look like this:

# channels/forum.md

JOB: answer a question someone actually asked, in a thread, as a peer.
Not promotion. If it reads like promotion it gets removed and I deserve it.

SHAPE
- Open with the specific situation, not a thesis.
- One concrete thing I did, with the detail that makes it checkable.
- One thing that did not work.
- Link only if the link is the answer. Otherwise no link.

LENGTH: 120-200 words.

BAD (do not produce this):
"Great question! I've found that repurposing agents can be a game-changer
for content teams. Here are 5 tips..."

GOOD SIGNAL: a reader could disagree with a specific sentence.

The ledger prompt

Run this first, every time, before any channel output exists. Paste it into CLAUDE.md or keep it as its own step.

Read the single newest file in source/ that is not in source/_done/.
Build out/<slug>/_ledger.md. Do not write any channel output yet.

Extract ONLY what is in the source. For each item give:

ID       c1, c2, c3...
TYPE     claim | number | story | definition | opinion | artifact
TEXT     the claim in one sentence, in plain language
QUOTE    the exact sentence(s) from the source it came from
STATUS   supported | thin | unsupported

Rules, in priority order:
1. If a number appears in the source, copy it exactly. Never round,
   never convert "a few weeks" into a figure.
2. If a channel brief will obviously want a number the source does not
   have, add an item with TEXT describing the gap and STATUS unsupported,
   written as [MISSING: REAL NUMBER - <what is needed>].
3. If something is my opinion, TYPE it opinion. Do not promote an opinion
   to a claim by adding hedging words.
4. Mark STATUS thin for anything I asserted once with no example. Thin
   items may be used in at most one channel output.
5. Check never.md. Anything it forbids gets listed in a REFUSED section
   with the reason, not silently dropped.

Then list: the 3 strongest hooks in this source, and for each, whether a
similar hook appears in history.md (quote the matching line if so).

Stop. Wait for me to approve or edit the ledger.

The stop is not politeness. The ledger is the only thing in this build I read word by word, and reviewing it takes about two minutes. If the agent barrels past into eight outputs, I am back to reviewing eight outputs, which is the problem I built this to avoid.

The render prompt

Once the ledger is approved:

Using ONLY out/<slug>/_ledger.md, voice.md, never.md and each file in
channels/, write one output per channel into out/<slug>/<channel>.md.

Hard constraints:
- Every factual sentence traces to a ledger ID. Append  <!-- c3 -->  at the
  end of any sentence carrying a claim, number or story.
- Do not open the source file again. If you need something not in the
  ledger, write [NOT IN LEDGER: <what you wanted>] and continue.
- Items with STATUS thin: usable in one output total, your choice which.
- Items with STATUS unsupported: pass the [MISSING: ...] marker through
  verbatim. Never fill it with an estimate, a range, or "significant".
- No em dashes. No "unlock", "supercharge", "game-changer", "in today's".

Then write out/<slug>/_review.md:
- every [MISSING] and [NOT IN LEDGER] marker, with the file it is in
- which outputs you would not publish, and why
- which ledger items you did not use, and why
- one line to append to history.md (date, source slug, hooks used)

The comments look fussy. They are the cheapest fact-check I have found: I skim an output, hit a sentence that feels too good, click the comment, and I am looking at the exact source quote in half a second.

The eight outputs, and which ones actually survive

Be honest about this with yourself before you build it, because the fantasy version of this agent gives you eight publishable assets and the real one does not.

OutputJobSurvives review
LinkedIn narrativeone idea, one example, no listicleusually
Forum / community answerpeer answering a real questionusually, with edits
Newsletter sectionthe update log entry, no re-pitchusually
Reply-ready comments (3)useful on threads about this topicoften, pick one of three
Email P.S.one line into an existing sendoften
FAQ / sales snippetthe honest answer to the objectionsometimes
Carousel / slide outlinestructure only, never finished slidessometimes
Video / audio spinebeats and the opening 15 secondsrarely, and that is fine

The agent's job is not to make eight good things, it is to make eight cheap things so that throwing away four costs you nothing. Before this build, writing a LinkedIn version of a post I had already written felt like a chore I would skip. Now the version exists, badly, in a file, and editing something bad into something fine takes a fraction of the will that starting from nothing takes. That is the actual win and it is a psychological one, not a throughput one.

Scheduling it without building a slop machine

Here is the rule that makes a scheduled agent survivable: the agent runs on a schedule, it does not produce on a schedule. If there is no unprocessed file in source/, it writes nothing, logs nothing, and tells me nothing. Agents that must emit output every run will emit filler every run, and the filler is indistinguishable from the real thing at a glance, which is how a content library rots.

The scheduling itself is boring and should stay boring:

# CLAUDE.md, schedule section

TRIGGER: weekdays, 07:00 local.

1. Look in source/ for files not in source/_done/.
2. If none: exit silently. Write nothing. Do not "check in".
3. If one or more: take the oldest, build the ledger, then STOP and
   notify me with the ledger path and the 3 hooks.
4. Only render channels after I approve. Approval is me editing the
   ledger or replying "render".
5. After render: move the source into source/_done/ and append the
   history.md line from _review.md.
6. Never process two sources in one run.

Point six matters more than it looks. The first scheduled version I wrote would find three backlogged posts and chew through all of them, and I would open my laptop to 24 files and review precisely none of them. One source per run, always.

The failure modes I hit

Voice files get too long and stop working. My first voice.md was two pages of nuance. Outputs got blander, not sharper, because the model was averaging over a long list instead of obeying a short one. Fifteen lines of actual rules ("no em dashes", "name the flaw in anything I recommend", "never open with a question") beat two pages of description. If you cannot defend a line as a rule something could violate, delete it.

The dedupe problem is real and history.md only half solves it. Across runs, the agent gravitates to the same hook shape, because the same hook shape is genuinely the strongest one in my material. Logging used hooks helps the agent notice, but it will still cheerfully write a near-duplicate and label it fresh. I check the last five history.md lines myself. That is a manual step I have not managed to automate honestly.

Carousels and video spines tempt the agent into inventing structure. Short-format briefs have the least room for evidence, so that is exactly where unsupported claims sneak in. Both of those briefs now carry an explicit line: a slide or a beat with no ledger ID is a slide or a beat you delete.

Channel briefs rot silently. A brief written for how LinkedIn felt six months ago keeps producing confidently wrong-shaped posts. When an output stops landing, suspect the brief before the model.

The free version of this

If you want to try the extraction-then-render pattern before you build anything scheduled, the content Skill in the four free Claude Skills is the right starting point, and the free content prompt at /free/ pairs with it: run the content prompt on one existing post, then hand its output to the Skill as the ledger. No email gate on either, nothing to sign up for. You get maybe 70 percent of what I described above, by hand, in one sitting, which is plenty to find out whether this fits how you work.

Where the Hub fits

The honest version: everything structural in this post is here, in full, for free. The ledger prompt, the render prompt, the folder layout, the scheduling rules. You can build this today without paying me anything, and if you do, I would rather you did that than bought something you did not need.

What the paid library adds is the boring volume. The agent pack at $99 is five agent blueprints with the channel briefs already written and pressure-tested, including the ones I did not reproduce here, plus the never-lists and the voice-file formats that took me several bad versions to get short enough to work. It is a time trade, not a capability trade. The $349/yr Full Suite folds that into the whole prompt library if you are running a team and need everyone working off the same briefs instead of eight people's private prompt graveyards.

If the free Skills and prompts cover what you are doing, use the free material. That is not false modesty, it is the deal: four genuinely useful Skills and four genuinely useful prompts, no email required, and you only pay when you want the depth.

Get the 4 free Claude Skills.

Voice Extractor, Competitive Teardown, SERP-Informed Brief, Performance Readout. Installable Skills, ready to drag into Claude Desktop or Claude Code. No email gate.

Open the Skills page