copperbox665 downloadsDefine reusable prompt files and run them against your vault or active note using Claude Code CLI.
Run pre-defined claude prompts against your obsidian vault, within obsidan itself.
An Obsidian plugin that lets you define reusable prompt files (PROMPT-*.md) and run them against your vault or the currently active note. Both one-off prompts and the interactive chat (a multi-turn conversation with Claude inside an Obsidian pane) drive the Claude Code CLI through the Claude Agent SDK, with in-pane tool approvals.
This plugin works by running the Claude Code CLI as a local process on your machine. Prompts you write — including ad-hoc prompts, PROMPT-*.md files, and your CLAUDE.md — are passed to the CLI, which then drives an agentic loop that can read, write, and edit files in your vault (and run other tools you explicitly allow). You are giving an LLM the ability to take actions on your system. Treat that seriously.
Things you should understand before using this plugin:
Allowed tools is what Claude auto-approves. The default allowlist (Read, Grep, Glob, Write, Edit) is scoped to file I/O inside the vault. If you add Bash (or any other tool that executes code), Claude can run arbitrary commands on your machine during a run without prompting. Only do this if you understand the consequences.Allowed tools whitelist. When Claude wants a tool outside it, an approval card appears in the run's pane (the output pane for one-off prompts, the conversation for chat) offering Allow once, Allow for this run/chat, or Deny. For a one-off prompt an approval lasts only for that single run; in chat, "Allow for this chat" lasts until the chat closes. Neither ever changes the saved Allowed tools whitelist. Approving a code-executing tool (e.g. Bash) carries the same risks as adding it to the whitelist -- only approve what you understand.CLI path setting is not sandboxed. It's the executable the plugin runs. Don't point it at anything you wouldn't otherwise execute. Leave it as claude unless you have a specific reason to change it.CLAUDE.md is sent as a system prompt on every run. Anything in that file shapes the model's behavior across all prompts. Don't paste untrusted content into it.Write/Edit allowed, the model technically has access to the whole vault.Max budget (USD) and Max turns. A prompt that loops or fans out can cost real money. The defaults cap turns at 50; there is no default budget cap.In short: only run prompts you wrote (or have read), only enable tools you understand, and assume the model will occasionally do something you didn't intend. Review changes (git, file history, Obsidian's file recovery) after broad runs.
Now available thru the Obsidian Community site.
Create a note in the root of your vault and name it CLAUDE. Fill this out with vault conventions claude should know when working within your vault.
An example CLAUDE.md:
# Personal Assistant - Vault Convetions
You are a personal assistant helping organize and maintain notes in an obsidian vault.
## Vault Structure
- /daily-notes - One note per day (YYY-MM-DD format)
- /projects - Notes related to ongoing projects
- /templates - Obsidian templates for daily notes and other recurring note types
- /people - Notes related to specific individuals
## Conventions
- Always use [[wiki links]] when referencing other notes, projects, or people
- File names should be lowercase with hyphens (e.g., new-project-research.md)
- the `brain-dump.md` note in the root is used for raw brain dumps and unprocessed notes (Claude sorts this into the right folders)
- when processing brain dumps, break it out into spearate notes in the appropriate folders or append to existing notes if appropriate
- If a note references a person make their name link to their note in `/people`, if they don't have a note, create one and link it.
## Preferences
- Keep notes concise - bullet points over paragraphs
- always include a `## Key Takeaways` section in research notes
- when creating people notes, include: name, role/channel, how they're relevant, and any links to related notes with a short description of their relevance in the note.
Create PROMPT-*.md files at the root of your vault. Each file defines a reusable prompt. The file name (minus the PROMPT- prefix and .md extension) becomes the display name in the picker.
Example: A prompt to summarize a note and provide bullet list of links at the top of a note, PROMPT-summarize.md:
You are an Obsidian note summarizer. Your job is to read the provided note and append a concise bulleted summary to the end of it.
## Instructions
1. **Read the full note** before summarizing.
2. **Identify the key points** — focus on facts, decisions, findings, action items, and conclusions.
3. **Write a `## Summary` section** with a bulleted list capturing the essence of the note. Each bullet should be one clear, concise statement.
1. These should provide quick links to appropriate sections where possible.
4. **Append the Summary section to the end of the note.** Do not modify any existing content.
5. **Do not add information that isn't in the note.** Only distill what is already there.
6. **Use [[wiki links]]** for any referenced people, projects, or notes that aren't already linked.
Example: A prompt intended to be ran against specific notes, PROMPT-refine-note.md:
You are an Obsidian note editor. Your job is to refine and improve the provided note while preserving its meaning and intent.
## Instructions
1. **Improve clarity and conciseness** — Tighten language, remove redundancy, and favor bullet points over long paragraphs. Every sentence should earn its place.
2. **Professional tone** — Rewrite informal or rough language to read cleanly and professionally without losing the author's voice.
3. **Structure** — Ensure the note has clear headings, logical flow, and consistent formatting. Add a `## Key Takeaways` section at the end if one doesn't exist.
4. **Add missing [[wiki links]]** — Identify any references to people, projects, tools, concepts, or other notes that should be linked with `[[wiki links]]` but aren't. Add them.
5. **Fix formatting** — Correct any broken markdown, inconsistent list styles, or missing frontmatter.
6. **Do not fabricate content** — Only reorganize and refine what is already there. Do not add new facts, claims, or sections beyond links and Key Takeaways.
There are four ways to run a prompt:
Run Claude Prompt (Vault) to run against the entire vaultRun Claude Prompt (Active Note) to run scoped to the currently open noteRun ad-hoc Claude prompt to type a one-off prompt directly without creating a prompt fileAfter selecting a prompt, Claude's output streams in real time into a sidebar pane. Tool calls (file reads, edits, etc.) are shown as collapsible sections beneath the output, each with a status badge (✓ success, ✗ error) once the result returns. While the run is active, an animated "Claude is working" indicator sits at the bottom of the pane with a live counter of elapsed time and tokens generated so far. When the run finishes, the indicator is replaced by a one-line breakdown showing the cost, elapsed time, and total tokens used (e.g. $0.0123 - 4.5s - 12,345 tokens).
If Claude requests a tool that isn't on the Allowed tools whitelist, an approval card appears in the output pane with Allow once, Allow for this run, or Deny. An approval applies only to that single run and never changes your saved whitelist.
Stop Claude command from the command paletteUse Open Claude Output from the command palette to open the output pane at any time. It has two tabs:
PROMPT-*.md files show only the file name. Use the Clear History button to remove all entries.Open a multi-turn conversation with Claude inside Obsidian:
Open Claude chatType a message and press Enter to send (Shift+Enter for a newline). Claude's replies render as markdown, and tool calls appear inline as collapsible sections, the same as the output pane. While Claude is working on a turn, an animated "Claude is working" indicator with a live elapsed-time and token counter sits at the bottom of the transcript; it disappears when the turn ends. After each turn, a one-line breakdown below the reply shows the cost, elapsed time, and tokens used (e.g. $0.0123 - 4.5s - 12,345 tokens). The conversation keeps its context across turns -- one Claude process stays alive for the life of the chat.
Tool approvals. The chat starts with the same Allowed tools whitelist as one-off prompts. When Claude wants a tool that isn't on the whitelist, an approval card appears in the conversation with three choices:
These approvals never modify your saved Allowed tools whitelist. One-off prompts have the same approval flow, scoped to a single run.
Choosing the model. The chat header has a model dropdown showing the model that will be used for the next message. It defaults to your Model override setting (or "Default (CLI)" when that's empty, letting the CLI choose). Pick a different model (Opus, Sonnet, Haiku, or a custom value from your settings) to switch -- it applies live to the running conversation and is remembered for this chat only; it never changes your saved settings. The dropdown is locked while a turn is in progress.
Active-note context. A context bar sits just above the message box showing the note you currently have open in Obsidian, with a checkbox that is on by default. While it's checked, each message you send is prefixed with a short line naming that note as a [[wiki link]] and telling Claude to read it if it's relevant -- so a chat instantly knows what you're looking at without you pasting anything. The reference is cheap (it costs no extra tokens up front; Claude reads the note itself only when it needs to), and it always reflects the note's current on-disk contents. The bar updates as you switch notes, and a small Context: [[note]] caption is recorded under each message that included one -- its wiki link is clickable, so you can reopen the referenced note when reviewing the history. Uncheck the box to send a message with no note attached. When no note is open, the bar shows "No note open" and nothing is attached.
Stopping and resetting. Use Stop in the chat header to interrupt the current turn without ending the conversation. Use New chat to discard the conversation and start fresh.
One run at a time. A chat turn and a one-off prompt run cannot run simultaneously. An idle, open chat does not block one-off prompts -- the lock is only held while a turn is actively running. The Max turns and Max budget (USD) settings apply per chat turn.
If a CLAUDE.md file exists at the root of your vault, its contents are automatically passed as a system prompt to every run. Use this to set global instructions, conventions, or context that should apply to all prompts.
Add YAML frontmatter to any prompt file to override plugin settings on a per-prompt basis. Supported fields:
---
model: sonnet
maxTurns: 10
maxBudget: 0.50
allowedTools: [Read, Grep, Glob]
---
Your prompt content here...
| Field | Type | Description |
|---|---|---|
model |
string | Override the Claude model (e.g. sonnet, opus, haiku) |
maxTurns |
number | Maximum agentic turns for this prompt |
maxBudget |
number | Maximum cost in USD for this prompt |
allowedTools |
string[] | Tools Claude is allowed to use (inline [Read, Grep] or block YAML list) |
Prompts with overrides display badges in the picker so you can see at a glance which settings differ from defaults.
After Claude edits files, the plugin automatically refreshes modified files in Obsidian so you see changes immediately without needing to reopen or reload.
This plugin runs the Claude Code CLI as a local child process. Both one-off prompts and the interactive chat drive the CLI through the Claude Agent SDK, which launches your installed CLI (so it uses your existing authentication). When you run a prompt or send a chat message, the CLI sends your content and relevant vault files to Anthropic's API for processing. No data is sent by the plugin itself — all network communication is handled by the CLI.
CLAUDE.md file..obsidian/plugins/ directory. Interactive chat conversations are held in memory only and are not written to the run history or to session files on disk.See Anthropic's Privacy Policy for details on how Anthropic handles data sent via the CLI.
Configure the plugin in Obsidian Settings > Claude Vault Assistant:
| Setting | Default | Description |
|---|---|---|
| Allowed tools | Read, Grep, Glob, Write, Edit |
Comma-separated list of tools Claude is allowed to use |
| CLI path | claude |
Path to the Claude CLI executable |
| Max turns | 50 |
Maximum number of agentic turns per run |
| Max budget (USD) | No limit | Maximum cost per run in USD |
| Model override | CLI default | Override the default Claude model |
| Max history entries | 50 |
Maximum number of run history entries to keep |
src/main.ts — Plugin entry point, registers commands and viewssrc/settings.ts — Plugin settings interface and settings tabsrc/chat-session.ts — Claude Agent SDK driver shared by both one-off runs and the interactive chat: builds options, streams SDK messages, and bridges tool approvalssrc/prompt-runner.ts — Drives a single-turn one-off prompt run on top of chat-session (replaces the old child-process runner)src/output-view.ts — Sidebar output pane with markdown rendering, history tab, and tool-approval promptssrc/run-history.ts — Run history storage, retrieval, and pruning logicsrc/prompt-scanner.ts — Scans vault root for PROMPT-*.md filessrc/frontmatter.ts — Parses YAML frontmatter overrides from prompt filessrc/prompt-picker.ts — Modal for selecting a prompt to runsrc/adhoc-prompt-modal.ts — Modal for typing ad-hoc promptssrc/vault-refresher.ts — Refreshes modified files after a runsrc/chat-view.ts — Sidebar chat pane: transcript, input box, active-note context bar, and permission cardssrc/chat-context.ts — Pure helpers that turn the active note into a reference-only context preamble ([[wiki links]]) prepended to a chat turnsrc/permission-card.ts — Shared tool-approval card rendering used by both the output and chat viewssrc/permission-types.ts — Shared permission contract (decision and request types)src/run-types.ts — Shared RunScope type (vault vs active note)src/system-prompt.ts — The Obsidian system prompt appended on every runsrc/env-resolver.ts — Harvests the login-shell environment so the SDK-launched CLI sees your normal PATH and API tokenssrc/electron-compat.ts — Electron renderer shim so the Agent SDK runs inside Obsidiansrc/activity-lock.ts — Shared gate so a one-off run and a chat turn never run at the same timesrc/tool-render.ts — Shared tool-call rendering used by both the output and chat viewssrc/working-indicator.ts — Animated "Claude is working" indicator with a live elapsed-time/token counter, shown in both the output and chat views while a turn is in flightsrc/format.ts — Shared formatting for the cost/time/token breakdown and live token countsnpm install
# Development (watch mode)
npm run dev
# Production build
npm run build
# Run tests
npm test
# Watch mode
npm run test:watch
MIT