Make an account
Brightbean Studio is free and open source. Sign up with email, then connect at least one social account.
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
# 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.
Four steps. Each one takes about a minute, and by the end your agent has a real post scheduled.
Brightbean Studio is free and open source. Sign up with email, then connect at least one social account.
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.
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_...
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
Every option uses the same secret key. The "best" one depends on what you already have running.
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_...
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_..."
}
}
}
}
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
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, 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
The agent calls this first. It learns which connected accounts it's allowed to touch.
create_draft
Nothing goes out. Useful when you want to iterate on the copy with the agent before committing to a time.
schedule_post
One-shot. The agent makes a new post and sets the publish time in the same step.
schedule_draft
You already saved a draft. Now tell the agent when it should fire.
get_post
Did it go out? Did it fail? What did the platform say? This tool answers.
cancel_post
Pulls a scheduled post back to a draft. Use this when timing was wrong or the take aged badly overnight.
get_account_analytics
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
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
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.
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.
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.
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.
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
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.
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.
You can give the agent permission to draft but not schedule. Great for sticking a review step between the LLM and the public.
Every write takes a retry-safe key. If the same call comes in twice, the second one gets the first reply. No duplicate post.
If your workspace needs internal or client approval, the agent can draft. The post still routes through your humans before going out.
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.
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
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_personal | 3,000 | 100 | |
linkedin_company | 3,000 | 100 | |
facebook | 63,206 | 200 | |
instagram | 2,200 | 25 | |
tiktok | 2,200 | 15 | |
youtube | 5,000 | 50 | |
pinterest | 500 | 100 | |
threads | 500 | 250 | |
bluesky | 300 | 200 | |
mastodon | 500 | 200 | |
google_business | — | 50 |
Need a higher daily cap on a specific account? Override the default per-account in the studio.
Going deeper
SKILL.md, full reference docs, Python and shell examples, MCP client snippets. This is what npx skills add grabs.
Live API explorer. Paste your key, click "Try it out," see the real response.
The open-source backend, Docker-ready. Spin it up on your own server if you don't want to use the hosted version.
Free, hosted, and open source. Sign up, mint a secret key, run one npx command, and you're done.