Track arxiv papers, generate AI summaries, and build a personal research knowledge base β from your terminal.
npx -y @christianfjung/paperctl track "retrieval augmented generation"# Zero-install (try it instantly)
npx -y @christianfjung/paperctl --help
# Install globally
npm install -g @christianfjung/paperctl
# Or clone and link
git clone https://github.com/ChristianFJung/paperctl && cd paperctl
npm install && npm install -g .- π‘ Track topics β follow arxiv categories and search terms
- π₯ Auto-fetch β pull new papers matching your topics from arxiv
- π Full-text search β search titles and abstracts in your local library
- π€ AI summaries β generate LLM-powered paper summaries (optional, requires
OPENAI_API_KEY) - π° Weekly digests β AI-curated digest of recent papers across your topics
- π JSON output β
--jsonon every command for scripting and piping - π¦ Batch operations β
showaccepts multiple IDs,list --jsonincludesabstractLengthfor prioritization - πΎ Offline-first β SQLite-backed local library, works without internet after fetch
- π€ Export β dump your library as Markdown or JSON
# 1. Track topics you care about
paperctl track "retrieval augmented generation"
# 2. Fetch recent papers from arxiv
paperctl fetch --since 7d
# 3. Search your local library
paperctl search "attention mechanism"
# 4. Dive into a paper
paperctl show 2401.12345 --json
# 5. Generate an AI summary (optional, costs tokens)
OPENAI_API_KEY=sk-... paperctl summarize 2401.12345Add a topic to watch. Topics are used by fetch to query arxiv.
paperctl track "retrieval augmented generation"
paperctl track "chain of thought prompting"Remove a tracked topic.
List all tracked topics. Supports --json.
Fetch new papers from arxiv matching tracked topics.
paperctl fetch # Default: last 7 days
paperctl fetch --since 30d # Last 30 days
paperctl fetch --topic "RAG" --limit 50 # Specific topic, max 50Flags: --since <duration> (default 7d), --topic <topic>, --limit <n> (default 100).
Full-text search over titles and abstracts in your local library.
paperctl search "attention mechanism"
paperctl search "RLHF" --jsonList papers in your library. Supports filtering by topic, date, and sorting.
paperctl list --topic "RAG" --since 30d --jsonFlags: --topic, --since, --limit (default 20), --sort (published|fetched|title).
Show full details for one or more papers. Supports multiple IDs for batch retrieval.
paperctl show 2401.12345
paperctl show 2401.12345 2401.67890 2402.11111 --json # Batch getGenerate an LLM summary for a paper. Requires OPENAI_API_KEY.
β οΈ Human-only command β costs API tokens per call. AI agents should usepaperctl show <id> --jsonand synthesize from the abstract.
paperctl summarize 2401.12345
paperctl summarize 2401.12345 --model gpt-4o --refreshGenerate an AI-curated digest of recent papers. Requires OPENAI_API_KEY.
β οΈ Human-only command β costs API tokens. Agents should usepaperctl list --jsonand synthesize their own digest.
paperctl digest --since 7d --topic "RAG"Export your library as Markdown or JSON.
paperctl export > papers.md
paperctl export --format json | jq .--help / -h, --version, --json, --no-color, --quiet / -q, --verbose / -v
| Variable | Default | Description |
|---|---|---|
OPENAI_API_KEY |
β | Required for summarize and digest |
PAPERCTL_MODEL |
gpt-4o-mini |
LLM model to use |
NO_COLOR |
β | Disables color when set |
~/.paperctl/config.json β model, maxFetchPerTopic, defaultSinceDays.
Precedence: flags > env vars > config file > defaults.
All data lives in ~/.paperctl/:
paperctl.dbβ SQLite database (papers, topics, summaries)config.jsonβ User preferences
Works offline after initial fetch.
npm install # Install dependencies
npm run typecheck # Type check
npm run lint # Lint (biome)
npm run lint:fix # Lint + auto-fix
npm test # Run tests (vitest)
npm run build # Bundle with esbuild
npx tsx src/index.ts --help # Run directlySee AGENTS.md for coding conventions and architecture details.
MIT