#587 by GitHub stars

juliye2025/evil-read-arxiv

Claude Code+Obsidian,邪修读论文就是快

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

conf-papers/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

ef3a59484108 → ef3a59484108

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → ef3a59484108

No earlier version was observed for comparison.

Compare on GitHub

extract-paper-images/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

ef3a59484108 → ef3a59484108

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → ef3a59484108

No earlier version was observed for comparison.

Compare on GitHub

paper-analyze/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

ef3a59484108 → ef3a59484108

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → ef3a59484108

No earlier version was observed for comparison.

Compare on GitHub

paper-search/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

ef3a59484108 → ef3a59484108

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → ef3a59484108

No earlier version was observed for comparison.

Compare on GitHub

start-my-day/SKILL.md

Week of Nov 2, 2026 · +0 / −0 lines

Before Network or broad shell → After Network or broad shell

ef3a59484108 → ef3a59484108

Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.

Compare on GitHub

Week of Oct 26, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → ef3a59484108

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit ef3a594841081703259545c828c98b52af835817

git clone --filter=blob:none --no-checkout https://github.com/juliye2025/evil-read-arxiv.git .hotskills/juliye2025-evil-read-arxiv && git -C .hotskills/juliye2025-evil-read-arxiv checkout --detach ef3a594841081703259545c828c98b52af835817 # Copy each selected skill directory from .hotskills/juliye2025-evil-read-arxiv into .agents/skills/<skill-name>/
1.8kGitHub stars
17stars in 7 days
5skills in this repository
0commits in 30 days

Heat

4.8
  • Star growth, last 7 daysAhead of 83% of tracked repositories
  • Star growth, last 24 hoursAhead of 71% of tracked repositories
  • Rank movement, last 7 daysAhead of 22% 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 7, 20261,791

Individual skills in this repository

How it works

conf-papers

When your agent uses it

通过 DBLP 与 Semantic Scholar 搜索 CVPR、ICCV、ECCV、ICLR、AAAI、NeurIPS、ICML 等顶会论文,评分后生成 Obsidian 年度推荐笔记。Use when the user asks for a conference/year paper list, top-conference recommendations, or papers filtered by venue.

What it loads into context

Frontmatter

78 tokens

Always available to the agent

SKILL.md

4,387 tokens

When the skill is activated

Reference documents

0 tokens

Loaded on request

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

The playbook

  1. 工作流程概述
  2. 配置说明
  3. 步骤1:解析参数
  4. 步骤2:扫描已有笔记构建索引
  5. 步骤3:搜索顶会论文
  6. 步骤4:读取筛选结果
  7. 步骤5:生成推荐笔记
  8. 步骤6:关键词链接
  9. conf-papers (本skill)
  10. start-my-day (每日推荐)
  11. 自动执行流程
  12. 临时文件清理
  13. 依赖项

Scripts executed separately

  • scripts/search_conf_papers.py

Files

  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • SKILL.mdcore15,206 bytes
  • agents/openai.yamlasset212 bytes
  • conf-papers.yamlasset764 bytes
  • scripts/search_conf_papers.pyruns29,017 bytes

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

View the complete source on GitHub

Skills included

  • conf-papers
  • extract-paper-images
  • paper-analyze
  • paper-search
  • start-my-day

Repository facts

License
No license detected
Created
Mar 3, 2026
Last pushed
Sep 15, 2026
Forks
173
Open issues
12
Project activity
Active

Rank over the last 12 weeks

Now #587 · best #439 · down 74 in 30 days

  1. #575 on Nov 2
  2. #578 on Nov 3
  3. #581 on Nov 4
  4. #583 on Nov 5
  5. #584 on Nov 6
  6. #587 since Nov 7
75 earlier periods
  1. #416 on Aug 2
  2. #427 on Aug 8
  3. #425 on Aug 9
  4. #442 on Aug 10
  5. #440 on Aug 11
  6. #438 on Aug 12
  7. #447 on Aug 13
  8. #438 on Aug 15
  9. #441 on Aug 16
  10. #449 on Aug 17
  11. #454 on Aug 18
  12. #452 on Aug 19
  13. #449 on Aug 20
  14. #454 on Aug 21
  15. #439 on Aug 22
  16. #460 on Aug 25
  17. #453 on Aug 26
  18. #461 on Aug 27
  19. #458 on Aug 28
  20. #449 on Aug 29
  21. #444 on Aug 30
  22. #463 on Aug 31
  23. #468 on Sep 1
  24. #462 on Sep 2
  25. #470 on Sep 3
  26. #455 from Sep 4 to Sep 5
  27. #463 on Sep 6
  28. #466 on Sep 7
  29. #484 on Sep 8
  30. #476 on Sep 9
  31. #479 on Sep 10
  32. #473 on Sep 11
  33. #471 from Sep 12 to Sep 13
  34. #487 on Sep 14
  35. #480 on Sep 15
  36. #490 on Sep 16
  37. #481 on Sep 17
  38. #473 on Sep 19
  39. #483 on Sep 20
  40. #484 on Sep 21
  41. #493 on Sep 22
  42. #487 on Sep 23
  43. #479 on Sep 24
  44. #475 on Sep 26
  45. #490 on Sep 27
  46. #495 on Sep 28
  47. #504 on Sep 29
  48. #499 on Sep 30
  49. #491 on Oct 1
  50. #490 on Oct 2
  51. #477 on Oct 3
  52. #483 on Oct 5
  53. #499 on Oct 6
  54. #498 on Oct 7
  55. #513 on Oct 8
  56. #512 on Oct 9
  57. #506 on Oct 10
  58. #509 on Oct 11
  59. #520 on Oct 12
  60. #518 on Oct 13
  61. #520 on Oct 14
  62. #517 on Oct 15
  63. #521 on Oct 16
  64. #511 on Oct 17
  65. #518 on Oct 18
  66. #531 on Oct 19
  67. #532 on Oct 20
  68. #538 on Oct 21
  69. #529 on Oct 22
  70. #525 on Oct 23
  71. #512 on Oct 24
  72. #561 on Oct 25
  73. #569 from Oct 28 to Oct 29
  74. #572 from Oct 30 to Oct 31
  75. #574 on Nov 1

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 28 notes
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • conf-papers/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • paper-search/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • start-my-day/SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 91 signals by file

conf-papers/scripts/search_conf_papers.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 101
    S2_API_URL = "https://api.semanticscholar.org/graph/v1/paper/search"
  • Network accessline 102
    S2_PAPER_URL = "https://api.semanticscholar.org/graph/v1/paper"
  • Network accessline 103
    [Credential-related source omitted]
  • Network accessline 104
    S2_BATCH_URL = "https://api.semanticscholar.org/graph/v1/paper/batch"
  • Access to secretsline 105
    [Credential-related source omitted]
  • Network accessline 108
    DBLP_API_URL = "https://dblp.org/search/publ/api"
  • Network accessline 164
    try:                     if HAS_REQUESTS:                         resp = requests.get(url, headers={"User-Agent": "ConfPapers/1.0"}, timeout=60)
  • Network accessline 165
    if HAS_REQUESTS:                         resp = requests.get(url, headers={"User-Agent": "ConfPapers/1.0"}, timeout=60)                         resp.raise_for_status()
  • Network accessline 166
    resp = requests.get(url, headers={"User-Agent": "ConfPapers/1.0"}, timeout=60)
  • Network accessline 168
    data = resp.json()                     else:                         req = urllib.request.Request(url, headers={"User-Agent": "ConfPapers/1.0"})
  • Network accessline 169
    else:                         req = urllib.request.Request(url, headers={"User-Agent": "ConfPapers/1.0"})                         with urllib.request.urlopen(req, timeout=60) as response:
  • Network accessline 170
    req = urllib.request.Request(url, headers={"User-Agent": "ConfPapers/1.0"})
  • Network accessline 171
    with urllib.request.urlopen(req, timeout=60) as response:
  • Access to secretsline 406
    [Credential-related source omitted]
  • Access to secretsline 407
    [Credential-related source omitted]
  • Network accessline 431
    for attempt in range(max_retries):             try:                 response = requests.get(S2_API_URL, params=params, headers=headers, timeout=15)
  • Network accessline 432
    try:                 response = requests.get(S2_API_URL, params=params, headers=headers, timeout=15)                 if response.status_code == 429:
  • Network accessline 433
    response = requests.get(S2_API_URL, params=params, headers=headers, timeout=15)

extract-paper-images/scripts/extract_images.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 53
    source_url = f"https://arxiv.org/e-print/{arxiv_id}"
  • Network accessline 56
    try:         if HAS_REQUESTS:             response = requests.get(source_url, timeout=60)
  • Network accessline 57
    if HAS_REQUESTS:             response = requests.get(source_url, timeout=60)             content = response.content if response.status_code == 200 else None
  • Network accessline 58
    response = requests.get(source_url, timeout=60)
  • Network accessline 61
    else:             try:                 req = urllib.request.urlopen(source_url, timeout=60)
  • Network accessline 62
    try:                 req = urllib.request.urlopen(source_url, timeout=60)                 content = req.read()
  • Network accessline 63
    req = urllib.request.urlopen(source_url, timeout=60)
  • Network accessline 136
    try:         if HAS_REQUESTS:             with requests.get(
  • Network accessline 137
    if HAS_REQUESTS:             with requests.get(                 pdf_url,
  • Network accessline 138
    with requests.get(
  • Network accessline 161
    raise ValueError(f'URL返回的不是PDF (Content-Type: {content_type or "--"})')         else:             req = urllib.request.urlopen(pdf_url, timeout=90)
  • Network accessline 162
    else:             req = urllib.request.urlopen(pdf_url, timeout=90)             content = req.read(max_bytes + 1)
  • Network accessline 163
    req = urllib.request.urlopen(pdf_url, timeout=90)
  • Network accessline 182
    return download_public_pdf(f"https://arxiv.org/pdf/{arxiv_id}", temp_dir)

paper-analyze/scripts/generate_note.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 31
    [Credential-related source omitted]
  • Network accessline 93
    def source_links(source_type, source_url, paper_id, language):     if source_type == "arxiv" and paper_id:         abs_url = source_url or f"https://arxiv.org/abs/{paper_id}"
  • Network accessline 94
    if source_type == "arxiv" and paper_id:         abs_url = source_url or f"https://arxiv.org/abs/{paper_id}"         pdf_url = f"https://arxiv.org/pdf/{paper_id}"
  • Network accessline 95
    abs_url = source_url or f"https://arxiv.org/abs/{paper_id}"
  • Network accessline 96
    pdf_url = f"https://arxiv.org/pdf/{paper_id}"

paper-analyze/scripts/resolve_source.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 296
    headers = {"User-Agent": USER_AGENT, "Accept": "text/html,application/pdf;q=0.9,*/*;q=0.5"}     with requests.get(url, headers=headers, stream=True, timeout=(15, 90), allow_redirects=True) as response:
  • Network accessline 297
    with requests.get(url, headers=headers, stream=True, timeout=(15, 90), allow_redirects=True) as response:
  • Network accessline 414
    if arxiv_id:         base_id = re.sub(r"v\d+$", "", arxiv_id, flags=re.IGNORECASE)         pdf_url = f"https://arxiv.org/pdf/{arxiv_id}"
  • Network accessline 415
    base_id = re.sub(r"v\d+$", "", arxiv_id, flags=re.IGNORECASE)         pdf_url = f"https://arxiv.org/pdf/{arxiv_id}"         result = {
  • Network accessline 416
    pdf_url = f"https://arxiv.org/pdf/{arxiv_id}"
  • Network accessline 418
    "source_type": "arxiv",             "original_input": original_input,             "source_url": f"https://arxiv.org/abs/{arxiv_id}",
  • Network accessline 419
    "original_input": original_input,             "source_url": f"https://arxiv.org/abs/{arxiv_id}",             "canonical_url": f"https://arxiv.org/abs/{arxiv_id}",
  • Network accessline 420
    "source_url": f"https://arxiv.org/abs/{arxiv_id}",
  • Network accessline 421
    "canonical_url": f"https://arxiv.org/abs/{arxiv_id}",

paper-analyze/scripts/update_graph.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 20
    [Credential-related source omitted]

paper-search/scripts/paper_hunter.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 91
    logger.info(f"Downloading PDF from {paper_data['source']}: {paper_data['title'][:50]}...")         try:             r = requests.get(paper_data['pdf_url'], timeout=30)
  • Network accessline 92
    try:             r = requests.get(paper_data['pdf_url'], timeout=30)             if r.status_code == 200 and b'%PDF' in r.content[:100]:
  • Network accessline 93
    r = requests.get(paper_data['pdf_url'], timeout=30)
  • Network accessline 178
    "date": str(article.publication_date) if hasattr(article, 'publication_date') else "Unknown",             "abstract": article.abstract if hasattr(article, 'abstract') else "No abstract",             "url": f"https://pubmed.ncbi.nlm.nih.gov/
  • Network accessline 179
    "abstract": article.abstract if hasattr(article, 'abstract') else "No abstract",             "url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/" if pmid else "",             "pdf_url": "",
  • Network accessline 180
    "url": f"https://pubmed.ncbi.nlm.nih.gov/{pmid}/" if pmid else "",

start-my-day/scripts/common_words.py

  • Executable scriptline 1
    Executable file

start-my-day/scripts/link_keywords.py

  • Executable scriptline 1
    #!/usr/bin/env python3

start-my-day/scripts/scan_existing_notes.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Access to secretsline 199
    [Credential-related source omitted]

start-my-day/scripts/search_arxiv.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 42
    ARXIV_NS = {     'atom': 'http://www.w3.org/2005/Atom',
  • Network accessline 43
    'atom': 'http://www.w3.org/2005/Atom',
  • Network accessline 44
    'arxiv': 'http://arxiv.org/schemas/atom'
  • Network accessline 47
    SEMANTIC_SCHOLAR_API_URL = "https://api.semanticscholar.org/graph/v1/paper/search"
  • Access to secretsline 105
    [Credential-related source omitted]
  • Access to secretsline 124
    [Credential-related source omitted]
  • Access to secretsline 125
    [Credential-related source omitted]
  • Network accessline 198
    url = (         f"https://export.arxiv.org/api/query?"
  • Network accessline 199
    f"https://export.arxiv.org/api/query?"
  • Network accessline 209
    for attempt in range(max_retries):         try:             with urllib.request.urlopen(url, timeout=60) as response:
  • Network accessline 210
    try:             with urllib.request.urlopen(url, timeout=60) as response:                 xml_content = response.read().decode('utf-8')
  • Network accessline 211
    with urllib.request.urlopen(url, timeout=60) as response:
  • Network accessline 271
    url = (         f"https://export.arxiv.org/api/query?"         f"search_query={urllib.parse.quote(full_query, safe='+:')}&"
  • Network accessline 272
    f"https://export.arxiv.org/api/query?"         f"search_query={urllib.parse.quote(full_query, safe='+:')}&"         f"max_results={max_results}&"
  • Network accessline 282
    for attempt in range(max_retries):         try:             with urllib.request.urlopen(url, timeout=60) as response:
  • Network accessline 283
    try:             with urllib.request.urlopen(url, timeout=60) as response:                 xml_content = response.read().decode('utf-8')
  • Network accessline 284
    with urllib.request.urlopen(url, timeout=60) as response:
  • Access to secretsline 335
    [Credential-related source omitted]
  • Access to secretsline 336
    [Credential-related source omitted]
  • Network accessline 342
    try:             if HAS_REQUESTS:                 response = requests.get(
  • Network accessline 343
    if HAS_REQUESTS:                 response = requests.get(                     SEMANTIC_SCHOLAR_API_URL,
  • Network accessline 344
    response = requests.get(
  • Network accessline 354
    query_string = urllib.parse.urlencode(params)                 url = f"{SEMANTIC_SCHOLAR_API_URL}?{query_string}"                 req = urllib.request.Request(url, headers=headers)
  • Network accessline 355
    url = f"{SEMANTIC_SCHOLAR_API_URL}?{query_string}"                 req = urllib.request.Request(url, headers=headers)                 with urllib.request.urlopen(req, timeout=15) as response:
  • Network accessline 356
    req = urllib.request.Request(url, headers=headers)
  • Network accessline 357
    with urllib.request.urlopen(req, timeout=15) as response:
  • Access to secretsline 950
    [Credential-related source omitted]

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.

No combined signals at this commit.

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeCompatibleStandard SKILL.md conf-papers/SKILL.md.claude/skills/<skill-name>/
CodexNativeManifest web/AGENTS.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md conf-papers/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md conf-papers/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md conf-papers/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard SKILL.md conf-papers/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.

juliye2025/evil-read-arxiv: #587 on hotskills, 1.8k stars

[![juliye2025/evil-read-arxiv on hotskills](https://hotskills.dev/badge/juliye2025-evil-read-arxiv.svg)](https://hotskills.dev/skill/juliye2025-evil-read-arxiv/)