Agentic AI Atlasby a5c.ai
OverviewWikiGraphFor AgentsEdgesSearchWorkspace
/
GitHubDocsDiscord
iiRecord
Agentic AI Atlas · Hermes Integration Plan
page:docs-hermes-research-integration-plana5c.ai
Search record views/
Record · tabs

Available views

II.Record viewspp. 1 - 1
overviewarticlejsongraph
III.Related pagespp. 1 - 1
II.
Page reference

page:docs-hermes-research-integration-plan

Reading · 6 min

Hermes Integration Plan reference

1. Add JSON-RPC client to adapter-hermes

Pagewiki/docs/hermes-research/integration-plan.mdOutgoing · 0Incoming · 1

Hermes Integration Plan

Adapter Implementation Plan

Phase 1: Upgrade adapter-hermes from shell-hook to JSON-RPC (Priority: High)

**Current state:** The adapter at packages/adapters/hooks/adapter-hermes/ operates as a shell-hook family adapter. It receives a single onEvent stdin payload, normalizes it to a unified hook event, and cannot block, deny, or mutate tool calls. This is the minimum viable integration.

**Target state:** Upgrade to leverage Hermes' TUI Gateway JSON-RPC protocol for bidirectional control.

**Implementation steps:**

1. **Add JSON-RPC client to adapter-hermes** - File: packages/adapters/hooks/adapter-hermes/src/rpc-client.ts - Implement a JSON-RPC client that connects to Hermes' TUI Gateway (stdio or WebSocket) - Support methods: session.create, prompt.submit, session.history, approval.respond, clarify.respond - Handle events: message.delta, message.complete, tool.start, tool.progress, tool.complete

2. **Extend adapter capabilities** - File: packages/adapters/hooks/adapter-hermes/src/adapter.ts - Upgrade family from shell-hook to rpc-bridge - Enable supportsBlock: true (via approval.respond) - Enable supportsAsk: true (via clarify.respond) - Keep supportsToolInputMutation: false and supportsToolResultMutation: false (Hermes does not support these)

3. **Add session management** - File: packages/adapters/hooks/adapter-hermes/src/session-manager.ts - Track active Hermes sessions and map them to babysitter run sessions - Support session creation, listing, activation, and cleanup

4. **Update normalizer for bidirectional events** - File: packages/adapters/hooks/adapter-hermes/src/normalizer.ts - Add normalization for all TUI Gateway event types (currently only handles onEvent) - Map Hermes tool.start/tool.progress/tool.complete to unified pre/post tool events

Phase 2: Gateway bridge for messaging delivery (Priority: Medium)

**Goal:** Route babysitter orchestration results to Hermes' 20+ messaging platforms.

**Implementation steps:**

1. **Create gateway bridge module** - File: packages/adapters/gateway/src/hermes-bridge.ts - Connect to Hermes gateway's delivery API - Map babysitter run events (task completion, breakpoint hit, approval needed) to Hermes gateway send_message calls - Support targeting specific platforms (Telegram, Discord, Slack) by chat ID

2. **Add notification routing** - File: packages/adapters/gateway/src/notifications/hermes-relay.ts - Register Hermes gateway as a notification backend in our gateway - Route babysitter notification events to the Hermes gateway process

3. **Authorization mapping** - Map our gateway auth tokens to Hermes gateway authorization - Support DM pairing flow for user onboarding

Phase 3: Memory synchronization (Priority: Low)

**Goal:** Bidirectional memory sync between babysitter crossRunState and Hermes memory files.

**Implementation steps:**

1. **Create memory sync plugin** - File: packages/adapters/extensions/src/targets/hermes/memory-sync.ts - Read Hermes' MEMORY.md and USER.md at babysitter run start - Write babysitter crossRunState insights back to Hermes memory files at run end

2. **Leverage Hermes memory provider hooks** - If Hermes is the execution harness, hook into on_session_end to capture extracted memory - Feed captured memory into babysitter run journal for cross-run state

Phase 4: Provider catalog bridge (Priority: Low)

**Goal:** Expose Hermes' 30+ provider catalog through our adapters proxy.

**Implementation steps:**

1. **Add Hermes provider backend to adapters proxy** - File: packages/adapters/proxy/src/adapters_proxy/providers/hermes.py - Query Hermes' runtime resolver for available providers - Map provider capabilities to our proxy's provider interface - Route inference requests through Hermes when using its unique providers (Nous Portal, NovitaAI, etc.)

---

Hook Wiring Plan

Event mapping (current adapter-hermes)

Hermes Native EventUnified PhaseDirectionNotes
onEvent (tool.start)tool.beforepostCannot block
onEvent (tool.complete)tool.afterpostCannot mutate result
onEvent (session.start)session.startpost
onEvent (session.end)session.endpost
onEvent (agent.step)turn.afterpost

Planned event mapping (with JSON-RPC upgrade)

Hermes RPC EventUnified PhaseDirectionNotes
tool.starttool.beforepre+postCan block via approval
tool.progresstool.duringstreamProgress updates
tool.completetool.afterpostResult available
message.deltaresponse.streamstreamToken-by-token
message.completeresponse.completepostFull response
approval_requestapproval.requestpreBlock and wait
clarify_requestclarify.requestpreBlock and wait

Hook lifecycle integration

Code
babysitter run start
  |
  +-- adapter-hermes creates Hermes session (session.create RPC)
  |
  +-- babysitter submits task prompt (prompt.submit RPC)
  |
  +-- Hermes AIAgent processes turns:
  |     |
  |     +-- tool.start -> unified pre-tool hook -> governance check
  |     |
  |     +-- approval_request -> adapter bridges to babysitter breakpoint
  |     |
  |     +-- tool.complete -> unified post-tool hook -> effect recording
  |     |
  |     +-- message.delta -> streaming renderer
  |     |
  |     +-- message.complete -> babysitter task result capture
  |
  +-- adapter-hermes captures session history
  |
  +-- babysitter records effects and journal entries

---

Test Strategy

Unit tests (adapter-hermes)

Location: packages/adapters/hooks/adapter-hermes/src/__tests__/

Test fileCoverage
adapter.test.tsAdapter capabilities, family assignment, capability flags
normalizer.test.tsEvent normalization, stdin parsing, session ID extraction
mappings.test.tsPhase mapping table completeness
renderer.test.tsOutput rendering for Hermes format
session-resolver.test.tsSession resolution from env vars

**New tests needed for Phase 1:**

Test fileCoverage
rpc-client.test.tsJSON-RPC method calls, event handling, error recovery
session-manager.test.tsSession lifecycle, mapping to babysitter runs
bidirectional-normalizer.test.tsAll TUI Gateway event types

Integration tests

TestDescription
hermes-shell-hook-e2eVerify current shell-hook adapter normalizes real Hermes onEvent payloads
hermes-rpc-session-e2eVerify JSON-RPC session creation and prompt submission (Phase 1)
hermes-gateway-delivery-e2eVerify babysitter notifications route through Hermes gateway (Phase 2)

Live-stack tests

TestDescription
hermes-babysitter-createBabysitter creates a session in Hermes, submits a simple task, captures result
hermes-babysitter-resumeBabysitter resumes a Hermes session across process restarts
hermes-approval-bridgeHermes approval request bridges to babysitter breakpoint and back

Test fixtures

Hermes event fixtures already exist at: packages/adapters/hooks/adapter-hermes/src/__tests__/fixtures/hermes-events.ts

Additional fixtures needed:

  • TUI Gateway JSON-RPC response payloads
  • Gateway message delivery payloads
  • Memory provider hook payloads

CI integration

  • Hermes adapter unit tests run in the existing npm run test:hooks-adapter pipeline
  • Integration tests require Hermes installed as a dependency (pip install hermes-agent)
  • Live-stack tests require a running Hermes instance with a configured provider
  • Gate: all adapter unit tests must pass before integration tests run

---

Risk Assessment

RiskMitigation
Hermes API instability (pre-1.0)Pin to specific version range; adapter capabilities read from atlas catalog
Python/TypeScript bridge complexityJSON-RPC is language-agnostic; stdio transport avoids FFI
Session state divergenceAdapter-hermes is authoritative for session mapping; Hermes sessions are ephemeral from our perspective
Gateway auth mismatchMap our auth tokens to Hermes platform-specific auth; do not store Hermes credentials in our config
Memory format driftSchema-validate MEMORY.md/USER.md content before writing; fail-open on parse errors

Article source

The article body is owned directly by this record.

Related pages

No related wiki pages for this record.

Shortcuts

Open overview
Open JSON
Open graph