Use Obsidian Bases (.base files) to maintain a paper database index. Bases is a native feature of Obsidian 1.9+ that can automatically generate database views from note frontmatter, with no need to manually maintain tables.
Trigger conditions
Load this skill when the user requests "update index", "organize papers", or "generate paper list". It will also execute automatically after the read-arxiv-paper skill is completed.
Prerequisites
- Obsidian 1.9+ (built-in Bases feature)
- The frontmatter of paper notes must contain the following fields: title, title_zh, authors, year, arxiv, pdf, tags, tldr, date_added
Directory structure
vault/
├── papers/
│ ├── index/ # .base 文件存放目录
│ │ ├── All-Papers.base # 总库
│ │ ├── Reinforcement-Learning.base # 分类库
│ │ ├── Reasoning.base # 分类库
│ │ └── ...
│ └── notes/ # 论文笔记
│ ├── 2402.03300.md
│ └── ...
Workflow
Step 1: Scan paper notes
Read all $OBSIDIAN_VAULT/papers/notes/ under .md files' frontmatter, extracting the tags field.
Step 2: Determine categories
Collect the tags of all papers, and map them to categories (Chinese names) according to the following rules:
reinforcement-learning,GRPO,PPO,RLHF,DAPO,Dr-GRPO→ Reinforcement-Learningalignment,DPO,preference→ Alignmentattention,transformer,architecture→ Architecturemath-reasoning,reasoning,chain-of-thought→ Reasoningdata,pretraining,scaling→ Pretrainingdistillation,knowledge-distillation→ Distillationvideo,video-generation,video-distillation→ Video-Generation
A paper can belong to multiple categories (as long as its tags match multiple category rules). When encountering a new tag that cannot be categorized, create a reasonable English category name on your own.
Tags cannot contain spaces; multiple words should be connected with a hyphen - or underscore _ .
Step 3: Check existing .base files
Check the existing .base files under the $OBSIDIAN_VAULT/papers/index/ directory.
Step 4: Generate/update .base files
Main library (All-Papers.base): If it does not exist, create it; if it already exists, do not overwrite it.
filters:
and:
- file.inFolder("papers/notes")
- 'file.ext == "md"'
properties:
title:
displayName: "Title"
title_zh:
displayName: "中文名"
tldr:
displayName: "TLDR"
tags:
displayName: "标签"
views:
- type: table
name: "All Papers"
order:
- file.name
- title_zh
- title
- tldr
- tags
groupBy:
property: year
direction: DESC
Category library ({Category-Name}.base): For each category, if the corresponding .base file does not exist, create it. The filter condition uses tags.contains("tag-name") for matching. If one category corresponds to multiple tags, combine them with or :
filters:
and:
- file.inFolder("papers/notes")
- 'file.ext == "md"'
- or:
- 'tags.contains("reinforcement-learning")'
- 'tags.contains("GRPO")'
- 'tags.contains("PPO")'
properties:
title:
displayName: "Title"
title_zh:
displayName: "中文名"
tldr:
displayName: "TLDR"
tags:
displayName: "标签"
views:
- type: table
name: "Category-Name"
order:
- file.name
- title_zh
- title
- tldr
- tags
groupBy:
property: year
direction: DESC
Important rules
- .base files use YAML format, not Markdown
- Do not overwrite existing .base files (the user may have manually adjusted the view configuration)
- Only create .base files corresponding to new categories
- Category names use English, such as "Reinforcement-Learning", "Reasoning"
- The tags in the filter must exactly match the tags in the paper frontmatter (case-sensitive)