ONE API, EVERY CHANNEL

Every channel is a call.

A campaign in GenieOS is one object, spawned by one call. Your agent hands over a brief and an objective, and back comes the email, the social variants and the landing page, drafted on brand, bound to a column in your own database and held at your checkpoint. Below is the same Fueld launch composed four ways, and the four are equivalent by design.

any-agentmcp
// your agent, wherever it lives, calls the tool directlyspawn_creation({  brief: "Launch: Your health data finally has a home",  slug: "the-directory",  channels: ["email", "social", "page"],  objective: {    table: "users",    column: "activated_at",    target: "+12% in 30 days"  }})// → cre_0142 · 9 artefacts · awaiting your checkpoint
The surface
  • spawn_creationOne brief and one objective in. A full campaign out, held at your checkpoint.
  • read_creationThe whole campaign as data: status, artefacts, lineage and the objective it is bound to.
  • list_creationsEvery campaign in the workspace, filterable by status.
  • set_creation_defaultsThe standing defaults every new campaign inherits: channels, tone, checkpoint policy.
  • approve_creation_strategySign off the strategy behind a campaign before anything is made from it.
  • decide_approvalApprove or reject anything the loop is holding, without leaving your terminal.
IN-APP · JUDGEOne call made all of this. Whether it is good is a looking job.
Campaign showcaseFueld

CAMPAIGN SHOWCASE

Your health data finally has a home

Fueld’s Directory brings every health source, provider and metric into one place — connected, contextualised, and ready the moment you need it.

PrivateInternalPublic

by Fueld

The emailThe landing pageThe social posts

Made with Genieos

Your health data finally has a home. One place for every metric, every provider, every insight. The Fueld Directory is live.

What the call actually makes.

spawn_creation returns an id in seconds, but the thing that id names is not JSON. It is a campaign: subject lines, a native variant per social network, a landing page and the imagery to carry them, nine artefacts drafted from the brand and strategy on file, every one bound to the objective your agent passed in.

Your agent can read every field of that object. None of the fields say whether the launch email is any good, and no schema ever will. So the app keeps one view of the whole campaign, and it is also the view you hand to the colleague without a terminal.

compose_template({
  brief: "Trial ending in 3 days",
  audience: "trialists, day 11 of 14"
})
Email for developers

Email, from brief to inbox.

The defining call is compose_template: a brief in, a rendered, on-brand email out, with send_test and send_transactional to take it the rest of the way through your ESP or ours. Sequences, segments read from your own columns and the full template surface carry their own page.

create_social_post({
  angle: "the directory launch",
  networks: ["linkedin", "x", "instagram"]
})
Social for developers

Social, drafted once, everywhere.

The defining call is create_social_post: one angle in, a native variant per network out, with schedule_social_post and publish_social_post to put them on the calendar or straight out the door. Analytics come back through the same surface, per post and per network, on the social page.

compose_page({
  brief: "Your health data finally has a home",
  slug: "the-directory"
})
Pages for developers

Pages, previewed and live.

The defining call is compose_page: a brief in, a landing page out, previewed, on palette and ready for publish_page. create_short_link gives every send an attributable URL, which is where measurement starts. The full page surface lives one level down.

send_transactional_sms({
  template: "delivery-code",
  to: "contact_8291"
})
Messages for developers

Messages, when the inbox is too slow.

The defining call is send_transactional_sms: delivery codes, shipping updates and sign-in alerts, already templated and sent in one call. The kit is browsable from code and every delivery is listed where your agent can read it, on the messages page.

When this happens
  • WhenA PR merges with feat:

    ThenLaunch posts drafted for every network, held for approval

    • create_social_post
    • list_pending_approvals
  • WhenYou tag a release v*

    ThenA changelog email to everyone still on the previous version

    • compose_template
    • enroll_in_sequence
  • WhenA feature flag reaches 100%

    ThenAn announcement to the cohort that did not have it

    • create_list
    • compose_template
  • WhenA new docs page merges

    ThenA social post, and a line in the next newsletter

    • create_social_post
  • WhenA Sentry issue crosses your user threshold

    ThenA transactional email to exactly the affected users, status and ETA

    • create_list
    • send_transactional
  • WhenThe fix deploys

    ThenA follow-up to the same list: fixed, and here is what happened

    • send_transactional
  • WhenA status-page incident opens

    ThenSMS to enterprise contacts, a post to X and LinkedIn

    • send_transactional_sms
    • trigger_social_event
  • Whenusers.activated_at still null after 7 days

    ThenA nudge sequence, segmented on your own column

    • enroll_in_sequence
  • WhenA trial ends in 3 days

    ThenEmail and SMS, one sequence

    • enroll_in_sequence
  • WhenSomeone hits their tenth campaign

    ThenA congratulations email, and the upgrade prompt

    • send_transactional
  • WhenYou set one objective, once

    ThenThe loop creates, launches, measures, learns and goes again, holding at your checkpoints

    • spawn_creation
    • decide_approval
  • WhenA weekly cron fires

    ThenLast week's numbers read, the strategy patched from what worked

    • get_social_post_analytics
    • patch_marketing_strategy

Where it runs

  • Claude Code
  • Cursor
  • VS Code
  • Windsurf
  • Zed
  • GitHub
  • your own backend, via SDK
  • cron

You already have an agent in your editor. Give it your marketing stack and it will ship the launch post for the feature it just helped you write.

Your next campaign is one call away.