#611 by GitHub stars

vigorX777/ai-daily-digest

Fetches RSS feeds from 90 top Hacker News blogs (curated by Karpathy), uses AI to score and filter articles, and generates a daily digest in Markdown with Chinese-translated titles, category grouping, trend highlights, and visual statistics (Mermaid charts + tag cloud). Use when user mentions 'daily

History

Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.

View weekly changes

SKILL.md

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 1f484a3f2f10

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 1f484a3f2f101cb0f1a94a35b1a1befe0f672b82

1.7kGitHub stars
1star in 7 days
1skill in this repository
0commits in 30 days

Heat

1.8
  • Star growth, last 7 daysAhead of 36% of tracked repositories
  • Star growth, last 24 hoursAhead of 5% of tracked repositories
  • Rank movement, last 7 daysAhead of 16% of tracked repositories
  • Commits, last 30 daysAhead of 0% of tracked repositories
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekAhead of 0% of tracked repositories

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Aug 2, 2026Nov 5, 20261,661

Individual skills in this repository

How it works

ai-daily-digest

When your agent uses it

Fetches RSS feeds from 90 top Hacker News blogs (curated by Karpathy), uses AI to score and filter articles, and generates a daily digest in Markdown with Chinese-translated titles, category grouping, trend highlights, and visual statistics (Mermaid charts + tag cloud). Use when user mentions 'daily digest', 'RSS digest', 'blog digest', 'AI blogs', 'tech news summary', or asks to run /digest command. Trigger command: /digest.

What it loads into context

Frontmatter

106 tokens

Always available to the agent

SKILL.md

2,052 tokens

When the skill is activated

Reference documents

2,015 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. 命令
  2. 脚本目录
  3. 配置持久化
  4. 交互流程
  5. 参数映射
  6. 环境要求
  7. 信息源
  8. 故障排除

Scripts executed separately

  • scripts/digest.ts

Files

  • .gitignoreasset36 bytes
  • README.mddoc6,994 bytes
  • SKILL.mdcore7,076 bytes
  • SKILL.mdcore7,076 bytes
  • SKILL.mdcore7,076 bytes
  • SKILL.mdcore7,076 bytes
  • assets/overview.pngasset507,386 bytes
  • scripts/digest.tsruns48,317 bytes

No excerpt is shown for this license. Read the source on GitHub.

View the complete source on GitHub

Skills included

  • ai-daily-digest

Repository facts

License
No license detected
Created
Feb 14, 2026
Last pushed
Feb 15, 2026
Forks
180
Open issues
6
Project activity
Slowing

Rank over the last 12 weeks

Now #611 · best #433 · down 101 in 30 days

  1. #598 on Oct 31
  2. #599 on Nov 1
  3. #602 on Nov 2
  4. #606 on Nov 3
  5. #608 on Nov 4
  6. #611 since Nov 5
39 earlier periods
  1. #403 on Aug 2
  2. #414 on Aug 7
  3. #412 on Aug 9
  4. #429 on Aug 11
  5. #425 on Aug 12
  6. #435 on Aug 13
  7. #433 on Aug 16
  8. #439 on Aug 20
  9. #442 on Aug 21
  10. #452 on Aug 25
  11. #455 on Aug 27
  12. #462 on Sep 1
  13. #466 on Sep 3
  14. #452 on Sep 4
  15. #459 on Sep 6
  16. #463 on Sep 7
  17. #480 on Sep 8
  18. #473 on Sep 9
  19. #492 on Sep 16
  20. #483 on Sep 17
  21. #498 on Sep 22
  22. #490 on Sep 23
  23. #497 on Sep 27
  24. #511 on Sep 29
  25. #481 on Oct 4
  26. #510 on Oct 7
  27. #524 on Oct 9
  28. #518 on Oct 10
  29. #528 on Oct 13
  30. #531 on Oct 14
  31. #524 on Oct 17
  32. #545 on Oct 19
  33. #546 on Oct 20
  34. #541 on Oct 22
  35. #527 on Oct 24
  36. #580 on Oct 25
  37. #592 on Oct 28
  38. #593 on Oct 29
  39. #595 on Oct 30

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 3, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 3 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 157 signals by file

README.md

  • Network accessline 3
    skill 制作详情可查看 ➡<U+FE0F> https://mp.weixin.qq.com/s/rkQ28KTZs5QeZqjwSCvR4Q
  • Network accessline 5
    从 [Andrej Karpathy](https://x.com/karpathy) 推荐的 90 个 Hacker News 顶级技术博客中抓取最新文章,通过 AI 多维评分筛选,生成一份结构化的每日精选日报。默认使用 Gemini,并支持自动降级到 OpenAI 兼容 API。
  • Network accessline 9
    > 信息源来自 [Hacker News Popularity Contest 2025](https://refactoringenglish.com/tools/hn-popularity/),涵盖 simonwillison.net、paulgraham.com、overreacted.io、gwern.net、krebsonsecurity.com 等。
  • Network accessline 33
    [Credential-related source omitted]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Network accessline 34
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Network accessline 35
    export OPENAI_API_BASE="https://api.deepseek.com/v1" # 可选,默认 https://api.openai.com/v1
  • Network accessline 88
    - [Bun](https://bun.sh) 运行时(通过 `npx -y bun` 自动安装)
  • Network accessline 89
    - 至少一个可用的 AI API Key:   - `GEMINI_API_KEY`([免费获取](https://aistudio.google.com/apikey))   - 或 `OPENAI_API_KEY`(可配合 `OPENAI_API_BASE` 使用 DeepSeek / OpenAI 等 OpenAI 兼容服务)
  • Network accessline 90
    [Credential-related source omitted]
  • Access to secretsline 90
    [Credential-related source omitted]
  • Access to secretsline 91
    [Credential-related source omitted]
  • Access to secretsline 108
    [Credential-related source omitted]
  • Network accessline 130
    | 提供商 | API Endpoint | Key 环境变量 | |--------|-------------|-------------| | OpenAI | `https://api.openai.com/v1/chat/completions` | `OPENAI_API_KEY` |
  • Network accessline 131
    |--------|-------------|-------------| | OpenAI | `https://api.openai.com/v1/chat/completions` | `OPENAI_API_KEY` | | Anthropic | `https://api.anthropic.com/v1/messages` | `ANTHROPIC_API_KEY` |
  • Network accessline 132
    [Credential-related source omitted]
  • Access to secretsline 132
    [Credential-related source omitted]
  • Network accessline 133
    [Credential-related source omitted]
  • Access to secretsline 133
    [Credential-related source omitted]
  • Network accessline 134
    [Credential-related source omitted]
  • Access to secretsline 134
    [Credential-related source omitted]
  • Network accessline 135
    [Credential-related source omitted]
  • Access to secretsline 135
    [Credential-related source omitted]

SKILL.md

  • Network accessline 131
    questions: [{     header: "Gemini API Key",     question: "推荐提供 Gemini API Key 作为主模型(可选再配置 OPENAI_API_KEY 兜底)\n\n获取方式:访问 https://aistudio.google.com/apikey 创建免费 API Key",
  • Network accessline 132
    header: "Gemini API Key",     question: "推荐提供 Gemini API Key 作为主模型(可选再配置 OPENAI_API_KEY 兜底)\n\n获取方式:访问 https://aistudio.google.com/apikey 创建免费 API Key",     options: []
  • Network accessline 133
    [Credential-related source omitted]
  • Access to secretsline 133
    [Credential-related source omitted]
  • Access to secretsline 146
    [Credential-related source omitted]
  • Network accessline 147
    [Credential-related source omitted]
  • Network accessline 148
    [Credential-related source omitted]
  • Access to secretsline 148
    [Credential-related source omitted]
  • Network accessline 149
    export OPENAI_API_BASE="https://api.deepseek.com/v1"
  • Access to secretsline 212
    [Credential-related source omitted]
  • Network accessline 220
    90 个 RSS 源来自 [Hacker News Popularity Contest 2025](https://refactoringenglish.com/tools/hn-popularity/),由 [Andrej Karpathy 推荐](https://x.com/karpathy)。
  • Network accessline 230
    [Credential-related source omitted]
  • Access to secretsline 230
    [Credential-related source omitted]
  • Network accessline 231
    需要提供 Gemini API Key,可在 https://aistudio.google.com/apikey 免费获取。
  • Access to secretsline 234
    [Credential-related source omitted]

scripts/digest.ts

  • Executable scriptline 1
    Executable file
  • Network accessline 9
    const GEMINI_API_URL = 'https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent';
  • Network accessline 10
    const OPENAI_DEFAULT_API_BASE = 'https://api.openai.com/v1';
  • Network accessline 18
    const RSS_FEEDS: Array<{ name: string; xmlUrl: string; htmlUrl: string }> = [   { name: "simonwillison.net", xmlUrl: "https://simonwillison.net/atom/everything/", htmlUrl: "https://simonwillison.net" },
  • Network accessline 19
    { name: "simonwillison.net", xmlUrl: "https://simonwillison.net/atom/everything/", htmlUrl: "https://simonwillison.net" },
  • Network accessline 20
    { name: "jeffgeerling.com", xmlUrl: "https://www.jeffgeerling.com/blog.xml", htmlUrl: "https://jeffgeerling.com" },
  • Network accessline 21
    { name: "seangoedecke.com", xmlUrl: "https://www.seangoedecke.com/rss.xml", htmlUrl: "https://seangoedecke.com" },
  • Network accessline 22
    { name: "krebsonsecurity.com", xmlUrl: "https://krebsonsecurity.com/feed/", htmlUrl: "https://krebsonsecurity.com" },
  • Network accessline 23
    { name: "daringfireball.net", xmlUrl: "https://daringfireball.net/feeds/main", htmlUrl: "https://daringfireball.net" },
  • Network accessline 24
    { name: "ericmigi.com", xmlUrl: "https://ericmigi.com/rss.xml", htmlUrl: "https://ericmigi.com" },
  • Network accessline 25
    { name: "antirez.com", xmlUrl: "http://antirez.com/rss", htmlUrl: "http://antirez.com" },
  • Network accessline 26
    { name: "idiallo.com", xmlUrl: "https://idiallo.com/feed.rss", htmlUrl: "https://idiallo.com" },
  • Network accessline 27
    { name: "maurycyz.com", xmlUrl: "https://maurycyz.com/index.xml", htmlUrl: "https://maurycyz.com" },
  • Network accessline 28
    { name: "pluralistic.net", xmlUrl: "https://pluralistic.net/feed/", htmlUrl: "https://pluralistic.net" },
  • Network accessline 29
    { name: "shkspr.mobi", xmlUrl: "https://shkspr.mobi/blog/feed/", htmlUrl: "https://shkspr.mobi" },
  • Network accessline 30
    { name: "lcamtuf.substack.com", xmlUrl: "https://lcamtuf.substack.com/feed", htmlUrl: "https://lcamtuf.substack.com" },
  • Network accessline 31
    { name: "mitchellh.com", xmlUrl: "https://mitchellh.com/feed.xml", htmlUrl: "https://mitchellh.com" },
  • Network accessline 32
    { name: "dynomight.net", xmlUrl: "https://dynomight.net/feed.xml", htmlUrl: "https://dynomight.net" },
  • Network accessline 33
    { name: "utcc.utoronto.ca/~cks", xmlUrl: "https://utcc.utoronto.ca/~cks/space/blog/?atom", htmlUrl: "https://utcc.utoronto.ca/~cks" },
  • Network accessline 34
    { name: "xeiaso.net", xmlUrl: "https://xeiaso.net/blog.rss", htmlUrl: "https://xeiaso.net" },
  • Network accessline 35
    { name: "devblogs.microsoft.com/oldnewthing", xmlUrl: "https://devblogs.microsoft.com/oldnewthing/feed", htmlUrl: "https://devblogs.microsoft.com/oldnewthing" },
  • Network accessline 36
    { name: "righto.com", xmlUrl: "https://www.righto.com/feeds/posts/default", htmlUrl: "https://righto.com" },
  • Network accessline 37
    { name: "lucumr.pocoo.org", xmlUrl: "https://lucumr.pocoo.org/feed.atom", htmlUrl: "https://lucumr.pocoo.org" },
  • Network accessline 38
    { name: "skyfall.dev", xmlUrl: "https://skyfall.dev/rss.xml", htmlUrl: "https://skyfall.dev" },
  • Network accessline 39
    { name: "garymarcus.substack.com", xmlUrl: "https://garymarcus.substack.com/feed", htmlUrl: "https://garymarcus.substack.com" },
  • Network accessline 40
    { name: "rachelbythebay.com", xmlUrl: "https://rachelbythebay.com/w/atom.xml", htmlUrl: "https://rachelbythebay.com" },
  • Network accessline 41
    { name: "overreacted.io", xmlUrl: "https://overreacted.io/rss.xml", htmlUrl: "https://overreacted.io" },
  • Network accessline 42
    { name: "timsh.org", xmlUrl: "https://timsh.org/rss/", htmlUrl: "https://timsh.org" },
  • Network accessline 43
    { name: "johndcook.com", xmlUrl: "https://www.johndcook.com/blog/feed/", htmlUrl: "https://johndcook.com" },
  • Network accessline 44
    { name: "gilesthomas.com", xmlUrl: "https://gilesthomas.com/feed/rss.xml", htmlUrl: "https://gilesthomas.com" },
  • Network accessline 45
    { name: "matklad.github.io", xmlUrl: "https://matklad.github.io/feed.xml", htmlUrl: "https://matklad.github.io" },
  • Network accessline 46
    { name: "derekthompson.org", xmlUrl: "https://www.theatlantic.com/feed/author/derek-thompson/", htmlUrl: "https://derekthompson.org" },
  • Network accessline 47
    { name: "evanhahn.com", xmlUrl: "https://evanhahn.com/feed.xml", htmlUrl: "https://evanhahn.com" },
  • Network accessline 48
    { name: "terriblesoftware.org", xmlUrl: "https://terriblesoftware.org/feed/", htmlUrl: "https://terriblesoftware.org" },
  • Network accessline 49
    { name: "rakhim.exotext.com", xmlUrl: "https://rakhim.exotext.com/rss.xml", htmlUrl: "https://rakhim.exotext.com" },
  • Network accessline 50
    { name: "joanwestenberg.com", xmlUrl: "https://joanwestenberg.com/rss", htmlUrl: "https://joanwestenberg.com" },
  • Network accessline 51
    { name: "xania.org", xmlUrl: "https://xania.org/feed", htmlUrl: "https://xania.org" },
  • Network accessline 52
    { name: "micahflee.com", xmlUrl: "https://micahflee.com/feed/", htmlUrl: "https://micahflee.com" },
  • Network accessline 53
    { name: "nesbitt.io", xmlUrl: "https://nesbitt.io/feed.xml", htmlUrl: "https://nesbitt.io" },
  • Network accessline 54
    { name: "construction-physics.com", xmlUrl: "https://www.construction-physics.com/feed", htmlUrl: "https://construction-physics.com" },
  • Network accessline 55
    { name: "tedium.co", xmlUrl: "https://feed.tedium.co/", htmlUrl: "https://tedium.co" },
  • Network accessline 56
    { name: "susam.net", xmlUrl: "https://susam.net/feed.xml", htmlUrl: "https://susam.net" },
  • Network accessline 57
    { name: "entropicthoughts.com", xmlUrl: "https://entropicthoughts.com/feed.xml", htmlUrl: "https://entropicthoughts.com" },
  • Network accessline 58
    { name: "buttondown.com/hillelwayne", xmlUrl: "https://buttondown.com/hillelwayne/rss", htmlUrl: "https://buttondown.com/hillelwayne" },
  • Network accessline 59
    { name: "dwarkesh.com", xmlUrl: "https://www.dwarkeshpatel.com/feed", htmlUrl: "https://dwarkesh.com" },
  • Network accessline 60
    { name: "borretti.me", xmlUrl: "https://borretti.me/feed.xml", htmlUrl: "https://borretti.me" },
  • Network accessline 61
    { name: "wheresyoured.at", xmlUrl: "https://www.wheresyoured.at/rss/", htmlUrl: "https://wheresyoured.at" },
  • Network accessline 62
    { name: "jayd.ml", xmlUrl: "https://jayd.ml/feed.xml", htmlUrl: "https://jayd.ml" },
  • Network accessline 63
    { name: "minimaxir.com", xmlUrl: "https://minimaxir.com/index.xml", htmlUrl: "https://minimaxir.com" },
  • Network accessline 64
    { name: "geohot.github.io", xmlUrl: "https://geohot.github.io/blog/feed.xml", htmlUrl: "https://geohot.github.io" },
  • Network accessline 65
    { name: "paulgraham.com", xmlUrl: "http://www.aaronsw.com/2002/feeds/pgessays.rss", htmlUrl: "https://paulgraham.com" },
  • Network accessline 66
    { name: "filfre.net", xmlUrl: "https://www.filfre.net/feed/", htmlUrl: "https://filfre.net" },
  • Network accessline 67
    { name: "blog.jim-nielsen.com", xmlUrl: "https://blog.jim-nielsen.com/feed.xml", htmlUrl: "https://blog.jim-nielsen.com" },
  • Network accessline 68
    { name: "dfarq.homeip.net", xmlUrl: "https://dfarq.homeip.net/feed/", htmlUrl: "https://dfarq.homeip.net" },
  • Network accessline 69
    { name: "jyn.dev", xmlUrl: "https://jyn.dev/atom.xml", htmlUrl: "https://jyn.dev" },
  • Network accessline 70
    { name: "geoffreylitt.com", xmlUrl: "https://www.geoffreylitt.com/feed.xml", htmlUrl: "https://geoffreylitt.com" },
  • Network accessline 71
    { name: "downtowndougbrown.com", xmlUrl: "https://www.downtowndougbrown.com/feed/", htmlUrl: "https://downtowndougbrown.com" },
  • Network accessline 72
    { name: "brutecat.com", xmlUrl: "https://brutecat.com/rss.xml", htmlUrl: "https://brutecat.com" },
  • Network accessline 73
    { name: "eli.thegreenplace.net", xmlUrl: "https://eli.thegreenplace.net/feeds/all.atom.xml", htmlUrl: "https://eli.thegreenplace.net" },
  • Network accessline 74
    { name: "abortretry.fail", xmlUrl: "https://www.abortretry.fail/feed", htmlUrl: "https://abortretry.fail" },
  • Network accessline 75
    { name: "fabiensanglard.net", xmlUrl: "https://fabiensanglard.net/rss.xml", htmlUrl: "https://fabiensanglard.net" },
  • Network accessline 76
    { name: "oldvcr.blogspot.com", xmlUrl: "https://oldvcr.blogspot.com/feeds/posts/default", htmlUrl: "https://oldvcr.blogspot.com" },
  • Network accessline 77
    { name: "bogdanthegeek.github.io", xmlUrl: "https://bogdanthegeek.github.io/blog/index.xml", htmlUrl: "https://bogdanthegeek.github.io" },
  • Network accessline 78
    { name: "hugotunius.se", xmlUrl: "https://hugotunius.se/feed.xml", htmlUrl: "https://hugotunius.se" },
  • Network accessline 79
    { name: "gwern.net", xmlUrl: "https://gwern.substack.com/feed", htmlUrl: "https://gwern.net" },
  • Network accessline 80
    { name: "berthub.eu", xmlUrl: "https://berthub.eu/articles/index.xml", htmlUrl: "https://berthub.eu" },
  • Network accessline 81
    { name: "chadnauseam.com", xmlUrl: "https://chadnauseam.com/rss.xml", htmlUrl: "https://chadnauseam.com" },
  • Network accessline 82
    { name: "simone.org", xmlUrl: "https://simone.org/feed/", htmlUrl: "https://simone.org" },
  • Network accessline 83
    { name: "it-notes.dragas.net", xmlUrl: "https://it-notes.dragas.net/feed/", htmlUrl: "https://it-notes.dragas.net" },
  • Network accessline 84
    { name: "beej.us", xmlUrl: "https://beej.us/blog/rss.xml", htmlUrl: "https://beej.us" },
  • Network accessline 85
    { name: "hey.paris", xmlUrl: "https://hey.paris/index.xml", htmlUrl: "https://hey.paris" },
  • Network accessline 86
    { name: "danielwirtz.com", xmlUrl: "https://danielwirtz.com/rss.xml", htmlUrl: "https://danielwirtz.com" },
  • Network accessline 87
    { name: "matduggan.com", xmlUrl: "https://matduggan.com/rss/", htmlUrl: "https://matduggan.com" },
  • Network accessline 88
    { name: "refactoringenglish.com", xmlUrl: "https://refactoringenglish.com/index.xml", htmlUrl: "https://refactoringenglish.com" },
  • Network accessline 89
    { name: "worksonmymachine.substack.com", xmlUrl: "https://worksonmymachine.substack.com/feed", htmlUrl: "https://worksonmymachine.substack.com" },
  • Network accessline 90
    { name: "philiplaine.com", xmlUrl: "https://philiplaine.com/index.xml", htmlUrl: "https://philiplaine.com" },
  • Network accessline 91
    { name: "steveblank.com", xmlUrl: "https://steveblank.com/feed/", htmlUrl: "https://steveblank.com" },
  • Network accessline 92
    { name: "bernsteinbear.com", xmlUrl: "https://bernsteinbear.com/feed.xml", htmlUrl: "https://bernsteinbear.com" },
  • Network accessline 93
    { name: "danieldelaney.net", xmlUrl: "https://danieldelaney.net/feed", htmlUrl: "https://danieldelaney.net" },
  • Network accessline 94
    { name: "troyhunt.com", xmlUrl: "https://www.troyhunt.com/rss/", htmlUrl: "https://troyhunt.com" },
  • Network accessline 95
    { name: "herman.bearblog.dev", xmlUrl: "https://herman.bearblog.dev/feed/", htmlUrl: "https://herman.bearblog.dev" },
  • Network accessline 96
    { name: "tomrenner.com", xmlUrl: "https://tomrenner.com/index.xml", htmlUrl: "https://tomrenner.com" },
  • Network accessline 97
    { name: "blog.pixelmelt.dev", xmlUrl: "https://blog.pixelmelt.dev/rss/", htmlUrl: "https://blog.pixelmelt.dev" },
  • Network accessline 98
    { name: "martinalderson.com", xmlUrl: "https://martinalderson.com/feed.xml", htmlUrl: "https://martinalderson.com" },
  • Network accessline 99
    { name: "danielchasehooper.com", xmlUrl: "https://danielchasehooper.com/feed.xml", htmlUrl: "https://danielchasehooper.com" },
  • Network accessline 100
    { name: "chiark.greenend.org.uk/~sgtatham", xmlUrl: "https://www.chiark.greenend.org.uk/~sgtatham/quasiblog/feed.xml", htmlUrl: "https://chiark.greenend.org.uk/~sgtatham" },
  • Network accessline 101
    { name: "grantslatton.com", xmlUrl: "https://grantslatton.com/rss.xml", htmlUrl: "https://grantslatton.com" },
  • Network accessline 102
    { name: "experimental-history.com", xmlUrl: "https://www.experimental-history.com/feed", htmlUrl: "https://experimental-history.com" },
  • Network accessline 103
    { name: "anildash.com", xmlUrl: "https://anildash.com/feed.xml", htmlUrl: "https://anildash.com" },
  • Network accessline 104
    { name: "aresluna.org", xmlUrl: "https://aresluna.org/main.rss", htmlUrl: "https://aresluna.org" },
  • Network accessline 105
    { name: "michael.stapelberg.ch", xmlUrl: "https://michael.stapelberg.ch/feed.xml", htmlUrl: "https://michael.stapelberg.ch" },
  • Network accessline 106
    { name: "miguelgrinberg.com", xmlUrl: "https://blog.miguelgrinberg.com/feed", htmlUrl: "https://miguelgrinberg.com" },
  • Network accessline 107
    { name: "keygen.sh", xmlUrl: "https://keygen.sh/blog/feed.xml", htmlUrl: "https://keygen.sh" },
  • Network accessline 108
    { name: "mjg59.dreamwidth.org", xmlUrl: "https://mjg59.dreamwidth.org/data/rss", htmlUrl: "https://mjg59.dreamwidth.org" },
  • Network accessline 109
    { name: "computer.rip", xmlUrl: "https://computer.rip/rss.xml", htmlUrl: "https://computer.rip" },
  • Network accessline 110
    { name: "tedunangst.com", xmlUrl: "https://www.tedunangst.com/flak/rss", htmlUrl: "https://tedunangst.com" },
  • Network accessline 240
    const isAtom = xml.includes('<feed') && xml.includes('xmlns="http://www.w3.org/2005/Atom"') || xml.includes('<feed ');
  • Network accessline 302
    const response = await fetch(feed.xmlUrl, {
  • Network accessline 369
    [Credential-related source omitted]
  • Network accessline 370
    const response = await fetch(`${GEMINI_API_URL}?key=${apiKey}`, {
  • Network accessline 402
    ): Promise<string> {   const normalizedBase = apiBase.replace(/\/+$/, '');   const response = await fetch(`${normalizedBase}/chat/completions`, {
  • Network accessline 403
    const normalizedBase = apiBase.replace(/\/+$/, '');   const response = await fetch(`${normalizedBase}/chat/completions`, {     method: 'POST',
  • Network accessline 404
    const response = await fetch(`${normalizedBase}/chat/completions`, {
  • Access to secretsline 490
    [Credential-related source omitted]
  • Network accessline 990
    report += `*生成于 ${dateStr} ${now.toISOString().split('T')[1]?.slice(0, 5) || ''} | 扫描 ${stats.successFeeds} 源 → 获取 ${stats.totalArticles} 篇 → 精选 ${articles.length} 篇*\n`;   report += `*基于 [Hacker News Popularity Contest 2025](https://refact
  • Network accessline 991
    report += `*基于 [Hacker News Popularity Contest 2025](https://refactoringenglish.com/tools/hn-popularity/) RSS 源列表,由 [Andrej Karpathy](https://x.com/karpathy) 推荐*\n`;
  • Network accessline 1014
    Environment:   GEMINI_API_KEY   Optional but recommended. Get one at https://aistudio.google.com/apikey
  • Network accessline 1015
    [Credential-related source omitted]
  • Access to secretsline 1015
    [Credential-related source omitted]
  • Network accessline 1016
    [Credential-related source omitted]
  • Access to secretsline 1016
    [Credential-related source omitted]
  • Network accessline 1017
    OPENAI_API_BASE  Optional fallback base URL (default: https://api.openai.com/v1)
  • Access to secretsline 1049
    [Credential-related source omitted]
  • Access to secretsline 1050
    [Credential-related source omitted]
  • Network accessline 1054
    if (!geminiApiKey && !openaiApiKey) {     console.error('[digest] Error: Missing API key. Set GEMINI_API_KEY and/or OPENAI_API_KEY.');     console.error('[digest] Gemini key: https://aistudio.google.com/apikey');
  • Network accessline 1055
    [Credential-related source omitted]
  • Access to secretsline 1055
    [Credential-related source omitted]
  • Network accessline 1056
    console.error('[digest] Gemini key: https://aistudio.google.com/apikey');

How the signals fit together

Facts from a static read of the files at the pinned commit. They describe what the code does, not why.

Some files could not be read; the facts below still hold.

Signal confidence: 9 facts
  • Access to secrets in code of documentation: a variable, placeholder or call, not a stored valueREADME.md:33Low confidence
  • Access to secrets in code of documentationREADME.md:34Low confidence
  • Network access in code of documentationREADME.md:35Low confidence
  • Access to secrets in code of documentationREADME.md:108Low confidence
  • Network access in code of the SKILL.mdSKILL.md:133High confidence
  • Access to secrets in code of the SKILL.mdSKILL.md:133High confidence
  • Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueSKILL.md:146Low confidence
  • Access to secrets in code of the SKILL.md: a variable, placeholder or call, not a stored valueSKILL.md:148Low confidence
  • Network access in code of the SKILL.mdSKILL.md:149High confidence

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md SKILL.md.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md SKILL.md.opencode/skills/<skill-name>/
  • Native The repository ships a manifest, folder or frontmatter field for this agent.
  • Compatible A standard SKILL.md that this agent can read.
  • Unknown No evidence either way.

Derived automatically from paths, manifests and frontmatter. Not tested on each agent.

Explore alternatives and comparisons

Add this badge to your README

It updates every night and links to this page.

vigorX777/ai-daily-digest: #611 on hotskills, 1.7k stars

[![vigorX777/ai-daily-digest on hotskills](https://hotskills.dev/badge/vigorx777-ai-daily-digest.svg)](https://hotskills.dev/skill/vigorx777-ai-daily-digest/)