Skip to content

feat(agent): surface Hermes in verify/status/list detection (sable-gyw)#156

Merged
Raftersecurity merged 1 commit into
mainfrom
feat/hermes-detection-sable-gyw
Jun 1, 2026
Merged

feat(agent): surface Hermes in verify/status/list detection (sable-gyw)#156
Raftersecurity merged 1 commit into
mainfrom
feat/hermes-detection-sable-gyw

Conversation

@Rome-1
Copy link
Copy Markdown
Collaborator

@Rome-1 Rome-1 commented Jun 1, 2026

What

Completes item (6) of sable-gyw — detection of an existing Hermes install across rafter agent verify / status / list, in both the Node and Python runtimes. Hermes install (--with-hermes), the recipe, README badge/list, and the dry-run plan already shipped (MCP-only v0); this fills the remaining detection gap so an existing Hermes install surfaces everywhere the other 8 platforms do.

Changes

Node

  • verify.tscheckHermes() reads ~/.hermes/config.yaml (js-yaml safe load), asserts mcp_servers.rafter; registered in the verify results array.
  • status.ts — Hermes added to the mcpAgents status table and to detectAgents() (the agents_detected JSON field).
  • components.tshermes.mcp ComponentSpec (powers agent list/enable/disable), mirroring continueMcp but on the snake_case mcp_servers YAML shape.

Python parity (agent.py + agent_components.py)

  • _check_hermes, mcp_agents + _detect_agent_platforms entries, _hermes_mcp ComponentSpec.

Docs

  • PLATFORM_PARITY_AUDIT.md — the stale "Hermes out of scope / track under rf-01b" note (rf-01b never existed as a bead) updated to record Hermes landed under sable-gyw.

Tests

  • Node: 7 new detection tests (status text + --json agents_detected, verify pass/warn --json, agent list component presence + installed round-trip). agent-init-hermes.test.ts 14/14 pass; agent-components + agent-commands 95/95 pass.
  • Python: 6 new tests (_check_hermes not-detected/pass/warn, _detect_agent_platforms, component registered + install/uninstall round-trip). test_agent_init.py 88/88 pass.

Full-suite pre-existing failures (version-parity drift 0.8.3↔0.8.0, Gemini-hooks flake sable-784, mcp-server-stdio, component-env) are unrelated and reproduce on the clean baseline.

Security

Diff parses/writes a local YAML config. Walked rafter-code-review (CWE Top 25): yaml.safe_load (Python) / js-yaml 4.1.1 load (safe schema) — no CWE-502; fixed home()/.hermes paths — no CWE-22; static MCP entry, no subprocess — no CWE-78; shape-guarded, no recursive user-input merge — no CWE-1321. rafter secrets clean for changed files. Remote rafter run not executed (no RAFTER_API_KEY in session).

🤖 Generated with Claude Code

Hermes install (--with-hermes), recipe, README, and dry-run plan already
shipped MCP-only v0. This completes item (6) of sable-gyw: detection of an
existing Hermes install across the three inspection commands, in both runtimes.

Node:
- verify.ts: checkHermes() — reads ~/.hermes/config.yaml (js-yaml safe load),
  asserts mcp_servers.rafter; registered in the verify results.
- status.ts: Hermes added to the mcpAgents table + detectAgents() (JSON
  agents_detected).
- components.ts: hermes.mcp ComponentSpec (list/enable/disable) mirroring the
  continueMcp install/uninstall shape but on the snake_case mcp_servers YAML.

Python parity (agent.py + agent_components.py): _check_hermes,
mcp_agents/_detect_agent_platforms entries, _hermes_mcp ComponentSpec.

Tests: 7 Node detection tests (verify/status/list, --json shapes) and 6
Python tests (check + detect + component install/uninstall round-trip).

Deserialization uses yaml.safe_load (Python) / js-yaml 4.1.1 load (safe schema);
paths are fixed home()/.hermes literals; the written MCP entry is static.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@Raftersecurity Raftersecurity merged commit a4823f3 into main Jun 1, 2026
@Raftersecurity Raftersecurity deleted the feat/hermes-detection-sable-gyw branch June 1, 2026 22:58
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