Skip to main content
Social media studio ships as an OpenClaw skill bundled inside the @social-media-scheduler/cli npm package — install the CLI once and OpenClaw automatically discovers the skill.

Install

1

Install OpenClaw on your machine

Follow the OpenClaw install guide. Requires Node.js 22+.
2

Install the Social media studio CLI (which ships the skill)

The @social-media-scheduler/cli package includes:
  • The so-me CLI binary
  • SKILL.md — the OpenClaw skill body
  • tools.md — auto-generated catalog of all 205 tools
  • examples/ — three worked transcripts (schedule-post.md, reply-dm.md, weekly-report.md)
3

Authenticate

Create an API key at so-me.studio/settings?tab=api, then export it:
OpenClaw checks eligibility automatically. Verify with:
Once paired, you can chat with the agent from Discord, Slack, WhatsApp, Telegram, or any of 22 supported messengers.

Or via ClawHub

The skill is published on ClawHub. Install with either of the canonical commands:
Both pull the same skill bundle. The underlying mechanism is @social-media-scheduler/cli on npm — ClawHub indexes the published npm package. Skill page: clawhub.ai/yasin047/so-me-studio

What you can ask

After install, prompt the agent in plain English: The agent has access to all 205 Social media studio MCP tools — every action available in the dashboard is available here.

Chat from any messenger

OpenClaw supports 22 messaging channels — DM the agent from whichever you already use. Once paired, every channel uses the same agent and the same so-me-studio skill, so you get the same answers from Discord, WhatsApp, or Slack.

First-time prerequisite

Before any channel can be added, OpenClaw needs initial config at ~/.openclaw/openclaw.json:
Skipping this step makes openclaw gateway fail with Missing config. Run openclaw setup or set gateway.mode=local.

The pattern (works for any channel)

The gateway command starts a local daemon that listens on every enabled channel and routes messages to your installed skills.

Top 7 — full setup

1. Create a Discord application
  1. Go to discord.com/developers/applicationsNew Application
  2. Bot tab → Add Bot → click “Copy” under TOKEN (keep it secret)
  3. Bot tab → INTENT SETTINGS → enable Message Content Intent ⚠️ required
  4. (Optional, for server use) OAuth2 → URL Generator → scope bot, permissions Send Messages, Read Message History, Embed Links, Attach Files → open the URL to invite the bot to a server. For DM-only use, skip this step.
2. Wire the token into OpenClaw
3. Register the channel
The wizard prompts for an account identifier — use your Discord user ID or username.4. Run the gateway + smoke test
Then in Discord, DM your bot:
“List my connected social accounts”
The first message triggers a pairing code printed in the OpenClaw terminal. Approve with openclaw admin pair-code <code>.
Why no WebChat? Older OpenClaw tutorials referenced a webchat channel — it isn’t a real user-facing channel in the current CLI (it’s an internal routing constant). openclaw channels add --channel webchat returns unknown channel id: webchat. For a fast, no-account-needed test, use Telegram above (~1 minute via @BotFather).

15 more channels (+ 1 coming-soon)

What you can ask after pairing

The same prompts work on every channel:
  • “What social accounts do I have connected?”
  • “Schedule a tweet ‘launching today’ for tomorrow at 9am UTC.”
  • “Generate a Friday product-launch caption for LinkedIn and schedule it for 5pm.”
  • “How did my Twitter posts perform last week?”
  • “Reply to that DM with my saved ‘pricing’ template.”
See the full prompt list under What you can ask.

Universal troubleshooting

  • Missing config on openclaw gateway: you skipped the prerequisite — run openclaw onboard (or openclaw setup --non-interactive --accept-risk) before adding any channel.
  • Bot doesn’t respond at all: make sure openclaw gateway is running. It’s the daemon that listens on every channel — if it’s not running, no messages get through.
  • First message stuck: OpenClaw requires pairing on first use. The first DM triggers a code printed in the terminal; approve with openclaw admin pair-code <code>.
  • Discord-specific: Message Content Intent must be enabled on the developer portal, otherwise the bot can’t read DMs.
  • Slack-specific: missing OAuth scopes (im:history, im:read, chat:write); reinstall the app to your workspace after adding scopes.
  • Skill not eligible: openclaw skills list --eligible should include so-me-studio. If not, SOMESTUDIO_API_KEY isn’t visible to the gateway shell — export it in the same terminal where you run openclaw gateway.
  • Multiple channels not all working: each channel has its own enabled flag; check status with openclaw channels status.
  • MS Teams or Google Chat unreachable: these require a public HTTPS endpoint for OpenClaw’s gateway. Use ngrok or Cloudflare Tunnel during development.

How it works

The skill body (SKILL.md) is a system-prompt extension that teaches the agent how to use the so-me CLI. The CLI returns structured JSON for every operation, so the agent can parse, reason, and chain calls.

Hard rules baked into the skill

  • Never invent account / post / conversation IDs — always look them up first.
  • scheduledAt is ISO 8601 UTC and strictly in the future.
  • Multi-step jobs (e.g. AI image → post) are chained sequentially.
  • Never reveal API keys or webhook secrets, even when asked.

Updates

When new tools ship in Social media studio, the SKILL.md and tools.md are regenerated and @social-media-scheduler/cli is republished. Users re-run npm install -g @social-media-scheduler/cli to pick up the latest.

Source

The skill source lives in the Social media studio monorepo at apps/cli/SKILL.md. PRs welcome.

Other agents?

If you use a different agent runtime:
  • Hermes 4 — see the Hermes integration, which uses the same MCP backend via npm install -g @so-me/hermes-agent.
  • Claude Desktop / Cursor / OpenCode — point them at our MCP server directly. No skill or runtime needed.
  • Anything else (LangGraph, CrewAI, OpenAI Assistants, Anthropic API) — generate a tool definition file in their preferred format: