원클릭으로
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).