Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Consult the local `hermes` agent as the long-term-memory oracle for minpeter's machines, from inside another coding agent (pi, codex, senpi, Kiro, Claude Code). Use it whenever a task needs context the repo does not contain — infrastructure layout, hostnames/ports/routing, why a past decision was made, prior incidents, cross-repo conventions, deploy/ops procedure — and the instinct is to ask the user: run `hermes -z "<query>"` FIRST, then ask the user only what hermes could not answer. Also use
.claude/skills/minpeter-hermes-agent-consult/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 87% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 91% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 32% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 225% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 109% | 0% |
hermes is minpeter's long-running personal agent. It holds persistent memory about the machines, homelab, networking, and past decisions that a fresh coding agent in a single repo cannot see. Treat it as a peer to consult, not a tool to run: it is the cheapest source of the context you are missing, and it is the place that context has to be stored so the next agent finds it.
Verify it is available before relying on it: command -v hermes. If it is missing, fall back to asking the user and say why.
| Move | When | Command | |---|---|---| | Consult | You need context the repo does not contain, and you were about to ask the user | hermes -z "<question>" | | Teach | You changed infra, or learned something with a long shelf life | hermes -t memory -z "Remember: <fact>" | | Review | Non-trivial diff, plan, or ops procedure before you hand it over | hermes -z "Review this: … <diff>" |
-z is one-shot: it prints only the final response text to stdout, no banner, no spinner, no session id. It is built for exactly this kind of scripted use.
The prompt must immediately follow -z. hermes -t memory -z "…" and hermes -z "…" -t memory both work; hermes -z -t memory "…" is an argparse error, because -t gets consumed as the prompt. Putting -z last is the habit that never breaks.
The rule: when you are about to ask the user a question about their environment, history, or preferences, ask hermes first. The user is the slow, expensive path; hermes answers in ~10s and often already knows.
Consult for:
service owns what, what is tailnet-only vs LAN-reachable.
fragile, what must not be restarted.
already rejected and why. Prevents you from re-litigating a settled call.
Do not consult for things the repo answers. Read the code first. hermes is for context that lives outside the working tree; a question you could have answered with rg wastes a round trip and can get you a stale answer.
Then: hermes is a starting point, not an authority. It answers from memory written by past sessions, so it can be out of date. Verify anything load-bearing against the live system or the repo before acting on it, and say in your reply that the claim came from hermes memory.
Escalate to the user when hermes returns nothing useful, contradicts what you observe, or when the question is a preference about work not yet done — that is the user's call, not a memory lookup.
hermes has no idea what you are working on. Every query is a cold start.
("Working in the <repo> repo, adding a second ingress route") beats a bare question.
"answer in one line", "just the hostname". Unbounded questions get essays.
-z, sohermes will run commands if the query invites it. Say "answer from memory" or "do not modify anything" when you only want a lookup.
-z loads AGENTS.md and rules fromthe CWD, so cd into the repo you are asking about.
-t memory for a memory-only lookupkeeps it fast and stops it from wandering into the web or the shell.
resume prior context (-c / --resume do not carry into -z), so a "and what about …" query lands with no history. Put everything the question needs into the one prompt.
Copy-paste query shapes for all three moves: references/queries.md.
A fact that only exists in this session's context is lost. If future-you or another agent would need it, write it back:
bashhermes -t memory -z "Remember: <fact>. Save it to memory, then confirm in one line."
Teach it when you:
Write the fact the way you would want to receive it: specific, self-contained, no pronouns pointing at lost context, and short. Include the "do not" as explicitly as the "do" — do not disable <service>; it owns the routes is the kind of line that saves an outage.
Verify the write. The confirmation text is the model talking; the actual storage is MEMORY.md under the active profile's memories dir (entries separated by §) — ~/.hermes/memories/MEMORY.md for the default profile, see references/cli.md for named profiles and HERMES_HOME. Grep it for a distinctive token from your fact. Add memories through the agent rather than by hand: the memory tool enforces the size limits and does targeted, atomic updates instead of blind appends.
Ask the user before teaching anything that is a claim about them rather than about the system, and before writing a fact you have not verified. Memory is sticky: a wrong entry keeps misleading agents until someone notices.
hermes is the only reviewer available that knows the operational history, which makes it worth a pass on infra changes, migrations, and ops runbooks:
bashcd <repo> && hermes -z "Review this diff for problems. Be brief, max 3 bullets. $(git diff)"
Ask for severity-tagged bullets and a hard cap. Treat the output as one opinion: confirm each finding against the code before acting, and drop the ones that do not hold. Do not paste unbounded diffs — scope to the files that matter.
The trap that matters most. Some provider failures (bad model, auth failure, HTTP 400) print the error text to stdout and still exit 0, so a naive if hermes -z …; then treats a failure as an answer. Others do exit nonzero. Neither signal alone is sufficient.
When the result gates a decision, check the exit status and a usage report:
bashhermes --usage-file /tmp/hermes-usage.json -z "<query>" # nonzero → failed, maybe before any inference jq '.completed, .failed' /tmp/hermes-usage.json # want true, false
Preflight errors (malformed flags, an invalid -t name) exit nonzero and write no report at all; a run that reached the provider and failed there may exit 0 while the report records failed: true. Details and the rest of the flags: references/cli.md.
Other operational notes:
tool use is much longer. Give long consults a timeout so you never hang.
-z run creates a session. Fine occasionally; if you scripted abatch of probes, clean up with hermes sessions list / hermes sessions delete <id>.
hard to act on.
-z sends your prompt to a hosted inference provider. Everything in that string leaves the machine.
.env contents, or credential-bearing config.And do not ask it to perform mutating work on your behalf. Under -z approvals are bypassed, so "fix the routing" is an unsupervised change to a live system. Consult, teach, review — the acting stays with you and the user.
command -v hermes checked before depending on itshape, read-only phrased
-t memory when it is a pure lookup-z, quotedthe profile's MEMORY.md
--usage-file, when it gates a decisionAsking the user something hermes already knows · treating a hermes answer as verified fact · hermes -z -t memory "…" (the prompt must follow -z) · branching on $? alone · making an infra change and never teaching it back · hand-editing MEMORY.md · teaching unverified or user-attributed claims without asking · pasting a whole repo or an unbounded diff into a query · secrets in the prompt · asking hermes to mutate a live system under -z · expecting -c / --resume to give a -z run prior context · interactive hermes (or chat) from inside another agent, which blocks on a TTY that is not there.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 11,702 | 20,037 | +71% | 1 | 1 | 0% | 1,078 | 2,662 | +147% | 0 | 0 | — |
case-02 | fail→fail | 3,716 | 7,737 | +108% | 1 | 1 | 0% | 476 | 2,876 | +504% | 0 | 0 | — |
case-03 | fail→fail | 12,876 | 5,757 | -55% | 1 | 1 | 0% | 1,502 | 2,778 | +85% | 0 | 0 | — |
case-04 | fail→pass | 17,335 | 3,354 | -81% | 1 | 1 | 0% | 1,622 | 3,033 | +87% | 0 | 0 | — |
case-05 | fail→pass | 14,865 | 15,046 | +1% | 1 | 1 | 0% | 2,698 | 5,144 | +91% | 0 | 0 | — |
case-06 | fail→pass | 14,401 | 8,564 | -41% | 1 | 1 | 0% | 2,499 | 3,298 | +32% | 0 | 0 | — |
case-07 | fail→pass | 6,171 | 11,760 | +91% | 1 | 1 | 0% | 1,015 | 3,299 | +225% | 0 | 0 | — |
case-08 | fail→pass | 10,290 | 4,792 | -53% | 1 | 1 | 0% | 1,575 | 3,298 | +109% | 0 | 0 | — |
case-09 | fail→pass | 4,250 | 3,833 | -10% | 1 | 1 | 0% | 739 | 3,141 | +325% | 0 | 0 | — |
case-10 | pass→pass | 5,594 | 2,660 | -52% | 1 | 1 | 0% | 1,031 | 2,903 | +182% | 0 | 0 | — |
case-11 | fail→pass | 11,493 | 17,820 | +55% | 1 | 1 | 0% | 1,665 | 4,266 | +156% | 0 | 0 | — |
case-12 | fail→fail | 10,561 | 4,952 | -53% | 1 | 1 | 0% | 1,530 | 3,294 | +115% | 0 | 0 | — |
case-13 | pass→pass | 7,056 | 5,137 | -27% | 1 | 1 | 0% | 932 | 3,140 | +237% | 0 | 0 | — |
case-14 | fail→pass | 11,380 | 6,605 | -42% | 1 | 1 | 0% | 1,525 | 3,550 | +133% | 0 | 0 | — |
case-15 | fail→pass | 14,451 | 3,488 | -76% | 1 | 1 | 0% | 2,210 | 3,168 | +43% | 0 | 0 | — |
case-16 | fail→pass | 7,146 | 5,246 | -27% | 1 | 1 | 0% | 955 | 3,035 | +218% | 0 | 0 | — |
case-17 | pass→pass | 7,342 | 8,648 | +18% | 1 | 1 | 0% | 1,167 | 3,684 | +216% | 0 | 0 | — |
case-18 | pass→pass | 10,611 | 3,322 | -69% | 1 | 1 | 0% | 1,516 | 2,948 | +94% | 0 | 0 | — |
case-19 | pass→pass | 8,451 | 3,643 | -57% | 1 | 1 | 0% | 1,245 | 3,040 | +144% | 0 | 0 | — |
case-20 | fail→pass | 14,816 | 6,136 | -59% | 1 | 1 | 0% | 2,418 | 3,363 | +39% | 0 | 0 | — |
case-21 | pass→pass | 11,238 | 5,383 | -52% | 1 | 1 | 0% | 1,808 | 3,139 | +74% | 0 | 0 | — |
case-22 | fail→pass | 5,635 | 3,331 | -41% | 1 | 1 | 0% | 826 | 3,115 | +277% | 0 | 0 | — |
case-23 | fail→fail | 14,644 | 3,540 | -76% | 1 | 1 | 0% | 2,392 | 2,880 | +20% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 23 cases were attempted, and 20 counted toward the lift figure. The other 3 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +52 percentage points is the difference between those two pass rates over the 20 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.