
iMessage Hermes on a Raspberry Pi
An always-on AI agent that lives in your home
82 followers
An always-on AI agent that lives in your home
82 followers
An always-on AI agent that lives on a cheap little Raspberry Pi in your home, with a real phone number you text over iMessage or SMS from anywhere. It runs Hermes, an open-source agent, and installs by handing the guide to a coding agent that works over SSH. Best of all, it's a foundation: build a family calendar on a kitchen screen, a recipe helper on the fridge, whatever you dream up. We build in public — join the Discord to see what others are making.




iMessage Hermes on a Raspberry Pi
kitchen dashboard and fridge recipe helper are exactly the kind of small home automation that never gets built because setting up a server is annoying, so having it fall out of one Pi is a nice unlock. question on the phone number side though - since the agent has its own number, is there any allowlist on who it'll actually act on, or does anyone who texts that number get to add to the family calendar / whatever gets built on top. wrong number texting in feels like the actual attack surface here, more than the iMessage bridge itself
iMessage Hermes on a Raspberry Pi
@omri_ben_shoham1 Yeah, great point. The Plow Chat API handles this for you. With the API you are provisioning threads vs provisioning a raw phone number line. So you don't have a phone number that anyone can text, but rather a thread with pre-approved participants. Each participant will have to send a verification code to opt-in. You can create as many threads as you want, but numbers that don't match with a verified chat just don't go through.
ShellMate
But how does the iMessage layer work if it’s on the rasberry pi?!
Plow Mac App
Great question — iMessage doesn’t run natively on the Pi. The Pi hosts Hermes; I’ll share the bridge/setup details so it’s clearer.
ShellMate
@delattre where are you going to share the details?
Plow Mac App
I’ll share the details here in the comments, and link out if there’s a longer write-up.
Plow Mac App
I’ll share the details here in the comments, and link out if there’s a longer write-up.
Plow Mac App
Great question — iMessage doesn’t run natively on the Pi. The Pi hosts Hermes; I’ll share the bridge/setup details so it’s clearer.
iMessage Hermes on a Raspberry Pi
@sodio Yeah, check out the Plow Chat API How To. This will explain how you can use iMessage as an API https://howto.plow.co/plow-chat-api
iMessage Hermes on a Raspberry Pi
hey domo -- do you know when the next recycling day is?
The interesting constraint here is that iMessage doesn't really want to run anywhere except macOS. So a Pi in the corner of your house implies something else is doing the actual sending — a Mac acting as a bridge, or one of the reverse-engineered routes.
Which path did you take, and how stable has it been across iOS updates? That's the part I'd want to understand before hanging an always-on agent off it, since the failure mode isn't a crash you'd notice — it's messages quietly not going out while you assume they did.
iMessage Hermes on a Raspberry Pi
Hey @ark_y_k! Yeah, great question. We are using the Plow Chat API so you don't even need a Mac bridge. The Plow Chat API has been super stable and it also gives your agent its own phone number vs messaging yourself or something strange w/ BlueBubbles. We have a guide on how to use this API service as well -- https://howto.plow.co/plow-chat-api
@plucas_pivots That's a cleaner architecture than I expected — no Mac in the loop at all, and giving the agent its own number rather than borrowing yours removes the awkward part where your own thread becomes the agent's workspace.
The tradeoff you've picked up in exchange is that Plow is now load-bearing. Anything sitting on top of iMessage without an official path is holding a position Apple didn't grant, so the thing I'd want to know before running an always-on agent on it is what happens on the day that route closes. Is there a fallback channel the agent can degrade to — SMS, Signal, anything — or does the whole thing go quiet? For a home assistant that silence is the failure mode, since nothing errors, it just stops.
Plow Mac App
Exactly — that’s the tradeoff. The separate number keeps the blast radius small, and Plow is the part we operate/monitor so the user doesn’t have to.
@delattre Taking that on as something you operate rather than something the user inherits is the right division of labor — most projects in this space quietly leave the dependency as the buyer's problem and don't mention it until it breaks.
Blast radius is the honest framing too. The risk doesn't go to zero, it just gets bounded to a number that isn't my main one. For a home assistant that's the trade I'd take.
Thanks for answering it straight instead of talking around it. Good luck with it.
the "provision a thread, not a raw number" answer to Omri's question above is a much better design than I expected, most projects like this just ship an open phone number and hope for the best. separate question - what happens to the agent's state after a power blip? Pis and SD cards are notorious for corrupting on a hard power cut, and this thing is meant to be always-on with nobody babysitting it. is there anything like a read-only root fs or periodic snapshot, or is "just don't lose power" the honest answer for now
iMessage Hermes on a Raspberry Pi
Hey! Quick question for Domo. Do you know when the next recycling day is?
Plow Mac App
Next recycling pickup is Wednesday, August 12 (recycling, organic waste, and garbage together) — the bins-out reminder is the evening before, Tuesday the 11th. The August 5 pickup is garbage and organic waste only.
Very nice, how to test?
iMessage Hermes on a Raspberry Pi
@pueblo_aguilar Hey! Every step in the guide ends with a quick checkpoint — a real command or output to confirm it worked before you move on. Doing it by hand, that's how you know the concept landed; and when you hand the guide to a coding agent, it uses those same checkpoints to keep itself on track.