Agent skill
obsidian-bases
Create and edit Obsidian Bases (.base files): Obsidian's native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Triggers on: create a base, add a base file, obsidian bases, base view, filter notes, formula, database view, dynamic table, task tracker base, reading list base.
Install this agent skill to your Project
npx add-skill https://github.com/AgriciDaniel/claude-obsidian/tree/main/skills/obsidian-bases
SKILL.md
obsidian-bases: Obsidian's Database Layer
Obsidian Bases (launched 2025) turns vault notes into queryable, dynamic views. Tables, cards, lists, maps. Defined in .base files. No plugin required; it is a core Obsidian feature.
Authoritative reference: If the kepano/obsidian-skills plugin is installed, prefer its canonical obsidian-bases skill. Otherwise, use the reference below. Official docs: https://help.obsidian.md/bases/syntax
File Format
.base files contain valid YAML. The root keys are filters, formulas, properties, summaries, and views.
# Global filters: apply to ALL views
filters:
and:
- file.hasTag("wiki")
- 'status != "archived"'
# Computed properties
formulas:
age_days: '(now() - file.ctime).days.round(0)'
status_icon: 'if(status == "mature", "✅", "🔄")'
# Display name overrides for properties panel
properties:
status:
displayName: "Status"
formula.age_days:
displayName: "Age (days)"
# One or more views
views:
- type: table
name: "All Pages"
order:
- file.name
- type
- status
- updated
- formula.age_days
Filters
Filters select which notes appear. Applied globally or per-view.
# Single string filter
filters: 'status == "current"'
# AND: all must be true
filters:
and:
- 'status != "archived"'
- file.hasTag("wiki")
# OR: any can be true
filters:
or:
- file.hasTag("concept")
- file.hasTag("entity")
# NOT: exclude matches
filters:
not:
- file.inFolder("wiki/meta")
# Nested
filters:
and:
- file.inFolder("wiki/")
- or:
- 'type == "concept"'
- 'type == "entity"'
Filter operators
== != > < >= <=
Useful filter functions
| Function | Example |
|---|---|
file.hasTag("x") |
Notes with tag x |
file.inFolder("path/") |
Notes in folder |
file.hasLink("Note") |
Notes linking to Note |
Properties
Three types:
- Note properties: from frontmatter:
status,type,updated - File properties: metadata:
file.name,file.mtime,file.size,file.ctime,file.tags,file.folder - Formula properties: computed:
formula.age_days
Formulas
Defined in formulas:. Referenced as formula.name in order: and properties:.
formulas:
# Days since created
age_days: '(now() - file.ctime).days.round(0)'
# Days until a date property
days_until: 'if(due_date, (date(due_date) - today()).days, "")'
# Conditional label
status_icon: 'if(status == "mature", "✅", if(status == "developing", "🔄", "🌱"))'
# Word count estimate
word_est: '(file.size / 5).round(0)'
Key rule: Subtracting two dates returns a Duration. Not a number. Always access .days first:
# CORRECT
age: '(now() - file.ctime).days'
# WRONG: crashes
age: '(now() - file.ctime).round(0)'
Always guard nullable properties with if():
# CORRECT
days_left: 'if(due_date, (date(due_date) - today()).days, "")'
View Types
Table
views:
- type: table
name: "Wiki Index"
limit: 100
order:
- file.name
- type
- status
- updated
groupBy:
property: type
direction: ASC
Cards
views:
- type: cards
name: "Gallery"
order:
- file.name
- tags
- status
List
views:
- type: list
name: "Quick List"
order:
- file.name
- status
Wiki Vault Templates
Wiki content dashboard (all non-meta pages)
filters:
and:
- file.inFolder("wiki/")
- not:
- file.inFolder("wiki/meta")
formulas:
age: '(now() - file.ctime).days.round(0)'
properties:
formula.age:
displayName: "Age (days)"
views:
- type: table
name: "All Wiki Pages"
order:
- file.name
- type
- status
- updated
- formula.age
groupBy:
property: type
direction: ASC
Entity index (people, orgs, repos)
filters:
and:
- file.inFolder("wiki/entities/")
- 'file.ext == "md"'
views:
- type: table
name: "Entities"
order:
- file.name
- entity_type
- status
- updated
groupBy:
property: entity_type
direction: ASC
Recent ingests
filters:
and:
- file.inFolder("wiki/sources/")
views:
- type: table
name: "Sources"
order:
- file.name
- source_type
- created
- status
groupBy:
property: source_type
direction: ASC
Embedding in Notes
![[MyBase.base]]
![[MyBase.base#View Name]]
Where to Save
Store .base files in wiki/meta/ for vault dashboards:
wiki/meta/dashboard.base: main content viewwiki/meta/entities.base: entity trackerwiki/meta/sources.base: ingestion log
YAML Quoting Rules
- Formulas with double quotes → wrap in single quotes:
'if(done, "Yes", "No")' - Strings with colons or special chars → wrap in double quotes:
"Status: Active" - Unquoted strings with
:break YAML parsing
What Not to Do
- Do not use
from:orwhere:: those are Dataview syntax, not Obsidian Bases - Do not use
sort:at the root level: sorting is per-view viaorder:andgroupBy: - Do not put
.basefiles outside the vault: they only render inside Obsidian - Do not reference
formula.Xinorder:without definingXinformulas:
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
defuddle
Strip clutter from web pages before ingesting into the wiki. Removes ads, navigation, headers, footers, and boilerplate: leaving clean readable markdown that saves 40-60% tokens. Triggers on: defuddle, clean this page, strip this url, fetch and clean, clean web content before ingesting, strip ads, remove clutter, clean URL content, readable markdown from URL.
obsidian-markdown
Write correct Obsidian Flavored Markdown: wikilinks, embeds, callouts, properties, tags, highlights, math, and canvas syntax. Reference this when creating or editing any wiki page. Triggers on: write obsidian note, obsidian syntax, wikilink, callout, embed, obsidian markdown, wikilink format, callout syntax, embed syntax, obsidian formatting, how to write obsidian markdown.
wiki-ingest
Ingest sources into the Obsidian wiki vault. Reads a source, extracts entities and concepts, creates or updates wiki pages, cross-references, and logs the operation. Supports files, URLs, and batch mode. Triggers on: ingest, process this source, add this to the wiki, read and file this, batch ingest, ingest all of these, ingest this url.
canvas
Visual layer of the wiki. Add images, text cards, PDFs, and wiki pages to Obsidian canvas files with auto-positioning inside zones. Integrates with /banana for image capture. Triggers on: /canvas, canvas new, canvas add image, canvas add text, canvas add pdf, canvas add note, canvas zone, canvas list, canvas from banana, add to canvas, put this on the canvas, open canvas, create canvas.
save
Save the current conversation, answer, or insight into the Obsidian wiki vault as a structured note. Analyzes the chat, determines the right note type, creates frontmatter, files it in the correct wiki folder, and updates index, log, and hot cache. Triggers on: "save this", "save that answer", "/save", "file this", "save to wiki", "save this session", "file this conversation", "keep this", "save this analysis", "add this to the wiki".
autoresearch
Autonomous iterative research loop. Takes a topic, runs web searches, fetches sources, synthesizes findings, and files everything into the wiki as structured pages. Based on Karpathy's autoresearch pattern: program.md configures objectives and constraints, the loop runs until depth is reached, output goes directly into the knowledge base. Triggers on: "/autoresearch", "autoresearch", "research [topic]", "deep dive into [topic]", "investigate [topic]", "find everything about [topic]", "research and file", "go research", "build a wiki on".
Didn't find tool you were looking for?