agentsclimarketplace

Obsidian bases

Skill eliransu/digital-brain/skills/obsidian-bases

Claude + Obsidian knowledge companion. A persistent, compounding wiki vault based on Karpathy's LLM Wiki pattern β€” drop sources, ask questions, knowledge compounds.

Install
npx -y skills add eliransu/digital-brain --skill obsidian-bases

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

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.

SKILL.md

5.8 KB, as published. Nobody here has run it

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

FunctionExample
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 view
  • wiki/meta/entities.base: entity tracker
  • wiki/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: or where:: those are Dataview syntax, not Obsidian Bases
  • Do not use sort: at the root level: sorting is per-view via order: and groupBy:
  • Do not put .base files outside the vault: they only render inside Obsidian
  • Do not reference formula.X in order: without defining X in formulas:

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.