From meta-plugin
Use when the user invokes /vault-save (optionally with a subfolder name like 'claude-notes', 'claude-research-output', or 'meta-workflows'), OR when the user asks to save, export, copy, or stash the latest response into their Obsidian vault. Captures the most recent prior assistant response as a markdown file with YAML frontmatter (date, source=current git branch/worktree, tags) under the Obsidian vault at /Users/hoangngo/Documents/personal-vault/, fuzzy-matches the subfolder argument against existing folders, and prompts for confirmation before writing.
How this skill is triggered — by the user, by Claude, or both
Slash command
/meta-plugin:vault-saveThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Capture the most recent prior assistant response in this conversation and write it as a clean markdown note into the user's Obsidian vault at `/Users/hoangngo/Documents/personal-vault/`.
Capture the most recent prior assistant response in this conversation and write it as a clean markdown note into the user's Obsidian vault at /Users/hoangngo/Documents/personal-vault/.
The user invokes this via /vault-save <subfolder>, where <subfolder> is a name or partial name like claude-notes, notes, research, meta, etc. The argument may also be empty — in which case you must ask.
The user keeps an Obsidian vault for long-running threads of work (currently three top-level folders: claude-notes, claude-research-output, meta-workflows). They want to bookmark useful Claude Code outputs into the right thread without leaving the terminal and without losing provenance. So: infer cleanly, confirm cheaply, and never silently overwrite their notes.
Follow these steps in order. Use the user's existing vault conventions (lowercase-with-spaces filenames, .md extension, flat structure within each subfolder) — don't invent a new style.
Look back through this conversation and pick the most recent substantial assistant response prior to the /vault-save invocation. This is usually the message immediately before the user's slash-command invocation. If the prior response is trivial (one-line acknowledgement, a clarifying question, only tool calls with no prose) walk back further until you find a meaningful response.
If you genuinely cannot find substantive content to save — for example, the conversation only contains tool plumbing and questions — tell the user there's nothing meaningful to save and stop. Don't fabricate content.
The vault root is /Users/hoangngo/Documents/personal-vault/. List its direct subdirectories with ls (skipping dotfiles like .obsidian). As of this skill's writing, the active subfolders are claude-notes, claude-research-output, and meta-workflows, but always re-list at runtime — the user may add or rename folders.
Match the user's argument against actual subfolders using this priority:
research → claude-research-output) → propose it, confirm before writing.Never auto-create a new folder without explicit user approval. New folder names should follow the existing convention (lowercase, hyphen-separated).
Read the content from step 1 and infer a short topic phrase:
lamin-vendor-metadata-status, silver-overview)the, a).md in the topic itself — you'll add the extensionlamin-vendor-metadata-investigation beats database-notes or findings-summary.Compose the final filename as:
YYYY-MM-DD-<topic>.md
Example: 2026-05-11-lamin-vendor-metadata-status.md
Note: the user's existing vault contains older notes that use spaces (e.g., lamin vendor metadata status.md). Do not rename those. New notes written by this skill use hyphens for consistency with the date prefix.
Use the current date (today's date as known by the environment). If the conversation references a specific date the user was working on something, prefer that — but only if it's unambiguous.
Before proposing the write, check whether the target path already exists. If it does:
If the path is clear, proceed.
Always confirm with the user before writing. Show them:
Use the AskUserQuestion tool when there's a real choice to make (ambiguous folder, collision, new-folder approval). For simple confirmation of the happy path, a short text proposal followed by AskUserQuestion with options like "looks good" / "edit filename" / "cancel" is fine.
Before writing, resolve the source frontmatter value. The point of source is provenance — when the user finds this note in their vault months later, they should know which working context produced it. The current git branch (or worktree) is far more useful than a generic claude-code label, because branches map to specific lines of work.
Run this in the shell's working directory, in order, and use the first one that succeeds:
git rev-parse --abbrev-ref HEAD — current branch name. Worktrees return their own branch here, which is exactly what we want.HEAD (detached state): git rev-parse --short HEAD for the short SHA.basename "$PWD").Use the resolved value as source. Don't fall back to claude-code — that label was a placeholder from before this skill knew about git context.
Once confirmed, write the file with this structure:
---
date: YYYY-MM-DD
source: <resolved-branch-or-worktree>
tags: [<subfolder-name>]
---
<the content from step 1, reproduced faithfully as clean markdown>
Reproduce the content faithfully. Do not summarize, re-paragraph, or "improve" it. The user wants the actual response, not a redaction of it. The only transformations allowed:
<system-reminder> blocks that leaked through, tool-call rendering), drop those — they're noise, not content.After writing, report:
protein-engineering", "inferred topic from your second-most-recent response since the latest was a clarifying question")Keep this terse — one short paragraph or three bullets max.
The frontmatter is intentionally minimal so it stays out of the way in Obsidian. Tags is a single-item list containing only the subfolder name. The user can enrich tags inside Obsidian later. source is the git branch (or worktree, or working-directory basename if not in a repo) resolved at write time — see step 6.
---
date: 2026-05-15
source: hoang-branch
tags: [claude-notes]
---
Example 1 — happy path:
/vault-save notes.notes → claude-notes, infer topic subagent-dispatch-patterns, propose path /Users/hoangngo/Documents/personal-vault/claude-notes/2026-05-15-subagent-dispatch-patterns.md, show the frontmatter and ask confirm.Example 2 — ambiguous arg:
/vault-save meta.meta is a substring of meta-workflows only (one match), so propose that. Confirm. Write.metabolomics folder, you'd list both and ask which one.Example 3 — new folder:
/vault-save crispr-screens.crispr-screens. Options: create new folder crispr-screens, pick from existing (claude-notes / claude-research-output / meta-workflows), or cancel?"mkdir the folder, then continue to step 3.Example 4 — collision:
claude-notes/2026-05-15-subagent-dispatch-patterns.md.\n\n---\n\n## Appended <timestamp>\n\n before the new content.Example 5 — no arg:
/vault-save with no argument.meta-workflows even if it sounds research-y.notes.md or output.md. The point of an Obsidian vault is searchability; vague filenames defeat that.pbpaste. The user can edit the inferred filename/topic during confirmation if they want a different framing.npx claudepluginhub ogngnaoh/meta-plugin --plugin meta-pluginCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.