PaperPulse is an agent-ready daily paper digest system that tracks new research, filters it by your work context, and archives concise summaries for long-term knowledge building.
PaperPulse gives your coding or research agent a stable workflow for daily paper monitoring:
- Collect new papers from enabled sources.
- Deduplicate papers already seen in previous runs.
- Score papers against your configured work context.
- Generate a Chinese structured Markdown source and an interactive HTML report.
- Deep-read the highest-ranked papers and label the evidence depth honestly.
- Optionally sync selected papers to Notion or Obsidian when configured.
It is intentionally agent-first: the repository stores prompts, configuration, state, and output conventions, while Codex or Claude Code performs the actual collection and summarization.
paperpulse/
AGENTS.md
LICENSE
README.md
config.example.yaml
last_run.example.json
seen_papers.example.json
sources-reference.md
docs/
agent-protocol.md
html-report-design.md
public-release-checklist.md
wechat-agent-reach-notes.md
wechat-integration.md
codex/
paper-digest-automation.md
agent-copy-prompt.md
.claude/
commands/
paper-digest.md
digests/
.gitkeep
logs/
.gitkeep
scripts/
render_digest.py
- Copy
config.example.yamltoconfig.yaml. - Copy
last_run.example.jsontolast_run.json. - Copy
seen_papers.example.jsontoseen_papers.json. - Edit
filter.my_work_context,filter.categories, and archive settings. - Choose your agent entry:
- Codex: open the project with Codex, or send the prompt from
codex/agent-copy-prompt.md. - Claude Code: run
/paper-digestif.claude/commands/paper-digest.mdis available in your project.
- Codex: open the project with Codex, or send the prompt from
flowchart TD
A["Agent entry: Codex or Claude Code"] --> B["Read docs/agent-protocol.md"]
B --> C["Read config.yaml and state files"]
C --> D{"Already ran today?"}
D -- "Yes" --> E["Report Already ran today"]
D -- "No" --> F["Collect enabled sources"]
F --> G["Deduplicate and filter seen papers"]
G --> H["Score against work context"]
H --> I["Deep-read configured Top N"]
I --> J["Write digests/YYYY-MM-DD.md"]
J --> K["Render interactive HTML"]
K --> L["Update state and optional archives"]
This public version does not include:
- Personal filesystem paths.
- Private Notion database IDs.
- Private Obsidian vault paths.
- Company-specific work context.
- Personal runtime state.
- Historical run digests.
- API keys, tokens, cookies, or MCP credentials.
The private runtime files config.yaml, last_run.json, seen_papers.json, generated digests, and logs are ignored by Git. The *.example.* files are the versioned initialization templates.
If you enable Notion, use your own database and agent credentials. If you enable Obsidian, use your own vault path. Do not commit private database IDs or private vault paths to a public repository.
WeChat public account collection is supported as an optional connector. See docs/wechat-integration.md; keep it disabled unless the local agent environment has the required third-party bridge configured.
Each successful run writes a version-neutral Markdown source and, when enabled, an interactive HTML report:
digests/YYYY-MM-DD.md
digests/YYYY-MM-DD.html
The HTML report adds executive signals, responsive navigation, search, theme switching, a static pulse identity, and expandable evidence cards. Cards can show an official paper figure plus verified PDF, project, and code actions when those resources are recorded in Markdown; missing media falls back cleanly to the text layout. The highest-ranked papers receive full-text review according to report.deep_read_top_n; every card states its actual reading depth. Obsidian sync, when enabled, continues to copy the Markdown source into the configured vault directory.
Before publishing changes, run the privacy gate:
python3 scripts/check_public_release.pyIt scans the exact staged index and all reachable Git history. The gate blocks tracked private configuration, runtime state, generated digests, logs, personal home paths, populated archive fields, and token-like credentials without printing their values.
PaperPulse is released under the MIT License.