What you need first

  • A Mac that stays awake. Shooda can only answer while the machine is on. An old MacBook on a shelf with sleep turned off is perfect.
  • Messages signed in on that Mac, with your own Apple ID and your own number.
  • Homebrew. If brew --version prints something, you have it. If not, get it from brew.sh first.
  • An Anthropic API key. OpenClaw has no model of its own; you give it one. Get a key at console.anthropic.com, put $10 on the account, and set a monthly limit while you're in there. $20 leaves plenty of room above what this actually costs. Other providers work, and so does a model running locally on your own machine with no key at all, but the settings in step 5 are written for Anthropic.
One good habit: do this in a fresh folder that has nothing else in it. OpenClaw gives Shooda real access to that folder, and matches are people you barely know. Keeping it empty means there's nothing there to reach.

The setup

  1. Install OpenClaw.

    curl -fsSL https://openclaw.ai/install.sh | bash
    openclaw onboard --install-daemon
    openclaw doctor

    Onboarding asks which model to use and for a key. Choose Anthropic and paste yours. Step 5 assumes it.

    openclaw doctor ends without errors, and tells you where your config file lives. Note that path. Step 5 needs it.

  2. Add the iMessage plugin.

    openclaw plugins install @openclaw/imessage

    It reports the plugin installed.

  3. Install the bit that talks to Messages.

    brew install steipete/tap/imsg
    imsg rpc --help

    imsg rpc --help prints help text rather than "command not found".

  4. Give it the two macOS permissions.

    Run this. It will fail the first time, and that's the point. Failing is what makes macOS show you the permission prompts.

    imsg chats --limit 1

    When the boxes appear, allow both. If they don't appear, open System Settings → Privacy & Security and add your terminal app under Full Disk Access, then under Automation allow it to control Messages. Quit your terminal completely and reopen it. The permission only takes effect in a fresh one.

    imsg chats --limit 1

    The second time, it prints one of your conversations. This is the step people get stuck on; don't move on until you see a chat.

  5. Point OpenClaw at iMessage.

    These two lines print the only things that differ between Macs. Run them and keep the output:

    which imsg
    echo "$HOME/Library/Messages/chat.db"

    Now open the config file from step 1 and paste this inside the outermost { }, swapping in the two lines you just got. The settings above the channel are what keep your bill at a few dollars a month rather than a few hundred. Don't skip them:

    agents: {
      defaults: {
        model: { primary: "anthropic/claude-haiku-4-5" },
        utilityModel: "anthropic/claude-haiku-4-5",
        params: { cacheRetention: "short" },
        heartbeat: { every: "0m" },
        compaction: { model: "anthropic/claude-haiku-4-5" }
      }
    },
    session: {
      dmScope: "per-channel-peer",
      reset: { mode: "daily", atHour: 4 }
    },
    channels: {
      imessage: {
        enabled: true,
        cliPath: "← your first line",
        dbPath: "← your second line"
      }
    }

    Two of those matter more than the rest. heartbeat: "0m" stops OpenClaw waking up every half hour to think about nothing. On a default install that alone is most of the bill. dmScope gives every person their own separate memory; without it all of your conversations share one, which costs more and lets one bleed into another.

    Copy those paths rather than typing them. They differ between Macs, and a wrong one here is the second most common reason this doesn't work.

    Save it, then check OpenClaw actually took it:

    openclaw config get agents.defaults.model.primary
    openclaw models list --provider anthropic

    The first prints anthropic/claude-haiku-4-5, and Haiku appears in the second. If Haiku isn't in that list, stop and sort it out. OpenClaw will quietly fall back to a model that costs twice as much and won't tell you.

  6. Start it, and let yourself in.

    openclaw gateway

    Leave that running. In a second terminal window, text yourself from your phone, then:

    openclaw pairing list imessage
    openclaw pairing approve imessage <CODE>

    Your own number shows up in the pairing list and approves. Codes expire after an hour, so if the list is empty, text yourself again.

  7. Install Shooda.

    Unzip the download, then point at the folder:

    openclaw skills install ./shooda

    It reports the skill installed.

  8. Say hello.

    Text your own Mac, or open a chat with your agent, and say:

    hey Shooda

    It introduces itself, asks the one question it needs, and starts learning how you write. From here it's Shooda's job, not yours.

What it costs to run

OpenClaw bills you per message through your own API key, so this is your cost, not ours. With the settings above and Haiku, expect somewhere around $5 to $15 a month for normal use, meaning a handful of conversations and a few dozen messages a day. Roughly twenty cents a day.

Set a spending cap at console.anthropic.com if you didn't already. $20 a month is generous headroom, and OpenClaw has no ceiling of its own, so the cap is what turns a bad night into a small one. To watch it day to day, say /usage full to your agent and it'll put the cost on each reply, or run openclaw status --usage for the running total.

If the writing ever feels flat, switching primary to anthropic/claude-sonnet-5 roughly doubles the bill and is still under most people's coffee budget.

If it doesn't work

"imsg: command not found"
Homebrew installed it somewhere your terminal isn't looking. Run which imsg. If that's empty, redo step 3; if it prints a path, use that exact path in step 5.
Messages send, but nothing ever comes in
Full Disk Access isn't actually applied. Confirm with step 4. If imsg chats --limit 1 doesn't print a conversation, nothing downstream will work. Remember to fully quit and reopen the terminal after granting it.
Someone texts and Shooda ignores them
That's deliberate. By default only people you've approved get through. Run openclaw pairing list imessage and approve them, the same as step 6.
The bill is higher than you expected
Check heartbeat is "0m" and dmScope is per-channel-peer; those two are almost always the answer. Then run openclaw models list --provider anthropic and confirm Haiku is there. openclaw status --usage shows where it actually went.
It stops working overnight
The Mac went to sleep. System Settings → Displays → Advanced, and stop it sleeping when plugged in.

What it sends, and what it brings you

Shooda answers the ordinary traffic on its own, replying to what she said, keeping a thread warm, confirming a time you already agreed. Every time it does, you get one line telling you what went out.

It never sends the ones that matter without you: a first message to anyone, asking someone out, moving or cancelling a date, anything about money or an address, anything emotional. Those arrive written and ready, and you send them. And if anyone ever asks whether they're talking to a bot, Shooda doesn't answer that. It hands you the thread.

Say stop at any time and it stops sending on every thread until you say otherwise.