I
iMessage
Replies in the direct and group chats you choose in Messages.Keep your Mac awake and signed in to Messages.
Turn it on for one person on iMessage, WhatsApp, or Beeper, and it replies as a clearly marked assistant that knows your history with them. You decide which conversations it can enter and when.
TextButler is an AI butler for your messages, running on your Mac. Turn it on for the iMessage, WhatsApp, or Beeper chats you choose, and it drafts or sends replies using your shared history and the notes you keep on each person, all in files you can edit. Replies carry a label by default, configurable per person.
Ask your agent to set it up: textbutler.app
TextButler runs on your Mac. New installs start paused until you choose which chats it can answer.
Reply writers
Replies can be written by a local model through Ollama, by Qwen through your own Vercel AI Gateway key, or by your Claude Code, Codex, or Devin subscription through xcb.
Use Ollama to run the reply model locally, with no model API bill.
Reply writing stays on your Mac. Optional web search sends queries through your saved Gateway key.
Qwen
Spending stops at $1 a day.
The conversation context goes to Vercel AI Gateway.
Claude CodeCodexDevin
Use a Claude Code, Codex, or Devin subscription you already have. xcb keeps your sign-in.
The conversation context goes through xcb to that account.
Connect your AI subscription or follow the model setup guide.
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.
Your agent installs TextButler, connects your messaging apps, and checks the setup.
Grant Messages access or pair your messaging account when prompted. Choose a local model, a Gateway key, or an AI subscription.
New installs start paused. Choose a conversation, turn on replies, and resume TextButler when you are ready.
Set up TextButler on this Mac: https://github.com/hraness/textbutler Follow docs/textbutler/getting-started.md step by step. Install or update GhostGet to exactly 0.18.71: https://ghostget.com/docs/tutorials/getting-started Check `ghostget --version`, then restart or reconnect TextButler's GhostGet host so it checks the new capabilities. 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.
Set up TextButler on this Mac: https://github.com/hraness/textbutler Follow docs/textbutler/getting-started.md step by step. Install or update GhostGet to exactly 0.18.71: https://ghostget.com/docs/tutorials/getting-started Check `ghostget --version`, then restart or reconnect TextButler's GhostGet host so it checks the new capabilities. 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 and a coding agent to follow the setup guide.
Connect your chats in the guided terminal, one screen at a time.
Open setup guide$ 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.
Ask your agent to find a conversation, summarize it, or prepare a reply for your review.
Read the agent guideSupports
Connect your messaging apps and choose which conversations it can answer.
GhostGet connects your messaging apps. Your agent can set it up with TextButler. Messaging setup guide
It runs in the background, with no window and no menu bar icon. There’s no iPhone, Windows, or Linux version.
Free and MIT licensed.
This website never receives your messages.
How it works
In an enabled conversation, TextButler checks whether to answer, reads the conversation’s notes and recent messages, and asks your chosen model to write a reply.
They write in a direct or group chat you’ve turned on. GhostGet passes the message to TextButler, running in the background on your Mac.
It checks the selected chat and its members, the reply mode, and your recent activity. The default limits leave 5 minutes after your last message and cap replies at 12 an hour. An 8-second pause lets a burst of texts become one request.
It sends an acknowledgment before preparing the answer: 🤖{ 👀 } with the default marker.
It reads the notes you keep for this conversation (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. If search is enabled for this person, it can search the web with a saved Gateway key, and it refuses any search that reuses words from your private messages.
The reply uses this conversation’s marker settings; the default is 🤖{ … }. 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.
Control
An assistant in your messages only works if it knows when to stay out of them.
It answers in conversations you enable, using your chosen reply mode.
By default, Keyword mode waits for “butler”. Smart mode can recognize a request for help without the keyword. After you write in a chat, it pauses for the human cooldown you set (5 minutes by default).
You choose how it speaks and what’s off-limits for each conversation.
The default marker wraps replies and acknowledgments in 🤖{ }.
You can change or remove it per conversation, but your own chat always keeps a visible marker. New installs start paused and every conversation starts off. You can pause all replies or turn off one conversation at any time.
Your notes for each conversation are plain files you can read and edit. A local model writes replies on your Mac too.
Settings and sign-ins live separately. Optional learning starts off; you can review or clear what it remembers. How contact folders work
Gateway spending stops at $1 a day. Hosted AI receives the conversation context it needs. Optional web search sends queries through your saved Gateway key.
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/Your 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 answers only in conversations you turn on. In Keyword mode it waits for “butler”; in Smart mode it can recognize a request for help without the keyword. Each conversation’s notes stay on your Mac, and a local model writes replies there too. Optional web search sends queries through your saved Gateway key.
Yes, by default. Replies and acknowledgments carry the 🤖{ } marker. You can change or remove it for one person at a time, but your own chat always keeps a visible marker.
Replies can be written by a local model through Ollama, by Qwen 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 conversations 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 conversation from the command line. Through xcb, the model can’t run commands on your Mac.
TextButler is free and MIT licensed. Local replies have no model API bill. 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.
No. Choose Ollama for local replies, use a Vercel AI Gateway key, or connect your Claude Code, Codex, or Devin subscription through xcb.
Replies show up on your iPhone and your friends’ phones as usual, but TextButler itself runs only on a Mac that’s awake and signed in. There’s no iPhone, Windows, or Linux version.
Yes. Choose a group, review its members, and turn on replies. Each group gets its own editable notes, starting with new messages after setup. If the account or members change, select the group again before replies resume.
Yes. Ask for a draft instead of an automatic reply. The draft shows every word and who it goes to, and nothing is sent until you confirm it with its review code. Drafts expire after 15 minutes. You can also type your own reply in the guided terminal.
Smart Reply in Apple Messages and Writing Help in WhatsApp suggest replies that you send yourself. GhostReply is a paid 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 in the conversations you turn on, keeps notes you can edit for each one, and its reply model can’t run commands on your Mac. It marks replies as AI by default, and you control the reply mode and marker per conversation.
TextButler compared with OpenClaw · TextButler compared with GhostReply · All comparisons
Connect them through Beeper Desktop for text replies. Keep Beeper open, and check each service’s terms before using AI with its messages.
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. The site has no upload, account, or form, and it never sees your messages. If you choose a hosted AI option, that provider handles the context it receives under its own data policies.
Ask your agent to set up TextButler, then choose a conversation and review the first reply.
For macOS. New installs start paused until you choose which chats it can answer.