rusty4444/hermes-android
Android client for Hermes Agent - chat with your Hermes sessions from a phone or tablet over local Wi-Fi or a private Tailscale network.
About rusty4444/hermes-android
rusty4444/hermes-android is an open-source project on GitHub, mainly written in Dart. Android client for Hermes Agent - chat with your Hermes sessions from a phone or tablet over local Wi-Fi or a private Tailscale network. It currently holds 475 stars and 97 forks with 18 open issues, and was last pushed on 2026-11-02 (repository created 2026-05-27).
Project Overview
AI Homed tracks it on the Today's Trending board, currently at rank #71 with 2 new stars today.
GitHub Repository Details
README
Hermes Android v3.2.1
Android client for Hermes Agent — chat with your Hermes sessions from a phone or tablet over local Wi-Fi or a private Tailscale network.
Screenshots
Ten fresh Android emulator captures, each using a different colour palette. These show the production-signed RC3 UI retained in 3.0.0, with illustrative demo conversations and files rather than private account data. The live-work example uses a local test gateway, not a model response. See capture details.
![]() Chats · Gold · dark |
![]() Crons · Purple · dark |
![]() Activity · Orange · light |
![]() More · Green · dark |
![]() Settings · Blue · light |
![]() Appearance · Red · light |
![]() Conversation · Teal · dark |
![]() Assets · Pink · dark |
![]() Archived chats · Indigo · light |
![]() Live work and Stop/Send · Cyan · dark |
v2.0.0 merges the community Remote Gateway edition contributed by
@CristianGCiocoi, with review and
testing from @AI-Guru and
@grunjol. The merge brings a unified Desktop
Gateway JSON-RPC transport, per-chat model selection, multi-attachment uploads,
durable turn recovery, voice dictation, and a comprehensive test suite.
See CHANGELOG.md for the full list and the
merge PR thread for
the community discussion.
Current release
3.2.1 (base build 3027) adds search by model ID or provider in the per-chat model picker. Filtering retains your selection; Apply is explicit. Scrollable content and wrapping actions improve compact/large-text keyboard use. The production package and signer are unchanged. Install over the existing app; do not uninstall or clear app data.
Publication is pending the tag workflow. Until its assets are verified, use verified stable 3.2.0.
| Download | Device | Version code |
| --- | --- | --- |
| ARM64 APK | Most current Android phones/tablets | 30272 |
| ARMv7 APK | Older 32-bit ARM devices | 30271 |
| x86_64 APK | x86_64 Android devices/emulators | 30273 |
Release and checksums · 3.2.1 release notes · Full changelog
Debug builds use the separate com.hermesagent.hermes_android.dev package and Android debug certificate. Older production APKs have lower version codes; downgrading can require uninstalling and restoring a backup.
Before updating
- Updating the APK does not install or configure Hermes host software or the optional mobile-push server companion.
- Quiet mode requires completion metadata for each reply. If an older gateway's saved answers are missing in quiet mode, enable Verbose Mode. Saved/live duplicate handover also needs the gateway's optional complete
persisted_turnreceipt and fresh history; older gateways can retain both sources. - Assets is partial discovery of shared files, not a complete attachment or filesystem catalogue. Downloads are limited to 25 MiB per file.
- Protect encrypted backups and their passwords. Backups can contain connection secrets and imported client private keys. See the upgrade notes and compatibility limits.
Update checks
The app checks GitHub Releases on ordinary launches. An answered check limits requests to once every 12 hours; offline attempts may retry on the next launch. The dialog offers a newer build but does not download or install it. Later asks again on the next launch; Skip this version stays quiet until another version appears. Shares and Quick Chat shortcuts are not interrupted. In Settings → About, use Check for updates or disable Check for updates on launch. Backups include these choices, not HTTP response caches.
Background notifications: server setup required
Background push requires the paired mobile-push server companion, installed and enabled separately for the saved connection's Hermes profile. Updating the Android APK alone does not install it, and the phone's Refresh / retry only rechecks availability—it cannot install server software.
The server operator must copy server/mobile-push into the profile's plugins,
generate a private VAPID key, authorise the verified dashboard login in the
companion's policy, and enable both the plugin and policy. Current Hermes plugin
enablement prepares its declared Python dependencies through package management.
Activate it in the dashboard and the gateway/turn processes that load its hooks
and sender worker: use supported live activation/reload, or restart affected
processes after draining active work when a new managed generation is selected.
Current host support is limited to the dashboard's launch profile in trusted
in-process mode; secondary-profile hosts cannot forward the required verified
login. Verify both the API and worker are active. Follow the
server installation runbook,
then enable Settings → Background notifications on the phone and grant Android
notification permission. See the phone setup guide.
Built-in Google-backed transport needs working Google Play Services on the phone, but no Firebase project, Firebase credentials or separate distributor app. An external UnifiedPush distributor is an optional phone transport, not the server companion; Google-free devices need that alternative. Neither transport removes the server prerequisite or guarantees background delivery.
Navigation in 3.0.0
The bottom bar is Chats → Crons → Projects → Activity → More. Chats is the default screen; the separate Home tab has been removed.
- Chats lists human conversations with search and All, Recent, Unassigned
- Crons lists conversations produced by scheduled jobs, including older
- Projects, Activity and More retain their existing roles.
Chat guidance and shared files
- Send while Hermes is working: the composer keeps separate Stop and
- More → Assets browses generated files explicitly shared in saved Hermes
.doc/.xls/.ppt, OpenDocument and other unsupported binaries
remain downloadable. History scans are incremental and downloads are lazy,
with a 25 MiB per-file limit. This is not a complete attachment or
filesystem catalogue. See Browsing chat assets.
Remote Gateway edition highlights
- One Desktop Gateway JSON-RPC session for text, images, and files.
- Copy/select text, Read aloud, Stop, Edit and resend, Regenerate, and export.
- Up to 10 Remote Gateway attachments per draft, capped at 64 MiB total;
- Paste more than 3,000 characters into a Remote Gateway chat to attach them as
paste.txt, keeping your instructions in the composer. Short pastes and REST
chats stay inline. See Long pastes.
- File-backed app cache, metadata-sanitized JPEG/PNG/WebP images, ordered
- Legacy REST remains fail-closed to one image and does not expose multi-select.
- Per-chat model and thinking effort without changing the profile default.
- Search, Rename, Branch, and Delete for remote conversations.
- Rename a chat from its Chats row's action menu or the open chat's top-right
- Move conversations into a Project or between Projects from the Chats action
- Pin and unpin chats on this device from the Chats action menu. Local pins
- New chat inside a Project uses that Project's server folder as the
- Native approval, sudo/secret, clarification, reasoning, tool activity,
- Tap a delegated task to inspect its recorded messages, tool arguments/results
- Follow text, exposed reasoning and consecutive tool groups in receipt order
- Activity shows app-observed Remote Gateway turns: waiting for input,
- Persistent reconnect/session resume and defensive retry handling.
- App-owned stock Gateway turns outlive an open chat route. Reopen a chat to
- Background protection uses one foreground service with a required disclosure
- Background notifications can use built-in Google-backed delivery without a
Gateway transport compatibility
Stock Hermes Agent releases do not advertise the experimental
capabilities.turn_recovery v2 contract in gateway.ready. The app uses the
stock Desktop Gateway transport for those connections. Its app-owned session
keeps user-started turns across chat navigation and reconciles persisted history
after reconnect or process restart. It does not resubmit an uncertain prompt.
After an outage, the app keeps recovery pending until it can verify the server's
state. A proven-idle turn with no recorded terminal outcome becomes inactive
with an outcome-unknown status. It does not generate a completion alert.
In Verbose Mode, saved history and retained received output remain independent
sources. A complete gateway persisted_turn receipt plus fresh history containing
all addressed rows can prove the handover to saved content and remove the covered
live copy. Matching text, an admission baseline or idle status cannot prove it.
Older gateways or lagging history may retain repetition across sources. Received
output is bounded and temporary within the app/connection session, not an offline
transcript archive. See Chat presentation.
The experimental v2 path adds a separate durable exactly-once recovery contract when the gateway advertises support. A legacy-transport capability notice refers to that contract; it does not mean stock chat reattachment is unavailable. Neither transport guarantees an Android background connection or delivery after Force stop.
See CHANGELOG.md for the complete release history and docs/HERMESAPK_DEVELOPMENT_LOG.md for the sanitized implementation and validation record.
What's new in v3.2.1
- Search the per-chat model picker by model ID or provider without losing your
- Thanks to @esc247 for the implementation and tests.
What's new in v3.2.0
- More → Usage: Portal and provider-recorded activity, separate host-reported
- More → Agent → Model: profile default and auxiliary assignments with
- Searchable command palette, composer formatting, latest-visible-code copying,
- Safer cron-shell filtering, consistent Dashboard/profile routing and bounded
Covers all changes since 3.1.7, not just RC.5. See complete scope, review fixes and pending publication gates.
What's new in v3.1.7
- Find Hermes on LAN discovery: IPv4 and IPv6 subnet probing, HTTPS-aware,
See the 3.1.7 release notes for scope and compatibility limits.
Features
- Hermes chat on Android — browse sessions, create new chats, and send prompts to your Hermes Agent.
- Streaming responses: Remote Gateway chat uses JSON-RPC over WebSocket;
POST /v1/chat/completions with SSE. Live text, exposed reasoning
and tool activity keep their receipt order without changing request history.
- Messaging-style UI: ten colour palettes, independent dark/light/system appearance, Markdown, local message times and responsive phone/tablet layouts.
- Hermes branding: the gold/black default remains available alongside nine other full-app palettes. Chat surfaces, controls, code blocks and navigation follow the selected theme.
- Gateway API integration — sessions and chat run through the Hermes Gateway API Server, normally on port
8642, with HTTP and HTTPS endpoints supported. Reverse-proxy deployments can set a gateway path prefix that is applied before/apiand/v1routes. - Dashboard integrations: Memory, Cron Jobs, Skills, Settings and Remote Gateway chat use the authenticated Hermes dashboard (default port
9119, configurable per connection). Use the built-in password login or a trusted reverse proxy. Current Hermes requires an authentication provider before the dashboard can bind to a non-loopback address;--insecureno longer bypasses this requirement. - Model settings — view and change the configured Hermes model where the dashboard exposes model settings.
- Cron management — list, trigger, pause/resume, create, edit, and delete scheduled Hermes cron jobs.
- Skills browser — view available Hermes skills with descriptions and trigger conditions.
- Memory viewer: More → Memory opens saved facts about you from
USER.md,
MEMORY.md. Reads follow the connection’s
Hermes profile; long facts can be read in full. The view is read-only and does
not enumerate external providers such as MemPalace. See Saved memory facts.
- Verbose mode toggle — switch between conversation-only chat and retained
- Task inspection: read recorded delegated-task history without joining or
- Background work: keep active stock Gateway turns above chat routes, review
- Appearance: Gold, Purple, Orange, Green, Blue, Red, Teal, Pink, Indigo and Cyan, with separate Dark / Light / System controls.
- Keyboard handling — Enter inserts a new line; use the on-screen Send button to submit. The composer stays editable during setup and replies, so you can draft a follow-up without waiting. A failed submission restores its prompt only if you have not edited the cleared composer. FAB to scroll to bottom.
- Voice chat — microphone dictation sends recognised speech to Hermes, with optional text-to-speech replies.
Quick start
Prerequisites
- Android device or emulator (Android 8+).
- Hermes Agent installed on the host machine.
- Hermes Gateway API Server reachable from the Android device.
API_SERVER_KEYfrom the Hermes host environment (~/.hermes/.env).- Optional: Hermes dashboard reachable for Memory/Cron/Skills/Settings screens.
Install the APK
Download the latest APK from this repository's GitHub Releases page.
For most Android phones, install the ARM64 APK:
adb install -r app-arm64-v8a-release.apk
If sideloading directly on Android, enable Install unknown apps for your browser or file manager, then open the downloaded APK.
1. Start the Gateway API Server
The Android chat/session features connect to the Hermes Gateway API Server. It must bind to an address your phone can reach, not only 127.0.0.1.
Use your normal Hermes gateway/API-server startup command and confirm:
- host/IP is reachable from Android
- port is usually
8642 API_SERVER_KEYis available in~/.hermes/.env
2. Optional: start the dashboard for drawer features
Memory, Cron Jobs, Skills, and Settings use the Hermes dashboard API (default port 9119).
Configure a dashboard authentication provider before exposing it to your LAN or
tailnet. For password login, Hermes uses dashboard.basic_auth.username, a
scrypt dashboard.basic_auth.password_hash, the bundled basic auth plugin,
and a separate session-signing secret. Follow the current
Hermes documentation for setup;
keep passwords and signing secrets out of commands, chat and committed files.
Start the configured dashboard:
hermes dashboard --host 0.0.0.0 --port 9119 --no-open
Enter its username/password in the app's Dashboard / Proxy Settings dialog (se










