Skip to content

feat(hermes): Hermes Agent platform plugin — hookless capture from state.db + SKILL.md recall - #671

Open
arrrrny wants to merge 5 commits into
zilliztech:mainfrom
arrrrny:feat/hermes-platform
Open

feat(hermes): Hermes Agent platform plugin — hookless capture from state.db + SKILL.md recall#671
arrrrny wants to merge 5 commits into
zilliztech:mainfrom
arrrrny:feat/hermes-platform

Conversation

@arrrrny

@arrrrny arrrrny commented Aug 8, 2026

Copy link
Copy Markdown

Summary

Add a Hermes Agent platform integration (like the existing claude-code / openclaw / opencode / codex ones). Hermes (Nous Research) is a terminal/gateway agent framework with persistent sessions stored in a local SQLite DB (~/.hermes/state.db, messages + sessions tables) — architecturally the closest analogue is the OpenCode plugin (SQLite-based capture).

Architecture (proposed)

Capture — Hermes has no plugin hook system for capture, so use a background poller (cron/launchd) that reads ~/.hermes/state.db for new user/assistant turns (same shape as opencode_turns.py -> parse-transcript.py), writes the shared memory/YYYY-MM-DD.md format, and re-indexes into the per-project Milvus collection. This mirrors capture-daemon.py exactly, with the state.db path as the only real difference.

Recall — SKILL.md-based (like claude-code/codex): a memsearch-recall skill exposing the three-layer flow (memsearch search -> expand -> transcript reading Hermes state.db), registered in the project's AGENTS.md. Memory tools are invoked by the agent reading the skill, not via a runtime plugin API.

Shared memory — same .md + collection as the other platforms, so memories captured in Hermes are searchable from Claude Code/OpenCode and vice versa.

Deliverables for the PR

  • plugins/hermes/ — capture script (hermes-capture.py), derive-collection.sh, parse-transcript.py (state.db), skills (memsearch-recall, memory-config), prompts, README, install.sh
  • docs/platforms/hermes/ — index, how-it-works, memory-tools/installation pages + the platform comparison table row
  • [plugins.hermes.*] config support in the shared config handling

I already have a working prototype of the capture + recall skill running locally against a real Hermes state.db (verified: turns land in the daily .md, indexed, searchable). Happy to implement the full PR.

arrrrny added 5 commits August 8, 2026 09:29
….md recall

Hermes (Nous Research) stores sessions in ~/.hermes/state.db, so this plugin
mirrors the OpenCode SQLite-capture model with a cron/launchd poller
(hermes-capture.py -> daily .md -> memsearch index) and the Claude-Code
SKILL.md recall model (memsearch-recall skill: search -> expand -> transcript
via parse-transcript.py). Shares the same .memsearch format + per-project
Milvus collection as the other four platforms. Includes install.sh, scripts,
skills, prompts, README, and the full docs/platforms/hermes/ pages plus the
platform comparison table rows (docs/index.md + docs/platforms/index.md).

Closes the Hermes platform gap tracked in zilliztech#670.
The shared daily .md is written by multiple agents (Claude Code, Hermes, ...);
align the Hermes turn labels with the Claude plugin's [User]:/[Assistant]:
convention so the cross-agent file reads consistently.
…del)

- plugins/hermes/server/memsearch_mcp_server.py: fastmcp server exposing
  memory_search/get/transcript/capture; capture+transcript read state.db;
  memory home = dedicated folder (HERMES_MEMORY_HOME, default ~/hermes)
- install.sh: venv + hermes mcp add + capture daemon instructions
- docs: all four pages rewritten MCP-first; comparison tables updated
  (Hermes: memory_search tool (MCP))
- skill removed entirely (MCP is the only recall path)
- plugins/kimi/server/memsearch_mcp_server.py — 4 MCP tools (search/get/
  transcript/capture); kimi-native transcript (wire.jsonl sessions) + the
  shared per-project collection search (cwd-based)
- ~/.kimi-code/mcp.json registration (stdio command+args) — verified via a
  standalone handshake (initialize OK, 4 tools listed)
- README with install + registration + tool table
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant