Skip to content

Update: add Hermes Agent harness support - #51

Merged
SI-RUI-ZHANG merged 3 commits into
mainfrom
hermes-harness-support
Jul 3, 2026
Merged

Update: add Hermes Agent harness support#51
SI-RUI-ZHANG merged 3 commits into
mainfrom
hermes-harness-support

Conversation

@SI-RUI-ZHANG

Copy link
Copy Markdown
Collaborator

Original issue
Skill Manager had no support for the Hermes Agent harness: no harness definition, no scanning of the categorized ~/.hermes/skills/<category>/<skill>/SKILL.md layout, and no YAML handling for MCP servers in ~/.hermes/config.yaml.

Fix

  • Register hermes as a first-class harness with skills and MCP bindings (slash commands intentionally deferred; Hermes models reusable workflows as skills). Home resolution honors SKILL_MANAGER_HERMES_HOME, then HERMES_HOME, then ~/.hermes; the skills root supports SKILL_MANAGER_HERMES_ROOT.
  • Skills: categorized-layout scanning with an ownership allowlist. Only Hermes hub installs with non-official provenance (.hub/lock.json) are importable; bundled skills (.bundled_manifest), official optional skills, and Hermes self-learned/local skills are excluded and never symlinked, deleted, or replaced, so hermes update keeps normal ownership. Shared-store skills enable into a skill-manager category symlink.
  • MCP: new HermesMapper (stdio command/args/env; http/sse url/headers, transport: sse) and YAML support in FileBackedMcpAdapter using ruamel.yaml round-trip mode with in-place subtree mutation, so user comments, key order, and formatting in config.yaml survive enable/disable writes (regression-tested).
  • Shared store records originHarness as provenance only; managed skills stay enableable on every supported harness.
  • Maintainer cleanup on top of the contributed branch: removed a dead exclusion helper left from an earlier iteration, restored MatrixRow.tsx to the mainline graceful fallback (the backend always returns a cell per harness column), and restored the PR Update: clarify release artifact platform coverage #49 release-artifact README lines dropped during rebase.
  • Also includes a small test-support robustness fix: tests/support/app_harness.py handles IncompleteRead when reading HTTP error payloads.

Validation

  • Backend: 257 unit + 123 integration tests OK (macOS, Python 3.14).
  • Frontend: tsc --noEmit OK; vitest run --maxWorkers=1 58 files / 244 tests OK; npm run build OK.
  • Contributor validation additionally covered Linux/WSL with a real Hermes install (hermes skills list / hermes mcp list recognize Skill Manager writes; isolated HERMES_HOME E2E).

Changed files
README.md
README.zh-CN.md
assets/harness-logos/hermes-logo.png
frontend/src/assets/harness-logos/hermes-logo.png
frontend/src/components/harness/harnessPresentation.ts
pyproject.toml
requirements.txt
skill_manager/application/mcp/adapters.py
skill_manager/application/mcp/mappers.py
skill_manager/application/skills/adapters.py
skill_manager/application/skills/inventory.py
skill_manager/application/skills/manifest.py
skill_manager/application/skills/mutations.py
skill_manager/application/skills/observations.py
skill_manager/application/skills/store.py
skill_manager/harness/init.py
skill_manager/harness/catalog.py
skill_manager/harness/contracts.py
tests/integration/test_http_api.py
tests/integration/test_mcp_routes.py
tests/integration/test_skills_mutations.py
tests/support/app_harness.py
tests/support/fake_home.py
tests/unit/test_backend_container.py
tests/unit/test_mcp_adapters.py
tests/unit/test_skill_manifest.py
tests/unit/test_skills_adapters.py

Reviewer: @SI-RUI-ZHANG

beijixiong258 and others added 3 commits July 2, 2026 22:41
_excluded_skill_names_for_harness lost its last caller when the Hermes
scan moved to _hermes_scan_policy. MatrixRow.tsx changes belonged to the
withdrawn per-harness cell-hiding design; the backend now always returns
a cell for every harness column, so the mainline graceful fallback is
the correct behavior.
The Hermes branch was rebased onto main after PR #49 but carried the
pre-#49 README bodies, silently reverting the GitHub Releases platform
coverage line in both README.md and README.zh-CN.md.
@SI-RUI-ZHANG
SI-RUI-ZHANG merged commit 4f085f8 into main Jul 3, 2026
6 checks passed
@SI-RUI-ZHANG
SI-RUI-ZHANG deleted the hermes-harness-support branch July 3, 2026 10:56
execsumo added a commit to execsumo/skill-manager that referenced this pull request Jul 14, 2026
…with fork

Adopts the product-accurate Hermes Agent implementation from upstream
mode-io/skill-manager PR mode-io#51 (commit 4f085f8), replacing our earlier
speculative one whose formats were unverified guesses:

- MCP: ~/.hermes/config.yaml (YAML) under `mcp_servers`, standalone
  HermesMapper with no `type` field (stdio=command/args/env,
  http/sse=url/transport/headers). Adds ruamel.yaml for round-trip-safe
  YAML I/O and refactors FileBackedMcpAdapter to mutate the document
  in place (_ensure_subtree) so YAML comments/quoting survive — this
  changes the write path for every config-subtree MCP harness.
- Skills: categorized layout ~/.hermes/skills/<category>/<skill>/;
  shared skills link under the `skill-manager` category.
- Hub-awareness: reads Hermes' .hub/lock.json + .bundled_manifest to
  exclude official/builtin/optional and self-learned skills, adopting
  only external-hub skills; threads `origin_harness` provenance through
  the skill store manifest.
- Home override: SKILL_MANAGER_HERMES_HOME → HERMES_HOME → ~/.hermes.

Reconciled with fork-only work that upstream lacks: kept our Hermes
slash-command binding (still provisional — upstream deliberately omits
it) and its SlashTargetId/TARGET_ORDER allowlist entries, the `agy`
harness, and our theme-neutral hermes-logo.svg (dropped upstream's png).

Independently verified: backend 309+133, typecheck, npm 269, build,
openapi (no drift) all green; CommentedMap read-back path confirmed
against a live YAML config.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
execsumo added a commit to execsumo/skill-manager that referenced this pull request Jul 14, 2026
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
execsumo added a commit to execsumo/skill-manager that referenced this pull request Jul 14, 2026
The PR mode-io#51 cherry-pick merge left two Hermes Agent cells in the harness
logo table: upstream's (referenced the dropped hermes-logo.png — a now
broken image link) and ours (hermes-logo.svg). Collapse to one cell using
the existing svg and upstream's real product docs link
(hermes-agent.nousresearch.com), placed last to match the frontend
HarnessLogoKey order.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.

2 participants