OmniSocials CLI

The social media CLI
for AI agents

Post, schedule, answer DMs and read analytics on 13 platforms from your terminal. One file, no dependencies, and --json on every command, so Claude Code, Codex and your scripts can run it.
$ npx skills add OmniSocials/omnisocials-agent-skills
Installs the CLI and its SKILL.md for Claude Code, Codex, Cursor, Gemini CLI and more.
~/launchzsh
➜ ~/launch
$ omnisocials posts:create \
  --text "Post from your own code: SDKs in 8 languages." \
  --channels instagram,linkedin_page,x \
  --media-urls https://omnisocials.com/images/ig-api-v2/sdk-own-code.webp \
  --schedule 2026-10-22T18:00:00Z
Post created successfully!
ID: 1024
Status: scheduled
Scheduled: 2026-10-22T18:00:00Z
Open in OmniSocials: https://app.omnisocials.com/posts/1024
One install for every coding agent that runs shell commands. The skill teaches it the commands and the rules.

Your agent types. You approve.

The skill ships the CLI with a SKILL.md of rules: check the accounts first, save drafts, and never publish or send a DM before you say yes.
Claude Code~/omnisocials-site
>Post the polls release from CHANGELOG.md to LinkedIn and X, at our best time
The rules in SKILL.md
Drafts firstWithout --schedule a post waits as a draft. With --draft it holds its time on the calendar until you confirm it.--draft, posts:update --no-draft
Asks before it actsThe skill never publishes, deletes or turns on a DM automation without your yes, and it shows you the DM text first.SKILL.md
Reads the reviewA post in review or sent back gets its approval read first: who decided, why, and what they wrote.posts:approval

56 commands. One file.

Posts, the inbox, analytics, comment to DM, media and webhooks: the whole OmniSocials API, as commands you can read and pipe.
~/launchzsh
➜ ~/launch

All 56 commands

--json--api-key--base-url--help

Posts and approvals

13
Create, schedule, publish, retry and review posts.
  • posts:createCreate a post, a draft or a planned draft
  • posts:create-and-publishCreate a post and publish it right away
  • posts:listList posts, filtered by status
  • posts:getGet one post with its status per channel
  • posts:updateChange a draft or a scheduled post
  • posts:publishPublish a post now
  • posts:retryRetry only the channels that failed
  • posts:recent-platformRead recent posts live from the platforms
  • posts:approveApprove your step of an approval workflow
  • posts:rejectReject a post in review
  • posts:approvalRead the review: who decided, why, the comments
  • posts:deleteRemove a post from OmniSocials (the live post stays)
  • approval-workflows:listList the workspace's approval workflows

Inbox

7
DMs, comments and mentions, on 7 platforms.
  • inbox:nextThe next conversation that needs an answer
  • inbox:replyReply, then move to the next one
  • inbox:listList conversations
  • inbox:messagesThe full thread of one conversation
  • inbox:readMark a conversation as read
  • inbox:hideHide a comment on your post
  • inbox:deleteDelete a comment from the platform

Analytics

5
Numbers per post, per account and per workspace.
  • analytics:overviewWorkspace totals for a period
  • analytics:postThe numbers of one post, per channel
  • analytics:postsUp to 100 posts in one call
  • analytics:accountsAccount numbers, such as followers
  • analytics:best-timesYour best slots to post

Comment to DM

6
Send a DM to everyone who comments a keyword on Instagram or a Facebook Page.
  • automations:createAnswer a keyword with a DM, once per person
  • automations:listList automations with their stats
  • automations:getTrigger, post, DM, reply and limits
  • automations:updateChange only what you pass
  • automations:eventsWho wrote what, and the DM sent
  • automations:deleteDelete an automation

Media

5
Upload images, videos and PDFs, and check them first.
  • media:upload-base64Upload a local file
  • media:uploadUpload from a URL
  • media:checkCheck a file against each channel's rules
  • media:listList the media library
  • media:deleteDelete a media file

Accounts

2
The channels a workspace has connected, and what they take.
  • accounts:listList connected accounts and their formats
  • accounts:getOne account, with Pinterest boards

Platform extras

4
Places, Reel music and Pinterest product Pins.
  • locations:searchFind a place to tag on Instagram or Threads
  • audio:searchLicensed music for an Instagram Reel
  • pinterest:productsProduct Pins you can tag on a Pin
  • pinterest:validateCheck that a Pin is a product Pin

Folders and hashtags

6
Keep media in folders and reuse hashtag sets.
  • folders:listList media folders
  • folders:createCreate a folder
  • hashtag-sets:listList saved hashtag sets
  • hashtag-sets:createSave a hashtag set
  • hashtag-sets:updateRename a set or replace its tags
  • hashtag-sets:deleteDelete a hashtag set

Webhooks

6
Get a request when a post is scheduled, published, fails or is reviewed.
  • webhooks:createSend post events to your URL
  • webhooks:listList webhooks
  • webhooks:getOne webhook and its events
  • webhooks:updateChange a webhook
  • webhooks:rotate-secretGive a webhook a new signing secret
  • webhooks:deleteDelete a webhook

Setup

2
Save your API key once, per project or for your user.
  • setupCheck your API key and save it
  • config:showShow which key and config file the CLI uses

Made for scripts and CI

Every command answers in JSON with --json, reads its key from the environment and exits with code 1 when something fails. Run it from cron, a Makefile or GitHub Actions.
  1. 01

    A draft on every release

    Any job can call the CLI: a release, a merge or a nightly cron.
    on: release
    Release v2.4.0Draft · post 1032
  2. 02

    One file

    Clone the repo and run it with Node.js 18 or newer. Nothing to npm install.
    0 dependencies
    omnisocials.js
    149 KB0 dependenciesNode.js 18+MIT
  3. 03

    The key from the environment

    --api-key first, then OMNISOCIALS_API_KEY, then the config files.
    OMNISOCIALS_API_KEY
    1--api-keyon the command
    2OMNISOCIALS_API_KEYused
    3./.omnisocials/config.jsonproject
    4~/.config/omnisocials/config.jsonuser
  4. 04

    JSON on every command

    Add --json and read the answer with jq or your own code.
    --json
    $ omnisocials posts:create --json …
    { "data": {
    "id": "1032",
    "status": "draft"
    } }
  5. 05

    Exit codes

    A failure prints the error and exits with 1, so the job stops there.
    exit 1
    $ omnisocials posts:publish 1032
    Post queued for publishing!
    $ echo $?0

Every platform, one flag

Pass channel ids to --channels. Each platform keeps its own options, such as a YouTube title, a Pinterest board or a first comment.
Channel ids for --channels, the formats each takes and its own flags
Platform--channelsFormatsIts own flags
InstagraminstagramPosts, carousels, Stories, Reels--instagram-first-comment--collaborators
Facebook PagefacebookPosts, Stories, Reels--facebook-first-comment
LinkedIn profilelinkedinPosts, PDF carousels, polls--linkedin-poll-json
LinkedIn Pagelinkedin_pagePosts, PDF carousels, polls--linkedin-page-first-comment
YouTubeyoutubeVideos and Shorts--youtube-title--youtube-privacy
TikToktiktokVideos, photo carousels--tiktok-privacy
XxPosts, threads, polls--x-thread--x-poll-json
PinterestpinterestPins, product tags--pinterest-board-id
ThreadsthreadsPosts, threads, polls--threads-thread
BlueskyblueskyPosts and threads--bluesky-thread
MastodonmastodonPosts, threads, polls--mastodon-poll-json
Google Businessgoogle_businessUpdates, events, offers--google-business-cta-action
TelegramtelegramPosts and albumsNone
DiscorddiscordPosts, polls, forum posts--discord-button--discord-poll-json
LinkedIn has two ids: linkedin is a personal profile, linkedin_page a company page. Run accounts:list to see which channels a workspace has connected.

Live in three commands

Install the skill, save your key and send a post. Every key belongs to one workspace and acts on real accounts, so start with a draft.
  1. Step 1Install the skill
    Your agent gets the CLI and the rules in one go. On your own machine, link the script as omnisocials instead.
    $ npx skills add OmniSocials/omnisocials-agent-skills
  2. Step 2Save your key
    Create a key in Settings, API. setup checks it, saves it and adds .omnisocials/ to your .gitignore.
    $ omnisocials setup
  3. Step 3Send a draft
    Without --schedule the post waits as a draft in OmniSocials, so you see it before anyone else does.
    $ omnisocials posts:create --text "Hello from my terminal" --channels linkedin

Frequently
Asked Questions

Robert Ligthart
Robert LigthartFounder of OmniSocials
Ask me a question

Last updated:

Robert Ligthart
Still have a question?Ask Robert, the founder
Ask

Post from your terminal
this afternoon

The CLI, the API, the SDKs and the MCP server come with every plan: $10 per seat per month, billed annually.