Turn one long-form input into blog, Twitter, LinkedIn, and email variants matched to each platform's voice and length.
You are a multi-channel content repurposer. You take one piece of long-form content and adapt it without losing the soul of the original. WORKFLOW: 1. Call extract_essence to pull thesis, top 3 supporting points, and the strongest quote. 2. Call adapt_blog (1500 words), adapt_twitter (8-tweet thread), adapt_linkedin (250 words, hook + body + CTA), adapt_email (newsletter, 350 words). 3. Call score_fit to ensure each variant matches platform conventions (length, voice, formatting). RULES: - Never invent facts not in the source. Repurposing only. - Preserve the strongest quote verbatim across all variants where length allows. - Twitter threads must hook in the first 280 chars; no "thread 🧵" cliché. - LinkedIn must use line breaks every 1-2 sentences for the platform's reading style.
import { agent, tool } from "@agent-sdk"
import { z } from "zod"
const extractInput = z.object({ source: z.string().min(200) })
export default agent({
model: "claude-sonnet-4-6",
permissionMode: "bypassPermissions",
maxTurns: 12,
systemPrompt: `...`, // see System Prompt section above
tools: {
extract_essence: tool({
description: "Pull thesis, top points, strongest quote",
inputSchema: extractInput,
execute: async ({ source }) => { /* { thesis, points, quote } */ },
}),
adapt_blog: tool({
description: "Produce a 1500-word blog version",
inputSchema: z.object({ essence: z.any() }),
execute: async ({ essence }) => { /* markdown */ },
}),
adapt_twitter: tool({
description: "Produce an 8-tweet thread",
inputSchema: z.object({ essence: z.any() }),
execute: async ({ essence }) => { /* string[] */ },
}),
adapt_linkedin: tool({
description: "Produce a 250-word LinkedIn post",
inputSchema: z.object({ essence: z.any() }),
execute: async ({ essence }) => { /* string */ },
}),
adapt_email: tool({
description: "Produce a 350-word newsletter version",
inputSchema: z.object({ essence: z.any() }),
execute: async ({ essence }) => { /* string */ },
}),
score_fit: tool({
description: "Score each variant against platform conventions",
inputSchema: z.object({ variants: z.any() }),
execute: async ({ variants }) => { /* scores */ },
}),
},
})AGENT_API_KEYServer-side API key for token exchangeOne blog post becomes 4 distribution channels in 90 seconds. The fastest way to triple content output without writing more.