Your AI butler replies in the chats you choose.

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.

Made with Textmock

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

On your Mac

TextButler runs on your Mac. New installs start paused until you choose which chats it can answer.

Pick what writes replies

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.

  1. A local model on your Mac

    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.

  2. Qwen 3.5 Flash with your own Vercel AI Gateway key

    Qwen

    Spending stops at $1 a day.

    The conversation context goes to Vercel AI Gateway.

  3. Your Claude Code, Codex, or Devin subscription

    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.

Your agent sets it up. You stay in charge.

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.

  1. Ask your agent.

    Your agent installs TextButler, connects your messaging apps, and checks the setup.

  2. Say yes to your Mac.

    Grant Messages access or pair your messaging account when prompted. Choose a local model, a Gateway key, or an AI subscription.

  3. Turn on one person.

    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.
Show full prompt
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.

Prefer to do it yourself?

Connect your chats in the guided terminal, one screen at a time.

Open setup guide
See the first terminal screen
$ bun run textbutler tui

TEXTBUTLER
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.
First run on a new install

Your agent speaks its language

Ask your agent to find a conversation, summarize it, or prepare a reply for your review.

Read the agent guide

What it works with

Connect your messaging apps and choose which conversations it can answer.

Messaging apps

iMessage

Replies in the direct and group chats you choose in Messages.Keep your Mac awake and signed in to Messages.

WhatsApp

Replies in selected direct and group chats, through a linked device.Pair your WhatsApp account during setup.

Beeper

Signal, Telegram, Instagram, and moreText replies in selected direct and group chats, through Beeper Desktop.Keep Beeper Desktop open with your messaging accounts connected.

GhostGet connects your messaging apps. Your agent can set it up with TextButler. Messaging setup guide

Your Mac

  • Mac only

    It runs in the background, with no window and no menu bar icon. There’s no iPhone, Windows, or Linux version.

  • Open source

    Free and MIT licensed.

  • Nothing sent to this site

    This website never receives your messages.

From a message to a reply.

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.

  1. Someone texts you.

    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.

  2. It checks before it speaks.

    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.

  3. 👀, right away.

    It sends an acknowledgment before preparing the answer: 🤖{ 👀 } with the default marker.

  4. It reads the room.

    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.

  5. Your chosen model writes the reply.

    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.

  6. Reply in the same chat.

    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.

  7. You can step in anytime.

    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.

KeywordDefault
Answers only messages that contain the word “butler”, in any capitalization.
Smart
Can answer a request for help without the keyword. It asks a model whether help was requested and stays quiet when the result is uncertain.
You can ask too
Say “butler” in any chat you’ve turned on, including your own, and it answers you.

You stay in charge

An assistant in your messages only works if it knows when to stay out of them.

It’s there when you aren’t.

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).

Made with Textmock

Choose how replies are marked.

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.

Made with Textmock

It runs on your Mac.

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/

Ask it yourself

Say “butler” in your own chat and it works for you, searching that chat’s history. The marker can’t be turned off here.

Made with Textmock

FAQ

Questions

Does it read all my messages?

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.

Will people know it’s not me?

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.

Which AI writes the replies?

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.

What does it cost?

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.

Do I need Ollama?

No. Choose Ollama for local replies, use a Vercel AI Gateway key, or connect your Claude Code, Codex, or Devin subscription through xcb.

Does it work on my iPhone?

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.

Does it answer in group chats?

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.

Can I read a reply before it goes out?

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.

How is it different from Smart Reply, GhostReply, or OpenClaw?

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

What about Telegram and Signal?

Connect them through Beeper Desktop for text replies. Keep Beeper open, and check each service’s terms before using AI with its messages.

Is textbutler.app collecting anything?

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.

Start with one person

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.