100% Local · No Cloud

Social Media Management from your Terminal

A Markdown-first, terminal-native post scheduler. 100% free and open-source for up to 2 social networks, with optional donations. Manage Instagram, Facebook, Threads, X, LinkedIn, Bluesky, Mastodon, Telegram, and Discord directly from the CLI or TUI.

postctl
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ╭─ CAMPAIGNS ────────────────────────────────────────────────╮ ╭─ STATS ─────────────────────────────────────────╮
  │ ▌ ● summer-launch                             ░░░░░░░░ 0/5 │ │  Posted 6   Scheduled 8                         │
  │   ● hiring                                    ██▋░░░░░ 1/3 │ │  Drafts 2   Failed 0                            │
  │   ● behind-scenes                             ░░░░░░░░ 0/3 │ ╰─────────────────────────────────────────────────╯
  │   ● spring-recap                              ████████ 5/5 │ ╭─ PLATFORMS ─────────────────────────────────────╮
  │                                                            │ │ ● Twitter/X   Connected ✓ · 50 d                │
  │                                                            │ │ ● LinkedIn    Connected ✓ · 50 d                │
  │                                                            │ │ ● Threads     Connected ✓ · 50 d                │
  │                                                            │ │ ● Mastodon    Connected ✓ · 50 d                │
  │                                                            │ │ ● Bluesky     Connected ✓ · 50 d                │
  │                                                            │ │ ● Facebook    Connected ✓ · 50 d                │
  │                                                            │ │ ● Instagram   Connected ✓ · 50 d                │
  │                                                            │ │                                                 │
  ╰────────────────────────────────────────────────────────────╯ │ ● Scheduler running                             │
  ╭─ NEXT UP ──────────────────────────────────────────────────╮ │                                                 │
  │   tomorrow 17:30  Instagram  Summer Menu — teaser          │ │ Connect platforms in the SETTINGS tab           │
  │   tomorrow 18:00  Threads  Summer Menu — teaser            │ │                                                 │
  │   tomorrow 18:30  Twitter/X  Summer Menu — teaser          │ │                                                 │
  │   tomorrow 19:00  Facebook  Summer Menu — teaser           │ │                                                 │
  │   in 3d 12:00     Instagram  Menu day — carousel           │ │                                                 │
  │   in 4d 09:00     LinkedIn  We are hiring a line cook      │ │                                                 │
  │   in 4d 09:30     Bluesky  We are hiring a line cook       │ │                                                 │
  │   in 6d 11:00     Instagram  Prep day story                │ │                                                 │
  │                                                            │ │                                                 │
  │                                                            │ │                                                 │
  │                                                            │ │                                                 │
  │                                                            │ │                                                 │
  ╰────────────────────────────────────────────────────────────╯ ╰─────────────────────────────────────────────────╯
  enter open  ? help  q quit  n new  tab next tab  i import  f1 manual                                              

Write once, publish everywhere

Feed posts, carousels and stories on Instagram, photo posts on Facebook pages, carousels on Threads — plus X, LinkedIn, Bluesky, Mastodon, Telegram and Discord. What each network can do, postctl does.

TextImagesCarouselStoryAlt textDelete via API
Instagram✓✓✓✓✓–
Facebook Page✓✓✓–✓✓
Threads✓✓✓–✓✓
X / Twitter✓✓–––✓
LinkedIn (profile + page)✓✓––✓✓
Bluesky✓✓––✓✓
Mastodon✓✓––✓✓
Telegram · Discord✓✓–––✓

Instagram does not allow deleting posts through its API — remove them in the app. Capabilities follow what each platform's API offers.

Take the tour

These are real screens of postctl (with made-up demo data), rendered straight from the app. Mouse and keyboard both work.

postctl — dashboard
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ╭─ CAMPAIGNS ────────────────────────────────────────────────╮ ╭─ STATS ─────────────────────────────────────────╮
  │ ▌ ● summer-launch                             ░░░░░░░░ 0/5 │ │  Posted 6   Scheduled 8                         │
  │   ● hiring                                    ██▋░░░░░ 1/3 │ │  Drafts 2   Failed 0                            │
  │   ● behind-scenes                             ░░░░░░░░ 0/3 │ ╰─────────────────────────────────────────────────╯
  │   ● spring-recap                              ████████ 5/5 │ ╭─ PLATFORMS ─────────────────────────────────────╮
  │                                                            │ │ ● Twitter/X   Connected ✓ · 50 d                │
  │                                                            │ │ ● LinkedIn    Connected ✓ · 50 d                │
  │                                                            │ │ ● Threads     Connected ✓ · 50 d                │
  │                                                            │ │ ● Mastodon    Connected ✓ · 50 d                │
  │                                                            │ │ ● Bluesky     Connected ✓ · 50 d                │
  │                                                            │ │ ● Facebook    Connected ✓ · 50 d                │
  │                                                            │ │ ● Instagram   Connected ✓ · 50 d                │
  │                                                            │ │                                                 │
  ╰────────────────────────────────────────────────────────────╯ │ ● Scheduler running                             │
  ╭─ NEXT UP ──────────────────────────────────────────────────╮ │                                                 │
  │   tomorrow 17:30  Instagram  Summer Menu — teaser          │ │ Connect platforms in the SETTINGS tab           │
  │   tomorrow 18:00  Threads  Summer Menu — teaser            │ │                                                 │
  │   tomorrow 18:30  Twitter/X  Summer Menu — teaser          │ │                                                 │
  │   tomorrow 19:00  Facebook  Summer Menu — teaser           │ │                                                 │
  │   in 3d 12:00     Instagram  Menu day — carousel           │ │                                                 │
  │   in 4d 09:00     LinkedIn  We are hiring a line cook      │ │                                                 │
  │   in 4d 09:30     Bluesky  We are hiring a line cook       │ │                                                 │
  │   in 6d 11:00     Instagram  Prep day story                │ │                                                 │
  │                                                            │ │                                                 │
  │                                                            │ │                                                 │
  │                                                            │ │                                                 │
  │                                                            │ │                                                 │
  ╰────────────────────────────────────────────────────────────╯ ╰─────────────────────────────────────────────────╯
  enter open  ? help  q quit  n new  tab next tab  i import  f1 manual                                              

Campaign progress, the next posts, platform health and token expiry at a glance.

postctl — posts
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ── POSTS ─────────────────────────────────────────────────────────────────────────────────────────────────────────
  ▌ [ ]  Instagram  SCHED   Summer Menu — teaser                                    📁 summer-launch  tomorrow 17:30
    [ ]  Threads    SCHED   Summer Menu — teaser                                    📁 summer-launch  tomorrow 18:00
    [ ]  Twitter/X  SCHED   Summer Menu — teaser                                    📁 summer-launch  tomorrow 18:30
    [ ]  Facebook   SCHED   Summer Menu — teaser                                    📁 summer-launch  tomorrow 19:00
    [ ]  Instagram  SCHED   Menu day — carousel                                        📁 summer-launch  in 3d 12:00
    [ ]  LinkedIn   SCHED   We are hiring a line cook                                         📁 hiring  in 4d 09:00
    [ ]  Bluesky    SCHED   We are hiring a line cook                                         📁 hiring  in 4d 09:30
    [ ]  Instagram  SCHED   Prep day story                                             📁 behind-scenes  in 6d 11:00
    [ ]  Twitter/X  DRAFT   Thread: how we cure lemons                                              📁 behind-scenes
    [ ]  Facebook   DRAFT   Photo night recap                                                       📁 behind-scenes
    [ ]  Instagram  POSTED  Spring recap                                               📁 spring-recap  3d ago 17:30
    [ ]  Threads    POSTED  Spring recap                                               📁 spring-recap  3d ago 18:00
    [ ]  Twitter/X  POSTED  Spring recap                                               📁 spring-recap  3d ago 18:30
    [ ]  Facebook   POSTED  Opening hours update                                        📁 spring-recap  Oct 9 10:00
    [ ]  Instagram  POSTED  Wine tasting night                                          📁 spring-recap  Oct 6 17:30
    [ ]  LinkedIn   POSTED  Welcome, Mara!                                                    📁 hiring  Oct 3 09:00











  enter open  n new  ? help  q quit  e edit  d delete  s schedule  p post now  space select  / search           1/16

Filter, search with /, select several posts, publish now or schedule — all from the keyboard.

postctl — editor
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ╭─ EDIT POST DRAFT ──────────────────────────────────────────────────────────────────────────────────────────────╮
  │ ➔ Platform:                                                                                                    │
  │     TWITTER  LINKEDIN  THREADS  MASTODON  BLUESKY  FACEBOOK  [INSTAGRAM]  TELEGRAM  DISCORD  DEVTO  REDDIT     │
  │     HASHNODE  MEDIUM                                                                                           │
  │                                                                                                                │
  │   Campaign:   > summer-launch                                                                                  │
  │                                                                                                                │
  │   Scheduled:  > 19.10.2026 17:30                                                                               │
  │                                                                                                                │
  │   Images:     > https://cdn.example.com/menu-teaser.png                                                        │
  │                                                                                                                │
  │   Alt texts:  > Three summer dishes on a wooden table                                                          │
  │                                                                                                                │
  │   Post / Body:                                                                                                 │
  │ ┃   1 Our summer menu drops Friday 🍋                                                                          │
  │ ┃   2 Three new dishes, one very cold drink.                                                                   │
  │ ┃   3                                                                                                          │
  │ ┃   4 #nordlicht #summermenu #local                                                                            │
  │ ┃                                                                                                              │
  │ ┃                                                                                                              │
  │ ┃                                                                                                              │
  │ ┃                                                                                                              │
  │      ✓ Length okay. Chars: 100/2200                                                                            │
  │                                                                                                                │
  │    [ SAVE ]       [ CANCEL ]                                                                                   │
  │                                                                                                                │
  │                                                                                                                │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  esc cancel  tab next field  shift+tab prev field  ctrl+v nvim                                                     

Live preview, character counter, alt text per image and one post for several platforms at once.

postctl — calendar
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ╭─ October 2026  ·  14 Posts ────────────────────────────────────────────────────────────────────────────────────╮
  │ Mon            Tue            Wed            Thu            Fri            Sat            Sun                  │
  │ 28             29             30              1              2              3 1            4                   │
  │                                                                            ○                                   │
  │                                                                            09:00 Welcome…                      │
  │  5              6 1            7              8              9 1           10             11                   │
  │                ○                                            ○                                                  │
  │                17:30 Wine ta…                               10:00 Opening…                                     │
  │ 12             13             14             15 3           16             17             18                   │
  │                                              ○○○                                                               │
  │                                              17:30 Spring …                                                    │
  │ 19 4           20             21 1           22 2           23             24 1           25                   │
  │ ●●●●                          ●              ●●                            ●                                   │
  │ 17:30 Summer …                12:00 Menu da… 09:00 We are …                11:00 Prep da…                      │
  │ 26             27             28             29             30             31              1                   │
  │                                                                                                                │
  │                                                                                                                │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ╭─ Mon 19 Oct ───────────────────────────────────────────────────────────────────────────────────────────────────╮
  │ ▌ 17:30   Instagram    SCHED    Summer Menu — teaser                                                           │
  │   18:00   Threads      SCHED    Summer Menu — teaser                                                           │
  │   18:30   Twitter/X    SCHED    Summer Menu — teaser                                                           │
  │   19:00   Facebook     SCHED    Summer Menu — teaser                                                           │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  ? help  q quit  ←↑↓→ day  [ ] month  t today  enter open  tab next tab  f1 manual                                 

Month grid with brand-coloured dots per platform. Click a day to see what goes out.

postctl — queue
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ── SCHEDULED POSTS ───────────────────────────────────────────────────────────────────────────────────────────────
  ── 📁 SUMMER-LAUNCH ──────────────────────────────────────────────────────────────────────────────────────────────
  ▌ tomorrow 17:30   Instagram Summer Menu — teaser                                                                 
    tomorrow 18:00   Threads   Summer Menu — teaser                                                                 
    tomorrow 18:30   Twitter/X Summer Menu — teaser                                                                 
    tomorrow 19:00   Facebook  Summer Menu — teaser                                                                 
    in 3d 12:00      Instagram Menu day — carousel                                                                  
  
  ── 📁 HIRING ─────────────────────────────────────────────────────────────────────────────────────────────────────
    in 4d 09:00      LinkedIn  We are hiring a line cook                                                            
    in 4d 09:30      Bluesky   We are hiring a line cook                                                            
  
  ── 📁 BEHIND-SCENES ──────────────────────────────────────────────────────────────────────────────────────────────
    in 6d 11:00      Instagram Prep day story                                                                       














  enter open  ? help  q quit  e edit  d delete  tab next tab  f1 manual                                          1/8

The publishing queue with the scheduler status and the next check.

postctl — history
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ╭─ Posting history ──────────────────────────────────────────────────────────────────────────────────────────────╮
  │ ▌ 15.10.2026 18:30  POSTED    Post: p3 (ID: 17p3)                                                              │
  │   15.10.2026 18:00  POSTED    Post: p2 (ID: 17p2)                                                              │
  │   15.10.2026 17:30  POSTED    Post: p1 (ID: 17p1)                                                              │
  │   09.10.2026 10:00  POSTED    Post: p4 (ID: 17p4)                                                              │
  │   06.10.2026 17:30  POSTED    Post: p5 (ID: 17p5)                                                              │
  │   03.10.2026 09:00  POSTED    Post: p6 (ID: 17p6)                                                              │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  │                                                                                                                │
  ╰────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
  enter open  ? help  q quit  x export  tab next tab  f1 manual                                                  1/6

Every publish with platform ID and error text — plus re-publish and details.

postctl — settings
  postctl · Social Media                                                                                  Sun 18 Oct
  ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   ● DASHBOARD   ◷ POSTS 16   ↺ QUEUE 8   ▦ CALENDAR   ▤ HISTORY   ⇗ STATS   ⚙ SETTINGS   ▤ LOGS 
  
  ╭─ Settings ───────────────────────────────────────────╮ ╭─ Platform accounts ───────────────────────────────────╮
  │ ▌ AI Provider                                        │ │   Twitter/X                 ● Connected ✓             │
  │   AI Model                                           │ │   LinkedIn                  ● Connected ✓             │
  │   Dry Run                   ● false                  │ │   Threads                   ● Connected ✓             │
  │   Auto-Publish              ● false                  │ │   Mastodon                  ● Connected ✓             │
  │   Language                                           │ │   Bluesky                   ● Connected ✓             │
  │   Theme                     terminal                 │ │   Facebook                  ● Connected ✓             │
  │   License Type               Pro (Active ✅)         │ │   Instagram                 ● Connected ✓             │
  ╰──────────────────────────────────────────────────────╯ │   Telegram                  ● Not connected           │
  ╭─ Backup & sync ──────────────────────────────────────╮ │   Discord                   ● Not connected           │
  │   Backup Exp.               Execute (Press Enter)    │ │   Dev.to                    ● Not connected           │
  │   Backup Imp.               Execute (Press Enter)    │ │   Reddit                    ● Not connected           │
  │   Edit Queue                Execute (Press Enter)    │ │   Hashnode                  ● Not connected           │
  │   Scheduler (background)    ● running — enter to stop│ │   Medium                    ● Not connected           │
  ╰──────────────────────────────────────────────────────╯ ╰───────────────────────────────────────────────────────╯
  ╭─ Scheduler queue slots ──────────────────────────────╮ ╭─ Notes ───────────────────────────────────────────────╮
  │   none                                               │ │ Support postctl (Donate):                             │
  ╰──────────────────────────────────────────────────────╯ │ https://buy.polar.sh/polar_cl_wQUHDTz9e8ZLhWS59jxxRaBG│
                                                           │ iNjdaWIHpwt4T4fyzhW                                   │
                                                           │ Pro subscription (€4.90/month or €39/year; yearly:    │
                                                           │ code postctl2026 = 37% off year one):                 │
                                                           │ https://buy.polar.sh/polar_cl_IWIUVznawezToJcwJTWKk3WJ│
                                                           │ 4hsNuRvTFN3ro3vK3ru                                   │
                                                           │ Activate: postctl license activate <key>              │
                                                           ╰───────────────────────────────────────────────────────╯



  ←/→ change  ? help  q quit  enter open  d reset  tab next tab  f1 manual                                      1/24

Connect platforms, install the scheduler service, switch the colour theme live.

Built for Developer Workflows

Why switch to bloated web UIs when you can distribute your content alongside your code?

Markdown-First

Write your posts inside your favorite editor. Frontmatter fields handle platform targets, scheduling, and image paths. Perfectly Git-versionable and reviewable in PRs.

Interactive TUI Editor

Draft and edit posts directly inside the terminal. Form validations catch platform errors, automatic splitting parses Twitter threads, and `ctrl+v` opens Neovim/Vim instantly.

AI-as-Operator

Engineered for AI assistants. Claude/GPT can generate Markdown draft files, test publication flows with `--dry-run`, and receive machine-readable outcomes using `--format json`.

Zero Infrastructure

Built in Go with a CGO-free SQLite storage engine. Packaged as a single offline-first binary. Copy the database file to backup all your posts and schedules.

Offline Documentation

Access the full README directly inside the app with a split-pane layout, interactive table of contents, and responsive terminal scrolling—no browser required.

AES-256 Encrypted Sync

Securely sync your local database and config files. Backups are encrypted using AES-256-GCM and key-stretched (PBKDF2) for safe storage in public Git repos.

Cloud Deployment (VPS/Pi)

Cross-compile to Linux and run postctl as a background daemon on a VPS or Raspberry Pi. Posts publish automatically, even when your Mac is shut down.

How It Works

Three steps from draft file to multi-platform publication.

01

Write Markdown Posts

Structure your post as Markdown. Frontmatter defines platforms, campaigns, schedule times, and tags. Separate thread elements using headers.

---
platform: twitter
type: thread
campaign: launch-v1
schedule: 2026-06-25T09:00
images:
  - img/dashboard.png
---

## Tweet 1
Your CMS is a single file...

## Tweet 2
Calendar grid screenshots attached...
02

Import & Preview

Import the Markdown directory to populate the local SQLite database. Open the TUI to visually inspect thread limits, character lengths, and schedules.

$ postctl import ./posts/
Importing...
✔ post-1.md -> Import successful
✔ post-2.md -> Import successful

$ postctl list
ID                  Platform  Type    Status
launch-v1-twitter   twitter   thread  draft
launch-v1-linkedin  linkedin  single  draft
03

Post or Run Daemon

Publish campaigns instantly with `--dry-run` safety gates, or start `postctl daemon` in the background to automatically trigger scheduled items.

# Start background scheduler
$ postctl daemon --interval 30 --background

# Or post immediately (simulate first)
$ postctl campaign post launch-v1 --dry-run
$ postctl campaign post launch-v1
Campaign successfully posted!

Separate accounts, one scheduler per profile

Work, private, a client — each profile has its own credentials, database and background service.

Profiles

postctl profile create work, then --profile work on any command or press P in the TUI. Credentials never mix.

Scheduler service

postctl --profile work daemon install sets up a launchd agent. Posts go out on time even when the TUI is closed — or open.

Profile guard

A coloured profile chip, and a confirmation before you publish by hand, so a post never lands on the wrong account.

Health at a glance

Token expiry, scheduler state, overdue and failed posts show up on the dashboard before they become a problem.

Posts are just files

Write in your editor, keep it in git, import in one command. Carousels, stories and alt text are a few lines of frontmatter.

---
platform: instagram
type: single            # single | story
campaign: summer-launch
schedule: 2026-10-23 17:30
images:
  - https://example.com/dish-1.png
  - https://example.com/dish-2.png   # 2+ images = carousel
alt:
  - "Seared fish on a green plate"
  - "Lemon tart with thyme"
---
The new menu, dish by dish. Swipe →

#summermenu #local
$ postctl --profile work import ./posts
✔ 4 posts imported (2 Instagram, 1 Threads, 1 X)

$ postctl --profile work daemon status
● running (com.abteilung83.postctl.work)

$ postctl --profile work list --status scheduled
 scheduled for 23.10. 17:30  INSTAGRAM  "Summer Menu"
 scheduled for 23.10. 18:00  THREADS    "Summer Menu"

Safe by default

Social networks punish bot-like behaviour. postctl paces itself.

Spread, don't burst

If several posts are overdue (laptop was asleep), only the oldest goes out at once — the rest follow in 20-minute steps.

60 minutes on X

At least an hour between two X posts. A post that comes due earlier simply waits for a later check.

Never twice

Every post is claimed atomically before publishing, so two processes or machines can't send it twice.

Real deletion

Deleting a post locally removes it on Facebook, Threads, LinkedIn, X, Bluesky, Mastodon, Telegram and Discord too.

postctl is part of the missionctl suite — the missionctl dashboard shows your next posts and queue health on its own card, and the MCP server lets AI assistants draft and schedule.

Designed for AI Operators

Let your AI assistant handle social media distribution while you retain total approval control.

1. AI Generates Drafts

Your coding agent reads web contents or release files and generates formatted Markdown draft files into a directory.

2. AI Imports & Checks

AI runs `postctl import` and checks results using `postctl list --format json`. Validation catches lengths and files.

3. Dry-Run Validation

AI executes `postctl campaign post launch-v1 --dry-run` to query APIs and verify integrity without causing live posts.

4. Human Approves & Posts

You review the simulated outcome in chat. Give the agent approval, and it triggers the final publish command.

🤖 Try the AI Operator Workflow

Any LLM or command-line agent (like Antigravity, Claude Engineer, or Aider) can interface directly with postctl. Use these commands to let your agent manage your campaign pipeline:

# 1. Let the AI import all drafts (idempotent, safe to repeat)
./postctl import ./posts/marketing-plan/

# 2. Let the AI run a dry-run validation with JSON output to inspect formatting
./postctl campaign post postctl-marketing --dry-run --format json

# 3. Once validated and human-approved, let the AI trigger the publish command
./postctl campaign post postctl-marketing --format json

Strategic Product Roadmap

Explore upcoming developer-focused features designed to supercharge your social media pipeline.

Planned

Git Hook Integration & Autopost

Trigger automatic scheduling and publication directly upon committing code or pushing release tags in your repositories.

Planned

Code-Snippet Social Cards

Automatically render beautiful code snippet image cards directly from your markdown source files using local rendering engines.

Simple pricing

postctl is open source. Use it for free with up to 2 networks, or subscribe to Pro for unlimited networks — cancel any time, the free core keeps working.

Core (OSS)

€0/ forever

For developers looking to version and post files to their personal networks.

  • ✓ Connect up to 2 social networks
  • ✓ Unlimited drafts & publication
  • ✓ Full Bubbletea TUI & Cobra CLI
  • ✓ In-process daemon background scheduler
  • ✓ Analytics Dashboard & ASCII charts
  • ✓ 100% Open Source (MIT Licensed)

Pro Monthly

€4.90/ month

Unlimited networks, month by month. Cancel with one click.

  • ✓ Connect unlimited social networks
  • ✓ Use on up to 5 of your devices
  • ✓ All updates and new platform fixes while subscribed

Frequently Asked Questions

Got questions? We've got answers. Explore how postctl secures credentials, syncs devices, and handles offline workflows.

Is postctl really free? What are the limitations?+

Yes, the core of postctl is completely open-source (MIT licensed) and free to use. You can connect up to 2 social networks with unlimited posts and drafts. To connect more than 2 accounts, subscribe to Pro (€4.90 a month or €39 a year, cancel any time). If a subscription ends, postctl keeps working with your first two connected networks — nothing is deleted. Early buyers of the Lifetime license keep Pro.

How does postctl store my API keys? Is it secure?+

Your API keys, tokens, and cookies are stored locally on your machine, in owner-only files. Tokens are encrypted with AES-256-GCM using a private per-installation key; nothing is ever sent to us. Backups use AES-256-GCM with a PBKDF2-derived key (600,000 iterations, random salt).

What happens if my computer is closed when a post is scheduled?+

If your machine is asleep, postctl will not post instantly. However, we have Auto-Catchup: as soon as you wake your machine and open the TUI or start the daemon, it immediately detects missed scheduled slots and posts them. Alternatively, you can run the daemon 24/7 on a $4 VPS or a Raspberry Pi.

Which Twitter/X authentication methods are supported?+

postctl uses the official X API (OAuth 2.0) — the supported, stable way. API access is paid by whoever uses it. An unofficial cookie mode exists for experiments, but it is switched off by default, against X's terms, unsupported and can get an account suspended; it must be enabled deliberately in the configuration.

How do I sync settings between multiple devices?+

Simply run ./postctl config export -o backup.bin on your source machine, set a password, transfer the file, and run ./postctl config import -f backup.bin on the target. You can also symlink your ~/.config/postctl/ directory directly into iCloud, Dropbox, or Syncthing.

Can my local AI agent (like Claude Engineer or GPT) run postctl?+

Yes! postctl is built on the "AI-as-Operator" principle. Every command runs non-interactively without prompt blocks. Adding the --format json flag forces commands to output machine-readable JSON, and the --dry-run flag lets the AI verify and test the pipeline safely.

Updates

Changelog & Latest Updates

Track the latest features, improvements, and bug fixes in postctl.

Oct 2026October 2026

Instagram, Profiles, Calendar & Scheduler Service

  • Instagram & Facebook Pages: Feed posts, carousels and stories (Instagram), photos with alt text (Instagram, Facebook, Threads), and real remote deletion.
  • Profiles & scheduler service: separate accounts per profile, each with its own launchd scheduler (postctl daemon install), plus a calendar tab in the TUI.
  • Security hardening: owner-only config/DB/log files, per-installation token key (postctl security status), PBKDF2 backups, image-only uploads, secrets redacted from logs, MCP publishing off by default, X cookie mode opt-in.
  • Ban protection: overdue posts are spread in 20-minute steps, and X posts keep a 60-minute minimum gap.
v0.3.0July 2026

TUI Immediate Posting & Remote Deletion

  • TUI Quick Publish: Press p in the posts list or detail view to publish drafts immediately.
  • Remote Deletion: Deleting a post locally (TUI d or postctl delete) now automatically deletes the post from the remote platform (Threads, Bluesky, Mastodon, Telegram, and Discord webhook messages).
  • New CLI commands: Added postctl delete <id> for remote cleanup and postctl cancel <id> to abort scheduled posts.
  • Safe spacing & overdue protection: Scheduler daemon automatically reschedules accumulated overdue posts (e.g. after offline periods) in 20-minute intervals to prevent spam flags.
v0.2.0June 2026

Headless Daemon & TUI Replica Demo

  • Headless scheduler daemon: Run postctl daemon to monitor and publish scheduled posts in the background.
  • Interactive web TUI replica: Added a fully-interactive mockup of the postctl TUI directly to the homepage.
  • Bilingual support: Fully translated TUI, CLI, and docs into English and German.
❯./ab83_init --status
hash:void
build:19.10.26, 11:58