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
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
Then use this language setting throughout the workflow:
- When generating notes, pass
--language $LANGUAGEto scripts - Use appropriate section headers in the generated notes
Goal
Help users start their research day by searching for extremely popular, extremely trending, and extremely high-quality papers from the past month and the past year, and generate recommendation notes.
WorkflowWorkflow Overview
This skill uses a Python script to call the arXiv API to search for papers, parse XML results, and filter and 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: the filename is interests, not interest) to get research fields - Extract: keywords, categories, and priorities
- Read
-
Scan existing notes to build an index
- Scan all
20_Research/Papers/files in the.mddirectory - Extract note titles (from filenames and the frontmatter title field)
- Build a mapping table from keywords to note paths for subsequent automatic linking
- Prefer the title field in frontmatter, then use the filename
- Scan all
Step 2: Search for Papers
2.1 Search Scope
Search for recent papers in all relevant 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 according to the research interests configuration file
- Calculate a comprehensive recommendation score
- Keep the top 10 highest-scoring papers
2.2 Execute Search and Filtering
Use the scripts/search_arxiv.py script to complete searching, parsing, and filtering:
# 使用 Python 脚本搜索、解析和筛选 arXiv 论文
# 首先切换到 skill 目录,然后执行脚本
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 \
--categories "cs.AI,cs.LG,cs.CL,cs.CV,cs.MM,cs.MA,cs.RO"
Script functionality:
-
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 according to the research interests configuration file
- Calculate a comprehensive recommendation score (relevance 40%, recency 20%, popularity 30%, quality 10%)
- Sort by score and keep the top 10
Output:
arxiv_filtered.json- Filtered paper list (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 fields
Step 3: Read Filtering Results
3.1 Read JSON Results
From arxiv_filtered.json , read the filtered and scored paper list:
# 读取筛选结果
cat arxiv_filtered.json
Results include:
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, category
- Relevance score, recency score, quality score
- Final recommendation score, matched fields, matched keywords
3.2 Scoring Explanation
Comprehensive scoring across multiple dimensions:
推荐评分 =
相关性评分: 40%
新近性评分: 20%
热门度评分: 30%
质量评分: 10%
Scoring Rules:
-
Relevance Score (40%)
- Degree of match with research interests
- Title keyword match: +0.5 points each
- Abstract keyword match: +0.3 points each
- Category match: +1.0 point
- Maximum score: ~3.0
-
Recency Score (20%)
- Within the last 30 days: +3 points
- Within 30-90 days: +2 points
- Within 90-180 days: +1 point
- More than 180 days: 0 points
-
Popularity Score (30%)
- (If data is available) Citation count > 100: +3 points
- Citation count 50-100: +2 points
- Citation count < 50: +1 point
- No citation data: 0 points
- Or infer based on time since publication (popular new papers within the last 7 days): +2 points
-
Quality Score (10%)
- Inferred from the abstract: Significant innovation: +3 points
- Clear methodology: +2 points
- General work: +1 point
- Or read the quality score from existing notes
Final Recommendation Score = Relevance (40%) + Recency (20%) + Popularity (30%) + Quality (10%)
Step 4: Generate today's recommendation notes
4.1 Read the filtering results
From arxiv_filtered.json , read the filtered paper list:
- Contains the top 10 high-scoring papers
- Each paper contains complete information: ID, title, authors, abstract, score, matched fields
4.2 Create the recommendation notes file
-
Create the recommendation notes file
- File name (according to the language setting):
- Chinese (
language: "zh"):10_Daily/YYYY-MM-DD论文推荐.md - English (
language: "en"):10_Daily/YYYY-MM-DD-paper-recommendations.md
- Chinese (
- Use variables:
10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md(whereNOTE_SUFFIXhas already been set during the language detection stage) - Must include attributes:
keywords: Keywords of the day's recommended papers (comma-separated, extracted from paper titles and abstracts)tags: ["llm-generated", "daily-paper-recommend"]
- File name (according to the language setting):
-
Check whether the paper is worth writing about in detail
- Papers highly worth reading: Papers with a recommendation score >= 7.5 or specially recommended papers
- Generally recommended papers: Other papers
-
Check whether the paper already has notes
- Search the
20_Research/Papers/directory - Check whether there are detailed notes for this paper
- If notes already exist: write briefly and cite the existing notes
- If no notes exist:
- Highly worth reading: write a detailed section in the recommendation notes
- Generally recommended: write only basic information
- Search the
4.2 Recommendation notes structure
The notes file structure is as follows:
---
keywords: [关键词1, 关键词2, ...]
tags: ["llm-generated", "daily-paper-recommend"]
---
[具体论文推荐列表...]
4.2.1 Today's overview (placed before the paper list)
Before the paper list, add an overview section summarizing the overall situation of today's recommended papers.
According to $LANGUAGE Set selection language:
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}**:{简要描述}
- **阅读建议**:{给出阅读顺序建议}
Description:
- Summarize based on the titles, abstracts, and scores of the top 10 filtered papers
- Extract common research themes and trends
- Provide reasonable reading order suggestions
4.2.2 Unified format for all papers
All papers are arranged in descending order by score, using a unified format
According to $LANGUAGE Set selection tag language:
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) | [PDF](url)
- **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:
- Wikilink must use display alias:
[[File_Name|Display Title]], do not use bare[[File_Name]](underscores will be displayed directly, affecting readability) - Images must use Obsidian wikilink embed syntax:
![[filename.png|600]],ProhibitedUseformat (URL encoding does not work in Obsidian) - Institution information: Extract from the paper's TeX source code's
\authoror\affiliationfield; if not provided by the arXiv API, read from the downloaded source package - Do not use
---as a "no data" placeholder: Use--instead (three hyphens will be parsed by Obsidian as a horizontal rule)
4.2.3 Insert images and invoke detailed analysis for the first three papers
For the first 3 papers (the 3 with the highest scores):
Step 0: Check whether the paper already has a note
# 在 20_Research/Papers/ 目录中搜索已有笔记
# 搜索方式:
# 1. 按论文ID搜索(如 2602.23351)
# 2. 按论文标题搜索(模糊匹配)
# 3. 按论文标题关键词搜索
Step 1: Decide how to handle it based on the check result
If a note already exists:
- Do not generate a new detailed report
- Use the existing note path as the wikilink
- Reference the existing note in the "Detailed Report" field of the recommendation note
- Check whether images need to be extracted (if there is no images directory or the images directory is empty)
- If images are needed: call
extract-paper-images - If images already exist: use the existing images
- If images are needed: call
If there is no note:
- Call
extract-paper-imagesto extract images - Call
paper-analyzeto generate a detailed report - Add images and detailed report links in the recommendation note
Step 2: Insert images and links in the recommendation note
If a note already exists:
### [[已有论文名称]]
- **作者**:[作者列表]
- **机构**:[机构名称]
- **链接**:[arXiv](链接) | [PDF](链接)
- **来源**:[arXiv]
- **详细报告**:[[已有笔记路径]]
- **笔记**:已有详细分析
**一句话总结**:[一句话概括论文的核心贡献]
![[existing_image_filename.png|600]]
**核心贡献/观点**:
...
If there is no note:
### [[Note_Filename|Paper Title Display Name]]
- **作者**:[作者列表]
- **机构**:[机构名称]
- **链接**:[arXiv](链接) | [PDF](链接)
- **来源**:[arXiv]
- **详细报告**:[[20_Research/Papers/[domain]/[note_filename]|Short Title]] (自动生成)
**一句话总结**:[一句话概括论文的核心贡献]
![[paperID_fig1.png|600]]
**核心贡献/观点**:
...
Image format rules (important!):
- Must use Obsidian wikilink embed syntax:
![[filename.png|600]] - Do not use markdown image syntax:
— URL encoding (%20,%26) does not work in Obsidian - Image filename example:
2603.24124_fig1.png - Obsidian will automatically search the vault for a matching filename; there is no need to write the full path
Detailed report description:
- Report path:
20_Research/Papers/[论文分类]/[note_filename].md - Important: Use the
note_filenamefield in JSON to concatenate the wikilink - Must use display alias:
[[20_Research/Papers/[domain]/[note_filename]|Short Title]]- Correct:
[[20_Research/Papers/大模型/Hypothesis-Conditioned_Query_Rewriting|Hypothesis-Conditioned Query Rewriting]] - Incorrect:
[[20_Research/Papers/大模型/Hypothesis-Conditioned_Query_Rewriting_for_Decision-Useful_Retrieval]](underscores are displayed directly, which is not aesthetically pleasing)
- Correct:
- The detailed report is automatically generated by
paper-analyzeAuto-generated
Institution/Affiliation extraction:
- From the downloaded arXiv source package (
.tar.gz) in the.texfile, extract the\authorand\affiliationfields - If the source code is unavailable, extract from the arXiv page HTML
- If it still cannot be obtained, mark it as
--(use two hyphens,do not use three---, because Obsidian will parse it as a horizontal rule)
Step 5: Auto-link keywords (optional)
After generating the recommendation note, automatically link keywords to existing notes:
# 步骤1:扫描现有笔记
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
--vault "$OBSIDIAN_VAULT_PATH" \
--output existing_notes_index.json
# 步骤2:生成推荐笔记(正常流程)
# ... 使用 search_arxiv.py 搜索论文 ...
# 步骤3:链接关键词(新增步骤)
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 generic words (and, for, model, learning, etc.)
- Keep existing wikilinks unmodified
- Expand search scope:Search popular papers from the past month + past year
- Comprehensive recommendation score:combines four dimensions: relevance, recency, popularity, and quality
- Filename uses the date:Keep the
10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.mdformat (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 today's papers
- Sort by score:all papers are sorted by recommendation score from high to low
- The first 3 papers are handled specially:
- Paper names use wikilink format:
[[论文名字]] - Automatically extract the first image and insert it
- Automatically call
paper-analyzeto generate a detailed report - Display the wikilink association in the "Detailed Report" field
- Paper names use wikilink format:
- Other papers:only write basic information, do not insert images
- Keep it fast:let users quickly understand the day's recommendations
- Avoid duplication:check already recommended papers
- Automatic keyword linking:
- After generating the recommendation note, automatically scan existing notes
- Replace keywords in the text (such as BLIP, CLIP, etc.) with wikilinks
- Example:
BLIP→[[BLIP]] - Keep existing wikilinks unmodified
- Do not replace content in code blocks
- Do not replace content that already has wikilinks (to avoid duplication)
start-my-day (this skill)
- Purpose:filter recommended papers from a broad search and generate a daily recommendation note
- Search scope:popular/high-quality papers from the past month + past year
- Content:recommendation list
- The beginning includes "Today's Overview": summarize the main research directions, overall trends, quality distribution, research hotspots, and reading suggestions
- All papers use a unified format
- The first 3 papers are handled specially:
- Paper names use wikilink format:
[[论文名字]] - Automatically extract the first image and insert it
- Automatically call
paper-analyzeto generate a detailed report - Display the wikilink association in the "Detailed Report" field
- Paper names use wikilink format:
- Image handling:the first 3 papers automatically extract and insert the first image; does not include images for all papers
- Detailed Report: Automatically generated for the first 3 papers, not generated for other papers
- Applicable: User manually triggers daily
- Note References: If the paper already has notes, write briefly and reference them; if the analysis needs to reference historical notes, also reference them directly
paper-analyze (deep analysis skill)
- Purpose: User actively views a single paper for in-depth research
- Applicable Scenarios: Papers the user still wants to view but that AI has not organized
- Content: Detailed in-depth paper analysis notes
- Includes all core information: research question, method overview, method architecture, key innovations, experimental results, in-depth analysis, comparison with related papers, etc.
- Rich in images and text: All images in the paper must be used (core architecture diagrams, method diagrams, experimental result figures, etc.)
- Applicable: User actively invokes
paper-analyze(Codex uses$paper-analyze, Claude Code uses/paper-analyze) and provides the paper ID or title - Important Requirements: Whether it is a paper organized by start-my-day or a paper actively viewed by the user, it must be rich in images and text
When the user inputs "start my day", execute the following steps:
Date Parameter Support:
- No parameter: Generate paper recommendation notes for the current day
- With parameter (YYYY-MM-DD): Generate paper recommendation notes for the specified date
- For example: In Codex use
$start-my-day 2026-02-27, in Claude Code use/start-my-day 2026-02-27
- For example: In Codex use
Automatic Execution Flow
-
Get the target date
- No parameter: Use the current date (YYYY-MM-DD format)
- With parameter: Use the specified date
-
Scan existing notes to build an index
# 扫描 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 mapping table from keywords to note paths
- Scan the
-
Search and filter arXiv papers
# 使用 Python 脚本搜索、解析和筛选 arXiv 论文 # 首先切换到 skill 目录,然后执行脚本 # 如果有目标日期参数(如 2026-02-21),传递给 --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 \ --categories "cs.AI,cs.LG,cs.CL,cs.CV,cs.MM,cs.MA,cs.RO" \ --target-date "{目标日期}" # 如果用户指定了日期,替换为实际日期 -
Read the filtering results
- Read the filtering results from
arxiv_filtered.jsonread the filtering results - Get the top 10 high-scoring papers
- Each paper includes: ID, title, authors, abstract, score, matched field
- Read the filtering results from
-
Generate recommendation notes (including keyword links)
- Create
10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md(use the target date,NOTE_SUFFIXdepends on the language setting) - Sort by score: All papers are arranged from highest to lowest recommendation score
- Special handling for the first 3 papers:
- Paper names use wikilink format:
[[论文名字]] - Insert the first actually extracted image after the "one-sentence summary"
- Display the wikilink association in the "Detailed Report" field
- Paper names use wikilink format:
- Other papers: Only write basic information, do not insert images
- Automatic keyword linking(Important!):
- After generating the notes, scan the keywords in the text
- Use
existing_notes_index.jsonfor matching - Replace keywords with wikilinks, e.g.
BLIP→[[BLIP]] - Keep existing wikilinks unmodified
- Do not replace content in code blocks
- Create
-
Perform in-depth analysis on the first three papers
# 对每篇前三论文执行以下操作 # 步骤1:检查论文是否已有笔记 # 在 20_Research/Papers/ 目录中搜索 # - 按论文ID搜索(如 2602.23351) # - 按论文标题搜索(模糊匹配) # - 按论文标题关键词搜索(如 "Pragmatics", "Reporting Bias") # 步骤2:根据检查结果决定处理方式 if 已有笔记: # 不生成新的详细报告 # 使用已有的笔记路径 # 只提取图片(如果没有图片的话) else: # 提取第一张图片 调用 extract-paper-images skill,传入 [论文ID] # 生成详细分析报告 调用 paper-analyze skill,传入 [论文ID]- If notes already exist:
- Do not generate the detailed report again
- Use the existing note path as the wikilink
- Check whether images need to be extracted (if there is no images directory or the images directory is empty)
- Reference the existing note in the "detailed report" field of the recommendation note
- If there are no notes:
- Extract the first image and save it to the vault
- Generate a detailed paper analysis report
- Add image and detailed report links in the recommendation note
- If notes already exist:
Temporary file cleanup
- Temporary XML and JSON files generated during the search process can be cleaned up
- After the recommendation note has been saved to the vault, the temporary files are no longer needed
Dependencies
- Python 3.x (used to run the search and filtering scripts)
- PyYAML (used to read the research interest configuration file)
- Network connection (to access the arXiv API)
20_Research/Papers/directory (used to scan existing notes and save detailed reports)extract-paper-imagesskill (used to extract paper images)paper-analyzeskill (used to generate detailed reports)
Script description
search_arxiv.py
Located at scripts/search_arxiv.py, the features include:
- Search arXiv: Call the arXiv API to retrieve papers
- Parse XML: Extract paper information (ID, title, authors, abstract, etc.)
- Filter papers: Filter according to the research interest configuration file
- Calculate scores: Combine dimensions such as relevance, recency, quality, etc.
- Output JSON: Save the filtered results to
arxiv_filtered.json
scan_existing_notes.py
Located at scripts/scan_existing_notes.py, the features include:
- Scan note directory: Scan
20_Research/Papers/all.mdfiles under it - Extract note information:
- File path
- File name
- title field in frontmatter
- tags field
- Build index: Create a mapping table from keywords to note paths
- Output JSON: Save the index to
existing_notes_index.json
Usage:
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
--vault "$OBSIDIAN_VAULT_PATH" \
--output existing_notes_index.json
Output format:
{
"notes": [
{
"path": "20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md",
"filename": "BLIP_Bootstrapping-Language-Image-Pre-training.md",
"title": "BLIP: Bootstrapping Language-Image Pre-training for Unified Vision-Language Understanding and Generation",
"title_keywords": ["BLIP", "Bootstrapping", "Language-Image", "Pre-training", "Unified", "Vision-Language", "Understanding", "Generation"],
"tags": ["Vision-Language-Pre-training", "Multimodal-Encoder-Decoder", "Bootstrapping", "Image-Captioning", "Image-Text-Retrieval", "VQA"]
}
],
"keyword_to_notes": {
"blip": ["20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md"],
"bootstrapping": ["20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md"],
"vision-language": ["20_Research/Papers/多模态技术/BLIP_Bootstrapping-Language-Image-Pre-training.md"]
}
}
link_keywords.py
Located at scripts/link_keywords.py, the features include:
- Read text: Read the text content to be processed
- Read note index: From
existing_notes_index.jsonload the note mapping - Replace keywords: Find keywords in the text and replace them with wikilinks
- Do not replace existing wikilinks (e.g.
[[BLIP]]) - Do not replace content in code blocks
- Matching rules:
- Prioritize matching complete title keywords
- Then match keywords in tags
- Ignore case when matching
- Filter common words (and, for, model, learning, etc.)
- Skip frontmatter and heading lines
- Do not replace existing wikilinks (e.g.
- Output the result: Output the processed text
Usage:
# 首先切换到 skill 目录,然后执行脚本
cd "$SKILL_DIR"
python scripts/link_keywords.py \
--index existing_notes_index.json \
--input "input.txt" \
--output "output.txt"
Match examples:
原始文本:
"这篇论文使用了BLIP和CLIP作为基线方法。"
处理后:
"这篇论文使用了[[BLIP]]和[[CLIP]]作为基线方法。"
Usage:
# 步骤1:扫描现有笔记
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
--vault "$OBSIDIAN_VAULT_PATH" \
--output existing_notes_index.json
# 步骤2:生成推荐笔记(正常流程)
# ... 使用 search_arxiv.py 搜索论文 ...
# 步骤3:链接关键词(新增步骤)
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"
Key features:
- Smart matching: Case-insensitive matching in Chinese environment
- Protect existing links: Do not replace existing wikilinks
- Avoid code contamination: Do not replace content in code blocks and inline code
- Path encoding: Use UTF-8 encoding to ensure Chinese paths are correct
- Skip sensitive areas: Do not process frontmatter, heading lines, code blocks
Keyword linking implementation (new!)
Feature overview: After generating the daily recommendation note, automatically scan existing notes and replace keywords (such as BLIP, CLIP, etc.) in the text with wikilinks (such as [[BLIP]]).
Implementation process:
-
Scan existing notes: Scan the
20_Research/Papers/directory- Extract the frontmatter (title, tags) of notes
- Extract keywords from the title (by separators and common affixes)
- Extract keywords from tags (split by hyphens)
- Build a mapping table from keywords to note paths
-
Generate the recommendation note: Generate the recommendation note content normally
-
Link keywords: Process the generated note
- Find keywords in the text
- Replace found keywords with wikilinks
- Preserve existing wikilinks
- Do not replace content in code blocks and inline code
Usage:
# 步骤1:扫描现有笔记
cd "$SKILL_DIR"
python scripts/scan_existing_notes.py \
--vault "$OBSIDIAN_VAULT_PATH" \
--output existing_notes_index.json
# 步骤2:生成推荐笔记(正常流程)
# ... 使用 search_arxiv.py 搜索论文 ...
# 步骤3:链接关键词(新增步骤)
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"
Key features:
- Smart matching: Case-insensitive matching in Chinese environment
- Protect existing links: Do not replace existing wikilinks
- Avoid code contamination: Do not replace content in code blocks and inline code
- Path encoding: Use UTF-8 encoding to ensure Chinese paths are correct