Skip to main content
The pipeline is the hero workflow. It takes a card from research to publication: ground it in your inspiration outliers and brand voice, draft on-brand copy in your own voice, produce the media, assemble the card, and schedule or publish.
Your agent drafts the copy, grounded in your real context (your outliers, brand voice, and past posts), and you approve it before anything goes live. ContentHero supplies the grounding and the method.

Cards, posts, and spaces

Three words carry the whole model, and they nest.

Space

A board. Its columns are stages, which you shape to your own process.

Card

One piece of work: title, script, notes, cover, and the media on it.

Post

How a card reaches one platform. A card holds one post per platform.
So a card is the thing you make, and its posts are the ways it goes out. Publishing a card to Instagram and YouTube means one card with two posts.

The five phases

1

Ground

Pull the context that makes a draft on-brand instead of generic:
  • list_content (scope with brandKitId) then get_content on the top few, for hook archetype, structure, pacing, and CTA style. Results are ranked by outlier score, so a small account’s breakout still surfaces.
  • get_brand_kit for tone, vocabulary, and banned words.
  • get_tracked_account on one of your own tracked profiles, for how your own posts actually performed.
  • search_brand_knowledge for the brand’s stance on the topic.
2

Draft (host LLM)

Synthesize a concept, hook, and caption that emulate the user’s proven patterns in the user’s own voice. The user’s own top posts win over a stated profile. Present the draft for approval. Do not invent copy that is not grounded.
3

Produce

Generate the media with the generate tools. A common chain is generate_image for the key frame, then its output id into generate_video as the start frame, grounded in the brand’s visual style.
4

Assemble

create_card with the approved title, then one update_card call carrying the caption, the assets, and the posts for each platform. Put the outlier posts the idea came from in assets by contentId, so they show on the card’s Inspiration tab, and when you start the edit, pass the card’s id as cardId to create_project so the new project is linked to the card in the same call and the card opens the edit in progress.
5

Publish

update_card with scheduledAt for a future slot, or publish_post to go now, only after the user confirms platforms and timing.
posts and assets are declarative. Each one replaces the whole set, so send the full list every time. Passing a single post to add a platform removes every other platform’s post. Read the card first, append, then send it all back.

What a card can hold

A card’s assets hold four kinds of thing, and each new one names exactly one reference. The same list, and the same rules, apply over MCP, the CLI (--assets), the SDK and the REST API.
An inspiration post is attached by contentId, never by its url. A permalink sent as assetUrl becomes a plain link, and assetType: "inspiration" with a url is refused. A project is linked by projectId, never the editor’s url. Naming the same thing twice in one list is refused.

Operations

Full parameters for every one of these are in the planner tool reference.

Connected accounts

A post publishes to a connected social account. List them with list_connected_accounts and pass the account id into the post’s connectedAccountId. The encrypted credentials behind a connection are never exposed through the API; you reference an account by id.

Approval is mandatory

Never schedule or publish without explicit user approval of the final content. Reads and drafts are free; publishing is gated on a yes.