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.
How this skill is triggered — by the user, by Claude, or both
Slash command
/forge-obsidian:ObsidianBaseThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
> **Preferred:** Use `obsidian base:query` (see the ObsidianCLI skill) when Obsidian is running. This skill documents the standalone `obsidian-base` binary for offline/fallback use.
Preferred: Use
obsidian base:query(see the ObsidianCLI skill) when 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":"Library/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)Library/Books/The Pragmatic Programmer.md
Library/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]] viewsnpx claudepluginhub n4m3z/forge-obsidianCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.