Hermes Agent Infrastructure Audit Report
Hermes Agent Infrastructure Audit Report
Date: July 24, 2026
Auditor: Default profile (orchestrator) with researcher profile support
Scope: Full system evaluation of Hermes Agent multi-profile setup, skills, workflows, and deployment infrastructure
Table of Contents
Key Metrics at a Glance
┌─────────────────────────────────────────────────────────────────────┐
│ HERMES AGENT — AT A GLANCE │
├──────────────────────┬──────┬───────────────────────────────────────┤
│ Profiles │ 10 │ 8 functional, 2 blocked (no config) │
│ Skills (main) │ 119 │ Across 34 top-level directories │
│ Skills (thinker) │ 278 │ ⚠️ 68% over expected s4h-only count │
│ Sessions │ 181 │ 121 MB DB — auto-prune OFF │
│ Projects │ 28 │ 3 with context files, 25 without │
│ Cron Jobs Active │ 0 │ All scheduled workflows removed │
│ Fallback Providers │ 0 │ Single point of failure │
│ Memory (MEMORY.md) │ 97% │ 2,152 / 2,200 chars — near capacity │
│ Memory (USER.md) │ 84% │ 1,160 / 1,375 chars — filling up │
│ Model │ 1 │ glm-5.2 via ollama-cloud (all profs) │
└──────────────────────┴──────┴───────────────────────────────────────┘Health Scorecard
| Area | Status | Detail |
|---|---|---|
| Profile availability | 🟡 8 of 10 | devops & frontend-coder lack config.yaml |
| Skill integrity | 🔴 Degraded | 40+ broken s4h symlinks across 3 profiles |
| Deployment pipeline | 🟡 Manual | No CI/CD, no tests, no health checks |
| Memory headroom | 🔴 Critical | 97% full — no room for new facts |
| Session management | 🟡 Growing | Auto-prune disabled, 121 MB and climbing |
| Workflow tracking | 🔴 None | No artifact handoff tracking or quality gate |
| Project context | 🔴 Sparse | 89% of projects lack context files |
Current Architecture Diagram
┌─────────────────────────┐
│ Ollama Cloud (GLM- │
│ 5.2 / single │
│ provider) │
└────────────┬─────────────┘
│
│ All profiles share
│ one model endpoint
│
┌──────────────────────────┴───────────────────────────┐
│ │
┌────────┴────────┐ ┌──────────────┴──────┐
│ Linux Host │ │ Hermes Agent │
│ (richard-lenovo)│ │ Gateway (Docker) │
│ │ │ PID 2794494 │
│ • Portainer │ └──────────┬──────────┘
│ • Traefik │ │
│ • Pi-hole DNS │ ┌────────────┴────────────┐
│ • traefik-net │ │ │
└──────────────────┘ ┌───────┴────────┐ ┌───────┴────────┐
│ Discord │ │ Slack │
│ Gateway │ │ Gateway │
└───────┬────────┘ └───────┬────────┘
│ │
└──────────┬───────────┘
│
┌────────────┴────────────┐
│ DEFAULT (orchestrator) │
│ 119 skills · MEMORY │
│ dispatches & delegates │
└────────────┬────────────┘
│
┌────────────────┬──────────┬───────────────┼───────────────┬──────────┐
│ │ │ │ │ │
┌─────────┴──────┐ ┌───────┴───────┐ ┌┴──────────────┐ ┌┴──────────────┐ ┌───────┴──────┐
│ researcher │ │ backend-coder │ │ factchecker │ │ writer │ │ teacher │
│ 18 skills │ │ 33 skills │ │ 2 skills │ │ 3 skills │ │ 1 skill │
│ Brave MCP │ │ delegation │ │ Brave MCP │ │ delegation │ │ delegation │
│ writes→research│ │ writes→code │ │ inline only │ │ writes→writing│ │ writes→lessons│
└────────────────┘ └───────────────┘ └────────────────┘ └───────────────┘ └──────────────┘
│ │ │ │
│ │ ┌────────────┘ │
│ │ ┌────────┴────────┐ │
┌─────────┴──────┐ ┌───────┴───────┐ ┌┴──────────────┐ ┌─┴───────────────┐
│ music-teach │ │ thinker │ │ devops │ │ frontend-coder │
│ 5 skills │ │ 278 skills │ │ 10 skills │ │ 18 skills │
│ delegation │ │ MEMORY │ │ ⛔ NO CONFIG │ │ ⛔ NO CONFIG │
│ writes→lessons │ │ ⚠️ bloat │ │ CANNOT RUN │ │ CANNOT RUN │
└────────────────┘ └───────────────┘ └────────────────┘ └─────────────────┘
───────────────────────────────────────────────────────────────────────────────────────────
WORKSPACE HANDOFF (~/projects/workspace/)
───────────────────────────────────────────────────────────────────────────────────────────
AGENTS.md ──→ research/ ──→ writing/ ──→ lessons/ ──→ code/
conventions researcher writer music-teach backend-coder
writes here reads→writes writes here writes here
───────────────────────────────────────────────────────────────────────────────────────────
DEPLOYMENT (Portainer + Traefik)
───────────────────────────────────────────────────────────────────────────────────────────
code/ ──→ manual Docker build ──→ traefik-public network ──→ {name}.dev.richardkeller.net
⚠️ No CI/CD · No tests · No health checks · No rollbackLegend: ⛔ = blocked · ⚠️ = warning · MEMORY = has memory files · delegation = can spawn subagents
1. Executive Summary
10 profiles. 119 skills. 181 sessions. One model. Zero fallbacks.
The Hermes Agent installation runs 10 specialized profiles on a single Ollama Cloud GLM-5.2 instance, coordinated through Discord and Slack gateways on a Linux host. It has grown organically into a sophisticated multi-profile collaboration system — 28 projects, 119 skills, a shared workspace with handoff conventions, and a Portainer/Traefik deployment stack.
Verdict: Functional but fragile.
The core orchestration works. Profiles dispatch, research flows through the workspace, and deployments reach the reverse proxy. But the system has accumulated structural debt:
| Problem | Impact |
|---|---|
| 2 profiles cannot start (devops, frontend-coder) | No config.yaml → no model, no provider, no dispatch |
| 3 profiles have broken symlinks (writer, teacher, music-teach) | s4h skills point to archived paths — 40+ dead links |
| Thinker loads 278 skills | Context bloat, slow scanning, skill-selection confusion |
| Zero fallback providers | Ollama Cloud outage = total system shutdown |
| Zero cron jobs active | Daily digest and scheduled workflows silently removed |
| Memory at 97% capacity | No room for new learned facts without pruning |
| Session DB: 121 MB, growing | Auto-prune disabled — unbounded growth |
| 25 of 28 projects lack context files | Every profile starts blind in those directories |
The foundations are solid. The workspace AGENTS.md handoff pattern is well-designed. The rbk-skills symlink approach is sound. The Portainer/Traefik deployment target is production-capable. Profile specialization is logical. These need tightening — not rebuilding.
2. Profile Architecture Analysis
Profile Inventory
| Profile | Model | Config | Skills | Memory | Status | Issues |
|---|---|---|---|---|---|---|
| default | glm-5.2 | ✓ | 119 | MEMORY + USER | Running | Memory at 97% capacity |
| backend-coder | glm-5.2 | ✓ | 33 | None | Stopped | Good shape — broad skill set |
| devops | NONE | ✗ | 10 | None | Stopped | Cannot run — no config.yaml |
| factchecker | glm-5.2 | ✓ | 2 | None | Stopped | Minimal but functional |
| frontend-coder | NONE | ✗ | 18 | None | Stopped | Cannot run — no config.yaml |
| music-teach | glm-5.2 | ✓ | 5 | MEMORY | Stopped | Broken s4h symlinks |
| researcher | glm-5.2 | ✓ | 18 | None | Stopped | Good shape — solid skill set |
| teacher | glm-5.2 | ✓ | 1 | None | Stopped | Broken s4h symlinks, only 1 skill |
| thinker | glm-5.2 | ✓ | 278 | MEMORY + USER | Stopped | 278 skills — massive overload |
| writer | glm-5.2 | ✓ | 3 | None | Stopped | Broken s4h symlinks, minimal skills |
Detailed Analysis
default (Orchestrator)
backend-coder
max_spawn_depth=1, orchestrator_enabled=true.devops
hermes -p devops config set to configure model, provider, and toolsets.factchecker
max_spawn_depth=0, orchestrator_enabled=false) — correct for a leaf verification profile.humanizer skill for output formatting.frontend-coder
music-teach
researcher
teacher
thinker
writer
3. Configuration Gaps
Critical Gaps
| Setting | Current | Impact | Fix |
|---|---|---|---|
fallback_providers | [] (empty) | Single point of failure — if Ollama Cloud is down, all profiles stop | Add at least one fallback (e.g., OpenRouter, DeepSeek) |
checkpoints.enabled | false | No filesystem rollback — destructive commands cannot be undone | hermes config set checkpoints.enabled true |
session_reset.mode | none | Sessions never auto-reset; context grows indefinitely | Consider idle mode with a reasonable timeout |
sessions.auto_prune | false | 181 sessions, 121 MB DB, growing forever | hermes config set sessions.auto_prune true |
timezone | empty | Cron jobs and timestamps may use server time, not user's CST | hermes config set timezone America/Chicago |
Moderate Gaps
| Setting | Current | Impact | Fix |
|---|---|---|---|
verify_on_stop | false | Agent may stop without verifying work is complete | hermes config set agent.verify_on_stop true |
smart_model_routing.enabled | false | All tasks use GLM-5.2 regardless of complexity | Evaluate enabling for cost/performance optimization |
kanban.orchestrator_profile | empty | Kanban dispatch configured but no orchestrator assigned | Set to default or create a dedicated orchestrator profile |
kanban.default_assignee | empty | No default worker for kanban tasks | Assign backend-coder or researcher as default |
approvals.mode | manual | Every destructive command needs manual approval — slows workflows | Consider smart mode for auto-approving low-risk commands |
memory.memory_char_limit | 2200 (97% full) | Cannot add new memory entries without removing old ones | Increase limit or prune stale entries |
memory.user_char_limit | 1375 (84% full) | Approaching capacity | Increase limit or consolidate entries |
Tool Configuration
| Setting | Current | Impact | Fix |
|---|---|---|---|
browser toolset | Disabled in default | Cannot use browser automation for web tasks | Enable if browserless container is running |
vision toolset | Disabled | Cannot analyze images | Enable if model supports vision input |
delegation.child_timeout_seconds | 0 (no limit) | Subagents can run indefinitely | Set to 300–600s for reasonable bounds |
delegation.max_concurrent_children | 3 | Good for parallel work | No change needed |
4. Skills Organization
Current State
Main profile: 119 skills across 34 top-level directories
rbk-skills symlink → ~/projects/skills/.bundled_manifestThinker profile: 278 skills — ALL built-in + 200+ s4h
~/projects/_ARCHIVE/, breaking symlinks in other profilesBroken Symlinks
The s4h skill set was originally at ~/projects/skills/s4h/ and symlinked into multiple profiles. The source was moved to ~/projects/_ARCHIVE/us-presidents/skills-for-humanity/skills/s4h/, breaking all symlinks:
| Profile | Broken s4h Symlinks | Impact |
|---|---|---|
| writer | 22+ writing/craft skills | Writer cannot access cognitive writing tools |
| teacher | 8+ cognition/communication skills | Teacher cannot access teaching framework skills |
| music-teach | 10+ communication/cognition skills | Music teacher lacks analytical tools |
Fix: Either restore s4h to ~/projects/skills/s4h/ or update symlinks to point to the archive location. Thinker has working copies — could copy from there.
Skill Duplication Analysis
| Skill | Main | backend-coder | researcher | frontend-coder | devops |
|---|---|---|---|---|---|
| github-auth | ✓ (category) | ✓ | ✓ | — | — |
| docker-static-site | ✓ (category) | ✓ | — | — | ✓ |
| mcp-server-setup | ✓ (rbk) | ✓ | — | — | ✓ |
| systematic-debugging | ✓ (category) | ✓ | — | — | — |
| humanizer | ✓ (category) | — | ✓ | — | — |
| codebase-inspection | ✓ (category) | ✓ | ✓ | — | — |
Duplication is expected — profiles have independent skill directories. The real issue is maintenance: when a skill is updated in one location, copies in other profile directories don't automatically update. The rbk-skills symlink pattern in main solves this for custom skills, but profile-level skills are isolated copies.
Skills Recommendations
~/projects/skills/s4h/ OR update all profile symlinks to point to the archive path.5. Workflow Analysis
Current Workflow Architecture
The workspace at ~/projects/workspace/ serves as the inter-profile handoff point, governed by AGENTS.md:
~/projects/workspace/
├── research/ → Researcher writes artifacts here
├── writing/ → Writer reads research, writes drafts here
├── lessons/ → Music-teach writes lessons here
├── code/ → Backend-coder writes code here
├── thinker/ → Thinker outputs
└── AGENTS.md → Handoff conventionsHandoff Patterns
| From | To | Mechanism | Artifact |
|---|---|---|---|
| Researcher | Writer | File-based | research/{topic}/research-{timestamp}.md with TOC, exec summary, citations, Writer Brief |
| Writer | Factchecker | Inline delegation | delegate_task → verdict + source + evidence |
| Teacher | Writer | File-based | lessons/{topic}/outline-{timestamp}.md → writer polishes into prose |
| Any profile | Researcher | Inline delegation | delegate_task for deep research needs |
Workflow Gaps
AGENTS.md defines where files go, but not quality standards. Research artifacts vary in structure and completeness.code/ but there's no defined handoff to devops for deployment. No test results, no build artifacts, no deployment manifests.Ideal Workflow
Idea → Researcher (research/) → Writer (spec doc) → Backend-coder (code/)
→ Test → DevOps (deploy) → Verify → DocumentEach step should:
6. Research Pipeline
Current Flow
User request
→ Default dispatches researcher
→ Researcher uses Brave Search MCP + web tools
→ Writes artifact to workspace/research/{topic}/
→ Default reviews
→ Writer drafts
→ Factchecker verifies (inline delegation)
→ Writer revises
→ Final outputStrengths
Weaknesses
Research Pipeline Recommendations
session_search before starting new research to find prior work.humanizer, multi-source-research-reports, printable-research-guides to give factchecker more verification tools.7. Build/Deploy Pipeline
Current State
Backend-coder → writes code to ~/projects/{project-name}/ or workspace/code/
→ Manual Docker build → Manual Traefik labels → Manual deployInfrastructure
traefik-public (external)*.dev.richardkeller.net via Pi-hole local DNSportainer-traefik-deployment skill documents the full patternCritical Gap: DevOps Profile Cannot Run
The devops profile has 10 relevant skills but no config.yaml. This means:
portainer-traefik-deployment) is in devops's skill directory but the profile can't startFix:
hermes -p devops config set model.default glm-5.2
hermes -p devops config set model.provider ollama-cloud
hermes -p devops config set model.base_url https://ollama.com/v1
hermes -p devops config set platform_toolsets.cli '["web","terminal","file","code_execution","skills","todo","memory","session_search","clarify","delegation"]'
hermes -p devops config set platform_toolsets.discord '["web","terminal","file","code_execution","skills","todo","memory","session_search","clarify","delegation"]'Build/Deploy Workflow Gaps
*.dev.richardkeller.net — no staging vs. production.Ideal Build/Deploy Flow
Backend-coder writes code → Commits to Git → GitHub Actions runs tests
→ If pass: DevOps builds Docker image → Deploys to Traefik
→ Health check verifies → Marks deployment successful
→ If fail: Rollback to previous imageBuild/Deploy Recommendations
/health endpointstaging.dev.richardkeller.net for pre-prod validation8. Project Organization
Current State
28 projects in ~/projects/:
| Category | Projects | Has AGENTS.md? |
|---|---|---|
| Active dev | daily-digest, notion-sync, clarify-web, bob-cli, browserless-custom | 1 (daily-digest/CLAUDE.md) |
| Research | research-site, poetry-search, github-project-analyzer, profile-evaluator | No |
| Infrastructure | server-work, pihole, code-server, my-media-server | 1 (server-work/CLAUDE.md) |
| Dev team | dev-team (backend-coder + frontend-coder skill copies) | No |
| Music | music-learning-resources, tabs | No |
| Archive | _ARCHIVE, bluetooth-speaker | No |
| Workspace | workspace (multi-profile collaboration) | ✓ (AGENTS.md) |
| Other | art-adapter, docs, plans, skills, temp, youtube-service, external, tiddl-test | No |
Issues
.hermes.md, or CLAUDE.md. When a profile works in these directories, it has no project-specific instructions — leading to inconsistent styles, missed conventions, and repeated explanations.3a77de77-f3ca-801c-9b37-ed8274b0492b) but may not be kept current.~/projects/dev-team/backend-coder/skills/ and ~/projects/dev-team/frontend-coder/skills/ contain duplicate skill copies — separate from the profile skill directories and likely to diverge._ARCHIVE directory exists but is managed manually.~/projects/external/ contains cloned repos (chatto, superpowers, awesome-copilot) alongside original work.Project Organization Recommendations
~/projects/PROJECTS.md) listing all projects with status (active/maintenance/archived), purpose, and tech stack.~/projects/external/ to ~/external/ or ~/repos/ to keep projects clean._ARCHIVE/.9. Memory & Session Hygiene
Memory Status
MEMORY.md (main profile): 97% full (2,152/2,200 chars)
Current entries:
USER.md (main profile): 84% full (1,160/1,375 chars)
Current entries:
Assessment: Memory is well-curated and high-signal. The problem is capacity — at 97%, there's no room for new facts. Several entries could be consolidated:
Recommendation: Increase memory_char_limit to 3,000 and user_char_limit to 1,500. Prune the profile inventory (correct it) and move daily-digest details to a skill.
Session Hygiene
Recommendation: Enable auto-prune with 90-day retention and periodic vacuum:
hermes config set sessions.auto_prune true
hermes config set sessions.retention_days 90
hermes config set sessions.vacuum_after_prune true10. Recommendations
Quick Wins — Do Today
> These are low-risk, high-impact changes that can be executed in a single session.
| # | Action | Command / Steps | Impact |
|---|---|---|---|
| 1 | Fix devops config | hermes -p devops config set model.default glm-5.2 + provider + toolsets | Unblocks deployment workflow |
| 2 | Fix frontend-coder config | Same pattern as devops | Unblocks frontend development |
| 3 | Set timezone | hermes config set timezone America/Chicago | Correct timestamps for cron/logs |
| 4 | Enable session auto-prune | hermes config set sessions.auto_prune true | Stops unbounded DB growth |
| 5 | Remove broken s4h symlinks | find ~/.hermes/profiles/{writer,teacher,music-teach}/skills -xtype l -delete | Cleans up 40+ dead links |
| 6 | Increase memory limits | hermes config set memory.memory_char_limit 3000 + user_char_limit 1500 | Room for new facts |
| 7 | Enable checkpoints | hermes config set checkpoints.enabled true | Filesystem rollback safety |
Short Term — This Week
| # | Action | Steps | Impact |
|---|---|---|---|
| 8 | Add fallback provider | Set up OpenRouter or DeepSeek as fallback | Resilience against Ollama Cloud outages |
| 9 | Restore s4h skills | Move back to ~/projects/skills/s4h/ or update symlinks to archive path | Writer/teacher/music-teach get cognitive tools back |
| 10 | Trim thinker skills | Remove all non-s4h skills from thinker profile | 278 → ~210 skills, faster scanning |
| 11 | Add AGENTS.md to active projects | Create minimal context files for daily-digest, notion-sync, clarify-web, bob-cli, research-site, server-work | Every profile gets instant project context |
| 12 | Set delegation child timeout | hermes config set delegation.child_timeout_seconds 600 | Prevents runaway subagents |
| 13 | Enable verify_on_stop | hermes config set agent.verify_on_stop true | Agent verifies completion before stopping |
| 14 | Expand writer skills | Add excalidraw, popular-web-designs, writing-craft skills | Writer has more tools for diverse content |
| 15 | Expand teacher skills | Add s4h-cognition, s4h-communication (once fixed), obsidian | Teacher has actual teaching frameworks |
| 16 | Fix stale memory entries | Correct profile inventory, move daily-digest to skill | Accurate memory, more capacity |
| 17 | Set up kanban orchestrator | hermes config set kanban.orchestrator_profile default | Enable multi-profile task queue |
Medium Term — This Month
| # | Action | Steps | Impact |
|---|---|---|---|
| 18 | Create project registry | ~/projects/PROJECTS.md with status, tech stack, owner for all 28 projects | Central project visibility |
| 19 | Standardize research artifact format | Create template in workspace AGENTS.md | Consistent research quality |
| 20 | Add researcher memory | Create MEMORY.md for researcher profile | Accumulated research knowledge across sessions |
| 21 | Set up GitHub Actions CI | Lint + test on push for active projects | Catch issues before deployment |
| 22 | Create deployment manifest | Track deployed services, hostnames, image tags, last deploy date | Deployment visibility and audit trail |
| 23 | Consider smart approvals | hermes config set approvals.mode smart | Auto-approve low-risk commands, speed up workflows |
| 24 | Evaluate smart model routing | Test routing simpler tasks to faster/cheaper models | Cost optimization |
| 25 | Create staging environment | staging.dev.richardkeller.net for pre-prod | Test before production deploy |
| 26 | Implement project lifecycle | Define: idea → research → spec → build → test → deploy → maintain | Repeatable project execution |
| 27 | Set up deployment health checks | Every service gets /health endpoint + Traefik healthcheck labels | Automated failure detection |
| 28 | Create shared skills directory | Common skills symlinked into all profiles | Reduce duplication, single source of truth |
| 29 | Separate external repos | Move ~/projects/external/ to ~/repos/ | Clean project directory |
| 30 | Enable browser toolset | Enable in default profile if browserless is running | Web automation capability |
Priority Summary
IMMEDIATE (today) ████████████████████ 7 items — unblock profiles, stop data growth
SHORT TERM (week) █████████████████████ 10 items — resilience, cleanup, expansion
MEDIUM TERM (month) █████████████████████ 13 items — CI/CD, lifecycle, optimizationAppendix A: System Configuration Snapshot
Model: glm-5.2 via ollama-cloud
Host: Linux 6.8.0-134-generic (richard-lenovo)
Gateway: Docker foreground, PID 2794494
Platforms: Discord (home: 1519153032531804260), Slack (home: C0BFN5PN9EZ)
MCP Servers: youtube-transcript, brave-search
Sessions: 181 total, 121.1 MB DB
Skills: 119 installed (main profile)
Profiles: 10 (8 with config, 2 without)
Cron Jobs: 0 active
Memory: MEMORY.md 97% full, USER.md 84% fullAppendix B: Profile Skill Counts
thinker: 278 (ALL built-in + 200+ s4h)
default: 119 (all shared skills)
backend-coder: 33
researcher: 18
frontend-coder: 18
devops: 10
music-teach: 5
writer: 3
factchecker: 2
teacher: 1Appendix C: Deployment Infrastructure
Reverse Proxy: Traefik (via Portainer stack)
Docker Network: traefik-public (external)
DNS: Pi-hole local DNS for *.dev.richardkeller.net
Pattern: Container joins traefik-public, routes by Host header
Hostname Format: {name}.dev.richardkeller.netReport generated July 24, 2026 by Hermes Agent (default profile) with researcher profile assistance.
Report generated July 24, 2026 by Hermes Agent (default profile) with researcher profile assistance.
Deployed to reports.dev.richardkeller.net via Portainer + Traefik stack.