Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx skills add Knuckles-Team/freshrss-agent --skill freshrss-knowledge-ingestiongit clone --depth 1 https://github.com/Knuckles-Team/freshrss-agentWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/knuckles-team/freshrss-agent/freshrss-knowledge-ingestion)<a href="https://agentmods.dev/skills/knuckles-team/freshrss-agent/freshrss-knowledge-ingestion"><img src="https://agentmods.dev/badge/skills/knuckles-team/freshrss-agent/freshrss-knowledge-ingestion/github.svg" alt="Measured on agentmods" height="20"></a>Or the 80×15 button, for a site that already has a row of RSS and ATOM ones. Only the verdict fits; the numbers stay here.
<a href="https://agentmods.dev/skills/knuckles-team/freshrss-agent/freshrss-knowledge-ingestion"><img src="https://agentmods.dev/badge/skills/knuckles-team/freshrss-agent/freshrss-knowledge-ingestion.svg" alt="Reviewed on agentmods" width="80" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00115 | $0.00950 |
| Opus 5 | $0.00057 | $0.00475 |
| Sonnet 5 | $0.00023 | $0.00190 |
| Haiku 4.5 | $0.00012 | $0.00095 |
Grade A, and why
freshrss-knowledge-ingestion scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 8d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 82 lines — stays where its author put it; the contents beside it link to each section on GitHub.
FreshRSS Knowledge Ingestion
Push FreshRSS content into the ONE epistemic-graph knowledge graph so feed items
become semantically searchable documents and feeds become typed, linkable nodes.
Ingestion is best-effort and engine-guarded: with no reachable engine it cleanly
no-ops (ingested: null) and the fetch still returns.
When to use
- Build a searchable corpus of feed items (
:Documentwith body + source_uri). - Materialize the feed topology (
:FeedSubscription→:FeedCategory) in the KG. - Run a delta sweep that both reads and persists what is new.
When NOT to use
- Just reading/triaging a stream without persisting →
freshrss-feed-reader. - Managing which feeds are followed / their tags →
freshrss-subscription-management.
Prerequisites & environment
Connect via the mcp-client skill against the freshrss-agent MCP server.
A reachable epistemic-graph engine is required for a non-null result.
| Variable | Required | Notes |
|---|---|---|
FRESHRSS_URL / FRESHRSS_USER / FRESHRSS_API_PASSWORD |
✅ | GReader access |
FRESHRSS_KG_AUTO_INGEST |
optional | Default on; set 0 to disable auto-ingest on every fetch |
Tools & actions
| Tool | Purpose |
|---|---|
freshrss_ingest_items |
Fetch a stream, push its items → :Document nodes |
freshrss_ingest_subscriptions |
List subscriptions, push → :FeedSubscription + :FeedCategory (+ :inCategory) |
Node ids follow freshrss:<class>:<externalId> (freshrss:item:<id>,
freshrss:subscription:<id>, freshrss:category:<id>).
Recipes (params_json)
Ingest the newest 200 items across everything:
{"stream_id":"user/-/state/com.google/reading-list","count":200,"order":"n"}
Delta ingest since a watermark:
{"stream_id":"user/-/state/com.google/reading-list","newer_than":1719792000,"count":500}
Ingest the whole subscription topology (no params):
{}
Gotchas
- Ingestion is best-effort: a
nullingestedmeans no engine was reachable, not a failure — the listing still succeeds. freshrss_ingest_itemsaccepts the same params asfreshrss_readerstream_contents; page withcontinuationfor a full sweep.- Feed items land as
:Document(type-forced) carryingtext,title,source_uri,published, and the originatingfeed_title/feed_stream_id. - Fetching via
freshrss_readeralready auto-ingests items by default; callfreshrss_ingest_itemsexplicitly when you want an ingest without the read path, orfreshrss_ingest_subscriptionsfor the feed topology. typeon every node matches a class federated by the package'sfeed.ttlontology leg (:Document,:FeedSubscription,:FeedCategory).
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 8d ago First seen · 82 lines · 115 tokens per session scan A f92c5933ee28
freshrss-knowledge-ingestion is a skill published in the GitHub repository Knuckles-Team/freshrss-agent (0 stars, last pushed 11d ago), licensed MIT. It adds 115 tokens to every session and 950 once invoked, about $0.0006 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
audio-transcriber-knowledge-graph
Native knowledge-graph ingestion of Whisper transcripts on the audio-transcriber MCP server — transcribe an audio/video file and push it into the epistemic-graph in one call: the raw audio as a shared :MediaAsset blob, the transcript text as a :Document, and each Whisper segment as a :TranscriptSegment node linked…
jellyfin-kg-ingestion
Natively ingest a Jellyfin library into the epistemic-graph knowledge graph via the jellyfin-mcp MCP server — push library items as typed :MediaAsset/:Book nodes with :hasGenre/:performedBy/:authoredBy links and item overviews as searchable :Document nodes (jellyfiningestlibrary), and item posters as content-addressed…
archivebox-kg-ingestion
Natively ingest an ArchiveBox archive into the epistemic-graph knowledge graph via the archivebox-api MCP server — push snapshots as typed :Snapshot nodes (with :Tag + :hasTag links and per-snapshot :Document page-text) and archive results as :ArchiveResult nodes, best-effort, with the Wire-First ingest tools. Use…
mattermost-kg-ingestion
Natively ingest Mattermost into the epistemic-graph knowledge graph via the mattermost-mcp MCP server — push teams, channels and users as typed :Team/:Channel/:Person nodes, messages as :Document nodes, and file attachments as :MediaAsset blobs, in one ACID path. Use when the agent must make a Mattermost workspace…
graphify
Use for any question about a codebase, its architecture, file relationships, or project content — especially when graphify-out/ exists, where the question should be treated as a graphify query first. Turns any input (code, docs, papers, images, videos) into a persistent knowledge graph with god nodes, community…
backfill-enumerate-drain
How to backfill a newly-added repo or team — the enumerate-then-drain loop, the single-event contract, and resume-safe todo discipline. Load this when handling a .added seed event with the planner on.