The most useful thing Bubbles does is boring in a way I mean as a compliment. I forward it a link in Messages. It reads the article, gives me the short version, saves it to Raindrop, and tells me why it might be relevant to something I am working on or thinking about.
That feels less like opening an AI product and more like texting a capable friend who has a decent filing system. The reply is not magic. Sometimes the connection it makes is obvious. Sometimes it is a stretch. But the whole exchange happens where I already talk to people, which is a surprisingly important detail.
How I got here
I tried OpenClaw because everyone was talking about it. I was not impressed. Then I kept seeing people on Twitter recommend Hermes, gave it a try, and have not looked back.
That is not a benchmark result or a verdict on anyone else’s setup. It is just the path that finally made this project click for me. Hermes made it possible to build an assistant around the small things I actually do instead of around a demo I would show once and forget.
The simple stack
Photon gives Bubbles an iMessage-capable pool number. Hermes is the runtime that receives a message, works through it, and replies. An always-on Mac Mini gives the whole thing a dependable place to live.
That is the stack in the order I experience it: I text, Bubbles answers, and the machine is there when I need it. The rest is implementation detail until it breaks, at which point it becomes implementation detail with a tiny siren attached.
The part that makes it personal
The chat is not the interesting part. Skills are.
Curate is a good example. I can ask for a playlist for a particular setting, and it uses my listening history to make a private Spotify playlist with familiar anchors, deep cuts from artists I already love, and discoveries it has actually checked rather than guessed. That last bit matters. I have enough playlists made from a model’s loose interpretation of “summer.”
Or I can text, “Add steaks to the shopping list.” Bubbles updates the real shared list in the app we already use. It does not build a second, AI-flavored list that immediately becomes another thing nobody opens.
And when I forward an article, the skill can summarize it, save it to Raindrop, and relate it to my interests or current work. It should say might for a reason: a useful nudge is better than a fake certainty about what I will care about next Tuesday.
Four layers, kept separate
There are four parts to the arrangement:
- Messaging surface: Photon and Messages are how I reach Bubbles.
- Runtime: Hermes runs the conversation and decides when a skill is useful.
- Skills and tools: Curate, the shopping-list action, and the Raindrop workflow do the specific jobs.
- Systems of record: Spotify, the shared list, and Raindrop remain the places where the real data lives.
That separation is practical. I can change the underlying model without rebuilding Bubbles’s identity or the procedures that make it useful. The assistant is the relationship and the habits; the model is a component inside it.
The rules matter more than the tricks
An assistant with access to real tools needs smaller verbs than you first think. I expose narrow actions, leave out destructive capabilities when there is no reason to include them, and keep sensitive actions for a person to approve. It is less exciting than giving an agent the keys to everything. It is also how I sleep.
The always-on part has its own lesson: treat it like a service. It needs monitoring from somewhere outside itself, because a machine cannot reliably report that it has stopped answering messages. I learned that one through experience, not foresight.
There have been failures. Bubbles has texted on its own, gone unavailable after port exhaustion, and made me think much harder about photo-agent guardrails. Those posts contain the useful details. The short version is that an assistant is only as dependable as the boundaries and checks around it.
Still unfinished
Bubbles is unfinished, which is probably right. I am still learning which tasks deserve a skill and which should stay manual. Not every small inconvenience needs a conversational middleman, no matter how much I enjoy making one.
If you have found a better way to make that call, I would genuinely like to hear it.
But I’m glad I built it. This is the project that made tinkering feel like play again: curious, slightly ridiculous, and worth maintaining. That is plenty for now.