pendpost is an operations layer, not a posting queue. These are the guardrails that exist
because an agent is in the loop.
01 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. Only approve_post or reject_post flip the state, and no actor can approve a post they created, so an agent can never bless its own draft. The owner is the only exemption.
02 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.
03 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, alongside regex rules for the usual AI vocabulary, em dashes, and negative parallelism.
04 Honest native scheduling
Where a platform supports it (Facebook scheduled posts, YouTube publishAt), pendpost uses native scheduling and stays honest about which cover and thumbnail mechanics actually apply per platform, rather than papering over the differences.
05 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.