Download .skills/wiki-dashboard/SKILL.md from the publisher, or copy the path and open the repository. PlugMCP lists the skill and does not host the file.
Where does wiki-dashboard live?
The publisher keeps it at https://github.com/Ar9av/obsidian-wiki.
Which agents can use wiki-dashboard?
Claude, Cursor, and Codex can read a SKILL.md you add from the publisher's repository.
>
name: wiki-dashboard
description: >
Create dynamic, queryable Obsidian dashboard views using Bases or Dataview. Use for auto-updating tables, indexes, or structured views of vault content; not for ordinary question answering.
Wiki Dashboard — Dynamic Vault Views
Two tools available: Obsidian Bases (native, GUI-driven, no plugin) and Dataview (community plugin, SQL-like, more powerful). Check which the user has and prefer Bases unless they ask for Dataview or need GROUP BY / computed columns.
Before You Start
Writing profile: Before drafting or rewriting natural-language Markdown, read and apply the Writing Profile Resolution section in llm-wiki/SKILL.md. Framework schema, provenance, safety, and operation-specific requirements take precedence.
Apply WRITING.md preferences only to optional Markdown dashboard prose; syntax remains unchanged.
.base
Resolve config — follow the Config Resolution Protocol in llm-wiki/SKILL.md (inline @name override → walk up CWD for .env → global config → prompt setup). This gives OBSIDIAN_VAULT_PATH.
Read $OBSIDIAN_VAULT_PATH/index.md to understand what categories and pages exist.
Ask the user what they want to view if not specified — folder, tag, category, date range?
Ask if they have Dataview installed if you're unsure which tool to use.
Option A — Obsidian Bases (.base files)
Bases are YAML files that define live views over vault notes. Native to Obsidian 1.8+, no plugin needed.
Official canonical schema
Top-level keys:
filters: # Global filter applied to all views (expression strings under and/or/not)
formulas: # Named computed properties — referenced as formula.<name>
properties: # Display config per property — sets displayName for column headers
summaries: # Aggregation formulas (e.g. mean, sum)
views: # Array of view definitions (required)
Each item in views::
views:
- type: table # table | list | cards | map
name: "View Name" # display label
limit: 50 # optional max rows
order: # column display order (list of property/formula names)
- file.name
- note.updated
groupBy: # grouping — goes INSIDE the view, NOT at top level
property: note.tags
direction: ASC # ASC | DESC
filters: # view-specific filter (merges with global filters)
and:
- 'note.status != "done"'
summaries:
formula.myFormula: Average
Filter syntax — CRITICAL
Filters use expression strings, not typed objects. Always wrap in and:, or:, or not: — a bare list causes a "may only have one of and/or/not keys" parse error.
On Obsidian UI-generated format: When Obsidian's GUI writes or reformats a .base file it may output a simplified shorthand with top-level columns:, sort:, and view: keys instead of the canonical schema. That format also works — Obsidian accepts both. Manually authored files should use the canonical schema above.
Option B — Dataview (community plugin)
Dataview uses a SQL-like query language inside ```dataview ``` code blocks in any note. More powerful than Bases for computed columns, GROUP BY, and cross-folder queries.
Basic table — folder
```dataview
TABLE
tags AS "Tags",
summary AS "Summary",
file.mtime AS "Last Modified"
FROM "concepts"
SORT file.mtime DESC
```
Table with clickable links (TABLE WITHOUT ID)
```dataview
TABLE WITHOUT ID
file.link AS "Entity",
tags AS "Tags",
summary AS "Summary"
FROM "entities"
SORT file.name ASC
```
GROUP BY — use rows. prefix after grouping
After GROUP BY, individual file properties must be prefixed with rows. — otherwise the column is empty or errors.
```dataview
TABLE WITHOUT ID
rows.file.link AS "Concept",
rows.summary AS "Summary"
FROM "concepts"
GROUP BY tags[0] AS "Domain"
```
Stale pages — use file.mtime for date math
Avoid choice(updated, date(updated), file.mtime) — mixed date formats in updated frontmatter cause arithmetic errors. file.mtime is always a valid DateTime.
```dataview
TABLE WITHOUT ID
file.link AS "Page",
category AS "Type",
file.mtime AS "Last Modified",
(date(today) - file.mtime).days + " days" AS "Age"
FROM "concepts" OR "entities" OR "projects"
WHERE file.name != file.folder
WHERE (date(today) - file.mtime).days > 30
SORT (date(today) - file.mtime).days DESC
```
Multi-folder query
```dataview
TABLE
summary AS "Summary",
file.mtime AS "Last Modified"
FROM "projects"
WHERE file.name != file.folder
SORT file.mtime DESC
```
Dataview: Write queries directly into any .md note. A dedicated dashboard note at $OBSIDIAN_VAULT_PATH/_meta/dashboard.md works well for multi-section views.
No manifest or index update needed — dashboards are live queries, not static pages.
Common Dashboard Recipes
Dashboard
Best tool
What it shows
Content index
Bases or Dataview
All pages grouped by category, sorted by updated
Entity tracker
Bases (cards)
Entity pages as a visual card gallery
Concepts by domain
Dataview
Concepts grouped by first tag using GROUP BY
Ingestion log
Either
Pages sorted by created date
Stale content
Dataview
Pages not touched in 30+ days with day count
Project overview
Either
Project pages with last-sync date
Research tracker
Dataview
Synthesis pages tagged research
Quality Checklist
Bases: filters use expression strings under and:/or:/not:, never typed objects
Bases: groupBy goes inside the view definition — not as a top-level key
Bases: column headers set via properties: <name>: displayName: "...", not columns: [{title}]
Bases: formulas: used for computed columns, referenced as formula.<name> in order/properties
Dataview: GROUP BY queries use rows.property not bare property
Dataview: date arithmetic uses file.mtime, not choice(updated, ...)
File written to _meta/ with a descriptive slug
log.md updated
User told how to embed Bases (![[_meta/<name>.base]]) or open the dashboard note
QMD Refresh After Vault Writes
QMD is a search index, not the source of truth. If $QMD_WIKI_COLLECTION is empty or unset, skip this step. Run it only after this skill has written or rewritten vault markdown. If QMD refresh fails, do not roll back the vault changes; report the QMD status separately.
Use $QMD_CLI if set; otherwise use qmd.
${QMD_CLI:-qmd} update
If the output says vectors are needed or embeddings may be stale, run:
${QMD_CLI:-qmd} embed
Verify the collection with either:
${QMD_CLI:-qmd} ls "$QMD_WIKI_COLLECTION"
or, when a specific page path is known:
${QMD_CLI:-qmd} get "qmd://$QMD_WIKI_COLLECTION/<page>.md" -l 5
Record one of:
QMD refreshed: update + embed + verified
QMD refreshed: update only + verified
QMD skipped: QMD_WIKI_COLLECTION unset
QMD skipped: qmd CLI unavailable
QMD failed: <short error summary>
How do I install wiki-dashboard?
Download .skills/wiki-dashboard/SKILL.md from the publisher, or copy the path and open the repository. PlugMCP lists the skill and does not host the file.
Where does wiki-dashboard live?
The publisher keeps it at https://github.com/Ar9av/obsidian-wiki.
Which agents can use wiki-dashboard?
Claude, Cursor, and Codex can read a SKILL.md you add from the publisher's repository.