save
The save skill persists conversation insights into a user's Obsidian wiki by writing session notes to vault-appropriate directories based on the vault's methodology mode (generic, LYT, PARA, or Zettelkasten). Use this skill when valuable discussion outcomes should be permanently recorded rather than lost in chat history, employing concurrency locks and transport methods configured in the vault's metadata files.
git clone --depth 1 https://github.com/AgriciDaniel/claude-obsidian /tmp/save && cp -r /tmp/save/skills/save ~/.claude/skills/saveSKILL.md
# save: File Conversations Into the Wiki
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.
---
## Transport (v1.7+)
The session-note write itself follows the standard transport policy. Read `.vault-meta/transport.json` (auto-created by `bash scripts/detect-transport.sh`):
- **cli** — `obsidian-cli write "$VAULT" "$NOTE" < session.md`; see [`skills/wiki-cli/SKILL.md`](../wiki-cli/SKILL.md)
- **mcp-obsidian** / **mcpvault** — `mcp__obsidian-vault__write_note`
- **filesystem** — Claude's `Write` tool with absolute path
Full decision tree: [`wiki/references/transport-fallback.md`](../../wiki/references/transport-fallback.md). Index/log/hot updates use the same transport.
---
## Mode awareness (v1.8+)
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:
- **generic**: `wiki/sessions/<date>-<topic>.md` (v1.7 default)
- **LYT**: `wiki/notes/<date>-<topic>.md` + update the relevant session/journal MOC
- **PARA**: `wiki/projects/inbox/<date>-<topic>.md` (user reroutes to specific projects)
- **Zettelkasten**: `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.
## Concurrency (v1.7+)
Session-note writes MUST be preceded by `wiki-lock acquire`:
```bash
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.
---
## Note Type Decision
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`.
---
## Save Workflow
**Step 0: Decide the destination root.** Check in order:
1. **User explicit override.** If the user said "save to this project's wiki" / "save to the personal vault" / a specific path, respect it.
2. **Project CLAUDE.md or global `~/.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.
3. **Default.** The project's own `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:**
1. **Scan** the current conversation. Identify the most valuable content to preserve.
2. **Ask** (if not already named): "What should I call this note?" Keep the name short and descriptive.
3. **Determine** note type using the table above.
4. **Extract** all relevant content from the conversation. Rewrite it in declarative present tense (not "the user asked" but the actual content itself).
5. **Create** the note in `<destination-root>/<chosen-folder>/<title>.md` (per Step 0). Full frontmatter. If a note with the same path already exists, ASK before overwriting.
6. **Collect links**: identify any wiki pages mentioned in the conversation. Add them to `related` in frontmatter.
7. **Update** `wiki/index.md`. Add the new entry at the top of the relevant section.
8. **Append** to `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]
```
9. **Update** `wiki/hot.md` to reflect the new addition.
10. **Confirm**: "Saved as [[Note Title]] in wiki/[folder]/."
---
## Frontmatter Template
```yaml
---
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:
```yaml
question: "The original query as asked."
answer_quality: solid
```
For `decision` type, add:
```yaml
decision_date: YYYY-MM-DD
status: active
```
---
## Writing Style
- Declarative, present tense. Write the knowledge, not the conversation.
- Not: "The user asked about X and Claude ex>
Ingest sources into the Obsidian wiki vault. Reads a source, extracts entities and concepts, creates or updates wiki pages, cross-references, and logs the operation. Supports files, URLs, and batch mode. Triggers on: ingest, process this source, add this to the wiki, read and file this, batch ingest, ingest all of these, ingest this url.
>
>
Visual layer of the wiki. Add images, text cards, PDFs, and wiki pages to Obsidian canvas files with auto-positioning inside zones. Integrates with /banana for image capture. Triggers on: /canvas, canvas new, canvas add image, canvas add text, canvas add pdf, canvas add note, canvas zone, canvas list, canvas from banana, add to canvas, put this on the canvas, open canvas, create canvas.
>
Strip clutter from web pages before ingesting into the wiki. Removes ads, navigation, headers, footers, and boilerplate: leaving clean readable markdown that saves 40-60% tokens. Triggers on: defuddle, clean this page, strip this url, fetch and clean, clean web content before ingesting, strip ads, remove clutter, clean URL content, readable markdown from URL.
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.