arxiv
arXivから学術論文を検索、ダウンロード、要約できます。ユーザーが「arXivを検索」「論文をダウンロード」「arXivから取得」「論文のPDFを取得」などと指示した場合、またはarXivから論文を見つけてローカルのペーパーライブラリに保存したい場合に使用します。
description の原文を見る
Search, download, and summarize academic papers from arXiv. Use when user says "search arxiv", "download paper", "fetch arxiv", "arxiv search", "get paper pdf", or wants to find and save papers from arXiv to the local paper library.
SKILL.md 本文
arXiv論文検索・ダウンロード
トピックまたはarXiv論文IDで検索: $ARGUMENTS
定数
- PAPER_DIR - ダウンロードしたPDFを保存するローカルディレクトリ。デフォルト: 現在のプロジェクトディレクトリの
papers/ - MAX_RESULTS = 10 - デフォルトの検索結果数。
- FETCH_SCRIPT - ARISインストール相対パスの
tools/arxiv_fetch.py、または現在のプロジェクト相対パス。見つからない場合はインラインPythonにフォールバック。
オーバーライド(引数に追加):
/arxiv "attention mechanism" - max: 20- 最大20件の結果を返す/arxiv "2301.07041" - download- IDで特定の論文をダウンロード/arxiv "query" - dir: literature/- PDFをカスタムディレクトリに保存/arxiv "query" - download: all- 全結果のPDFをダウンロード
ワークフロー
ステップ1: 引数をパース
$ARGUMENTS からディレクティブをパース:
- クエリまたはID: メイン検索用語またはベアのarXiv ID (
2301.07041またはcs/0601001など) - max: N: MAX_RESULTSをオーバーライド (例:- max: 20)- dir: PATH: PAPER_DIRをオーバーライド (例:- dir: literature/)- download: リスト表示後、最初の結果のPDFをダウンロード- download: all: 全結果のPDFをダウンロード
引数がarXiv IDパターン (YYMM.NNNNN または category/NNNNNNN) と一致する場合、検索をスキップしてステップ3に直接進みます。
ステップ2: arXivを検索
フェッチスクリプトを探索:
SCRIPT=$(python3 -c "
import pathlib
candidates = [
pathlib.Path('tools/arxiv_fetch.py'),
pathlib.Path.home() / '.claude' / 'skills' / 'arxiv' / 'arxiv_fetch.py',
]
for p in candidates:
if p.exists():
print(p)
break
" 2>/dev/null)
SCRIPTが見つかった場合, 実行:
python3 "$SCRIPT" search "QUERY" --max MAX_RESULTS
SCRIPTが見つからない場合, インラインPythonにフォールバック:
python3 - <<'PYEOF'
import json
import urllib.parse
import urllib.request
import xml.etree.ElementTree as ET
NS = "http://www.w3.org/2005/Atom"
query = urllib.parse.quote("QUERY")
url = (f"http://export.arxiv.org/api/query"
f"?search_query={query}&start=0&max_results=MAX_RESULTS"
f"&sortBy=relevance&sortOrder=descending")
with urllib.request.urlopen(url, timeout=30) as r:
root = ET.fromstring(r.read())
papers = []
for entry in root.findall(f"{{{NS}}}entry"):
aid = entry.findtext(f"{{{NS}}}id", "").split("/abs/")[-1].split("v")[0]
title = (entry.findtext(f"{{{NS}}}title", "") or "").strip().replace("\n", " ")
abstract = (entry.findtext(f"{{{NS}}}summary", "") or "").strip().replace("\n", " ")
authors = [a.findtext(f"{{{NS}}}name", "") for a in entry.findall(f"{{{NS}}}author")]
published = entry.findtext(f"{{{NS}}}published", "")[:10]
cats = [c.get("term", "") for c in entry.findall(f"{{{NS}}}category")]
papers.append({
"id": aid,
"title": title,
"authors": authors,
"abstract": abstract,
"published": published,
"categories": cats,
"pdf_url": f"https://arxiv.org/pdf/{aid}.pdf",
"abs_url": f"https://arxiv.org/abs/{aid}",
})
print(json.dumps(papers, ensure_ascii=False, indent=2))
PYEOF
結果をテーブルで表示:
| # | arXiv ID | Title | Authors | Date | Category |
|---|------------|---------------------|----------------|------------|----------|
| 1 | 2301.07041 | Attention Is All... | Vaswani et al. | 2017-06-12 | cs.LG |
ステップ3: 特定のIDの詳細を取得
単一の論文IDが要求された場合(直接またはステップ2から):
python3 "$SCRIPT" search "id:ARXIV_ID" --max 1
# またはフォールバック:
python3 -c "
import urllib.request, xml.etree.ElementTree as ET
NS = 'http://www.w3.org/2005/Atom'
url = 'http://export.arxiv.org/api/query?id_list=ARXIV_ID'
with urllib.request.urlopen(url, timeout=30) as r:
root = ET.fromstring(r.read())
# 詳細全体を出力 ...
"
表示内容: タイトル、全著者、カテゴリ、完全なアブストラクト、公開日、PDF URL、アブストラクトURL。
ステップ4: PDFをダウンロード
ダウンロードが要求された場合、ダウンロード対象の各論文IDについて:
# フェッチスクリプトを使用:
python3 "$SCRIPT" download ARXIV_ID --dir PAPER_DIR
# フォールバック:
mkdir -p PAPER_DIR && python3 -c "
import pathlib
import sys
import urllib.request
out = pathlib.Path('PAPER_DIR/ARXIV_ID.pdf')
if out.exists():
print(f'Already exists: {out}')
sys.exit(0)
req = urllib.request.Request(
'https://arxiv.org/pdf/ARXIV_ID.pdf',
headers={'User-Agent': 'arxiv-skill/1.0'},
)
with urllib.request.urlopen(req, timeout=60) as r:
out.write_bytes(r.read())
print(f'Downloaded: {out} ({out.stat().st_size // 1024} KB)')
"
各ダウンロード後:
- ファイルサイズが10KBを超えていることを確認(小さいファイルはエラーHTMLページの可能性のため拒否)
- レート制限を回避するため、連続ダウンロード間に1秒の遅延を追加
- 報告:
Downloaded: papers/2301.07041.pdf (842 KB)
ステップ5: 要約
各論文について(ダウンロードまたはAPIで取得):
## [Title]
- **arXiv**: [ID] - [abs_url]
- **著者**: [著者全員]
- **日付**: [published]
- **カテゴリ**: [cs.LG, cs.AI, ...]
- **アブストラクト**: [完全なアブストラクト]
- **主要な貢献** (アブストラクトから抽出):
- [貢献1]
- [貢献2]
- [貢献3]
- **ローカルPDF**: papers/[ID].pdf (ダウンロード済みの場合)
ステップ6: リサーチウィキを更新(アクティブな場合)
プロジェクトに research-wiki/ が存在する場合に必須; それ以外は黙ってスキップします。ウィキディレクトリが存在する場合、shared-references/wiki-helper-resolution.mdの正規チェーンに従って $WIKI_SCRIPT を解決(バリアントB — 警告後スキップ)、この呼び出しで返されたすべての論文を取り込みます:
if [ -d research-wiki/ ]; then
cd "$(git rev-parse --show-toplevel 2>/dev/null || pwd)" || exit 1
ARIS_REPO="${ARIS_REPO:-$(awk -F'\t' '$1=="repo_root"{print $2; exit}' .aris/installed-skills.txt 2>/dev/null)}"
WIKI_SCRIPT=".aris/tools/research_wiki.py"
[ -f "$WIKI_SCRIPT" ] || WIKI_SCRIPT="tools/research_wiki.py"
[ -f "$WIKI_SCRIPT" ] || { [ -n "${ARIS_REPO:-}" ] && WIKI_SCRIPT="$ARIS_REPO/tools/research_wiki.py"; }
[ -f "$WIKI_SCRIPT" ] || {
echo "WARN: research_wiki.py not found; arxiv results delivered, wiki ingest skipped. Fix: bash tools/install_aris.sh, export ARIS_REPO, or cp <ARIS-repo>/tools/research_wiki.py tools/." >&2
WIKI_SCRIPT=""
}
if [ -n "$WIKI_SCRIPT" ]; then
for each arxiv_id in results:
python3 "$WIKI_SCRIPT" ingest_paper research-wiki/ \
--arxiv-id "<arxiv_id>"
fi
fi
ヘルパーはメタデータ取得、スラッグ生成、重複排除、ページ作成、インデックス再構築、ログ追記を1つの呼び出しで処理します — papers/<slug>.md を手動で記述しないでください。正規ヘルパールールについては shared-references/integration-contract.md を参照してください。逃した取り込みは後で $WIKI_SCRIPT を解決してから python3 "$WIKI_SCRIPT" sync research-wiki/ --arxiv-ids <id1>,<id2>,... でバックフィルできます。
ステップ7: 最終出力
実行内容を要約:
Found N papers for "query"Downloaded: papers/2301.07041.pdf (842 KB)(各ダウンロードについて)Wiki-ingested N papers(research-wiki/が存在した場合)- 警告(レート制限に達した、ファイルが小さすぎた、既に存在する など)
フォローアップスキルを提案:
/research-lit "topic" - マルチソースレビュー: Zotero + Obsidian + ローカルPDF + ウェブ
/novelty-check "idea" - これらの論文に対してアイデアが新規であることを確認
キールール
- arXiv IDは常に目立つように表示 - ユーザーは引用と再現性のためにそれが必要です
- ダウンロードしたPDFを検証: ファイルは10KBを超えている必要があります; より小さい場合は警告して削除してください
- レート制限: 連続PDFダウンロード間に1秒待機; HTTP 429では5秒後に1回リトライ
- 同じパスの既存PDFは上書きしない - スキップして「already exists」と報告
- 両方のarXiv IDフォーマットを処理: 新形式 (
2301.07041) と旧形式 (cs/0601001) - PAPER_DIRが存在しない場合は自動的に作成
- arXiv APIに到達できない場合、エラーを明確に報告し、フォールバックとして
/research-litを- sources: webで使用することを提案
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- wanshuiyin
- ライセンス
- MIT
- 最終更新
- 2026/5/7
Source: https://github.com/wanshuiyin/Auto-claude-code-research-in-sleep / ライセンス: MIT