Skip to content
Automation
Skill

/feed-brief

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 /hermitd-feed:feed-brief

From plugin
hermitd
8489 skills14 agents

Claude Code

$ npx -y skills add gtapps/hermitd --skill feed-brief --agent claude-code

SKILL.md

feed-brief.SKILL.md
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 /hermitd-feed: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.

Feed Brief

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 `.hermit/`.

Flags

  • `--morning`: slot `morning`. Forward-looking. Emphasize what's new since yesterday evening, what's worth opening today, emerging patterns. Tone: calm, sharp, selective.
  • `--evening`: slot `evening`. Backward-looking. Emphasize what changed during the day, what escalated or faded, what to carry into tomorrow. Tone: slightly more reflective.
  • `--slot <name>`: custom slot label (e.g. `midday`). Use `<name>` verbatim wherever `<slot>` appears below. Orientation defaults to the morning (forward-looking) framing unless the operator's `FEEDS.md` says otherwise.

Resolve `<slot>` from the flag before starting. All filenames below use that resolved value.

Steps

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 `.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.

Phase 1 — Web/RSS sources

Before dispatch, run `bun ${CLAUDE_PLUGIN_ROOT}/scripts/source-fetch-result.ts new-run "<absolute-output-path>"`. The path is the output-path contract's `<absolute-project-root>/tmp/feed-source-items-<slot>.json`. It deletes the previous output so a fetch that writes nothing surfaces as a missing file. Keep its printed `run_id` as the expected ID for this invocation; never infer it from an existing file or the agent's reply. If it prints `error`, follow the wholesale fetch-failure path below without dispatching.

Dispatch the `@hermitd-feed: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. It prints either `{"status":"rejected","reason":...}` or the accepted payload. Consume only that accepted JSON; 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 `${CLAUDE_PLUGIN_ROOT}/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:

  • Run ID generation fails, or verification prints `status: "rejected"` → every `web`/`rss` source in `feed-sources.md` goes to

`sources_skipped`. Continue to Phase 2 — do not re-dispatch the agent — and note the wholesale fetch failure in the brief's Source notes.

  • A `web`/`rss` source with no entry in `sources[]` → `sources_skipped`, regardless of what the

reply claimed.

  • Entry with `status: "failed"`, or any status other than `"ok"` → `sources_skipped`.
  • Entry with `status: "ok"` and empty `items[]` → `sources_quiet`. An entry that did yield items

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`.

  • Reply disagrees with the file → the file wins; note the discrepancy in the brief's Source notes.

Phase 2 — Chrome, reddit, and X sources

For each source whose type is `chrome`, `reddit`, `reddit-home`, or `x`:

  • **`reddit`:** try `bun ${CLAUDE_PLUGIN_ROOT}/scripts/reddit-fetch.ts <subreddit> [limit]` FIRST.
  • `posts` → map each post (`title, url, score, comments, permalink`) into the item format.
  • `status: "unavailable"` or `error` → fall back to Chrome (below). If Chrome is unavailable, skip and mark the source in `sources_skipped`.
  • **`chrome` / `reddit-home` / `x`:** these require a running Chrome. Check whether the Chrome MCP tools are

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.

Phase 2.5 — Collect fetch stats

Build a `fetch_log` array tracking per-source efficiency. Populate during Phases 1–2, finalize after Phase 3.

  • **After Phase 1:** count items per source name → `items_yielded`. `tokens_
Read more
@gtapps
Ships withhermitd

Run an always-on Claude Code agent on your own machine, for you or your team. Start and orchestrate sessions from chat in any project it can reach. Take over the same session in the Claude app or the CLI.

8489 skills14 agents
Get the whole plugin

Stars on GitHub

Momentum

stars in total
84
Star history of gtapps/claude-code-hermit on GitHub, a chart by star-history.com

Other skills on hermitd.

bump-core-req

bump-core-req

Updates the minimum core version requirement for a fleet plugin in all three canonical places: `required_core_version` and…

@gtapps@gtappsInstall Skill
commit

commit

Changelog and commit — lightweight motion for day-to-day plugin dev work in the monorepo. One commit per plugin scope; CHANGELOG…

@gtapps@gtappsInstall Skill
docs-drift

docs-drift

Documentation-drift audit for the plugin monorepo. Audits either each scoped plugin's unreleased changelog claims or its latest…

@gtapps@gtappsInstall Skill
downstream-impact

downstream-impact

Explain in plain language what a fix, feature, PR, or plan will actually change for downstream hermits and the operators chatting…

@gtapps@gtappsInstall Skill
fleet-release

fleet-release

Use this skill whenever the user wants to release, ship, prep, or cut versions for two or more plugins together on the current…

@gtapps@gtappsInstall Skill
pipeline-digest

pipeline-digest

Daily release-pipeline digest with a change gate — reports which plugins are pending release, whether main's CI is green, which…

@gtapps@gtappsInstall Skill

More skills from other plugins.

agent-builder

agent-builder

Load immediately after an Agent intent, before the first agent_builder_* call. Governs how you create, configure, test, and…

n8n12d209k
@n8n-io@n8n-ioInstall Skill
browser-use

browser-use

Direct browser control via CDP for web interaction: automation, scraping, testing, screenshots, and site/app work. Also covers…

@browser-use@browser-useInstall Skill
agent-browser

agent-browser

Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling…

@vercel-labs-2@vercel-labs-2Install Skill
add-anydoc

add-anydoc

Add local office-document-to-Markdown conversion to NanoClaw agent containers with the pinned Firecrawl AnyDoc CLI. Use when…

@nanocoai@nanocoaiInstall Skill

Questions about feed-brief.

Which coding agents can use feed-brief?
feed-brief installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.