Hermes-Relay: Android App and CLI for Hermes Agent

Connects Hermes Agent to Android devices and desktop machines via a native app and CLI.

Automation & Workflowsintermediate12 min read
Author
Codename-11
Stars
78
Language
Kotlin
License
MIT
Upstream updated
2026-07-25
Hermes-Relay: Android App and CLI for Hermes Agent

Hermes-Relay Reference

Hermes-Relay is a companion for the Hermes agent platform. It consists of a native Android app for streaming chat, voice, and agent management, and a single-binary CLI that gives the agent access to files, terminal, search, and screenshots on paired machines. This document covers every capability, procedure, parameter, constraint, and failure mode.

When to Use Hermes-Relay

Use Hermes-Relay in these situations:

  • You want to interact with your Hermes agent from an Android phone via chat, voice, or management.
  • You need the agent to control your phone screen (sideload builds only) or access phone features like SMS, contacts, dialing, and location.
  • You want the agent to have hands-on access to a computer's files, terminal, search, screenshots, clipboard, and editor via the CLI.
  • You need to pair multiple Hermes servers (home, work, dev, prod) and switch between them.
  • You want to use the agent away from home with automatic route switching (LAN at home, fallback elsewhere).
  • You need notification triage, summarization, and routing by the agent.

Prerequisites

Before you begin, ensure these are in place:

  • Hermes Agent must be installed and running with Dashboard/Gateway enabled.
  • Android 8.0+ (SDK 26) device for the Android app.
  • Python 3.11+ on the server for the Relay plugin.
  • Node 21 or later for CLI source or development (the compiled binary has no runtime dependencies).
  • For remote access: Tailscale or HTTPS reverse proxy setup.
  • For phone control (bridge): Relay plugin installed and paired, sideload build of Android app.

Capabilities

Android App

The native Android app provides streaming chat via WebSocket through the dashboard, with SSE fallback through the API server. It supports live markdown rendering, tool-call cards, session history, a searchable command palette, file attachments, quote-in-reply, conversation share, and send-while-streaming queuing.

From the app you can perform full Hermes dashboard management: switch models, manage API keys (write-only, masked, rate-limited reveal), create and edit profiles including SOUL.md, and browse, install, and update skills.

Hands-free voice works on a vanilla install (speech via the server's providers, unlocked by Manage sign-in). Relay-paired setups add per-profile voice and opt-in provider-native Realtime Agent with background task handoff.

The app supports multi-connection with profiles. You can pair multiple servers, switch in one tap, and overlay a profile's model and SOUL.md per chat.

Phone control (bridge) via Relay lets the agent read the screen and perform tap, type, swipe, scroll, screenshots, clipboard, media keys, and batched macros. This is guarded by a per-app blocklist (banking and 2FA apps blocked by default), destructive-verb confirmation, idle auto-disable, and a full activity log.

The notification companion provides opt-in access for the agent to triage, summarize, and route incoming notifications.

Security features include QR pairing, Android Keystore session storage (StrongBox-preferred), TOFU cert pinning, per-channel time-bound grants, and user-chosen session TTL.

Local-only analytics (Stats for Nerds) show TTFT, token usage, stream health, and peak-time charts.

Sideload builds add direct SMS, contact search, one-tap dialing, and location awareness.

Hermes-Relay CLI (Alpha)

The CLI is a single binary for Windows x64, Linux x64, and macOS x64/arm64. It provides these tools: read_file, write_file, terminal, search_files, screenshot, clipboard, open_in_editor, and more. It has a one-time consent gate and interactive diff approval for patches. The --no-tools flag acts as a kill-switch.

The CLI pairs against the same relay and credential store as the Android app. Pair once from either, and both work.

Windows has an optional systray (right-click only, no dashboard or app window) with TUI launch, daemon controls, pairing, grant review, audit, diagnostics, logs, desktop-use status and cancellation, sign-in startup, and emergency stop.

Dashboard Plugin

The dashboard plugin adds a Relay tab showing paired devices, bridge activity, and media tokens in the web UI.

Multi-Language Support

The app supports Deutsch, Espanol, Japanese, Portuguese (Brasil), and Simplified Chinese (AI-assisted catalogs).

Automatic Route Switching

The app provides automatic route switching for remote access. It uses LAN at home and falls back elsewhere. An unreachable server gets a diagnosis, not just a red dot.

Self-Updating

The Hermes-Relay CLI self-updates via GitHub Releases.

Plugin-Manager Install

The plugin-manager install owns the plugin code, dashboard tab, CLI commands, and agent tools. The legacy installer adds a systemd user service, shell shims, and a clone/update workflow.

Procedures

Android Quick Start

  1. Install the app. Either get it from Google Play (easiest, auto-updates) or download the -sideload-release.apk from the newest android-v* release on GitHub Releases and open it (allow browser to install unknown apps).
  2. Ensure Hermes Dashboard is running on your server. Run hermes setup --portal (if not already done) then hermes dashboard.
  3. Make the dashboard reachable from your phone over a trusted LAN, Tailscale, or HTTPS reverse proxy.
  4. Open the app, choose "Connect to Hermes", enter or discover the dashboard address (conventionally http://<host>:9119). Sign in through the dashboard's configured provider when prompted. The app probes capabilities and shows a connection summary.
  5. (Optional) Add the Dashboard's Tailscale address under Settings, Connections, Routes for remote access. No API server or API key required.
  6. (Optional) Install the Relay plugin on the server for power tools. Run hermes plugins install Codename-11/hermes-relay/plugin --enable, then hermes relay doctor, hermes relay start --no-ssl, hermes pair. Scan the QR from the phone's Connections screen or use hermes pair --register-code ABCD12 with the manual code from Android Settings, Connections, Advanced.

CLI Installation and Pairing (Windows)

  1. Run the install script:
    irm https://raw.githubusercontent.com/Codename-11/hermes-relay/main/desktop/scripts/install.ps1 | iex
    
  2. Pair with the relay: hermes-relay pair --remote ws://<host>:8767 (once).
  3. Start the daemon: hermes-relay daemon start (background tool router).
  4. Update: hermes-relay update (self-update via GitHub Releases).

Plugin-Manager Uninstall

  1. If the optional compatibility hook was installed, run hermes relay compat remove --all.
  2. Run hermes plugins remove hermes-relay.

Legacy Installer Uninstall

  1. Run bash ~/.hermes/hermes-relay/uninstall.sh. This removes the service, shims, clone, external skill path, editable package, and compat hook. It never touches shared Hermes state. Flags: --dry-run, --keep-clone, --remove-secret.

Running Server/Plugin from Clone (Development)

  • If plugin installed: hermes relay start --no-ssl.
  • Or from repo checkout: python -m plugin.relay --no-ssl.
  • Or Docker: docker build -t hermes-relay relay_server/ && docker run -d --network host --name hermes-relay hermes-relay.
  • Or live-edit: ln -s "$PWD/plugin" ~/.hermes/plugins/hermes-relay, then restart hermes and run hermes pair to verify.

AI Agent Setup Prompt

Paste the provided block into an AI assistant's chat. It will fetch the canonical setup recipe and guide through: verifying hermes-agent is installed, running the server-plugin install one-liner, connecting phone by Vanilla Hermes API URL/key first then optionally pairing Relay, or pairing laptop via CLI, and verifying with hermes-status (server) or hermes-relay doctor (CLI).

Server Plugin Install via One-Liner

Run the following command to install the server plugin directly:

curl -fsSL https://raw.githubusercontent.com/Codename-11/hermes-relay/main/install.sh | bash

After installation, pair the relay with:

hermes pair

CLI Pairing from Server

From the server, you can also initiate CLI pairing using the command:

/hermes-relay-pair

On Windows, after pairing, verify the connection with:

hermes-status

And from the CLI, run:

hermes-relay doctor

Android App Pairing with Manual Code

If QR scanning is not possible, use a manual pairing code. On the Android app, go to Settings, Connections, Advanced to view the manual code (e.g., ABCD12). On the server, run:

hermes pair --register-code ABCD12

Replace ABCD12 with the actual code shown on the phone.

CLI Pairing from Server with Remote Address

When pairing the CLI from the server to a remote relay, use the --remote flag:

hermes-relay pair --remote ws://<host>:8767

This is a one-time operation; subsequent daemon starts use the stored credentials.

Daemon Control on Windows

After pairing, manage the daemon with these commands:

  • Start: hermes-relay daemon start
  • Stop: hermes-relay daemon stop
  • Status: hermes-relay daemon status

The Windows systray provides right-click access to these controls plus pairing, grant review, audit, diagnostics, logs, desktop-use status and cancellation, sign-in startup, and emergency stop.

Compatibility Hook Management

The plugin-manager install includes an optional legacy API compatibility hook. Manage it with:

hermes relay compat status
hermes relay compat install
hermes relay compat remove

Use hermes relay compat remove --all before uninstalling if the hook was installed.

Parameters

Dashboard Address

The URL of the Hermes Dashboard/Gateway, conventionally http://<host>:9119. Required for Android app connection.

API Server Address

Optional URL of the Hermes API Server, conventionally on port 8642. Used as chat fallback or for headless compatibility. Not required.

API Key

Key for the optional API server endpoint. Requested only when that endpoint is configured. Not required unless the API server is configured.

Relay Server Address

WSS/HTTP URL of the Relay, conventionally on port 8767. Used for terminal, bridge, media, relay voice, and sessions. Not required; optional for power tools.

Pairing Code

Manual code (e.g., ABCD12) for pairing when QR scan is not possible. Used with hermes pair --register-code. Not required; alternative to QR.

Session TTL

User-chosen time-to-live for sessions. User-configurable.

--no-ssl Flag

Flag to start relay server without TLS (for development). Used in development commands.

--no-tools Flag

Kill-switch for CLI tools. Disables all tool calls.

--dry-run Flag (Uninstall)

Simulates uninstall without making changes. Optional flag for legacy uninstall.

--keep-clone Flag (Uninstall)

Preserves the cloned repository during uninstall. Optional flag for legacy uninstall.

--remove-secret Flag (Uninstall)

Also removes stored secrets during uninstall. Optional flag for legacy uninstall.

--remote Flag (CLI Pairing)

Specifies the remote relay address for CLI pairing. Used with hermes-relay pair --remote ws://<host>:8767.

--register-code Flag (Server Pairing)

Specifies a manual pairing code. Used with hermes pair --register-code ABCD12.

Constraints and Caveats

  • The Android app requires Android 8.0+ (SDK 26). Target SDK 35.
  • Hermes-Relay is a plugin for Hermes Agent, not standalone. Hermes Agent must be installed first.
  • The CLI is alpha software. Binaries are unsigned; SmartScreen/Gatekeeper warnings are expected.
  • The CLI requires Node 21 or later for source or development, but the compiled binary has zero runtime dependencies.
  • The server requires Python 3.11+.
  • Sideload builds check GitHub for updates and show a one-tap banner; Play builds update through the Store.
  • Sideload builds add phone control features (screen reading, SMS, contacts, dialing, location) not available in Play builds.
  • Phone control (bridge) is guarded by a per-app blocklist (banking/2FA blocked by default), destructive-verb confirmation, idle auto-disable, and a full activity log.
  • The legacy installer uninstall never touches shared Hermes state.
  • The plugin-manager install owns the plugin code, dashboard tab, CLI commands, and agent tools. hermes relay compat status/install/remove manages only the optional legacy API compatibility hook.
  • The dashboard plugin installs with the same symlink; restart the gateway to see the Relay tab.
  • One dashboard sign-in unlocks Chat, Manage, sessions, and standard voice. No plugin needed for these.
  • Chat prefers the dashboard gateway (WebSocket) when Manage auth is ready; falls back to API server SSE with API key.
  • Relay-side voice is preferred automatically when paired.
  • One QR can configure API, dashboard, and relay routes without merging auth models.
  • Never restart hermes-gateway without asking (per AI setup prompt).
  • Historical release prefixes (android-v*, server-v*, desktop-v*, cli-v*) remain immutable.
  • CLI binaries ship for Windows x64, Linux x64, macOS x64/arm64. Windows also has an optional systray.
  • The Android app uses Kotlin 2.0, Jetpack Compose, Material 3, OkHttp. The CLI uses TypeScript, Bun-compiled native binary. The server uses Python 3.11+, aiohttp.
  • Build tools: AGP 9, Gradle 8.13, JVM toolchain 17 (Android); tsc + bun build --compile (CLI).
  • CI/CD via GitHub Actions: lint, build, test, APK artifact, CLI binaries per platform.
  • The year 2026 is referenced in the project's versioning scheme for future releases.
  • The AI setup prompt must never restart hermes-gateway without asking the user first.
  • The plugin-manager install may fail if the Hermes build is too old; use hermes relay compat install for the optional legacy API compatibility hook.
  • The legacy installer uninstall flags --dry-run, --keep-clone, and --remove-secret are optional and independent of each other.

Failure Modes

  • Unreachable server: The app shows a diagnosis, not just a red dot.
  • SmartScreen / Gatekeeper warnings: Expected for unsigned CLI binaries during the experimental phase.
  • AI-assisted setup failure: If any step fails during AI-assisted setup, consult the Troubleshooting section in SKILL.md and ask the user for the exact error.
  • Plugin-manager install failure: May fail if the Hermes build is too old. Use hermes relay compat install for the optional legacy API compatibility hook.
  • Pairing failure: If QR scanning fails, use the manual pairing code method. Ensure the relay server is running with hermes relay start --no-ssl and is reachable from the phone.
  • Daemon start failure: On Windows, verify the relay is paired and the remote address is correct. Check logs via the systray or hermes-relay daemon status.
  • CLI tool failure: If tools do not respond, verify the daemon is running and the --no-tools flag is not set. Run hermes-relay doctor for diagnostics.
  • Uninstall failure: If the plugin-manager uninstall fails, ensure the compatibility hook is removed first with hermes relay compat remove --all. For legacy uninstall, use --dry-run to simulate before actual removal.

Examples Described

  • Cold start, streaming chat, hands-free voice, and session history screenshots.
  • App themes, manage agent, connections and routes, avatars and skins screenshots.
  • Simplified Chinese screenshots: settings, management, navigation menu.
  • AI agent setup prompt: paste block into Claude/GPT to fetch canonical setup recipe and guide through install, pairing, troubleshooting.
  • Hands-free intent example: "text Sam I'll be 10 minutes late" using a sideload build's SMS, contact search, dialing, and location.
  • Multi-connection example: pair home and work servers, switch in one tap, overlay different profiles per chat.
  • Notification triage example: agent summarizes incoming notifications and routes urgent ones to the phone's notification companion.

Additional Commands

The following commands are used in various procedures:

curl -fsSL https://raw.githubusercontent.com/Codename-11/hermes-relay/main/install.sh | bash
hermes pair
/hermes-relay-pair

On Windows, then:

hermes-status
hermes-relay doctor
hermes relay start --no-ssl
hermes relay compat status
hermes relay compat install
hermes relay compat remove
hermes-relay pair --remote ws://<host>:8767
hermes-relay daemon start
hermes-relay daemon stop
hermes-relay daemon status
hermes-relay update
hermes pair --register-code ABCD12
bash ~/.hermes/hermes-relay/uninstall.sh --dry-run
bash ~/.hermes/hermes-relay/uninstall.sh --keep-clone
bash ~/.hermes/hermes-relay/uninstall.sh --remove-secret
docker build -t hermes-relay relay_server/ && docker run -d --network host --name hermes-relay hermes-relay
ln -s "$PWD/plugin" ~/.hermes/plugins/hermes-relay
python -m plugin.relay --no-ssl
hermes plugins install Codename-11/hermes-relay/plugin --enable
hermes plugins remove hermes-relay
hermes setup --portal
hermes dashboard

Sources & References

This page was researched from 2 independent sources, combined and verified for completeness.

Newsletter

The #1 AI Newsletter

The most important ai updates, guides, and fixes — one weekly email.

No spam, unsubscribe anytime. Privacy policy

Other Hermes Agent integrations