iMessage and WhatsApp today, more apps through Beeper, on Mac

Textbutler

An AI butler in your messaging apps.

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

  • Maya says “butler”
  • 🤖{ 👀 } means it’s on it
  • The answer comes from this chat
  • Every butler message is marked
Example conversation on Sam’s iPhone. Textbutler runs on Sam’s Mac; the people are made up.

Where it stands

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.

From “butler” to a marked reply.

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.

One message, start to finish: a friend’s message reaches Ghostget on your Mac, passes five checks, gets a 🤖{ 👀 } right away, then your notes and the chat are read, your chosen model writes, and a marked reply goes back.
  1. Someone texts 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.

  2. It checks before it speaks.

    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.

  3. 👀, right away.

    It sends 🤖{ 👀 } so they know it’s on it.

  4. It reads the room.

    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.

  5. Your chosen model writes the reply.

    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.

  6. Marked, then sent.

    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.

  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
Decides when a reply is clearly wanted. It answers only when it’s at least 85% sure, and stays quiet otherwise.
You can ask too
Say “butler” in any chat you’ve turned on, including your own, and it answers you.

Textbutler in 42 seconds

No sound needed. Every name in the film is made up.

What it works with

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

Messaging apps

  • iMessageWorks today

    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.

  • WhatsAppNot yet tested live

    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.

  • BeeperText only

    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.

  • Group chats, SMS, and RCSNot supported

    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

Your Mac

  • Mac only

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

  • Built on your Mac

    Setup builds a small helper app on your Mac so macOS can grant iMessage access. The helper has no window.

  • Open source

    MIT licensed, and it runs from source with Bun.

  • Nothing sent to this site

    This website never receives your messages.

Pick what writes replies

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.

  1. A local model on your Mac

    In testing
    ollama pull qwen3:4b-instruct-2507-q4_K_M
    textbutler providers local
    What leaves your Mac
    Nothing. The reply is written on your Mac.
    Good to know
    About 2.5 GB. Textbutler never downloads a model for you. This is where the default is heading.
  2. Qwen 3.5 Flash with your own Vercel AI Gateway key

    Works today

    Qwen

    pbpaste | textbutler providers gateway-key
    What leaves your Mac
    The conversation context goes to Vercel AI Gateway.
    Good to know
    Spending stops at $1 a day.
  3. Your Claude Code, Codex, or Devin subscription

    Works today

    Claude CodeCodexDevin

    textbutler providers check ACCOUNT
    What leaves your Mac
    The conversation context goes through xcb to that account.
    Good to know
    Connect xcb first, then use your xcb account name for ACCOUNT. The model can’t run commands on your Mac, and xcb keeps your sign-in.

Coming 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

Where your words go with a local model: Ghostget, Textbutler, and Ollama all sit inside your Mac, and nothing crosses its edge to write the reply. Vercel AI Gateway is used only with your key, xcb only with your subscription, and web search only with your key.

Local model: the reply is written on your Mac. In testing.

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.

    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.

  2. Say yes to your Mac.

    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.

  3. Turn on one person.

    Everyone starts off, and the butler starts paused. Turn on one chat, then run textbutler resume. When that person says “butler”, your butler answers.

Paste into Claude Code, Codex, or Devin
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.

Who does what. Your agent clones and installs Textbutler, connects your apps, and runs textbutler doctor. You turn on the Full Disk Access switch, allow Messages, pair WhatsApp or Beeper if you use them, pick what writes replies, and turn on one person.

Prefer to do it yourself?

$ bun run textbutler tui walks you through the same steps, one screen at a time.

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

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 DIGEST
Read the agent CLI guide

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

It never pretends to be you.

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.

It runs on your Mac.

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.

WhatsApp · not yet tested liveJordan asks right after Sam wrote, so the butler stays out of it. It waits 5 minutes after you last wrote, and skips requests in that window rather than saving them.
via Beeper · text onlyYou set what’s off-limits for each person. It keeps to it.
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/
Each person gets their own folder.Your notes on how you talk, what matters, and what’s off-limits, in plain files you can edit. Your settings and sign-ins live elsewhere, where the butler can’t edit them. Optional learning (off by default; it needs a Claude Code subscription through xcb) can remember up to 64 sourced notes and adjust tone per chat; textbutler habitats show lists them and textbutler habitats memory-clear removes them. How contact folders work

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.

Example conversation. The details are made up.

FAQ

Questions

Does it read all my messages?

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.

Will people know it’s not me?

Yes. Everything it sends is wrapped in 🤖{ }, including the 👀. You can remove the marker for one person, never in your own chat.

Which AI writes the replies?

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.

What does it cost?

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.

Do I need Ollama?

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.

Does it work on my iPhone?

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.

Does it answer in group chats?

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.

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

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

Textbutler compared with GhostReply

What about Telegram and Signal?

Through Beeper, text only. Telegram’s terms limit AI use of message content, so ask the person first.

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

What happened to Message Like Me?

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.

Start with one person

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.