PostOwl CLI

Ship posts from your terminal

Draft, schedule, and publish to X, LinkedIn, Instagram, TikTok, and Threads without breaking flow. One npm install, one browser login, and your whole posting queue lives a keystroke away.

$npm install -g postowl

Free and MIT licensed · Node.js 18+ · macOS, Linux, and Windows

zsh · postowl

$postowl generate "a founder take on shipping in public" --post

✓ Draft ready · model: founder-voice

"Everyone says build in public. Nobody says the first 50 posts go to 12 people and 3 bots. Post anyway. Number 51 is the one that lands."

$postowl post create --schedule "tomorrow 9am"

✓ Scheduled · X · 17h from now

$postowl posts list --status pending

1 post queued · next: tomorrow 09:00

Everything the dashboard does, at typing speed

Schedule in plain English

No date pickers, no ISO strings unless you want them. "tomorrow 9am", "friday evening", and "in 2 hours" all just work.

Threads and media included

Build multi-post threads from arguments or interactively, and attach local images and videos that upload on the fly.

Draft in your voice

postowl generate writes drafts with the AI voice models you trained on your own posts, then offers to publish or schedule them.

Built for scripts and CI

Every command takes --json, and POSTOWL_TOKEN works as an environment variable. Pipe, cron, and automate however you like.

One queue, every platform

The CLI posts to any account you have connected in PostOwl: X (Twitter), LinkedIn, Instagram, TikTok, Threads, and Facebook.

Secure browser login

postowl login opens your browser, you approve once, and a local API key lands in ~/.config/postowl. Your password never touches the terminal.

The everyday moves, copy-paste ready

Publish right now

$ postowl post create "Hello from my terminal" --now

Goes out immediately on the account you pick.

Queue a post for later

$ postowl post create "Weekly update" \

--schedule "friday 9am"

Plain English or ISO dates both work. PostOwl publishes on time even with your laptop closed.

Attach an image or video

$ postowl post create "Demo time" -m ./demo.mp4

The -m flag uploads and attaches in one step. Repeat it for multiple files.

Post a thread

$ postowl post create --thread \

"Part 1" "Part 2" "Part 3"

Each argument becomes one post in the thread.

Generate, then queue it

$ postowl generate "launch recap" --post

Drafts with your trained voice model, shows you the text, then walks you into publish or schedule. No copy-paste.

Manage the queue

$ postowl posts list --status pending

$ postowl posts delete <id>

See everything scheduled and cancel anything before it goes out.

The full command set

postowl loginAuthorize the CLI through your browser
postowl post create "..."Publish or schedule a post, interactive when run bare
postowl post create --thread "1" "2"Publish a multi-post thread
postowl generate "topic" --postDraft with a trained voice model, then publish
postowl posts list --status pendingSee what is queued
postowl posts delete <id>Cancel a scheduled post
postowl upload ./image.pngPre-upload media, prints an id you can pass to -m
postowl accountsList connected social accounts
postowl usagePlan limits and current usage
postowl statusLocal session and API health

Add --json to any command for machine-readable output.

REST API

Same key, full API

The API key behind the CLI also works against the REST API at /api/v1 with a Bearer header. Posts, media, models, generation, and usage, all scriptable from any language.

For AI agents

Prefer to delegate?

Connect Claude, Cursor, or any MCP client to the PostOwl MCP server and let your agent draft and schedule posts for you.

Explore the MCP server

Frequently asked questions

How do I install the PostOwl CLI? +

Run "npm install -g postowl". You need Node.js 18 or newer and a free PostOwl account. After installing, "postowl login" connects the CLI to your account through your browser.

How do I queue or schedule a post from the terminal? +

Use postowl post create with the --schedule flag, for example: postowl post create "Weekly update" --schedule "friday 9am". The CLI understands natural language dates as well as ISO timestamps. The post lands in your PostOwl queue and publishes at the scheduled time even if your machine is off. Run postowl posts list --status pending to see the queue.

How do I attach an image or video to a post? +

Pass local files with the -m flag: postowl post create "Demo time" -m ./demo.mp4. The CLI uploads the file and attaches it to the post in one step, and you can repeat -m for multiple files. If you pre-uploaded something with postowl upload, pass the printed media id to -m instead of a path.

How do I post something I generated? +

Add --post to the generate command: postowl generate "launch recap" --post. It shows you the draft, then walks you straight into publishing or scheduling it, no copy-paste. Without --post the CLI asks whether to publish after showing the draft, and in scripts you can pipe: postowl generate "topic" --json | jq -r .message | postowl post create.

Which social platforms does the CLI support? +

Everything your PostOwl account can post to: X (Twitter), LinkedIn, Instagram, TikTok, Threads, and Facebook. Connect accounts once in the PostOwl dashboard and the CLI picks them up automatically.

Can I use it in scripts and CI pipelines? +

Yes. Every command accepts --json for machine-readable output, and you can authenticate non-interactively by setting the POSTOWL_TOKEN environment variable to an API key from Settings. That makes it easy to post from GitHub Actions, cron jobs, or release scripts.

Is the CLI free? +

The CLI itself is free and published on npm under the MIT license. Posting goes through your PostOwl account, so your plan limits apply. New accounts get a 7-day free trial.

How is authentication handled? +

postowl login opens your browser to an authorization page on postowl.io. You approve the CLI once, and it stores a local API key in ~/.config/postowl. You can revoke access anytime by regenerating your API key in Settings, and you never type your password into the terminal.

What is the difference between the CLI and the MCP server? +

The CLI is for you: a command you run in the terminal. The MCP server is for your AI tools: connect Claude, Cursor, or any MCP client to PostOwl and your agent can draft and schedule posts on your behalf. Both use the same API key.

Your next post is one command away

Connect your socials to PostOwl, install the CLI, and never alt-tab to post again.

7-day free trial · No credit card required · Cancel anytime