{"id":51067902,"url":"https://github.com/ximilalaxiang/yourrss","last_synced_at":"2026-06-23T08:02:51.116Z","repository":{"id":349515440,"uuid":"1202646337","full_name":"XimilalaXiang/YourRSS","owner":"XimilalaXiang","description":"AI-powered RSS digest from FreshRSS with Cortex Memory personalized recommendations. Smart scoring, preference learning, Blinko integration. Works with OpenClaw, Cursor, Claude Code.","archived":false,"fork":false,"pushed_at":"2026-04-06T11:13:43.000Z","size":66,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-06T11:20:40.710Z","etag":null,"topics":["ai-agent","ai-digest","ai-summary","blinko","claude-code","cortex-memory","cursor","freshrss","google-reader-api","mcp","news-digest","openclaw","openclaw-skill","personalized-recommendations","rss","rss-aggregator","rss-reader","self-hosted"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/XimilalaXiang.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-06T08:48:00.000Z","updated_at":"2026-04-06T11:13:46.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/XimilalaXiang/YourRSS","commit_stats":null,"previous_names":["ximilalaxiang/yourrss"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/XimilalaXiang/YourRSS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XimilalaXiang%2FYourRSS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XimilalaXiang%2FYourRSS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XimilalaXiang%2FYourRSS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XimilalaXiang%2FYourRSS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/XimilalaXiang","download_url":"https://codeload.github.com/XimilalaXiang/YourRSS/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/XimilalaXiang%2FYourRSS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34680621,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agent","ai-digest","ai-summary","blinko","claude-code","cortex-memory","cursor","freshrss","google-reader-api","mcp","news-digest","openclaw","openclaw-skill","personalized-recommendations","rss","rss-aggregator","rss-reader","self-hosted"],"created_at":"2026-06-23T08:02:45.192Z","updated_at":"2026-06-23T08:02:51.094Z","avatar_url":"https://github.com/XimilalaXiang.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# YourRSS\n\n[English](./README.md) | [中文](./README_CN.md)\n\nYour personal AI-powered RSS digest — built on self-hosted FreshRSS.\n\nYourRSS fetches articles from your FreshRSS instance, scores them by relevance and quality with AI, generates concise summaries, and learns your reading preferences through [Cortex](https://github.com/rikouu/cortex) Memory. Every digest gets smarter.\n\nWorks with **OpenClaw**, **Cursor**, **Claude Code**, **OpenCode**, and any AI agent that can run shell scripts.\n\n## Features\n\n- **Smart Digest** — AI scores and ranks your RSS articles into a daily briefing\n- **Flexible AI Provider** — Use the current Agent or an external model (OpenAI, Gemini, DeepSeek, Qwen, Ollama, or any OpenAI-compatible gateway)\n- **Full-text Analysis** — Scores based on complete article content, not just summaries\n- **Concurrent Processing** — Configurable batch size and concurrency for fast scoring (300 articles in ~3min)\n- **Two-phase Scoring** — Lightweight scores for all articles + detailed summaries for top N\n- **Personalized Recommendations** — Cortex Memory `reader` agent learns what you like\n- **Preference Learning** — Like/dislike to teach the system; explicit `/prefer` commands\n- **Feed Management** — Subscribe/unsubscribe feeds directly via commands\n- **Blinko Integration** — Save highlights to your Blinko knowledge base\n- **Multi-language** — Chinese and English output\n- **Category Filtering** — Focus on specific FreshRSS categories\n- **100% Self-hosted** — FreshRSS + Cortex + Blinko = your infrastructure, your data\n\n## Quick Start\n\n### OpenClaw\n\n```bash\nclawhub install yourrss\n```\n\nThen: `/digest`\n\n### Cursor / Claude Code / Other Agents\n\n```bash\ngit clone https://github.com/XimilalaXiang/YourRSS.git\n```\n\nReference the `SKILL.md` in your agent configuration.\n\n## Setup\n\n### 1. FreshRSS (Required)\n\n```bash\nexport FRESHRSS_URL=\"https://your-freshrss-instance.com\"\nexport FRESHRSS_USER=\"your-username\"\nexport FRESHRSS_API_PASSWORD=\"your-api-password\"\n```\n\nOr create a `.env` file in the project root (see `.env.example`).\n\n### 2. Cortex Memory (Required)\n\n```bash\nexport CORTEX_URL=\"http://localhost:21100\"\nexport CORTEX_TOKEN=\"your-auth-token\"    # optional\nexport CORTEX_AGENT=\"reader\"              # isolated namespace for RSS\n```\n\nThe `reader` agent is auto-created on first use. Your RSS preferences are isolated from other Cortex agents.\n\n### 3. AI Scoring Provider (Optional)\n\n```bash\n# \"agent\" = Agent handles scoring (the AI agent in your current session)\n# \"openai\" = external OpenAI-compatible API (saves Agent tokens)\nexport AI_PROVIDER=\"agent\"\nexport AI_BASE_URL=\"https://api.openai.com/v1\"   # or your gateway\nexport AI_API_KEY=\"sk-...\"\nexport AI_MODEL=\"gpt-4o-mini\"\n```\n\nCompatible with: OpenAI, Gemini, DeepSeek, Qwen, Ollama, or any OpenAI-compatible proxy (e.g. [vercel-gateway-tools](https://github.com/XimilalaXiang/vercel-gateway-tools)).\n\n### 4. Blinko (Optional)\n\n```bash\nexport BLINKO_URL=\"https://your-blinko-instance.com\"\nexport BLINKO_TOKEN=\"your-api-token\"\n```\n\n## How It Works\n\n```\nFreshRSS API → Fetch Articles → Cortex Preferences → AI Scoring → AI Summary → Digest\n     │              │                   │                  │             │           │\n  Google Reader  fetch-freshrss.mjs  REST API to       relevance/    2-3 sentence  Telegram\n  API            (zero deps)         reader agent      quality/       summaries     message\n                                     /api/v1/recall    timeliness\n```\n\n**Personalization loop:**\n```\nUser reads digest → /like or /dislike → Cortex stores preference\n     ↓                                          ↓\nNext digest ← scores biased by preferences ← Cortex recalls\n```\n\n## Commands\n\n| Command | Description |\n|---------|-------------|\n| `/digest` | Generate AI digest (default: last 24h) |\n| `/digest 48h` | Digest from last 48 hours |\n| `/recommend` | Personalized recommendations from Cortex |\n| `/like 3` | Like article 3 → stored in Cortex |\n| `/dislike 2` | Dislike article 2 → stored in Cortex |\n| `/save 1` | Save article 1 to Blinko |\n| `/prefer topic:AI security` | Explicit preference |\n| `/forget topic:crypto` | Remove a preference |\n| `/feeds` | List FreshRSS subscriptions |\n| `/categories` | List FreshRSS categories |\n| `/subscribe \u003curl\u003e` | Subscribe to a new feed |\n| `/unsubscribe \u003cid\u003e` | Unsubscribe from a feed |\n\n## Scripts\n\n| Script | Purpose |\n|--------|---------|\n| `scripts/fetch-freshrss.mjs` | FreshRSS Google Reader API client |\n| `scripts/cortex-api.mjs` | Cortex Memory REST API client |\n| `scripts/score-articles.mjs` | AI scoring: agent passthrough or external OpenAI API |\n| `scripts/load-env.mjs` | Load .env config (shared by all scripts) |\n\n### fetch-freshrss.mjs\n\n```bash\n# Fetch unread articles from last 24h\nnode scripts/fetch-freshrss.mjs --hours 24 --count 50 --unread\n\n# Filter by category\nnode scripts/fetch-freshrss.mjs --hours 24 --category \"Technology\" --unread\n\n# List categories / feeds\nnode scripts/fetch-freshrss.mjs --categories\nnode scripts/fetch-freshrss.mjs --feeds\n\n# Subscribe / unsubscribe\nnode scripts/fetch-freshrss.mjs --subscribe \"https://example.com/feed.xml\" --subscribe-category \"Tech\"\nnode scripts/fetch-freshrss.mjs --unsubscribe \"feed/123\"\n```\n\n### score-articles.mjs\n\n```bash\n# Score via external OpenAI-compatible API (saves Agent tokens)\nnode scripts/fetch-freshrss.mjs --hours 24 --count 100 \\\n  | node scripts/score-articles.mjs --top 15 --language zh\n\n# With user preferences from Cortex\nnode scripts/cortex-api.mjs preferences \u003e /tmp/prefs.json\nnode scripts/fetch-freshrss.mjs --hours 48 --count 200 \\\n  | node scripts/score-articles.mjs --top 15 --preferences /tmp/prefs.json\n\n# Tune batch size and concurrency\nnode scripts/fetch-freshrss.mjs --hours 72 --count 300 \\\n  | node scripts/score-articles.mjs --top 20 --batch-size 10 --concurrency 20\n\n# Override model on-the-fly\n... | node scripts/score-articles.mjs --provider openai --model google/gemini-3-flash\n```\n\n### cortex-api.mjs\n\n```bash\n# Initialize reader agent (run once)\nnode scripts/cortex-api.mjs init\n\n# Get user preferences\nnode scripts/cortex-api.mjs preferences\n\n# Record a like\nnode scripts/cortex-api.mjs like \"Article Title\" --source \"Blog\" --topics \"AI,Go\"\n\n# Search memories\nnode scripts/cortex-api.mjs recall \"favorite topics\"\n\n# Store a memory\nnode scripts/cortex-api.mjs remember \"User prefers Go articles\" --category preference\n\n# Log a digest session\nnode scripts/cortex-api.mjs digest-log \"2026-04-06\" --topics \"AI,Security\" --articles 10\n```\n\n## Project Structure\n\n```\nYourRSS/\n├── SKILL.md                  # Skill definition (AI workflow + Cortex + Blinko)\n├── README.md\n├── .env.example              # Environment variable template\n├── scripts/\n│   ├── fetch-freshrss.mjs    # FreshRSS API client (Node.js, zero deps)\n│   ├── score-articles.mjs    # AI scoring: agent passthrough or external API\n│   ├── cortex-api.mjs        # Cortex Memory REST API client (zero deps)\n│   └── load-env.mjs          # .env loader (shared by all scripts)\n└── references/\n    └── sources.json           # Fallback static sources\n```\n\n## Comparison\n\n| Feature | freshrss-reader | rss-digest | ai-daily-digest | **YourRSS** |\n|---------|----------------|------------|-----------------|-------------|\n| FreshRSS API | ✅ | ❌ | ❌ | ✅ |\n| AI Scoring | ❌ | ✅ | ✅ | ✅ |\n| AI Summaries | ❌ | ✅ | ✅ | ✅ |\n| Cortex Memory | ❌ | ❌ | ❌ | ✅ REST API |\n| Preference Learning | ❌ | ❌ | ❌ | ✅ Like/Dislike |\n| Personalized Recs | ❌ | ❌ | ❌ | ✅ |\n| Blinko Save | ❌ | ❌ | ❌ | ✅ |\n| Full-text Scoring | ❌ | ❌ | ❌ | ✅ |\n| Concurrent Processing | ❌ | ❌ | ❌ | ✅ |\n| Flexible AI Provider | ❌ | ❌ | ❌ | ✅ |\n| Multi-client | ✅ | OpenClaw | OpenClaw | ✅ Any |\n\n## Requirements\n\n- Node.js 18+\n- Self-hosted FreshRSS with API access enabled\n- Self-hosted Cortex Memory server\n- (Optional) Blinko for knowledge retention\n- (Optional) OpenAI-compatible API for external scoring\n\n## License\n\nMIT\n\n## Credits\n\n- Forked from [ai-daily-digest](https://github.com/HarrisHan/ai-daily-digest) by HarrisHan\n- Memory powered by [Cortex](https://github.com/rikouu/cortex) by rikouu\n- FreshRSS API inspired by [freshrss-reader](https://github.com/openclaw/skills/tree/main/skills/nickian/freshrss-reader)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fximilalaxiang%2Fyourrss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fximilalaxiang%2Fyourrss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fximilalaxiang%2Fyourrss/lists"}