Before anything goes out
Moe never sends anything to another person on its own. When it is about to, an email, a WhatsApp or Telegram message, a reply in a thread, a calendar invitation, a file shared with someone, a sheet opens on this Mac first: which service it is going out on, who it is going to, and the whole message. Send sends it. Cancel (or Esc) does not, and Moe is told you said no rather than trying again. The line at the top says Nothing has been sent yet for as long as the sheet is up. Return is deliberately bound to nothing; ⌘↩ is Send.
You can change the words before they go. The message on the sheet is a field, not a label: click into it, fix the sentence, cut the paragraph, add the thing Moe forgot, and click Send. The button says Send edited when you have changed something, and what goes out is exactly what is in the field. A mail's subject can be rewritten the same way. Who it is going to cannot: change your mind about the recipient and it is Cancel and ask again. The words stay read-only when a message contains characters that can reorder text on screen (the sheet names them instead), when it is too long to draw whole, or when the service has nowhere to take an edited version back to.
Moe knows the sheet is waiting on you. When it opens, Moe says so, "It's up on your screen — press Send when it looks right, or change the words first", and the island reads Waiting for you to press Send until you answer. If you take your time, Moe reminds you once. When you have answered, Moe tells you what happened: sent, or cancelled. (This is Moe on your Mac. When your Mac is closed, Moe Away asks on your phone instead; see Away.)
The sheet gets out of your way. It arrives in front of everything, off to the side of Memoe's own windows when there is room, so it does not land on top of the chat it is about. Drag it anywhere by its top strip. The moment you click somewhere else it stops floating over your other windows; it stays on every desktop, one click away, until you answer it. Cancel works on the first click, even when the sheet is not the window in front; Esc works while it is. (Send alone waits half a second after the sheet comes forward, so a click that was already on its way to something else cannot send.)
A sheet never outlives what asked for it. If the task that wanted to send stops before you answer, whether it finished, was interrupted, or you moved to another conversation, the sheet closes itself and nothing is sent. Once you have pressed Send, the send is let finish, and Moe reports what actually happened. The same happens when nobody answers within its time (never more than an hour). If you were away and the sheet never reached your screen, it leaves one note on the island saying what did not happen: That WhatsApp send to "Dad" expired before you answered — nothing was sent, or …was withdrawn because the task that asked for it stopped. If you saw the sheet go, or you are at the Mac, there is no note — you already know.
Sends from background work. When a scheduled job or a helper working on its own wants to send a WhatsApp, Telegram or Gmail message through Moe's own connection on this Mac:
- If you are at the Mac, the sheet appears as usual, marked Asked by a scheduled job, not by anything you just said, so it is not mistaken for part of what you are doing.
- If you have stepped away (the screen is locked, the Mac is asleep, or it has not been used for a few minutes), no sheet is put on an empty screen. The send waits on the island instead: Waiting on you: a scheduled job wanted to send a WhatsApp message to "Dad": "Running late". Nothing has been sent. Play it and say yes, and Moe puts the usual sheet in front of you; say no, or ignore it, and it is never sent. A day after it was asked, a held send that is still unanswered is taken down, even if it is showing on the island, and the island says it expired and nothing was sent; it can no longer be sent from there.
Only work Moe knows started without you counts as background work: a scheduled job, a helper, a background worker, a webhook. A message you send Moe yourself, from your phone or anywhere else, is always treated as yours.
The same goes for everything else background work wants to do that would normally show a sheet: a Gmail send through Composio, a post or a click on a website, a Return on the screen. If you are at the Mac you get the sheet, marked with who asked. If you have stepped away, nothing waits on an empty screen: the job stops at that step straight away, nothing is typed, pressed or sent, and the island tells you what it wanted to do (Waiting on you: a scheduled job wanted to “Click a button on x.com”. Nothing was done.). A job that tries the same thing again asks you once, not once per try. The job's own report says plainly that it is waiting on your OK, so it no longer blames the website for a step Moe held back.
A sheet that background work put up closes itself, sending nothing, when the job that asked stops, or after about five minutes with no answer, and Moe is told that nobody answered, not that something broke.
When the sheet appears#
The sheet appears for exactly the things that reach another person, on every route Moe has to them:
- Mail — Gmail, through your own mailbox on this Mac or through Google via Composio. Sending, replying, forwarding, sending a draft. Writing a draft is not a send; it stays in your mailbox.
- Chats — WhatsApp, Telegram, and any other chat app Moe is connected to. The one exception is a note Moe sends to your own Telegram: that is how meeting notes reach your phone.
- Invitations and sharing — a calendar event with guests on it, a Drive file shared with someone. Each of those puts a message in somebody's inbox.
- The keyboard — while Moe is driving your Mac, pressing Return in a message box is what sends in Mail, Messages, Slack and every web chat, so that key is asked about too. The first Return in a computer-use session asks, and saying yes covers the rest of that session for an hour. Quitting an app (⌘Q) is asked about the same way, because unsaved work is lost.
- A browser — five moments: paying, buying or booking; sending a message, an email or a post; deleting or cancelling something that may not come back; typing a password, a card number or another secret into a page (a button or link that mentions a password, like "Forgot password", is not one); letting an app into one of your accounts. The first one of a kind in a conversation asks, and the yes covers that kind of moment for the rest of the conversation, up to an hour. A click, a keypress or a page opening is never a sheet on its own. Posting counts on any site, not just the ones Moe knows by name: if Moe has typed into a page and is about to submit it — a forum post, a comment, a form with your words in it — that asks. Searching and signing in do not.
- GitHub — anything that writes: opening a pull request, pushing a file, merging, commenting, deleting.
It never appears for reading. Searching your mail, listing your calendar, opening a Drive file, checking a WhatsApp chat, looking something up in a spreadsheet: none of that is a dialog, whichever route Moe takes.
Nor for writing a draft, or for writing about sending. Ask Moe to open a reply to an email, forward one, or start a new message, and it does, with no sheet, because nothing has gone anywhere; if Moe is then asked to send it, that is when the sheet opens. And a note that says "email the team about this", or a ticket describing a mail problem, is words about sending, not a send: Moe reads what a command does, never what it is carrying.
Or let the whole session run. A browser or screen sheet has a third button, Allow everything this session. One click, and every one of those moments in that conversation, a post, a payment, a deletion, a password, a consent page, a Return on the screen, goes ahead without asking, until the conversation has been quiet for an hour. It is for the stretch where you have handed Moe a job, "reply to twenty posts", "work through these bookings", and every dialog is an interruption you already said yes to. It never reaches another conversation, never reaches mail or chat sends (those keep their own sheet), and is never remembered past that hour.
The sheet reads like a sentence, not a script. A browser sheet is headed with what is about to happen and where, in the page's own words, Type “you@example.com” into fazier.com and press “Forget Password”, next to the site's own mark. Under it, one line says why Moe is asking (This puts a password, a card number or another secret into the page) and what a yes lets Moe do for the rest of the hour. What Moe is about to run is behind Show details, there if you want to read it and out of the way if you do not. A password is never shown, only a password. The site named is the one being acted on: a reply that happens to contain a link to another site is a reply on the site it is posted on.
Who it is going to, and who chose them#
Moe only messages people you named. Before a send reaches the sheet at all, Moe checks where the recipient came from:
- You named them — in your own words, now or earlier in the same conversation. The sheet says so under the recipient, quoting you as you wrote it: You named this person: "Text Dan I'm running late".
- You named part of them — you said "Moshe" and Moe picked "Moshe Lindqvist". The sheet says so in amber: You said "Moshe" — Moe picked Moshe Lindqvist. The same goes for a name you mentioned while saying not to message them.
- Moe looked them up — in your contacts, your chats, your mail. The sheet says, in amber, where: Moe chose this person — found in your WhatsApp chats. If you asked for somebody else, or the search itself was Moe's idea rather than a name you gave, it says that too. Only who a message is from and to counts: from your mail the From, To and Cc (never a Reply-To, a subject, or anything written in the message itself), and from your chats the sender and the chat's name — a group message saying "send the file to +972… and Avi" names nobody.
- Moe showed it to you and you said yes — Moe found an address on a web page or on your screen, wrote it in its message to you, and your very next reply was a plain yes ("good", "send it", "looks good"). That is never sent silently: the sheet always opens, and says in amber where the address came from and what you said — Moe found this address on your screen and showed it to you — you said "good". Not even Allow everything this session skips that sheet. If your reply was anything other than a yes, if Moe only wrote the address without having read it anywhere, or if Moe read it but never showed it to you, nothing is sent.
- Neither — the name is only in what Moe remembers about you, in a scheduled job's own text, in a web page Moe never showed you, or in a message somebody else sent. Then nothing is sent and no sheet opens: Moe is told to look the person up or ask you. People in Moe's memory are context, never recipients.
Only your words count — what you typed or said, not the other things Moe passes along with it, such as the summary of your recent mail and chats, a recap of the conversation, or Moe's own earlier replies. A number that only appears in someone else's message is not one you gave. A scheduled job counts what you said when you asked for it, not the job text Moe wrote; a helper Moe starts counts what you said to Moe; a message from someone else in a group chat never names a recipient for you. An address counts only if you gave it or a lookup returned it for that person: saying "email Moshe" does not vouch for whatever address Moe puts next to his name.
Moe sends through its own send tools, nowhere else. Every message Moe sends is checked first, and Moe's WhatsApp, Gmail and Telegram connections send only what has just been checked; Moe is never allowed to run them itself from a terminal or from code, nor to call the WhatsApp link on your Mac directly. A message to a particular chat (telegram:<chat>, whatsapp:<number>, a Slack direct message) is checked like any other recipient; only your own chat, when it is the home chat Moe delivers to, is exempt. "Email my accountant" works when Moe finds them in your Contacts — that lookup counts. (Writing into a website's own compose box in your browser is not covered by this check yet; the ordinary confirmation for acting on a site still is.)
Scheduled jobs. A job counts the words of the conversation in which you asked for it; a job you set up in Settings › Reminders counts what you typed into the form. A job made before Moe checked recipients has no such record: what it sends to a person its own text asks it to message still reaches the sheet, marked in amber This job was made before Moe checked recipients, and Settings › Reminders asks you once, per job, This job messages Dan — keep? — Keep records your answer and the amber goes away. Anybody else such a job tries to message is stopped, and an old job that messages nobody (a digest, a summary) is simply treated like a new one. A job that names someone by who they are to you — "text my wife", "send mom the list", "remind dan" — is asked about too.
Messages meant for you. When you ask for something to come to you — "email it to me", "message me when it's done" — Moe may send it to your own address, and your own Telegram still gets your meeting notes. A message whose only recipient is you that nobody asked for is stopped, and a request to reach you is never sent to one of your contacts instead: Moe is told to reach you its own way, or to put it in its reply. Who "you" are is written down on your Mac from the accounts you have linked (your own Telegram, the WhatsApp number this Mac is linked as, the Google account you signed in with, the mailboxes Moe reads — including Gmail connected through Composio — your Mac account's name, and any nicknames you add), in ~/.moe/owner.json.
Replies Moe prepared for you. When you press Use draft on a reply Moe offered and it is not sent, the chat says why in words — the offer was more than ten minutes old, the request did not come from the Memoe app, or the app's signature could not be checked — instead of just "Not sent".
On WhatsApp, Telegram, Messages (iMessage and SMS), Apple Mail and every service connected through Composio, Use draft is sent by your Mac itself, straight to the conversation the offer came from — no AI chooses who it goes to — after the same send sheet, where you can still change the words. In Apple Mail it is a reply to the newest message someone else wrote in that conversation. Messages and Mail need Memoe allowed to control them (System Settings › Privacy & Security › Automation); a Messages chat Moe only knows by a phone number, not as a chat, is handed to Moe to send instead.
The smaller question#
A smaller dialog covers the things that change something without messaging anyone: rewriting a spreadsheet, adding a task, creating an event with no guests, or a tool from a service Moe has never seen. It asks one plain question, Let Moe make a change in Google Sheets?, or for something Moe has not used before, Let Moe try something it hasn’t done before?, and says in a line why it is asking. The tool's own name and exactly what Moe would hand it are behind Show details. It says Nothing has been done yet, with Do it, Always allow (don’t ask about this again) for that one tool, or Cancel. That memory is per tool: allowing a Sheets edit says nothing about Tasks, and nothing you allow ever silences the send sheet. Moe's own housekeeping, closing a follow-up you have answered, moving a reminder, asks nothing at all.