docs: move Hermes overview out of agent context root - #2619
1 commit merged into
Conversation
9a9e6c3 to
471b75d
Compare
SummaryRead the PR diff on Code reference (agent side, confirming the contract)The selection priority at project_context = (
_load_hermes_md(cwd_path)
or _load_agents_md(cwd_path)
or _load_claude_md(cwd_path)
or _load_cursorrules(cwd_path)
)And the filename set at _HERMES_MD_NAMES = (".hermes.md", "HERMES.md")First-match-wins, with DiagnosisThe agent walks Test coverageThe regression test at def test_root_does_not_shadow_agents_md_with_hermes_context_file():
repo_root = Path(__file__).resolve().parents[1]
for name in ("HERMES.md", ".hermes.md"):
assert not (repo_root / name).exists(), (
f"{name} at the repository root is auto-loaded by Hermes Agent as "
"project context before AGENTS.md; long human-facing Hermes overview "
"docs belong under docs/."
)Good — that asserts the negative invariant (no root RecommendationApprove. The change is the minimum repository-side action that fixes #2595, the test pins the constraint so a future contributor cannot accidentally reintroduce a root context file, and there is no runtime behavior change (this is docs-and-test only). The CHANGELOG entry under Unreleased is appropriate. README link updates at lines 71, 92, and 555 all flip to One small note: if you ever want WebUI-specific Hermes Agent operational guidance (i.e. an actual |
6c60925
# Conflicts: # CHANGELOG.md
… 0.51.96) (#593) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/nesquena/hermes-webui](https://github.com/nesquena/hermes-webui) | patch | `0.51.95` → `0.51.96` | --- ### Release Notes <details> <summary>nesquena/hermes-webui (ghcr.io/nesquena/hermes-webui)</summary> ### [`v0.51.96`](https://github.com/nesquena/hermes-webui/blob/HEAD/CHANGELOG.md#v05196--2026-05-20--Release-BT-stage-389--8-PR-batch--IPv6-dashboard-link-normalization--configured-title-generation-provider-routing--sidebar-pinned-session-3-cap--external-refresh-sidecar-count-preference--Hermes-overview-docs-relocation--legacy-dedup-timestamp-granularity--custom-provider-models-endpoint-error-surfacing--RuntimeAdapter-Slice-4c-harness-gate-RFC) [Compare Source](nesquena/hermes-webui@v0.51.95...v0.51.96) ##### Fixed - **PR [#​2610](nesquena/hermes-webui#2610 by [@​AJV20](https://github.com/AJV20) — Preserve square brackets around IPv6 hosts when normalizing browser-only dashboard URLs, so links like `http://[::1]:9119` remain valid after saving instead of being mangled into invalid IPv6 forms. Closes the regression introduced by the URL-sanitization path added in [#​2533](nesquena/hermes-webui#2533) / v0.51.95 — bracketed IPv6 hosts now round-trip through the dashboard-link save flow unchanged. - **PR [#​2612](nesquena/hermes-webui#2612 by [@​AJV20](https://github.com/AJV20) — Route WebUI session title generation through the configured `auxiliary.title_generation` provider, model, and base URL when present in config, instead of leaving the auxiliary client to silently fall back to the chat model. Users who configure a smaller/cheaper model for title generation (e.g. a fast 8B model on a separate provider) now have that selection honored end-to-end. - **PR [#​2618](nesquena/hermes-webui#2618 by [@​LumenYoung](https://github.com/LumenYoung) — Prefer the persisted sidecar `message_count` over the session-index stored count during external-refresh polling. The metadata-only `/api/session?messages=0` path now reads `Session._metadata_message_count` when sidecar data is available, so legacy sessions whose state.db retains old rows still trip the external-refresh signal correctly on sidecar updates. Composes cleanly with [#​2604](nesquena/hermes-webui#2604) (the legacy-fallback only applies when the reconciled merged count is zero). - **PR [#​2620](nesquena/hermes-webui#2620 by [@​bengdan](https://github.com/bengdan) — Use second-level timestamp granularity in the legacy message-dedup key. Drops the microsecond fallback in `_normalized_message_timestamp_for_dedup_key()` so transcripts that encode timestamps at different sub-second precisions (e.g. `"10.0"` vs `10.000000`) collapse to the same dedup bucket. Retroactively de-duplicates the dominant failure mode in [#​2616](nesquena/hermes-webui#2616) without requiring an on-disk session rewrite. - **PR [#​2626](nesquena/hermes-webui#2626 by [@​Michaelyklam](https://github.com/Michaelyklam) (closes [#​2540](nesquena/hermes-webui#2540)) — Surface named custom-provider `/models` endpoint failures in the model picker instead of silently showing an empty provider group. `_read_custom_endpoint_models` now returns `(models, error)`, so auth/network/HTTP failures propagate as structured `models_endpoint_error` hints on `/api/models` per affected provider. The composer model picker renders the hint as a quiet disabled-option diagnostic; configured fallback models remain selectable. 124 LOC of new regression coverage spans 401/network-error/5xx failure modes plus frontend hook validation. ##### Added - **PR [#​2614](nesquena/hermes-webui#2614 by [@​Michaelyklam](https://github.com/Michaelyklam) (refs [#​2508](nesquena/hermes-webui#2508)) — Cap sidebar-active pinned sessions at three. Right-clicking a conversation row opens the existing action menu, attempted pins beyond the cap render the menu item as disabled with an explanatory tooltip, and the backend rejects a fourth pin attempt with a structured error so the optimistic frontend can roll back the click. Settles the open question from [#​2508](nesquena/hermes-webui#2508) on whether pin count is bounded — the answer is three, configurable in a future PR if user demand surfaces. ##### Documentation - **PR [#​2619](nesquena/hermes-webui#2619 by [@​Michaelyklam](https://github.com/Michaelyklam) (closes [#​2595](nesquena/hermes-webui#2595)) — Move the long human-facing Hermes comparison document from root `HERMES.md` to `docs/why-hermes.md` so Hermes Agent sessions opened in this repository load `AGENTS.md` as the project-specific assistant guidance instead of the marketing overview. README links now point to the new docs path and a regression test (`tests/test_agent_context_docs.py`) prevents root `HERMES.md` / `.hermes.md` context files from silently reappearing. - **PR [#​2627](nesquena/hermes-webui#2627 by [@​Michaelyklam](https://github.com/Michaelyklam) (refs [#​1925](nesquena/hermes-webui#1925)) — Advance the RuntimeAdapter RFC after the Slice 4b `RunnerRuntimeAdapter` facade shipped in v0.51.94. The RFC now defines the next Slice 4c runner-backend harness gate: feature-flagged runner backend selection, explicit start payload validation, durable status/event observation across WebUI adapter recreation, bounded controls, and a deterministic harness for proving the facade's protocol-translation invariants without requiring the future runner/sidecar to exist. </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4xMDEuMSIsInVwZGF0ZWRJblZlciI6IjQzLjEwMS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6WyJyZW5vdmF0ZS9jb250YWluZXIiLCJ0eXBlL3BhdGNoIl19--> Reviewed-on: https://git.erwanleboucher.dev/eleboucher/homelab/pulls/593
# Conflicts: # CHANGELOG.md
# Conflicts: # CHANGELOG.md
Thinking Path
HERMES.md/.hermes.mdhigher project-context priority thanAGENTS.md.HERMES.mdis a long human-facing overview/comparison document, whileAGENTS.mdis the assistant-facing contributor guidance.docs/and keep root free of Hermes context filenames.What Changed
HERMES.mdtodocs/why-hermes.md.tests/test_agent_context_docs.pyto assert rootHERMES.md/.hermes.mddo not exist and the README links the moved document.Why It Matters
AGENTS.mdas the project-specific assistant guidance instead of the long product-positioning document.AGENTS.mdagain.Verification
env -u HERMES_CONFIG_PATH -u HERMES_WEBUI_HOST /home/michael/.hermes/hermes-agent/venv/bin/python -m pytest tests/test_agent_context_docs.py -q— 2 passedgit diff --checkRisks / Follow-ups
HERMES.mdmay need updating if any exist outside this repository.Closes #2595
Model Used
AI-assisted change with repository inspection, targeted editing, and shell-based test verification.