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_posttool 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
aaProfileIdthat 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:
- Resolves the pen name. Calls
stos_pen_names_getto readaaProfileIdandaaUnreachableSince. - Guards.
- If
aaProfileIdisnull, the pen name isn't connected to AA Social. Claude stops and tells you to provision it from authorautomations.social. - If
aaUnreachableSinceis 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.
- If
- Routes to AA. Calls the matching
aa_*tool (e.g.aa_create_post,aa_create_campaign,aa_queue_preview) withprofileId: 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:
stos_pen_names_list()— finds Indie Annie's id.stos_pen_names_get({ id })— readsaaProfileId+ persona/voice fields.stos_titles_list({ penNameId })— finds Curses and Currents.stos_titles_get({ id })— pulls the synopsis, retailer links, tagline.aa_list_accounts({ profileId })— gets the Instagram account id under that AA profile.- Drafts the caption in Indie Annie's voice using the title's synopsis + persona's
words_to_use/words_to_avoid. - Shows you the draft for approval.
- 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:
- Sign in to authorautomations.social.
- 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.
- AA Social fires an inbound webhook to STOS that sets
aaProfileIdon the matchingpen_namesrow. 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.