npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

feed-sage

v0.1.6

Published

AI-native research feed engine with CLI, MCP, scheduler hooks, and an English dashboard.

Downloads

845

Readme

Feed Sage

AI-native research feed for agents.

Feed Sage collects public research/content sources, filters them against your interests, deep reads useful items, and turns the result into local MCP tools, agent skills, JSONL data, and an English dashboard.

It follows Sage's original feed workflow: configured public sources -> collected items -> feedback state -> digest cache -> agent-facing skills/MCP.

It is not a messaging hub. Slack, Feishu/Lark, Email, and Teams are out of scope.

Start

Run Feed Sage from the project you want your agent to use:

npx feed-sage@latest

or:

bunx feed-sage@latest

Cargo users can install and run it directly:

cargo install feed-sage
feed-sage

The first npm/Bun run launches the Rust CLI. If Cargo is not installed yet, install Rust from https://rustup.rs, then run the command again.

Build from source:

git clone https://github.com/EvanL1/feed-sage.git
cd feed-sage
cargo install --path .
feed-sage

Setup Flow

feed-sage and feed-sage init run the same setup flow.

During setup, Feed Sage:

  • creates ~/.feed-sage/feed.config.toml
  • asks which agents/editors to configure
  • adds the Feed Sage MCP server to the selected project config files
  • installs bundled Feed Sage skills into the current project
  • prints a ready-to-use prompt for your agent

Supported setup targets:

  • Cursor
  • Claude Code
  • Codex
  • Hermes
  • OpenCLWA
  • Zed

Non-interactive setup installs every supported target:

feed-sage init --yes

Manual setup shows a checkbox selector for targets. Use Space to toggle targets and Enter to confirm. You can also choose targets explicitly:

feed-sage init --targets cursor,claude,codex,hermes,openclwa,zed

The setup writes:

.mcp.json
.cursor/mcp.json
.zed/settings.json
.agents/skills/sage-feed-researcher/SKILL.md
.agents/skills/sage-feed-curator/SKILL.md
.agents/skills/sage-feed-configurator/SKILL.md

Restart the selected agent/editor after setup so it reloads MCP servers and skills.

Install From Your Agent

If you are already inside Hermes, OpenCLWA, Claude Code, Codex, or another agent, paste this prompt into the agent from the project root:

Install Feed Sage for this project.

1. Confirm this is the project root.
2. Check that either npx, bunx, or cargo is available. If none are available,
   tell me what to install.
3. Run one of these commands, using the first one available:
   npx feed-sage@latest
   bunx feed-sage@latest
   cargo install feed-sage && feed-sage
4. Install Feed Sage for all supported agent targets:
   feed-sage init --targets all --force
5. Verify these exist:
   ~/.feed-sage/feed.config.toml
   .mcp.json
   .agents/skills/sage-feed-researcher/SKILL.md
   .agents/skills/sage-feed-curator/SKILL.md
   .agents/skills/sage-feed-configurator/SKILL.md
6. Tell me which files were written and which agent/editor I should restart.

The same prompt is available in prompts/install-feed-sage.md.

First Prompt

After setup, ask your agent:

Use Feed Sage to pull latest research and summarize today's strongest signals.

Other useful prompts:

Use Feed Sage to find new Rust agent tooling and build a reading queue.
Configure Feed Sage sources for AI agents, Rust, and developer tools.
Use Feed Sage to generate a topic radar for local-first AI workflows.

Dashboard

feed-sage dashboard

Feed Sage dashboard

The dashboard runs at http://127.0.0.1:18523 by default. It is an English, content-first review surface with:

  • Pull now, generate digest, and refresh controls
  • Light/dark mode toggle
  • Ask bar for local commands and questions
  • Today view for collected items
  • Topic/source clustering
  • Deep-read candidates
  • Source health/config view
  • Digest archive
  • Search and source-type filtering

The Ask bar can run direct feed actions:

  • pull latest
  • summarize today
  • pull latest and summarize
  • open-ended questions, which search and cite the local feed

For natural-language reasoning, connect the dashboard flow to an LLM agent through the Feed Sage MCP server.

Daily Use

Pull enabled sources:

feed-sage pull

Generate a digest:

feed-sage digest

Keep pulling on a schedule:

feed-sage serve

Search local items:

feed-sage search "agent memory"

Deep-read one URL:

feed-sage deep-read https://example.com/article

MCP Tools

Agents configured by feed-sage init get these tools:

  • feed_status: inspect source and index status
  • feed_pull: pull enabled public sources and refresh the digest cache
  • feed_config: read the current custom interests and source definitions
  • feed_configure: semantically add/remove/replace interests and sources; can pull immediately with pull_now
  • feed_items: list locally collected feed items with feedback filters
  • feed_search: search collected feed items
  • feed_digest: generate a digest from high-signal items or read digest history
  • feed_feedback: archive, unarchive, bookmark, unbookmark, or mark learned
  • feed_deep_read: fetch and summarize one URL

For compatibility with Sage's original feed skills, the MCP server also exposes sage_feed_items, sage_feed_search, sage_feed_digest, sage_feed_feedback, sage_feed_pull, sage_feed_config, and sage_feed_configure.

Example semantic configuration:

{
  "goal": "collect LLM memory research",
  "mode": "replace",
  "pull_now": true
}

That creates custom source instances and interest keywords for the goal, writes the config, pulls enabled sources, and refreshes the digest.

Manual server command:

feed-sage mcp serve

By default, feed-sage mcp serve runs in shared-daemon mode. The process started by each stdio MCP client is only a thin proxy; it connects to one local Feed Sage MCP daemon on 127.0.0.1:18524, starting it if needed. This keeps the actual Feed Sage MCP service single even when multiple agents/editors launch the same MCP command.

The shared MCP daemon also starts the dashboard at http://127.0.0.1:18523 by default.

This still leaves one small stdio proxy process per agent. That part is unavoidable for command-based stdio MCP clients because each client needs its own stdin/stdout pipe.

Useful variants:

feed-sage mcp serve --port 18524
feed-sage mcp serve --dashboard-port 18523
feed-sage mcp serve --no-dashboard
feed-sage mcp serve --stdio
feed-sage mcp daemon --port 18524

Use --stdio only if you explicitly want the old one-process-per-client MCP server behavior.

Sources

Current source connectors:

  • RSS / Atom
  • Hacker News
  • GitHub Trending
  • Reddit
  • arXiv
  • Web page

Sources and interests are custom. Prefer the MCP feed_configure tool for agent-driven setup, add/remove source operations, and per-source keyword tuning. The dashboard Sources view is a control surface over the same config.

interests controls scoring and digest priority:

interests = ["AI agents", "Rust", "developer tools", "research systems"]

Each [[sources]] block controls one input source. Examples:

[[sources]]
id = "github-rust"
kind = "github_trending"
enabled = true
language = "rust"
limit = 20

[[sources]]
id = "arxiv-ai"
kind = "arxiv"
enabled = true
categories = ["cs.AI", "cs.CL", "cs.LG"]
keywords = ["agent", "tool use", "retrieval", "reasoning"]
limit = 20

[[sources]]
id = "rss-example"
kind = "rss"
enabled = true
urls = ["https://example.com/feed.xml"]
limit = 20

Default local data:

~/.feed-sage/
  feed.config.toml
  data/items.jsonl
  data/digests.jsonl
  exports/events.jsonl

exports/events.jsonl can be consumed by Sage through an external JSONL channel.

Troubleshooting

If the agent cannot see Feed Sage, restart the agent/editor and run setup again:

feed-sage init --force

If you want to reconfigure only one target:

feed-sage init --targets codex --force

If npm/Bun cannot run the first install, make sure Cargo exists:

cargo --version

Then rerun:

npx feed-sage@latest

Library

use feed_sage::{FeedConfig, FeedEngine};

# async fn example(config: FeedConfig) -> anyhow::Result<()> {
let engine = FeedEngine::new(config);
let new_items = engine.pull().await?;
let digest = engine.digest(Some("Daily Research Brief"), 12).await?;
println!("{}", digest.markdown);
# Ok(())
# }