Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,7 @@ export const dict: Record<string, string> = {
"tui.skill.frontend-design.description": "Guidance for distinctive, intentional visual UI design",
"tui.skill.loop.description": "Schedule a prompt to run on a recurring interval",
"tui.skill.html-to-video-pipeline.description": "Short-video magic — make short videos with HTML",
"tui.skill.arxiv.description": "Search, cite, download, and track arXiv papers",

// Language switching
"tui.command.language.switch.title": "Switch language",
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/es.ts
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ export const dict = {
"tui.skill.frontend-design.description": "Guía para un diseño visual de UI distintivo e intencional",
"tui.skill.loop.description": "Programar un prompt para ejecutarse en un intervalo recurrente",
"tui.skill.html-to-video-pipeline.description": "El arma definitiva para vídeos cortos — crea vídeos cortos con HTML",
"tui.skill.arxiv.description": "Busca, cita, descarga y sigue artículos de arXiv",

// Language switching
"tui.command.language.switch.title": "Cambiar idioma",
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/fr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,7 @@ export const dict = {
"tui.skill.frontend-design.description": "Conseils pour un design d'interface visuel distinctif et intentionnel",
"tui.skill.loop.description": "Planifier l'exécution récurrente d'un prompt",
"tui.skill.html-to-video-pipeline.description": "L'arme ultime pour vidéos courtes — créez des vidéos courtes avec du HTML",
"tui.skill.arxiv.description": "Rechercher, citer, télécharger et suivre des articles arXiv",

// Language switching
"tui.command.language.switch.title": "Changer de langue",
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/ja.ts
Original file line number Diff line number Diff line change
Expand Up @@ -219,6 +219,7 @@ export const dict = {
"tui.skill.frontend-design.description": "個性的で意図的な UI ビジュアルデザインのガイド",
"tui.skill.loop.description": "プロンプトを一定間隔で繰り返し実行するようスケジュール",
"tui.skill.html-to-video-pipeline.description": "ショート動画の神ツール - HTML でショート動画を制作",
"tui.skill.arxiv.description": "arXiv 論文の検索・引用・ダウンロード・追跡",

// Language switching
"tui.command.language.switch.title": "言語を切り替え",
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/ru.ts
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,7 @@ export const dict = {
"tui.skill.frontend-design.description": "Руководство по выразительному, осмысленному визуальному дизайну UI",
"tui.skill.loop.description": "Запланировать запуск промпта с периодичностью",
"tui.skill.html-to-video-pipeline.description": "Магический инструмент для коротких видео — создавайте короткие видео с помощью HTML",
"tui.skill.arxiv.description": "Поиск, цитирование, загрузка и отслеживание статей arXiv",

// Language switching
"tui.command.language.switch.title": "Сменить язык",
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/skill.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const BUILTIN = new Set([
"frontend-design",
"loop",
"html-to-video-pipeline",
"arxiv",
])

export function skillDescription(
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/zh.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ export const dict = {
"tui.skill.frontend-design.description": "具备鲜明主张的前端视觉设计指南",
"tui.skill.loop.description": "按固定周期循环运行提示词",
"tui.skill.html-to-video-pipeline.description": "短视频神器 - 利用 HTML 制作短视频",
"tui.skill.arxiv.description": "搜索、引用、下载与追踪 arXiv 论文",

// Language switching
"tui.command.language.switch.title": "切换语言",
Expand Down
1 change: 1 addition & 0 deletions packages/opencode/src/cli/cmd/tui/i18n/zht.ts
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,7 @@ export const dict = {
"tui.skill.frontend-design.description": "具備鮮明主張的前端視覺設計指引",
"tui.skill.loop.description": "依固定週期循環執行提示詞",
"tui.skill.html-to-video-pipeline.description": "短影片神器 - 利用 HTML 製作短影片",
"tui.skill.arxiv.description": "搜尋、引用、下載與追蹤 arXiv 論文",

// Language switching
"tui.command.language.switch.title": "切換語言",
Expand Down
112 changes: 112 additions & 0 deletions packages/opencode/src/skill/builtin/.bundle/arxiv/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
---
name: arxiv
description: "Use this skill whenever the user wants to find, read, cite, track, download, or analyze academic papers on arXiv. That includes: searching papers by topic, author, category, or arXiv ID; fetching abstracts or full metadata; generating BibTeX citations; downloading PDFs; listing the latest submissions in a field (e.g. cs.AI daily digest); checking a paper's citation impact; finding who cites a paper, what it references, or related-paper recommendations. Trigger on mentions of 'arXiv', an arXiv ID (e.g. 2601.02780 or hep-th/0601001), an arxiv.org URL, 'paper search', 'literature review', 'find papers about X', 'cite this paper', or 'what's new in cs.LG'."
version: 2.0.0
license: MIT
platforms: [linux, macos, windows]
---

# arXiv Research

Search, read, cite, and analyze academic papers using the free arXiv API and Semantic Scholar API. No API keys, no dependencies — the bundled script uses only the Python stdlib.

## Quick Start: the `arxiv.py` script

Prefer `scripts/arxiv.py` over raw `curl` — it handles Atom XML parsing, versioned IDs, withdrawn-paper detection, and produces clean readable (or `--json`) output.

| Goal | Command |
|------|---------|
| Search papers | `python scripts/arxiv.py search "GRPO reinforcement learning" --max 10 --sort date` |
| Filtered search | `python scripts/arxiv.py search "attention" --author vaswani --category cs.CL` |
| Full metadata + abstract | `python scripts/arxiv.py get 2601.02780,1706.03762` |
| BibTeX citation | `python scripts/arxiv.py bibtex 2601.02780` |
| Download PDF | `python scripts/arxiv.py download 2601.02780 --dest ./papers` |
| Latest in a category | `python scripts/arxiv.py new cs.CL --max 10` |
| Who cites this paper | `python scripts/arxiv.py cites 2601.02780 --max 20` |
| What this paper cites | `python scripts/arxiv.py refs 2601.02780` |
| Related-paper recommendations | `python scripts/arxiv.py similar 2601.02780` |
| Machine-readable output | append `--json` to any command |

Common flags: `--max N` (result count), `--sort relevance|date|updated`, `--start N` (pagination offset, search only), `--json`.

## Reading Paper Content

After finding a paper, read it with the `webfetch` tool:

- Abstract page (fast, metadata + abstract): `https://arxiv.org/abs/2601.02780`
- Full paper as HTML (best for reading, when available): `https://arxiv.org/html/2601.02780`
- PDF: `https://arxiv.org/pdf/2601.02780`

If HTML is unavailable and the PDF must be processed locally, `download` it first, then use a PDF-processing skill.

## Recommended Research Workflows

**Literature review on a topic**
1. `search "topic" --sort date --max 15` — recent work
2. `search "topic" --max 15` — seminal work (relevance-sorted)
3. Cross-check impact: `python scripts/arxiv.py get ID` then `cites ID --max 5` for citation counts
4. Read the top candidates via `webfetch` on the abs/html URLs
5. `bibtex ID1,ID2,...` for the papers you keep

**Deep-dive a single paper**
1. `get ID` — full abstract, versions, journal ref, DOI
2. `refs ID` — what it builds on
3. `cites ID` — follow-up work (sorted by citation count)
4. `similar ID` — related papers you might have missed
5. `webfetch` the HTML/PDF for full text

**Stay current in a field**
- `new cs.AI --max 20` — latest submissions in a category
- Category taxonomy: https://arxiv.org/category_taxonomy — common ones: `cs.AI`, `cs.CL` (NLP), `cs.CV`, `cs.LG`, `cs.CR`, `stat.ML`, `math.OC`

## Raw API Reference (when the script isn't enough)

The script covers most needs; use the raw APIs for advanced queries.

### arXiv API (Atom XML)

```bash
curl -s "https://export.arxiv.org/api/query?search_query=all:transformer&max_results=5"
```

Field prefixes: `all:` (everything), `ti:` (title), `au:` (author), `abs:` (abstract), `cat:` (category), `co:` (comment, e.g. `co:accepted+NeurIPS`).

Boolean syntax (URL-encode spaces as `+`):

```
all:GPT+OR+all:BERT # OR
all:language+model+ANDNOT+all:vision # AND NOT
ti:"chain+of+thought" # exact phrase
au:hinton+AND+cat:cs.LG # combined
```

Parameters: `sortBy` (`relevance`|`lastUpdatedDate`|`submittedDate`), `sortOrder`, `start`, `max_results`, `id_list` (comma-separated IDs).

### Semantic Scholar API (JSON)

arXiv has no citation data — Semantic Scholar fills that gap (free, ~1 req/sec unauthenticated).

```bash
# Paper details with citation counts
curl -s "https://api.semanticscholar.org/graph/v1/paper/arXiv:2601.02780?fields=title,citationCount,influentialCitationCount,tldr"

# Author profile
curl -s "https://api.semanticscholar.org/graph/v1/author/search?query=Yann+LeCun&fields=name,hIndex,citationCount,paperCount"

# Keyword search returning JSON (alternative to arXiv search)
curl -s "https://api.semanticscholar.org/graph/v1/paper/search?query=GRPO&limit=5&fields=title,year,citationCount,externalIds"
```

Useful fields: `title`, `authors`, `year`, `abstract`, `tldr` (AI summary), `citationCount`, `influentialCitationCount`, `isOpenAccess`, `openAccessPdf`, `fieldsOfStudy`, `publicationVenue`, `externalIds` (arXiv ID, DOI).

## Important Details

**Rate limits** — arXiv: ~1 request / 3 seconds; Semantic Scholar: ~1 request / second. Space out consecutive calls; the script exits with a clear message on HTTP 429.

**ID formats** — new style `2402.03300`, old style `hep-th/0601001`. Both work everywhere.

**Versioning** — `arxiv.org/abs/2601.02780` resolves to the latest version; `...v2` is a specific immutable version. `bibtex` and `download` preserve the version suffix so citations match the content you actually read (later versions can change substantially).

**Withdrawn papers** — the script flags entries whose abstract indicates withdrawal/retraction with `[WITHDRAWN]`. Don't cite these without noting the status.

**Listings caveat** — `new CATEGORY` sorts by submission date via the search API; the official "new today" listing at `https://arxiv.org/list/cs.AI/new` may group slightly differently (cross-lists, replacements).
Loading
Loading