Simplified CLI — Social Media Automation for AI Agents
Agentic social media automation CLI for Simplified.com. Schedule and publish to 13 platforms simultaneously, analyze performance, process images, and generate AI images with 20+ models — JSON-native output designed for AI agents, LLM workflows, and automated pipelines.
What is Simplified CLI?
Simplified CLI is an open-source social media automation tool that lets AI agents and developers schedule posts, pull analytics, and generate AI images across 13 platforms (Instagram, TikTok, LinkedIn, YouTube, Mastodon, Reddit, Telegram, and more) — entirely from the command line.
Why Simplified CLI?
| Feature | Simplified CLI | Buffer API | Hootsuite API |
|---|---|---|---|
| AI image generation | 20+ models | ||
| Agentic / LLM-ready (JSON output) | partial | partial | |
| Video tools | |||
| Platforms | 10 | 6 | 10 |
| Open source CLI | |||
| Claude Code plugin |
Simplified CLI is the only social media scheduling tool built natively for agentic AI workflows — with JSON output, async task polling, and AI image generation built in.
Use Cases
- AI agents & LLM pipelines — autonomous social media posting driven by Claude, GPT, or any LLM via tool use
- Marketing automation — bulk scheduling, cross-platform posting, and performance analytics from CI/CD or cron
- Content teams — generate AI images, remove backgrounds, and publish in a single pipeline
- Developers — scriptable social media API for custom automation workflows
- Claude Code users — install as a plugin and manage social media directly from your AI coding assistant
- OpenClaw users — run Simplified CLI commands directly from your open-source AI agent via shell tool use
Installation
npm (global)
npm install -g simplified-cliClaude Code plugin
/plugin marketplace add celeryhq/simplified-cli
/plugin install simplified-cli
Setup
Get your API key from Simplified.com → Settings → API Keys. Either export it:
export SIMPLIFIED_API_KEY=your_api_key_here…or store it in the CLI with a named profile (recommended, especially if you juggle several workspaces):
simplified auth:login mattox # prompts for the key (hidden input), saves & activates itAPI key profiles
Store multiple API keys and switch between them — handy because one key is bound to one workspace.
simplified auth:login mattox # save & activate (hidden prompt)
simplified auth:login client2 --api-key sk_xxx # non-interactive (CI / scripting)
simplified auth:use mattox # switch the active key
simplified auth:list # list profiles (masked), '*' marks the active one
simplified auth:whoami # show the active key (id + source) and accessible teamspaces
simplified auth:logout # remove the active profile (or: auth:logout <name>)Resolution order (highest first): --api-key <key> flag → active profile → SIMPLIFIED_API_KEY
env. The stored profile wins over the env var, so a stale SIMPLIFIED_API_KEY left in your
shell can't silently shadow the key you logged in with — if env is set but ignored, the CLI warns
and shows both (masked). Keys live in ~/.simplified/config.json (0600 permissions).
Teamspace context
Within a workspace your token may belong to several teamspaces (Spaces) plus the workspace
itself. The CLI keeps a switchable active context, sent to the API as the Space header
(the numeric teamspace id), so you don't need a separate token per teamspace.
One token = one workspace. An API key is bound to a single workspace at issuance. You can switch teamspaces within that workspace, but to operate across different workspaces you need a separate key per workspace.
Resolution order (highest first): --teamspace flag → SIMPLIFIED_TEAMSPACE_ID env → saved context (~/.simplified/config.json) → default workspace.
# See what the token can access (default workspace + member teamspaces)
simplified auth:whoami
# Save friendly aliases for numeric teamspace ids
simplified teamspace:add prod 12345
simplified teamspace:add staging 67890
# Switch the active context (persisted)
simplified teamspace:use prod
simplified teamspace:current # -> Active teamspace: prod (12345)
# Back to the default workspace
simplified teamspace:use default
# One-off override for a single command (does not change saved context)
simplified accounts:list --teamspace staging
SIMPLIFIED_TEAMSPACE_ID=12345 simplified accounts:list
# Manage aliases
simplified teamspace:list
simplified teamspace:remove stagingIf no teamspace is set, the CLI behaves exactly as before — the token uses its default workspace.
A request to a teamspace the token can't access fails with 403 (no silent fallback); a
malformed id fails with 400.
Agentic Workflows & LLM Integration
All commands print JSON to stdout. Errors go to stderr with a non-zero exit code — making Simplified CLI a reliable tool for agentic pipelines, LLM tool use, and autonomous social media workflows.
Discovery workflow for AI agents:
- Run
accounts:listto get account IDs — theidfield is required by all other commands - Filter by platform with
--network <platform>if needed - Use
posts:create,analytics:*, orimage:*with the discovered IDs
Async image workflow:
- Without
--wait: returns{"task_id":"..."}immediately - With
--wait: blocks until done (timeout: 120 s), prints final result JSON to stdout - Manual poll:
simplified image:task --id <task_id> - Status values:
pending→completed/success(result ready) orfailed
Commands
Accounts
# List all connected accounts
simplified accounts:list
# Filter by platform
simplified accounts:list --network instagramSupported platforms: facebook · instagram · linkedin · tiktok · tiktokBusiness · youtube · pinterest · threads · google · bluesky · mastodon · reddit · telegram
Response key fields: id (use in --accounts / -a), name, type (platform name)
Social Media Scheduling
# Queue a post
simplified posts:create -c "Hello world!" -a "ACCOUNT_ID" --action add_to_queue
# Publish to multiple platforms simultaneously
simplified posts:create -c "Launch day!" -a "INSTAGRAM_ID,LINKEDIN_ID,BLUESKY_ID" --action add_to_queue
# Schedule a post
simplified posts:create -c "Launching soon!" -a "ACCOUNT_ID" --action schedule \
--date "2026-04-01 09:00" # format: YYYY-MM-DD HH:MM, timezone: UTC (override with --timezone)
# Save as draft
simplified posts:create -c "Work in progress" -a "ACCOUNT_ID" --action draft
# Post with media
simplified posts:create -c "Check this out" -a "ACCOUNT_ID" --action add_to_queue \
--media "https://example.com/image.jpg"
# Complex post from JSON file (multi-platform, platform-specific settings)
simplified posts:create --json post.jsonActions: add_to_queue · schedule (requires --date "YYYY-MM-DD HH:MM") · draft
Platform-specific settings (--additional): Pass a JSON string for per-platform options (Instagram postType/channel, TikTok privacyStatus, YouTube post.title, etc.). See skills/simplified-cli/references/PLATFORM_GUIDE.md for all options.
# Instagram Reel
simplified posts:create -c "New reel!" -a "ACCOUNT_ID" --action add_to_queue \
--media "https://example.com/video.mp4" \
--additional '{"instagram":{"postType":{"value":"reel"},"channel":{"value":"direct"}}}'Manage scheduled posts
# List scheduled/published posts
simplified posts:list --accounts "ACCOUNT_ID"
simplified posts:list --accounts "ACCOUNT_ID" --category scheduled --page 2
# Update a post
simplified posts:update --post-id "POST_ID" -c "Revised caption"
simplified posts:update --post-id "POST_ID" --date "2026-04-05" --time "10:00" --timezone "UTC"
simplified posts:update --post-id "POST_ID" --media "https://example.com/new-image.jpg"
# Delete a post
simplified posts:delete --post-schedule-id "POST_ID"
simplified posts:delete --group-id "GROUP_ID"Manage drafts
# List drafts
simplified posts:list-drafts --accounts "ACCOUNT_ID"
# Update a draft
simplified posts:update-draft --draft-id "DRAFT_ID" -c "Polished copy"
# Delete drafts
simplified posts:delete-draft --draft-ids "DRAFT_ID_1,DRAFT_ID_2"
simplified posts:delete-draft --group-id "GROUP_ID"Review bundles
Group drafts into a shareable bundle so collaborators or clients can approve content before it is scheduled or published. The response includes a linkToReview URL to share with reviewers. Draft IDs come from posts:list-drafts.
# Create an empty bundle
simplified review-bundle:create -t "April campaign — round 1"
# Create a bundle seeded with drafts
simplified review-bundle:create -t "April campaign" --description "Please review captions." --draft-ids "DRAFT_ID_1,DRAFT_ID_2"
# Append more drafts to an existing bundle (idempotent — duplicates are skipped)
simplified review-bundle:add-drafts --bundle-id "BUNDLE_ID" --draft-ids "DRAFT_ID_3,DRAFT_ID_4"Social Media Analytics & Performance Tracking
--tomust be today or earlier — analytics only covers historical data. Date format:YYYY-MM-DD.
# Aggregated KPIs (impressions, engagement, followers, publishing)
simplified analytics:aggregated -a ACCOUNT_ID --from 2026-03-01 --to 2026-03-19
# Time-series metrics (daily breakdown)
simplified analytics:range -a ACCOUNT_ID \
--metrics "views,reach,follower_count" \
--from 2026-03-01 --to 2026-03-19
# Per-post performance
simplified analytics:posts -a ACCOUNT_ID --from 2026-03-01 --to 2026-03-19
# Audience demographics (gender, country breakdown)
simplified analytics:audience -a ACCOUNT_ID --from 2026-03-01 --to 2026-03-19AI-Powered Image Processing
All image commands accept --url with a public image URL. Async commands return a task_id — use --wait to block until the result is ready (see Agentic Workflows for async workflow details).
image:blur-background is synchronous — returns {"image_url": "..."} directly.
# Remove background (async)
simplified image:remove-background --url "https://example.com/photo.jpg" --wait
# Blur background (synchronous)
simplified image:blur-background --url "https://example.com/photo.jpg" --blur 50
# Upscale 4x (async)
simplified image:upscale --url "https://example.com/photo.jpg" --scale 4 --wait
# Convert format (async)
simplified image:convert --url "https://example.com/photo.png" --format webp --wait
# AI generative fill (async)
simplified image:generative-fill \
--url "https://example.com/photo.jpg" \
--prompt "replace background with a sunset beach" --wait
# Check async task status manually
simplified image:task --id "TASK_ID"All image commands: image:blur-background · image:remove-background · image:convert · image:upscale · image:restore · image:generative-fill · image:outpaint · image:magic-inpaint · image:pix-to-pix · image:replace · image:sd-scribble
AI Image Generation
Generate images from text prompts or reference images using 20+ AI models (Flux, Google Imagen, OpenAI, Recraft, Ideogram, Stability, Qwen, ByteDance). Ideal for agentic content pipelines that need programmatic image creation.
# Discover available models
simplified ai-image:models
simplified ai-image:models --capability prompt
# Generate from text prompt (wait for result)
simplified ai-image:generate \
--model flux.flux-realism \
--prompt "A stunning sunset over mountains, photorealistic, 8k" \
--aspect-ratio 16:9 \
--count 2 \
--wait
# Style transfer from a reference image
simplified ai-image:generate \
--model flux.flux-kontext-pro \
--capability reference_image \
--prompt "Transform to watercolor painting style" \
--reference-images "ASSET_UUID" \
--wait
# Check generation status manually
simplified ai-image:status --id "ART_VARIATION_ID"Async workflow:
- Without
--wait: returns{ task_id, id, art_variation_id }immediately - With
--wait: polls every 3s (timeout: 180s), prints[{ asset_id, url }]on completion - Manual poll:
simplified ai-image:status --id <art_variation_id>
Available models: flux.flux-realism · flux.flux-kontext-pro · flux.flux-schnell · google.imagen-4.0-generate-001 · openai.imgen · openai.imgen-1.5 · stability.diffusion · recraft.recraft · ideogram.ideogram-v3-turbo · and more — run ai-image:models for the full list.
AI Video Generation
Generate videos from text prompts or reference images using state-of-the-art models (Google Veo, OpenAI Sora, Kling, ByteDance Seedance, MiniMax Hailuo, WAN). Model ids, capabilities, and valid parameter values are model-specific — discover them with ai-video:models.
# Discover available video models and their fields
simplified ai-video:models
simplified ai-video:models --model-id veo-3 --capability prompt
# Generate from a text prompt (wait for result)
simplified ai-video:generate \
--model veo-3-fast \
--prompt "Drone shot over a neon city at night, cinematic" \
--aspect-ratio 16:9 --resolution 1080p --duration 8 \
--storage asset \
--wait
# First/last-frame interpolation (file-typed fields take asset UUIDs)
simplified ai-video:generate \
--model veo-3.1 --capability first_last_frame \
--prompt "smooth morph between the two scenes" \
--parameters '{"first_frame_url":"ASSET_UUID","last_frame_url":"ASSET_UUID"}' \
--wait
# Check generation status manually (needs BOTH ids returned by generate)
simplified ai-video:status --art-id "ART_ID" --id "ART_VARIATION_ID"Async workflow:
- Without
--wait: returns{ task_id, id, art_variation_id, storage }immediately - With
--wait: polls every 30s (timeout: 600s), prints the output (file_url, assetid) on completion - Manual poll:
simplified ai-video:status --art-id <id> --id <art_variation_id>(the V2 video poll needs both ids)
Capabilities: prompt · reference_image · multiple_images · first_last_frame (per-model — check ai-video:models)
Available models: veo-3 · veo-3.1 · sora-2 · sora-2-pro · kling-v2.5-turbo-pro · bytedance-seedance-2 · minimax-hailuo-02-pro · wan-2.5-preview · and more — run ai-video:models for the full list.
Distinct from
video:script-to-video/video:text-to-video, which generate AI narrated/presenter-style video (script → voiced, captioned clip) and remain under thevideo:*namespace.
Full reference: skills/simplified-cli/references/AI_VIDEO.md
Asset Management
Upload local files or import remote URLs as persistent workspace assets. Useful for feeding images and videos into posts, AI workflows, or project items.
# Import a remote image (S3, GCP, CDN, Unsplash, etc.)
simplified assets:import --url "https://cdn.example.com/photo.jpg"
simplified assets:import --url "https://cdn.example.com/photo.jpg" --name "Campaign Hero"
# Upload a local file
simplified assets:upload --file ./photo.png
simplified assets:upload --file ./video.mp4 --name "Promo Video"
# Check asset status / get final stored URL
simplified assets:get --id "ASSET_UUID"Supported file types for upload: PNG · JPG · GIF · WebP · BMP · TIFF · MP4 · MOV · AVI · MKV · WebM · MP3 · WAV · PDF
Asset types: 0 = image · 2 = video · 8 = audio · 17 = PDF
Async processing: assets:import and assets:upload return immediately with the asset id. The file is processed asynchronously — use assets:get --id <uuid> to check when status changes and retrieve the final stored URL.
Brand Kits
Store and manage brand identity assets (colors, fonts, logos, voice, ICPs, USPs) and attach structured context documents for AI-driven content generation.
# Create a brand kit
simplified brandkit:create --title "Velle Studio"
# Populate with style data (colors, typography)
simplified brandkit:build --brand <uuid> --json style.json
# Import structured modules (brand voice, ICPs, etc.)
simplified brandkit:import --brand <uuid> --json modules.json
# Retrieve brand book (AI-optimized view)
simplified brandkit:brandbook --brand <uuid> --elements "brief,voices,colors,fonts,usps,brand_icps"
# Attach a context document
simplified brandkit:context-create --brand <uuid> --doc-type brand_voice --name "Voice" --content-file voice.md
# Get a single context document by its link UUID (or underlying KnowledgeDoc UUID)
simplified brandkit:context-get --brand <uuid> --link <uuid>
# Get a specific context document by canonical type
simplified brandkit:context-get-by-type --brand <uuid> --type seo_guidelinesBrand kit commands: brandkit:list · brandkit:create · brandkit:get · brandkit:brandbook · brandkit:build · brandkit:import
Brand context commands: brandkit:context-list · brandkit:context-create · brandkit:context-update · brandkit:context-delete · brandkit:context-get · brandkit:context-get-by-type
--elements values: voices · colors · fonts · logos · cover · description · social_links · assets · videos · knowledge · captions · brief · comprehensive · brand_icps · usps · products · competitors · content_pillars
brandkit:context-get-by-type --type values: brand_voice · style_guide · seo_guidelines · internal_links · target_keywords · features · competitor_analysis · writing_examples · cro_best_practices · company_research · brand_profile · market_positioning · icps · usps · content_pillars · marketing_strategy
Projects & Items
Organize content work into projects and items. The --type flag is a polymorphic resourcetype selector (pm, blogger, ad, campaign, blog, SMQuotes, AIAvatarVideo, AiProductVideos, UGCVideo, ImageYTThumb).
# Create a project
simplified projects:create --type pm --title "Q3 Campaign"
# List projects
simplified projects:list --type pm
# Add an item to a project
simplified projects:item-create --type pm --project <projectId> --title "Write intro post" --status "todo"
# Assign an AI agent to an item
simplified projects:item-assign-agent --type pm --project <projectId> --id <itemId> --agent-id <agentUUID>
# Export items to a partner integration
simplified projects:export --type pm --project <projectId> --partner-id 42 --item-ids "uuid1,uuid2"Project commands: projects:list · projects:create · projects:get · projects:delete · projects:export
Item commands: projects:item-list · projects:item-create · projects:item-get · projects:item-delete · projects:item-assign-agent · projects:item-reorder
Platform Notes
| Platform | Char limit | Key requirement |
|---|---|---|
| Bluesky | 300 | No additional required |
| Telegram | 4096 | No additional required |
| Threads | 500 | Optional channel (direct / reminder) |
| 500 | Always requires ≥ 1 image in --media |
|
| Google Business | 1500 | No video support |
| 3000 | Set audience (PUBLIC / CONNECTIONS / LOGGED_IN) |
|
| 2200 | Requires postType + channel; stories: empty caption + 1 photo |
|
| 2200 | Optional postType (post / reel / story) |
|
| TikTok | 2200 | Requires postType + channel + post.privacyStatus |
| TikTok Business | 2200 | Same as TikTok + aiGenerated, uploadToDraft |
| YouTube | 2200 | Requires postType + post.title (mandatory) |
Full --additional schemas: skills/simplified-cli/references/PLATFORM_GUIDE.md
Common Agentic Workflows
Publish content to social media
# Workflow 1: Multi-platform social media scheduling
simplified accounts:list --network instagram # note the "id" field
simplified posts:create -c "Your content" -a "INSTA_ID,LINKEDIN_ID" --action add_to_queueProcess an image and post it
# Workflow 2: Agentic image pipeline (--wait output is pipeable)
simplified image:remove-background --url "https://example.com/photo.jpg" --wait | jq '.url'
# Post with the returned URL
simplified posts:create -c "Caption" -a "ACCOUNT_ID" --action add_to_queue \
--media "RESULT_URL"Review campaign performance
simplified analytics:aggregated -a ACCOUNT_ID --from 2026-03-01 --to 2026-03-19
simplified analytics:posts -a ACCOUNT_ID --from 2026-03-01 --to 2026-03-19 --per-page 5
simplified analytics:audience -a ACCOUNT_ID --from 2026-03-01 --to 2026-03-19FAQ
What is Simplified CLI used for? Simplified CLI is a command-line tool for social media automation — scheduling posts, pulling analytics, processing images, and generating AI images across 13 platforms including Instagram, TikTok, LinkedIn, YouTube, Mastodon, Reddit, Telegram, and Bluesky.
Is Simplified CLI suitable for AI agents? Yes. All commands output JSON to stdout and return non-zero exit codes on failure, making it fully compatible with LLM tool use, agentic pipelines, and automation scripts.
Which social media platforms are supported? Facebook, Instagram, LinkedIn, TikTok, TikTok Business, YouTube, Pinterest, Threads, Google Business, Bluesky, Mastodon, Reddit, and Telegram.
Does it support AI image generation?
Yes. The ai-image:generate command supports 20+ models including Flux, Google Imagen 4, OpenAI, Recraft, Ideogram, and Stability Diffusion.
How is Simplified CLI different from Buffer or Hootsuite? Simplified CLI is developer-first and agentic-ready — JSON output, async task polling, AI image generation, and video tools are built in. It's designed to be used programmatically by scripts, CI/CD pipelines, and AI agents.
Can I use it with Claude Code?
Yes. Install it as a Claude Code plugin with /plugin marketplace add celeryhq/simplified-cli and manage social media directly from your AI coding assistant.
Can I use it with OpenClaw?
Yes. Since Simplified CLI is a standard shell tool with JSON output, any AI agent that can run shell commands — including OpenClaw — can use it directly. Just install globally with npm install -g simplified-cli and let your agent call simplified commands.
Help
simplified --help
simplified <command> --helpFull documentation: simplified.readme.io/reference/introduction
About
Simplified CLI is built by Simplified — the agentic OS for marketing. Riley, the marketing agent, drafts on-brand content, learns your voice, queues it for approval, and publishes on schedule across every channel. The CLI brings that same agentic, JSON-native automation to your terminal and AI workflows.
Learn more at simplified.com.
License
MIT