Hermes Audit — 2026-06-25

[audit hermes comprehensive]
date: 2026-06-25
scope: full-system
auditor: hermes-agent (session)

🔍 Hermes Complete System Audit — 2026-06-25

Full inventory of everything installed, configured, and working. Cross-analysis of three information channels: WhatsApp, Discord, Obsidian Vault. Recommendations for optimal content routing.


Part 1: System Inventory

1.1 Core Services (5 systemd units — all active ✅)

Service Purpose Status
hermes-gateway Main agent runtime (WhatsApp/Discord/Email/ntfy) ✅ running
hermes-dashboard Dashboard uptime/ping monitor ✅ running
hermes-groq-warp Groq API reverse proxy via WARP (bypasses ASN 1010 ban) ✅ running
syncthing P2P file sync (Obsidian vault → mobile/desktop) ✅ running
vault-watcher Auto-rebuilds vault web viewer on file change (30s poll) ✅ running

1.2 Hermes Agent

Component Value
Version v0.16.0 (2026.6.5) — up to date
Python 3.11.15
OpenAI SDK 2.24.0
Project dir ~/.hermes/hermes-agent/
Config ~/.hermes/config.yaml
Memory ~/.hermes/memories/MEMORY.md (5,567 bytes) + USER.md (2,520 bytes)
State DB ~/.hermes/state.db (sessions, messages)

1.3 LLM Configuration

Setting Value
Primary model glm-5.2 via custom provider (z.ai)
Context length 1,000,000 tokens
Fallback chain glm-5.1 → 5-turbo → 4.7 → 4.5-air → Gemini → Cerebras → Groq
Provider: groq Local WARP proxy at localhost:8788
Voice/STT Groq Whisper (via WARP)
Voice/TTS Gemini (default — may fail WhatsApp voice delivery)

1.4 Plugins (6 enabled)

Plugin Status Issue
hermes-audit ✅ files exist #audit channel is EMPTY — plugin may not be posting
obsidian-capture ✅ files exist Inbox.md doesn't exist yet (will be created on first use)
disk-cleanup ⚠️ enabled in config No files found — built-in plugin or misconfigured
observability/langfuse ⚠️ enabled in config No files found — empty plugin dir
security-guidance ⚠️ enabled in config No files found — built-in or misconfigured
web/tavily ⚠️ enabled in config No files found — built-in or misconfigured

1.5 MCP Servers (6 configured)

Server Transport Purpose
clickup Shell wrapper (.sh → .py) ClickUp tasks via REST API
composio Remote HTTPS Multi-app OAuth integrations
context7 CLI binary Library docs context
docintel Shell wrapper Google Doc intelligence
google_suite Shell wrapper (.sh → Python) Calendar, Contacts, Drive, Sheets, Slides, Tasks
local_services Shell wrapper System info queries

1.6 Skills Library (84 skills, 15 categories)

Category Count Highlights
creative 15 architecture-diagram, excalidraw, comfyui, p5js
productivity 13 google-calendar, notion, airtable, obsidian
software-development 12 api-integration, test-driven-dev, systematic-debugging
mlops 7 llama-cpp, vllm, huggingface, weights-and-biases
autonomous-ai-agents 7 claude-code, codex, opencode, custom-mcp-servers
research 6 arxiv, blogwatcher, llm-wiki, web-retrieval
github 6 code-review, PR workflow, issues, repo management
devops 5 cloudflare-pages-deploy, deployment, systemd-ops
media 5 gif-search, youtube-content, video-transcription
data-science 1 jupyter-live-kernel
dogfood 1 hermes-dojo
email 1 himalaya
hermes-dojo 1 continuous self-improvement
note-taking 1 obsidian
smart-home 1 openhue
social-media 1 xurl
yuanbao 1 yuanbao

1.7 Custom Scripts (15 in ~/.hermes/scripts/)

creator_notify.py, dashboard_monitor.py, ensure-jid-watchdog.py, ensure-reasoning-strip-patch.py, fallback-watchdog.py, generate_obsidian.py, prayer-reminder.sh, reference_auditor.py, refresh_dashboard.py, seggy_monitor.py, session_logger.py, yas_ahmed_batch_tt.py, yas_ahmed_batch_yt.py, yas_ahmed_monitor.py, yas_ahmed_summarize.py

1.8 Custom MCP Scripts (37 in ~/.hermes/custom-mcp/)

Core services: morning_brief.py, health_check.py, news_feed.py, obsidian_daily_note.py, prayer_reminder.py, prayer.py, weather.py, maps.py, news.py, docintel.py, local_services.py, clickup.py

Google Suite: google_calendar.py, google_contacts.py, google_drive.py, google_sheets.py, google_slides.py, google_suite.py, google_tasks.py + .sh wrappers for each

1.9 Environment Variables (51 keys)

All API keys, channel IDs, and service configs stored in ~/.hermes/.env. Discord channel IDs verified — all 9 target channels return HTTP 200.

1.10 External Services

Service Used For
z.ai API Primary LLM (glm-5.2)
Groq Cloud Fallback LLM + STT (via WARP proxy)
Google Cloud (APIs) Calendar, Contacts, Drive, Sheets, Slides, Tasks, Maps
ClickUp Task management (IBEX workspace)
Composio Multi-app OAuth bridge
Cloudflare Pages Dashboard + Vault web viewer + book sites
Discord Bot 11 channels in server
WhatsApp (Baileys bridge) Primary messaging (:3000)
IMAP/SMTP (Gmail) Email adapter
ntfy.sh Push notifications
healthchecks.io Uptime heartbeat
Syncthing (relay) P2P vault sync to mobile

Part 2: Channel Analysis — Current State

2.1 WhatsApp

Role: Primary interactive channel. Direct 1:1 with Omair.

Currently receives:

Source Frequency Type Should it be here?
Morning Brief Daily 11AM Weather, calendar, prayer, news, inbox ✅ Yes — personal daily start
Prayer Reminders 15 min before Salah notification ✅ Yes — time-sensitive, personal
TRG Watch 9AM + 6PM SDNY court dockets ✅ Yes — active intel, needs attention
Fallback Alert On event Model fallback notice ⚠️ Maybe — operational detail
SeggySaid alerts On new video Transcription + summary ⚠️ Maybe — content notification
Yasar Ahmad alerts On new video Transcription + summary ⚠️ Maybe — content notification
Dojo Summary Daily 6AM Brief self-improvement summary ✅ Yes — daily digest
Time-based reminders One-shot Custom reminders ✅ Yes — personal

Volume: ~15-25 messages/day. Some noise from fallback alerts and content monitors.

2.2 Discord (11 channels)

Channel ID Purpose Status Issues
#general ...391 Home/chat ❌ UNDERUSED Only gateway shutdown notices. No real conversations.
#status ...510 Health checks ✅ WORKING Embeds every 10min. Good.
#alerts ...608 Failures/warnings ✅ WORKING Watchdog posts on break/recover.
#briefings ...612 Morning brief copy ⚠️ ROUTER ONLY Has 1 msg ("your brief will land here") — briefs not actually posting.
#trg-watch ...204 TRG reports ❌ STALE Last msg Jun 14. May be broken.
#seggy-said ...882 Seggy content ❌ LOW 1 message despite monitor running.
#yasar-ahmad ...112 Yasar content ❌ EMPTY 0 messages despite monitor running.
#news ...814 News feed ⚠️ LIGHT 1 embed. Working but sparse.
#audit ...208 Tool call audit ❌ EMPTY Plugin enabled but zero posts.
#session-logs ...368 Session summaries ✅ NEW 1 embed, just set up.
#dojo ...784 Dojo reports ✅ NEW Created today, first post tomorrow.

Verdict: 3 channels working (#status, #alerts, #dojo), 2 new and untested (#session-logs, #dojo), 6 channels broken or empty.

2.3 Obsidian Vault (765 notes)

Folder Count Status Issues
Books/ 723 ✅ WORKING 95% of vault content. Ebook essays.
Session-Logs/ 25 ✅ WORKING Good coverage Jun 11-24.
Daily/ 2 ✅ WORKING Jun 24-25. Just started.
Dojo/ 2 ✅ NEW Backfilled + README.
Projects/ 5 ⚠️ LIGHT Static docs, no tracking.
Hermes/ 2 ✅ CORE Reference + Overview.
System/ 3 ⚠️ LIGHT Hermes Infra + Vault docs.
Resources/ 1 ❌ VERY LIGHT Only Naveen.
Templates/ 1 ⚠️ LIGHT Daily Note template.
(root) 1 README.md

Web viewer: vault.omair.pages.dev — auto-rebuilds via vault-watcher. Mermaid support added.

Syncthing: Active, sharing vault folder to Omair Samsung A55. 2 devices connected (but API not reachable without auth setup).

Verdict: Session logs and daily notes are solid. Everything else is sparse. Inbox.md is missing (obsidian-capture plugin needs it).


Part 3: Issues Found

3.1 Critical (will cause failures)

# Issue Impact Fix
C1 Langfuse plugin enabled but has zero files Error on load or silent noop Either install Langfuse plugin files or remove from enabled list
C2 disk-cleanup, security-guidance, web/tavily enabled but no files Same — may cause startup warnings Same — install or remove
C3 #briefings not receiving morning briefs Briefing script has Discord code but may not be called Check morning_brief.py flow — it has send_discord() but may not be invoked in default mode
C4 #trg-watch stale since Jun 14 TRG Watch may be posting to WA only, Discord code broken Check TRG skill's Discord posting logic
C5 #seggy-said and #yasar-ahmad nearly empty Monitors may not be posting to Discord Check seggy_monitor.py and yas_ahmed_monitor.py Discord routing
C6 #audit completely empty Audit plugin may be failing silently Debug hermes-audit plugin — check if it has channel posting code

3.2 Warnings (working but suboptimal)

# Issue Impact Fix
W1 #general is wasted Gateway shutdown noise in a channel that could be the main chat hub Consider making it the default interactive channel (require_mention already set)
W2 Fallback alert sends to WA but not #alerts Operational alerts fragmented across channels Add Discord #alerts posting to fallback-watchdog.py
W3 SeggySaid + Yasar go to BOTH WhatsApp AND Discord Duplication — user reads the same alert twice Choose primary channel: Discord for content, WhatsApp for summary only
W4 TRG Watch goes to BOTH WhatsApp AND Discord Same duplication Same as above
W5 Health check runs from crontab (every 10min) + dashboard_monitor from Hermes cron (every 5min) Overlapping health checks Consolidate to one
W6 hermes-watchdog.py (crontab) + fallback-watchdog.py (Hermes cron) Partially overlapping alert systems Merge or clarify boundaries
W7 Syncthing API key not set Can't monitor sync status programmatically Set API key in config.xml
W8 Voice TTS default is Gemini → may fail WhatsApp voice User gets no voice response Switch default TTS to edge/openai
W9 Memory files at ~/.hermes/memories/ (not standard profile path) Works but non-standard Leave as-is (functional)
W10 9 one-shot cron jobs (Muharram, Amazon) that will pile up Cluttered cron list after completion They should auto-clean after firing

3.3 Improvements (nice to have)

# Opportunity Benefit
I1 Move content monitors (Seggy, Yasar) to Discord-only, send WA summary Less WhatsApp noise
I2 Move TRG Watch to Discord-only, WA summary only Less WhatsApp noise
I3 Create Resources/Contacts/ folder with all family/friends Obsidian becomes useful contact reference
I4 Add system health daily summary to vault Historical uptime tracking
I5 Add backup verification log to vault Know if backups are actually succeeding
I6 Consolidate watchdog systems into one coherent stack Less complexity, clearer responsibilities
I7 Repurpose #general as interactive chat channel Discord becomes usable for Hermes interaction
I8 Create #reminders channel for time-based one-shots Keeps them out of WA clutter

The Three-Pillar Model

WhatsApp = Personal & Time-Sensitive - Things Omair needs to act on NOW - Brief, actionable, no fluff - Maximum 10 messages/day

Discord = Archive & Detail - Everything that's useful to reference later - Full reports, logs, content, monitoring data - Searchable, organized by topic - The "second brain" for Hermes output

Obsidian = Knowledge & History - Long-lived reference material - Session logs, daily notes, system docs - Cross-linked knowledge graph - Human-readable, browsable, syncable

Proposed Routing Matrix

Source WhatsApp Discord Obsidian Notes
Morning Brief ✅ Full (personal) #briefings Daily/ Keep WA copy — it's the daily start
Prayer Reminders ✅ Yes Time-sensitive, personal only
TRG Watch 📋 Summary only #trg-watch (full) Move full report to Discord, 1-line to WA
SeggySaid 📋 Summary only #seggy-said (full) Books/ (via pipeline) WA gets "1 new from Seggy Said — link"
Yasar Ahmad 📋 Summary only #yasar-ahmad (full) Books/ (via pipeline) Same pattern
Fallback Alert ❌ Move to Discord #alerts Operational detail, not personal
Health Failures ❌ Move to Discord #alerts Operational detail
Dojo Report ✅ Summary (daily) #dojo (full) Dojo/ Keep WA summary — quick glance
Session Logs #session-logs Session-Logs/ Already correct
News Feed #news Reference material, not action
Audit Trail #audit Debug/archive only
Watchdog #alerts + #status Operational only
Obsidian Capture ❌ (creates vault entry) Inbox/ Plugin creates vault entry
Reminders ✅ Yes #reminders (new?) Keep WA — time-sensitive
Daily Notes Daily/ Already correct

Expected WhatsApp Volume After Changes

Before: ~15-25 messages/day After: ~8-12 messages/day - Morning Brief: 1 - Prayer Reminders: 5 - TRG Watch summary: 2 (1-line each) - Seggy/Yasar summaries: ~2 (1-line each) - Dojo summary: 1 - Custom reminders: 1-3


Part 5: Priority Actions

Do First (fix broken things)

  1. Fix empty Discord channels — debug why #briefings, #seggy-said, #yasar-ahmad aren't receiving posts despite env vars being correct
  2. Fix #audit — debug hermes-audit plugin or remove if broken
  3. Clean up ghost plugins — remove langfuse, disk-cleanup, security-guidance, web/tavily from enabled list if they have no files (or install them)
  4. Create Inbox.md — create empty file so obsidian-capture doesn't fail on first use

Do Second (routing optimization)

  1. Move fallback alerts to Discord #alerts — remove WA delivery from fallback-watchdog.py
  2. Move Seggy/Yasar/TRG to Discord-primary — WA gets 1-line summary, Discord gets full report
  3. Consolidate watchdog systems — merge hermes-watchdog + fallback-watchdog + health_check into one coherent stack

Do Third (enrich vault)

  1. Create Resources/Contacts/ — move family, contacts info there
  2. Add daily system health to vault — auto-generated uptime/backup summary
  3. Repurpose #general — make it the default Discord chat channel for Hermes

Audit conducted: 2026-06-25 01:30 PKT Hermes Agent v0.16.0 | System uptime: stable