Features
Hermes-Relay ships in two flavors — Google Play (easy install, conservative scope) and Sideload (manual install, full feature set). Chat, profiles, voice, relay pairing, terminal/TUI relay, media, notification companion, sessions, and diagnostics are available across both. The Device Control channel — where the agent reads or controls your phone — is sideload-only.
A Sideload only badge on a feature row means the feature is compiled out of the Google Play APK and is only available in the sideload build. See the Release tracks page for the full breakdown and a decision guide.
Chat & Communication
| Feature | Description |
|---|---|
| Direct API Connection | HTTP/SSE streaming to Hermes API Server |
| Voice Mode | Real-time voice conversation — sphere listens, agent speaks back via your server's configured TTS/STT providers |
| Markdown Rendering | Full markdown with syntax-highlighted code blocks |
| Reasoning Display | Collapsible extended-thinking blocks |
| Connections | Pair with multiple Hermes servers — one-tap switch from the top-bar chip |
| Profiles | Auto-discovered upstream agent directories — overlay model + SOUL on chat turns |
| Personalities | Dynamic from GET /api/config — picker, agent name on bubbles |
| Command Palette | Searchable command browser — 29 gateway commands, personalities, 90+ skills |
| Slash Commands | Inline autocomplete as you type / |
| QR Code Pairing | Scan hermes-pair QR to auto-configure connection |
| Token Tracking | Per-message usage and cost |
| Tool Progress | Configurable display — Off, Compact, or Detailed |
Bridge Core
Available on both tracks:
| Feature | Description | Track |
|---|---|---|
| Relay pairing and status | QR/manual pairing, relay session grants, endpoint health, and diagnostics | Both |
| Terminal/TUI relay | Remote shell and Hermes TUI access through paired relay sessions | Both |
| Notification companion | Optional Android Notification Access forwards posted-notification metadata to your relay | Both |
| Media handoff | Relay-registered media appears in chat and can be shared through Android-native flows | Both |
Device Control Sideload only
Reading the screen
| Feature | Description | Track |
|---|---|---|
| Read what's on screen | Agent sees the active window so it can answer "what does this say?" | Sideload only |
| Multi-window read | Sees system overlays, popups, and the notification shade — not just the foregrounded app | Sideload only |
| Filtered node search | "Find every clickable labelled 'Save'" — precise accessibility-tree queries instead of guessing | Sideload only |
| Per-node property lookups | Stable node IDs that can be handed back to tap/scroll, plus full property bags for resolution | Sideload only |
| Screen change detection | Cheap screen-hash + diff so the agent can wait for a screen to actually change without polling | Sideload only |
| Real-time UI event stream | Live accessibility-event stream for "wait until this loads" and "notice when a dialog opens" waits | Sideload only |
Acting on the phone
| Feature | Description | Track |
|---|---|---|
| Tap, type, swipe, scroll | Core UI actions with destructive-verb confirmation | Sideload only |
| Long-press | Context menus, text selection, widget rearranging — by coordinate or node ID | Sideload only |
| Drag | Rearrange icons, pull notification shade, drag map pins — point A → point B over a duration | Sideload only |
| Smarter tap fallbacks | Three-tier cascade handles apps that wrap labels in non-clickable parents | Sideload only |
| Clipboard bridge | Read and write the system clipboard from the agent side | Sideload only |
| System media control | Play / pause / next / previous / volume on whichever app is playing | Sideload only |
| Macro batching | Run a sequence of actions as one workflow without a round-trip per step | Sideload only |
| Raw Intent escape hatch | Send a direct Android Intent or broadcast for apps that expose deep-link actions | Sideload only |
| Gesture reliability under idle | Short-lived wake-lock keeps gestures landing on dim/idle screens | Sideload only |
| Per-app playbooks | Bundled android skill with reusable flows for common apps | Sideload only |
| Voice → bridge intent routing | "Text Sam I'll be 10 min late" — fully hands-free | Sideload only |
Vision-driven navigation (android_navigate) | Agent looks at the screen and figures out what to tap on its own | Sideload only |
| Workflow recording | Show the agent something once, ask it to repeat the workflow later | Sideload only |
Phone utilities Sideload only
| Feature | Description |
|---|---|
| Direct SMS | Send text messages via SmsManager with send-result confirmation — no dialer bounce |
| File and media sharing | Share images, PDFs, audio, video, generated files, and captions through Android's native share sheet |
| MMS attachment handoff | Open the messaging app with recipient, text, and attachments prepared for user-mediated send |
| Contact search | Look up a phone number by contact name for voice intents like "text Mom" |
| One-tap dialing | Place a call directly from the sideload build |
| Location awareness | GPS last-known-location read for "where am I?" and location-scoped commands |
Google Play builds do not include AccessibilityService-backed screen reading or phone-control code. Direct Device Control probes fail closed with 403 device_control_sideload_only.
Device Control Safety Rails Sideload only
| Feature | Description |
|---|---|
| Per-app blocklist | Banking, password managers, and work email default-blocked from bridge actions |
| Confirmation on destructive verbs | "Send", "pay", "delete", "transfer" always prompt before acting |
| Auto-disable on idle | Bridge turns itself off after a configurable idle period; re-enable requires biometric |
| Activity log | Every command logged with timestamp, result, and screenshot thumbnail |
| Persistent notification | One-tap kill switch in the system tray whenever bridge is on |
Session Management
| Feature | Description |
|---|---|
| Session drawer | Create, switch, rename, delete sessions |
| Auto-titles | Sessions titled from first message |
| Message history | Loads from server on session switch |
| Persistence | Last session resumes on app restart |
Analytics
| Feature | Description |
|---|---|
| Stats for Nerds | TTFT, completion times, token usage, health latency, stream rates |
| Canvas bar charts | Purple gradient charts in Settings |
UX Polish
| Feature | Description |
|---|---|
| Animated splash screen | Scale + overshoot + fade animation, hold-while-loading |
| Chat empty state | Logo + suggestion chips |
| Animated streaming dots | Pulsing 3-dot indicator during streaming |
| Haptic feedback | On send, copy, stream complete, error |
| App context prompt | Toggleable system message for mobile context |
Security
| Feature | Description |
|---|---|
| Android Keystore session storage | StrongBox-preferred, TEE fallback |
| TOFU cert pinning | Trust-on-first-use SHA-256 SPKI fingerprints |
| Bearer token auth | Optional API key authentication |
| Per-channel grants | Time-bound access for terminal, bridge, TUI, and voice channels |
Choose your track
Hermes-Relay ships as two distinct APKs from the same source tree. Pick whichever fits — or install both side-by-side, they coexist on the device.
| Feature | Google Play | Sideload |
|---|---|---|
| Chat & voice | ||
Chat with your agent Direct streaming chat over the Hermes API. No middleman. | Included | Included |
Hermes Chat + Voice Output Stable voice mode: Android records speech, Hermes owns the chat/tool turn, and the relay renders the answer aloud. | Included | Included |
Realtime Agent Opt-in provider-native realtime voice with Hermes-brokered tools, confirmations, profiles, and transcript state. Experimental in both tracks; provider secrets and Hermes tools stay on the relay. | Included | Included |
Profiles, personalities, sessions Full session browser, profile picker, agent/personality context, and per-profile voice defaults. | Included | Included |
| Bridge Core | ||
Relay pairing and status Pair by QR/manual code, manage relay sessions, grants, endpoint health, and connection diagnostics. | Included | Included |
Terminal/TUI relay Use paired relay sessions for terminal and Hermes TUI access to the host. | Included | Included |
Notification triage Optional Android Notification Access forwards posted-notification metadata to your paired relay. | Included | Included |
Media handoff Relay-registered media renders in chat and can be shared through Android-native flows. | Included | Included |
| Sideload Device Control | ||
Read what is on your screen Agent can inspect the accessibility tree so it can answer "what does this say?" Google Play has no AccessibilityService or screen-reading surface. Install sideload for Device Control. | Not in this track | Included |
Tap, type, and swipe (with confirmation) Agent can perform UI actions on your behalf. Google Play command probes fail closed with device_control_sideload_only before any AccessibilityService-dependent code can run. | Not in this track | Included |
Reply to messages from voice "Text Sam I will be 10 min late" — fully hands-free. Voice-routed bridge intents are sideload-only. | Not in this track | Included |
Vision-driven navigation Agent looks at the screen and figures out what to tap on its own. Vision-driven UI navigation requires the unrestricted accessibility surface and is sideload-only. | Not in this track | Included |
Workflow recording (future) Show the agent something once, ask it to repeat the workflow later. | Not in this track | Included |
| Device Control safety rails | ||
App blocklist Banking, password managers, and work email default-blocked from bridge actions. Not needed on Google Play because Device Control is absent from that artifact. | Not in this track | Included |
Confirmation on destructive verbs "Send", "pay", "delete", "transfer" — always prompt before acting. | Not in this track | Included |
Auto-disable + activity log Bridge turns itself off when idle. Every action is logged with a thumbnail. | Not in this track | Included |
| Install & updates | ||
One-tap install Install from the Play Store with no special permissions. Sideload requires enabling "Install unknown apps" for your browser the first time. | Included | Not in this track |
Automatic updates Get new versions without thinking about it. Sideload updates are a manual download from GitHub Releases. | Included | Limited |
Both tracks build from the same Kotlin source tree. Tier 3, 4, and 6 features are compiled out of the Google Play APK at build time via Gradle product flavors — they are not present in the binary, not just hidden behind a switch.
For the full decision guide and install instructions for each, see Release tracks.
Coming Soon
| Feature | Status |
|---|---|
| Push Notifications | Future — Agent-initiated alerts |
| Memory Viewer | Future — View/edit agent memories |
| Cross-device handoff | Future — Hand a task from phone to desktop terminal session |