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.
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 login | Authorize 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" --post | Draft with a trained voice model, then publish |
| postowl posts list --status pending | See what is queued |
| postowl posts delete <id> | Cancel a scheduled post |
| postowl upload ./image.png | Pre-upload media, prints an id you can pass to -m |
| postowl accounts | List connected social accounts |
| postowl usage | Plan limits and current usage |
| postowl status | Local 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 serverFrequently 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