Products/Approval queue
Approval queue
Human-in-the-loop social media approval, on every single draft.
Everything the agent wants to say in public — a reply, an original post, a comment under someone else’s thread, a DM — is written to an approval queue as a pending row. Nothing reaches a platform until a human releases it. You can rewrite the draft first; approving sends exactly what you released.
Your own connected accounts · Free to start · No credit card required
The gate
A review step is a promise. This is a code path.
Most tools describe approval as a setting you can turn off, which means the only thing between a bad draft and your audience is a checkbox nobody checks twice. Here the queue is the send path, the platform’s policy is a ceiling above your own setting, and the edits you make are kept.
The queue is the send path
There is no express lane. A drafted reply, post, comment or DM becomes a row in the approval queue with status pending, and the only code that calls a platform connector is the code that runs when you approve.
HOW · approveAndSend() loads the item and returns early unless its status is exactly pending, so an already-sent, failed or rejected item can never be dispatched twice.
Editing is the training signal
You can rewrite a draft in the queue before releasing it. When the text you shipped differs from the text the model wrote, that difference is kept — it is the only labelled data about your voice that exists.
HOW · the draft→final delta is written to edit_events; the 8 most recent for that platform are injected into the next draft’s system instruction as few-shot corrections.
The platform’s rules outrank your dial
The autonomy setting is yours to loosen, up to a ceiling you do not control. Where a platform’s automation policy forbids unattended action, the queue is not a preference — it is the only mode available.
HOW · decide() returns min(user setting, platform cap) on the ordering off < approve < auto, so a cap can make your choice stricter and never looser.
The surface
Three drafts, none of them sent.
Items accumulate rather than pass through. Each row carries the platform, the action type it would perform, the target it would perform it on, and the draft — and every one of them is holding at pending until you act on it.
We had the same problem at about thirty tickets a week. What fixed it was moving support into a shared inbox so the whole team could see a thread instead of forwarding it — and writing down who owns a reply after 24 hours. Happy to share how we set the rules up.
Drafted by the agent · 412 characters · edits are saved as a correction
The bit that moved our activation was cutting the second step entirely — most people…
Thanks for the detailed writeup — one question about the migration path you mentioned…
Approving dispatches through your own connected account. Rejecting sets the row to rejected — the platform is never called.
Illustrative view — no real accounts or drafts
How it works
From draft to sent, with you in the middle.
The lifecycle of one approval row, start to finish. There are five statuses in total — pending, approved, rejected, sent and failed — and only one transition puts a message in front of a stranger.
- 1
Step 1
The draft is enqueued
enqueue() writes a row carrying the platform, the type (publish, reply, comment_on_others or dm), the target it would act on, the draft text, and the context that prompted it — the thread, the mention, the brief.
- 2
Step 2
It waits
The row sits at pending. Nothing releases it on a timer, and nothing expires it into a send. If you never open the queue, nothing is ever posted.
- 3
Step 3
You approve, edit or reject
Approving with edited text sends exactly what you released, not the draft. Rejecting sets the status to rejected and stops there — the connector is never called for that item.
- 4
Step 4
It dispatches, and the result is recorded
The connector call runs, the status becomes sent or failed, any provider error is stored on the row, and both the enqueue and the dispatch are written to the audit log.
Where auto is reachable
The ceiling you cannot raise.
Every action ships at approve except commenting under other people’s posts, which ships off. You can loosen your own setting, but the effective mode is the safer of your setting and the platform’s cap — so on the rows below, approve and off are the end of the argument.
| Platform | Post | Reply | DM | Comment on others |
|---|---|---|---|---|
| approve | approve | approve | off | |
| X | auto | auto | approve | approve |
| Bluesky | auto | auto | approve | approve |
| Lemmy | auto | auto | approve | approve |
| Discourse | auto | auto | approve | approve |
The five platforms you can connect today. Connectors still in progress carry their own cap rows — see the platform pages for what each one can and cannot do yet.
FAQ
Before you hand over the keyboard.
What the queue holds, what happens when you edit or reject, and where unattended posting is available at all.
What is human-in-the-loop social media approval?
It means a person releases every message before a platform sees it. In FounderReply the agent’s output is not a post — it is a row in an approval queue with status pending. A human reads it, edits it if they want, and approves it. Approval is what calls the platform.
Can I switch approval off and let it run unattended?
Only where the platform allows it. Your autonomy setting is capped by a per-platform ToS ceiling, and the safer of the two wins. On Reddit every action type is held at approve. DMs are held at approve on every platform we support. Commenting under other people’s posts ships switched off.
What happens when I edit a draft before approving it?
Two things. The edited text is what gets sent — the original draft is not. And because your version differs from the model’s, the pair is stored as an edit event. The eight most recent edits for that platform are fed into the next draft, so corrections you make once stop coming back.
What happens when I reject a draft?
The row’s status becomes rejected and the flow ends there. No connector is called, nothing is sent, and the item cannot later be approved, because approval requires a status of exactly pending. The rejection itself is written to the audit log.
Does anything post while I am asleep?
Only what you have explicitly set to auto on a platform whose cap permits it — publishing and replying on your own content on X, Bluesky, Lemmy or Discourse. Anything sitting in the queue waits indefinitely. There is no timer that releases a pending item.
Is there a record of who approved what?
Yes. Enqueueing and dispatching are both written to the audit log with the item id, the type and the platform, and the row itself keeps the original draft text, the final status, and any error the platform returned on a failed send.
Get started
Let it draft. You release.
Connect an account and let the agent fill a queue. Read the first three drafts, change what you would say differently, and approve the ones you like — nothing goes out until you say so.
Free to start · No credit card required · Disconnect any time