6.0 KiB
Product Plan
Working Name
Hermes Mobile
One-line Pitch
A private Android-first app for talking to Hermes Agent with voice, files, live tool calls, approvals, cron controls, and completion notifications.
Target User
Primary: Zeb / homelab power user who already runs Hermes Agent on a Linux machine and wants a better phone interface than Telegram.
Secondary later:
- Developers running Hermes locally/remotely
- Homelab admins
- People who want an agent command center rather than a chatbot
Non-goals
- Not a generic OpenAI chat frontend.
- Not a multi-provider model playground.
- Not a public SaaS.
- Not a replacement for Hermes Agent internals.
- Not a Matrix/Discord/Telegram clone.
Design Principles
-
Agent-first, not chat-first
- The UI should show what Hermes is doing, not just the final response.
- Tool calls are first-class objects.
-
Phone-native ergonomics
- Native Android app first, PWA fallback second.
- Thumb-reachable controls.
- Large tap targets.
- Voice and upload actions always nearby.
- Background task status survives app close/reopen.
- Haptics, native push, status bar/splash, and Android back behavior should be part of the product, not afterthoughts.
-
Private by default
- Self-hosted companion server.
- Local uploads.
- Optional LAN/Tailscale-only mode.
- No third-party notification requirement unless chosen.
-
Modular integrations
- Hermes CLI bridge now.
- Hermes API bridge where useful.
- Direct Python/event bridge later.
- Notification providers swappable.
-
Install should feel boring
- One command.
- Clear service status.
- Easy update/uninstall.
Core Screens
1. Home / Ask
Purpose: send a prompt fast.
Features:
- Text box with multiline support
- Hold-to-record voice note
- Attach button
- Model/session selector compact chip
- “New task” vs “continue session” toggle
- Streaming answer
- Activity timeline under/alongside answer
- Completion toast/push
2. Activity
Purpose: see active and recent agent runs.
Features:
- Running tasks
- Tool-call cards
- Logs/output previews
- Generated files
- Error states
- Stop/cancel if supported
3. Sessions
Purpose: browse/resume history.
Features:
- Recent conversations
- Search
- Rename/pin/archive
- Session metadata: platform, started, last active, tool count, attachments
4. Cron
Purpose: manage scheduled Hermes tasks from phone.
Features:
- Job list grouped by active/paused/completed
- Run now
- Pause/resume/remove
- Edit prompt/schedule later
- Last output viewer
- Delivery target setting: in-app inbox, push, Matrix/Telegram/etc.
5. Files
Purpose: manage uploaded/generated artifacts.
Features:
- Upload inbox
- Generated media/files from responses
- Download/share
- Link file into a new prompt
- Retention controls later
6. Approvals
Purpose: approve dangerous actions safely.
Features:
- Pending approvals queue
- Command/action preview
- Risk label
- Approve once / deny
- Expiry countdown
- Audit log
7. Settings
Purpose: connect to companion server and configure app.
Features:
- Server URL
- Pairing code / passkey login
- Notification test
- Theme
- Hermes health
- Storage/retention
- STT/TTS preferences
Feature Details
Text Prompting
Modes:
- Quick ask: starts new task/session.
- Continue: appends to selected session.
- Background task: app can be closed, push when finished.
Voice Notes
MVP flow:
- Browser MediaRecorder captures audio.
- Upload audio file to companion.
- Companion either:
- passes audio path to Hermes gateway/STT path, or
- transcribes with configured local Whisper/faster-whisper, then sends text prompt.
- UI shows transcript for confirmation if desired.
Later:
- Voice-to-voice replies using Hermes TTS.
- Streaming partial transcript.
File Uploads
Supported MVP:
- png/jpg/webp/gif
- zip/tar/gz
- txt/log/md/json/csv
- arbitrary binary as attachment
Prompt format to Hermes:
- Store file locally in companion upload store.
- Send prompt with absolute paths and metadata.
- Example:
User uploaded files: /var/lib/hermes-mobile/uploads/.../archive.zip
Tool Calls
Event model:
tool_call.startedtool_call.deltatool_call.finishedtool_call.failed
Tool cards show:
- Icon/name
- Arguments summary
- Status
- Duration
- Expandable result
- Copy/open file actions where relevant
Notifications
MVP notification events:
- task finished
- task failed
- approval required
- cron job completed/failed
Providers:
- Web Push for installed PWA
- ntfy fallback
- Gotify fallback
- Home Assistant persistent notification optional
Cron Triggers
The app should not reimplement Hermes cron. It should wrap Hermes cronjob functions/CLI:
- list jobs
- run job
- pause/resume/remove
- create/edit later
“Prompting itself” / Hermes test harness
Because Hermes Mobile runs next to Hermes Agent, the companion can test connectivity by sending a harmless prompt through:
- Hermes CLI:
hermes chat -q "ping" - API server:
/v1/chat/completions - Direct Python bridge later
The Settings health page should include a Test Hermes button.
MVP Acceptance Criteria
- Install companion server on same Linux machine as Hermes.
- Open mobile PWA on Android, pair to companion.
- Send text prompt to Hermes and receive answer.
- Upload a PNG or ZIP and include it in prompt context.
- Record a voice note and turn it into a prompt.
- See at least coarse tool activity while Hermes runs.
- Receive push/ntfy notification when task completes.
- View cron jobs and trigger one manually.
Risks
-
Hermes API server may not expose enough event detail.
- Mitigation: start with CLI/direct Python bridge and add event callbacks.
-
PWA push notification quirks.
- Mitigation: support ntfy/Gotify fallback.
-
Mobile audio and lifecycle quirks.
- Mitigation: use Capacitor from the start; begin with WebView MediaRecorder and move to a native audio plugin if needed.
-
Tool-call streaming requires Hermes integration changes.
- Mitigation: companion adapter interface; use available callbacks in AIAgent where possible.