How-to guides
Approving from Slack or Discord
Check what is waiting on your Mac, and approve, deny, or snooze it from your phone.
When OOMU prepares a file while you are away, it waits in Ready for review until you decide. Connect Slack or Discord and you can make that decision from your phone, in an app you already carry.
Be clear about what this is. It is a remote control for approvals, not a chat. OOMU understands seven fixed commands, listed below, and nothing else. You cannot ask it a question or give it new work from Slack or Discord. Anything that is not one of the seven commands gets a short help reply, and none of it ever reaches an AI model or your Mac's command line.
Before you start
- OOMU has to be running on your Mac. It listens only while the app is open. Mochi's background service does not answer messages.
- You need your own Slack workspace or Discord server where you can add an app, and a channel in it for OOMU. A private channel is the sensible choice.
- Pick one channel and one account. Each connection is bound to exactly one channel and exactly one person: you.
Setting it up
Open Connections → Messaging channels: "Message OOMU from your phone, review staged deliverables, and approve or deny them remotely." There is one card for Slack and one for Discord. Choose Set up on the one you want. Setup takes four steps, shows "Step 2 of 4" as you go, and remembers where you were if you quit in the middle.
Step 1: Create your OOMU app
"Prepare your OOMU app in Slack, then return here to connect it."
- Slack. Choose Open app setup. Slack opens with OOMU's settings already filled in. Choose your workspace and create the app. If you would rather paste the settings yourself, Copy app settings puts them on your clipboard.
- Discord. Create an application in the Discord developer portal. On its Bot page, turn on Message Content Intent, so OOMU can read the commands you send.
Then choose My app is ready.
Step 2: Connect your app
- Slack needs two tokens. Install the app from OAuth & Permissions and copy its bot token, which starts with
xoxb-. Then, in Basic Information, create an app token with theconnections:writescope; it starts withxapp-. - Discord needs the bot token from your app's Bot page. Never paste your personal account token.
Choose Verify connection. OOMU checks the tokens with Slack or Discord directly before you can go on. If a step cannot be verified, you are told so, and your progress is kept.
Step 3: Choose your private destination
- Slack. Invite the app to the channel you chose. Copy your member ID from your profile's More menu, and the channel ID from the bottom of the channel's About page.
- Discord. Use Add OOMU to my server, which opens Discord's invite page with only the permissions OOMU needs: see the channel, send messages, and read its history. Then turn on Developer Mode under Advanced in Discord's settings, and right-click your profile and the channel to copy their IDs.
Paste both and choose Connect with owner lock.
Step 4: Check it from your phone
The last step confirms who is in charge, naming your user ID: "Only user … can control OOMU." On your phone, send status in the channel. You should get back:
"OOMU is listening on your Mac. Only your bound account can issue commands. Files remain staged until you approve them."
Choose Done. The card now shows the workspace or server, the channel, and a live status.
The commands
Type these exactly, in lowercase. Phone keyboards like to capitalize the first letter, and "Status" is not a command; you will get the help reply instead.
| Send | What happens | OOMU replies |
|---|---|---|
status | Confirms OOMU is listening. | "OOMU is listening on your Mac. Only your bound account can issue commands. Files remain staged until you approve them." |
check now | Runs Mochi's enabled standing interests on your Mac. | "A local check is queued. Use list staged to review deliverables." |
list staged | Lists the five newest files waiting for review. | Each file's ID, its type, and its size, or "No deliverables are waiting for approval." |
preview <id> | Describes one waiting file. | The same ID, type, and size, and a reminder that the content stays on your Mac. |
approve <id> | Saves the file to the folder it was prepared for, and verifies it there. | "Approved and saved. The destination file hash was verified on your Mac." |
deny <id> | Dismisses the file. Nothing is saved. | "Dismissed. Nothing was saved outside staging." |
snooze <id> | Leaves the file waiting, without reminding you, for an hour. | "Snoozed for one hour. The file remains staged." |
The ID is the long code in the list staged reply. Copy it from there rather than typing it.
Approving needs a destination. A file from a scheduled workflow, or an activity brief, already knows the folder it was meant for, and
approvesaves it there. If a file has no folder yet, the reply asks you to review it on your Mac, where you can choose one.
What leaves your Mac
Your replies travel through Slack or Discord the same way any other message in those apps does. OOMU adds no service of its own in between, and has no server that sees them.
What a reply can contain is fixed in OOMU's code:
- For a waiting file: its ID, a type from a short fixed list (Markdown, Text, CSV, JSON, Word document, Excel workbook, PDF, Image, or Private deliverable for anything else), and its size in bytes.
- Never: the file's contents, its name, or where it is on your Mac. Read the file itself on your Mac before you approve anything sensitive.
The connection itself:
- Slack uses Socket Mode. OOMU connects out to Slack; nothing on your Mac is opened to the internet.
- Discord uses Discord's official API. When you first connect, OOMU ignores older messages already in the channel, so nothing you sent before setup runs by surprise.
- Tokens are verified with Slack or Discord directly and stored only in this Mac's Keychain.
Who can control OOMU
Only the account you chose in step 3. Messages from anyone else in the channel are ignored without a reply, and recorded.
A few more safeguards:
- Each message is handled once. If Slack or Discord delivers the same message twice, the second copy does nothing.
- At most 12 commands a minute from your account. Anything beyond that is ignored and recorded.
- Every approval, denial, and snooze is recorded in Chat → Activity → Approval history, marked with the app it came from. It goes through exactly the same steps as approving on your Mac.
Turning it off
On the app's card:
| Action | What it does |
|---|---|
| Test connection | Checks the account and channel again: "Account and destination verified." |
| Turn off | Stops listening and closes the connection. Your setup is kept. |
| Disconnect | Asks first, then removes the account and its saved tokens from this Mac. |
| Manage | Shows the bound account and channel. |
Air-Gap Mode closes every messaging connection while it is on. Turn Air-Gap Mode off and the channels you had turned on reconnect.
Related
- Working with Mochi: where the files you approve come from.
- Connecting services: the rest of what OOMU can connect to.
- Privacy & security: everything Beta 4 sends, and where.