Help us improve
Share bugs, ideas, or general feedback.
From claude-obsidian
Files conversation insights into an Obsidian wiki vault as structured notes. Detects note type, generates frontmatter, and updates index/log/hot cache.
npx claudepluginhub agricidaniel/claude-obsidian --plugin claude-obsidianHow this skill is triggered — by the user, by Claude, or both
Slash command
/claude-obsidian:saveThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Good answers and insights shouldn't disappear into chat history. This skill takes what was just discussed and files it as a permanent wiki page.
Sets up and maintains a persistent Obsidian wiki vault as composable knowledge base. Scaffolds structure, manages cross-references, and provides a hot cache for cross-session context.
Loads Obsidian vault notes as conversational context when users request personal notes via phrases like 'check my notes about'. Scans MOCs, retrieves linked notes, limits to 15k chars.
Manages Obsidian vaults: search, create, edit, move Markdown notes; handle YAML frontmatter, wikilinks, backlinks, daily notes, Zettelkasten setup, and sync via obsidian-cli.
Share bugs, ideas, or general feedback.
Good answers and insights shouldn't disappear into chat history. This skill takes what was just discussed and files it as a permanent wiki page.
The wiki compounds. Save often.
The session-note write itself follows the standard transport policy. Read .vault-meta/transport.json (auto-created by bash scripts/detect-transport.sh):
obsidian-cli write "$VAULT" "$NOTE" < session.md; see skills/wiki-cli/SKILL.mdmcp__obsidian-vault__write_noteWrite tool with absolute pathFull decision tree: wiki/references/transport-fallback.md. Index/log/hot updates use the same transport.
Before creating the session note, consult the vault's methodology mode via python3 scripts/wiki-mode.py route session "<topic-summary>". The router returns the vault-relative path:
wiki/sessions/<date>-<topic>.md (v1.7 default)wiki/notes/<date>-<topic>.md + update the relevant session/journal MOCwiki/projects/inbox/<date>-<topic>.md (user reroutes to specific projects)wiki/<ID>-session-<topic>.md (timestamped ID becomes the filename prefix)If .vault-meta/mode.json is absent, the router returns mode=generic paths. Important global rule: per global CLAUDE.md /save convention, sessions for cross-project work should still file to ~/Documents/Obsidian Vault/sessions/ rather than the project's wiki. The mode router applies when filing to the project's own wiki/, not when filing to the global personal vault.
Session-note writes MUST be preceded by wiki-lock acquire:
NOTE_PATH="wiki/questions/<slug>.md" # or wiki/concepts/, wiki/meta/, etc.
bash scripts/wiki-lock.sh acquire "$NOTE_PATH" || {
echo "skipped: $NOTE_PATH currently locked by another writer"; exit 0
}
# … write the note via §Transport-selected method …
bash scripts/wiki-lock.sh release "$NOTE_PATH"
For multi-file saves (e.g., session note + index update + log append), acquire each lock in sorted-path order to avoid deadlocks. Index/log/hot updates lock just like content pages.
See skills/wiki-ingest/SKILL.md §Concurrency for the full lock semantics.
Determine the best type from the conversation content:
| Type | Folder | Use when |
|---|---|---|
| synthesis | wiki/questions/ | Multi-step analysis, comparison, or answer to a specific question |
| concept | wiki/concepts/ | Explaining or defining an idea, pattern, or framework |
| source | wiki/sources/ | Summary of external material discussed in the session |
| decision | wiki/meta/ | Architectural, project, or strategic decision that was made |
| session | wiki/meta/ | Full session summary: captures everything discussed |
If the user specifies a type, use that. If not, pick the best fit based on the content. When in doubt, use synthesis.
Step 0: Decide the destination root. Check in order:
~/.claude/CLAUDE.md /save rule. If either declares a personal-vault destination (e.g., ~/Documents/Obsidian Vault/), that is the destination ROOT. The Note Type table below describes paths relative to whichever root is active. Append the new note to <root>/log/ingest-log.md at the top, in the format that file already uses.wiki/ folder.The mode router (python3 scripts/wiki-mode.py route session "<topic>") applies when filing into the project's own wiki/. When filing into a personal-vault root, use the canonical folders documented in that vault's CLAUDE.md (commonly sessions/, concepts/, sources/) — the mode router is NOT consulted for personal-vault writes by default. Filename sanitization (slug + safe_name) still applies regardless of root: strip path separators, NUL bytes, control chars, leading dots/hyphens.
Then continue the workflow:
<destination-root>/<chosen-folder>/<title>.md (per Step 0). Full frontmatter. If a note with the same path already exists, ASK before overwriting.related in frontmatter.wiki/index.md. Add the new entry at the top of the relevant section.wiki/log.md. New entry at the TOP:
## [YYYY-MM-DD] save | Note Title
- Type: [note type]
- Location: wiki/[folder]/Note Title.md
- From: conversation on [brief topic description]
wiki/hot.md to reflect the new addition.---
type: <synthesis|concept|source|decision|session>
title: "Note Title"
created: YYYY-MM-DD
updated: YYYY-MM-DD
tags:
- <relevant-tag>
status: developing
related:
- "[[Any Wiki Page Mentioned]]"
sources:
- "[[.raw/source-if-applicable.md]]"
---
For question type, add:
question: "The original query as asked."
answer_quality: solid
For decision type, add:
decision_date: YYYY-MM-DD
status: active
(Source: [[Page]]).Save:
Skip:
If it's already in the wiki, update the existing page instead of creating a duplicate.
When working on this skill, apply the 10-principle loop. See skills/think/SKILL.md for the canonical framework.
| # | Principle | Application here |
|---|---|---|
| 1 | OBSERVE (ext) | Read the full conversation. Identify the actual decisions and synthesis, not the verbatim transcript. |
| 2 | OBSERVE (int) | Am I in a save-everything mood? Some sessions don't have lasting insight; the Skip criteria exists for a reason. |
| 3 | LISTEN | Did the user specify destination or type? Their explicit override comes first; defaults come second. |
| 4 | THINK | Pick destination root (Step 0), then note type, then folder. Match path sanitization to destination convention. |
| 5 | CONNECT (lat) | Does this content already have a wiki page? Update vs create matters — duplicates pollute the index. |
| 6 | CONNECT (sys) | Index + log + hot cache + frontmatter relations all update together — atomicity matters. |
| 7 | FEEL | Filename future-me can read cold; frontmatter that supports search. Avoid noise that drowns the signal. |
| 8 | ACCEPT | Some sessions don't deserve saving. Honor the Skip criteria; don't archive everything. |
| 9 | CREATE | Write the note, append to log at top, update index, refresh hot cache. |
| 10 | GROW | Skipped saves are also signal — what threshold filtered them? Refine the type table over time. |