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@latestor:
bunx feed-sage@latestCargo users can install and run it directly:
cargo install feed-sage
feed-sageThe 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-sageSetup 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 --yesManual 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,zedThe 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.mdRestart 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
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 latestsummarize todaypull 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 pullGenerate a digest:
feed-sage digestKeep pulling on a schedule:
feed-sage serveSearch local items:
feed-sage search "agent memory"Deep-read one URL:
feed-sage deep-read https://example.com/articleMCP Tools
Agents configured by feed-sage init get these tools:
feed_status: inspect source and index statusfeed_pull: pull enabled public sources and refresh the digest cachefeed_config: read the current custom interests and source definitionsfeed_configure: semantically add/remove/replace interests and sources; can pull immediately withpull_nowfeed_items: list locally collected feed items with feedback filtersfeed_search: search collected feed itemsfeed_digest: generate a digest from high-signal items or read digest historyfeed_feedback: archive, unarchive, bookmark, unbookmark, or mark learnedfeed_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 serveBy 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 18524Use --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
- 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 = 20Default local data:
~/.feed-sage/
feed.config.toml
data/items.jsonl
data/digests.jsonl
exports/events.jsonlexports/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 --forceIf you want to reconfigure only one target:
feed-sage init --targets codex --forceIf npm/Bun cannot run the first install, make sure Cargo exists:
cargo --versionThen rerun:
npx feed-sage@latestLibrary
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(())
# }