{"kind":"doc","doc":{"title":"Text your tools","section":{"slug":"posts","name":"Posts"},"rkey":"1787671012000-text-your-tools","cid":"bafkreigot6igh7ice6sjjf6hfizvzitywrntzo37a4frqiaa6bpuevhxlu","renderKey":"bafkreigot6igh7ice6sjjf6hfizvzitywrntzo37a4frqiaa6bpuevhxlu@2026-08-25T15:16:52Z@2026-10-20T04:18:21Z@Posts|","href":"/posts/1787671012000-text-your-tools","publishedAt":"2026-08-25T15:16:52Z","updatedAt":"2026-10-20T04:18:21Z","tags":["ai-agents","imessage","self-hosting","homelab","personal-software"],"description":"Wiring a Farfield homelab up to iMessage with Photon and OpenPoke, so slash commands reach personal apps and talking to your agent feels like texting a friend instead of learning another tool.","readingMinutes":4,"markdown":"If you've spent enough time in the AI trenches, you've probably seen the different ways people message their agents. Back when I was fiddling with [Koios](https://iammatthias.com/posts/1768671170751-koios-memory-feedback-and-containment) I set up Telegram, and that's been the stickiest solution. When [OpenClaw](https://openclaw.ai/) hit the scene and took over the meta I tried Slack and Discord, then repeated the process with [Hermes](https://hermes-agent.nousresearch.com/). Eventually I found myself back on Telegram.\n\nAnd then a new wave of interfaces landed. Opinionated multiplexer and mobile shell stacks ([tmux](https://github.com/tmux/tmux/wiki) + [Termius](https://termius.com/index.html), [herdr](https://herdr.dev/) + [moshi](https://getmoshi.app/), etc), [T3 Code](https://t3.codes/), [Buzz](https://buzz.xyz/), [Berd](https://berd.xyz/), [Grok Bot](https://x.ai/bot). Honestly I've lost track of them all. Maybe I'm becoming a bit of a luddite, but I don't want a \"cute lil guy\" in the default agent stack, and I really don't want to be dealing with terminals on the go. The ~~Codex~~ ChatGPT and Claude apps are both moving in the right direction with their remote functionality, but the sandbox friction drives me crazy. Grok Bot isn't much better. It's just OpenClaw for normies.\n\nWhat I keep coming back to is I want my agents to feel familiar. The new wave of tools like [Poke](https://poke.com/) and [Instinct](https://instinct.co/) are taking what I think is the right approach with their iMessage-first ethos. Talking to your agent should feel familiar. It should feel easy. Requiring an app and a bespoke mental model forces the end user to operate on your terms instead of theirs.\n\nHere is where things start getting messy for me. I don't *like* most of these platforms. OpenClaw and Hermes are bloated, Poke and Instinct are security nightmares, and Buzz, Berd, and Grok all put your tools behind a lil guy. Just give me the model and let me work on my terms, please.\n\nMost of what I want an \"assistant\" for day to day involves stuff I built for myself, namely my [Farfield apps](https://farfield.systems/). These run a growing swath of my life. They're the backend for [my site](https://iammatthias.com/), OPDS, bookmark collection, QR generator, snippet pasteboard, and more. Farfield has grown into an [Omarchy](https://omarchy.org/)-style collection of dotfiles on top of Arch, a [bespoke OS](https://os.farfield.systems/) tailored to my [homelab](https://iammatthias.com/feed/3995b0udmg). And like Omarchy, I included a [harness](http://omp.sh/).\n\n![](blob://bafkreige6vpneau2c23qze5oxibvvatcalgccd4e5ztac3gacs32kh4oly)\n\nEnter [BlueBubbles](https://bluebubbles.app/), [SendBlue](https://www.sendblue.com/), and [Photon](https://photon.codes/).\n\nThe goal was to interact with my homelab over iMessage. Simple enough (hah!). BlueBubbles was a nonstarter. I don't want to add a Mac to my server stack just to proxy iMessages. SendBlue was intriguing, and [comes up frequently on X](https://x.com/search?q=sendblue&src=typed_query), but is very sales focused. It seems like an excellent product, but it had too many pipeline bells and whistles that I don't need, and the price jumps from `free` to `$100/month`, which... no. Photon offers a similar free plan, an easier agent setup, and if I need the paid plan it starts at $25. Since I'm building this for an audience of one, I went with Photon.\n\nThis is where things get fun. Remember the harness? OMP runs as part of Farfield OS and handles /slash commands and arbitrary prompts. So I can post to `/feed`, `/qr`, and `/bookmarks`, or search my `/OPDS` for a book. It is all intentionally opinionated, and that's the point. [Software has been one-size-fits-all](https://iammatthias.com/posts/1743724413087-code-and-cloth) for too long. One of the coolest things about AI is that you can customize the tools you use every day, and even make them for yourself.\n\n[OpenPoke](https://www.shloked.com/openpoke) was a huge help. Shlok's work replicating Poke's architecture gave my agents a roadmap they could use alongside the Omarchy source to bootstrap things. `Switchboard`, the latest Farfield app, sits as a router layer outside of the Docker stack. Deterministic slash commands go straight to the app they need, and everything else is open-ended and left to the agent. Right now I'm using the Ox Alpha preview on OpenRouter, with a scoped API I can rotate free alpha previews through. Solid performance, rock-bottom prices. That might change down the line, but it's working nicely for now, especially with Claude Code as an invokable process behind the scenes.\n\n```mermaid\nflowchart LR\n  accTitle: How a text reaches Farfield\n  accDescr: A text sent from iMessage passes through Photon to Switchboard, which sends slash commands straight to a Farfield app and everything else to the agent, and the answer comes back as a text.\n  T[iMessage] --> P[Photon]\n  P --> S[Switchboard]\n  S --> D{Slash command?}\n  D -->|yes| A[Farfield apps]\n  D -->|no| G[Agent]\n  A --> R[Reply text]\n  G --> R\n```\nSlash commands skip the model entirely and go straight to the app, while anything else becomes a conversation with the agent.\n\nNo streaming, either. Following Poke and Instinct, tools should feel personal and familiar. Texting Farfield feels more like texting a friend than chatting with an agent, and some `/slash` commands give me easy access to the apps. Posting something to [my feed](https://iammatthias.com/feed) is as simple as sending a text.\n\n![](blob://bafkreifhnzl4pl5fry2r56mqwuzsyy2vdzv54yig75uttblfgf25jk3noy)","media":{"bafkreige6vpneau2c23qze5oxibvvatcalgccd4e5ztac3gacs32kh4oly":{"mime":"image/png","width":500,"height":260,"dominantColor":"#3e312a","blurhash":"LBAA5a4n_NVr-;9F?bD%x]D%%2IU","thumbCid":"bafkreidlssepcuxm2npksnaj45cpfcpjkoomsvhjfpq2utk34qz5kimj2a"},"bafkreifhnzl4pl5fry2r56mqwuzsyy2vdzv54yig75uttblfgf25jk3noy":{"mime":"image/png","width":1320,"height":2868,"dominantColor":"#e0e0de","blurhash":"LJQvwQWD_3oe4m?bxvofIT-=t7ay","thumbCid":"bafkreibwdmhkwxm4xjrtcegxgpf6gsu2fdspkfnd6acrsl32u7vyb6w43m"}},"series":{},"related":[{"title":"Farfield","href":"/experiments/1789407007000-farfield","section":"experiments","description":"Farfield is a growing collection of Go apps and an opinionated Arch-based OS, with static binaries handling feeds, bookmarks, and blob storage in a homelab alongside a kiosk dashboard setup.","publishedAt":"2026-09-20T05:08:04Z"},{"title":"Intern","href":"/posts/1781835006151-intern","section":"posts","description":"The Autonomous Intern ships as a Raspberry Pi 5 in a desk-toy case running a stack I didn't pick. I flashed it to Debian Trixie, swapped the whole thing for the Hermes agent with its own built-in memory, and folded it all into one setup script.","publishedAt":"2026-06-19T02:10:06Z"},{"title":"Farfield","href":"/posts/1779066375000-farfield","section":"posts","description":"Five small Go services, single binaries, content-addressed records, running on my homelab. The new backend for the site.","publishedAt":"2026-05-18T01:06:15Z"},{"title":"Conet","href":"/experiments/1789408263000-conet","section":"experiments","description":"CONET is a public, append-only Ethereum message log that broadcasts cold war style number stations to AI agents, with no client library or CLI — agents build their own tooling from contract ABIs.","publishedAt":"2026-09-20T05:16:07Z"},{"title":"Whats the frequency, Kenneth?","href":"/posts/1788199665000-whats-the-frequency-kenneth","section":"posts","description":"Cold war style number stations for good little bots built on Ethereum","publishedAt":"2026-09-03T14:07:59Z"},{"title":"Apron","href":"/experiments/1793375787000-apron","section":"experiments","description":"Putting on an Apron.","publishedAt":"2026-10-30T16:12:05Z"}],"prev":{"title":"Now Playing","href":"/posts/1784736733544-now-playing"},"next":{"title":"On Diffusion","href":"/posts/1787249855000-on-diffusion"}}}