Skip to content

v1.0.1 - Hermes Registration Fix

Choose a tag to compare

@solaitken solaitken released this 07 Jun 11:49
· 4 commits to main since this release
72bac52

Open Second Brain v1.0.1 - Hermes Registration Fix

A fresh Hermes gateway now registers the Open Second Brain memory provider with its full curated tool set - "Memory provider 'open-second-brain' registered (10 tools)" - instead of zero, so every brain_* call from the model routes through the memory manager rather than dying as "Unknown tool". Hermes builds its memory-tool routing table once, at provider registration, before any provider initializes, and never rebuilds it; the provider now serves vendored static copies of its curated tool schemas through that window and hands back to live tools/list schemas the moment its o2b mcp bridge is up.

Hermes Registration Fix release overview

What ships

  • Static schema fallback at registration. get_tool_schemas() returns vendored (name, description, inputSchema) copies of the 10 curated MEMORY_TOOLS whenever the bridge is not available - before initialize() runs, and also when a live listing fails after a degraded start. Once the bridge is up, live tools/list schemas win exactly as before. The handle_tool_call() initialization guard is untouched: by the time the model can call a tool, initialization has already happened.
  • Anti-drift guard. The vendored copies in plugins/hermes/_schemas.py are verbatim projections of the live server's tools/list, and tests/python/test_static_schemas.py compares them field by field against a live o2b mcp in CI - a schema change in the TypeScript core that is not re-vendored fails the build instead of shipping stale copies. The test skips with a visible reason when the Bun runtime is unavailable, so unit runs without the toolchain stay green.
  • Hermes-ordering regression tests. The exact gateway sequence - routing table built from get_tool_schemas() pre-init, initialize() afterwards, tool call dispatched through that table - is now an end-to-end test, alongside pre/post-init name-set identity and listing-failure fallback cases.
  • Install doc verify step. install/hermes.md documents the expected registration log line: (10 tools) is the health signal, (0 tools) means a version older than 1.0.1.

Process wins

  • The gateway log itself becomes the verification surface - no tool call needed to detect a dead memory surface.
  • The fix lives entirely on the provider side: no Hermes patch required, no public API change (1.0.0 freeze respected), no new dependencies in the stdlib-only shim.
  • Lifecycle hooks (prefetch, sync_turn, system prompt block, pre-compress, session end) were never affected and are unchanged.
  • Quality record: Python 70/70 (61 baseline + 9 new, no regressions), anti-drift green against the live server, TypeScript 4248/0, tsc clean, an independent reviewer pass with zero blocking findings, and a real-environment smoke test reproducing the exact Hermes registration ordering.

Notes

  • Patch release: no behavior change for any non-Hermes runtime; the static copies add a few kilobytes to the shim and zero I/O at gateway boot.
  • A follow-up proposal for upstream hermes-agent (rebuild _tool_to_provider after initialize_all(), or resolve lazily at dispatch) is documented in the task; with it, providers with init-time discovery would work without vendored schemas.
  • Release image: terminal-style overview (animated GIF in this body; static PNG and the SVG source attached as assets).