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…
Runs the full feed-to-brief pipeline — fetches every configured source, scores and filters items by relevance, writes a human-voice brief per FEEDS.md, delivers it to the operator's configured channel, and archives it with rich frontmatter. Invoke with /feed-hermit:feed-brief
$ npx -y skills add gtapps/claude-code-hermit --skill feed-brief --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/feed-briefContext preview
The summary Claude sees to decide when to auto-load this skill.
Runs the full feed-to-brief pipeline — fetches every configured source, scores and filters items by relevance, writes a human-voice brief per FEEDS.md, delivers it to the operator's configured channel, and archives it with rich frontmatter. Invoke with /feed-hermit:feed-brief
name: feed-brief description: >- Runs the full feed-to-brief pipeline — fetches every configured source, scores and filters items by relevance, writes a human-voice brief per FEEDS.md, delivers it to the operator's configured channel, and archives it with rich frontmatter. Invoke with /feed-hermit:feed-brief --morning|--evening|--slot <name> for scheduled or on-demand briefs. Reads feed-sources.md, feed-categories.md, and FEEDS.md from the project root.
Run the full 7-phase brief pipeline for this project. Config lives at the project root (`feed-sources.md`, `feed-categories.md`, `FEEDS.md`); state and archive live under `.claude-code-hermit/`.
Resolve `<slot>` from the flag before starting. All filenames below use that resolved value.
1. Read `FEEDS.md` — brief philosophy, scoring rules, output format, and section guidance. 2. Read `feed-sources.md` — full source list with types and URLs. 3. Read `feed-categories.md` — operator's current focus areas and priority tiers (P1/P2). 4. Read `.claude-code-hermit/config.json` — the `feed.enrichments.*` and `feed.reaction_feedback` gates consulted in Phases 3 and 5b. A gate runs only when its value is `true`; treat an absent key as disabled.
Before dispatch, run `bun ${CLAUDE_PLUGIN_ROOT}/scripts/source-fetch-result.ts new-run`. Keep its returned UUID as the expected `run_id` for this invocation; never infer it from an existing file or the agent's reply. If generation fails, follow the wholesale fetch-failure path below without dispatching.
Dispatch the `@feed-hermit:source-fetcher` subagent (model: haiku) to fetch all `web` and `rss` sources from `feed-sources.md`. Pass the full source list (URLs + names), the resolved `<slot>`, the absolute project root and output path, and the generated `run_id` to copy exactly into the output JSON.
**Output-path contract:** the agent writes its extracted items to `tmp/feed-source-items-<slot>.json` in the project root (never `/tmp/`). Pass `<absolute-project-root>/tmp/feed-source-items-<slot>.json` to the agent so its inherited working directory cannot redirect the write. Items are nested under `sources[]`, each item: `{title, summary, url, published_at, source, section, author}`. No scoring — extraction only. After the agent returns, run:
bun ${CLAUDE_PLUGIN_ROOT}/scripts/source-fetch-result.ts verify "<absolute-output-path>" "<expected-run-id>"Use the original expected ID, not an ID read from the output. On exit 0, consume only the accepted JSON printed by this command; do not re-read the raw file for candidate items. The verifier checks run identity and the envelope, not whether network fetches occurred.
**Reconcile against the file, not the reply** (mapping owned by `docs/schema.md` §5). The agent's reply is a claim; only the verified file payload is eligible for reconciliation. This classifies `web`/`rss` sources only — `chrome`/`reddit`/`reddit-home`/`x` sources are absent from `sources[]` by design and are classified in Phase 2:
`sources_skipped`. Continue to Phase 2 — do not re-dispatch the agent — and note the wholesale fetch failure in the brief's Source notes.
reply claimed.
stays provisional: Phase 6 splits `sources_used` vs `sources_quiet` on what survived Phase 3 scoring, so a source whose items were all filtered out still lands in `sources_quiet`.
For each source whose type is `chrome`, `reddit`, `reddit-home`, or `x`:
available (search `mcp__claude-in-chrome__` via ToolSearch). If Chrome is not available, SKIP the source gracefully and mark it in `sources_skipped` — Chrome availability is a deployment concern; do not attempt to launch a browser. If available, fetch per the operator's `FEEDS.md` Chrome guidance (process sequentially, extract the visible top items) into the item format.
Process Chrome-backed sources one at a time. Deduplicate against Phase 1 items.
Build a `fetch_log` array tracking per-source efficiency. Populate during Phases 1–2, finalize after Phase 3.
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…