bump-core-req
Updates the minimum core version requirement for a fleet plugin in all three canonical places: `required_core_version` and `requires["claude-code-hermit"]` in…
Full-text search over the recorded past: session reports, compiled notes, proposals, and the channel log. Use it whenever the operator asks what already happened — 'recall X', 'what did I learn/decide/figure out about X', 'when did we last touch X', 'did we ever discuss X',
$ npx -y skills add gtapps/claude-code-hermit --skill recall --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/recallContext preview
The summary Claude sees to decide when to auto-load this skill.
Full-text search over the recorded past: session reports, compiled notes, proposals, and the channel log. Use it whenever the operator asks what already happened — 'recall X', 'what did I learn/decide/figure out about X', 'when did we last touch X', 'did we ever discuss X',
name: recall description: "Full-text search over the recorded past: session reports, compiled notes, proposals, and the channel log. Use it whenever the operator asks what already happened — 'recall X', 'what did I learn/decide/figure out about X', 'when did we last touch X', 'did we ever discuss X', 'have we seen this error before', 'find that proposal about X', 'yesterday I asked you to X' — even when you could grep or Read .claude-code-hermit/ yourself: this search also covers the channel-message database that file greps miss, ranks hits by relevance and recency, and returns a bounded file:line digest instead of raw dumps. Not for current file contents (reading OPERATOR.md or listing open proposals), live status, or forward-looking briefings."
Retrieve relevant history from session reports, compiled artifacts, and proposals by keyword search.
**Not `/hermit-health`** — that synthesizes a snapshot of the hermit's current state (alerts, routines, fragile zones, stale proposals, recent learnings). This skill does full-text retrieval: you give it a query, it returns matching history with `file:line` snippets.
If this skill was invoked from a channel-arrived message (the inbound prompt contains a `<channel source="...">` tag), deliver the response via that channel's reply tool. Otherwise emit to conversation.
When the question is about a **configuration change** rather than past work — "did something change my settings", "when did the heartbeat interval change", "why is my model different", "who turned that off" — the answer lives in the settings audit ledger, which `search.ts` does not index. Run:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/settings-edit.ts .claude-code-hermit/config.json history [dotted.path] [--limit N]Pass a dotted path when the operator named a specific setting (`heartbeat`, `model`, `channels`); omit it for "did anything change". Each row names the actor: `settings-edit` is an operator edit, `hermit-evolve` a change an upgrade made, `evolve-finalize` an upgrade's version stamp alone, `channel-hook` a channel the hermit learned on its own, `hermit-start`/`hermit-stop` a boot flip, `apply-settings` a permissions sync. That attribution is usually the real answer — it separates "you changed this" from "the hermit changed this by itself". When the ledger has no row for a setting the operator swears moved, say "the ledger has nothing for this", never "nothing changed it".
Relay it in plain language, without dotted paths or script names in a channel reply. An empty ledger means nothing has changed since the audit trail began. Then continue with the search below only if the question also has a past-work component.
Extract the search query from the operator's message — the topic or phrase after "recall", "what did I learn about", "when did we last touch", "what did we decide about", or similar phrasing. Then run:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/search.ts .claude-code-hermit "<query>"The query is untrusted operator/channel input. Pass it as a single literal argument: strip any double quotes, backticks, `$`, `;`, and `|` from the extracted query before substituting it into the command so it cannot terminate the quoted string or chain a second command.
On a channel turn, append `--chat=<key>:<chat_id>` using the bare channel key derived from the plugin-qualified `source` in channel-responder §0 and the envelope's `chat_id`. A conversation helper has no envelope: when this session's task context names a conversation audience (spawn-session's helper contract states one), append that key as `--chat=<key>` instead — it is already `<sourceKey>:<chat_id>`. Without `--chat`, search is unscoped, for terminal use only. `--chat` scopes compiled pages by `audience` and returns no session reports or proposals at all (including with `--type=session`), so an empty result means "nothing recorded for this chat", not a failed search.
Optional filters (append to the command as needed):
Relay the script output to the operator. Each result shows:
A result labelled `[channel]` instead of a file path is a hit from the episodic channel log (past Discord/Telegram DM text, not a file) — relay it as-is, but see Guards below on how to frame it.
Also surface entries from your loaded `MEMORY.md` that relate to the query under a **From memory** heading, each tagged `memory/<file>.md`. Read the few that matter; don't chase cross-links or read the full corpus. Skip silently if no `MEMORY.md` is loaded.
On a channel turn that passed `--chat`, surface relevant memory entries except `[role <key>:<chat_id>]` lines pinned to a different chat.
If neither the script nor auto-memory returned anything: report "Nothing found for '`<query>`' in sessions, compiled artifacts, proposals, channel history, or auto-memory."
If results were found, add a brief summary: e.g. "3 results — most recent: `sessions/S-042-REPORT.md` (2026-05-15)." Keep it to one line.
If the operator asks for more detail on a specific result, Read that file and summarize the relevant section. On a `--chat` turn, detail Reads are limited to files the scoped search returned.
If answering required synthesizing across **3 or more distinct sources** (session reports
If you know Claude Tag, the idea will feel familiar: hand Claude work through a channel, such as Discord, Telegram, or your custom integration, and get results back there.
Repo: gtapps/claude-code-hermit
Updates the minimum core version requirement for a fleet plugin in all three canonical places: `required_core_version` and `requires["claude-code-hermit"]` in…
Changelog and commit — lightweight motion for day-to-day plugin dev work in the monorepo. One commit per plugin scope; CHANGELOG and staging routed by detected…
Documentation-drift audit for the plugin monorepo. Audits either each scoped plugin's unreleased changelog claims or its latest shipped release from the…
Explain in plain language what a fix, feature, PR, or plan will actually change for downstream hermits and the operators chatting with them — a before/after…
Use this skill whenever the user wants to release, ship, prep, or cut versions for two or more plugins together on the current branch. Trigger on phrasings…
Daily release-pipeline digest with a change gate — reports which plugins are pending release, whether main's CI is green, which branches went stale, and GitHub…