Skip to main content
The CLI is built for automation: it prints structured JSON by default, accepts credentials from environment variables, and uses standard exit codes. Every command maps 1:1 to a Social media studio REST endpoint, so anything the app can do is scriptable.
The binary is so-me (the development build is so-me-dev). All examples below use so-me. Subcommands use colon syntax — posts:list, media:upload, agent export-tools.

Output Modes

Output formatting is controlled by global flags that apply to every command. They must be placed on the command line alongside the rest of your arguments (Commander treats them as global options).
Use --table for humans, not scripts. The table view truncates long fields and selects a subset of columns, so it is not machine-parseable. Always pipe the default JSON into jq in automation.
The default format can also be persisted in the CLI config (outputFormat), but --table on the command line always wins for that invocation.

JSON Output & jq

Pipe any command into jq for extraction and transformation.
List endpoints return a paginated envelope, not a bare array. The shape is { "data": [ ... ], "meta": { ... } }, so you must index into .data[]. Single-object commands (posts:get, posts:create, posts:update, …) return the object directly, so fields like .id are at the top level.

Pagination

List commands accept two pagination flags. There is no --cursor or --all flag on list commands — paginate by incrementing --page.
The --all flag exists only on agent export-tools, where it means “emit every tool format” — it is unrelated to pagination.

Shell Scripting

Create and Schedule

posts:create resolves the social account automatically from --platform when you do not pass -a/--accounts. If multiple accounts match, the command prompts interactively — so in non-interactive CI, pass an explicit account ID with -a or rely on having a single connected account for that platform.

Bulk Delete Failed Posts

Convert All Drafts

Authentication for CI

The CLI looks for credentials in this order: the --api-key flag, then the SOME_API_KEY environment variable, then the API key stored by auth:login. For automation, prefer the environment variable so nothing is written to disk.

GitHub Actions

Store your API key as a repository secret (SOME_API_KEY). The CLI reads it from the environment automatically — never bake the key into a workflow file or commit it to the repo.

Error Handling

Exit Codes

On failure the CLI sets a non-zero exit code (process.exitCode = 1), so &&, set -e, and if guards behave as expected.

Verbose Errors

Use --verbose to see full error details, including the stack trace where one is available:
Common error conditions surfaced by the API client:

Rate Limit Handling

A rate-limited request (HTTP 429) exits with code 1. In scripts, add retry-with-backoff logic:

Agent Tool Definitions

The CLI can export the Social media studio tool catalog in formats consumable by AI agent frameworks. agent export-tools fetches the canonical tool list live from the MCP server (a tools/list JSON-RPC call to POST /mcp) and emits it in the format you choose. The MCP server is the single source of truth, so exported definitions always match the live catalog.
string
One of mcp, openai, anthropic, hermes, openclaw. Required unless --all is passed.
string
Write the output to a file (and write any companion files alongside it). If the path looks like a directory (no file extension, or a trailing slash), the format’s default filename is appended. When omitted, the primary output is written to stdout.
boolean
default:"false"
Emit every supported format. Treats --out as a directory (defaults to ./agent-tools) and writes each format into its own subdirectory.

Supported Formats

Examples

Every format is derived from the same tools/list response, so exported definitions stay in sync with the live tool catalog. Tool names are snake_case (e.g. create_post) and mirror the CLI’s resource:verb commands. Over the MCP transport the same tools register as mcp_so-me-studio_<tool_name> (e.g. mcp_so-me-studio_create_post).

Self-Hosted Instances

Point the CLI at a custom API URL via the flag or the environment variable: