feat: v1.4.0 audit fixes, multi-agent compatibility, Bases dashboard
External audit flagged 8 actionable items against current best practices for Agent Skills, Claude Code hooks, Obsidian v1.9-v1.12, and JSON Canvas 1.0. This release addresses all of them and adds multi-agent compatibility files at zero cost to existing users. Tier 1, critical fixes: * wiki/meta/dashboard.base: NEW Obsidian Bases dashboard (native, no plugin needed). Replaces Dataview as the primary dashboard. Six views: Recent Activity, Seed Pages, Entities Missing Sources, Open Questions, Comparisons, Sources. * wiki/meta/dashboard.md: now embeds dashboard.base. Legacy Dataview queries retained as optional fallback for users on Obsidian < 1.9.10. * README.md and skills/wiki/references/plugins.md: Plugins section reorganized to recommend Bases (core, no install) primary, Dataview optional/legacy. * skills/canvas/references/canvas-spec.md: added missing JSON Canvas 1.0 fields. Group nodes now document background and backgroundStyle (cover, ratio, repeat). Edges document fromEnd (default 'none') and toEnd (default 'arrow') asymmetric defaults. Hex ID convention noted alongside descriptive ID alternative. * .gitignore: track wiki/meta/dashboard.base explicitly. Tier 2, important improvements: * hooks/hooks.json: SessionStart now uses both command type ([ -f wiki/hot.md ] && cat ...) and prompt type. Command type is the canonical safety check that works in non-vault sessions without erroring. Matcher: startup|resume. * hooks/hooks.json: NEW PostCompact hook re-injects hot cache after context compaction (hook-injected context does not survive compaction; CLAUDE.md does). * hooks/hooks.json: PostToolUse auto-commit now guarded by [ -d .git ]. * hooks/README.md: NEW documentation including known plugin-hooks STDOUT bug (anthropics/claude-code#10875) and workarounds. * skills/wiki/references/mcp-setup.md: added Option D (Obsidian CLI) for v1.12+. Added warning callout above NODE_TLS_REJECT_UNAUTHORIZED line explaining process-wide TLS bypass and recommending Option D as the secure alternative. * skills/wiki-ingest/SKILL.md: documented [!contradiction] custom callout CSS dependency on vault-colors.css snippet. * skills/wiki/references/css-snippets.md: full documentation of all four custom callouts (contradiction, gap, key-insight, stale) with built-in fallback equivalents. Tier 3, multi-agent compatibility (low complexity, high reach): * AGENTS.md: Codex CLI / OpenCode bootstrap. * GEMINI.md: Gemini CLI / Antigravity bootstrap. * .cursor/rules/claude-obsidian.mdc: Cursor always-on rules. * .windsurf/rules/claude-obsidian.md: Windsurf Cascade rules. * .github/copilot-instructions.md: GitHub Copilot conventions. * bin/setup-multi-agent.sh: idempotent symlink installer for Codex, OpenCode, Gemini, Cursor, Windsurf. Wires up the skills/ directory in each agent's expected location. Style cleanup: scrubbed all em dashes from every skill, hook, doc, and bootstrap file (249 total replacements across 26 files). Skills now use periods, commas, and colons throughout for cleaner natural prose. Version: 1.3.0 to 1.4.0 (aligns plugin.json with GitHub release tag format). Already resolved in v1.1 (no action needed): * defuddle, obsidian-bases, obsidian-markdown skills shipped * URL ingestion, vision ingestion, delta tracking docs * Multi-depth wiki-query (Quick / Standard / Deep) * PostToolUse auto-commit hook * allowed-tools field removed from all SKILL.md files * All templates already use plural tag/alias forms * Custom callouts CSS already in vault-colors.css Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
---
|
||||
name: obsidian-bases
|
||||
description: "Create and edit Obsidian Bases (.base files) — Obsidian's native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Triggers on: create a base, add a base file, obsidian bases, base view, filter notes, formula, database view, dynamic table, task tracker base, reading list base."
|
||||
description: "Create and edit Obsidian Bases (.base files): Obsidian's native database layer for dynamic tables, card views, list views, filters, formulas, and summaries over vault notes. Triggers on: create a base, add a base file, obsidian bases, base view, filter notes, formula, database view, dynamic table, task tracker base, reading list base."
|
||||
---
|
||||
|
||||
# obsidian-bases — Obsidian's Database Layer
|
||||
# obsidian-bases: Obsidian's Database Layer
|
||||
|
||||
Obsidian Bases (launched 2025) turns vault notes into queryable, dynamic views — tables, cards, lists, maps — defined in `.base` files. No plugin required; it is a core Obsidian feature.
|
||||
Obsidian Bases (launched 2025) turns vault notes into queryable, dynamic views. Tables, cards, lists, maps. Defined in `.base` files. No plugin required; it is a core Obsidian feature.
|
||||
|
||||
**Authoritative reference**: `kepano/obsidian-skills` publishes the canonical `obsidian-bases` skill with full syntax and function reference. Use this skill alongside that one. Official docs: https://help.obsidian.md/bases/syntax
|
||||
|
||||
@@ -16,7 +16,7 @@ Obsidian Bases (launched 2025) turns vault notes into queryable, dynamic views
|
||||
`.base` files contain valid YAML. The root keys are `filters`, `formulas`, `properties`, `summaries`, and `views`.
|
||||
|
||||
```yaml
|
||||
# Global filters — apply to ALL views
|
||||
# Global filters: apply to ALL views
|
||||
filters:
|
||||
and:
|
||||
- file.hasTag("wiki")
|
||||
@@ -56,19 +56,19 @@ Filters select which notes appear. Applied globally or per-view.
|
||||
# Single string filter
|
||||
filters: 'status == "current"'
|
||||
|
||||
# AND — all must be true
|
||||
# AND: all must be true
|
||||
filters:
|
||||
and:
|
||||
- 'status != "archived"'
|
||||
- file.hasTag("wiki")
|
||||
|
||||
# OR — any can be true
|
||||
# OR: any can be true
|
||||
filters:
|
||||
or:
|
||||
- file.hasTag("concept")
|
||||
- file.hasTag("entity")
|
||||
|
||||
# NOT — exclude matches
|
||||
# NOT: exclude matches
|
||||
filters:
|
||||
not:
|
||||
- file.inFolder("wiki/meta")
|
||||
@@ -99,9 +99,9 @@ filters:
|
||||
## Properties
|
||||
|
||||
Three types:
|
||||
- **Note properties** — from frontmatter: `status`, `type`, `updated`
|
||||
- **File properties** — metadata: `file.name`, `file.mtime`, `file.size`, `file.ctime`, `file.tags`, `file.folder`
|
||||
- **Formula properties** — computed: `formula.age_days`
|
||||
- **Note properties**: from frontmatter: `status`, `type`, `updated`
|
||||
- **File properties**: metadata: `file.name`, `file.mtime`, `file.size`, `file.ctime`, `file.tags`, `file.folder`
|
||||
- **Formula properties**: computed: `formula.age_days`
|
||||
|
||||
---
|
||||
|
||||
@@ -124,12 +124,12 @@ formulas:
|
||||
word_est: '(file.size / 5).round(0)'
|
||||
```
|
||||
|
||||
**Key rule**: Subtracting two dates returns a `Duration` — not a number. Always access `.days` first:
|
||||
**Key rule**: Subtracting two dates returns a `Duration`. Not a number. Always access `.days` first:
|
||||
```yaml
|
||||
# CORRECT
|
||||
age: '(now() - file.ctime).days'
|
||||
|
||||
# WRONG — crashes
|
||||
# WRONG: crashes
|
||||
age: '(now() - file.ctime).round(0)'
|
||||
```
|
||||
|
||||
@@ -270,9 +270,9 @@ views:
|
||||
## Where to Save
|
||||
|
||||
Store `.base` files in `wiki/meta/` for vault dashboards:
|
||||
- `wiki/meta/dashboard.base` — main content view
|
||||
- `wiki/meta/entities.base` — entity tracker
|
||||
- `wiki/meta/sources.base` — ingestion log
|
||||
- `wiki/meta/dashboard.base`: main content view
|
||||
- `wiki/meta/entities.base`: entity tracker
|
||||
- `wiki/meta/sources.base`: ingestion log
|
||||
|
||||
---
|
||||
|
||||
@@ -286,7 +286,7 @@ Store `.base` files in `wiki/meta/` for vault dashboards:
|
||||
|
||||
## What Not to Do
|
||||
|
||||
- Do not use `from:` or `where:` — those are Dataview syntax, not Obsidian Bases
|
||||
- Do not use `sort:` at the root level — sorting is per-view via `order:` and `groupBy:`
|
||||
- Do not put `.base` files outside the vault — they only render inside Obsidian
|
||||
- Do not use `from:` or `where:`: those are Dataview syntax, not Obsidian Bases
|
||||
- Do not use `sort:` at the root level: sorting is per-view via `order:` and `groupBy:`
|
||||
- Do not put `.base` files outside the vault: they only render inside Obsidian
|
||||
- Do not reference `formula.X` in `order:` without defining `X` in `formulas:`
|
||||
|
||||
Reference in New Issue
Block a user