Problem
An always-on personal agent that thinks, edits files, runs commands and reads email is invisible between prompts. A terminal window is the wrong ambient interface - you want presence: a glance should tell you what the agent is doing, and voice should be a first-class channel.
Approach
Two halves. The Hermes backend runs the agent as a Docker stack - an OpenAI-compatible API with a dashboard, plus Honcho memory on Postgres and Redis. The Talos Face app is a cross-platform Flutter client whose code-drawn robot eyes are driven by a pure activity state machine: thinking, editing, running commands, reading - each activity has a face.
voice ──► voicebox STT ──► Talos Face (Flutter)
│ activity state machine
│ code-drawn eyes · chat
▼
Hermes agent API :8642
│ │
Honcho memory dashboard :9119
(Postgres+Redis)Development is plan-driven and test-first: phased implementation plans live
in the repo (docs/plans/), each merged behind unit and widget tests.
Tradeoffs
- Flutter over native. One codebase reaches macOS first and then Linux/Windows/Android/iOS; eyes are code-drawn rather than sprite assets, so the animation core stays testable as a pure state machine.
- Vendored voice. STT/TTS is an upstream project (voicebox) kept out of git history and wired by port - replaceable without touching the agent.
- Memory as a service. Honcho handles persistence instead of a bespoke store - one less thing to own, at the price of an extra container.
Outcome
Plan 1 - the eyes animation core and a wake-word feasibility spike - is merged and tested; the presence service that binds face to agent hooks is drafted as plan 2. The robot has eyes; next it learns to point them.