# Hermes Dashboard — Decisions ## 2026-10-14 - Build as a thin local web layer on top of existing Hermes + vault. Do not replace Hermes desktop. - Keep all durable memory in the existing Agent OS / Obsidian structure. - Prefer Streamlit for first dashboard version (fastest to ship). - Apollo voice stays on existing ChatGPT plan / local TTS stack (no extra voice API). - Search OS agent will reuse parasite-seo skill, Safari 27 MCP, and VeriPath checks. - Non-negotiable: high-signal only; secrets stay out of vault; no irreversible actions without confirmation. ## 2026-10-14 — Phase 2 decisions - Dashboard built as single-file Streamlit app (`~/Projects/hermes-dashboard/app.py`, 10.8 KB). - Six-card layout (2x3 grid): Chat, Apollo Voice, Oracle, Workflows, Memory, Status. - **Live cards** (3): Oracle reads `athena-oracle/status.md` for pipeline source health + recent files. Memory reads latest `04_Daily/` + scans `04_projects/*/status.md` for open actions. Status extracts model stack from `HOME.md` + shows last git commit. - **Placeholder cards** (3): Chat (textarea, disabled), Apollo Voice (toggle + slider + voice selector, disabled), Workflows (4 buttons: Video, Audit, Search OS, Projects, disabled). Awaiting Phase 3–5. - Launch: `streamlit run ~/Projects/hermes-dashboard/app.py` (Hermes venv, port 8501). - Dark theme: `#1a1a2e` cards, `#ffac02` amber headers, `#2a2a4a` borders. ## 2026-10-14 — Phase 3 decisions - Built `apollo_voice.py` (9.6 KB) as standalone voice loop using existing stack: `faster-whisper` (tiny) for local STT, `edge-tts` for TTS, `sounddevice` for mic capture, `ffplay` for playback. - Continuous VAD mode: records until 1.5s silence, transcribes, gets LLM response, speaks with barge-in detection. - Barge-in: checks mic energy every 300ms during playback; kills ffplay and re-listens if speech detected. - LLM endpoint configurable via `apollo_state.json` (`llm_endpoint` field). Defaults to local LFM2.5 on port 1920. Falls back gracefully when unavailable. - Dashboard Apollo card: start/stop process control, voice selector (6 Edge TTS voices), live status indicator, last exchange expander. - Documented in `02_agents/apollo/README.md` (architecture, stack, limits, state schema). - Current limit: requires a running LLM endpoint for voice replies (echo mode without one). Wake-word not integrated (sherpa runs separately in Hermes). ## 2026-10-14 — Phase 4 decisions - Adopted ClearFeed (`Tony_tech/ClearFeed`) as the story layer — replaces Athena Oracle for news ingestion. ClearFeed does fetch → dedup → cluster → rank → optional LLM summarize. - Built `oracle_loop.py` (11.6 KB) as content generation layer on top of ClearFeed output (`stories.json`). - Dual mode: template-based generation (always works, rule-based hooks/angles) + LLM mode (pass `--llm`, requires local model). - Per story output: `05_Output/oracle/YYYY-MM-DD/-social.txt` + `-blog.md`. - Dashboard Oracle card now reads `oracle_state.json` and shows ranked stories with expandable hooks, coverage count, and links to generated drafts. - "Run Oracle Loop" button in dashboard (terminal-only for now — Streamlit can't spawn long-running subprocesses reliably). - Workflow note added to `08_workflows/oracle-content-loop.md`. ## 2026-10-14 — Phase 5 decisions - Built `search_os.py` (16.5 KB) as SEO analysis + content generation agent. - Analyzes sites for 11 SEO signals: title, meta, H1, keyword density, schema, GBP mentions, contact info, word count. - Generates 4 platform-specific drafts following parasite-seo V3: GBP post, YouTube description, Reddit post (local persona), Quora answer (expert persona). - Safari 27 MCP deferred — macOS-only, not available on Windows. Uses `requests` for site analysis instead. - VeriPath patterns applied: site surface check, GBP presence check, cross-reference analysis. - Dashboard Workflows card: Search OS button shows terminal invocation + recent reports from `05_Output/search-os/`. - Example run against ultrabeautysalon.com for "best hair salon folsom": found 5 SEO issues (missing keyword in title/H1/meta, 0% density, no GBP mentions), 2 strengths (contact visible, good word count). - Output format: single markdown report per keyword with analysis table + content drafts + action items. - Non-negotiable: all [bracketed] fields in drafts must be filled from real data before publishing. ## 2026-10-14 — Dashboard conventions (fix pass) - One `render_()` per card, registered in `CARDS` in app.py; cards are laid out three per row inside bordered containers, and a card error is caught and shown inside that card. - Actions run the venv python (`hermes-agent\venv\Scripts\python.exe`) via `run_script()` with a timeout; results are shown with `show_run()` (rc + stdout/stderr, success/error). - Expensive vault scans use `st.cache_data` (60–300s ttl). - Theme lives in `.streamlit/config.toml` (dark). Backups of pre-fix files are `*.bak-20261014`. - Decision: no new features in this pass; Video/Audit/Projects stay disabled until wired.