mcpField
O
obsidian-bases

obsidian-bases

github.com/sickn33Productivity48.7k56 installsUpdated 1d ago
Repository

About obsidian-bases

obsidian-bases is a skill for creating and editing Obsidian `.base` files. It is intended for users building database-like note views with filters, formulas, summaries, and card or table layouts.

Key features

  1. 01Create and edit `.base` files
  2. 02Configure filters and formulas
  3. 03Build summary views
  4. 04Display cards or tables
  5. 05Validate configurations in Obsidian

Use cases

  1. 01Creating a task-tracking view
  2. 02Organizing a reading list
  3. 03Indexing daily notes
  4. 04Checking formulas and filters in a Base

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/sickn33/agentic-awesome-skills --skill obsidian-bases

After installing, type/obsidian-basesin Claude Code to confirm it loaded.

Bundled filesreferences/FUNCTIONS_REFERENCE.mdreferences/detailed-guide.md

Details

From the project README

Obsidian Bases Skill

Detailed Guide

Read the detailed guide before executing this skill. It retains the complete procedure and reference material. Treat its safety, prerequisites, and validation requirements as mandatory. For focused work, load the relevant sections; for end-to-end work, read the guide completely.

When to Use

  • Use when creating or editing .base files in Obsidian.
  • Use for database-like note views with filters, formulas, summaries, or cards/tables.
  • Use when the user asks about Obsidian Bases specifically.

Complete Examples

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

formulas:
  days_until_due: 'if(due, (date(due) - today()).days, "")'
  is_overdue: 'if(due, date(due) < today() && status != "done", false)'
  priority_label: 'if(priority == 1, "🔴 High", if(priority == 2, "🟡 Medium", "🟢 Low"))'

properties:
  status:
    displayName: Status
  formula.days_until_due:
    displayName: "Days Until Due"
  formula.priority_label:
    displayName: Priority

views:
  - type: table
    name: "Active Tasks"
    filters:
      and:
        - 'status != "done"'
    order:
      - file.name
      - status
      - formula.priority_label
      - due
      - formula.days_until_due
    groupBy:
      property: status
      direction: ASC
    summaries:
      formula.days_until_due: Average

  - type: table
    name: "Completed"
    filters:
      and:
        - 'status == "done"'
    order:
      - file.name
      - completed_date
Reading List Base
filters:
  or:
    - file.hasTag("book")
    - file.hasTag("article")

formulas:
  reading_time: 'if(pages, (pages * 2).toString() + " min", "")'
  status_icon: 'if(status == "reading", "📖", if(status == "done", "✅", "📚"))'
  year_read: 'if(finished_date, date(finished_date).year, "")'

properties:
  author:
    displayName: Author
  formula.status_icon:
    displayName: ""
  formula.reading_time:
    displayName: "Est. Time"

views:
  - type: cards
    name: "Library"
    order:
      - cover
      - file.name
      - author
      - formula.status_icon
    filters:
      not:
        - 'status == "dropped"'

  - type: table
    name: "Reading List"
    filters:
      and:
        - 'status == "to-read"'
    order:
      - file.name
      - author
      - pages
      - formula.reading_time
Daily Notes Index
filters:
  and:
    - file.inFolder("Daily Notes")
    - '/^\d{4}-\d{2}-\d{2}$/.matches(file.basename)'

formulas:
  word_estimate: '(file.size / 5).round(0)'
  day_of_week: 'date(file.basename).format("dddd")'

properties:
  formula.day_of_week:
    displayName: "Day"
  formula.word_estimate:
    displayName: "~Words"

views:
  - type: table
    name: "Recent Notes"
    limit: 30
    order:
      - file.name
      - formula.day_of_week
      - formula.word_estimate
      - file.mtime

Limitations

  • Use this skill only when the task clearly matches the scope described above.
  • Do not treat the output as a substitute for environment-specific validation, testing, or expert review.
  • Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.

Scope and data limitations

Use a copy or preview before replacing an existing Base. Global filters select data for a view; they are not access controls, and a view limit is not a retention or privacy boundary. YAML parsing alone does not validate the Obsidian expression language or plugin availability. Match view types/functions to the installed version and verify representative missing, zero, malformed and timezone-sensitive dates in Obsidian. The reading-time and byte-based word estimates are rough display heuristics, not measured counts. Escape untrusted strings before rendering HTML and avoid remote images/URLs for private notes without approval. A Base configures presentation and formulas; it does not enforce required fields or database constraints.

Comments

Markdown supported