#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.
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
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 tokensAlways available to the agent
SKILL.md
2,052 tokensWhen the skill is activated
Reference documents
2,015 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- 命令
- 脚本目录
- 配置持久化
- 交互流程
- 参数映射
- 环境要求
- 信息源
- 故障排除
Scripts executed separately
scripts/digest.ts
Files
.gitignoreasset36 bytesREADME.mddoc6,994 bytesSKILL.mdcore7,076 bytesSKILL.mdcore7,076 bytesSKILL.mdcore7,076 bytesSKILL.mdcore7,076 bytesassets/overview.pngasset507,386 bytesscripts/digest.tsruns48,317 bytes
No excerpt is shown for this license. Read the source on GitHub.
View the complete source on GitHubSkills 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
- #598 on Oct 31
- #599 on Nov 1
- #602 on Nov 2
- #606 on Nov 3
- #608 on Nov 4
- #611 since Nov 5
39 earlier periods
- #403 on Aug 2
- #414 on Aug 7
- #412 on Aug 9
- #429 on Aug 11
- #425 on Aug 12
- #435 on Aug 13
- #433 on Aug 16
- #439 on Aug 20
- #442 on Aug 21
- #452 on Aug 25
- #455 on Aug 27
- #462 on Sep 1
- #466 on Sep 3
- #452 on Sep 4
- #459 on Sep 6
- #463 on Sep 7
- #480 on Sep 8
- #473 on Sep 9
- #492 on Sep 16
- #483 on Sep 17
- #498 on Sep 22
- #490 on Sep 23
- #497 on Sep 27
- #511 on Sep 29
- #481 on Oct 4
- #510 on Oct 7
- #524 on Oct 9
- #518 on Oct 10
- #528 on Oct 13
- #531 on Oct 14
- #524 on Oct 17
- #545 on Oct 19
- #546 on Oct 20
- #541 on Oct 22
- #527 on Oct 24
- #580 on Oct 25
- #592 on Oct 28
- #593 on Oct 29
- #595 on Oct 30
Before you install
Network or broad shellAutomated 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:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzedSKILL.md:1Analysis incomplete: Referenced executable target unavailable; not analyzed
- No broad tool permissions
- No dangerous shell commands
- 135 network referencesin 3 files: scripts/digest.ts:9 README.md:3 SKILL.md:131
- No hidden or obfuscated text
- No instruction overrides
- 1 executable scriptin 1 file: scripts/digest.ts:1
- 21 references to secretsin 3 files: README.md:33 SKILL.md:133 scripts/digest.ts:490
- No requests to vote in Hot
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 | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Compatible | Standard SKILL.md SKILL.md | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard 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.
[](https://hotskills.dev/skill/vigorx777-ai-daily-digest/)