It’s there when you aren’t.
It answers the people you choose, when they ask, in the chats they already use.
Marked automatic replies have worked end to end over iMessage in our testing. 👀 goes out first. It stays out of group chats.
iMessage and WhatsApp today, more apps through Beeper, on Mac
Textbutler
When someone you’ve turned on texts “butler”, a clearly marked AI assistant answers for you from your Mac. It writes with a local model or the AI subscription you already pay for. Claude Code, Codex, or Devin can set it up for you.
In development · macOS · iMessage, WhatsApp, and Beeper · runs from source · new installs start paused
In development. Textbutler runs on a Mac, built from its source code: there’s no app to download yet, and new installs start paused. Automatic replies have worked end to end over iMessage in our testing. Try them on your own account, especially over WhatsApp or Beeper, before you rely on them.
How it works
Most of the time, it does nothing. When someone you’ve turned on asks for it, it says so right away, reads your notes and your chat, and answers in a bubble nobody could mistake for you.

They write in a one-to-one chat you’ve turned on. Ghostget passes the message to Textbutler, running in the background on your Mac.
Is this person turned on? Is it a one-to-one chat? Did they say “butler”? Has it been 5 minutes since you last wrote here? Is it under 12 replies this hour? It also waits 8 seconds, so a burst of texts gets one answer.
It sends 🤖{ 👀 } so they know it’s on it.
It reads the notes you keep for this person (how you talk, what matters, what’s off-limits) and the recent conversation. In your own chat it can also search your full history; for other people that’s off unless you turn it on.
That’s a local model, Qwen through your key, or your subscription. It can search the web only when a Gateway key is saved, and it refuses any search that reuses words from your private messages.
The reply arrives as 🤖{ … }, so nobody mistakes it for you. If it can’t tell whether a send went through, it doesn’t send it again.
Write in the chat yourself and it stays out of it. Pause everything with one command. Or ask for a draft to review before anything is sent. Drafts expire after 15 minutes.
No sound needed. Every name in the film is made up.
Supports
Connect your messaging apps and choose which conversations it can answer.
Automatic, marked replies in one-to-one chats.
One-to-one only. No tapbacks or other reactions on a normal Mac. SMS and RCS aren’t supported. Your Mac must be awake and signed in to Messages.
Replies in one-to-one chats, through a linked device.
You pair it once yourself. It uses an unofficial client, so try it on your own account before you rely on it.
Signal, Telegram, Instagram, and more
Replies in direct chats, through Beeper Desktop.
Beeper Desktop has to stay open. No photos, reactions, or polls. Telegram’s terms limit AI use of message content, so ask the person first.
Nothing. Textbutler ignores group chats, reactions, and old messages.
It answers one person at a time, in the one-to-one chats you turn on.
Messages reach Textbutler through Ghostget, a separate Mac tool you install first. Set up Ghostget
It runs quietly in the background, with no window and no menu bar icon. There’s no iPhone, Windows, or Linux version.
Setup builds a small helper app on your Mac so macOS can grant iMessage access. The helper has no window.
MIT licensed, and it runs from source with Bun.
This website never receives your messages.
Reply writers
Replies can be written by a local model through Ollama (in testing), by Qwen 3.5 Flash through your own Vercel AI Gateway key, or by your Claude Code, Codex, or Devin subscription through xcb.
ollama pull qwen3:4b-instruct-2507-q4_K_M
textbutler providers localQwen
pbpaste | textbutler providers gateway-keyClaude CodeCodexDevin
textbutler providers check ACCOUNTComing Coming soon: Textbutler AI credits, so the butler can write replies through Vercel AI Gateway without a key of your own. Credits aren’t available yet. Today you pick a local model, your own subscription, or your own Gateway key.
If you choose one with a command, that choice wins. Otherwise a saved Gateway key wins, and with no key saved, an Ollama server already serving the pinned model is picked up when the background service starts. When a Gateway key is saved, the butler can also search the web for the people you turn on (in your own chat, only when you ask), using your key even when a local model writes the replies. It refuses any search that reuses words from your private messages, and you can turn search off for one person from the command line. Setup installs a local copy of Textbutler on your Mac (bun run textbutler:install). That copy writes the AI replies, and it refuses to build if its code doesn’t match the last reviewed version. Connect a subscription through xcb



Local model: the reply is written on your Mac. In testing.
Setup
Paste this prompt into your coding agent. It follows the setup guide and stops when you need to grant access, sign in, or choose a contact.
Paste the prompt below into Claude Code, Codex, or Devin. It clones the repo, installs it, connects your messaging apps, and runs textbutler doctor until only your steps are left.
For iMessage, turn on Full Disk Access for the TextButler helper, then allow the Messages prompt when your agent re-runs setup. For WhatsApp or Beeper, pair once. Then choose what writes replies: pull the local model, paste a Gateway key, or sign in through xcb.
Everyone starts off, and the butler starts paused. Turn on one chat, then run textbutler resume. When that person says “butler”, your butler answers.
Set up Textbutler on this Mac: https://github.com/hraness/textbutler
Follow docs/textbutler/getting-started.md step by step.
If Ghostget isn't installed, set it up first: https://ghostget.com/docs/tutorials/getting-started
Connect my iMessage, and WhatsApp or Beeper if I use them.
For replies, if Ollama is running with qwen3:4b-instruct-2507-q4_K_M, choose it with `textbutler providers local`; otherwise ask me which option I want.
Run `textbutler doctor` after each step and do what it says.
Stop and tell me whenever macOS asks for a permission, a pairing, or a key.
Leave every chat turned off and don't send any messages.You’ll need a Mac, Bun 1.3.14, and Ghostget. There’s no one-line installer and no Textbutler setup skill yet (coming), so your agent follows the written guide. Permission switches, pairing, and pasting a key are always yours to do.

$ bun run textbutler tui walks you through the same steps, one screen at a time.
$ bun run textbutler tuiTEXTBUTLER Your conversations, with you in control. Service not connected Start with Setup & readiness. 1 Setup & readiness 2 Connect messaging apps 3 Add a conversation 4 Inbox & replies 5 Manage a contact 6 Pause automatic replies 7 Resume automatic replies 8 Give Textbutler access q Quit terminal Quitting leaves the background service running.
The JSON command line lets your agent list conversations, summarize a thread, draft a reply, and send it only with the review code that draft shows.
textbutler conversations list
textbutler replies suggest CONTACT
textbutler replies show DRAFT
textbutler replies send DRAFT DIGESTControl
An assistant in your messages only works if it knows when to stay out of them.
It answers the people you choose, when they ask, in the chats they already use.
Marked automatic replies have worked end to end over iMessage in our testing. 👀 goes out first. It stays out of group chats.
Everything it sends is wrapped in 🤖{ }, including the 👀.
The marker is on by default. You can remove it only per person, and never in your own chat. New installs start paused, every person starts off, and setup never sends a message. textbutler pause stops everything, and textbutler contacts disable turns one person off.
No server of ours sits in the middle. Your notes about each person are plain files you can read and edit. With a local model, the reply is written on your Mac too (in testing).
Gateway spending stops at $1 a day. Web search needs a saved Gateway key, and it refuses any search that reuses words from your private messages. Through xcb, the model can’t run commands on your Mac.
contact/
├── AGENTS.md standing instructions
├── ABOUT.md what matters here
├── MEMORY.md dated, sourced notes
├── STYLE.md how it talks here
├── history/
├── notes/
├── attachments/
└── outbox/textbutler habitats show lists them and textbutler habitats memory-clear removes them. How contact folders workYour own chat
Say “butler” in your own chat and it works for you, searching that chat’s history. The marker can’t be turned off here.
FAQ
It acts only in the one-to-one chats you turn on, and only when asked. Your notes about each person are plain files on your Mac. With a local model, the reply is written on your Mac too.
Yes. Everything it sends is wrapped in 🤖{ }, including the 👀. You can remove the marker for one person, never in your own chat.
Replies can be written by a local model through Ollama (in testing), by Qwen 3.5 Flash through your own Vercel AI Gateway key, or by your Claude Code, Codex, or Devin subscription through xcb. If you choose one with a command, that choice wins. Otherwise a saved Gateway key wins, and with no key saved, an Ollama server already serving the pinned model is picked up when the background service starts. When a Gateway key is saved, the butler can also search the web for the people you turn on (in your own chat, only when you ask), using your key even when a local model writes the replies. It refuses any search that reuses words from your private messages, and you can turn search off for one person from the command line. Through xcb, the model can’t run commands on your Mac.
Textbutler is free and open source. A local model costs nothing to run. With a Gateway key, Vercel bills you, and Textbutler stops spending at $1 a day. With a subscription, it uses the plan you already pay for. Textbutler AI credits, for people without a key of their own, are coming soon and can’t be bought yet.
No. Ollama is one of three options. If you already run it with qwen3:4b-instruct-2507-q4_K_M pulled and no Gateway key is saved, Textbutler picks it up when its background service starts, or you can choose it with textbutler providers local. Otherwise paste a Vercel AI Gateway key or connect your Claude Code, Codex, or Devin subscription through xcb.
Your friends and your phone see the messages as usual. Textbutler itself runs only on a Mac that’s awake and signed in. There’s no iPhone, Windows, or Linux version.
No. It ignores group chats, reactions, and old messages, and answers one person at a time in the one-to-one chats you turn on. SMS and RCS aren’t supported.
Yes. Ask for a draft instead of an automatic reply. The draft shows every word and who it goes to, and it sends exactly that only when you confirm it with its review code. Drafts expire after 15 minutes. You can also type your own reply from the guided terminal.
Smart Reply in Apple Messages and Writing Help in WhatsApp suggest replies that you send yourself. GhostReply is a $4.99 Mac app that answers iMessages in your texting style. OpenClaw is an open-source assistant you message, and it can run commands on your computer. Textbutler answers only the people you turn on, when they ask, marks its replies by default, keeps notes on each person in files you can edit, and its model can’t run commands on your Mac. If you only want suggestions, the built-in features are simpler.
Through Beeper, text only. Telegram’s terms limit AI use of message content, so ask the person first.
Only anonymous visit counts. textbutler.app counts page views, page load speed, and a few clicks, such as copying the setup prompt, with PostHog. It sets no cookies, doesn’t identify you, and doesn’t record sessions. It has no message upload, contact import, account, or drafting form, and it never sees your messages. Your Mac keeps each person’s notes. When you choose a hosted AI option, it handles the context it receives under its own data policies.
Textbutler replaced it. Its history readers and methodology are still available as legacy tools on the legacy history page. Installing them doesn’t install Textbutler or turn on automatic replies.
Paste the prompt, approve what your Mac asks for, and turn on someone who knows you’re trying it. Everyone else stays off.
In development · macOS · iMessage, WhatsApp, and Beeper · runs from source · new installs start paused
Looking for the Message Like Me history tools? View legacy history sources.