Autopilot
Autopilot is Whisper's local-first daemon that watches your inbox for unread messages, drafts replies, and lets you approve them in a live cockpit. It's the difference between sitting at the keyboard typing every reply yourself and sitting back while Whisper hands you finished drafts to approve, edit, or reject.
Autopilot is designed to be safe to leave running. It claims its own conversations, coordinates with other operators on your team, and refuses to send anything sensitive (PPVs, custom requests, priced offers, explicit content) without your explicit approval.
What Autopilot is
Autopilot is a long-running process that lives on your local machine. It:
- Polls your account for unread messages every few seconds.
- Drafts a reply for each one in an isolated environment that has no access to your other chats, your earnings, or anything outside that one conversation.
- Runs every draft through a deterministic safety policy.
- Either queues the draft for your approval, or (for routine, non-explicit replies, and only if you turned it on) sends it automatically.
- Shows everything inline in your Terminal so you can approve, edit, reject, or skip with a single keypress.
Everything Autopilot does is logged. You can replay any run, see exactly what it drafted, why the policy decided what it decided, and what you (or your team) did with each suggestion.
How to start it
From a regular Terminal prompt (not from inside Whisper's interactive mode):
bash
whisper autopilot startIf you have multiple accounts, pass the account name:
bash
whisper autopilot start myaccountYou'll see the live cockpit boot up, do a one-time crash-recovery sweep, then start polling. Press Ctrl+C once to stop it cleanly.
Modes
Autopilot supports three modes via --mode:
| Mode | What it does |
|---|---|
shadow | Drafts replies and logs decisions, but never queues an approval or sends. Useful for evaluating Autopilot on your account before you let it touch anything. |
draft_assist (default) | Drafts and queues every reply for your approval. Nothing is ever sent automatically. |
bounded_auto | Same as draft_assist, but routine non-explicit replies can be sent without approval. Requires --auto-send as a deliberate second confirmation. |
bash
whisper autopilot start --mode shadow
whisper autopilot start --mode draft_assist
whisper autopilot start --mode bounded_auto --auto-sendUseful flags
| Flag | What it does |
|---|---|
--mode <name> | One of shadow, draft_assist, bounded_auto (default draft_assist). |
--auto-send | Required for bounded_auto. Acts as a deliberate second confirmation that you understand auto-send is enabled. |
--poll-ms <n> | How often to check for unread messages (default 12 seconds). |
--no-bell | Disable the bell sound when a new approval needs attention. |
--earned-autonomy | Let explicit replies send on their own once your approvals show they are right. Needs --mode bounded_auto --auto-send. See Earned autonomy. |
Live cockpit behavior
When you run whisper autopilot start, your Terminal becomes a live cockpit. Each polling iteration prints a one-line summary:
iter scanned=4 drafted=3 auto=0 queued=3 blocked=0 pending=3Whenever Autopilot drafts a reply that needs your approval, the cockpit interrupts the polling loop and shows you the chat, the draft, and a prompt:
@alice (12345) — 3 new messages, last 18m ago
Latest from fan:
"hey are you around tonight?"
Draft:
"Hey love! Just got in, what are you up to?"
[A]pprove [E]dit [R]eject [S]kip [X]plain [Q]uit >Type a single letter and press Enter:
| Key | Action |
|---|---|
A | Approve and send the draft as-is. |
E | Edit the draft. You'll be prompted to type a replacement; the message is sent after you confirm. |
R | Reject. The draft is discarded and the conversation is marked rejected. Nothing is sent. Whisper then asks why, one short line, totally optional (press Enter to skip). A few words like "too pushy" or "she already bought this" teach Whisper far more than a silent reject. |
S | Skip. The draft is set aside without rejecting. Useful when you want to come back to it later or let a teammate take it. |
X | Explain. Shows the reasoning behind this draft: which conversation patterns matched, which policy rules fired, and any risk flags. The prompt then comes back so you can decide. |
Q | Quit the cockpit. |
When a draft comes with a paid offer attached, a few more keys show up:
| Key | Action |
|---|---|
P | Price. Type a new price for the offer before it goes out. |
M | Media. Swap to one of the other offers Whisper lined up for this fan. |
B | Budget. Send this offer, then let Autopilot keep offering this fan for a few hours without asking each time. See Session budgets. |
C | Custom. Quote a custom request and open an order. See Customs. |
When you reject, Whisper shows five one-key reasons (1 too early to sell, 2 wrong content for this fan, 3 wrong price, 4 does not sound like me, 5 too pushy). Press a number, type your own, or press Enter to skip.
After each approval action, the cockpit goes back to polling. New approvals show up inline as they're ready.
Sound when an approval needs attention
When a new draft is ready for your approval, the cockpit plays a short attention sound (an ASCII bell plus a system sound where available) so you can step away from your computer and come back when Whisper actually needs you. The sound only plays once per polling iteration, not once per draft, so a batch of new approvals does not turn into a noisy stream.
If you'd rather work in silence, pass --no-bell when you start the cockpit:
bash
whisper autopilot start --no-bellOr set the environment variable once for your shell:
bash
export WHISPER_AUTOPILOT_NO_BELL=1The sound is also skipped automatically in two situations:
- You are running the cockpit in silent mode (after pressing
Ctrl+D). - Your Terminal is not attached to a real terminal (cron, SSH without a TTY, redirected output). In these cases the cockpit assumes nobody is listening.
Silent mode
If you want to keep Autopilot running but stop being interrupted (you're on a call, you're letting someone else handle approvals from the dashboard, you want overnight queueing), press Ctrl+D at the cockpit prompt.
Autopilot will keep polling, keep drafting, and keep queueing approvals to the cloud, but it will stop interrupting your Terminal. You'll see iteration summaries scroll by, but no inline prompts.
Silent mode is one-way for the current session. To go back to live approvals, quit (Ctrl+C) and run whisper autopilot start again, or drain the backlog with whisper autopilot review (next section).
Review and catch-up mode
If Autopilot queued approvals while you were in silent mode, or while you were offline, or while a teammate was running the cockpit, you can drain the backlog any time:
bash
whisper autopilot reviewThis opens the same approve / edit / reject / skip / explain prompt as the live cockpit, but only for the approvals already queued. There's no polling, no drafting; you just work through the list.
If your team uses Autopilot on multiple machines, add --reconcile so your local view picks up anything other operators already handled before you walked in:
bash
whisper autopilot review --reconcileStatus and stop commands
Quick check on what's happening:
bash
whisper autopilot statusYou'll see the active run (if any), how long it's been up, the most recent iteration summary, and how many approvals are pending.
Cleanly stop any active runs and release locks:
bash
whisper autopilot stopYou don't usually need stop. Pressing Ctrl+C in the cockpit does the same thing. stop is for cleaning up after a crash, or stopping a run that was started on another machine.
What approval actions mean
| Action | What happens to the draft | What happens to the conversation | When to use it |
|---|---|---|---|
| Approve | Sent exactly as drafted. | Marked approved. | The draft is good as-is. |
| Edit | You type a new version, then it's sent. | Marked edited (Whisper learns from your edit over time). | The draft is close but you want to tweak the tone, length, or specifics. |
| Reject | Discarded. Nothing is sent. You can add a short optional reason. | Marked rejected. If you gave a reason, Autopilot writes a fresh draft right away with your reason in mind (once per fan message). Without a reason, the next round of polling can draft a new reply. | The draft is wrong (off-tone, off-topic, off-persona) and you don't want to send anything like it. |
| Skip | Set aside. Nothing is sent right now. | Marked skipped. The conversation is not redrafted automatically. | You're not ready to decide. Comes up again in whisper autopilot review. |
| Explain | (no change) | (no change) | You want to see why Whisper drafted what it drafted before making a decision. |
Edits are how Autopilot learns your voice
Every time you edit a draft instead of approving it as-is, Whisper records the change. Over time, the system gets better at writing in your voice. Don't reject when an edit would do. The edit is more useful as a teaching signal.
Whisper learns your voice automatically
You never have to write a persona or describe how you talk. Whisper picks that up from the way you actually message, and it keeps getting better the more you use it. This happens on its own, with nothing to set up and nothing to run.
Here is what is going on behind the scenes:
- Every edit is a lesson. When you tweak a draft instead of approving it as-is (shortening it, warming up the tone, swapping a phrase), Whisper notices the gap between what it wrote and what you actually sent.
- It refines your voice on a schedule. From time to time, Whisper quietly tries out a more refined version of your voice and checks it against your recent edits, to see whether that version would have matched what you sent more closely.
- It only keeps a change if it is better. If the refined version would not have helped, Whisper keeps the one it had. Your voice never gets worse from this, and you are never asked to approve it.
- Every voice update has to earn its place. The same check guards more than the scheduled tweaks. Any time Whisper builds a fresh read of how you talk, that new version still has to beat the one you already have on your recent edits before it goes live. A brand-new account without enough history yet gets the fresh version right away, since there is nothing to compare against. Either way, the way Whisper writes for you only ever changes when the change has been shown to help.
The payoff is simple: the drafts you approve start needing fewer and fewer edits. There is no notification, no button, and no setting to manage. Whisper just quietly sounds more like you over time.
The most helpful thing you can do is edit, not reject
When a draft is close, edit it instead of rejecting it. An edit shows Whisper exactly what you would have sent, which is the single most useful signal for learning your voice. A reject only says "not this", with nothing to learn from. Edit the near-misses and your drafts get noticeably more like you week after week.
When a draft really does deserve a reject, take the extra two seconds to type a reason at the prompt. "Too pushy" or "he already asked about this" turns a dead end into a lesson, and Whisper uses those reasons the same way it uses your edits.
Selling: offers that feel like you sent them
Autopilot does not spam paid messages. It sells the way a good chat partner does: when the fan asks for something, or when the conversation has been warming up and an offer would feel natural. If a fan just passed on something, or the chat is still small talk, it keeps talking instead.
When it does make an offer, here is what goes into it:
- The right content. Whisper reads how you already organize your saved media (sets, folders, price notes in folder names, anything marked "do not use") and picks something that fits the moment. It never offers a fan something they already bought, and it does not re-offer something they recently passed on.
- The right price. The price comes from what this fan has paid before, not a guess. Fans who have never bought get a gentle first price. During a hot session, each next offer steps up a little, the way an experienced chatter builds a ladder. Whisper never chases a "no" with a discount.
- Your rules for each fan. If you or a former chat team left labels on a fan (a nickname, "don't pitch PPV", "do not message", a birthday, "chargeback"), Whisper reads them and follows them. Nobody loses what your team learned.
- Locked messages. For a fan who is actively unlocking, Whisper can suggest a locked message, where the text itself is what they pay to read (great for "VIP" style chains).
Every offer shows up on the approval card with the price, what is attached, and why that price. Change the price with P, swap the content with M, or approve it as is.
Let Whisper see what is in your saved media
Folder names only say so much. Run this once for each account:
bash
whisper vault captionWhisper looks at each photo and video in your saved media one time and writes a short private description of it: the outfit, the setting, what is shown, and whether it would make a good free preview. After that:
- Offers match the fan. If a fan has told you he loves feet, lingerie, or shower content, Whisper offers the item that actually shows it.
- The message fits what is attached. The text that goes with an offer hints at what is really inside instead of guessing.
- The free preview is a good one. When an offer shows its first item for free, Whisper leads with one that tempts without giving everything away.
- Cards tell you what is attached. Offer cards include a few words describing the content, so you can approve without opening your vault.
A few things to know:
- A big library takes a while. You can press
Ctrl+Cany time. What is done is saved, and running it again picks up where it left off. - Want to try it on a handful first? Run
whisper vault caption --limit 20. - After the first run, Autopilot describes new uploads on its own while it is running.
- Your folders always win. If a folder says "Nudes", that is what Whisper goes by. Descriptions only fill in what your folders do not say.
- Descriptions are never shown to fans. To make them, a still image of each item is sent to an AI service (our privacy policy has the details).
Session budgets: let a hot session keep going
When a fan is buying and the conversation is flowing, stopping to approve every single offer slows things down. A session budget fixes that.
Press B on an offer card. Whisper sends that offer, then lets Autopilot keep offering this same fan for the next 3 hours, up to 4 more offers, without asking you each time. You set a total cap (Whisper suggests one), and each offer also stays under a per-offer limit.
A few things to know:
- The first offer always asks. A budget only starts after you approve one.
- It ends on its own. When the time runs out, the offers are used up, or the cap is reached, Autopilot goes back to asking.
- It never covers locked messages, custom requests, or fans flagged as risky. Those always come to you.
- It works in the default mode. You do not need
--auto-sendfor budgets. Shadow mode never sends, budget or not.
Earned autonomy: explicit replies that send on their own
Explicit replies are where most of the chatting happens, and approving every one is a lot of keypresses. Earned autonomy lets Autopilot send them by itself, but only after your own decisions show it gets them right.
Turn it on when you start the cockpit:
bash
whisper autopilot start --mode bounded_auto --auto-send --earned-autonomyAfter its first check of your inbox, the cockpit shows where you stand, for example "explicit replies still come to you as cards (12 of 30 decided so far)".
How it is earned:
- 30 cards first. Autopilot looks at the explicit reply cards you decided on this account in the last 14 days. It needs at least 30. Only cards written by the AI model your account uses now count, so if that model changes, the count starts over.
- 9 out of 10 sent as written. Of your latest 40, at least 90% must be sent as is, or with a tiny fix like a typo.
- No voice misses. If you rejected one of your latest 20 with "does not sound like me" or "too pushy", it waits.
Cards you decide in the default mode count too, so you can build the record before you turn this on.
Once earned:
- Only plain explicit replies go out on their own. Paid offers, customs, writing first, your biggest spenders, fans flagged as risky, anything that looks like a fan trying to trick Autopilot, and anything else Autopilot would normally ask about still come to you.
- You still see some. About 1 in 10 still comes to you as a card, so your record stays fresh.
- You see what went out. The cockpit prints each message it sent on its own.
Taking it back:
- If one should not have gone out, run
whisper autopilot flag(another Terminal window is fine), pick it, and say why if you like. Explicit replies go straight back to cards. - A refund from that fan in the two days after one of these messages does the same.
- Either way, it has to be earned again from scratch: 30 new cards decided after that moment.
It also needs your account to draft with an AI model whose rules allow adult conversation. If it does not, the cockpit tells you, and explicit replies keep coming to you as cards.
Approve from your phone
You do not have to sit at your computer to keep up. Open the approvals page on your Whisper dashboard on your phone and you will see every draft waiting on you, with the last few messages for context.
From there you can send, edit the text, change an offer's price or swap its content, start a session budget, reject (with a reason), or skip.
How it works:
- Autopilot still does the sending. Your phone records the decision; the cockpit running on your computer picks it up within a few seconds and sends it with the same safety checks as the Terminal. If the card says "autopilot offline", it will go out as soon as the cockpit is running again.
- If the fan wrote again, it comes back to you. When a fan sends something new after the draft was written, Whisper does not send the old reply. It hands the card back with a note so you can decide with the full picture.
- If a safety check stops it, you will see why. The card returns with a short explanation.
When your account is set up for instant message alerts, Autopilot also wakes up the moment a fan writes instead of waiting for its next check.
Customs
Customs are where creators make some of their best money, and where chat teams take the biggest cut. Whisper helps you run them yourself, with you signing off at every step that matters.
- A fan asks. When a fan asks for something made just for them, the card says so and shows what Whisper understood (what they want, how long, how they want their name used, outfit, anything else). If you have a rate card, it also suggests a price.
- You quote it. Press
Con the card. Confirm what they are getting, the price, and how many days you need (Enter keeps the suggestion). Then type the quote message, including the price and how to pay (a tip works), or press Enter to send the draft. An order opens. - Whisper watches for payment. When the fan tips the amount (even in a couple of tips) or unlocks a message at that price, the order moves to paid and the cockpit tells you.
- You make it. As the due date gets close, Whisper may suggest a short "it's coming along" message to the fan, as an approval card like any other. The cockpit also reminds you when a custom is due within a day.
- You deliver it. Upload the finished custom to your saved media, then run
whisper customs deliver <order>and pick the files. Autopilot drafts a warm hand-over message with the files attached for free, and you approve it. If you would rather send it yourself from the app, that works too: Whisper notices and marks the order delivered.
Set your rate card once so quotes come pre-filled:
bash
whisper customs rates --video-per-min 10 --video-min 50 --photo 5 --name-use 15See every order with whisper customs list, or check the customs section on the dashboard approvals page. If a fan paid some other way, mark it by hand with whisper customs mark <order> paid.
Whisper never tells a draft what you charged. The drafter knows what the custom is and where it stands, but prices only ever come from you.
Writing first
A great chat team does not only answer. It reaches out at the right moments. While the cockpit is running, Autopilot looks for a few of those moments every 15 minutes, after it has handled your inbox:
- A buyer who went quiet. Someone who used to buy, but it has been a few weeks and you have not talked in a while. Biggest past spenders first.
- Birthdays. When a fan's label has their birthday, a happy birthday on the day, once a year, with no offer.
- After an unlock. A playful check-in a few hours after a fan unlocks something, if nobody has said anything since.
- Custom updates and deliveries. Described in Customs above.
Each one is an approval card marked "writing first". Nothing here ever sends on its own, not even with --auto-send. Autopilot sends at most 8 of these a day (custom deliveries do not count toward that), never messages a fan labeled "do not message" or flagged as risky, and gives each fan at least a week between check-ins.
Selling report
See how selling is actually going:
bash
whisper autopilot report
whisper autopilot report --days 90You will see:
- How often your paid offers get unlocked, at each price range.
- For fans who bought before: how offers at the same price, a higher price, or a lower price did.
- How first offers to fans who never bought did.
- How your cards went: sent as is, edited, rejected, skipped, plus your most common reject reasons.
- What Autopilot's own offers earned, how "writing first" messages landed, and how your customs did.
If you run more than one account, each number sits next to the same number across all your accounts, so you can spot what works on one and try it on another. Only counts are shared between your accounts, never fans or messages.
What bounded auto-send does and does not do
bounded_auto --auto-send enables a very narrow form of automatic sending. It's not "send everything for me". It's "send only the safe, routine stuff for me; still ask me about everything else".
Bounded auto-send will send replies automatically when all of the following are true:
- The conversation is classified as a routine non-explicit message (small talk, check-in, friendly banter).
- No risk flags fired (more on those below).
- The thread is not under attack (no recent prompt-injection attempts on the conversation).
- You explicitly passed
--auto-sendat startup.
Bounded auto-send will not send automatically (it queues an approval instead) for any of:
- Adult or explicit content.
- PPVs.
- Custom requests.
- Priced offers of any kind.
- Anything that looks like an upsell, a schedule change, a vault reference, a first-contact offer, or pricing drift.
- High-value subscribers (Whisper flags them so you handle them personally).
- New objections it hasn't seen before.
- Anything where the fan's intent is ambiguous.
- Anything where personal facts came up that Whisper couldn't verify.
- Anything triggered by a possible prompt-injection attempt.
If any of these fire, even with --auto-send, you get an approval prompt. There are two exceptions, and you turn both on yourself: inside a session budget, offers to that one fan can go out without asking until the budget ends, and with earned autonomy, plain explicit replies can go out once your approvals have earned it.
Why adult, explicit, PPV, custom, and priced content always requires approval in v1
Out of the box, anything that touches money or sexual content gets your explicit approval. Every time, unless you turn on one of the two exceptions below.
There are two reasons:
- Trust and revenue. Pricing decisions, custom requests, and PPV positioning are where the actual revenue is made. The cost of a bad auto-send on a $50 PPV is much higher than the cost of a slightly slower reply. We err on the side of "let the operator decide".
- Compliance. Platform rules around explicit content evolve. Keeping a human in the loop on every adult-context reply means you can adapt quickly without waiting for a software update.
There are two ways to loosen this, and only you can turn them on. A session budget: you approve the first offer, set a cap, and Autopilot keeps going with that one fan for a few hours. And earned autonomy: plain explicit replies (never money) go out on their own once your own approvals show they are right, and go back to cards the moment you flag one. Everything else still asks you, every time.
What "[FAILED — verify in OF before retrying]" means
Occasionally, when Whisper tries to send an approved message, the platform responds with an error that's ambiguous: the connection may have dropped after the message was already accepted, or the platform may have rejected the send. From the outside, there's no way to tell which.
In those cases, Whisper writes the approval as failed and marks it for human verification. You'll see it in whisper autopilot review like this:
[FAILED — verify in OF before retrying] @alice 2026-05-26T17:30:00Z
This send may have reached OF. Do not resend until
you confirm the message is not already in the thread.
Hey love! Just got in, what are you up to?The cockpit will also show a one-line nudge in the iteration summary:
⚠ 1 send(s) may have reached OF — verify in OF before retrying. Run `whisper autopilot review`Do not retry these blindly. The message may already be sitting in the fan's inbox. If you resend, the fan gets the same message twice.
How to recover from failed / needs human reconciliation rows
- Open the chat on your account directly (the actual platform UI, in a browser or the platform's app).
- Look at the most recent messages from you.
- If the message is already there, the send went through. Nothing to do. The failed row stays as a historical record of the ambiguous attempt; you can ignore it.
- If the message is not there, the send didn't go through. Send the message manually from the chat, or wait for Autopilot to redraft on its next polling pass.
Either way, the failed row stays in the audit log. You don't need to "clear" it. It just sits there as a reminder that you verified it. Future runs of whisper autopilot review will keep showing it under the "Needs human reconciliation" section until enough time has passed for it to scroll off.
Never delete failed rows from a database
The failed-row state is intentional. It's a permanent audit trail of the ambiguous attempt. If you're tempted to "clean up" these rows manually, don't. They're harmless, and they're the only record that an ambiguous error ever happened.
How multiple operators can safely work the same account
Autopilot is built for teams. Multiple people can run whisper autopilot start on the same account from different machines, at the same time, without stepping on each other.
Here's how the coordination works:
- Locks. When one operator's daemon starts drafting for a conversation, it takes a short-lived lock. No other operator's daemon will draft for that conversation while the lock is held. Locks expire automatically after a couple of minutes if the operator walks away.
- Approval claims. When you press
Ato approve, your machine claims the approval in the cloud before any send happens. If your teammate hitAat the same moment, only one of you wins the race. The other one sees "currently being sent by ..." and the send happens exactly once. No double messages. - Crash recovery. If your machine crashes mid-send, the next Autopilot daemon that starts up (yours, or any teammate's) will look at the conversation, check whether the message actually made it through, and either mark the send done or flag it for verification. You never end up with a silent half-sent state.
- No double messages. The combination of locks and claims means a given approval can only be sent once. Even if three of you press
Aat the exact same moment on three different machines, only one send happens.
For more on team coordination across all of Whisper, see Team Collaboration.
Run it where you have a stable connection
Autopilot is a long-running daemon. It's happiest on a machine with a steady internet connection and a Terminal you don't close. A laptop you carry around works fine, but if you put it to sleep mid-iteration, the polling stops until you wake it back up. The crash-recovery sweep on next startup will sort out any in-flight send.