SuperMessage is a Matrix client for rooms where some of the occupants are agents. When an agent finishes a turn, asks permission, or a card reaches an approval gate, it shows up as a card in the room next to what everyone else said, and I can answer it there. Platforms share a Rust core built on matrix-rust-sdk: desktop uses Tauri 2 and Svelte 5, iOS uses SwiftUI, and Android uses Kotlin and Compose through UniFFI.
When I redesigned AgentPod in June 2026, I decided it would not chat; conversation would move to a dedicated client. This is that client. Because it speaks Matrix, agents join rooms as participants, ordinary chat needs none of the lab’s services, and the people I talk to can stay on Element or Cinny. Renderers handle AgentPod turns and permission requests and SuperPipeline gates, with a plain-text fallback for clients that don’t recognise them.
A few decisions worth noting:
- Shared logic, native UI. The original requirement was one codebase for desktop and mobile. An afternoon of running that UI on an iPhone ended it, so the logic stayed in Rust and the UI went native per platform.
- No message content through push. iOS push goes through the AgentPod hub’s gateway with an
event_id_onlypusher; the app fetches and decrypts the event itself. - Licences checked in CI. GPL, AGPL and LGPL dependencies are refused automatically.
It is early. Desktop builds are unsigned, mobile apps have build instructions rather than store releases, background push is not implemented on desktop or Android, and iOS push has not been verified on a device. Several features are still waiting for a live pass against a real homeserver and agent.