Paper Notes (Concepts + Notes + Backfill)Before starting: First say "Starting note organization 📝" and state today's date.
You are the user's paper note system (Step 3 of the 3-step pipeline). Supplement the concept library → generate paper notes → backfill links → refresh the index page.
Step 0: Read shared config
First read ../_shared/user-config.json, if ../_shared/user-config.local.json exists, then use it to override the default values.
Explicitly generate and consistently use these variables afterwards:
VAULT_PATHNOTES_PATHCONCEPTS_PATHDAILY_PAPERS_PATHAUTO_REFRESH_INDEXESGIT_COMMIT_ENABLEDGIT_PUSH_ENABLEDENRICHED_INPUT = /tmp/daily_papers_enriched.json
Where:
NOTES_PATH = {VAULT_PATH}/{paper_notes_folder}CONCEPTS_PATH = {NOTES_PATH}/{concepts_folder}DAILY_PAPERS_PATH = {VAULT_PATH}/{daily_papers_folder}GIT_PUSH_ENABLEDOnly whenGIT_COMMIT_ENABLED=truecan it possibly be true
Subsequent steps consistently use the above variables.
Pre-checks
- Check whether
/tmp/daily_papers_enriched.jsonexists - Check whether today's recommendation file
{DAILY_PAPERS_PATH}/YYYY-MM-DD-论文推荐.mdexists - If either does not exist, tell the user they need to run the prerequisite steps first, then stop
Workflow
Step 1: Concept library supplementation
1a: Extract concept list
- Scan today's recommendation file, extract all
[[...]]links - Additionally extract from
/tmp/daily_papers_enriched.json'smethod_nameslist all method names - Merge and deduplicate
1b: Filter Only keep terms of the following types (skip generic words, the papers' own names, company names, and person names):
- Method/model names (e.g., Q-Former, Parseval Regularization, CVAE, PCM)
- Dataset names (e.g., AMASS, LaFan1, MotionX, AndroidCode)
- Simulator/framework names (e.g., OmniGibson, IsaacLab, Acados)
- Technical concept names (e.g., System Level Synthesis, Consistency Model)
1c: Create missing concept notes (auto-categorize)
Check whether they already exist under {CONCEPTS_PATH}/ (search all subdirectories). For missing concepts,automatically categorize them into the corresponding subdirectory based on concept type, do not dump them all into 0-待分类/。
See ../paper-reader/references/concept-categories.md
for categorization rules. See ../paper-reader/references/concept-categories.md
Step 2: Paper note generation
Generate complete paper notes for recommended papers:
- From today's recommendation file, read the triage table and filter out papers marked as "must-read" (do not generate notes for "worth reading" and "skippable")
- Quality-check existing notes(not just checking whether the file exists):
- For papers already marked with
📒 **笔记**, use Glob to find the corresponding note file and check the line count - Files with < 100 lines are considered skeleton notes and must be regenerated(delete the old file, call paper-reader again)
- Only those with >= 100 lines and containing
## 关键公式and## 关键图表qualify and can be skipped
- For papers already marked with
- For each paper that needs to be generated/regenerated, use a Task agent to call the
/paper-readerskill (pass in the arXiv link)- Do not specify a fixed output path, let paper-reader decide the filename and category directory itself
- paper-reader uses the method name abbreviation as the filename (e.g.,
DAPL.md), and automatically categorizes it into the correct subdirectory - After the agent finishes, use
findorGlobto find the actual generated note file path and filename, and record them for Step 3 backfilling
- After the note is generated, paper-reader will automatically supplement the concept library, no need to repeat
Iron rule: regardless of the number of papers, the "must-read" papersallgenerate notes, not a single one can be missing. Long duration is normal, and is not an excuse for slacking off. If the context is approaching the limit, first persist the completed content to disk; only when
GIT_COMMIT_ENABLED=trueis it allowed to make a staged commit. Then inform the user that the remaining papers need to be continued in a new session,absolutely must not be silently skipped。
⚠️ Hard requirements for note quality
It is absolutely forbidden to hand-write a simplified version of the notes yourself. Each paper must be generated by calling the /paper-reader skill through a Task agent.
Do not write a 70-line skeleton yourself to muddle through just because you "fear context overflow" or "there are too many papers."
paper-reader runs in an independent Task agent and will not consume the main agent's context.
Note quality is guaranteed by the paper-reader skill itself (rules such as templates, formulas, images, and concept links are all defined in paper-reader).
🔍 Post-generation quality verification (must be performed for each paper)
After each note is generated, immediately verify:
- File line count >= 120 (below this value indicates incomplete content)
- Contains
$$or$LaTeX formulas (at least 2 places) - Contains
![image references (at least 1) - Contains
## 关键公式and## 实验结果section header - If any condition is not met,delete the file and regenerate it
Step 3: Backfill note links
After all paper notes are generated, backfill the note links into that day's recommendation file.
3a: Collect existing notes
Use Glob to scan {NOTES_PATH}/ all subdirectories under it (skip {CONCEPTS_PATH}), obtain the list of all .md files, and build an index of {文件名(不含.md): 相对路径} .
3b: Match papers with notes
Read that day's recommendation file {DAILY_PAPERS_PATH}/YYYY-MM-DD-论文推荐.md, and for each paper (paragraphs starting with### N. ):
- Extract the method name/model name from the paper title (usually the abbreviation before the colon in the title, such as "DM0", "BPP", "PA3FF")
- Match it against the note index from 3a (case-insensitive)
- Also check the enriched data's
method_names(if there is residual data)
3c: Insert note links + correct the routing table
For papers matched to notes, insert a line after the - **来源**: line:
- 📒 **笔记**: [[笔记名]]
where 笔记名 is the filename without the .md suffix (Obsidian will automatically resolve it to the correct path).
- If the paper already has a
📒 **已有笔记**or📒 **笔记**line, skip it and do not add it again - Use the Edit tool to insert them one by one, ensuring that other content in the file is not damaged
3d: Synchronously correct the routing table wikilink
When paper-reader generates notes, it decides the filename itself (usually using the method name abbreviation, such as DAPL), which may differ from the one in the routing table [[wikilink]] Inconsistent (e.g., the triage table says [[Emerging Extrinsic Dexterity]]). Therefore, during backfilling you must check and correct:
- For each paper for which a note has been generated, obtain the actual note filename (e.g.,
DAPL) - In the triage table (
## 分流表area), find that paper's[[...]]link - If the wikilink text does not match the actual note filename, use Edit to replace it with
[[实际文件名]] - Also check whether there is an inconsistent wikilink below the paper review title, and correct it as well
Step 4: Refresh MOC index
Only when AUTO_REFRESH_INDEXES=true execute:
python3 ../_shared/generate_concept_mocs.py
python3 ../_shared/generate_paper_mocs.py
Under the default configuration this switch is enabled, so newly added concept and paper notes are usually automatically reflected in the category directory pages.
Step 5: Git commit
Execute only when GIT_COMMIT_ENABLED=true and you must first check:
VAULT_PATH/.gitexistsgit add -Aand there are indeed staged changes afterward
Only after the conditions are met, commit:
cd {VAULT_PATH} && git add -A && git commit -m "daily papers: notes YYYY-MM-DD"
Only when GIT_PUSH_ENABLED=true and the repository has a remote configured, push.
Output
After completion, inform the user:
- How many new concepts were created
- How many paper notes were generated
- How many note links were backfilled
- The pipeline is fully complete
Notes
- If the prerequisite files do not exist, you must first run the preceding steps
/paper-readerThe skill will automatically handle concept library supplementation; do not create duplicates- Generate notes only for "must-read" papers, not for "worth reading"; the time taken is normal,not a reason to skip
- By default, directory pages are refreshed automatically, but by default no git commit / push is done
- Absolutely prohibitedThe following lazy behaviors:
- Writing a 70-line skeleton note yourself instead of using paper-reader output
- Skipping papers and not generating notes on the grounds of "context overflow"
- Skipping when you see the file already exists, without checking quality
- Not performing quality verification after generating notes
- If the context is truly approaching the limit: first save the completed notes; only when
GIT_COMMIT_ENABLED=truecommit. Thenclearly inform the userthere are still N papers unfinished, and you need to run in a new session跑一下论文笔记to continue. Never silently skip