Start hands-on. Scale to hands-off.

The agent-first social media planner.

An AI agent drafts and schedules your posts, and nothing publishes until you approve.

$ npx pendpost
Get started, free

No credentials needed: it runs in mock mode so you can try the whole loop first.

The approval gate is yours to set

The default. The agent drafts; you approve each post before it goes live.

  • MIT licensed
  • local-first
  • binds 127.0.0.1

Built for developers, agencies, and technical solopreneurs. The code is on GitHub.

launch day sale Draft Instagram

An agent drafted this post and picked a time.

One post, the whole loop: your agent drafts and schedules, you approve, then it ships.

See it in motion

The whole loop, in twenty seconds.

An agent drafts across every channel, you clear the gate, and pendpost ships it to Instagram, Facebook, LinkedIn, YouTube, X, Telegram, Discord, Mastodon, Nostr, and more. Here is the entire flow.

Your agents draft. You approve. Then it ships.

Why not just a scheduler?

A scheduler queues posts. pendpost operates a workflow.

An ordinary scheduler assumes a person wrote every post and just wants it sent later. That model breaks the moment an agent is drafting on your behalf. pendpost is built for exactly that case: the agent does the work, and a human stays in control of what ships.

An ordinary scheduler

  • Trusts whatever lands in the queue and posts it on time.
  • Has no notion of who authored a post or whether anyone signed off.
  • Keeps firing into a platform even after it has started blocking you.
  • Leaves caption quality entirely up to you.
  • Is usually a hosted service that holds your accounts and your data.

pendpost

  • Holds every post as a draft until a human approves it. Fail-closed by default.
  • Tracks the actor on each post, so drafting and approving stay separate steps.
  • Trips a circuit breaker on a Meta action block and stops sending until you clear it.
  • Lints captions against editable rules before anything can publish.
  • Runs local-first on 127.0.0.1, with your secrets in your own .env, and nothing phones home.

The human approval gate is a dial you control. By default pendpost holds every post for your approval; opt into auto-approve and it can publish on its own, so you scale from approving every post to fully hands-off at your own pace. Even then, nothing publishes until it's approved, and only you can turn autonomy on. You own your accounts and are responsible for each platform's terms.

Progressive autonomy

From review to hands-off, at your pace.

The approval gate is a dial, not a wall. Begin by approving every post. As you build trust, let pendpost approve and publish more on its own, until an agent runs your social media end to end and you only step in by exception.

The autonomy dial

  • Review everything. The default. The agent drafts and schedules; you approve each post before it goes live.
  • Auto-approve what you trust. Turn on auto-approve for the platforms or campaigns you trust, and pendpost publishes those on its own.
  • Fully hands-off. Run it always-on and the agent drafts, schedules, and publishes around the clock while you supervise by exception.

What never changes

  • Nothing publishes until it's approved, and auto-approval is recorded under a separate authority.
  • Only you can turn auto-approve on. An agent cannot grant itself autonomy.
  • Every publish still passes brand-lint, the anti-ban circuit breakers, and your schedule.
  • Switch auto-approve off at any time and go back to approving by hand.

What makes it different

Three load-bearing differentiators

A plain scheduler is queue-and-fire. Once an agent is in the loop, the scarce, accountable things are the gate between draft and publish, the brakes that keep an account from getting banned, and the editor that keeps machine-written copy from reading like it.

  • Human approval gate

    Every post has an approval state (draft, approved, or rejected) and the system is fail-closed: a post with no approval will not publish. Creating a post always yields a draft. Nothing publishes until it's approved. By default that's you; auto-approve is owner-only and revocable.

  • Anti-ban circuit breakers

    A Meta error 368 (action block) trips a breaker that halts the Meta lane and never auto-resumes, because 368 carries no machine-readable clear time. The owner clears it explicitly once Meta lifts it, and health probes send zero Graph traffic while blocked. A cadence cap defers bursts rather than dropping them, and a lane pause kill switch is always available.

  • Humanizer brand-lint

    Captions are checked before publish against an editable rules.json. The humanizer layer flags English AI-writing tells, errors block a publish, and warns are advisory. Built-in matchers cover caption length, hashtag count, all-caps, and broken links, plus regex rules for AI vocabulary tics like em-dash overuse and negative parallelism.

And two that carry them to both faces

  • Dual interface

    A web dashboard and any MCP client drive the same contract. A parity test enforces that every capability ships on both faces, so what you can do from the UI you can also do from an agent, and the reverse.

  • Honest native scheduling

    Where a platform supports it (Facebook scheduled posts, YouTube publishAt), pendpost uses native scheduling, so those posts fire even when your computer is off. Instagram, LinkedIn, and X have no native scheduling, so pendpost says so plainly and publishes them while it is running. Run it on an always-on host to cover those too.

Scheduling, honestly

Will it post when your computer is off?

It depends on the platform, and pendpost tells you which is which. Facebook, YouTube, Mastodon, WordPress, and Ghost schedule natively, so those posts fire on time even when your machine is off. Instagram, LinkedIn, X, Telegram, Discord, and Nostr have no native scheduling, so pendpost has to be running at the scheduled time to publish them.

Fires even if your computer is off

  • Facebook, via native scheduled posts.
  • YouTube, via native publishAt.
  • Mastodon, WordPress, and Ghost, via native scheduling.

Needs pendpost running

  • Instagram, published when due.
  • LinkedIn, published when due.
  • X, published when due.
  • Telegram, Discord, and Nostr, published when due.

To publish Instagram, LinkedIn, X, Telegram, Discord, and Nostr even when your computer is off, run pendpost on a host that never sleeps and keep it private behind a tunnel such as Tailscale or Cloudflare Access. It stays loopback-only with no auth by default. The docs cover the secure always-on self-host pattern.

Is pendpost for you?

Built for a specific kind of user. Honestly, not for everyone.

pendpost is a free, open-source, self-hosted tool you run on your own machine. That is the point, not a funnel: your accounts and keys never leave your control. It also means there is setup, and a server you keep running.

A good fit if you

  • Are comfortable running a Node.js or Docker process (npx pendpost, or docker compose up).
  • Want an AI agent to draft and schedule posts, with you approving before anything publishes.
  • Use an MCP client like Claude and want to operate social media from there.
  • Care about owning your data: local-first, nothing phones home, your keys in your own .env.
  • Want free, open-source (MIT) software you can read, modify, and self-host.

Probably not the right fit if you

  • Want a hosted product with nothing to install and a team login. Reach for Buffer or a Postiz cloud host instead.
  • Are not comfortable keeping a localhost server running and supplying your own platform API credentials.
  • Need a polished, mature suite today. pendpost is young and has rough edges.
  • Expect an agent to run everything unattended from day one with no setup and no oversight. Autonomy here is opt-in and owner-controlled: you turn it on once you trust it, and you stay responsible for each platform's terms.

Try it with zero credentials

Mock mode in 30 seconds

With no credentials in your .env (or with PENDPOST_MODE=mock), every platform lane runs through a credential-free mock driver. You can run the full loop, draft, approve, schedule, publish, and read back insights, with zero real API calls. An example campaign ships in the box so your first run already shows content.

npx

$ npx pendpost
# then open http://127.0.0.1:8090

docker

$ docker compose up
# then open http://127.0.0.1:8090

Prefer git? Clone the repo, run npm start, and build the dashboard with npm run build if needed.

Self-host or hosted

Free to self-host. Or let us run it 24/7.

pendpost is free and open source, forever. The 24/7 cloud is an optional service on top, never a paywall on the core: it keeps Instagram, LinkedIn, and X publishing when your machine is off, with the same approval gate enforced server-side.

Run it free, yourself

  • The whole product, MIT, on your own machine.
  • Facebook and YouTube schedule natively, so they fire even when your computer is off.
  • You keep pendpost running for Instagram, LinkedIn, and X.

Get started, free

Or let us run it 24/7

  • Instagram, LinkedIn, and X keep firing when your machine is off.
  • The same approval gate, enforced server-side.
  • Eject back to self-host at any time.

See pricing

The 24/7 cloud

Want pendpost run for you?

The 24/7 cloud service from Nomadik GmbH keeps Instagram, LinkedIn, and X publishing when your machine is off, with the same approval gate enforced server-side. Leave your email for early access and we will be in touch.

Prefer email? Reach us directly at hello@pendpost.com.

Start in one command.

Free, MIT, local-first. It runs in mock mode with no credentials, so you can try the whole loop before connecting anything.

$ npx pendpost
Get started, free