agentleFS
tboome33tboome33/obsidian-mcp-router/skills/obsidian-bases/SKILL.md

obsidian-bases

Skill1 starsChanged 7 months agoApache-2.0View on GitHub

Create or edit Obsidian Bases (.base files) — the native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Bases query the vault by frontmatter properties and tags, then render as table/card/list views. Use when the user says "create a base", "make a database view", "obsidian base", "filter notes into a table", "task tracker base", "reading list base", "/obsidian-bases", or any phrasing implying a queryable, filterable view of vault content.

80 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use obsidian-cli, knap and 9 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • jykimSkill

    obsidian-cli

    Interact with Obsidian using the official CLI to read, search, create, and manage notes, daily notes, tasks, properties, and more. Use when the user wants to query or manipulate vault content via the obsidian command.

    Also in 48 projects that use this

  • lucasmaher-hashSkill

    knap

    Render Markdown from templates and structured data using Knap CLI. Use when the user asks to apply a Knap template, turn JSON or CSV data into notes, batch-generate Markdown files, or format Defuddle output into a note.

    Also in 4 projects that use this

  • BCS1037Skill

    mermaid-visualizer

    Transform text content into professional Mermaid diagrams for presentations and documentation. Use when users ask to visualize concepts, create flowcharts, or make diagrams from text. Supports process flows, system architectures, comparisons, mindmaps, and more with built-in syntax error prevention.

    Also in 5 projects that use this

  • pedronauckSkill

    alex-hormozi-pitch

    Create irresistible offers and pitches using Alex Hormozi's methodology from $100M Offers. Guides through value equation, guarantee frameworks, pricing psychology, and creating offers "too good not to take" for any product or service.

    Also in 3 projects that use this

  • dqtx760Skill

    create-project

    Scaffold a complete, runnable project from scratch with proper structure and best practices. Use when building new apps, games, tools, scripts, or any project from zero.

    Also in 4 projects that use this

  • az9713Skill

    vault-health

    Audit vault health: unresolved links, orphan notes, dead-end files, missing frontmatter, structural gaps. Produces an actionable report note with prioritized fix suggestions. Use when wanting to clean up, organize, or assess the current state of the vault.

    Also in 3 projects that use this

The file

We split this skill into the rules it gives an agent

7 rules. 0 are common, 5 are distinctive, and 2 are very specific to this project.

  • 0

    Common

    Most of the 78 edited versions we read keep these.

  • 5

    Distinctive

    This author's own choices. Worth a look.

  • 2

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Before writing the base, you need:

    line 73
  2. Distinctive:

    Ask 1-2 short questions if unclear.

    line 79
  3. Distinctive:

    If the path already exists: read it, propose a diff, ask before overwriting.

    line 152
  4. Distinctive:

    Don't fabricate frontmatter properties the vault doesn't actually use.

    line 160
  5. Very specific:

    Don't write .base files at the vault root unless the user asked.

    line 161
  6. Distinctive:

    Don't try to filter by free-text body content — Bases filter on properties (frontmatter + tags + file.*), not on body content.

    line 162
  7. Very specific:

    Don't add a formula: field unless you're sure of the syntax — Obsidian Bases formula syntax is fragile and version-dependent.

    line 163

“Common” is measured: kept by at least 6 in 10 of the 78 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

obsidian-bases

Obsidian Bases (released late 2025) are YAML files with .base extension that produce live database-like views. They're under-documented; this skill gets the syntax right.

When to use

  • The user wants a dynamic view of notes by some property (dates, tags, status, project).
  • The user has a frontmatter convention (e.g., every project note has status: active|done) and wants a filtered table.
  • A wiki dashboard — wiki/meta/dashboard.base is a common pattern: tasks-by-status, recent saves, source list.

When NOT to use

  • The user wants a static list → just write a markdown file with a list.
  • The user wants chart visualizations → Bases don't render charts; suggest the Charts plugin or the canvas skill.

.base file format

filters:
  and:
    - 'file.path.startsWith("Projects/")'
    - 'status != "archived"'

properties:
  status:
    displayName: "Status"
  due:
    displayName: "Due Date"

views:
  - type: table
    name: "Active Projects"
    order:
      - file.name
      - status
      - due
    sort:
      - column: due
        direction: ASC
    columnSize:
      file.name: 280
      status: 100

  - type: cards
    name: "By Status"
    cardSize: medium
    grouping:
      by: status

Key concepts:

  • filters — boolean expression tree (and, or, not). Atoms are JS-ish expressions over file.* and frontmatter properties. Common atoms:
    • file.path.startsWith("X") / endsWith / contains
    • file.name == "X"
    • <frontmatter-key> == "value" (also !=, >, <, >=, <=, in, contains)
    • tags.contains("project")
    • file.cday (creation day), file.mday (modified day) — date math: file.mday > date("2026-01-01")
  • properties — declared columns the views can show. displayName overrides the raw frontmatter key.
  • views — one or more views over the same filtered set. Each has type (table, cards, list), name, optional order (column order), sort, grouping, columnSize, etc.

Steps

1. Clarify the schema

Before writing the base, you need:

  • Which folder/path scope (root? Projects/? wiki/?)
  • Which frontmatter properties the user uses
  • Which property values are meaningful (status enum? tag list?)
  • What views they want (table/cards/list, sorted by what?)

Ask 1-2 short questions if unclear. Don't write a base on assumptions — it's the kind of thing that's annoying to debug if the filter is wrong.

2. Verify properties exist

Sample a few notes from the target scope (mcp__obsidian-router__list_files then get_frontmatter on 3-5 of them) to confirm the frontmatter keys you're filtering on actually appear. If they don't, surface this — the base will return empty results.

3. Compose the YAML

Build the filter, properties, and views per the schema. Common patterns:

Task tracker (tasks.base):

filters:
  and:
    - 'tags.contains("task")'
    - 'status != "done"'
properties:
  due: { displayName: "Due" }
  priority: { displayName: "P" }
views:
  - type: table
    name: "Open Tasks"
    order: [file.name, priority, due]
    sort:
      - { column: priority, direction: ASC }
      - { column: due, direction: ASC }

Reading list (reading.base):

filters:
  and:
    - 'file.path.startsWith("Reading/")'
properties:
  status: { displayName: "Status" }
  rating: { displayName: "Rating" }
views:
  - type: cards
    name: "By Status"
    grouping: { by: status }
    cardSize: medium

Wiki dashboard (wiki/meta/dashboard.base):

filters:
  and:
    - 'file.path.startsWith("wiki/")'
    - 'type != "fold"'
properties:
  type: { displayName: "Type" }
  saved_at: { displayName: "Filed" }
views:
  - type: table
    name: "All Pages"
    order: [file.name, type, saved_at]
    sort: [{ column: saved_at, direction: DESC }]
  - type: cards
    name: "By Type"
    grouping: { by: type }

4. Write the file

mcp__obsidian-router__write_file({
  vault: <name>,
  path: "<path>.base",
  content: <yaml>,
  ifNew: true
})

If the path already exists: read it, propose a diff, ask before overwriting.

5. Tell the user where to see it

Bases render in the Obsidian UI when opened. The user must open the .base file in Obsidian to see the live view. Mention this — they might not realize it's not a markdown file.

Anti-patterns

  • Don't fabricate frontmatter properties the vault doesn't actually use. Verify first.
  • Don't write .base files at the vault root unless the user asked. Default to wiki/meta/ or a sensible domain folder.
  • Don't try to filter by free-text body content — Bases filter on properties (frontmatter + tags + file.*), not on body content.
  • Don't add a formula: field unless you're sure of the syntax — Obsidian Bases formula syntax is fragile and version-dependent. When in doubt, use sortable string properties.

Output format

✅ Created <path>.base with N filters, M properties, V views. Open it in Obsidian to see the live view. Schema preview:

<key fields>

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.