No description
Find a file
Da-Chuan Tian a3095ea4d8 feat: simplify setup and detail-note controls
Why:
First-time users had to interpret status tags and internal scoring thresholds before they could generate a useful report.

What:
Replace automatic detail thresholds with one Fewer/Recommended/More dropdown while preserving existing custom policies. Turn onboarding into an accessible four-step guide that links to existing forms, waits for the first completed report, collapses after success, and restores itself when configuration becomes invalid. Align Dashboard recovery copy, documentation, styles, and tests, and lower the lint warning budget to the new baseline.

Validation:
- npm test (789 tests)
- npm run typecheck
- npm run lint (0 errors, 134 warnings)
- npm run test:release-tools
- npm run check:boundaries
- npm run check:release-version -- 0.3.1
- npm run build
- npm run smoke:build
- git diff --check
- installed and hash-matched release assets in plugin_test
2026-07-18 21:41:59 +08:00
.github/workflows chore: harden Obsidian marketplace compliance 2026-07-18 19:59:40 +08:00
apps/cli chore: prepare 0.3.1 release 2026-07-18 20:02:10 +08:00
docs feat: simplify setup and detail-note controls 2026-07-18 21:41:59 +08:00
extensions/vscode-arxiv-daily fix(vscode): preserve metadata and pass CLI config 2026-06-13 14:36:55 +08:00
output/imagegen refactor(settings): remove skipSections and prioritySections 2026-06-18 16:10:21 +08:00
packages chore: prepare 0.3.1 release 2026-07-18 20:02:10 +08:00
plugin feat: simplify setup and detail-note controls 2026-07-18 21:41:59 +08:00
scripts chore: harden Obsidian marketplace compliance 2026-07-18 19:59:40 +08:00
tmp/imagegen refactor(settings): remove skipSections and prioritySections 2026-06-18 16:10:21 +08:00
.env.example fix(python): replace author interests in defaults with placeholders 2026-05-13 22:08:23 +08:00
.gitignore refactor: extract shared TypeScript core workspace 2026-07-15 16:50:48 +08:00
.python-version chore: add uv project config for dependency management 2026-04-02 19:19:33 +08:00
arxiv_daily.py refactor: extract shared TypeScript core workspace 2026-07-15 16:50:48 +08:00
eslint.config.mjs chore: harden Obsidian marketplace compliance 2026-07-18 19:59:40 +08:00
LICENSE chore: add LICENSE, refine gitignore, document BRAT install 2026-05-12 13:45:02 +08:00
manifest.json chore: prepare 0.3.1 release 2026-07-18 20:02:10 +08:00
package-lock.json chore: prepare 0.3.1 release 2026-07-18 20:02:10 +08:00
package.json feat: simplify setup and detail-note controls 2026-07-18 21:41:59 +08:00
README.md feat: simplify setup and detail-note controls 2026-07-18 21:41:59 +08:00
THIRD_PARTY_NOTICES.md chore: prepare immutable 0.3.0 release tooling 2026-07-17 11:37:55 +08:00
tsconfig.base.json refactor: extract shared TypeScript core workspace 2026-07-15 16:50:48 +08:00
versions.json chore: prepare 0.3.1 release 2026-07-18 20:02:10 +08:00

arXiv Daily

Turn daily arXiv feeds into a manageable, searchable reading list — right inside Obsidian.

Getting Started · 中文说明

Every day, hundreds of new papers appear on arXiv. arXiv Daily helps you stay on top of the ones that matter: it fetches papers from your chosen categories, uses an LLM to filter and summarize by your research topics, and writes structured Markdown reports into your vault — all on a configurable schedule.

The result is a compact daily reading list you can skim, star, and act on, without leaving Obsidian.

Why arXiv Daily?

  • Save time: let the LLM filter hundreds of papers down to the handful relevant to your topics, with structured daily summaries (core problem, method, result, relevance, limitations).
  • Stay organized: daily reports, standalone deep dives, paper notes, and PDFs all live as plain Markdown in your vault — searchable, linkable, and future-proof.
  • Review across days: the Dashboard gives you a calendar view, local relevance-ranked search, topic/date/status filters, and sorting to revisit papers across dates.
  • Works with your workflow: star important papers, open arXiv or PDF links, and create or automatically select detailed notes for papers worth a deeper look. When a paper is ready for your formal library, import it into Zotero as usual.
  • Set and forget: configure once — categories, topics, LLM provider, schedule — and the plugin runs daily. Missed days are caught up automatically.

Quick Start

  1. Install and enable the plugin.
  2. Open Settings → arXiv Daily and follow the four-step guide.
  3. Connect AI with an API key, base URL, and model.
  4. Choose paper sources by selecting one or more arXiv categories.
  5. Describe your research interests with at least one complete topic.
  6. Generate your first report from the guide. It remains visible until a report completes; afterward Settings shows a compact completion summary and the latest report date. If configuration later becomes invalid, the full guide returns.

The guide links to the existing Settings forms rather than duplicating provider or topic inputs. For a detailed walkthrough, see Getting Started.

Dashboard

The Dashboard is the main entry point after setup.

  • Starred / All tabs: star the papers that matter; unstarred papers stay neutral.
  • Calendar: dates with reports are marked; today is highlighted; click any date to open its report.
  • Search & filters: local relevance-ranked search covers arXiv ID, title, authors, topics, categories, and structured summary fields, with English technical-token and Chinese bigram tokenization. Exact modern arXiv IDs (including URL/version forms) are prioritized.
  • Sort: a non-empty search defaults to relevance; choosing starred, published date, topic, or title keeps that explicit sort as the primary order.
  • Similar Papers: local weighted lexical matching over non-ignored Paper Index entries, using persisted abstracts plus structured summaries recovered from daily reports. Multi-concept and multi-field overlap is favored, while weak and author-only matches are suppressed; results show match reasons, metadata, available resources, and actions for detail, daily report, arXiv, or PDF. Querying uses no network, LLM, embedding, or database.
  • Paper actions: from each row, open or create a paper note, open the daily report, open the arXiv page, open or download a PDF.
  • Batch operations: run today, run pending lookback dates, or run a specific date. Cancel active tasks cooperatively cancels automatic or manual daily runs, manual detail summaries, and PDF downloads; Get Models is excluded. An Obsidian requestUrl call that was already issued may finish before cancellation takes effect, while later work is stopped.

Daily Reports

Each daily report is a Markdown file. Selected papers include:

  • Authors and arXiv link
  • Source sections used for summarization
  • Core problem, key method, main result
  • Why it is relevant to your topics
  • Limitations or boundaries
  • Watch/highlight checkboxes

Highlighting a paper in the daily report maps to a Dashboard star.

Daily reports and generated detail notes end with a folded Generation metrics callout. It reports total pipeline elapsed time when available, LLM elapsed time, logical calls, HTTP attempts, and only token usage reported by the provider. Missing usage is shown as unavailable or incomplete rather than zero; retries make usage incomplete when failed-attempt usage is unavailable. No cost estimate is calculated.

Existing Markdown remains usable; adding this callout does not require rewriting older reports.

Automatic deep dives

The structured entries in daily/YYYY-MM-DD.md are the complete daily discovery output. A file in papers/<arxiv_id>.md is different: it is a standalone, full-text deep dive for one paper, not the paper's daily summary.

Automatic deep-dive selection now runs as a separate scoring step after full text has been fetched. Only papers assigned to a topic whose Detail report toggle is enabled, with usable full text and no existing paper file, are eligible. When eligible candidates exist, they are scored together in exactly one additional LLM call; otherwise there is no selector call.

The Automatic detail notes setting offers Fewer, Recommended, and More. Recommended is the default. Topic toggles control eligibility independently of this setting. Existing custom policies remain active until another option is selected; advanced custom thresholds remain available through persisted or CLI configuration.

If selector scoring fails or returns an invalid result, selection is conservative: no new automatic deep dives are created, while daily summarization continues and the daily run can still succeed. Summarize by arXiv ID is a separate manual workflow and is unaffected by this policy.

Output Layout

Files are organized under arxiv-daily/ in your vault:

arxiv-daily/
  daily/
    2026-06-13.md
  papers/
    2606.12345.md
  pdfs/
    2606.12345.pdf
  .index/
    papers.json
    run-state.json
  • daily/YYYY-MM-DD.md — daily discovery report grouped by topic, with a structured summary for every selected paper
  • papers/<arxiv_id>.md — standalone deep dives and manually created paper notes; these are separate from daily summaries
  • pdfs/<arxiv_id>.pdf — downloaded PDFs
  • .index/papers.json — local Paper Index used by the Dashboard, search, and Similar Papers
  • .index/run-state.json — scheduler run state

Paper Index schema 3 persists abstracts alongside the existing metadata and structured summary fields. It reads schema 1 and 2 indexes directly; older entries gain abstracts lazily when a later daily run sees them, with no network migration or bulk rewrite required.

Installation

arXiv Daily is desktop-only.

Community Plugins

  1. Open Settings → Community plugins → Browse.
  2. Search for arXiv Daily.
  3. Install and enable it.

BRAT (Beta)

  1. Install BRAT.
  2. Open BRAT settings → Add Beta plugin.
  3. Enter: tdccccc/arxiv-daily

Manual Install

Download manifest.json, main.js, and styles.css from the latest release. In your vault, create the hidden plugin directory if needed and place all three files directly in it:

<your-vault>/.obsidian/plugins/arxiv-daily/
  manifest.json
  main.js
  styles.css

Do not leave the files inside a nested release or repository folder. Restart Obsidian, then enable arXiv Daily under Settings → Community plugins.

Commands

Action Where
Open Dashboard Ribbon icon or command palette
Run today Dashboard toolbar
Run pending lookback dates Dashboard toolbar
Run a specific date Dashboard More menu or command palette
Summarize by arXiv ID Dashboard More menu or command palette
Cancel active tasks Dashboard More menu or command palette
Find similar papers Paper-row Find similar papers action
Open a daily report Dashboard calendar
Star a paper Dashboard star button or daily report highlight checkbox

Network & Privacy

  • Connects to arxiv.org and export.arxiv.org to fetch listings, abstracts, and PDFs.
  • Connects to your configured LLM provider. Sent content includes paper titles, abstracts, and selected text snippets needed for filtering and summarization.
  • A saved API key is displayed only as Configured in Settings; use explicit Replace or Clear actions to change it. The key remains plaintext in <your-vault>/.obsidian/plugins/arxiv-daily/data.json for compatibility—Obsidian Sync or another vault backup may copy that file. There is no keyring or encryption claim. Restrict access to the vault and its backups, and use Clear to remove the saved key. Logs, diagnostics, and presented errors are redacted.
  • Fetched arXiv HTML/source content is cached in <your-vault>/.obsidian/plugins/arxiv-daily/.cache/ for the configured retention period (seven days by default). Delete that directory while the plugin is disabled to clear it; it will be recreated as needed.
  • The CLI reads its key from ARXIV_DAILY_API_KEY or a user-supplied config file and caches fetched content in .arxiv-daily/cache/ relative to the working directory unless --cache-dir or ARXIV_DAILY_CACHE_DIR overrides it. Protect or delete those local files according to your environment.
  • No client-side telemetry. Generated reports, paper notes, PDFs, indexes, and run state are written under arxiv-daily/ in the vault by default; configured output paths may change that location.

CLI Usage

The Node CLI is available for cron or server workflows and requires Node.js 20.11.0 or newer.

npm ci
npm run build

ARXIV_DAILY_API_KEY=sk-... npm run cli -- run-pending --vault-root /path/to/vault

The canonical executable is apps/cli/dist/arxiv-daily-cli.cjs. The build also refreshes plugin/arxiv-daily-cli.cjs and keeps arxiv_daily.py as a deprecated compatibility shim.

With a config file:

npm run cli -- run --date 2026-06-13 --config arxiv-daily.config.json --vault-root /path/to/vault
npm run cli -- summarize --id 2606.12345 --config arxiv-daily.config.json --vault-root /path/to/vault

Development

npm ci
npm run check:boundaries
npm run lint
npm run typecheck
npm test
npm run build

npm run lint runs eslint-plugin-obsidianmd's recommended flat config against production Obsidian plugin TypeScript plus the root manifest.json and LICENSE. Tests, generated bundles, and non-plugin workspaces are intentionally out of scope. This public ESLint plugin approximates Obsidian's source scanner; it does not reproduce the complete hosted review, including its CSS and release asset checks.

For a release, synchronize every workspace package, internal dependency spec, Obsidian manifest/version map, and lockfile before validating the release:

npm run sync:release-version -- 0.3.1
npm run check:release-version -- 0.3.1

Review the generated diff before committing. The sync command only updates version metadata; it does not publish, commit, tag, or push.

This repository is one npm workspace. packages/core is the only business core, packages/node-runtime contains Node adapters, apps/cli is the one-shot CLI, and plugin contains only the Obsidian host and UI. There is intentionally no protocol or daemon layer.

License

MIT. Bundled dependency notices are in THIRD_PARTY_NOTICES.md.