Language Setting / 语言设置
This skill supports both Chinese and English reports. The language is determined by the language field in your config file:
- Chinese (default): Set
language: "zh"in config - English: Set
language: "en"in config
The config file should be located at: $OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml
Runtime / 运行环境
- Use the parent directory of this
SKILL.mdas$SKILL_DIR. - On Windows PowerShell, use
$env:OBSIDIAN_VAULT_PATH; on macOS/Linux shells, use$OBSIDIAN_VAULT_PATH. - When running scripts, prefer the available
python(Windows) orpython3(macOS/Linux); do not assume a fixed interpreter path. - Before first run, verify that
python -c "import yaml, requests, fitz"succeeds; install dependencies fromrequirements.txtif missing. - On Windows, if the environment variable is not yet in the current process, read the vault path from the
vault_pathfield in the config file. Do not fall back to a Linux example path.
Language Detection
At the start of execution, read the config file to detect the language setting:
# Resolve OBSIDIAN_VAULT_PATH if not set in the current session
# Some agent-hosted shell sessions do not source interactive shell profiles automatically
if [ -z "$OBSIDIAN_VAULT_PATH" ]; then
[ -f "$HOME/.zshrc" ] && source "$HOME/.zshrc" 2>/dev/null || true
[ -f "$HOME/.bash_profile" ] && source "$HOME/.bash_profile" 2>/dev/null || true
fi
# Read language from config
LANGUAGE=$(grep -E "^\s*language:" "$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml" | awk '{print $2}' | tr -d '"')
# Default to Chinese if not set
if [ -z "$LANGUAGE" ]; then
LANGUAGE="zh"
fi
# Set note filename suffix based on language
if [ "$LANGUAGE" = "en" ]; then
NOTE_SUFFIX="paper-recommendations"
else
NOTE_SUFFIX="论文推荐"
fi
Equivalent Windows PowerShell config reading:
$configPath = Join-Path $env:OBSIDIAN_VAULT_PATH '99_System\Config\research_interests.yaml'
$LANGUAGE = (Select-String -Path $configPath -Pattern '^\s*language:' | Select-Object -First 1).Line.Split(':', 2)[1].Trim().Trim('"')
if (-not $LANGUAGE) { $LANGUAGE = 'zh' }
$NOTE_SUFFIX = if ($LANGUAGE -eq 'en') { 'paper-recommendations' } else { '论文推荐' }
Then use this language setting throughout the workflow:
- When generating notes, pass
--language $LANGUAGEto scripts - Use appropriate section headers in the generated notes
Goal
To help users start their research day by searching for highly cited, popular, and high-quality papers from the past month and year, and generating recommendation notes.
Workflow
Workflow Overview
This skill uses a Python script to call the arXiv API, search for papers, parse XML results, and filter/score them based on research interests.
Step 1: Gather Context (Silent)
-
Get Today's Date
- Determine the current date (YYYY-MM-DD format)
-
Read Research Configuration
- Read
$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml(note: filename isinterests, notinterest) to get research areas - Extract: keywords, categories, and priorities
- Use titles, tags, and journal distributions from Zotero library as the interest profile; current focus is on seismic data processing, simultaneous-source acquisition and deblending, denoising and reconstruction, time-frequency analysis, velocity analysis, wavefield simulation, and physics-constrained/deep learning geophysics
- Prioritize
GEOPHYSICS,IEEE Transactions on Geoscience and Remote Sensing,IEEE Geoscience and Remote Sensing Letters,Geophysical Journal International,Geophysical Prospecting,Interpretation, andJournal of Applied Geophysics
- Read
-
Scan Existing Notes to Build Index
- Scan all
.mdfiles in the20_Research/Papers/directory - Extract note titles (from filename and frontmatter
titlefield) - Build a keyword-to-note-path mapping table for later automatic linking
- Prefer the frontmatter
titlefield; fall back to the filename
- Scan all
Step 2: Search for Papers
2.1 Search Scope
Search for recent papers across all relevant arXiv categories:
-
Search Scope
- Use
scripts/search_arxiv.pyto search arXiv - Query: all research-related arXiv categories
- Sort by submission date
- Limit results: 200 papers
- Use
-
Filtering Strategy
- Filter papers based on the research interest configuration
- Compute a composite recommendation score
- Keep the top 10 highest-scoring papers
2.2 Execute Search and Filtering
Use the scripts/search_arxiv.py script to search, parse, and filter:
# Use the Python script to search, parse, and filter arXiv papers
# First, change to the skill directory, then run the script
cd "$SKILL_DIR"
python scripts/search_arxiv.py \
--config "$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml" \
--output arxiv_filtered.json \
--max-results 200 \
--top-n 10 \
--download-dir "$OBSIDIAN_VAULT_PATH/20_Research/Papers/"
Script Functions:
-
Search arXiv
- Call the arXiv API to search for papers in specified categories
- Retrieve up to 200 latest papers
-
Parse XML Results
- Parse the XML returned by the API
- Extract: ID, title, authors, abstract, publication date, categories
-
Apply Filtering and Scoring
- Filter papers based on the research interest configuration
- Compute a composite recommendation score (40% relevance, 20% recency, 30% popularity, 10% quality)
- Sort by score, keep the top 10
Output:
arxiv_filtered.json- Filtered list of papers (JSON format)- Each paper includes:
- Paper ID, title, authors, abstract
- Publication date, categories
- Relevance score, recency score, popularity score, quality score
- Final recommendation score, matched areas
Step 3: Read Filtered Results
3.1 Read JSON Results
Read the filtered and scored paper list from arxiv_filtered.json:
# Read filtered results
cat arxiv_filtered.json
Result Contains:
total_found: Total number of papers foundtotal_filtered: Number of papers after filteringtop_papers: Top 10 high-scoring papers, each containing:- Paper ID, title, authors, abstract
- Publication date, categories
- Relevance score, recency score, quality score
- Final recommendation score, matched areas, matched keywords
3.2 Scoring Details
Scoring integrates multiple dimensions:
Recommendation Score =
Relevance Score: 40%
Recency Score: 20%
Popularity Score: 30%
Quality Score: 10%
Scoring Details:
-
Relevance Score (40%)
- Degree of match with research interests
- Title keyword match: +0.5 per match
- Abstract keyword match: +0.3 per match
- Category match: +1.0
- Maximum: ~3.0
-
Recency Score (20%)
- Within 30 days: +3 points
- 30-90 days: +2 points
- 90-180 days: +1 point
- Over 180 days: 0 points
-
Popularity Score (30%)
- (If data available) Citations > 100: +3 points
- Citations 50-100: +2 points
- Citations < 50: +1 point
- No citation data: 0 points
- Or infer from time since publication (hot new paper from last 7 days): +2 points
-
Quality Score (10%)
- Inferred from abstract: significant innovation: +3 points
- Clear methodology: +2 points
- General work: +1 point
- Or read quality scores from existing notes
Final Recommendation Score = Relevance (40%) + Recency (20%) + Popularity (30%) + Quality (10%)
Step 4: Generate Today's Recommendation Note
4.1 Read Filtered Results
Read the filtered paper list from arxiv_filtered.json:
- Contains the top 10 high-scoring papers
- Each paper has complete information: ID, title, authors, abstract, scores, matched areas
- All 10 high-scoring papers must be downloaded to:
$OBSIDIAN_VAULT_PATH/20_Research/Papers/ - The local PDF filenames in the note must link to local PDF files in the
$OBSIDIAN_VAULT_PATH/20_Research/Papers/directory - If a high-scoring candidate lacks a valid open-access PDF URL, skip it and replace with the next paper in score order until 10 are compiled; if fewer than 10, stop and report, do not generate an incomplete note
4.2 Create Recommendation Note File
-
Create the Recommendation Note File
- Filename (based on language setting):
- Chinese (
language: "zh"):10_Daily/YYYY-MM-DD论文推荐.md - English (
language: "en"):10_Daily/YYYY-MM-DD-paper-recommendations.md
- Chinese (
- Use variable:
10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md(whereNOTE_SUFFIXis set during language detection) - Must include properties:
keywords: Keywords for the day's recommended papers (comma-separated, extracted from titles and abstracts)tags: ["llm-generated", "daily-paper-recommend"]
- Filename (based on language setting):
-
Check if Paper Deserves Detailed Writing
- Highly Recommended Papers: Recommendation score >= 7.5 or specially recommended papers
- Generally Recommended Papers: Other papers
-
Check if Paper Already Has Notes
- Search the
20_Research/Papers/directory - Look for detailed notes for that paper
- If existing note exists: write briefly, reference the existing note
- If no note exists:
- Highly recommended: write detailed section in the recommendation note
- Generally recommended: write only basic information
- Search the
4.2 Recommendation Note Structure
The note file structure is as follows:
---
keywords: [keyword1, keyword2, ...]
tags: ["llm-generated", "daily-paper-recommend"]
---
[Specific paper recommendation list...]
4.2.1 Today's Overview (Before Paper List)
Add an overview section before the paper list, summarizing the day's recommended papers.
Choose language based on $LANGUAGE setting:
English (language: "en"):
## Today's Overview
Today's {paper_count} recommended papers focus on **{direction1}**, **{direction2}**, and **{direction3}**.
- **Overall Trends**: {summary of research trends}
- **Quality Distribution**: Scores range from {min}-{max}, {quality assessment}.
- **Research Hotspots**:
- **{hotspot1}**: {description}
- **{hotspot2}**: {description}
- **{hotspot3}**: {description}
- **Reading Suggestions**: {reading order recommendations}
Chinese (language: "zh"):
## 今日概览
今日推荐的{论文数量}篇论文主要聚焦于**{主要研究方向1}**、**{主要研究方向2}**和**{主要研究方向3}**等前沿方向。
- **总体趋势**:{总结今日论文的整体研究趋势}
- **质量分布**:今日推荐的论文评分在 {最低分}-{最高分} 之间,{整体质量评价}。
- **研究热点**:
- **{热点1}**:{简要描述}
- **{热点2}**:{简要描述}
- **{热点3}**:{简要描述}
- **阅读建议**:{给出阅读顺序建议}
Notes:
- Summarize based on the titles, abstracts, and scores of the top 10 papers
- Extract common research themes and trends
- Provide reasonable reading order suggestions
4.2.2 Unified Format for All Papers
All papers are listed from highest to lowest score using a unified format.
Choose label language based on $LANGUAGE setting:
English (language: "en"):
### [[Note_Filename|Paper Title as Displayed]]
- **Authors**: [author list]
- **Affiliation**: [institution names, extracted from paper source or arXiv page]
- **Links**: [arXiv](url) | [[local filename|PDF]]
- **Source**: arXiv
- **Note**: [[existing_note_path|short title]] or --
**One-line Summary**: [one sentence summarizing the core contribution]
**Core Contributions**:
- [contribution 1]
- [contribution 2]
- [contribution 3]
**Key Results**: [most important results from abstract]
---
Chinese (language: "zh"):
### [[Note_Filename|论文标题显示名]]
- **作者**:[作者列表]
- **机构**:[机构名称,从论文源码或 arXiv 页面提取]
- **链接**:[arXiv](链接) | [[本地文件名称|PDF]]
- **来源**:[arXiv]
- **笔记**:[[已有笔记路径|简称]] 或 --
**一句话总结**:[一句话概括论文的核心贡献]
**核心贡献/观点**:
- [贡献点1]
- [贡献点2]
- [贡献点3]
**关键结果**:[从摘要中提取的最重要结果]
---
Important Formatting Rules:
- Wikilinks must use display aliases:
[[File_Name|Display Title]], do not use bare[[File_Name]](underscores would be displayed directly, affecting readability) - Images must use Obsidian wikilink embedding syntax:
![[filename.png|600]], never useformat (URL encoding does not work in Obsidian) - PDF links in the note must be in the format
[[local_filename|PDF]], and the local filename must link to the local PDF file in the$OBSIDIAN_VAULT_PATH/20_Research/Papers/directory - Affiliation: Extract from the
\authoror\affiliationfields in the TeX source of the paper; if the arXiv API does not provide it, read from the downloaded source package - Do not use
---as a placeholder for 'no data': Use--instead (three dashes are parsed as a horizontal rule by Obsidian)
4.2.3 Inserting Images and Calling Detailed Analysis for the Top Three Papers
For the top 3 papers (highest scoring):
Step 0: Check if the paper already has notes
# Search for existing notes in the 20_Research/Papers/ directory
# Search methods:
# 1. By paper ID (e.g., 2602.23351)
# 2. By paper title (fuzzy match)
# 3. By key words in the paper title
Step 1: Decide handling based on check results
If an existing note exists:
- Do not generate a new detailed report
- Use the existing note path as a wikilink
- Reference the existing note in the "Detailed Report" field of the recommendation note
- Check if images need to be extracted (if there is no
imagesdirectory or it is empty)- If images are needed: call
extract-paper-images - If images already exist: use existing images
- If images are needed: call
If no note exists:
- Call
extract-paper-imagesto extract images - Call
paper-analyzeto generate a detailed report - Add images and detailed report links to the recommendation note
Step 2: Insert images and links in the recommendation note
If existing note exists:
### [[Existing_Note_Name]]
- **Authors**: [author list]
- **Affiliation**: [institution names]
- **Links**: [arXiv](url) | [[local filename|PDF]]
- **Source**: [arXiv]
- **Detailed Report**: [[existing_note_path]]
- **Note**: Existing detailed analysis
**One-line Summary**: [one sentence summarizing the core contribution]
![[existing_image_filename.png|600]]
**Core Contributions/Viewpoints**:
...
If no note exists:
### [[Note_Filename|Paper Title Display Name]]
- **Authors**: [author list]
- **Affiliation**: [institution names]
- **Links**: [arXiv](url) | [[local filename|PDF]]
- **Source**: [arXiv]
- **Detailed Report**: [[20_Research/Papers/[domain]/[note_filename]|Short Title]] (auto-generated)
**One-line Summary**: [one sentence summarizing the core contribution]
![[paperID_fig1.png|600]]
**Core Contributions/Viewpoints**:
...
Image Formatting Rules (Important!):
- Must use Obsidian wikilink embedding syntax:
![[filename.png|600]] - Do not use markdown image syntax:
— URL encoding (%20,%26) does not work in Obsidian - Example image filename:
2603.24124_fig1.png - Obsidian will automatically search the vault for a matching filename; no need to write the full path
Detailed Report Notes:
- Report path:
20_Research/Papers/[paper_category]/[note_filename].md - Important: Use the
note_filenamefield from the JSON to construct the wikilink - Must use display alias:
[[20_Research/Papers/[domain]/[note_filename]|Short Title]]- Correct:
[[20_Research/Papers/Large_Models/Hypothesis-Conditioned_Query_Rewriting|Hypothesis-Conditioned Query Rewriting]] - Incorrect:
[[20_Research/Papers/Large_Models/Hypothesis-Conditioned_Query_Rewriting_for_Decision-Useful_Retrieval]](underscores displayed directly, not aesthetic)
- Correct:
- The detailed report is automatically generated by
paper-analyze
Affiliation Extraction:
- Extract the
\authorand\affiliationfields from.texfiles in the downloaded arXiv source package (.tar.gz) - If the source is unavailable, extract from the arXiv page HTML
- If still not obtainable, mark as
--(use two dashes, do not use three---, as Obsidian will parse it as a horizontal rule)
Step 5: Automatic Keyword Linking (Optional)
After generating the recommendation note, automatically link keywords to existing notes:
# Step 1: Scan existing notes
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
--vault "$OBSIDIAN_VAULT_PATH" \
--output existing_notes_index.json
# Step 2: Generate recommendation note (normal flow)
# ... use search_arxiv.py to search for papers ...
# Step 3: Link keywords (new step)
python scripts/link_keywords.py \
--index existing_notes_index.json \
--input "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md" \
--output "10_Daily/YYYY-MM-DD${NOTE_SUFFIX}_linked.md"
Note:
- The keyword linking script will automatically skip frontmatter, heading lines, and code blocks
- Filter out common words (and, for, model, learning, etc.)
- Preserve existing wikilinks without modification
Important Rules
- Expand Search Scope: Search papers from the past month + popular papers from the past year
- Composite Recommendation Score: Combine four dimensions: relevance, recency, popularity, quality
- Filename with Date: Keep the format
10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md(Chinese:论文推荐, English:paper-recommendations) - Add Today's Overview: Add a "## Today's Overview" section at the beginning of the recommendation note, summarizing the main research directions, overall trends, quality distribution, research hotspots, and reading suggestions for the day's papers
- Sort by Score: All papers sorted by recommendation score from highest to lowest
- Top 3 Special Handling:
- Paper names in wikilink format:
[[Paper Name]] - Automatically extract and insert the first image
- Automatically call
paper-analyzeto generate a detailed report - Display wikilink reference in the "Detailed Report" field
- Paper names in wikilink format:
- Other Papers: Write only basic information, do not insert images
- Keep it Fast: Let the user quickly understand the day's recommendations
- Avoid Duplication: Check for already recommended papers
- Automatic Keyword Linking:
- After generating the recommendation note, automatically scan existing notes
- Replace keywords in the text (e.g., BLIP, CLIP) with wikilinks
- Example:
BLIP→[[BLIP]] - Preserve existing wikilinks without modification
- Do not replace content in code blocks
- Do not replace content already in wikilinks (to avoid duplicates)
Differences from Other Skills
start-my-day (This Skill)
- Purpose: Filter and recommend papers from a broad search, generate a daily recommendation note
- Search Scope: Past month + popular/high-quality papers from the past year
- Content: Recommendation list
- Includes "Today's Overview" at the beginning: summarizing main research directions, overall trends, quality distribution, research hotspots, and reading suggestions
- Unified format for all papers
- Top 3 special handling:
- Paper names in wikilink format:
[[Paper Name]] - Automatically extract and insert the first image
- Automatically call
paper-analyzeto generate a detailed report - Display wikilink reference in the "Detailed Report" field
- Paper names in wikilink format:
- Image Handling: Automatically extract and insert the first image for the top 3; do not include images for all papers
- Detailed Report: Automatically generated for the top 3; not generated for other papers
- Applicable: User manually triggers daily
- Note Referencing: If a paper already has notes, write briefly and reference; if analysis requires referencing historical notes, reference them directly
paper-analyze (Deep Analysis Skill)
- Purpose: User actively reviews a single paper for in-depth study
- Applicable Scenario: Papers the user wants to see but that the AI has not covered
- Content: Detailed in-depth analysis note for a paper
- Includes all core information: research problem, method overview, method architecture, key innovations, experimental results, in-depth analysis, comparison with related papers, etc.
- Rich with images: Use all images from the paper (core architecture diagrams, method diagrams, experimental results, etc.)
- Applicable: User actively calls
paper-analyze(Codex uses$paper-analyze, Claude Code uses/paper-analyze) and provides a paper ID or title - Important Requirement: Whether papers are compiled by start-my-day or viewed by the user actively, they must be rich with images
Usage Instructions
When the user inputs "start my day", execute the following steps:
Date Parameter Support:
- No parameter: Generate the paper recommendation note for today's date
- With parameter (YYYY-MM-DD): Generate the paper recommendation note for the specified date
- Example: In Codex, use
$start-my-day 2026-02-27; in Claude Code, use/start-my-day 2026-02-27
- Example: In Codex, use
Automatic Execution Flow
-
Get Target Date
- No parameter: Use the current date (YYYY-MM-DD format)
- With parameter: Use the specified date
-
Scan Existing Notes to Build Index
# Scan existing paper notes in the vault cd "$SKILL_DIR" python scripts/scan_existing_notes.py \ --vault "$OBSIDIAN_VAULT_PATH" \ --output existing_notes_index.json- Scan the
20_Research/Papers/directory - Extract note titles and tags
- Build a keyword-to-note-path mapping table
- Scan the
-
Search and Filter arXiv Papers
# Use the Python script to search, parse, and filter arXiv papers # First, change to the skill directory, then run the script # If there is a target date parameter (e.g., 2026-02-21), pass it to --target-date cd "$SKILL_DIR" python scripts/search_arxiv.py \ --config "$OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml" \ --output arxiv_filtered.json \ --max-results 200 \ --top-n 10 \ --download-dir "$OBSIDIAN_VAULT_PATH/20_Research/Papers/" \ --target-date "{target_date}" # Replace with actual date if specified by user -
Read Filtered Results
- Read the filtered results from
arxiv_filtered.json - Get the top 10 high-scoring papers
- Each paper includes: ID, title, authors, abstract, scores, matched areas
- Verify that the 10
local_pdf_filenamefiles all exist in `$OBSIDIAN_VAULT_PATH/20_Research/Papers/
- Read the filtered results from
...