Campaigns and the canvas
A campaign turns one goal into a set of dated, briefed pieces across your channels, laid out on a canvas your whole team can arrange, comment on, and generate from. Campaigns are the first item in the sidebar, and where most work starts.
Start a campaign
Three ways in from New campaign:
- Pick a direction. The create screen proposes three campaign directions the moment it opens, read from your engine: voice, audiences, positioning. Pick one and Build it now assembles a two-week campaign: 8 to 14 pieces across your connected channels, spread over weekdays, each carrying a working brief. New directions re-rolls the three.
- Enter a prompt. Type the goal ("What are we launching?") and the same two-week build runs from your words. Navigating away doesn't cancel it; the canvas shows progress until the build lands.
- Start blank. An empty canvas with one untitled document. No model call, no quota. Sketch first, structure later.
The assistant can also plan a campaign in chat: it gathers the goal, timing, and channels one question at a time, and the plan arrives as a campaign card you Save (a draft) or Build. Plans cap at 20 pieces, and building is all-or-nothing: a failed build leaves no partial state, and a build that would blow the month's generation quota is refused up front with exact numbers.
The canvas
Each campaign opens as a full-screen board, with the app sidebar replaced by a layers panel listing every piece.
- The prompt sits at the center, and pieces radiate around it in rings. Edit the prompt and every ungenerated piece re-briefs; the editor shows how many before you save.
- Pieces are cards: channel, title, and state (planned, not generated, generating, draft, scheduled, published). Drag them anywhere, multi-select with shift-click, or double-click empty canvas to add one.
- Derive pulls the next piece off any card: hover it, drag the + handle on a side, pick a channel, and the new piece lands connected by an edge, its brief naming the source. This is how the blog post becomes the launch-day thread.
- Edges connect related pieces. Draw them between cards, bend them at a midpoint, double-click a bend to remove it.
- Sections, text, and sticky notes hold the thinking: draw a tinted region around a week's work, drop a label, park half-formed ideas on stickies. Convert a sticky into a content piece and the note becomes its brief, right where it sat.
- Media prompt cards put an image or video prompt on the board and generate it in place. See the media studio.
Keyboard: V move, H hand (pan), Escape cancels, Delete removes selected board furniture, ⌘R opens the selected layer's options. Zoom runs 30% to 160%, anchored at the cursor.
Working together
The board is live for the whole workspace: teammates' cursors move with their names attached, and presence avatars stack top-right.
- Comments pin to the exact point they're about. Threads reply and Resolve on the board, and every pin shows its author. A note about the plan stays on the plan: canvas comments don't migrate into the generated piece's editor.
- Assignment: give any piece an owner from the layers panel. Ownership carries through to the generated content.
- Roles: everyone in the workspace starts as an Editor on a canvas; narrow individuals to Commenter or Viewer. Owners and managers always keep edit.
- Sharing outside the workspace: invite by email (View, Comment, or Edit) or open a link (public links cap at Comment; a public canvas is never publicly editable). External editors drag, sketch, and comment like anyone else, while generating, building, and scheduling stay with workspace members.
Generate
Every ungenerated card has a Generate button, and Generate all (n) in the toolbar drafts each remaining piece in turn (and runs any pending media prompts). Generated pieces ride the normal Guard, editor, and publish pipeline like anything else. Nothing generates or publishes on its own.
Schedule
Schedule opens a month view built for one job: drag a piece to a day. Dragging only moves the date.
- Suggest dates spreads undated pieces across free weekdays, skipping days already taken.
- Everything else the workspace ships that month renders greyed underneath, so campaigns don't collide.
- Generate all & schedule (n) drafts what's missing and queues each piece at its slot; a checkbox limits it to already-generated pieces. Nothing that fails the Guard auto-publishes.
- Scheduled pieces stay editable from their content page until they publish. Documents, press releases, and custom channels are not schedulable.
A campaign piece reaches the main calendar only once it is generated and scheduled — until then it lives on the campaign's canvas and schedule page, where the plan can move freely without cluttering the workspace calendar. Once there, it is color-tagged by campaign with a filterable legend, and dates stay in sync both ways.
Performance rollup
The Analytics Content tab has a campaigns table: pieces, generated counts, and lifetime impressions, engagements, and engagement rate across everything each campaign fanned out. The campaigns library shows each canvas as a live thumbnail with performance on the card, so "did the launch actually land" is a glance, not an assembly job.
Over MCP
The same flow is scriptable. quick_build_campaign is the create screen's Build it now for agents: pass a brief and it returns a building campaign immediately (the brief is the spec — "two blog posts" means exactly two blog posts; an unshaped brief gets the standard two-week plan). plan_campaign saves a plan as a draft, and build_campaign builds one: manual mode leaves each brief for generate_content, auto mode generates each piece on schedule and, with publish_status: 'ready', auto-publishes through directly connected channels, Guard-gated and manager-only. get_campaign, list_campaigns, update_campaign, and delete_campaign complete the set — deleting destroys unpublished work while published pieces survive under a "Deleted Campaign" calendar tag — and a campaign.built webhook event fires when a build lands.