From forge-obsidian
Resolve Obsidian Base files (.base) to see what the user sees in Obsidian. USE WHEN the user asks about Base views, queries vault notes, wants to see what a .base file shows, or needs filtered/sorted vault data. Wraps the obsidian-base CLI.
npx claudepluginhub n4m3z/forge-obsidianThis skill uses the workspace's default tool permissions.
> **Preferred:** Use `obsidian base:query` via `/ObsidianCLI` when Obsidian is running. This skill documents the standalone `obsidian-base` binary for offline/fallback use.
Creates and edits Obsidian .base files for database-like views of notes using global/view filters, formulas, properties, summaries, and table/card/list/map views.
Create and edit Obsidian Bases (.base YAML files) with views, filters, formulas, properties, and summaries for dynamic note organization in Obsidian vaults.
Creates and edits Obsidian Bases (.base files) with table, card, list, map views, filters, formulas, properties, and summaries. Validates YAML and tests rendering for note database views.
Share bugs, ideas, or general feedback.
Preferred: Use
obsidian base:queryvia/ObsidianCLIwhen Obsidian is running. This skill documents the standaloneobsidian-basebinary for offline/fallback use.
Resolve .base files against the vault — the same declarative queries [[Obsidian]] renders internally. Returns matching notes as [[JSONL]] or file paths, enabling [[Claude]] to see exactly what the user sees in their [[Obsidian Base]] views.
.base file is referenced in conversation and you want to resolve itBinary: Modules/forge-obsidian/bin/obsidian-base
The binary auto-discovers the vault root by walking up from the .base file looking for .obsidian/. It reads the [[YAML]] query, walks all .md files, evaluates filters against [[frontmatter]] + file metadata, applies sorts, and emits results.
| Dependency | Required | Purpose |
|---|---|---|
[[Rust]] (cargo) | Yes | Builds the obsidian-base binary on first run (lazy compilation) |
| [[jq]] | No | Post-filter [[JSONL]] output (optional) |
The binary is self-contained after compilation — no runtime dependencies beyond the standard library.
# Default: JSONL output (one JSON object per matched note, per view)
Modules/forge-obsidian/bin/obsidian-base "/path/to/File.base"
# Resolve only a specific view
Modules/forge-obsidian/bin/obsidian-base "/path/to/File.base" --view "Table"
# File paths only (one per line) — for piping to other tools
Modules/forge-obsidian/bin/obsidian-base "/path/to/File.base" --paths
# Count matches
Modules/forge-obsidian/bin/obsidian-base "/path/to/File.base" --paths | wc -l
# Filter JSONL with jq
Modules/forge-obsidian/bin/obsidian-base "/path/to/File.base" | jq 'select(.tags | contains(["type/item"]))'
| User Says | Flag | Effect |
|---|---|---|
| "show me what this Base has" | (default) | [[JSONL]] output with all view columns |
| "which view", "only the Table view" | --view "Name" | Resolve a single named view |
| "just the files", "list the paths" | --paths | One file path per line |
| "how many notes match" | --paths | wc -l | Count of matching notes |
| "filter by tag/property" | pipe to [[jq]] | Post-filter [[JSONL]] with [[jq]] expressions |
Each line is a self-contained [[JSON]] object:
{"view":"Table","file":"Resources/Books/The Pragmatic Programmer.md","name":"The Pragmatic Programmer","tags":["type/item/book"],"item.read":true}
Fields include:
view — which view matched this notefile — vault-relative pathname — note name (stem, no extension)order list ([[frontmatter]] properties, file metadata)--paths)Resources/Books/The Pragmatic Programmer.md
Resources/Books/Designing Data-Intensive Applications.md
Base files live alongside the content they query. Common locations:
# Find all .base files in a vault
find /path/to/vault -name "*.base" -type f
The .base filter [[DSL]] supports:
| Category | Examples |
|---|---|
| File properties | file.name, file.path, file.ext, file.folder, file.tags, file.links |
| Frontmatter | property.key or bare key |
| Context | this.file.name, this.file.path, this.file.folder |
| String methods | .startsWith(), .endsWith(), .contains(), .toString(), .slice(n,m) |
| Functions | contains(collection, value), file.hasTag("tag"), file.hasLink("link") |
| Operators | !=, ! (prefix negation) |
| Combinators | and: […], or: […] ([[YAML]]-level boolean logic) |
this context — this.file.* refers to the note embedding the [[Base]], not the .base file itself. When resolving template [[Bases]] (e.g., Daily.base) from CLI, this references the .base file's location. Pass a note context mentally when interpreting results from template Bases..unique(), .filter(), .asFile() are not yet supported..base file (absolute or project-relative)head, or wc -l for summaries.base files without the user's explicit request — they define the user's [[Obsidian]] views