# Campaign Desk > A campaign planning desk for marketers. Enter one campaign fact sheet - goal, objective, audience, key message, proof points, KPIs, channels, dates, budget and landing URL. The browser builds a dated content calendar, tracked links and budget pacing for free and flags what the brief is missing. A paid plan writes the campaign brief and fills every calendar row; a paid draft writes any row as channel-ready copy and the browser checks it against the channel's limits and your proof points. URL: https://campaign-desk.skillsafe.ai/ API tutorial: https://campaign-desk.skillsafe.ai/api.html Derived from the agent skills @anthropics/campaign-plan (primary) and @anthropics/draft-content, from anthropics/knowledge-work-plugins (Apache-2.0). Model: gpt-terra. Runs are metered in SkillSafe credits and need a signed-in account; the calendar, tracked links, pacing, flags and exports are free. ## What the free engine does (in the browser, no AI) - Calendar on business days (Monday to Friday; public holidays are not known), in four phases: pre-launch (before the launch date), launch week (launch day plus four business days), sustain, and wrap-up (the last five business days). Rows get ids C1..Cn in date order. - What it schedules: a brief sign-off on the start date and a results readout three business days after the end; the landing page six business days before launch; a blog teaser five business days before launch, the launch post on launch day and a proof post every ten business days after launch week; an early-access email four business days before launch, the launch email, a follow-up five business days after launch and a last call two business days before the end; weekly LinkedIn, X and Instagram posts (teasers before launch, a launch-day post or thread, proof posts after); for paid search and paid social a flight start on launch day, a mid-flight review halfway through when the flight is ten or more business days, and a flight end; for PR an embargoed pitch five business days before and the release on launch day; for a webinar an invitation, a reminder the day before, the live session ten business days after launch (halfway through when that is too late) and a replay follow-up. - Dependencies: sends and ads depend on the landing page; social launch posts depend on the blog launch post when there is one. At most 36 rows; lower-priority social and proof posts are dropped first, latest first. A flag says so, the page lists every row left out, and calendar downloads from a capped calendar say "capped-36-rows" in the file name. - Tracked links for every row that drives traffic: utm_source and utm_medium by channel (blog/owned, newsletter/email, linkedin/social, x/social, instagram/social, google/cpc, facebook/paid_social, press/pr, webinar/event), utm_campaign from the campaign name, utm_content from the row id and asset. Rows dated before the landing page goes live carry no link. - Budget pacing: budget per calendar week and per business day from launch to end. - Flags (P1..Pn): an objective with no number, a weekend launch (launch-day rows move to the next Monday), fewer than ten business days of lead time for a launch or event, a campaign under ten business days, no KPIs or a KPI with no numeric target, paid channels without a budget, a budget with no paid channel, no proof points, a vague audience, no or an invalid landing URL, paid traffic with no landing page, rows sent the same day the landing page goes live, dropped rows, weeks with more than eight assets, and six or more channels in under four weeks. - Exports: calendar CSV, tracked-links CSV, an .ics calendar file (RFC 5545 all-day events), Markdown, and a campaign pack (the plan plus every row drafted in the session, one Markdown file). - Re-plan comparison: any saved run can be compared with the sheet as it is now - rows moved (and by how many days), new rows, rows gone, KPI target changes, flags raised or resolved. Rows are matched by channel and asset, not by row id, so renumbering after a date slip does not break the comparison. ## Channel limits a draft is measured against Platform limits (hard): X posts 280 characters for accounts without Premium; LinkedIn posts 3,000 characters (LinkedIn Help); Instagram captions 2,200 characters and at most 5 hashtags per post (Instagram's rule since December 2025); Google Ads responsive search ads 3-15 headlines of up to 30 characters and 2-4 descriptions of up to 90 (Google Ads Help). House guidelines (labelled as such, not platform rules): email subject 60 characters, preheader 100, email body 60-250 words, SEO title 60, meta description 155, blog 400-1,400 words, landing page 150-900 words, press release 250-700 words, paid-social headline 40 and primary text 500 characters. ## Lanes (the `task` field) - `plan` - the campaign brief: headline, summary, 1-3 SMART objectives tied to KPIs, audience (primary, secondary, pains, motivations, where reached), messaging (core message, 2-4 pillars each tied to a proof point, proof gaps), one entry per chosen channel (role, why, cadence), one entry per calendar row (title, angle, call to action, owner), success metrics carrying every KPI target plus leading indicators, budget lines within the budget, 2-4 risks with mitigations, and one response per prescan flag. - `draft` - one calendar row as a channel-ready asset: headline or subject options, body, X posts, responsive search ad headlines and descriptions, preheader, SEO title and meta description, hashtags - only the fields that channel uses - plus the call to action, every claim with the proof point it comes from, notes for the marketer, and one response per prescan flag sent with the row. Every plan row carries a "Draft this" button: the plan's core message, pillars, audience and that row's title, angle and CTA travel into the draft as the `plan` field. ## Input (every value a string) task, campaign, product, goal (launch, leadgen, awareness, event), brief (JSON-encoded: objective, audience, key_message, brand_voice, landing_url, utm_campaign, facts N1..Nn, kpis K1..Kn, channels, dates, budget, pacing, prescan_flags P1..Pn, and in the plan lane the calendar C1..Cn), item (draft only: the row with its tracked link and limits), plan (draft only, optional), extra (draft only, optional instruction), retry_note (reformat retry only). ## How the reply is checked Plan: every calendar row filled exactly once and none added; only the chosen channels planned, all of them; every KPI carried with its target; budget lines adding up to no more than the budget and none without a budget; pillar proof refs that exist; every prescan flag answered once. Draft: the row and channel asked for; every platform limit met (a breach is a disagreement, a house-guideline miss a warning); every field the channel needs filled; no URL except the tracked link; every claim tied to an existing proof point; no more than 5 hashtags on Instagram counting the caption. Both: every figure in the prose is looked up in what was sent; one that is not there is listed as unverified, which in marketing copy usually means an invented statistic. ## Limits It knows only what you type: no audience data, no benchmarks, no web search, no ad-platform or analytics connection. The model's strategy is judgement to review, not a forecast.