ワンクリックで
obsidian-bases
Create and edit .base database views, filters, and formulas.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Create and edit .base database views, filters, and formulas.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Plan safe harness customization only.
Orient static defending-code review work.
Build a static security threat model.
Draft inert patches for verified findings.
Run static repo-read vulnerability review.
Triages static security findings.
| name | obsidian-bases |
| description | Create and edit .base database views, filters, and formulas. |
| platforms | ["linux","macos","windows"] |
| version | 1.1.0 |
| author | Harish Kukreja (counterposition), Hermes Agent (adapted from Steph Ango's official Obsidian skills) |
| license | MIT |
| metadata | {"hermes":{"tags":["obsidian","note-taking","yaml","bases","database-views"],"related_skills":["obsidian","obsidian-markdown","obsidian-cli","json-canvas"]}} |
Create and edit Obsidian Bases: YAML .base files that render database-like
views (tables, cards, lists, maps) over the notes in a vault, with filters,
computed formula properties, and summaries. Adapted from Steph Ango's
MIT-licensed official Obsidian skills.
.base filesRoute elsewhere for broad vault work (obsidian), regular note authoring
(obsidian-markdown), .canvas files (json-canvas), or driving the
running app (obsidian-cli).
None — .base files are plain YAML and no running Obsidian app is
required (only Obsidian can render the views). Resolve the vault path
first (see the obsidian skill).
Read .base files with read_file, create them with write_file, and
make focused edits with patch. Find existing bases with search_files
using pattern: "*.base" and target: "files".
# Global filters apply to ALL views in the base.
# A filter is either a single expression string, or an object with
# exactly ONE key (and / or / not) whose list items are themselves filters.
filters:
and:
- 'status == "active"'
- not:
- 'file.hasTag("archived")'
# Formula properties computed for every note, usable in all views
formulas:
formula_name: 'expression'
# Display names and settings for properties
properties:
property_name:
displayName: "Display Name"
formula.formula_name:
displayName: "Formula Display Name"
# Custom summary formulas
summaries:
custom_summary_name: 'values.mean().round(3)'
# One or more views
views:
- type: table # table | cards | list | map
name: "View Name"
limit: 10 # optional
groupBy: # optional
property: property_name
direction: ASC # ASC | DESC
filters: # view-specific, same rules as global filters
and:
- 'status == "active"'
order: # properties to display, in order
- file.name
- property_name
- formula.formula_name
summaries: # map properties to summary formulas
property_name: Average
Expressions compare properties with ==, !=, >, <, >=, <= and
combine with &&, ||, !. Common predicates: file.hasTag("x"),
file.hasLink("Note"), file.inFolder("Folder"). Nest by making a list
item an and/or/not object.
note.author or just authorfile.name, file.basename,
file.path, file.folder, file.ext, file.size, file.ctime,
file.mtime, file.tags, file.links, file.backlinks, file.embedsformula.my_formulathis refers to the base file itself in the main content area, to the
embedding file when embedded, and to the active file in the sidebar.
formulas:
total: "price * quantity"
status_icon: 'if(done, "✅", "⏳")'
created: 'file.ctime.format("YYYY-MM-DD")'
days_old: '((now() - file.ctime) / 86400000).round(0)'
days_until_due: 'if(due_date, ((date(due_date) - today()) / 86400000).round(0), "")'
Key functions: date(), now(), today(), if(condition, then, else?),
duration(), file(), link(). The function reference for all types
(Date, String, Number, List, File, Link, Object, RegExp) is in
FUNCTIONS_REFERENCE.md.
Subtracting two dates yields the difference in milliseconds — divide by
86400000 to get days (see days_old above). Add or subtract durations with
strings: now() + "1 day", today() + "7d"; duration() is only needed
for arithmetic on parsed durations themselves.
View types: table, cards, list, and map (map needs lat/long
properties and the Maps community plugin). Built-in summary formulas
include Average, Min, Max, Sum, Median, Stddev, Earliest,
Latest, Checked, Empty, Filled, Unique. Worked examples (task
tracker, reading list, daily-notes index) are in
EXAMPLES.md.
![[MyBase.base]] Embed base in a note
![[MyBase.base#View Name]] Embed a specific view
.base file in the vault with write_file.filters (tag, folder, property, or date).formulas as needed.views, each with order listing the properties
to display; add groupBy, view filters, and summaries as needed.obsidian-cli skill can do this).'if(done, "Yes", "No")'. Quote any YAML string containing :, #,
[, {, or other special characters.and, or, or not. Do not
put several of them at the same level of the same object; nest instead.'((date(due) - today()) / 86400000).round(0)'.if(): 'if(due, ((date(due) - today()) / 86400000).round(0), "")'.formula.X used in order,
properties, or summaries must be defined under formulas — unknown
references fail silently in Obsidian.Parse the file to confirm it is valid YAML (via terminal:
python -c 'import yaml, sys; yaml.safe_load(open(sys.argv[1]))' file.base).
Then re-read it with read_file and check: each filter object has exactly
one of and/or/not; every formula.X reference is defined; every view
has a type (and a distinct name when there are multiple views). Finally,
open it in Obsidian if available — a YAML error banner means a quoting
problem (see Pitfalls).