II.
Page JSON
Structured · livepage:docs-hermes-research
Hermes Agent Deep Research json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "page:docs-hermes-research",
"_kind": "Page",
"_file": "wiki/docs/hermes-research.md",
"_cluster": "wiki",
"attributes": {
"nodeKind": "Page",
"sourcePath": "docs/hermes-research/README.md",
"sourceKind": "repo-docs",
"title": "Hermes Agent Deep Research",
"displayName": "Hermes Agent Deep Research",
"slug": "docs/hermes-research",
"articlePath": "wiki/docs/hermes-research/README.md",
"article": "\n# Hermes Agent Deep Research\n\n## Executive Summary\n\nHermes Agent is a Python-based (83.6% Python, 12.6% TypeScript) MIT-licensed autonomous AI agent by Nous Research. Its architecture centers on a monolithic `AIAgent` class (~4,400 lines in `run_agent.py`) that powers all surfaces: CLI, messaging gateway (20+ platforms), ACP (IDE integration), batch, and API server. It supports 30+ LLM providers, 70+ tools across 28 toolsets, pluggable memory providers, a self-evolution companion system (DSPy + GEPA), and a community Skills Hub at agentskills.io.\n\nOur stack differs fundamentally in philosophy: we are a multi-harness orchestration platform that wraps multiple agent products (Claude Code, Codex, Gemini CLI, Hermes, and others) through a unified adapter architecture. Hermes is one agent we integrate via `adapter-hermes`. The key architectural tension is between Hermes' breadth-of-platform-reach (20+ messaging adapters, 30+ providers, 70+ tools) and our depth-of-orchestration (durable runs, journals, effects, breakpoints, multi-harness coordination).\n\n## Architecture Comparison\n\n| Aspect | Hermes | Our Stack |\n|--------|--------|-----------|\n| **Core loop** | Single `AIAgent` class, synchronous | Upstream harness owns loop; we wrap via adapter bridge |\n| **Language** | Python 83.6% | TypeScript 100% |\n| **Provider count** | 30+ with fallback chains | Provider-agnostic; delegates to harness |\n| **Tool count** | 70+ across 28 toolsets | Focused agentic tools + harness-native tools |\n| **Platform adapters** | 20+ messaging platforms | Multi-harness adapters (10+ agent products) |\n| **Plugin scope** | Hermes-internal only | Cross-harness portable plugins |\n| **Memory** | Pluggable providers with 12 lifecycle hooks | crossRunState + atlas graph |\n| **Session storage** | SQLite with FTS5 | Event-sourced journals |\n| **Orchestration** | Subagent delegation + cron | Durable runs, effects, breakpoints, multi-agent |\n| **Governance** | Approval callbacks + allowlists | Structured engine with decision trails |\n| **IDE integration** | ACP (JSON-RPC stdio) | Hooks-adapter architecture |\n| **Self-improvement** | DSPy + GEPA evolutionary search | Manual + LLM-assisted via skills |\n| **License** | MIT | Proprietary |\n\n## Key Differentiators\n\n### Hermes strengths we lack\n\n1. **Messaging platform breadth:** 20+ platform adapters (Telegram, Discord, Slack, WhatsApp, Signal, Matrix, Email, SMS, etc.) in a single gateway process. Our gateway exists but does not yet match this breadth.\n\n2. **Provider ecosystem depth:** 30+ provider integrations with automatic fallback chains, OAuth flows, auxiliary model routing for side tasks, and credential scoping per base URL.\n\n3. **Memory provider architecture:** Pluggable memory backends with 12 lifecycle hooks including `on_pre_compress` (save insights before context compression discards turns) and `queue_prefetch` (pre-warm for next turn). Our memory extraction is less granular.\n\n4. **Terminal backend diversity:** 6 execution backends (local, Docker, SSH, Daytona, Modal, Singularity) as first-class options switchable via configuration.\n\n5. **Self-evolution:** Companion repo using DSPy + GEPA for evolutionary optimization of skills, prompts, and tool descriptions through reflective search. Cost: $2-10 per optimization run. No GPU training required.\n\n6. **Voice mode:** Real-time voice interaction via CLI, Telegram, and Discord with TTS and transcription support.\n\n7. **Interruptible API calls:** Background-thread API requests with interrupt event monitoring. Main thread can abandon in-flight calls without partial response injection.\n\n### Our strengths Hermes lacks\n\n1. **Multi-harness orchestration:** We drive 10+ agent products through a unified adapter architecture. Hermes is a single agent product.\n\n2. **Durable orchestration:** Run journals, effects, breakpoints, completion proof, state replay, and cross-run state propagation. Hermes has no equivalent.\n\n3. **Structured governance:** Policy engine with categories, decision trails, permission propagation, and posture-based safety profiles. Hermes has simple approval callbacks.\n\n4. **Cross-harness portable plugins:** Our extension system compiles plugins for multiple agent products. Hermes plugins work only within Hermes.\n\n5. **Atlas knowledge graph:** Structured organizational knowledge with graph semantics, layer mapping, and cross-product comparison. Hermes uses flat-file memory.\n\n6. **Process definitions:** Declarative task definitions with phases, subtasks, effects, and breakpoints enabling reproducible multi-step workflows.\n\n7. **Daemon architecture:** Durable queue, automation executor, timer scheduler, and webhook listener for background orchestration.\n\n## Integration Strategy\n\n### Current state\n\nThe Hermes hooks adapter at `packages/adapters/hooks/adapter-hermes/` provides basic hook normalization:\n- Maps Hermes `onEvent` stdin payloads to unified hook events\n- Extracts session ID from `HERMES_SESSION` env var\n- Non-blocking, post-direction only (cannot block or deny tool calls)\n- Shell-hook family adapter\n\n### Planned integration path\n\n1. **Transport upgrade:** Extend adapter-hermes to leverage Hermes' TUI Gateway JSON-RPC protocol or API server for richer bidirectional control (session management, model switching, approval handling) beyond the current shell-hook approach.\n\n2. **Gateway bridge:** Connect Hermes' 20+ messaging platform adapters as delivery channels for babysitter-orchestrated run results. A babysitter process could route notifications, approvals, and results to Telegram/Discord/Slack via Hermes gateway.\n\n3. **Memory synchronization:** Build a babysitter plugin that synchronizes crossRunState with Hermes' MEMORY.md/USER.md, leveraging the memory provider lifecycle hooks for bidirectional knowledge sharing.\n\n4. **Provider catalog exposure:** Surface Hermes' 30+ provider catalog through our adapters proxy, enabling babysitter runs to access providers not directly supported by the primary harness.\n\n## Feature Parity Matrix\n\n| Feature | Hermes | Our Stack | Parity |\n|---------|--------|-----------|--------|\n| Agent loop | AIAgent class | Upstream harness | Different approach |\n| Multi-provider | 30+ providers | Via harness | Hermes ahead |\n| Provider fallback | Ordered chains | Not applicable | Hermes unique |\n| Tool system | 70+ tools, auto-discovery | Focused agentic tools | Hermes broader |\n| Terminal backends | 6 (local/Docker/SSH/Daytona/Modal/Singularity) | Local + Docker | Hermes ahead |\n| Messaging gateway | 20+ platforms | Gateway with fewer | Hermes ahead |\n| Plugin system | Internal plugins | Cross-harness plugins | We are ahead |\n| Memory | Pluggable providers, 12 hooks | crossRunState, atlas graph | Different strengths |\n| Session persistence | SQLite + FTS5 | Event-sourced journals | Different approach |\n| Context compression | 50%/85% thresholds | Compaction via harness | Hermes more granular |\n| Prompt caching | Anthropic cache breakpoints | Via harness | Similar |\n| Subagent delegation | delegate_task tool | Multi-harness orchestration | We are ahead |\n| Cron scheduling | Native SQLite scheduler | Daemon timer scheduler | Similar |\n| Slash commands | CLI + gateway commands | Interaction primitives | Similar |\n| Voice mode | TTS + transcription | Not supported | Hermes unique |\n| IDE integration | ACP (VS Code, Zed, JetBrains) | Via harness native | Different approach |\n| Self-evolution | DSPy + GEPA | Not supported | Hermes unique |\n| Governance | Approval callbacks | Structured engine | We are ahead |\n| Durable orchestration | None | Journals, effects, breakpoints | We are ahead |\n| Cross-run state | None | crossRunState | We are ahead |\n| Multi-agent coordination | Subagent only | Multi-harness orchestration | We are ahead |\n| Knowledge graph | None | Atlas graph | We are ahead |\n\n## File Index\n\n| File | Description |\n|------|-------------|\n| `docs/hermes-research/raw/` | 13 raw documentation files fetched from Hermes docs and GitHub |\n| `docs/hermes-research/layer-analysis.md` | Layer-by-layer analysis mapping Hermes to atlas stack |\n| `docs/hermes-research/integration-plan.md` | Adapter implementation, hook wiring, and test strategy |\n| `docs/hermes-research/README.md` | This synthesis document |\n| `packages/atlas/graph/agent-stack/hermes/` | Atlas graph YAML nodes for Hermes subsystems |\n| `packages/adapters/hooks/adapter-hermes/` | Existing Hermes hooks adapter (current integration point) |\n",
"documents": []
},
"outgoingEdges": [
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-integration-plan",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-layer-analysis",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-acp-internals",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-agent-loop",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-agents-md",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-architecture",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-docs-index",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-fetch-notes",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-gateway-internals",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-github-readme",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-memory-provider-plugin",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-programmatic-integration",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-provider-runtime",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-providers",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-quickstart",
"kind": "contains_page"
},
{
"from": "page:docs-hermes-research",
"to": "page:docs-hermes-research-raw-self-evolution",
"kind": "contains_page"
}
],
"incomingEdges": [
{
"from": "page:docs",
"to": "page:docs-hermes-research",
"kind": "contains_page"
}
]
}