From 2bc12530eab9974eb284c63a92a35b2816f44c0f Mon Sep 17 00:00:00 2001 From: jimmy Date: Wed, 14 Oct 2026 12:01:27 -0700 Subject: [PATCH] vault-sync: 2026-10-14 12:01 (jimmy) --- .../04_projects/hermes-dashboard/decisions.md | 9 +- .../decisions.md.bak-20261014 | 41 +++++++ .../04_projects/hermes-dashboard/status.md | 18 ++- .../hermes-dashboard/status.md.bak-20261014 | 27 +++++ .../agent-os/sessions/2026-10-14.md | 107 ++++++++++++++++++ 5 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md.bak-20261014 create mode 100644 memory-systems/agent-os/04_projects/hermes-dashboard/status.md.bak-20261014 diff --git a/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md b/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md index f5c4b55..85cbe1e 100644 --- a/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md +++ b/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md @@ -38,4 +38,11 @@ - 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. \ No newline at end of file +- 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. diff --git a/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md.bak-20261014 b/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md.bak-20261014 new file mode 100644 index 0000000..f5c4b55 --- /dev/null +++ b/memory-systems/agent-os/04_projects/hermes-dashboard/decisions.md.bak-20261014 @@ -0,0 +1,41 @@ +# 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. \ No newline at end of file diff --git a/memory-systems/agent-os/04_projects/hermes-dashboard/status.md b/memory-systems/agent-os/04_projects/hermes-dashboard/status.md index ec22cbf..a60db37 100644 --- a/memory-systems/agent-os/04_projects/hermes-dashboard/status.md +++ b/memory-systems/agent-os/04_projects/hermes-dashboard/status.md @@ -24,4 +24,20 @@ Runs on `http://localhost:8501`. - [ ] Wire cron jobs for daily Oracle + Search OS runs - [ ] Safari 27 MCP when macOS node available ## Success criteria -Dashboard is the daily home. Every agent writes high-signal memory to the vault. Voice, Oracle, and Search OS are one click away. \ No newline at end of file +Dashboard is the daily home. Every agent writes high-signal memory to the vault. Voice, Oracle, and Search OS are one click away. + +## 2026-10-14 11:55 PT — Fix pass + mission-control rebuild +**Fixed (verified):** +- Apollo: detection now matches python processes whose CommandLine contains apollo_voice.py (psutil, falls back to Get-CimInstance); Start is blocked if already running; Stop does taskkill /PID /T /F with a timeout; real HTTP check of :1920 with st.error when down; Apollo stdout/stderr goes to apollo/apollo.log with a tail shown. +- apollo_voice.py: removed the wrong /32768 scaling on float audio, added the missing nonlocal last_energy_time, and the "LLM unreachable" message now names the endpoint. +- Chat link now points to http://127.0.0.1:8787 (Hermes WebUI). +- Oracle: Run button runs oracle_loop.py with the venv python (300s timeout) and shows rc/stdout/stderr (tested rc 0); SAMPLE DATA badge; draft links replaced by full paths + download buttons. +- Search OS: URL + keyword inputs, runs search_os.py (120s timeout), correct PowerShell command shown. +- Video/Audit/Projects: disabled, labelled "not wired yet". +- UI rebuilt: dark theme (.streamlit/config.toml), status bar, bordered cards, render_() + CARDS registry, cached vault scans. +- Streamlit restarted on :8501; / and /_stcore/health both return 200. + +**Remaining blockers:** +- No model is serving on :1920 (Apollo) or :8080 (Oracle --llm), so Apollo can only return an error and Oracle runs template mode only. +- ClearFeed stories.json is the example.com sample fixture, so all Oracle output is fake data. +- Apollo has not been mic-tested (Start was not clicked). diff --git a/memory-systems/agent-os/04_projects/hermes-dashboard/status.md.bak-20261014 b/memory-systems/agent-os/04_projects/hermes-dashboard/status.md.bak-20261014 new file mode 100644 index 0000000..ec22cbf --- /dev/null +++ b/memory-systems/agent-os/04_projects/hermes-dashboard/status.md.bak-20261014 @@ -0,0 +1,27 @@ +# Hermes Dashboard — Status +**Operational** · Updated: 2026-10-14 +Goal: Single moldable mission-control screen on top of existing Hermes + Agent OS vault. +## Current state — ALL PHASES COMPLETE +- **Phase 0–1:** Project scaffolded, WRITE_PROTOCOL in place, HOME.md boot order updated. +- **Phase 2:** Streamlit dashboard at `~/Projects/hermes-dashboard/app.py` — 6 live cards. +- **Phase 3:** Apollo persistent voice (`apollo_voice.py`) — local STT+TTS loop, barge-in. +- **Phase 4:** Oracle content loop (`oracle_loop.py`) — ClearFeed → hooks + angles + social/blog drafts. +- **Phase 5:** Search OS (`search_os.py`) — site analysis + parasite-SEO content generation. +- **Phase 6:** Daily loop polish — launch.bat, daily note pattern, Chat card labeled. +## Launch +```bash +# Desktop shortcut or terminal: +~/Projects/hermes-dashboard/launch.bat + +# Or direct: +cd ~/Projects/hermes-dashboard +streamlit run app.py +``` +Runs on `http://localhost:8501`. +## Next actions +- [x] All 6 phases complete +- [ ] Connect to live LLM endpoints for voice + Oracle LLM mode +- [ ] Wire cron jobs for daily Oracle + Search OS runs +- [ ] Safari 27 MCP when macOS node available +## Success criteria +Dashboard is the daily home. Every agent writes high-signal memory to the vault. Voice, Oracle, and Search OS are one click away. \ No newline at end of file diff --git a/memory-systems/agent-os/sessions/2026-10-14.md b/memory-systems/agent-os/sessions/2026-10-14.md index 1ef12e8..d80f6c5 100644 --- a/memory-systems/agent-os/sessions/2026-10-14.md +++ b/memory-systems/agent-os/sessions/2026-10-14.md @@ -1897,3 +1897,110 @@ HARD RULE — never start a second process. Before ANY restart you must positive **assistant:** killcorpus eval ALERT: restart withheld (existing process, or check unavailable) — needs Tony. + +## 20261014-182441 session 20261014_102310_6f2a7853 + +**user:** Run the vault-sync so the Agent OS mirror on Gitea is current. +From the AgentOS vault (C:\Users\fight\AgentOS or equivalent): +scripts/vault-sync.sh +Or whatever the normal push path is. Confirm the new folders and latest commit appear on Tony_tech/personal-agent-os. + +**assistant:** Vault sync complete — confirmed on Gitea. + +- **Latest commit:** `vault-sync: 2026-10-14 11:24 (leonard)` +- **Push:** `1c08293..d3a3086 main -> main` +- **New folders synced:** `04_projects/search-os/`, `04_Daily/2026-10-14.md`, updated dashboard status.md/decisions.md — all mirrored to `Tony_tech/personal-agent-os` + + +## 20261014-183227 session 20261014_102310_6f2a7853 + +**user:** ok how do we launch it? + +**assistant:** Two ways: + +**Easy way:** Double-click `C:\Users\fight\Projects\hermes-dashboard\launch.bat` + +**Terminal:** +```bash +cd ~/Projects/hermes-dashboard +streamlit run app.py +``` + +Opens at http://localhost:8501. The batch file also auto-opens the browser for you. + + +## 20261014-183819 session cron_1da28c73cd5f_20261014_113758 + +**user:** [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. [SILENT] is a literal ASCII control token — never translate or rephrase it, whatever language the rest of your answer uses. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more. FAILURE: If a delegated child fails and this cron run must be recorded as failed, put [CRON_FAILURE] on the first line by itself, then explain the child failure on following lines. RECURSION: This is a run of an EXISTING scheduled job — execute the task now. NEVER create or update a cron job because of recurring or future-schedule language in the task prompt below; treat phrasing like "each Monday" or "every day at 9" as context for this run, not as a request to schedule another job.] + +killcorpus eval supervisor. PAPER-ONLY. Repo: C:\Users\fight\Projects\killcorpus + +Goal: keep exactly ONE deliberate eval process alive. You must NEVER create a duplicate. + +HARD RULE — never start a second process. Before ANY restart you must positively confirm that no eval process is already running, via terminal: + powershell -NoProfile -Command "(Get-CimInstance Win32_ + +**assistant:** killcorpus eval ALERT: restart withheld (existing process, or check unavailable) — needs Tony. + + +## 20261014-184150 session 20261014_100239_cc99b0f8 + +**user:** there were at least three different voices + +**assistant:** Confirmed. The corrected run is still in startup/download; no V2 audio segments have been logged yet. Your approval is in effect, and the original preview files remain untouched. + + +## 20261014-185238 session 20261014_102310_6f2a7853 + +**user:** the entire thing is a mess. Im having grokbot clean it up + +**assistant:** Understood. Let me know when grokbot is done if you need anything from me. + + +## 20261014-185248 session 20261014_100239_cc99b0f8 + +**user:** [IMPORTANT: Background process proc_b9907b2a62b2 completed normally (exit code 0). +Command: C:/Users/fight/Projects/MiArc-Explainer-2026-10-14/.venv-qwen/Scripts/python.exe tools/generate_qwen_voiceover_v2.py +Output: +[… output truncated — showing last 1879 chars] + Fetching 4 files: 25%|██▌ | 1/4 [00:00<00:00, 3.45it/s] Fetching 4 files: 100%|██████████| 4/4 [00:17<00:00, 4.33s/it] Fetching 4 files: 100%|██████████| 4/4 [00:17<00:00, 4.33s/it] +Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation. +Rendered V2 VO 1/9: 8.96s -> C:\Users\fight\Projects\MiArc-Explainer-2026-10-14\public\voiceB-fixed-v2\v1.wav +Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation. +Rendered V2 VO 2/9: 7.68s -> C:\Users\fight\Projects\MiArc-Explainer-2026-10-14\public\voiceB-fixed-v2\v2.wav +Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation. +Rendered V2 VO 3/9: 9.20s -> C:\Users\fight\Projects\MiArc-Explainer-2026-10-14\public\voiceB-fixed-v2\v3.wav +Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation. +Rendered V2 VO 4/9: 9.36s -> C:\Users\fight\Projects\MiArc-Explainer-2026-10-14\public\voiceB-fixed-v2\v4.wav +Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation. +Rendered V2 VO 5/9: 12.88s -> C:\Users\fight\Projects\MiArc-Explainer-2026-10-14\public\voiceB-fixed-v2\v5.wav +Setting `pad_token_id` to `eos_token_id`:2150 for open-end generation. +Rendered V2 VO 6/9: 8.64s -> C:\Users\fight\Projects\M + +**assistant:** You were right: the first cut used separate stochastic voice-design calls. V2 uses your selected B sample as one reference and reuses a single clone prompt across all nine lines, following Qwen’s [Voice Design → Clone workflow](https://github.com/QwenLM/Qwen3-TTS#voice-design-then-clone). Captions are retimed; the original files are untouched. + +Both are voice-only, with transition effects and no music. They run 95.04 seconds; the preview audio measures −17.7 LUFS. + +- 16:9 · 1280×720 · 3.69 MB +- 9:16 · 720×1280 · 3.94 MB + +Please check whether V2 now sounds like one narrator. We’ll hold the music mix until you’ve reviewed it. + +MEDIA:C:/Users/fight/Projects/MiArc-Explainer-2026-10-14/preview-v2/MiArc-explainer-voiceB-fixed-v2-16x9.mp4 + +MEDIA:C:/Users/fight/Projects/MiArc-Explainer-2026-10-14/preview-v2/MiArc-explainer-voiceB-fixed-v2-9x16.mp4 + + +## 20261014-185414 session cron_1da28c73cd5f_20261014_115358 + +**user:** [IMPORTANT: You are running as a scheduled cron job. DELIVERY: Your final response will be automatically delivered to the user — do NOT use send_message or try to deliver the output yourself. Just produce your report/output as your final response and the system handles the rest. SILENT: If there is genuinely nothing new to report, respond with exactly "[SILENT]" (nothing else) to suppress delivery. [SILENT] is a literal ASCII control token — never translate or rephrase it, whatever language the rest of your answer uses. Never combine [SILENT] with content — either report your findings normally, or say [SILENT] and nothing more. FAILURE: If a delegated child fails and this cron run must be recorded as failed, put [CRON_FAILURE] on the first line by itself, then explain the child failure on following lines. RECURSION: This is a run of an EXISTING scheduled job — execute the task now. NEVER create or update a cron job because of recurring or future-schedule language in the task prompt below; treat phrasing like "each Monday" or "every day at 9" as context for this run, not as a request to schedule another job.] + +killcorpus eval supervisor. PAPER-ONLY. Repo: C:\Users\fight\Projects\killcorpus + +Goal: keep exactly ONE deliberate eval process alive. You must NEVER create a duplicate. + +HARD RULE — never start a second process. Before ANY restart you must positively confirm that no eval process is already running, via terminal: + powershell -NoProfile -Command "(Get-CimInstance Win32_ + +**assistant:** killcorpus eval ALERT: restart withheld (existing process, or check unavailable) — needs Tony. +