mcpField
A
arxiv-monitor

arxiv-monitor

github.com/dsebastien生产力770 次安装28 周前更新
代码仓库

关于 arxiv-monitor

arxiv-monitor 是用于持续追踪 arXiv 查询和分类的新论文发现技能。它保存每个监视项已出现的论文 ID,仅返回新结果,并依赖同目录安装的 arxiv-search。

主要功能

  1. 01按查询词或分类创建监视项
  2. 02仅返回尚未出现的论文
  3. 03批量检查已保存的主题
  4. 04以 JSON 输出检查结果
  5. 05原子更新本地监视状态

适用场景

  1. 01持续发现特定研究领域的新论文
  2. 02定期检查 arXiv 分类更新
  3. 03一次检查多个已保存主题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dsebastien/ai-skill-arxiv --skill arxiv-monitor

安装后在 Claude Code 中输入/arxiv-monitor确认已加载。

附带文件scripts/arxiv_monitor.py

详细介绍

arXiv 监控

持续跟踪 arXiv 上的查询和分类。状态保存在 scripts/watchlist.json 中——每个监控项都会记录已显示过的 arXiv ID,因此每次 check 只会返回新内容。

适用场景

  • 用户希望持续发现特定研究领域的新内容
  • 用户希望在某个分类有新论文时收到通知
  • 可与 cron、计划任务或 /loop 自然配合,实现自动发现
  • 一次性检查多个已保存主题的「最新动态」

对于无需持久化的一次性搜索,请直接使用 arxiv-search。

依赖项

arxiv-monitor 会通过子进程调用 arxiv-search 来执行查询。当两项技能作为同级目录安装在同一个 skills/ 目录下时,相对路径会自动解析。如果只安装 arxiv-monitor,执行 check 时会失败——请同时安装 arxiv-search。

架构

该脚本是对 arxiv-search 的轻量封装:它使用已保存的查询参数调用搜索脚本,然后根据对应监控项的 seen_ids 列表筛选响应。新论文 ID 会追加到 seen_ids 中(每个监控项最多保留 500 个)。状态写入采用原子操作(临时文件 + os.replace)。

命令

# Inspect
python3 scripts/arxiv_monitor.py list

# Add a watch (needs --query and/or --category)
python3 scripts/arxiv_monitor.py add "interp-ml" \
    --query "mechanistic interpretability" --category cs.LG --max 30

# Check one watch (returns new-only, updates state)
python3 scripts/arxiv_monitor.py check "interp-ml"

# Check everything (respects arXiv API's 1-req-per-3s soft limit)
python3 scripts/arxiv_monitor.py check-all

# Reset seen-ids (treat next check as first run)
python3 scripts/arxiv_monitor.py reset "interp-ml"

# Remove a watch entirely
python3 scripts/arxiv_monitor.py remove "interp-ml"

check/check-all 的输出为 JSON:{"name", "total_returned", "new_count", "new": [...]}。

工作流

1. 理解意图
  • 「监控 X」/「跟踪 X」→ add
  • 「有什么新内容」→ check-all
  • 「我的 监控项有新论文吗」→ check <name>
  • 「停止跟踪 X」→ remove
2. 添加监控项:收集参数

只有信息不明确时才询问用户:

  • 名称——简短标识,使用 kebab-case。必填。
  • 查询——自由文本;多个词会作为独立条件进行 AND 匹配
  • 分类——arXiv 代码(cs.LG、cs.CL、stat.ML 等);可选
  • 每次检查的最大结果数——默认值为 30

查询和分类至少提供一项。

3. 检查:运行并筛选

运行命令。如果 new_count == 0,只需说明「自上次检查以来没有新论文」并附上时间戳。如果 new_count > 0:

  • 将新论文整理成简洁的表格(arXiv ID、标题、作者、日期、主要分类)
  • 提供分析其中任意论文的选项(→ arxiv-analyze)
4. 检查全部:批量报告

为每个监控项打印一行摘要,然后展开报告有新论文的监控项。

状态文件

scripts/watchlist.json 的结构:

{
  "watches": {
    "interp-ml": {
      "query": "mechanistic interpretability",
      "category": "cs.LG",
      "max": 30,
      "seen_ids": ["2501.11120v1", "..."],
      "last_checked": "2026-04-16T09:00:00Z",
      "created": "2026-04-16T09:00:00Z"
    }
  }
}

执行检查期间不要手动编辑。两次运行之间可直接编辑以进行调试。

seen_ids 会裁剪为每个监控项最近的 500 个 ID。如果某个监控项长期未使用,较旧的论文可能会被移出列表,并在下一次检查时重新出现——这是为限制状态大小而接受的取舍。

强制规则

  • 绝不要将已见 ID 列表截短到脚本处理范围之外。 该列表至关重要——截短会导致已见论文被误报为「新内容」。
  • 每个监控项只允许一个查询。 如果一个主题有多个研究方向,请创建多个监控项。
  • 将 --max 限制为 100。 超过此值后,arXiv API 响应会变慢,信噪比也会下降。
  • arXiv API 速率限制。 check-all 会在监控项之间暂停 3 秒。不要并行执行。

要求

  • Python 3.11+(仅使用标准库,无需通过 pip 安装)
  • 将 arxiv-search 技能作为同级目录安装(位于同一个 skills/ 目录下)

评论

支持 Markdown