PenghaoJiang/auto-paper-collecter

๐Ÿ“š๐Ÿ”ญ Your personal research radar โ€” an LLM-powered tool that auto-aggregates the latest papers for your keywords across arXiv / Crossref / Semantic Scholar / GitHub / RSS.

auto-paper-collecter๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

auto-paper-collecter is a Claude Code agent skill that ๐Ÿ“š๐Ÿ”ญ Your personal research radar โ€” an LLM-powered tool that auto-aggregates the latest papers for your keywords across arXiv / Crossref / Semantic Scholar / GitHub / RSS.

์ง€์› ๋Œ€์ƒโœ“Claude Codeโœ“Codex CLI~Cursor
npx skills add PenghaoJiang/auto-paper-collecter

Installed? Explore more ๋ผ์ดํŒ… & ์—๋””ํŒ… skills: steipete/notion, langchain-ai/langchain, bytedance/podcast-generation ยท View all 6 โ†’

์ฆ๊ฒจ ์‚ฌ์šฉํ•˜๋Š” AI์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ธฐ

์ด ์—์ด์ „ํŠธ ์Šคํ‚ฌ์ด ๋ฏธ๋ฆฌ ๋กœ๋“œ๋œ ์ƒˆ ์ฑ„ํŒ…์„ ์—ฝ๋‹ˆ๋‹ค.

๋ฌธ์„œ

auto-paper-collecter (skill)

A self-hosted research-literature radar that runs inside a coding agent. The Python scripts do only the deterministic work (API fetch, dedup, render, email). YOU โ€” the assistant running this skill โ€” do all the judgement work: query expansion, computer-science relevance filtering, Chinese summaries, and hot-topic synthesis. That means no AI API key is needed โ€” whichever model is running this skill (Claude in Claude Code, GPT in Codex, โ€ฆ) is the LLM.

Layout

skill/
โ”œโ”€โ”€ SKILL.md
โ”œโ”€โ”€ scripts/   common.py ยท fetch.py ยท render.py ยท notify.py   (stdlib only)
โ”œโ”€โ”€ state/     config.json ยท (queries/candidates/curated/trends/seen .json)
โ””โ”€โ”€ digests/   YYYY-MM-DD.md  +  .html

Run scripts from scripts/: cd skill/scripts && python3 <script>.py

Config โ€” state/config.json

  • keywords: up to ~3 topic strings to track.
  • domain: the field to constrain relevance to (default computer science).
  • sources: toggle arXiv / Crossref / Semantic Scholar / GitHub / HuggingFace / PapersWithCode / RSS.
  • lookback_days: how far back to fetch (dedup stops repeats anyway).
  • max_per_source, rss_feeds.

When the user asks to change keywords / sources / field, edit this file and confirm the change back to them.

Optional env vars (never stored in the repo): SEMANTIC_SCHOLAR_KEY (lifts S2 rate limits), GITHUB_TOKEN (lifts GitHub limits), SMTP_* / EMAIL_TO (email), and push channels โ€” TELEGRAM_BOT_TOKEN/TELEGRAM_CHAT_ID, SLACK_WEBHOOK_URL, WECHAT_WEBHOOK (ไผไธšๅพฎไฟก็พคๆœบๅ™จไบบ) or SERVERCHAN_KEY (Server้…ฑ).

The run pipeline โ€” follow IN ORDER

1 ยท Read config & expand queries (you)

Read state/config.json. For each keyword, think of 2โ€“3 associative English search queries โ€” synonyms, full forms, adjacent sub-topics โ€” so recall isn't limited to the literal term (e.g. C2Rust โ†’ ["C2Rust", "C-to-Rust translation", "migrating legacy C code to Rust"]). Write them to state/queries.json as {"<keyword>": ["q1", "q2", ...], ...}.

2 ยท Fetch candidates (script)

cd skill/scripts && python3 fetch.py

Fetches every enabled source for those queries, drops anything already in state/seen.json or older than lookback_days, and writes state/candidates.json. If it reports 0 candidates, tell the user "ๆš‚ๆ— ๆ–ฐๆ–‡็Œฎ" and stop (nothing else to do).

3 ยท Filter relevance & summarize (you)

Read state/candidates.json. For each item decide: is it (a) computer-science and (b) genuinely on-topic for its topic keyword? Drop the rest (medical "translation", finance "AI", random GitHub star-lists, etc.). For every kept item write a concise Chinese summary and assemble state/curated.json โ€” a list of objects:

{"source","topic","title","url","venue","authors","published",
 "tldr":"ไธ€ๅฅ่ฏๆ ธๅฟƒ (<=60ๅญ—)","method":"ๆ–นๆณ•็ฎ€่ฟฐ (<=80ๅญ—)",
 "contributions":["ๆ ธๅฟƒ่ดก็Œฎ1","ๆ ธๅฟƒ่ดก็Œฎ2"]}

Keep papers first, GitHub repos last (they are a supplementary signal). If a source gave a tldr already, you may build on it.

GitHub items are repos, not papers โ€” don't over-summarize them. Use the repo description (its abstract) as the tldr and leave method/contributions empty. fetch.py already keeps only repos with โ‰ฅ10 stars, ranked by stars, so they tend to be substantive (course / framework / awesome-list), not personal noise.

4 ยท Hot-topic synthesis (you, optional but recommended)

Cluster the kept items into a handful of coarse CS sub-fields (่‡ช็„ถ่ฏญ่จ€ๅค„็† / ่ฎก็ฎ—ๆœบ่ง†่ง‰ / ็ณป็ปŸไธŽ็ผ–่ฏ‘ โ€ฆ; merge aggressively). Write state/trends.json: {"top": [{"name","delta": <count>, "summary": "<=80ๅญ—ๆ–นๅ‘ๆ€ป็ป“", "papers": ["title", ...]}, ... up to 3]}.

5 ยท Render the digest (script)

cd skill/scripts && python3 render.py

Writes digests/YYYY-MM-DD.md + .html from curated.json (+ trends.json) and records everything shown into seen.json so it won't repeat.

6 ยท Notify (script, optional)

cd skill/scripts && python3 notify.py     # emails the HTML digest if SMTP_* env is set

7 ยท Report back (you)

Tell the user how many papers were kept, the top hot directions, and the digest path. Offer to open the HTML or adjust keywords.

Notes

  • Scripts are pure Python stdlib โ€” no pip install required.
  • fetch.py already filters garbage future dates and de-duplicates across runs.
  • This skill is the agent-driven counterpart of the project's FastAPI web dashboard; both share the same sources and pipeline philosophy.

๊ด€๋ จ ์Šคํ‚ฌ