# AshBot — Status > Personal assistant agent for **Ashley** (Phoenix Salon + Spa — Veripath's active client), > delivered over **iMessage via Photon**. Hermes profile `ashbot`. > Last worked: 2026-09-15. ## Identity | | | |---|---| | Profile | `ashbot` — `~/AppData/Local/hermes/profiles/ashbot` | | Purpose | Ashley's personal assistant (scheduling, business admin, marketplace scouting) | | Channel | Photon → iMessage. **Own Photon project**, separate from the coach line | | Reachable by | Ashley (home channel + allowed user); Tony tests from his own line | | Sidecar | Photon sidecar on `127.0.0.1:8790` | | Gateway | PID 10384, platform `photon: connected`, Hermes 0.21.2 | ## Model stack (changed 2026-09-12) | | | |---|---| | Provider | `omniroute` → `http://127.0.0.1:20128/v1` | | Primary | `auto/best-free` (OmniRoute free-tier auto-combo — live roulette) | | Fallback | `openrouter/deepseek/deepseek-v4.1-flash` → `freetoken-gemma26b/Gemma-4-26B-A4B-NVFP4` (local, free) | Before 2026-09-12 this profile had **no failover at all** — `hermes -p ashbot fallback list` returned "No fallback providers configured"; the `model.fallback:` key in her config is not the failover chain. See [[01_Wiki/omniroute-routing-failover]] for the failure mode. ## Incident log ### 2026-09-12 — turn died mid Marketplace scan (fixed) - 10:07–10:17 PT. Ashley/Tony asked for a live Facebook Marketplace flip scan. - Browser work (`browser_exec`) ran; the connection hiccuped mid-scan; then the model API collapsed — **9 empty streams in a row** (`http 200, bytes 0`) at 10:14:53–10:15:11. - Cause: the `auto/best-free` combo's OpenRouter primary dropped out, and the chain fell into broken targets — `opencode/minimax-m3-free` (401, model unsupported) and `auggie/claude-sonnet-4.6` (200 with an empty body, ~1.0 s). A 200 never trips OmniRoute's breaker, so the combo never reached a working target and Hermes killed the turn. - User-visible: 276 s of silence → a 141-char stub → an 18,045-char dump truncated to **8,000 chars mid-sentence** by the Photon adapter. Session `20260912_100658_6c1e9828`; last message persisted 10:12:49 — the turn never completed. - Fixed: `fallback_providers` added to her `config.yaml` (backup: `config.yaml.bak.20260912_133720`) **and** `blockedProviders = ["auggie","opencode"]` set in OmniRoute (`~/.omniroute/storage.sqlite`). Catalog went 476 → 453 models. ### 2026-09-15 — fleet-wide gateway outage after Hermes 0.21.2 auto-update (fixed) - 07:27–07:31 PT. The 0.21.2 auto-update requested graceful restarts of every profile's gateway (ashbot 07:31:27, leonard 07:31:35, jimmy 07:31:45); the post-restart relaunch never fired, so all gateways stayed down. The machine had rebooted ~07:27 — login items started gateways, the update then stopped them, nothing restarted them. - Ashbot additionally lost its whole model provider: the OmniRoute server itself was dead (no process, nothing on :20128 — it has no service/login item and does not survive a reboot). Restarted via `omniroute serve --no-open --daemon` (NOT `node dist/server-ws.mjs`, which serves only Dashboard/WS and never the 20128 API). - Root-caused the combo's per-turn lag: `theoldllm` targets 403'd on every request and OpenRouter connection was `credits_exhausted`, so `auto/best-free` burned ~6-20 s/turn on dead hops before landing on the local freetoken Gemma engine (which answers every turn today). Combo verdict logs `499 "all targets exhausted"` even when the last successful step's body was delivered. - Fixed: `blockedProviders` += `theoldllm` (catalog 453 → 427 models); `fallback_providers` chain verified still registered (`hermes -p ashbot fallback list`). Turn latency back to ~10 s. Live check-ins continue to route `omniroute` → local Gemma-4-26B. ## Active automation - **Cron job `e4df5902e96f` — "Tony daily check-in"**, `0 9 * * *`, provider pinned (`--provider omniroute`). Created and test-run 2026-09-12; delivery verified. - Contact/scheduling jobs discussed with Ashley — the 9/12 test confirmed a scheduled check-in actually fires and delivers. ## Open items - **iMessage outbound cap: 8,000 chars.** The Photon adapter truncates long replies mid-sentence (`truncating outbound from 18045 to 8000 chars`). Her scan reports routinely exceed it — cap her output or chunk it. - **Primary is still the free roulette.** A failure now costs the retry window (~1 min typical, up to ~4.5 min) before the fallback takes over, instead of killing the turn. - **OpenRouter connection is `credits_exhausted`** (2026-09-15). Every `auto/*` combo hop that tries OpenRouter dies instantly and the chain leans on the local Gemma engine; this is also why the coach profile 402s. Decision needed: top up, or accept local-first. Combo still tries ~3-4 fast-failing no-auth targets per turn (duckduckgo-web 418, chipotle 502, mimocode 499) before the local hop — sub-second each, cosmetic. - **Browser mid-scan hiccup** — `browser_exec` dropped during the marketplace scan; the retry path is untested since the model fix. ## Files | Path | Change | |---|---| | `profiles/ashbot/config.yaml` | `+ fallback_providers` (2026-09-12); backup alongside | | `~/.omniroute/storage.sqlite` | `settings.blockedProviders` = `["auggie","opencode","theoldllm"]` (2026-09-15) | | Hermes skill | `omniroute-routing-failover` (jimmy profile) | See also: [[04_projects/phoenix-salon/status]] · [[04_projects/veripath/status]] · [[01_Wiki/omniroute-routing-failover]]