feat(skills): add Hermes-format skill under skills/hermes/, extend vetting sweeps to cover it - #46
Conversation
…it like the flat set Hermes Agent is a shell-capable coding agent, so a repo map from a deterministic CLI fits its workflow the same way it fits Claude Code / Codex. This adds a Hermes-format SKILL.md (agentskills.io-style, Hermes's native format) teaching the agent when to reach for ripwire -- the orient / --for lens / --callers / --test-gate flows, distilled from the ripwire-orient family. Placed under skills/hermes/ on purpose: skills/install.sh symlinks every skills/ripwire-* directory into Claude Code / Codex skill roots, and a Hermes-format file must not be auto-installed into those agents (wrong format for them, and it would pollute the routed ripwire-* set). The vetting sweeps previously globbed only skills/*/SKILL.md, so a namespaced skill at skills/<agent>/*/SKILL.md silently escaped both gates -- the green-while-inert shape deckcheck.sh's own header exists to prevent. Extend skillscan.sh check 9 and deckcheck.sh to include skills/*/*/SKILL.md. Verified locally (plain cmake build, macOS arm64): skillscan ALL PASS, 19/19 shipped skills scan clean including the new file; deckcheck ALL PASS (55 prose sources, 0 bad flag values). No C++ or behavior change.
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (4)
Included review availability: Your plan provides up to 4 included reviews per hour; 3 remain after this review. 📝 SummarySummary by CodeRabbit
WalkthroughAdds a Hermes-format ChangesHermes skill support
Estimated code review effort: 1 (Trivial) | ~5 minutes Merge Risk: ⚪ Minimal · up to This adds a Hermes repository-mapping skill and ensures nested skills are included in the existing validation sweeps. No concrete current-head merge risk remains. Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Thank you for this, and apologies for the silence — you deserved a status note before now rather than an open PR with nothing on it. Where it stands honestly: this is queued, not ignored, and it is not blocked on anything wrong with the PR. Skill-activation targets touch how the installer writes configuration outside its own prefix, so the order we add them in is a decision I want to make deliberately rather than in the order PRs arrive. There is also a sequencing question on our side that isn't mine alone to answer, and I'd rather tell you that than invent a technical reason. I'm not going to give you a date I can't keep. What I can say is that nothing here is a rejection, the PR stays open, and when the ordering question is settled this gets a real review — the same one #57 is getting today: full gate battery, sanitizers, and an adversarial pass rather than just the happy path. If you'd rather not wait on that, say so and I'll prioritise differently. Leaving a contributor hanging is the failure mode I'm most trying to avoid here. |
|
Thanks for the status note — honestly appreciated, and no apology needed. This kind of transparency is exactly what keeps contributors around. To make the sequencing decision easier: nothing in this PR requires installer integration. The skill is namespaced under skills/hermes/ specifically so the ripwire-* glob in skills/install.sh can never touch it, and the README documents a plain cp -r install into ~/.hermes/skills/. So if the open question is the order in which agent-activation targets get added, this can land without committing you to any Hermes-aware installer change — or hold until that's settled, either works for us. We're not blocked: the skill is already live in my own Hermes setup, so this PR is purely about co-location and discoverability for other Hermes users. And no rush on prioritising differently — the PR can sit in the queue until the sequencing question is resolved. |
|
One factual question, and it changes the shape of what I land rather than anything about your PR. I am refactoring the agent wiring in One column is whether the agent can shell out. Where it can, we recommend the CLI over MCP, because the CLI costs zero context until it is invoked while a registered MCP server's verb schemas sit in the model's context every turn whether a verb is called or not (measured, Does Hermes have a shell/terminal/exec tool available to the agent at run time? Your SKILL.md says "Invoke it via the terminal tool", which suggests yes — but that is your text, and I would rather ask than infer a platform fact from a sentence I am about to build a recommendation on. If yes, Hermes joins codex, opencode and openclaw on a shared CLI-first recipe rather than getting its own. If no, it stays MCP-wired and that is fine too. Also useful if you know it: does Hermes ignore unknown frontmatter keys? Your skill carries No rush, and nothing here is a criticism of the PR — the hook-slot detail #51 found is exactly the kind of platform fact this table needs. |
…ills/ The namespaced Hermes skill (#46) lands at skills/hermes/<skill>/SKILL.md. Two of the three sweeps that enumerate skills were taught about that subtree in the same PR; this one was not, so its bare `find -maxdepth 1 -type d` counted the NAMESPACE "hermes" as a skill, found it had zero labelled rows in the routing corpus, and failed the gate. A skill is a directory that CONTAINS a SKILL.md — never merely a directory under skills/. Stating it that way makes the sweep correct for any future namespace without another edit here. Caught by the full gate battery before merge, not by CI after it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
Merged — thank you, this is a well-judged contribution. Three calls here were the right ones, and none of them are obvious: The namespace decision. Putting this under Extending the sweeps in the same PR. A namespaced skill that the vetting sweeps silently skipped would have been strictly worse than no skill — it would ship unvetted while looking covered. Landing the The prose is honest. "Do NOT use for trivial single-file lookups (plain One thing I fixed on the way in, so you know it happened. The full gate battery caught Landed as a separate commit ( One integration note, not a change request. #51 adds a Worth saying plainly: nobody maintaining this repo runs Hermes. Everything we ship for it is verified against documentation, not against a running agent. If you're ever able to run the two prompts from that skill against real Hermes and tell us what actually happened — especially if it goes badly — that is the single most useful thing anyone could contribute to this corner of the repo right now. |
|
It's merged, but for the question's and live run on hermes: Q1 — Shell/terminal: yes, natively. Hermes agents have a first-class terminal tool; the agent that ran this whole exchange (fork, gates, sweep edits, this test) executed every command through it. MCP is also supported natively (hermes mcp), so Hermes can be MCP-wired — but CLI-first is the better fit for the same reason your table column exists: a skill is just instructions the agent loads on demand, and ripwire costs zero context until the agent actually runs it via the shell. Hermes belongs in the codex/opencode/openclaw column. Q2 — Unknown frontmatter keys: yes, ignored; name + description is the full legal minimum. I didn't infer this — I tested it. Fresh isolated HERMES_HOME, every ripwire-* skill on current main copied verbatim (their exact frontmatter — name, folded long description, allowed-tools):
So the flat set works in Hermes unchanged (17 on current main — the v0.4.0 tarball shipped 18; ripwire-efficient has since been consolidated), and installing them beats a hand-written nineteenth on drift — agreed. Three findings from the test that a docs-only pass wouldn't have surfaced, for the --hermes work in #51:
On the seam: once #51 lands, I'd suggest having its --hermes mode install the distilled skill alongside the 17 (all proven loadable above). The installer's ripwire-* glob deliberately skips skills/hermes/, so the mode would need to name it explicitly — worth it because the distilled skill is the client-agnostic entry point (no claude mcp add/hook text, description sized for Hermes' 57-char index) that routes into the family for depth. Drift risk is real but bounded: it defers to --help and the family skills, so its maintenance surface is small. If you'd rather not carry a nineteenth at all, happy to retire it in favor of the 17 — your call. And the prompts challenge — done, live. A real Hermes agent ran both core invocations from the skill against a real repo (Vibe-Trading 77k edges):
One wobble worth reporting rather than hiding: a shell+docs-only repo mapped with zero call-graph edges — disclosed in the output itself (0 edges, isolates listed), so no agent can mistake the map for a connected codebase. |
Summary
Adds a Hermes-format skill for ripwire — a distilled Hermes-native counterpart to the
ripwire-orientfamily — and extends the two vetting sweeps so a namespaced skill like it is scanned like the flat set, not silently skipped.No C++ or behavior change. Diff: 2 new files + 2 sweep-glob lines.
Why a Hermes skill
Hermes Agent is a shell-capable coding agent ("if your agent can run shell commands, it is set up"): its skills are agentskills.io-style
SKILL.mdfiles under~/.hermes/skills/. The added skill teaches a Hermes agent when to reach for ripwire instead of grep-and-read: orienting in an unfamiliar repo, the--fortask lens,--callersblast radius,--test-gatebefore committing, resuming work after context compaction. Its honesty-signals section mirrors ripwire's own disclosure model (confidence=/margin_pct=,--skipped,amb=) so an agent reads a map the way the tool wants it read.Why
skills/hermes/and notskills/ripwire-*skills/install.shsymlinks everyskills/ripwire-*directory into Claude Code / Codex skill roots. A Hermes-format file must not be auto-installed into those agents — wrong frontmatter dialect for them, and it would pollute the routedripwire-*set. Thehermes/namespace is invisible to that glob (verified:for d in "$src"/ripwire-*/), so Claude/Codex installs are untouched.Sweep coverage (the second half of this PR)
skillscan.shcheck 9 anddeckcheck.shglobbed onlyskills/*/SKILL.md, soskills/hermes/ripwire-repo-map/SKILL.mdwould have silently escaped both gates — the green-while-inert shapedeckcheck.sh's own header exists to prevent. Both now include the depth-3 patternskills/*/*/SKILL.md.Verified locally against a plain cmake build (macOS arm64):
bash test/skillscan.sh→ ALL PASS,19/19 shipped skills scan clean— the new file is swept and scans attack-clean.bash test/deckcheck.sh→ ALL PASS — 55 prose sources, 272 distinct--flagtokens, 0 fabricated, 0 bad values.Notes for review
descriptionis intentionally one line: Hermes indexes skill descriptions into every session's system prompt, so the trigger matrix lives in the body.allowed-toolsis omitted for the same reason — Hermes validates against a fixed frontmatter key set.ripwire-*only); Hermes users install from the repo as documented inskills/hermes/README.md. Happy to include it in the tarball if you'd prefer.