Social Media Posting for AI agents.

Run one command, paste one secret key, and Claude, Cursor, Codex, or any agent you like can draft and schedule posts across 11 platforms.

No credit card. $0/month. Open source & self-hostable

Terminal
# 1. Install the skill
$ npx skills@^1 add brightbeanxyz/brightbean-studio-agent

# 2. Paste your api key
$ export BB_STUDIO_TOKEN=bb_studio_...

# 3. Create your first post
You:  Schedule a LinkedIn post for tomorrow at
      9am that says "Hello world from my agent."

Agent: Done. Post scheduled for 2026-06-01 09:00 UTC on LinkedIn.

No agent? You can curl the same API. See the REST snippet below.

From sign-up to scheduled post

Four steps. Each one takes about a minute, and by the end your agent has a real post scheduled.

1

Make an account

Brightbean Studio is free and open source. Sign up with email, then connect at least one social account.

2

Get a secret key

In the BrightBean Studio: Organization Settings → API Keys → Issue new key. Pick the accounts the agent may post to, tick the permissions, click generate.

Which permissions?

  • create_posts: Lets the agent write drafts. Safe to give an LLM.
  • publish_directly: Lets it schedule too. Skip this if you want to review every post before it goes out.
  • view_analytics: Read-only. Lets the agent see how past posts performed. Pair with create_posts if you want it to learn from results when drafting the next one.
3

Install the skill

One command. The skills installer figures out which AI runtime you have (Claude Code, Codex, OpenClaw, …) and drops the skill in the right folder.

# Install the skill
$ npx skills@^1 add brightbeanxyz/brightbean-studio-agent

# Paste the api key from step 2
$ export BB_STUDIO_TOKEN=bb_studio_...
4

Tell your agent to post

Talk to it like a human. The skill teaches the agent which platforms you have, what the rules are, and how to schedule cleanly.

You:  Schedule a LinkedIn post for tomorrow at
      9am that says "Hello world from my agent."

Agent: Got two LinkedIn accounts: Your personal
       and company account. Which one?

You:  Personal.

Agent: Scheduled. Post id b2c4...e9, fires
       2026-06-01 09:00 UTC. Want me to draft a
       follow-up comment too?

You're posting. Keep reading if you want to know how it works, or jump straight to the other install options.

Install options

Pick the one that fits your agent

Every option uses the same secret key. The "best" one depends on what you already have running.

Recommended · One line

Claude Code, Codex, OpenClaw, & friends

Use this if you run an agentic CLI on your laptop. The skills installer detects which runtime is on your machine.

$ npx skills@^1 add brightbeanxyz/brightbean-studio-agent
$ export BB_STUDIO_TOKEN=bb_studio_...
Claude Code Codex OpenClaw Cursor CLI Gemini CLI
Desktop apps

Claude Desktop / Cursor IDE

Use this if you mostly work in a desktop app. Add a small JSON block to the app's config file and restart.

{
  "mcpServers": {
    "brightbean-studio": {
      "url": "https://studio.brightbean.xyz/api/v1/mcp/",
      "headers": {
        "Authorization": "Bearer bb_studio_..."
      }
    }
  }
}
Claude Desktop Cursor Windsurf Any MCP client
Manual

Clone it yourself

Use this if you don't want to run npx, or you're putting the skill into a custom directory.

$ git clone https://github.com/\
    brightbeanxyz/brightbean-studio-agent \
    ~/.claude/skills/brightbean-studio
Any setup
No agent needed

Zapier / n8n / cron + curl / a Python script

Use this if you don't want an AI agent in the loop at all. The REST API is plain JSON over HTTPS.

# Schedule
$ curl -H "Authorization: Bearer $BB_STUDIO_TOKEN" \
       -H "Content-Type: application/json" \
       -d '{"social_account_id":"...","caption":"Hi",
            "action":"schedule",
            "scheduled_at":"2026-06-01T09:00:00Z"}' \
       https://studio.brightbean.xyz/api/v1/posts/

# … then poll for performance
$ curl -H "Authorization: Bearer $BB_STUDIO_TOKEN" \
       'https://studio.brightbean.xyz/api/v1/analytics/posts/<post_id>'

Full API docs: Docs · OpenAPI: /api/v1/openapi.json

What it can do

Eight tools, in plain English

Eight tools, total. The skill teaches your agent which one to use when, so you don't need to memorise them. They're here so you can see that nothing magic is happening.

list_accounts

Which accounts can I post to?

The agent calls this first. It learns which connected accounts it's allowed to touch.

create_draft

Save this as a draft.

Nothing goes out. Useful when you want to iterate on the copy with the agent before committing to a time.

schedule_post

Write it AND schedule it.

One-shot. The agent makes a new post and sets the publish time in the same step.

schedule_draft

Take that draft and schedule it.

You already saved a draft. Now tell the agent when it should fire.

get_post

Check on that post.

Did it go out? Did it fail? What did the platform say? This tool answers.

cancel_post

Never mind, don't post that.

Pulls a scheduled post back to a draft. Use this when timing was wrong or the take aged badly overnight.

get_account_analytics

How is this channel doing?

Channel-wide KPIs over the last 7, 30, or 90 days. Views, reach, likes, engagement rate, follower growth, each with the % change vs. the prior window.

get_post_analytics

How did that post perform?

Per-post metrics with a daily sparkline since publish, broken down per platform. The agent uses this to figure out what worked.

Want the full parameter list? Read SKILL.md or the auto-generated Swagger UI.

What's new

Agents that learn from what they post

It's not just scheduling anymore. The agent can poll your channel and per-post analytics, see what landed, and use the lessons in the next draft.

Two days later…
You:    Schedule today's LinkedIn post about
        the Q2 launch.
Agent:  Done. Fires 14:00 UTC. Post id b2c4…e9.

# … two days later …

You:    How did the Q2 launch post do?
Agent:  2,418 impressions, 47 reactions, 8 reposts.
        Engagement rate 2.3%, up 18% vs. your
        last LinkedIn post. The hook
        ("Two years in stealth…") outperformed
        your usual. Want me to draft a follow-up
        with a similar opener?

You:    Yes. Thursday 9am.
Agent:  Scheduled. id 1f9a…7c.
  • Polls on the right cadence

    Every response has a next_sync_eta so the agent doesn't poll faster than the backend refreshes, hourly for fresh posts, daily after a week.

  • Observation only

    view_analytics is read-only. The agent can see a post is underperforming but can't cancel or re-schedule it. Mutating tools keep their own permissions, so you can grant observe without granting act.

  • Same allowlist as posting

    The agent only sees analytics for the accounts you ticked when you issued the key. There's no way to peek at a sibling account in the same workspace.

Why it won't go rogue

Six guardrails, built in

AI agents fail in funny ways. BrightBean Studio enforces every safety rule on the server, so a bug in the prompt can't get past them.

It can only touch accounts you ticked

The key lists the exact accounts it's allowed to post to. Try anything else and the API says no. The agent can't even see accounts it wasn't given.

Write & publish are separate

You can give the agent permission to draft but not schedule. Great for sticking a review step between the LLM and the public.

No double posts when the wifi blinks

Every write takes a retry-safe key. If the same call comes in twice, the second one gets the first reply. No duplicate post.

It can't dodge your review flow

If your workspace needs internal or client approval, the agent can draft. The post still routes through your humans before going out.

We stop you before Social Media Platforms do

Each platform has a daily limit (100 LinkedIn, 25 Instagram, 250 Threads…). The API enforces them up front, so a runaway loop fails cleanly instead of getting your account flagged.

You can see everything it did

Every call the agent makes (success or fail) leaves a log row in the studio. If something looks off, you can audit it later.

Platforms

Eleven platforms, one set of tools

The agent picks an account by ID. The API enforces character limits and daily caps for each platform, so the agent doesn't have to know them.

Platform Character limit Daily cap Analytics
linkedin_personal3,000100
linkedin_company3,000100
facebook63,206200
instagram2,20025
tiktok2,20015
youtube5,00050
pinterest500100
threads500250
bluesky300200
mastodon500200
google_business50

Need a higher daily cap on a specific account? Override the default per-account in the studio.

Hand the boring part to your agent.

Free, hosted, and open source. Sign up, mint a secret key, run one npx command, and you're done.