A production-grade, native Android client application for Hermes, implementing Protocol & Architecture Contract v1 with Multi-Hermes Connection Manager and Unified Sessions.
Built with Kotlin, Jetpack Compose (Material 3), Coroutines, Room Database, OkHttp, and Android Keystore (EncryptedSharedPreferences).
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Hermes Android Client β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β Jetpack Compose UI (M3) β β
β β β’ Multi-Host Switcher β’ Unified Sessions β’ Attributed Chat β β
β βββββββββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββββ β
β β StateFlow / Actions β
β βββββββββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββββ β
β β Unified Session Repository β β
β β β’ Logical Unified Sessions β’ Context Synchronization Delta β β
β β β’ Host-Tagged Event Routing β’ Local Persistence (Room DB) β β
β ββββββββββββββββββββ¬βββββββββββββββββββββββββββββββ¬ββββββββββββββββββ β
β β β β
β ββββββββββββββββββββΌβββββββββββββββββββ ββββββββββΌββββββββββββββββββ β
β β Hermes Connection Manager β β Encrypted Token Vault β β
β β β’ Map<HostId, HostRuntime> β β (Host-Scoped Keystore) β β
β βββββββββ¬ββββββββββββββββββββββββββ¬ββββ ββββββββββββββββββββββββββββ β
β β β β
β βββββββββΌββββββββββββββ βββββββββΌββββββββββββββ β
β β Host #1 Runtime β β Host #2 Runtime β β
β β (OkHttp WS + REST) β β (OkHttp WS + REST) β β
β βββββββββ¬ββββββββββββββ βββββββββ¬ββββββββββββββ β
ββββββββββββΌββββββββββββββββββββββββββΌβββββββββββββββββββββββββββββββββββββ
β β
βΌ βΌ
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
β Hermes Host #1 β β Hermes Host #2 β
β (Windows Office) β β (Linux Server) β
β `hermes serve` β β `hermes serve` β
ββββββββββββββββββββββββ ββββββββββββββββββββββββ
-
Multi-Hermes Connection Manager:
- Save and manage multiple independent Hermes installations (e.g. Workstation, Linux Server, Cloud VM).
- Independent WebSocket connections, concurrent state management, and isolated reconnect loops.
- Individual host health badges:
Online,Connecting,Offline,Auth Expired.
-
Unified Sessions & Context Synchronization:
- Create one logical conversation (
UnifiedSession) that spans multiple physical Hermes hosts. - Seamlessly switch active execution hosts mid-conversation via the top-bar dropdown.
- Delta Context Sync: When switching execution to a new host, Hermes automatically transfers a bounded context window of the last 10 messages (or since the last synced point, up to 10 max). This context is transferred securely as a distinct system preamble, completely separately from the user's prompt text, avoiding stealth concatenation. Sensitive variables, tokens, API keys, and credentials are automatically stripped/redacted from the transferred context payload before sending.
- Host Attribution: Every response bubble, tool card, and thinking trace displays its originating host badge (e.g.
[Office PC],[Linux Server]). - Non-Blocking Host Switching: If Host #1 is executing a long tool or computation and you switch to Host #2, Host #1 completes its work in the background and commits results into the shared timeline.
- Create one logical conversation (
-
Isolated Host Security & Approvals:
- Host-scoped credentials stored securely in Android Keystore (
hostId -> tokens). - Host-Targeted Approvals & Clarifications: Dangerous command approvals (
approval.request) and sudo prompts route back strictly to the exact host runtime and native session that emitted them.
- Host-scoped credentials stored securely in Android Keystore (
-
Background Execution & Synchronization:
- Long-running host tasks (like heavy computations, builds, or lengthy agent turns) will continue safely in the background even if you minimize the application or switch apps.
- When active tasks are running, a foreground service (notification: "Hermes Agent active") keeps the sync socket alive and commits incoming tool usage or results back to the local database timeline.
- The service terminates automatically the moment the task completes or errors out, preserving battery life and conforming to Android Play Store
dataSyncforeground policies.
-
Local Persistence (Room DB):
- Full offline caching for
UnifiedSession,HostSessionBinding, andUnifiedMessage. - Raw native session browser for inspecting individual host histories.
- Full offline caching for
hermes serve --host 0.0.0.0 --port 9119With OAuth / GitHub Auth:
$env:HERMES_AUTH_REQUIRED="true"
$env:HERMES_AUTH_PROVIDERS="github"
$env:HERMES_AUTH_GITHUB_CLIENT_ID="<your_client_id>"
$env:HERMES_AUTH_GITHUB_CLIENT_SECRET="<your_client_secret>"
hermes serve --host 0.0.0.0 --port 9119export HERMES_AUTH_REQUIRED="true"
export HERMES_AUTH_PROVIDERS="github"
export HERMES_AUTH_GITHUB_CLIENT_ID="<your_client_id>"
export HERMES_AUTH_GITHUB_CLIENT_SECRET="<your_client_secret>"
hermes serve --host 0.0.0.0 --port 9119Run the full automated test suite:
.\gradlew.bat testRun Android Lint:
.\gradlew.bat lintAssemble Debug APK:
.\gradlew.bat assembleDebugInside the hermes-pair/ directory is the cross-platform desktop companion application written in Rust. It runs on Windows and Linux to auto-discover your local IP and generate a secure QR code for instant onboarding with Hermes Android.
Download prebuilt binaries and SHA256SUMS.txt from the latest GitHub Releases.
-
Windows (PowerShell):
Get-FileHash .\hermes-pair-windows-x86_64.exe -Algorithm SHA256 # Compare the resulting hash with SHA256SUMS.txt
-
Linux:
sha256sum -c SHA256SUMS.txt # or verify directly: sha256sum hermes-pair-linux-x86_64
# Launch GUI window (defaults to HTTPS pairing with TLS pinning)
.\hermes-pair-windows-x86_64.exe
# Terminal QR output with pinned certificate fingerprint
.\hermes-pair-windows-x86_64.exe qr --port 9119 --fingerprint "AA:BB:CC:DD:..."chmod +x hermes-pair-linux-x86_64
# Launch GUI window
./hermes-pair-linux-x86_64
# Headless / Terminal QR with pinned certificate fingerprint
./hermes-pair-linux-x86_64 --terminal --port 9119 --fingerprint "AA:BB:CC:DD:..."- Strict Network Policy: Android's
network_security_config.xmlenforcescleartextTrafficPermitted="false"across base configurations, preventing unencrypted transport of authentication tokens or user prompts. - TLS Fingerprint Trust (
TlsFingerprintTrust): During QR onboarding via Pairing Protocol v2, the host passes its SHA-256 TLS certificate fingerprint. Hermes Android securely validates self-signed or enterprise TLS certificates without requiring device-wide root certificate installation or cleartext exceptions.
cd hermes-pair
cargo test
cargo build --releaseThe compiled binaries will be located at:
- Windows:
hermes-pair/target/release/hermes-pair.exe - Linux:
hermes-pair/target/release/hermes-pair