1- # Paper Morning
1+ # Paper Morning
22
33[ ![ Paper Morning Logo] ( assets/papermorning2.png )] ( https://raw.githack.com/jeong87/paper-morning/main/docs/preview/index.html )
44
55** [ EN] ( README.md ) | [ KR] ( docs/manuals/README_KR.md ) **
66
7- Paper Morning is a research-context paper search tool for medical/ health AI researchers .
8- It turns a project description into search queries, retrieves papers, ranks them by practical relevance, and explains why they matter. Local inbox and scheduled digest delivery remain available as optional follow-up modes .
7+ Paper Morning is a research-context paper search engine for medical and health AI work .
8+ It turns a project description into search queries, retrieves papers, reranks them by practical relevance, and explains why they matter.
99
10- - Latest version: ** [ v0.7.0 ] ( VERSION ) **
10+ - Latest version: ** [ v0.7.1 ] ( VERSION ) **
1111- License: ` GNU AGPLv3 ` ([ LICENSE] ( LICENSE ) )
1212- Privacy policy: [ PRIVACY.md] ( PRIVACY.md )
1313
@@ -29,100 +29,131 @@ Notes:
2929- No actual email is sent from this page
3030- Best for first-impression validation before local install
3131
32- ## What It Does
33- 1 . Reads your project context and saved search queries.
34- 2 . Collects papers from arXiv, PubMed, Semantic Scholar, and optional Google Scholar (SerpAPI).
35- 3 . Scores each paper (1-10) with LLM relevance ranking.
36- 4 . Lets you inspect results on demand, then optionally save or deliver them later.
37-
38- ## Key Features
39- - Personalized LLM relevance ranking using your active projects.
40- - Search intents for recent updates, best-fit papers, and broader discovery.
41- - Local agent interface with brokered credentials and JSON output.
42- - Per-project mail cadence (` daily ` / ` every_3_days ` / ` weekly ` ) in Topic Editor.
43- - Local inbox mode with browser popup scheduling on a running PC.
44- - Configurable cadence: ` daily ` , ` every_3_days ` , ` weekly ` .
45- - Duplicate suppression with history tracking (` sent_ids.json ` ).
46- - PubMed 429 retry/backoff handling.
47- - Gemini with automatic fallback (` 3.1-pro ` -> ` 3.1-flash ` -> ` 3.0-pro ` -> ` 3.0-flash ` -> ` 2.5-pro ` -> ` 2.5-flash ` ) and optional Cerebras backup.
48- - Output language control via ` .env ` :
49- - ` OUTPUT_LANGUAGE=en|ko|ja|es|... `
50-
51- ## Quick Start
52- - Beginner (English): [ docs/manuals/MANUAL_FIRSTTIME_EN.md] ( docs/manuals/MANUAL_FIRSTTIME_EN.md )
53- - Full operations (English): [ docs/manuals/MANUAL_EN.md] ( docs/manuals/MANUAL_EN.md )
54- - Agent/tool integration (English): [ docs/manuals/MANUAL_AGENT_EN.md] ( docs/manuals/MANUAL_AGENT_EN.md )
55- - Beginner (Korean): [ docs/manuals/MANUAL_FIRSTTIME_KR.md] ( docs/manuals/MANUAL_FIRSTTIME_KR.md )
56- - Full operations (Korean): [ docs/manuals/MANUAL_KR.md] ( docs/manuals/MANUAL_KR.md )
57- - Agent/tool integration (Korean): [ docs/manuals/MANUAL_AGENT_KR.md] ( docs/manuals/MANUAL_AGENT_KR.md )
32+ ## Product Direction
33+ Paper Morning is no longer centered on "send me papers every morning."
34+
35+ The core product is now:
36+ - a human-facing on-demand paper search tool
37+ - a local agent-facing paper search tool with structured JSON output
38+
39+ The old digest and email workflows still exist, but they are now optional follow-up features.
40+
41+ ## 2-1 Human Search
42+ Use Paper Morning when you want to check for relevant papers on demand.
43+
44+ What it supports:
45+ - ` What's New ` : recent updates first
46+ - ` Best Match ` : strongest-fit papers in the selected horizon
47+ - ` Discovery ` : adjacent but transferable work
48+ - Time horizons from ` 7d ` to ` 5y `
49+ - Local inbox storage and browser-based result viewing
50+
51+ Best fit for:
52+ - researchers exploring a new direction
53+ - people who want context-fit papers, not just the newest papers
54+ - users who do not want to set up email first
5855
59- ## Recommended First Path ( Search-First, Local)
60- Generate your first personalized search result before email or automation setup .
56+ ## 2-2 Agent Search
57+ Paper Morning can also act as a local paper-search tool for research agents .
6158
62- 1 . Install dependencies:
59+ What it supports:
60+ - local HTTP JSON endpoint: ` POST /api/agent/search `
61+ - CLI JSON mode: ` python app/paper_digest_app.py --agent-search ... `
62+ - brokered local auth via ` AGENT_API_TOKEN `
63+ - Gemini or a local/self-hosted OPENAI-compatible backend
64+
65+ Security model:
66+ - your agent gets only ` AGENT_API_TOKEN `
67+ - Paper Morning keeps ` GEMINI_API_KEY ` or local backend credentials in ` .env ` or OS keyring
68+ - the agent never needs to see raw provider keys
69+
70+ Best fit for:
71+ - literature review agents
72+ - planning / scouting agents
73+ - local tool pipelines that need structured paper search output
74+
75+ ## How It Works
76+ Shared engine for both human and agent paths:
77+
78+ 1 . Read research context
79+ 2 . Generate source-specific search queries
80+ 3 . Retrieve candidates from arXiv, PubMed, Semantic Scholar, and optional Google Scholar
81+ 4 . Apply intent-aware horizon filtering
82+ 5 . Build a shortlist
83+ 6 . Run listwise LLM reranking across the shortlist
84+ 7 . Return either:
85+ - HTML result view for humans
86+ - structured JSON for agents
87+
88+ ## Start Here
89+ - Live preview first: [ Open Live Web Preview] ( https://raw.githack.com/jeong87/paper-morning/main/docs/preview/index.html )
90+ - Human local usage: [ docs/manuals/MANUAL_FIRSTTIME_EN.md] ( docs/manuals/MANUAL_FIRSTTIME_EN.md )
91+ - Agent/tool usage: [ docs/manuals/MANUAL_AGENT_EN.md] ( docs/manuals/MANUAL_AGENT_EN.md )
92+ - Korean README: [ docs/manuals/README_KR.md] ( docs/manuals/README_KR.md )
93+
94+ ## Optional Workflows
95+ These are still supported, but they are no longer the main product story.
96+
97+ ### Local install and local UI
98+ If you want to actually use Paper Morning on your machine:
6399
64100``` bash
65101pip install -r deps/requirements.txt
102+ python app/local_ui_launcher.py
66103```
67104
68- 2 . Run local launcher :
105+ Main local UI :
69106
70- ``` bash
71- python app/local_ui_launcher.py
107+ ``` text
108+ http://127.0.0.1:5050
72109```
73110
74- 3 . The browser opens automatically. On first run, Setup Wizard opens automatically.
75- 4 . Fill project description + Gemini key, then click ` Save and Search Now ` .
111+ ### Local inbox and morning popup
112+ You can keep the app running and let it open the default search result automatically at your scheduled time.
113+
114+ Relevant settings:
115+ - ` DELIVERY_MODE=local_inbox `
116+ - ` AUTO_OPEN_DIGEST_WINDOW=true `
117+ - ` SEARCH_INTENT_DEFAULT `
118+ - ` SEARCH_TIME_HORIZON_DEFAULT `
119+
120+ ### Email delivery
121+ Email is optional.
76122
77- This verifies product value first without Gmail or GitHub Actions setup. After setup, the default path is:
78- - Click one button to search and open the latest result in a browser tab
79- - Or keep the local UI running and let the scheduled morning popup open automatically
123+ Priority:
124+ 1 . Local Inbox
125+ 2 . Gmail OAuth
126+ 3 . Gmail App Password
80127
81- ## GitHub Actions Mode (Advanced Automation)
82- Use this only after local search quality is confirmed and you really want automation.
128+ Docs:
129+ - Gmail app password: https://myaccount.google.com/apppasswords
130+ - Full ops manual: [ docs/manuals/MANUAL_EN.md] ( docs/manuals/MANUAL_EN.md )
131+
132+ ### GitHub Actions automation
133+ Use this only if you really want unattended automation without relying on a running local PC.
83134
84135Required workflow files:
85136- ` .github/workflows/paper-morning-digest.yml `
86137- ` .github/workflows/paper-morning-bootstrap-topics.yml `
87138
88- Required secrets :
89- - ` PM_ENV_FILE ` (full ` .env ` content)
139+ Required secret :
140+ - ` PM_ENV_FILE `
90141
91- Optional secret :
92- - ` PM_TOPICS_JSON ` (full ` user_topics.json ` content)
93- - ` PM_PROJECTS_JSON ` (project list only, for bootstrap query generation)
142+ Optional secrets :
143+ - ` PM_TOPICS_JSON `
144+ - ` PM_PROJECTS_JSON `
94145
95146Tracked non-secret config:
96- - ` config/projects.yaml ` (project descriptions used for bootstrap/default onboarding)
147+ - ` config/projects.yaml `
97148
98149## Important Settings
99- - ` ONBOARDING_MODE ` : ` preview ` (default) or ` daily ` .
100- - ` SEARCH_INTENT_DEFAULT ` : default local search mode (` best_match ` , ` whats_new ` , ` discovery ` ).
101- - ` SEARCH_TIME_HORIZON_DEFAULT ` : default local search horizon (` 7d ` , ` 30d ` , ` 180d ` , ` 1y ` , ` 3y ` , ` 5y ` ).
102- - ` SEND_FREQUENCY ` / ` SEND_ANCHOR_DATE ` : cadence policy.
103- - ` LOOKBACK_HOURS ` : legacy fallback window for digest-style collection.
104- - ` LLM_MAX_CANDIDATES ` : shortlist cap for listwise LLM reranking.
105- - ` OUTPUT_LANGUAGE ` : summary language for LLM-generated reason/core/usefulness text.
106- - ` ENABLE_GOOGLE_SCHOLAR ` + ` GOOGLE_SCHOLAR_API_KEY ` : optional SerpAPI source.
107-
108- ## Local Web Console
109- Main path for onboarding and preview-first setup:
110-
111- ``` text
112- http://127.0.0.1:5050
113- ```
114-
115- ## Agent Mode
116- Paper Morning can also be used as a local paper-search tool for research agents.
117-
118- Security model:
119- - your agent gets ` AGENT_API_TOKEN `
120- - Paper Morning keeps ` GEMINI_API_KEY ` or local backend credentials in ` .env ` / keyring
121- - the agent never needs to see raw provider keys
122-
123- Interfaces:
124- - Local HTTP JSON endpoint: ` POST /api/agent/search `
125- - CLI JSON mode: ` python app/paper_digest_app.py --agent-search ... `
150+ - ` SEARCH_INTENT_DEFAULT ` : default local search mode
151+ - ` SEARCH_TIME_HORIZON_DEFAULT ` : default local search horizon
152+ - ` LLM_MAX_CANDIDATES ` : shortlist cap for listwise reranking
153+ - ` OUTPUT_LANGUAGE ` : language for LLM-generated explanation fields
154+ - ` AGENT_API_TOKEN ` : local broker token for agent mode
155+ - ` ENABLE_OPENAI_COMPAT_FALLBACK ` : enable LM Studio / vLLM / other OpenAI-style local backend
156+ - ` ENABLE_GOOGLE_SCHOLAR ` + ` GOOGLE_SCHOLAR_API_KEY ` : optional SerpAPI source
126157
127158## Build Distribution Files
128159### Windows
@@ -142,45 +173,36 @@ This repo includes:
142173- pages workflow: ` .github/workflows/deploy-demo-pages.yml `
143174
144175To publish demo on your fork:
145- 1 . Enable GitHub Pages source as ** GitHub Actions** .
146- 2 . Run ` deploy-demo-pages ` workflow (or push to ` main ` ).
147-
148- Repo settings TODO (outside code):
149- - Fill GitHub About fields (` description ` , ` website ` , ` topics ` ).
150- - Publish the first tagged GitHub Release.
176+ 1 . Enable GitHub Pages source as ** GitHub Actions**
177+ 2 . Run ` deploy-demo-pages ` workflow or push to ` main `
151178
152179## Template-First Repository Setup
153- For global onboarding, prefer:
180+ For onboarding, prefer:
154181- ` Use this template ` -> create your own repository instance
155182
156- Fallback (advanced) :
157- - fork workflow if you explicitly need upstream fork linkage.
183+ Fallback:
184+ - fork only if you explicitly need upstream fork linkage
158185
159186## Actions Cost Note (Private Repos)
160- - GitHub Free private repos include limited Actions minutes.
161- - If your workflow runs frequently (for example every 15 minutes), usage can exceed free minutes.
162- - Local -first preview and local scheduling are recommended for cost-safe onboarding.
187+ - GitHub Free private repos include limited Actions minutes
188+ - frequent automation can exceed the free tier quickly
189+ - local -first search and local scheduling remain the cheaper default path
163190
164191## Troubleshooting (Quick)
165- - ` Search query is empty ` : generate and save topics/queries in Topic Editor.
166- - ` PubMed 429 ` : retries are automatic, but adding ` NCBI_API_KEY ` is recommended.
167- - ` Gemini model 404 / quota ` : the live preview now retries multiple Gemini fallbacks automatically before surfacing an error.
168- - No email received: check sender/recipient addresses, spam folder, and auth config.
169-
170- ## Delivery Priority
171- 1 . Local Inbox (default, no email credentials required)
172- 2 . Gmail OAuth (optional advanced mode)
173- 3 . Gmail App Password (optional fallback)
174-
175- Gmail app password docs:
176- - https://myaccount.google.com/apppasswords
192+ - ` Search query is empty ` : generate and save topics/queries in Topic Editor
193+ - ` PubMed 429 ` : retries are automatic, but adding ` NCBI_API_KEY ` is recommended
194+ - ` Gemini model 404 / quota ` : the preview and runtime try multiple Gemini fallbacks before failing
195+ - Agent ` 403 Forbidden ` : check ` AGENT_API_TOKEN ` and confirm the request is coming from the local machine
196+ - No email received: check sender/recipient addresses, spam folder, and auth config
177197
178198## Documentation
179199- Beginner (English): [ docs/manuals/MANUAL_FIRSTTIME_EN.md] ( docs/manuals/MANUAL_FIRSTTIME_EN.md )
180200- Full operations (English): [ docs/manuals/MANUAL_EN.md] ( docs/manuals/MANUAL_EN.md )
201+ - Agent/tool integration (English): [ docs/manuals/MANUAL_AGENT_EN.md] ( docs/manuals/MANUAL_AGENT_EN.md )
181202- Beginner (Korean): [ docs/manuals/MANUAL_FIRSTTIME_KR.md] ( docs/manuals/MANUAL_FIRSTTIME_KR.md )
182203- Full operations (Korean): [ docs/manuals/MANUAL_KR.md] ( docs/manuals/MANUAL_KR.md )
183- - Korean README (legacy): [ docs/manuals/README_KR.md] ( docs/manuals/README_KR.md )
204+ - Agent/tool integration (Korean): [ docs/manuals/MANUAL_AGENT_KR.md] ( docs/manuals/MANUAL_AGENT_KR.md )
205+ - Korean README: [ docs/manuals/README_KR.md] ( docs/manuals/README_KR.md )
184206
185207## Contact
186208- nineclas@gmail.com
0 commit comments