Repository navigation
Hermes plugin: search survives slow servers, no false version warning, faster install and lookups (CON-04, HER-09/10/12) - #56
Merged
Conversation
…, faster install and lookups (CON-04, HER-09/10/12) CON-04: memory_search, memory_expand and memory_evidence are user-invoked, so they get a 15 s budget (SUBSTRATE_TOOL_TIMEOUT_SECONDS, 3-60 s) with one retry for timeout, connection reset and 5xx; 4xx is never retried. When the retry is spent the tool says "Substrate memory is busy or slow right now". Per-turn recall moves to 2.5 s so it stays above the server's 1500 ms deadline with headroom. HER-10: an unknown or 0.0.0 Hermes build gets no version note. An older Hermes gets its one note at connect time, never on ordinary answers. HER-09: the repository root carried a pyproject.toml, which Hermes treats as a plugin dependency project on install. The dev tooling project and its uv.lock move to tooling/ (CI uses uv sync --project tooling); pytest and ruff settings move to root pytest.ini and ruff.toml. HER-12: not fixable from the plugin. Hermes defers non-core plugin tools behind tool search; see the README note on tools.tool_search. Follow-ups: memory_search uses the server's tools/list description when present (fetched once per process, cached, fallback text kept); payload_too_large is a permanent tool error; rejected import items are logged with the server's error and hint. Version 0.9.1. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PJwSpwAivFKrfusNkeh96b Signed-off-by: Pavel-Tk <110731619+Pavel-Tk@users.noreply.github.com>
This was referenced Oct 13, 2026
Pavel-Tk
added a commit
that referenced
this pull request
Oct 13, 2026
test_repository_root_is_not_a_python_project_for_hermes (from #56) asserted "ruff==0.9.10" and "pytest==9.0.3", so every Dependabot bump in tooling/ failed CI (#61, #62). It now checks that ruff and pytest are pinned to some version. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PJwSpwAivFKrfusNkeh96b Signed-off-by: Pavel-Tk <110731619+Pavel-Tk@users.noreply.github.com>
Pavel-Tk
added a commit
that referenced
this pull request
Oct 13, 2026
test_repository_root_is_not_a_python_project_for_hermes (from #56) asserted "ruff==0.9.10" and "pytest==9.0.3", so every Dependabot bump in tooling/ failed CI (#61, #62). It now checks that ruff and pytest are pinned to some version. Claude-Session: https://claude.ai/code/session_01PJwSpwAivFKrfusNkeh96b Signed-off-by: Pavel-Tk <110731619+Pavel-Tk@users.noreply.github.com> Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hermes plugin fixes from the 2026-10-11 customer test. Version 0.9.1 (CHANGELOG entry added).
CON-04: search survives slow servers (P1)
memory_search,memory_expand,memory_evidence: 15 s total budget (SUBSTRATE_TOOL_TIMEOUT_SECONDS, clamped 3-60 s). First attempt 7 s; one retry with the remaining budget, only fortimeout,transport_error,server_error,internal. No retry for 4xx-class answers.{"error":"timeout","message":"Substrate memory is busy or slow right now. Try again in a moment. ..."}, so the agent does not say it lacks access to a source.TURN_CONTEXT_TIMEOUT2.0 -> 2.5 s, so it stays above the server's 1500 ms deadline with about 1 s of headroom.HER-10: no false version warning
host_version_notice:0.0.0,vgit.*,dev, empty are unknown and get no note.pre_llm_call(it was repeated on answers; the process flag did not survive a host that reloads the plugin per message). It is added once to the connect announcement.HER-09: install picked up dependency tooling (P2), partly fixed
pyproject.toml(dev tooling with[project]and[dev]extras) plusuv.lock. Hermes treats a rootpyproject.tomlas a plugin dependency project (see CHANGELOG 0.8.1).plugin.yamlalready saidpython_runtime: external, which the owner's Hermes evidently does not stop.pyproject.tomlanduv.lockmove totooling/(lock content unchanged). pytest config moves to rootpytest.ini, ruff config to rootruff.toml. CI, release workflows, README, CONTRIBUTING, docs/releasing and dependabot now useuv sync --project tooling --frozen --extra devwithUV_PROJECT_ENVIRONMENT=$PWD/.venv.tooling/uv.lockwith--frozen; full suite on 3.11 and 3.12;test_packagingasserts there is no rootpyproject.toml.hermes plugins install <repo URL>on a Hermes build that shows the problem.HER-12: lookups take 10-28 s (P2), not fixable from the plugin
~/plugin_compare/hermes-agent,tools/tool_search.py) defers every non-core plugin tool behind thetool_search/tool_describe/tool_callbridge whentools.tool_search.enabledisauto(default) oron._HERMES_CORE_TOOLSis Hermes-owned andregister_toolhas no always-load option. The only direct surfaces are thedesktop_uiandprojecttoolsets, which are not for this.tools.tool_search.enabled: off.Follow-ups from substrate-v5 PR #83
memory_searchdescription: the server'stools/listdescription (which names the connected sources) is used when present. Fetched once per process in a background thread, cached; fallback text kept when missing, non-string, empty, over 1000 chars or failing. Failures are retried after 5 minutes.payload_too_largeadded to_PERMANENT_TOOL_ERRORS(tool errors), so oversized captures are split or quarantined, not retried.substrate.spoolwith kind, event_id and the server'serrorplushint(bounded, control characters stripped). Logged in both the batch and single-item paths.Tests
.venvbuilt exactly as CI does (uv sync --project tooling --frozen --extra dev), Python 3.11 and 3.12: full suite 426 passed, 5 skipped each (server and host checkouts absent).ruff check .,compileall,check_public_hygiene.py, JSON validation,build_release.pyand--checkall pass.tests/test_substrate_plugin.py(+ fake-server hooks intests/conftest.py) andtests/test_packaging.py.test_tool_404_carries_permanent_signalassertedfake_mcp.hits == 1, which was racy (the spool sender can postmemory_importin the same window) and counted the initialize POST. The hit count is removed; permanence is still asserted via the quarantine counter andtransient is False.Version
VERSION, root and pluginplugin.yaml,client.PLUGIN_VERSION, release workflow version check, packaging tests, README/COMPATIBILITY current-release rows: 0.9.0 -> 0.9.1.🤖 Generated with Claude Code