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>
231 lines
5.5 KiB
Markdown
231 lines
5.5 KiB
Markdown
---
|
|
name: obsidian-markdown
|
|
description: "Write correct Obsidian Flavored Markdown: wikilinks, embeds, callouts, properties, tags, highlights, math, and canvas syntax. Reference this when creating or editing any wiki page. Triggers on: write obsidian note, obsidian syntax, wikilink, callout, embed, obsidian markdown."
|
|
---
|
|
|
|
# obsidian-markdown: Obsidian Flavored Markdown
|
|
|
|
Reference this skill when writing any wiki page. Obsidian extends standard Markdown with wikilinks, embeds, callouts, and properties. Getting syntax wrong causes broken links, invisible callouts, or malformed frontmatter.
|
|
|
|
**Cross-reference**: `kepano/obsidian-skills` publishes the authoritative cross-platform version of this skill at [github.com/kepano/obsidian-skills](https://github.com/kepano/obsidian-skills). If installed, that skill is the canonical reference. Use it alongside this one.
|
|
|
|
---
|
|
|
|
## Wikilinks
|
|
|
|
Internal links use double brackets. The filename without extension.
|
|
|
|
| Syntax | What it does |
|
|
|---|---|
|
|
| `[[Note Name]]` | Basic link |
|
|
| `[[Note Name\|Display Text]]` | Aliased link (shows "Display Text") |
|
|
| `[[Note Name#Heading]]` | Link to a specific heading |
|
|
| `[[Note Name#^block-id]]` | Link to a specific block |
|
|
|
|
Rules:
|
|
- Case-sensitive on some systems. Match the exact filename.
|
|
- No path needed: Obsidian resolves by filename uniqueness.
|
|
- If two files have the same name, use `[[Folder/Note Name]]` to disambiguate.
|
|
|
|
---
|
|
|
|
## Embeds
|
|
|
|
Embeds use `!` before the wikilink. They display the content inline.
|
|
|
|
| Syntax | What it does |
|
|
|---|---|
|
|
| `![[Note Name]]` | Embed a full note |
|
|
| `![[Note Name#Heading]]` | Embed a section |
|
|
| `![[image.png]]` | Embed an image |
|
|
| `![[image.png\|300]]` | Embed image with width 300px |
|
|
| `![[document.pdf]]` | Embed a PDF (Obsidian renders natively) |
|
|
| `![[audio.mp3]]` | Embed audio |
|
|
|
|
---
|
|
|
|
## Callouts
|
|
|
|
Callouts are blockquotes with a type keyword. They render as styled alert boxes.
|
|
|
|
```markdown
|
|
> [!note]
|
|
> Default informational callout.
|
|
|
|
> [!note] Custom Title
|
|
> Callout with a custom title.
|
|
|
|
> [!note]- Collapsible (closed by default)
|
|
> Click to expand.
|
|
|
|
> [!note]+ Collapsible (open by default)
|
|
> Click to collapse.
|
|
```
|
|
|
|
### All callout types
|
|
|
|
| Type | Aliases | Use for |
|
|
|------|---------|---------|
|
|
| `note` |: | General notes |
|
|
| `abstract` | `summary`, `tldr` | Summaries |
|
|
| `info` |: | Information |
|
|
| `todo` |: | Action items |
|
|
| `tip` | `hint`, `important` | Tips and highlights |
|
|
| `success` | `check`, `done` | Positive outcomes |
|
|
| `question` | `help`, `faq` | Open questions |
|
|
| `warning` | `caution`, `attention` | Warnings |
|
|
| `failure` | `fail`, `missing` | Errors or failures |
|
|
| `danger` | `error` | Critical issues |
|
|
| `bug` |: | Known bugs |
|
|
| `example` |: | Examples |
|
|
| `quote` | `cite` | Quotations |
|
|
| `contradiction` |: | Conflicting information (wiki convention) |
|
|
|
|
---
|
|
|
|
## Properties (Frontmatter)
|
|
|
|
Obsidian renders YAML frontmatter as a Properties panel. Rules:
|
|
|
|
```yaml
|
|
---
|
|
type: concept # plain string
|
|
title: "Note Title" # quoted if it contains special chars
|
|
created: 2026-04-08 # date as YYYY-MM-DD (not ISO datetime)
|
|
updated: 2026-04-08
|
|
tags:
|
|
- tag-one # list items use - format
|
|
- tag-two
|
|
status: developing
|
|
related:
|
|
- "[[Other Note]]" # wikilinks must be quoted in YAML
|
|
sources:
|
|
- "[[source-page]]"
|
|
---
|
|
```
|
|
|
|
Rules:
|
|
- Flat YAML only. Never nest objects.
|
|
- Dates as `YYYY-MM-DD`, not `2026-04-08T00:00:00`.
|
|
- Lists as `- item`, not inline `[a, b, c]`.
|
|
- Wikilinks in YAML must be quoted: `"[[Page]]"`.
|
|
- `tags` field: Obsidian reads this as the tag list, searchable in vault.
|
|
|
|
---
|
|
|
|
## Tags
|
|
|
|
Two valid forms:
|
|
|
|
```markdown
|
|
#tag-name : inline tag anywhere in the body
|
|
#parent/child-tag : nested tag (shows hierarchy in tag pane)
|
|
```
|
|
|
|
In frontmatter:
|
|
```yaml
|
|
tags:
|
|
- research
|
|
- ai/obsidian
|
|
```
|
|
|
|
Do not use `#` inside frontmatter tag lists. Just the tag name.
|
|
|
|
---
|
|
|
|
## Text Formatting
|
|
|
|
Standard Markdown plus Obsidian extensions:
|
|
|
|
| Syntax | Result |
|
|
|---|---|
|
|
| `**bold**` | Bold |
|
|
| `*italic*` | Italic |
|
|
| `~~strikethrough~~` | Strikethrough |
|
|
| `==highlight==` | Highlighted text (yellow in Obsidian) |
|
|
| `` `inline code` `` | Inline code |
|
|
|
|
---
|
|
|
|
## Math
|
|
|
|
Obsidian uses MathJax/KaTeX:
|
|
|
|
Inline math:
|
|
```markdown
|
|
$E = mc^2$
|
|
```
|
|
|
|
Block math:
|
|
```markdown
|
|
$$
|
|
\int_0^\infty e^{-x} dx = 1
|
|
$$
|
|
```
|
|
|
|
---
|
|
|
|
## Code Blocks
|
|
|
|
Standard fenced code blocks. Obsidian highlights all common languages:
|
|
|
|
````markdown
|
|
```python
|
|
def hello():
|
|
return "world"
|
|
```
|
|
````
|
|
|
|
---
|
|
|
|
## Tables
|
|
|
|
Standard Markdown tables:
|
|
|
|
```markdown
|
|
| Column A | Column B | Column C |
|
|
|----------|----------|----------|
|
|
| Value | Value | Value |
|
|
| Value | Value | Value |
|
|
```
|
|
|
|
Obsidian renders tables natively. No plugin needed.
|
|
|
|
---
|
|
|
|
## Mermaid Diagrams
|
|
|
|
Obsidian renders Mermaid natively:
|
|
|
|
````markdown
|
|
```mermaid
|
|
graph TD
|
|
A[Start] --> B{Decision}
|
|
B -->|Yes| C[End]
|
|
B -->|No| D[Loop]
|
|
D --> A
|
|
```
|
|
````
|
|
|
|
Supported: `graph`, `sequenceDiagram`, `gantt`, `classDiagram`, `pie`, `flowchart`.
|
|
|
|
---
|
|
|
|
## Footnotes
|
|
|
|
```markdown
|
|
This sentence has a footnote.[^1]
|
|
|
|
[^1]: The footnote text goes here.
|
|
```
|
|
|
|
---
|
|
|
|
## What NOT to Do
|
|
|
|
- Do not use `[link text](path/to/note.md)` for internal links: use `[[Note Name]]` instead.
|
|
- Do not use HTML inside callouts: stick to Markdown.
|
|
- Do not use `##` inside a callout body: headings don't render inside callouts.
|
|
- Do not write `tags: [a, b, c]` inline in frontmatter: Obsidian prefers the list format.
|
|
- Do not write ISO datetimes in frontmatter (`2026-04-08T00:00:00Z`): use `2026-04-08`.
|