zephyrwang6/myskill/obsidian-bases

Claude Code and agent skill by zephyrwang6/myskill

Trust tier 3
  • community
Source check pending

Checking that the SKILL.md file is still in the repository.

Create and edit Obsidian Bases (.base files) with views, filters, formulas, and summaries. Use when working with .base files, creating database-like views of notes, or when the user mentions Bases, table views, card views, filters, or formulas in Obsidian.

Install

npx vskill@latest install zephyrwang6/myskill/obsidian-bases

SKILL.md

Obsidian Bases Skill

This skill enables Claude Code to create and edit valid Obsidian Bases (.base files) including views, filters, formulas, and all related configurations.

Overview

Obsidian Bases are YAML-based files that define dynamic views of notes in an Obsidian vault. A Base file can contain multiple views, global filters, formulas, property configurations, and custom summaries.

File Format

Base files use the .base extension and contain valid YAML. They can also be embedded in Markdown code blocks.

Complete Schema

yaml
# Global filters apply to ALL views in the base
filters:
# Can be a single filter string
# OR a recursive filter object with and/or/not
and: []
or: []
not: []
# Define formula properties that can be used across all views
formulas:
formula_name: 'expression'
# Configure display names and settings for properties
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
file.ext:
displayName: "Extension"
# Define custom summary formulas
summaries:
custom_summary_name: 'values.mean().round(3)'
# Define one or more views
views:
- type: table | cards | list | map
name: "View Name"
limit: 10 # Optional: limit results
groupBy: # Optional: group results
property: property_name
direction: ASC | DESC
filters: # View-specific filters
and: []
order: # Properties to display in order
- file.name
- property_name
- formula.formula_name
summaries: # Map properties to summary formulas
property_name: Average

Filter Syntax

Filters narrow down results. They can be applied globally or per-view.

Filter Structure
yaml
# Single filter
filters: 'status == "done"'
# AND - all conditions must be true
filters:
and:
- 'status == "done"'
- 'priority > 3'
# OR - any condition can be true
filters:
or:
- 'file.hasTag("book")'
- 'file.hasTag("article")'
# NOT - exclude matching items
filters:
not:
- 'file.hasTag("archived")'
# Nested filters
filters:
or:
- file.hasTag("tag")
- and:
- file.hasTag("book")
- file.hasLink("Textbook")
- not:
- file.hasTag("book")
- file.inFolder("Required Reading")
Filter Operators
OperatorDescription
==equals
!=not equal
>greater than
<less than
>=greater than or equal
<=less than or equal
&&logical and
`\\`logical or
<code>!</code>logical not

Properties

Three Types of Properties
  1. Note properties - From frontmatter: note.author or just author
  2. File properties - File metadata: file.name, file.mtime, etc.
  3. Formula properties - Computed values: formula.my_formula
File Properties Reference
PropertyTypeDescription
file.nameStringFile name
file.basenameStringFile name without extension
file.pathStringFull path to file
file.folderStringParent folder path
file.extStringFile extension
file.sizeNumberFile size in bytes
file.ctimeDateCreated time
file.mtimeDateModified time
file.tagsListAll tags in file
file.linksListInternal links in file
file.backlinksListFiles linking to this file
file.embedsListEmbeds in the note
file.propertiesObjectAll frontmatter properties
The this Keyword
  • In main content area: refers to the base file itself
  • When embedded: refers to the embedding file
  • In sidebar: refers to the active file in main content

Formula Syntax

Formulas compute values from properties. Defined in the formulas section.

yaml
formulas:
# Simple arithmetic
total: "price * quantity"
# Conditional logic
status_icon: 'if(done, "✅", "⏳")'
# String formatting
formatted_price: 'if(price, price.toFixed(2) + " dollars")'
# Date formatting
created: 'file.ctime.format("YYYY-MM-DD")'
# Complex expressions
days_old: '((now() - file.ctime) / 86400000).round(0)'

Functions Reference

Global Functions
FunctionSignatureDescription
date()date(string): dateParse string to date. Format: YYYY-MM-DD HH:mm:ss
duration()duration(string): durationParse duration string
now()now(): dateCurrent date and time
today()today(): dateCurrent date (time = 00:00:00)
if()if(condition, trueResult, falseResult?)Conditional
min()min(n1, n2, ...): numberSmallest number
max()max(n1, n2, ...): numberLargest number
number()number(any): numberConvert to number
link()link(path, display?): LinkCreate a link
list()list(element): ListWrap in list if not already
file()file(path): fileGet file object
image()image(path): imageCreate image for rendering
icon()icon(name): iconLucide icon by name
html()html(string): htmlRender as HTML
escapeHTML()escapeHTML(string): stringEscape HTML characters
Any Type Functions
FunctionSignatureDescription
isTruthy()any.isTruthy(): booleanCoerce to boolean
isType()any.isType(type): booleanCheck type
toString()any.toString(): stringConvert to string
Date Functions & Fields

Fields: date.year, date.month, date.day, date.hour, date.minute, date.second, date.millisecond

FunctionSignatureDescription
date()date.date(): dateRemove time portion
format()date.format(string): stringFormat with Moment.js pattern
time()date.time(): stringGet time as string
relative()date.relative(): stringHuman-readable relative time
isEmpty()date.isEmpty(): booleanAlways false for dates
Date Arithmetic
yaml
# Duration units: y/year/years, M/month/months, d/day/days,
# w/week/weeks, h/hour/hours, m/minute/minutes, s/second/seconds
# Add/subtract durations
"date + \"1M\"" # Add 1 month
"date - \"2h\"" # Subtract 2 hours
"now() + \"1 day\"" # Tomorrow
"today() + \"7d\"" # A week from today
# Subtract dates for millisecond difference
"now() - file.ctime"
# Complex duration arithmetic
"now() + (duration('1d') * 2)"
String Functions

Field: string.length

FunctionSignatureDescription
contains()string.contains(value): booleanCheck substring
containsAll()string.containsAll(...values): booleanAll substrings present
containsAny()string.containsAny(...values): booleanAny substring present
startsWith()string.startsWith(query): booleanStarts with query
endsWith()string.endsWith(query): booleanEnds with query
isEmpty()string.isEmpty(): booleanEmpty or not present
lower()string.lower(): stringTo lowercase
title()string.title(): stringTo Title Case
trim()string.trim(): stringRemove whitespace
replace()string.replace(pattern, replacement): stringReplace pattern
repeat()string.repeat(count): stringRepeat string
reverse()string.reverse(): stringReverse string
slice()string.slice(start, end?): stringSubstring
split()string.split(separator, n?): listSplit to list
Number Functions
FunctionSignatureDescription
abs()number.abs(): numberAbsolute value
ceil()number.ceil(): numberRound up
floor()number.floor(): numberRound down
round()number.round(digits?): numberRound to digits
toFixed()number.toFixed(precision): stringFixed-point notation
isEmpty()number.isEmpty(): booleanNot present
List Functions

Field: list.length

FunctionSignatureDescription
contains()list.contains(value): booleanElement exists
containsAll()list.containsAll(...values): booleanAll elements exist
containsAny()list.containsAny(...values): booleanAny element exists
filter()list.filter(expression): listFilter by condition (uses value, index)
map()list.map(expression): listTransform elements (uses value, index)
reduce()list.reduce(expression, initial): anyReduce to single value (uses value, index, acc)
flat()list.flat(): listFlatten nested lists
join()list.join(separator): stringJoin to string
reverse()list.reverse(): listReverse order
slice()list.slice(start, end?): listSublist
sort()list.sort(): listSort ascending
unique()list.unique(): listRemove duplicates
isEmpty()list.isEmpty(): booleanNo elements
File Functions
FunctionSignatureDescription
asLink()file.asLink(display?): LinkConvert to link
hasLink()file.hasLink(otherFile): booleanHas link to file
hasTag()file.hasTag(...tags): booleanHas any of the tags
hasProperty()file.hasProperty(name): booleanHas property
inFolder()file.inFolder(folder): booleanIn folder or subfolder
Link Functions
FunctionSignatureDescription
asFile()link.asFile(): fileGet file object
linksTo()link.linksTo(file): booleanLinks to file
Object Functions
FunctionSignatureDescription
isEmpty()object.isEmpty(): booleanNo properties
keys()object.keys(): listList of keys
values()object.values(): listList of values
Regular Expression Functions
FunctionSignatureDescription
matches()regexp.matches(string): booleanTest if matches

View Types

Table View
yaml
views:
- type: table
name: "My Table"
order:
- file.name
- status
- due_date
summaries:
price: Sum
count: Average
Cards View
yaml
views:
- type: cards
name: "Gallery"
order:
- file.name
- cover_image
- description
List View
yaml
views:
- type: list
name: "Simple List"
order:
- file.name
- status
Map View

Requires latitude/longitude properties and the Maps plugin.

yaml
views:
- type: map
name: "Locations"
# Map-specific settings for lat/lng properties

Default Summary Formulas

NameInput TypeDescription
AverageNumberMathematical mean
MinNumberSmallest number
MaxNumberLargest number
SumNumberSum of all numbers
RangeNumberMax - Min
MedianNumberMathematical median
StddevNumberStandard deviation
EarliestDateEarliest date
LatestDateLatest date
RangeDateLatest - Earliest
CheckedBooleanCount of true values
UncheckedBooleanCount of false values
EmptyAnyCount of empty values
FilledAnyCount of non-empty values
UniqueAnyCount of unique values

Complete Examples

Task Tracker Base
yaml
filters:
and:
- file.hasTag("task")
- 'file.ext == "md"'

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 90 of 100Pattern checks on the skill's files.
  • Model reviewPassed

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
288
Repository forks
72
7-day trend score
28

Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 6 May 2026, 6 months ago.

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/zephyrwang6/myskill/obsidian-bases/badge)](https://verified-skill.com/skills/zephyrwang6/myskill/obsidian-bases)

Something wrong with this skill or its page? Tell us.