# 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 1. Agent-first, not chat-first - The UI should show what Hermes is doing, not just the final response. - Tool calls are first-class objects. 2. 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. 3. Private by default - Self-hosted companion server. - Local uploads. - Optional LAN/Tailscale-only mode. - No third-party notification requirement unless chosen. 4. Modular integrations - Hermes CLI bridge now. - Hermes API bridge where useful. - Direct Python/event bridge later. - Notification providers swappable. 5. 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: 1. Browser MediaRecorder captures audio. 2. Upload audio file to companion. 3. Companion either: - passes audio path to Hermes gateway/STT path, or - transcribes with configured local Whisper/faster-whisper, then sends text prompt. 4. 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 - pdf - 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.started` - `tool_call.delta` - `tool_call.finished` - `tool_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 1. Hermes API server may not expose enough event detail. - Mitigation: start with CLI/direct Python bridge and add event callbacks. 2. PWA push notification quirks. - Mitigation: support ntfy/Gotify fallback. 3. Mobile audio and lifecycle quirks. - Mitigation: use Capacitor from the start; begin with WebView MediaRecorder and move to a native audio plugin if needed. 4. Tool-call streaming requires Hermes integration changes. - Mitigation: companion adapter interface; use available callbacks in AIAgent where possible.