关于 hackernews-intel
监控 Hacker News 关键词并通过 Slack 提醒新匹配内容的技能。它使用本地 SQLite 缓存避免重复提醒,可手动运行或定时执行。
主要功能
- 01按关键词搜索 Hacker News 新帖
- 02使用 SQLite 缓存去重
- 03向 Slack 发送提醒
- 04按积分筛选并可选监控评论
- 05支持试运行和定时执行
适用场景
- 01跟踪 Hacker News 上指定主题的讨论
- 02定期接收新匹配帖子的提醒
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ varnan-tech/ opendirectory --skill hackernews-intel安装后在 Claude Code 中输入/hackernews-intel确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
.env.examplepackage.jsonREADME.mdevals/evals.jsonscripts/monitor-hn.js详细介绍
Hacker News 情报监控
监控 Hacker News 上的关键词。每次运行时,通过 HN Algolia API 获取新帖子,与本地 SQLite 缓存去重,并向 Slack 发送未见过的匹配项提醒。可手动运行,也可通过 cron 或 GitHub Actions 定时运行。
第 1 步:检查设置
1a. 验证所需的环境变量
检查是否已设置以下变量:
HN_KEYWORDS(必需):要监控的关键词列表,以逗号分隔SLACK_WEBHOOK(必需):用于发送提醒的 Slack Incoming Webhook URL
如果缺少其中任何一项,请停止并告知用户:
HN_KEYWORDS:要监控的主题列表,以逗号分隔。例如:claude code,LLM agents,deno runtimeSLACK_WEBHOOK:在 https://api.slack.com/apps 创建 Incoming Webhook。选择工作区,启用 Incoming Webhooks,然后复制 URL。
1b. 验证脚本依赖项
ls /Users/ksd/Desktop/Varnan_skills/hackernews-intel/node_modules/better-sqlite3 2>/dev/null
如果缺少依赖项:
cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && npm install
第 2 步:运行监控器
cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && node scripts/monitor-hn.js
参数:
--dry-run:将匹配结果打印到标准输出,不发送任何 Slack 提醒。提交前可用此参数预览将要发送的提醒。--days=N:首次运行时,回溯 N 天(默认值:1)。仅当 SQLite 缓存为空时生效。--reset:清除缓存并重新开始。关键词列表有较大变动时使用。
脚本的操作:
- 从环境变量读取
HN_KEYWORDS,按逗号拆分并去除空白 - 在
HN_DB_PATH指定的路径打开(或创建)SQLite 数据库(默认:./hn-intel.db) - 对每个关键词,调用
https://hn.algolia.com/api/v1/search_by_date,并使用numericFilters=created_at_i>lastSeen - 对每个结果,检查
objectID是否已存在于seen_posts中——如果存在则跳过 - 如果设置了
HN_MIN_POINTS,则跳过低于该阈值的帖子 - 对于新的匹配帖子,发送 Slack 提醒,并将
objectID插入缓存 - 使用本次运行摘要更新
poll_log - 将摘要打印到标准输出
第 3 步:查看结果
脚本运行后,读取其标准输出。输出将报告:
Run complete.
Keywords checked: N
Posts found: N
Posts alerted: N
Posts skipped (already seen): N
Errors: N
如果 Posts found: 0,但你预期会有结果,请检查:
- 关键词是否足够具体?如果 HN Algolia 返回结果过多且时间窗口较窄,过于宽泛的词(例如 “AI”)可能返回 0 条结果
- 首次运行时的
--days时间窗口是否足够长?尝试使用--days=7 - DB 缓存是否过滤过严?尝试使用
--reset清除缓存并重新运行
如果 Posts alerted: 0,但 Posts found: N,说明去重功能正常——这些帖子已在之前的运行中被发现。
第 4 步:安排监控任务
选项 A:cron(macOS/Linux)
将以下内容添加到 crontab,每 4 小时运行一次:
crontab -e
添加此行(请根据安装位置调整路径):
0 */4 * * * cd /Users/ksd/Desktop/Varnan_skills/hackernews-intel && node scripts/monitor-hn.js >> /tmp/hn-intel.log 2>&1
选项 B:GitHub Actions(推荐用于团队)
在任意仓库中创建 .github/workflows/hn-intel.yml:
name: HN Intel Monitor
on:
schedule:
- cron: '0 */4 * * *'
workflow_dispatch:
jobs:
monitor:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install
working-directory: hackernews-intel
- name: Run monitor
run: node scripts/monitor-hn.js
working-directory: hackernews-intel
env:
HN_KEYWORDS: ${{ secrets.HN_KEYWORDS }}
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
HN_MIN_POINTS: ${{ secrets.HN_MIN_POINTS }}
将 HN_KEYWORDS、SLACK_WEBHOOK,以及可选的 HN_MIN_POINTS 添加为仓库机密。
注意:GitHub Actions 不会在运行之间保留文件,因此 SQLite 缓存会在每次运行时重置。这意味着每次运行都会再次找到默认 1 天回溯窗口内的所有帖子。若要在 GitHub Actions 上实现持久去重,请将 DB 存储在持久化位置(S3、工件缓存或专用分支)。
第 5 步:调整关键词和阈值
添加或更改关键词:
在 .env 或环境中更新 HN_KEYWORDS。无需重启——脚本每次运行时都会重新读取该变量。
设置最低分数阈值:
设置 HN_MIN_POINTS=10,仅对分数达到 10 分或以上的帖子发送提醒。对于宽泛关键词,这有助于减少噪声。
包含评论(不仅是文章):
设置 HN_INCLUDE_COMMENTS=true,同时监控提及关键词的评论。默认关闭——评论会显著增加结果数量。
重置缓存:
运行 node scripts/monitor-hn.js --reset,清除 seen_posts 和 poll_log。下次运行时,会根据回溯窗口重新获取内容。
测试新关键词:
运行 node scripts/monitor-hn.js --dry-run --days=7,查看过去 7 天内匹配的帖子,不向任何人发送提醒。