Skip to main content

arxiv-ingest

Tests PyPI version Python 3.11+

日本語 README: README.ja.md

Fetch recent arXiv papers by keyword and scaffold them into structured research notes.

Works standalone as a CLI, integrates with Claude Code for LLM-assisted evidence extraction, and auto-runs via GitHub Actions.

Features

  • Keyword-based collection — list topics in config.yaml, no code needed
  • 3-layer wiki — sources/ (metadata) · evidence/ (claims) · wiki/ (synthesis)
  • Safe re-runs — already-filled files are never overwritten
  • LLM auto-summary — --summarize fills files via Claude API
  • Date filtering — --since=YYYY-MM-DD for targeted backfills
  • Inspection tools — list, status, search for managing your corpus
  • Export — GitHub Issues, BibTeX, CSV
  • Webhook notifications — post new-paper summaries to Slack or Discord
  • Obsidian integration — [[wikilinks]] and graph view connectivity
  • Quartz integration — publish directly to a Quartz v4 static site
  • Auto-index — index/recent.md, log.md, index/peer-review.md updated on every run
  • GitHub Actions template — auto-runs Mon–Fri, workflow_dispatch for on-demand runs

Quick start

pip install arxiv-ingest

# Initialize wiki directory and config
arxiv-ingest init              # creates config.yaml + research-wiki/

# Edit keywords in config.yaml, then:
arxiv-ingest run               # fetch + generate in one step

From source:

git clone https://github.com/yamadan96/arxiv-ingest
cd arxiv-ingest
uv sync
arxiv-ingest init

Configuration (config.yaml)

output_dir: "../research-wiki"   # path to your wiki directory
max_results: 20                  # papers per keyword
days_back: 7                     # look back N days

keywords:
  - "Vision-Language Model transformer"
  - "LoRA PEFT fine-tuning language model"
  - "LLM reasoning chain-of-thought"

# Only accept papers in these arXiv categories:
allowed_arxiv_categories: [cs.CV, cs.CL, cs.LG, cs.AI, cs.RO, stat.ML]

# Primary category must be in this list (prevents off-topic papers):
require_primary_in: [cs.CV, cs.CL, cs.AI, cs.RO, stat.ML]

# arXiv category → wiki folder name:
category_map:
  cs.CV: "Multimodal"
  cs.CL: "Post_Training"
  cs.AI: "Reasoning"
  cs.RO: "Physical_AI"
  stat.ML: "Pretraining"

# Optional: post new-paper summaries to Slack or Discord
# webhook_url: "https://hooks.slack.com/services/..."

See config.yaml.example for all options with documentation.

Commands reference

Command Description
init [wiki-dir] Create config.yaml and wiki directory skeleton
fetch Fetch papers from arXiv → data/fetched.json
generate Create skeleton files from fetched.json
run fetch + generate in one step
list List papers in fetched.json
status Show fill progress (filled / unfilled per layer)
search <term> Full-text search across all local wiki files
embed Encode paper embeddings for semantic search (requires [semantic])
export Export papers to GitHub Issues, BibTeX, or CSV
open <id|slug> Open a paper's arXiv page in the browser
version Print the installed version

Common flags

arxiv-ingest fetch --since=2025-01-01   # fetch from a specific date
arxiv-ingest fetch --dry-run            # preview without writing

arxiv-ingest generate --obsidian        # use [[wikilinks]] (Obsidian mode)
arxiv-ingest generate --quartz          # output Quartz-compatible files
arxiv-ingest generate --summarize       # auto-fill via Claude API
arxiv-ingest generate --dry-run         # preview without writing
arxiv-ingest generate --limit=5         # generate for at most 5 papers

arxiv-ingest list --category=Multimodal # filter by wiki category
arxiv-ingest list --unfilled            # only papers with empty wiki pages
arxiv-ingest list --limit=10            # show at most 10 papers
arxiv-ingest list --json                # JSON output for piping to jq

arxiv-ingest search attention --json    # search results as JSON

arxiv-ingest embed                          # encode embeddings for semantic search
arxiv-ingest search --semantic "vision transformer"  # semantic similarity search
arxiv-ingest search --semantic "LoRA" --limit=5      # top 5 semantic results

arxiv-ingest export --format=bibtex          # BibTeX output (no gh needed)
arxiv-ingest export --format=bibtex --limit=5 # top 5 papers as BibTeX
arxiv-ingest export --format=csv             # CSV output
arxiv-ingest export --repo=owner/repo         # GitHub Issues: target repository
arxiv-ingest export --dry-run                 # GitHub Issues: preview only

arxiv-ingest open 2501.00001v1          # open by arXiv ID
arxiv-ingest open attention-is-all      # open by wiki slug

Output format (default)

output_dir/
├── SCHEMA.md                         # Wiki conventions
├── log.md                            # Append-only change log (auto-updated)
├── sources/{Category}/{slug}.md      # Metadata — written once, never overwritten
├── evidence/{Category}/{slug}.md     # Claims & benchmarks — fill this in
├── wiki/
│   ├── index.md                      # Manual topic catalog
│   └── papers/{Category}/{slug}.md   # Synthesis & interpretation
├── figures/{Category}/{slug}/        # Paper figures (manual placement)
├── decisions/                        # Adoption / rejection notes
├── presentations/                    # Study session slides
└── index/
    ├── recent.md                     # Auto-updated on every run
    ├── peer-review.md                # Auto-updated on every run
    ├── topics.md                     # Topic index (manual)
    ├── models.md                     # Model index (manual)
    └── open-questions.md             # Open questions (manual)

evidence/ and wiki/ files are only re-created if they still contain the unfilled template placeholder, so manual edits are safe across re-runs.

Obsidian integration

Obsidian users can open the wiki directory as a vault and get automatic graph-view connectivity between papers.

# First-time setup: creates .obsidian/app.json with wikilinks enabled
arxiv-ingest init --obsidian my-research-wiki

# Daily use: generates [[wikilinks]] instead of plain Markdown links
arxiv-ingest run --obsidian

What --obsidian changes:

  • wiki/papers/ pages use [[slug]] instead of [source](path/to/file.md)
  • evidence/ pages include a > Source paper: [[slug]] backlink

Quartz integration

Quartz v4 users can publish papers directly to a static site with graph view, backlinks, and tag pages.

# First-time setup: creates content/papers/ and content/templates/
arxiv-ingest init --quartz my-quartz-site

# Daily use: generates content/papers/{YYYY}/{slug}.md
arxiv-ingest run --quartz

# With LLM auto-fill (fills all sections in Japanese)
arxiv-ingest run --quartz --summarize

Generated file (content/papers/2025/attention-is-all-you-need.md):

---
title: "Attention Is All You Need"
authors: "Vaswani, Ashish, Shazeer, Noam, ..."
venue: "arXiv:2501.00001"        # "ICLR 2022 / arXiv:..." when journal_ref available
year: 2025
url: "https://arxiv.org/abs/2501.00001"
code: ""
read_date: 2026-06-16
status: reading
tags:
  - Post_Training
  - transformer
---

Sections: TL;DR · 背景・問題設定 · 手法 · 実験 · 強み · 弱み・未解決の問い · 関連研究とのつながり · 自分の研究・実装への示唆

LLM auto-summary

Install the optional anthropic dependency and set your API key:

pip install 'arxiv-ingest[summarize]'
export ANTHROPIC_API_KEY=sk-ant-...

arxiv-ingest generate --summarize          # fills evidence/ (default mode)
arxiv-ingest generate --quartz --summarize # fills Quartz sections in Japanese

Claude reads each paper's abstract and pre-fills the files. Already-edited files are never overwritten.

Webhook notifications

Add webhook_url to config.yaml to receive a post-run summary in Slack or Discord:

webhook_url: "https://hooks.slack.com/services/T.../B.../..."
# Discord:
# webhook_url: "https://discord.com/api/webhooks/..."

The webhook is non-fatal — if it fails, the run continues normally.

Using with Claude Code

Copy the command file so /arxiv-ingest is available as a slash command:

cp .claude/commands/arxiv-ingest.md ~/.claude/commands/

After arxiv-ingest run, invoke /arxiv-ingest in Claude Code. Claude reads each paper's abstract (and PDF when available) and fills evidence/ and wiki/ files automatically.

GitHub Actions: daily auto-ingest

Setup

  1. Fork or use this repo as a template

  2. Create a GitHub Fine-grained PAT with Write access to your wiki repo

  3. Add to Settings → Secrets and variables → Actions:

    Kind Name Value
    Secret GH_PAT your PAT (needs Write access to wiki/paper-survey repos)
    Variable WIKI_REPO your-name/research-wiki (3-layer wiki mode)
    Variable PAPER_SURVEY_REPO your-name/paper-survey (Quartz mode, optional)
  4. Go to Actions → Daily arXiv Ingest → Run workflow to verify

Schedule

  • Auto: Mon–Fri UTC 01:00 — cron: '0 1 * * 1-5'
  • Manual: workflow_dispatch with days_back, summarize, and quartz inputs

Quartz auto-deploy

Enable quartz: true in workflow_dispatch to push directly to your Quartz site:

Actions → Daily arXiv Ingest → Run workflow → quartz: ✓

Commits go to PAPER_SURVEY_REPO under content/papers/{YYYY}/{slug}.md. Quartz's own deploy workflow picks up the push and rebuilds the site automatically.

Requirements

  • Python 3.11+
  • uv (recommended) or pip

License

MIT

Metadata

Release files for arxiv-ingest 0.20.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for arxiv-ingest 0.20.0
File Size Uploaded Provenance
arxiv_ingest-0.20.0.tar.gz 155.9 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for arxiv-ingest 0.20.0
File Interpreter ABI Platform
arxiv_ingest-0.20.0-py3-none-any.whl Python 3 none any Details

Total release size: 335.8 kB

Release files / arxiv_ingest-0.20.0.tar.gz

Download URL arxiv_ingest-0.20.0.tar.gz
Size 155.9 kB
Tags Source
SHA-256 checksum
How to use checksums
e26604317563f079abda834bc899df7b0520e0f580c51aacd482c370fcb59934
BLAKE2b-256 checksum
How to use checksums
e37a67e942a42555cc2a0ec02f5bd1cb324911279722b00717be9b792495a4b7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / arxiv_ingest-0.20.0-py3-none-any.whl

Download URL arxiv_ingest-0.20.0-py3-none-any.whl
Size 179.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bc38cce7b14c326fb975833b5df0fd5e74c0aecc67db9e30b203b5b16df4ca1f
BLAKE2b-256 checksum
How to use checksums
a9c6b234c8a37c94e415cdf04fe00957fea8f008e95ab8d66db2709719479d04
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.21 {"installer":{"name":"uv","version":"0.11.21","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for arxiv-ingest 0.20.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page