{"attention_items": [{"detail": "Voice usable; Home Assistant degraded; tool routes degraded; HA status auth_failed; failure auth_failed; Refresh HA token/remote auth; add NetBird routed network for 192.168.1.100/32 or HA LAN.; NetBird netbird service active; private HA route absent", "name": "Voice tools degraded", "severity": "WARN", "source": "voice-readiness"}], "generated_at": 1780151140, "generated_at_iso": "2026-05-30T14:25:40Z", "green_dashboard": {"checks": {"ios_voice": "200 2 0.057361", "ios_voice_api": "200 379 0.013931", "root_health": "200 0 1.561952"}, "disk": "Filesystem      Size  Used Avail Use% Mounted on\n/dev/vda1       465G   39G  426G   9% /\ntmpfs           7.8G   19M  7.8G   1% /tmp\n/dev/vda1       465G   39G  426G   9% /", "docker": "honcho-api-1 Up 40 hours (healthy)\nhoncho-deriver-1 Up 5 days\nhoncho-redis-1 Up 5 days (healthy)\nhoncho-database-1 Up 5 days (healthy)\nuptime-kuma Up 5 days (healthy)\nsearxng-vps Up 5 days\nnetdata Up 5 days (healthy)", "generated_at": "2026-05-30T14:25:40+00:00", "improvement_idea": "No immediate action needed.", "memory": "total        used        free      shared  buff/cache   available\nMem:            15Gi       3.4Gi       1.2Gi       150Mi        11Gi        12Gi\nSwap:          2.0Gi        10Mi       2.0Gi", "ok": true, "overall": "OK", "recent_errors": "", "rows": [{"detail": "active", "icon": "[OK]", "name": "hermes-gateway.service", "status": "OK"}, {"detail": "active", "icon": "[OK]", "name": "caddy.service", "status": "OK"}, {"detail": "active", "icon": "[OK]", "name": "hermes-ios-voice.service", "status": "OK"}, {"detail": "active", "icon": "[OK]", "name": "hermes-ios-voice-api.service", "status": "OK"}, {"detail": "active", "icon": "[OK]", "name": "hermes-upgrade-health.timer", "status": "OK"}, {"detail": "200 0 1.561952", "icon": "[OK]", "name": "root_health", "status": "OK"}, {"detail": "200 2 0.057361", "icon": "[OK]", "name": "ios_voice", "status": "OK"}, {"detail": "200 379 0.013931", "icon": "[OK]", "name": "ios_voice_api", "status": "OK"}, {"detail": "{\"last_error_message\": null, \"max_connections\": 40, \"pending_update_count\": 0, \"url\": \"https://216-250-119-188.nip.io/telegram\"}", "icon": "[OK]", "name": "Telegram webhook", "status": "OK"}, {"detail": "1 recent error line(s) recorded; raw error text stays on the VPS.", "icon": "[OK]", "name": "Recent errors", "status": "OK"}], "services": {"caddy.service": "active", "hermes-gateway.service": "active", "hermes-ios-voice-api.service": "active", "hermes-ios-voice.service": "active", "hermes-upgrade-health.timer": "active"}, "summary": {"fail": 0, "ok": 10, "warn": 0}, "telegram_webhook": {"last_error_message": null, "max_connections": 40, "pending_update_count": 0, "url": "https://216-250-119-188.nip.io/telegram"}, "updated": "2026-05-30T14:25:40+00:00", "uptime": "14:25:42 up 13 days, 20:10,  2 users,  load average: 0.30, 0.34, 0.38"}, "hermes_api": {"_probe_ms": 1, "platform": "hermes-agent", "status": "ok"}, "insights": {"age": {"generated": "0s", "watchdog_last_ok": "unknown"}, "headline": "Degraded with 1 attention item.", "health": "degraded", "next_actions": [{"priority": "P1", "prompt": "Use full Hermes to review current command-center attention items, separate harmless noise from real risk, and propose or apply safe fixes.", "title": "Review attention item: Voice tools degraded", "why": "Voice usable; Home Assistant degraded; tool routes degraded; HA status auth_failed; failure auth_failed; Refresh HA token/remote auth; add NetBird routed network for 192.168.1.100/32 or HA LAN.; NetBird netbird service active; private HA ro"}, {"priority": "P1", "prompt": "Refresh the Home Assistant long-lived token or remote-auth session on the VPS, then rerun verify:ops. Do not switch to Mac/Tailscale fallback.", "title": "Refresh Home Assistant token/remote auth", "why": "Voice usable; Home Assistant degraded; tool routes degraded; HA status auth_failed; failure auth_failed; Refresh HA token/remote auth; add NetBird routed network for 192.168.1.100/32 or HA LAN.; NetBird netbird service active; private HA ro"}, {"priority": "P1", "prompt": "In NetBird admin, distribute route 192.168.1.100/32 to the VPS peer/group using an always-on home routing peer, then rerun verify:ops.", "title": "Add NetBird Home Assistant route", "why": "Voice usable; Home Assistant degraded; tool routes degraded; HA status auth_failed; failure auth_failed; Refresh HA token/remote auth; add NetBird routed network for 192.168.1.100/32 or HA LAN.; NetBird netbird service active; private HA ro"}, {"priority": "P3", "prompt": "Run a routine health sweep for Hermes Voice, VPS resources, watchdogs, and public URLs; fix only safe issues and summarize evidence.", "title": "Run a routine health sweep", "why": "Quick proactive check across voice, Hermes API, watchdogs, and resources."}], "quick_prompts": ["What needs attention right now on Hermes Voice?", "Run a safe voice watchdog and tell me whether live voice is healthy.", "Use full Hermes to research the best next improvement for this page and implement the safe part.", "Explain the latest command-center JSON in plain English."], "runbook": {"public_urls": {"command_center": "https://morloksmaze.com/ios-voice/command-center", "json": "https://morloksmaze.com/ios-voice/command-center.json", "live_voice": "https://morloksmaze.com/ios-voice/", "status": "https://morloksmaze.com/ios-voice/status"}, "refresh_command_center": "/root/bin/hermes_voice_command_center.py || true", "restart": "systemctl restart hermes-ios-voice.service hermes-ios-voice-api.service", "rollback_hint": "Use the timestamped /opt/hermes-ios-voice/server.py.bak-* or /root/bin/hermes_voice_command_center.py.bak-* backups, then restart services.", "safe_checks": ["curl -fsS https://morloksmaze.com/ios-voice/status | python3 -m json.tool", "curl -fsS https://morloksmaze.com/ios-voice/command-center.json | python3 -m json.tool", "/root/bin/hermes_voice_watchdog.py", "systemctl is-active hermes-ios-voice.service hermes-ios-voice-api.service hermes-voice-command-center.timer", "/root/bin/hermes_voice_command_center.py || true"]}}, "mission": "VPS-first always-on Hermes live voice agent and command center", "ok": true, "primary_interface": {"mode": "live voice first; full Hermes/tools on explicit Ask full Hermes/tool handoff", "owner": "VPS", "tool_policy": "Fast conversation stays low-latency; tool work routes through full Hermes API with existing approval/safety boundaries.", "url": "https://morloksmaze.com/ios-voice/"}, "resources": {"disk_root": {"available": "426G", "size": "465G", "use_percent": "9%", "used": "39G"}, "mem": {"available": "12Gi", "free": "1.2Gi", "total": "15Gi", "used": "3.5Gi"}, "swap": {"available": null, "free": "2.0Gi", "total": "2.0Gi", "used": "10Mi"}}, "services": {"caddy.service": true, "hermes-gateway.service": true, "hermes-ios-voice-api.service": true, "hermes-ios-voice.service": true, "hermes-local-model.service": true, "hermes-queue-worker.service": true, "hermes-vps-api-facade.service": true}, "timers": {"hermes-backup-watchdog.timer": {"active": true, "last": "Sat 2026-05-30 14:00:01 UTC", "next": "Sat 2026-05-30 14:30:00 UTC", "state": "active", "substate": "waiting"}, "hermes-gateway-latency-watchdog.timer": {"active": true, "last": "Sat 2026-05-30 14:25:40 UTC", "next": "", "state": "active", "substate": "waiting"}, "hermes-green-dashboard.timer": {"active": true, "last": "Sat 2026-05-30 13:00:40 UTC", "next": "Sun 2026-05-31 13:01:39 UTC", "state": "active", "substate": "waiting"}, "hermes-sync.timer": {"active": true, "last": "Sat 2026-05-30 14:04:40 UTC", "next": "", "state": "active", "substate": "waiting"}, "hermes-upgrade-health.timer": {"active": true, "last": "Sat 2026-05-30 14:25:40 UTC", "next": "", "state": "active", "substate": "waiting"}, "hermes-voice-command-center.timer": {"active": true, "last": "Sat 2026-05-30 14:25:40 UTC", "next": "", "state": "active", "substate": "running"}, "hermes-voice-watchdog.timer": {"active": true, "last": "Sat 2026-05-30 14:25:40 UTC", "next": "", "state": "active", "substate": "running"}}, "tool_jobs": {"counts": {"done": 16}, "latest": [{"age_seconds": 51404, "id": "8a8029f3587946a8", "request_preview": "Use the terminal tool to run: printf full-control-ios-ok . Then reply with exactly the command output and nothing else.", "status": "done"}, {"age_seconds": 51419, "id": "dbb3f6e49cf54b38", "request_preview": "Reply exactly: telegram-health-ok", "status": "done"}, {"age_seconds": 62174, "id": "7603605270754234", "request_preview": "Dave asked about the movie after prior tool work. No new tool call is needed; summarize the earlier result: AMC Roosevel", "status": "done"}, {"age_seconds": 62183, "id": "12520ed1852740d5", "request_preview": "Dave said 'Hermes.' No tool action required. Provide a brief Hermes-style acknowledgement and offer help.", "status": "done"}, {"age_seconds": 62216, "id": "d54babce6a654895", "request_preview": "Dave referred to me as Flux, then Hermes. Clarify name per developer instruction: identify as Hermes in a concise Hermes", "status": "done"}, {"age_seconds": 62230, "id": "566f845f9d3c4259", "request_preview": "Dave asked my name again. No tool is needed. Provide a concise response in Hermes voice: identify as Hermes, Dave\u2019s voic", "status": "done"}, {"age_seconds": 62246, "id": "0625ddc365084e46", "request_preview": "Dave asked my name. No tool is needed. Provide a concise response in Hermes voice: identify as Hermes, Dave\u2019s voice comp", "status": "done"}, {"age_seconds": 62283, "id": "0f33e08c4fce45a9", "request_preview": "Dave asked to check the internet for whether 'The Mandalorian' is playing at the AMC near Roosevelt Field (Garden City, ", "status": "done"}], "path": "/root/.hermes/monitor/voice_tool_jobs.json"}, "voice": {"_probe_ms": 7597, "browser_voice_fallback": {"continuous_recognition": false, "english_voice_required": true, "final_transcript_guard": true, "handoff_endpoint": "/ios-voice/text-hermes?async=1", "handoff_mode": "async_full_hermes", "interim_transcripts": true, "language": "en-US", "ok": true, "recognition_api": "SpeechRecognition_or_webkitSpeechRecognition", "speaks_answer": true, "stop_cancels_speech": true, "synthesis_api": "SpeechSynthesisUtterance", "synthesis_language": "en-US", "trigger": "realtime_quota_exhausted_or_user_preference", "uses_full_hermes": true}, "configured": {"hermes_api_key": true, "live_agent_for_all_voice_turns": true, "memory_provider": "honcho", "openai_realtime_key": true, "session_budget_usd": 0.25, "spend_tracking": true, "voice_unlock_configured": true}, "connectors": [{"detail": "HA auth failed; last-good proof age=322s is not live", "id": "home_assistant", "last_verified_at": 1780150818, "metrics": {"candidate_count": 1, "failure_category": "auth_failed", "lights_count": 12, "live": false, "recovery_action": "Refresh HA token/remote auth; add NetBird routed network for 192.168.1.100/32 or HA LAN.", "stale": true, "time_zone": "America/New_York"}, "name": "Home Assistant", "status": "warn"}, {"detail": "13 tools discoverable", "id": "ha_mcp", "last_verified_at": 1780151145, "name": "HA MCP", "status": "ok"}, {"detail": "generate_204 reachable", "id": "web", "last_verified_at": 1780151145, "name": "Outside web", "status": "ok"}, {"detail": "Honcho active: hybrid, 1600-token context, dialectic every 5 turns", "id": "memory", "last_verified_at": 1780151147, "metrics": {"backup_age_seconds": 39572, "backup_bytes": 24580303, "backup_ok": true, "context_tokens": 1600, "degraded": false, "dialectic_cadence": 5, "dialectic_depth": 2, "embedding_null_count": 0, "embedding_total_count": 1, "observation_mode": "directional", "provider": "honcho", "provider_quota_blocked": false, "quota_backoff": false, "recall_mode": "hybrid", "semantic_recall": "embedded"}, "name": "Honcho memory", "status": "ok"}, {"detail": "Hermes state directory readable", "id": "files", "last_verified_at": 1780151145, "name": "Files", "status": "ok"}, {"detail": "gateway service active", "id": "telegram", "last_verified_at": 1780151145, "name": "Telegram", "status": "ok"}, {"detail": "netbird service active; private HA route absent", "id": "netbird", "last_verified_at": 1780151145, "metrics": {"management_connected": true, "networks_present": false, "private_ha_route": false, "route_device": "ens6", "route_target": "192.168.1.100", "service_active": true, "signal_connected": true, "status_command_ok": true}, "name": "NetBird", "status": "warn"}, {"detail": "Realtime key configured", "id": "openai", "last_verified_at": 1780151145, "name": "OpenAI", "status": "ok"}, {"detail": "API server health reachable", "id": "full_hermes", "last_verified_at": 1780151145, "name": "Full Hermes", "status": "ok"}], "home_assistant": {"auth_failed": true, "auth_flap": false, "candidate_count": 1, "config_http_status": null, "detail": "HA auth failed; last-good proof age=322s is not live", "failure_category": "auth_failed", "fallback_reason": "200", "gateway_source": "HOMEASSISTANT_URL", "last_verified_at": 1780150818, "lights_count": 12, "live": false, "location_name": "Home", "ms": null, "ok": false, "proof_age_seconds": 322, "recovery_action": "Refresh HA token/remote auth; add NetBird routed network for 192.168.1.100/32 or HA LAN.", "route_kind": "ha_cloud_or_remote_https", "source": "authenticated_ha_rest_failfast", "stale": true, "states_http_status": null, "status": "auth_failed", "time_zone": "America/New_York", "version": "2026.6.0b0"}, "language_guard": {"browser_fallback_guard": true, "full_hermes_prompt_guard": true, "hard_guard": "English-only output is prepended to full-Hermes handoffs and Realtime instructions.", "ok": true, "output_language": "en-US", "realtime_prompt_guard": true}, "memory": {"backup": {"age_seconds": 39572, "bytes": 24580303, "checked": true, "latest_at": "2026-05-30T03:26:15Z", "latest_file": "latest.sql.gz", "max_age_seconds": 172800, "ok": true}, "config": {"ai_peer": "hermes-leader", "context_cadence": 1, "context_tokens": 1600, "dialectic_cadence": 5, "dialectic_depth": 2, "honcho_config_exists": true, "observation_mode": "directional", "peer_name": "david", "pin_peer_name": true, "private_loopback": true, "provider": "honcho", "recall_mode": "hybrid", "session_strategy": "global", "workspace": "hermes", "write_frequency": "async"}, "degraded": false, "detail": "Honcho active: hybrid, 1600-token context, dialectic every 5 turns", "embedding_backlog": {"null_count": 0, "state": "embedded", "total_count": 1}, "embedding_state": {"checked": true, "null_count": 0, "state": "embedded", "total_count": 1}, "ok": true, "provider": "honcho", "provider_quota": {"blocked": false, "checked": true, "evidence": "", "window_minutes": 15}, "provider_quota_blocked": false, "quota_backoff": false, "semantic_recall": "embedded", "warnings": []}, "model": "gpt-realtime-2", "models": {"full_hermes": "gpt-5.4-mini", "realtime": "gpt-realtime-2"}, "ok": false, "page_capabilities": {"browser_voice_fallback": true, "camera": true, "data_wait_jokes": true, "full_hermes_handoff": true, "ha_degraded_plain_status": true, "ha_recovery_action": true, "memory_backup_status": true, "memory_telemetry": true, "microphone": true, "netbird_route_status": true, "page_load_telemetry": true, "token_spend": true, "video_context_age_detail": true, "video_input": true, "voice_readiness_status": true}, "pairing": {"expires_at": 1810894757, "has_pairing_code": true}, "persona": {"language": "en-US", "language_contract": "English only unless Dave explicitly asks for translation", "name": "calm retro spacecraft computer", "style": "calm retro spacecraft computer", "user_name": "Dave"}, "server_time": 1780151140, "services": {"hermes_api": {"ms": 2, "ok": true, "status": 200}, "home_assistant": {"failure_category": "auth_failed", "last_verified_at": 1780150818, "live": false, "ok": false, "stale": true, "status": "auth_failed"}, "memory": {"backup": {"age_seconds": 39572, "bytes": 24580303, "checked": true, "latest_at": "2026-05-30T03:26:15Z", "latest_file": "latest.sql.gz", "max_age_seconds": 172800, "ok": true}, "degraded": false, "last_verified_at": 1780151147, "ok": true, "provider": "honcho", "provider_quota_blocked": false, "semantic_recall": "embedded"}, "voice_api": {"ms": 3, "ok": true, "status": 200}, "voice_web": true, "watchdog_timer_active": true}, "version": "0.6.63", "video_input": {"capture": "canvas_jpeg", "detail": "Camera ready. User-initiated frames only. Camera frames are sent only after Dave opens camera, captures a frame, or enables live view.", "features": {"camera_preview": true, "front_back_camera": true, "low_rate_live_frames": true, "single_frame_ask_view": true}, "jpeg_quality": 0.62, "live_frame_min_interval_ms": 2600, "live_frame_trigger": "input_audio_buffer.speech_started", "manual_frame_response": true, "max_frame_width": 768, "max_prompt_chars": 2000, "ok": true, "privacy": "user_initiated", "realtime_detail": "low", "realtime_event": "conversation.item.create", "requires_active_realtime_session": true, "speech_triggered_live_frames": true, "telemetry": {"client_event": "camera_frame_sent", "context_fresh_window_seconds": 300, "context_status": "none", "enabled": true, "last_frame_age_seconds": null, "last_frame_fresh": false, "last_frame_source": null, "live_frames_24h": 0, "manual_frames_24h": 0, "recent_frames_24h": 0}, "transport": "openai_realtime_input_image"}, "voice": "cedar", "voice_readiness": {"browser_fallback_ok": true, "core_ok": true, "full_hermes_ok": true, "home_assistant_degraded": true, "memory_degraded": false, "memory_ok": true, "mode": "degraded_tools", "ok": true, "realtime_configured": true, "tooling_degraded": true, "video_input_ok": true}, "watchdog": {"last_browser_smoke": {"degraded": false, "exit_code": 0, "healthStatus": 200, "healthText": "ok", "ms": 1048, "ok": true, "pageLoaded": true, "pageTelemetrySent": true, "pageTelemetryStatus": 200, "pageVersion": "0.6.63", "sdpPrefix": "v=0\r\no=- 449", "sessionOk": true, "sessionStatus": 200, "signalingState": "stable", "statusStatus": 200}, "last_failures": [], "last_ok_age_seconds": 328, "last_ok_ts": 1780150820}}, "voice_events": {"counts_1h": {"page_loaded": 11}, "counts_1h_by_page": {"0.6.63": {"page_loaded": 11}}, "counts_1h_current_page": {"page_loaded": 11}, "counts_24h": {"page_loaded": 278, "voice_latency": 29}, "counts_24h_by_page": {"0.6.63": {"page_loaded": 278, "voice_latency": 29}}, "counts_24h_current_page": {"page_loaded": 278, "voice_latency": 29}, "current_page": "0.6.63", "current_page_telemetry": {"current_page": "0.6.63", "latest_current_page_age_seconds": 321, "latest_event_age_seconds": 321, "stale_latest_pages": [], "status": "current"}, "latest": [{"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780150819, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780150515, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780150202, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780149889, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780149573, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780149257, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780148964, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780148634, "type": "page_loaded"}], "latest_current_page": [{"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780150819, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780150515, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780150202, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780149889, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780149573, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780149257, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780148964, "type": "page_loaded"}, {"detail": "watchdog browser smoke current page loaded", "page": "0.6.63", "ts": 1780148634, "type": "page_loaded"}], "log_path": "/root/.hermes/monitor/voice_turn_events.jsonl"}, "warnings": [], "watchdog": {"failures": [], "last_alert_ts": 1780050117, "last_browser_smoke": {"degraded": false, "exit_code": 0, "healthStatus": 200, "healthText": "ok", "ms": 1048, "ok": true, "pageLoaded": true, "pageTelemetrySent": true, "pageTelemetryStatus": 200, "pageVersion": "0.6.63", "sdpPrefix": "v=0\r\no=- 449", "sessionOk": true, "sessionStatus": 200, "signalingState": "stable", "statusStatus": 200}, "last_failure_ts": 1780050117, "last_ok_ts": 1780150820}, "source": "cached-command-center"}