Communitygithub.com

Geophysics Start My Day

A daily paper recommendation skill for geoscience and geological engineering graduate students. It retrieves papers on seismic exploration and intelligent geophysics, saves 10 open-access PDFs daily into Obsidian, and generates recommendation notes with clickable local links in Chinese.

What is Geophysics Start My Day?

This skill, named 'Geophysics Start My Day,' is designed for graduate students and researchers in geological resources and engineering. It automates the daily discovery and curation of high-impact research papers from arXiv, specifically focusing on seismic exploration, intelligent geophysics, and related fields. The skill searches for papers from the past month and year, filters and scores them based on user-defined research interests, and generates a daily recommendation note in Obsidian. It supports both Chinese and English output, integrates with a local Obsidian vault, and automatically downloads PDFs to a specified directory. The generated note includes an overview, per-paper summaries with contributions and key results, and wikilinks to local PDFs and existing notes. The top three papers receive enhanced treatment with extracted images and links to detailed analysis reports. This skill streamlines the daily research workflow, ensuring users stay up-to-date with the latest developments in their field without manual searching.

Works with✓Claude Code✓Codex CLI~Cursor
npx skills add 666zhoulei/Geophysics-Start-My-Day-Skill

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

Preview

From the skill README

alt
alt

Documentation

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.md as $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) or python3 (macOS/Linux); do not assume a fixed interpreter path.
  • Before first run, verify that python -c "import yaml, requests, fitz" succeeds; install dependencies from requirements.txt if missing.
  • On Windows, if the environment variable is not yet in the current process, read the vault path from the vault_path field 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 $LANGUAGE to 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)

  1. Get Today's Date

    • Determine the current date (YYYY-MM-DD format)
  2. Read Research Configuration

    • Read $OBSIDIAN_VAULT_PATH/99_System/Config/research_interests.yaml (note: filename is interests, not interest) 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, and Journal of Applied Geophysics
  3. Scan Existing Notes to Build Index

    • Scan all .md files in the 20_Research/Papers/ directory
    • Extract note titles (from filename and frontmatter title field)
    • Build a keyword-to-note-path mapping table for later automatic linking
    • Prefer the frontmatter title field; fall back to the filename

Step 2: Search for Papers

2.1 Search Scope

Search for recent papers across all relevant arXiv categories:

  1. Search Scope

    • Use scripts/search_arxiv.py to search arXiv
    • Query: all research-related arXiv categories
    • Sort by submission date
    • Limit results: 200 papers
  2. 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:

  1. Search arXiv

    • Call the arXiv API to search for papers in specified categories
    • Retrieve up to 200 latest papers
  2. Parse XML Results

    • Parse the XML returned by the API
    • Extract: ID, title, authors, abstract, publication date, categories
  3. 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 found
  • total_filtered: Number of papers after filtering
  • top_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:

  1. 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
  2. Recency Score (20%)

    • Within 30 days: +3 points
    • 30-90 days: +2 points
    • 90-180 days: +1 point
    • Over 180 days: 0 points
  3. 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
  4. 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

  1. 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
    • Use variable: 10_Daily/YYYY-MM-DD${NOTE_SUFFIX}.md (where NOTE_SUFFIX is 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"]
  2. Check if Paper Deserves Detailed Writing

    • Highly Recommended Papers: Recommendation score >= 7.5 or specially recommended papers
    • Generally Recommended Papers: Other papers
  3. 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

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 use ![alt](path%20encoded) format (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 \author or \affiliation fields 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 images directory or it is empty)
    • If images are needed: call extract-paper-images
    • If images already exist: use existing images

If no note exists:

  • Call extract-paper-images to extract images
  • Call paper-analyze to 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: ![alt](path%20with%20encoding) — 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_filename field 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)
  • The detailed report is automatically generated by paper-analyze

Affiliation Extraction:

  • Extract the \author and \affiliation fields from .tex files 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-analyze to generate a detailed report
    • Display wikilink reference in the "Detailed Report" field
  • 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-analyze to generate a detailed report
      • Display wikilink reference in the "Detailed Report" field
  • 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

Automatic Execution Flow

  1. Get Target Date

    • No parameter: Use the current date (YYYY-MM-DD format)
    • With parameter: Use the specified date
  2. 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
  3. 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
    
  4. 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_filename files all exist in `$OBSIDIAN_VAULT_PATH/20_Research/Papers/

...

Related Skills