157 lines
5.6 KiB
Markdown
157 lines
5.6 KiB
Markdown
# Hermes Mobile
|
|
|
|
Native Android app, installable PWA fallback, and companion server for [Hermes Agent](https://github.com/NousResearch/hermes-agent).
|
|
|
|
Hermes Mobile is not a generic LLM chat UI. It is a self-hosted, Hermes-native control surface designed for phone use: prompt by text or voice, upload files, watch tool calls live, approve actions, manage cron jobs, and get notified when long-running agent work is done.
|
|
|
|
Repo: https://git.molberg.cloud/bonzi/hermes-mobile
|
|
|
|
## Status
|
|
|
|
Phase 1 skeleton is underway. The repo now contains a pnpm monorepo with a shared TypeScript package, a Fastify companion server exposing `/api/health`, and a Vite React mobile shell with bottom navigation. Hermes prompting, pairing/auth, persistence, realtime streams, Capacitor Android, and installer productionization are still upcoming roadmap items.
|
|
|
|
## Product Goals
|
|
|
|
- Feel like a real Android app, not a web page pretending to be chat.
|
|
- Run privately on the same Linux machine as Hermes Agent.
|
|
- Keep Hermes Agent untouched where possible; operate as a companion layer above/alongside it.
|
|
- Expose Hermes-specific concepts: tool calls, sessions, jobs, generated files, approvals, background tasks.
|
|
- Make installation one-liner simple for a homelab machine.
|
|
- Stay modular enough that the app, companion server, Hermes integration, notification providers, and install scripts can evolve independently.
|
|
|
|
## Planned Components
|
|
|
|
```text
|
|
Android app (Capacitor native shell)
|
|
|
|
|
| HTTPS + WebSocket/SSE + native push
|
|
v
|
|
Hermes Mobile App (native Android first, PWA fallback)
|
|
|
|
|
v
|
|
Hermes Companion Server
|
|
|
|
|
+-- Hermes CLI / Python AIAgent bridge
|
|
+-- Hermes API server bridge
|
|
+-- Hermes session DB reader
|
|
+-- Hermes cron manager
|
|
+-- Upload/file store
|
|
+-- Push notification provider
|
|
```
|
|
|
|
## MVP Feature Set
|
|
|
|
1. Native Android-first app shell
|
|
- Capacitor Android wrapper around the shared web UI
|
|
- APK/release build installable directly on Android
|
|
- PWA/web build retained as fallback and fast dev target
|
|
- Native-style bottom navigation, status bar, splash screen, haptics, push, share target later
|
|
- Offline-friendly shell
|
|
- Dark, playful visual system inspired by happy.engineering / Happy app
|
|
|
|
2. Chat / prompt screen
|
|
- Text prompts
|
|
- Voice note recording
|
|
- File uploads: zip, png, jpg, pdf, txt, logs, folders later
|
|
- Streaming responses
|
|
- “Agent is working” state
|
|
- Completion notification
|
|
|
|
3. Hermes-native activity timeline
|
|
- Tool call started / finished
|
|
- Terminal commands
|
|
- File reads/writes
|
|
- Browser actions
|
|
- Home Assistant actions
|
|
- Cron changes
|
|
- Subagent delegation
|
|
- Expand/collapse raw output
|
|
|
|
4. Sessions
|
|
- Recent sessions
|
|
- Resume session
|
|
- Rename / pin / archive
|
|
- Per-session attachments and generated files
|
|
|
|
5. Cron
|
|
- List cron jobs
|
|
- Run now
|
|
- Pause/resume/remove
|
|
- View last output
|
|
- Delivery target: app notification / in-app inbox
|
|
|
|
6. Approvals
|
|
- Push approval to phone for dangerous commands
|
|
- Approve / deny with short audit log
|
|
|
|
7. Companion settings
|
|
- Connect to a companion server URL
|
|
- Pair using one-time code or passkey
|
|
- Configure notification backend
|
|
- View Hermes health/status
|
|
|
|
## Docs
|
|
|
|
- [Product Plan](docs/PRODUCT_PLAN.md)
|
|
- [Architecture](docs/ARCHITECTURE.md)
|
|
- [Design System](docs/DESIGN_SYSTEM.md)
|
|
- [Companion Server](docs/COMPANION_SERVER.md)
|
|
- [Mobile App Structure](docs/MOBILE_APP.md)
|
|
- [Install Strategy](docs/INSTALL.md)
|
|
- [Testing Strategy](docs/TESTING.md)
|
|
- [Roadmap](docs/ROADMAP.md)
|
|
|
|
## Proposed Stack
|
|
|
|
Frontend:
|
|
- TypeScript
|
|
- React + Vite
|
|
- Tailwind CSS
|
|
- Zustand or TanStack Query for client state
|
|
- Capacitor Android from the start for genuine phone-app feel
|
|
- PWA/service-worker build kept as fallback and for desktop/LAN access
|
|
- Native plugins: Push Notifications, Haptics, Filesystem/Share, Status Bar, Splash Screen
|
|
|
|
Companion server:
|
|
- TypeScript Node.js initially, because file uploads, WebSocket/SSE, install scripts, and PM2/systemd are straightforward
|
|
- Fastify or Hono
|
|
- SQLite for app metadata
|
|
- Local filesystem upload store
|
|
- Python bridge subprocess or direct Hermes module calls where safe
|
|
|
|
Why not Open WebUI/LibreChat:
|
|
- They are model chat UIs.
|
|
- Hermes needs agent-native events, cron, approvals, file artifacts, process logs, sessions, and tool timelines.
|
|
- Forking a generic app would probably become more work than a clean, small purpose-built app.
|
|
|
|
## One-liner install target
|
|
|
|
Final goal:
|
|
|
|
```bash
|
|
curl -fsSL https://git.molberg.cloud/bonzi/hermes-mobile/raw/branch/main/install.sh | bash
|
|
```
|
|
|
|
or, for local/self-hosted raw auth limitations, a release artifact URL:
|
|
|
|
```bash
|
|
curl -fsSL https://hermes-mobile.molberg.cloud/install.sh | bash
|
|
```
|
|
|
|
The installer should:
|
|
- Detect Hermes Agent install and config path
|
|
- Create a system user or use current user depending mode
|
|
- Install Node runtime if missing
|
|
- Download release bundle
|
|
- Create config at `/etc/hermes-mobile/config.yaml` or `~/.config/hermes-mobile/config.yaml`
|
|
- Configure systemd service `hermes-mobile-companion`
|
|
- Print pairing URL / one-time setup code
|
|
|
|
## Development Philosophy
|
|
|
|
- Companion server owns mobile UX state, not Hermes core.
|
|
- Hermes remains the agent runtime/source of truth for actual work.
|
|
- Every Hermes integration goes through an adapter interface so we can switch between CLI, API server, direct Python, or future Hermes-native event APIs.
|
|
- Tool-call UI should prefer structured events, but gracefully degrade to parsed CLI/API logs during early versions.
|
|
- Keep secrets out of repo. Use environment/config files and future vault integration.
|