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 · 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.
| Text | Images | Carousel | Story | Alt text | Delete via API | |
|---|---|---|---|---|---|---|
| ✓ | ✓ | ✓ | ✓ | ✓ | – | |
| 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 · 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 · 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 · 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 · 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 · 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 · 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 · 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.
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...
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
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 jsonStrategic Product Roadmap
Explore upcoming developer-focused features designed to supercharge your social media pipeline.
Git Hook Integration & Autopost
Trigger automatic scheduling and publication directly upon committing code or pushing release tags in your repositories.
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)
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
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
Pro Yearly
postctl2026The best value: everything in Pro for about €3.25 a month.
- Connect unlimited social networks
- Use on up to 5 of your devices
- All updates and new platform fixes while subscribed
- Bought a Lifetime license earlier? You keep Pro for good.
Cancel any time · 30-day money-back on your first payment · terms
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.
Changelog & Latest Updates
Track the latest features, improvements, and bug fixes in postctl.
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.
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 andpostctl 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.
Headless Daemon & TUI Replica Demo
- Headless scheduler daemon: Run
postctl daemonto 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.