Social hand-off

The StorytellerOS plugin never posts to social directly. Here's why, and how Claude routes your social requests to the right place.

The rule

There is no stos_social_*tool. There isn't one and there won't be. All social work — posts, schedules, campaigns, Trial Reels, Threads chains, YouTube Shorts, everything — routes through the Author Automations Social plugin's aa_* tools.

Why?

The split is deliberate:

  • Author Automations already covers 15 platforms (Instagram, TikTok, Threads, YouTube Shorts, Facebook, LinkedIn, X, Pinterest, Reddit, Bluesky, Snapchat, Telegram, Google Business, WhatsApp, Discord) with 22 dedicated tools. Replicating that surface in StorytellerOS would be churn.
  • It avoids a double-hop. A stos_social_post tool would call our backend, which would call AA Social's backend, which would call the platform. Two failure modes for every post. Direct AA calls skip the middle hop.
  • The two studios share pen names. Your AA Social pen name and your STOS pen name are synced — each pen name in STOS carries an aaProfileId that points at the matching AA profile. The hand-off uses that.

How the hand-off works

When you ask Claude to post or schedule, the social-handoff skill fires. It does three things:

  1. Resolves the pen name. Calls stos_pen_names_get to read aaProfileId and aaUnreachableSince.
  2. Guards.
    • If aaProfileId is null, the pen name isn't connected to AA Social. Claude stops and tells you to provision it from authorautomations.social.
    • If aaUnreachableSince is set, the AA side has flagged the pen name as unreachable (typically a social profile lost its connection). Claude warns and suggests reconnecting in the AA dashboard.
  3. Routes to AA. Calls the matching aa_* tool (e.g. aa_create_post, aa_create_campaign, aa_queue_preview) with profileId: aaProfileId.

Both plugins installed?

You need both plugins for the hand-off to work end-to-end — StorytellerOS for writing/knowledge/business and Author Automations for social. They live in the same Cowork conversation and Claude routes between them transparently.

Example end-to-end flow

You say:

Post about the launch of Curses and Currentson Instagram in Indie Annie's voice.

Behind the scenes, Claude:

  1. stos_pen_names_list()— finds Indie Annie's id.
  2. stos_pen_names_get({ id }) — reads aaProfileId + persona/voice fields.
  3. stos_titles_list({ penNameId }) — finds Curses and Currents.
  4. stos_titles_get({ id }) — pulls the synopsis, retailer links, tagline.
  5. aa_list_accounts({ profileId }) — gets the Instagram account id under that AA profile.
  6. Drafts the caption in Indie Annie's voice using the title's synopsis + persona's words_to_use / words_to_avoid.
  7. Shows you the draft for approval.
  8. On approve, aa_create_post({ profileId, content, accountIds }).

At no point does the call hit a stos_social_*endpoint. The STOS server doesn't see any of this — it only served the read-side context.

Provisioning the link

STOS doesn't auto-provision pen names on AA Social. The link is set up when you connect AA Social to that pen name:

  1. Sign in to authorautomations.social.
  2. Either map your existing AA profile to a STOS pen name (Settings → Pen Names) or create a new AA profile that matches an existing STOS pen name.
  3. AA Social fires an inbound webhook to STOS that sets aaProfileId on the matching pen_names row. The next time the social-handoff skill runs, the guard passes.

What if I want to post manually?

You always can. The hand-off is for the conversational flow — if you prefer to draft + schedule from the AA dashboard or directly via aa_* tools, nothing about this plugin gets in your way.