obsidian-second-brain
git clone https://github.com/eugeniughelbur/obsidian-second-brain
git clone --depth=1 https://github.com/eugeniughelbur/obsidian-second-brain ~/.claude/skills/eugeniughelbur-obsidian-second-brain-obsidian-second-brain
SKILL.mdObsidian Second Brain
Claude operates your Obsidian vault as a living OS — not a note-taking app. Everything worth remembering gets saved. Every update propagates everywhere it belongs.
Quick Start
0. Verify MCP is available
This skill uses the
MCP server. The tool names below (mcp-obsidian
get_file_contents, list_files_in_vault, search, append_content, write_file) are specific to that package. If you are using a different Obsidian MCP server, tool names may differ — check that server's documentation.
If MCP vault tools are unavailable: fall back to reading and writing files directly via the filesystem using standard file tools (Read, Write, Edit, Glob). The vault is plain markdown files — all operations can be done without MCP, just more verbosely. Tell the user:
"The obsidian-vault MCP server isn't connected — I'll read/write vault files directly instead. To enable MCP for faster vault access, run:
"claude mcp add obsidian-vault -s user -- npx -y mcp-obsidian \"/path/to/your/vault\"
1. First time in a vault → read _CLAUDE.md
_CLAUDE.mdBefore doing anything in a vault, check if
_CLAUDE.md exists at the vault root:
get_file_contents("_CLAUDE.md")
If it exists: follow its rules exactly — they override the defaults in this skill. Where
_CLAUDE.md is silent, fall back to the defaults below.
If it doesn't exist: use the defaults in this skill, then offer to create one.
2. First time with a new user → run discovery
list_files_in_vault()
Scan the structure to understand: folder names, template locations, naming conventions, frontmatter patterns. Then read 2–3 existing notes with
get_file_contents(path) to calibrate writing style before creating anything new.
3. Bootstrap a new vault
If the user has no vault yet, run:
# One-line install + bootstrap (asks 3 questions: vault path, your name, preset) curl -sL https://raw.githubusercontent.com/eugeniughelbur/obsidian-second-brain/main/scripts/quick-install.sh | bash # Or manual: python scripts/bootstrap_vault.py --path ~/path/to/vault --name "Your Name" # With a preset: python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --preset executive python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --preset builder python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --preset creator python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --preset researcher # With style override: python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --style obsidian # With assistant mode (maintaining vault for someone else): python scripts/bootstrap_vault.py --path ~/my-vault --name "Your Name" --mode assistant --subject "Boss Name"
Then configure
mcp-obsidian to point at the new vault path and restart Claude.
Presets customize the vault for different use cases:
— Decisions, people, meetings, strategic planning. Kanban: OKRs, Quarterly, Weekly.executive
— Projects, dev logs, architecture decisions, debugging. Kanban: Backlog, Sprint, Done.builder
— Content calendar, ideas pipeline, audience notes, publishing. Kanban: Ideas, Drafts, Published.creator
— Sources, literature notes, hypotheses, methodology. Kanban: Reading, Processing, Synthesized.researcher
Default (no preset) gives a general-purpose vault. All presets use wiki-style by default.
Assistant mode creates a
_CLAUDE.md configured for operating a vault on behalf of someone else. See references/claude-md-assistant-template.md.
See
references/vault-schema.md for full structural details.
Core Operating Principles
Never create in isolation
Every write operation must ask: where else does this belong?
| You create/update... | Also update... |
|---|---|
| A new project note | Kanban board (add to Backlog), today's daily note (link it) |
| A task completed | Kanban board (move to Done), project note (log it), daily note |
| A person note | Daily note (mention interaction), People index if it exists |
| A dev log | Daily note (link it), project note (Recent Activity) |
| A deal update | Side Biz / Deals kanban, Dashboard totals |
| A decision made | Project note (Key Decisions), daily note |
| A mention/shoutout | Mentions Log, person's note, daily note |
| A hook, contrarian angle, or content idea | (if folder exists) |
| A specific reusable number or stat | (if folder exists) |
| An external post that performed well + why | (if folder exists) |
| Research findings worth keeping | (if folder exists) |
| Any vault write | (append timestamped entry), (update if new note created) |
Always propagate. Never create a single orphaned note.
Bi-temporal facts — never overwrite, always append
When a fact changes (role, company, status, location, tool), NEVER delete the old value. Add a new entry to the
timeline: frontmatter array with both event time AND transaction time:
timeline: - fact: "CTO at Single Grain" from: 2024-01-01 # event time: when it was true until: 2026-04-07 learned: 2026-02-23 # transaction time: when the vault learned it source: "[[2026-02-23]]" # where from - fact: "Architect at Single Grain" from: 2026-04-07 until: present learned: 2026-04-07 source: "[[2026-04-07]]"
Top-level fields (
role:, status:, company:) always reflect the CURRENT state. The timeline: preserves the full history with provenance.
This enables:
- Historical queries ("who was my manager in February?")
- Reflective thinking ("you believed X on Tuesday, then ingested Y on Wednesday and shifted to Z")
- Smart reconciliation (different facts at different times = not a contradiction)
- Full audit trail (when did the vault learn each fact, from what source?)
CRITICAL_FACTS.md — always loaded
A tiny file (~120 tokens) loaded alongside
SOUL.md at L0 in every session. Contains facts needed in every conversation:
- Timezone
- Current manager
- Current location
- Current company and role
- Any other fact that's true RIGHT NOW and relevant to every interaction
Update this file whenever a critical fact changes. Keep it under 150 tokens.
Raw is immutable
In wiki-style vaults, the
raw/ folder contains original sources (articles, transcripts, PDFs). Claude reads these but NEVER modifies them. They are the source of truth. If a wiki page gets corrupted, re-derive it from the raw source. When ingesting, always save the original to raw/ and the derived pages to wiki/.
Maintain index.md
and log.md
index.mdlog.mdTwo structural files that keep the vault navigable and auditable:
-
— A catalog of all vault pages organized by category. Claude reads this FIRST when navigating the vault instead of searching — faster and cheaper on tokens. Update it whenever a new note is created or deleted. Format:index.md
grouped under folder headings.- [[Note Name]] — brief description -
— An append-only chronological log of every vault operation. Every save, ingest, health check, and structural change gets a timestamped entry. Never delete or rewrite entries — only append. Format:log.md## [YYYY-MM-DD] action | Description
The vault is a living system
The vault is not a filing cabinet. It is a living knowledge base that rewrites itself with every input. When new information enters:
- Existing pages get REWRITTEN with new context, not just appended to
- Contradictions between old and new claims get resolved or explicitly documented
- New patterns across multiple sources trigger automatic synthesis pages
- Stale claims get replaced with current information, with history preserved
The vault after an ingest should be DIFFERENT — not just bigger. If pages that existed before aren't smarter, more connected, and more current, the ingest wasn't deep enough.
Two-Output Rule
Every interaction that produces insight must generate two outputs:
- The answer — what the user sees in the conversation
- A vault update — the insight filed back into the relevant note(s)
This applies to all thinking tools and any query where Claude synthesizes information from the vault.
Synthesis Hook
When Claude notices a pattern during any operation (ingest, query, challenge, emerge), it should automatically create a synthesis page in
wiki/concepts/. Patterns include:
- The same concept appearing in 3+ unrelated sources
- A claim being reinforced by multiple independent sources
- A trend emerging across time-sequenced notes
- Two entities sharing unexpected connections
Synthesis pages are the vault thinking for itself — connecting dots the user hasn't connected yet.
Reconciliation
The vault should never contain two pages that disagree without knowing they disagree. When contradictions are found (during ingest, health checks, or queries), either:
- Resolve them: rewrite the outdated page, preserve history
- Document them: create an explicit conflict page marked as an open question
Use
/obsidian-reconcile for vault-wide truth maintenance.
Proactive save reminders
Unsaved conversations are lost knowledge. Claude should proactively remind the user to save:
- After 10+ exchanges: suggest "Want me to run /obsidian-save before we continue?"
- When the user signals wrap-up (e.g., "ok", "thanks", "done", "bye", "that's it"): suggest "Before you go — want me to /obsidian-save this conversation?"
- When a logical work block completes (feature shipped, decision made, problem solved): suggest saving
- Never skip the reminder. This is especially critical on Claude Desktop where there's no background agent.
Search before creating
Before creating any new note, search for an existing one:
search(query="keyword from title")
Duplicate notes are vault rot. Merge or update instead of creating new.
Match the vault's voice
Read existing notes in the same folder before writing new ones. Match: frontmatter schema, heading style, list formatting, tone, emoji usage (or lack of it). Never introduce new conventions — extend what's already there.
Frontmatter is mandatory
Every note gets frontmatter. At minimum:
--- date: 2026-03-24 tags: - <note-type> ---
See
references/vault-schema.md for full frontmatter specs by note type.
Write Rules
See
references/write-rules.md for the complete guide. Summary:
- Links: Use
for internal links. Always link to people, projects, and jobs mentioned in a note.[[Note Name]] - Dates: ISO format (
) in frontmatter. Human format (YYYY-MM-DD
) in body text.March 24 - Naming:
for dated notes.YYYY-MM-DD — Title.md
for evergreen notes. No special characters exceptTitle.md
(em dash).— - Status values:
/active
/planning
/completed
/archived
for projects.on-hold
/in-progress
/done
for tasks.waiting - Kanban: Items follow the format
- [ ] 🔴 **Title** · @{YYYY-MM-DD}\n\tDescription [[Link]]
The _CLAUDE.md
File
_CLAUDE.mdThis is the most important concept in this skill.
_CLAUDE.md lives at the vault root and persists Claude's operating rules across every session and every surface (Claude Desktop, Claude Code, VS Code, terminal). Without it, Claude has to re-learn your vault conventions every conversation.
Precedence rule:
_CLAUDE.md wins on all vault-specific rules (folder names, naming conventions, frontmatter fields, auto-save behavior, private folders). The defaults in this skill file apply only where _CLAUDE.md is silent. Never let skill defaults override an explicit _CLAUDE.md rule.
What it contains:
- Your vault's folder map and what each folder is for
- Frontmatter schemas for your specific note types
- Naming conventions you use
- What to auto-save vs. what to ask first
- People and projects that need special handling
- Links to key files (boards, dashboard, templates)
To generate a
_CLAUDE.md for an existing vault, run vault discovery then use the template in references/claude-md-template.md.
To install it: write the file to the vault root. Every Claude session that starts in that vault should read it first.
Common Operations
Save info from conversation
When a conversation produces something vault-worthy:
- Identify the note type (decision → project note, person met → People/, task → board + Tasks/, etc.)
- Check if a relevant note already exists
- Write or update — always frontmatter-first
- Propagate to boards, daily note, linked notes
Create today's daily note
date = today in YYYY-MM-DD format path = Daily/{date}.md
Read
Templates/Daily Note.md, fill in the date fields, create the file.
Then scan recent conversation for anything worth logging in today's sections.
Log a dev session
Read
Templates/Dev Log.md. Fill: date, project name, what was worked on, problems solved, decisions made, next steps.
Save to Dev Logs/YYYY-MM-DD — Project Name.md.
Link from project note's Recent Activity section and today's daily note.
Update a kanban board
Boards use the
kanban-plugin: board frontmatter.
Columns are ## Column Name headers.
Items are - [ ] **Title** · @{due-date}\n\tDescription [[Links]]
Completed items move to the ## ✅ Done column with a strikethrough: - [x] ~~**Title**~~ ✅ Date
Run vault health check
python scripts/vault_health.py --path ~/path/to/vault
Reports: duplicate notes, orphaned files (no incoming links), stale tasks (overdue), empty folders, broken links, notes missing frontmatter.
Proactively suggest running this when the user says the vault feels messy, notes are hard to find, they mention duplicates, or they haven't mentioned a health check in a long time. Offer: "Want me to run a vault health check?"
Commands
These slash commands can be used in any Claude surface. Each one is smart — it reads context, searches before writing, and propagates everywhere changes belong.
Name matching: If a name argument has a typo or is approximate, search the vault for the closest match, show what was found, and confirm with the user before proceeding. Never silently create a note with a misspelled name.
/obsidian-save
/obsidian-saveThe master save command. Reads the entire conversation and extracts everything worth preserving.
Steps:
- Scan the conversation and identify all vault-worthy items: decisions, tasks, people mentioned, projects started, ideas, learnings, deals, mentions/shoutouts
- Group items by type: people, projects, tasks, decisions, ideas, deals
- Spawn parallel subagents — one per group — so all note types are handled simultaneously:
- People agent: search for each person, create or update notes, log interactions
- Projects agent: search for each project, create or update notes
- Tasks agent: parse tasks, add to the right kanban columns
- Decisions agent: find relevant project notes, append to Key Decisions sections
- Ideas agent: search Ideas/ for related notes, create or append
- After all agents complete: update today's daily note with links to everything saved
- Report back: a clean list of what was saved and where
Do not ask for guidance on where to save things — infer it. Only ask if something is genuinely ambiguous (e.g. a person mentioned with no context on who they are).
/obsidian-daily
/obsidian-dailyCreates or updates today's daily note.
Steps:
- Check if
exists for todayDaily/YYYY-MM-DD.md - If not: read
, fill in date fields, create the fileTemplates/Daily Note.md - Scan the current conversation for anything relevant to today: tasks in progress, people mentioned, decisions made, what's being worked on
- Pre-fill or update the note's sections with that context
- If the note already exists, inject new content into the right sections rather than overwriting
Return the path of the daily note when done.
/obsidian-log
/obsidian-logLogs a work or dev session to the vault.
Steps:
- Infer the project from conversation context — search the vault if needed to find the right project note
- Read
(orTemplates/Dev Log.md
if it exists)Templates/Work Log.md - Fill in: date, project, what was worked on, problems encountered, decisions made, next steps — all inferred from the conversation
- Save to
Dev Logs/YYYY-MM-DD — Project Name.md - Inject a link into the project note's Recent Activity section
- Inject a link into today's daily note Work section
/obsidian-task [description]
/obsidian-task [description]Adds a task to the vault and the right kanban board.
Steps:
- Parse the task from the argument or from recent conversation context if no argument given
- Infer: priority (🔴/🟡/🟢), due date, linked project, linked person
- Search for the right kanban board — use
board list or search_CLAUDE.mdBoards/ - Add the task card to the correct column (
or📋 This Week
depending on due date)📥 Backlog - Create a task note in
if the task is substantial (more than a one-liner)Tasks/ - Link the task from the relevant project note and today's daily note
/obsidian-person [name]
/obsidian-person [name]Creates or updates a person note.
Steps:
- Search the vault for an existing note matching the name (fuzzy — handle typos and partial names)
- If found: confirm with user, then update with new info from conversation
- If not found: create
with full frontmatter schemaPeople/Full Name.md - Fill in everything inferable from the conversation: role, company, context, relationship strength, last interaction date
- Log the interaction in today's daily note
- If a People index file exists, add or update the entry there
/obsidian-decide [optional: topic]
/obsidian-decide [optional: topic]Extracts and logs decisions from the conversation.
Steps:
- Scan the conversation for decisions made — look for conclusions, choices, commitments, direction changes
- If a topic argument is given, focus on decisions related to that topic
- Find the relevant project note(s) — search if needed
- Append each decision to the project note's
section with date## Key Decisions - Log a summary in today's daily note
- If a decision affects multiple projects, log it in all of them
/obsidian-capture [optional: idea text]
/obsidian-capture [optional: idea text]Quick idea capture with zero friction.
Steps:
- Take the argument as the idea, or pull the most recent idea/thought from the conversation
- Search
for a related existing note — if found, append to itIdeas/ - If new: create
with minimal frontmatter (Ideas/Title.md
,date
)tags: [idea] - Write the idea with any supporting context from the conversation
- Add a brief mention in today's daily note under an Ideas or Captures section
/obsidian-find [query]
/obsidian-find [query]Smart vault search.
Steps:
- Run
with the provided querysearch(query="...") - Also try variations if results are sparse (synonyms, related terms)
- Return results with context: note title, folder, a relevant excerpt, and what type of note it is
- If results are ambiguous, group them by type (people, projects, tasks, etc.)
- Offer to open, update, or link any of the found notes
Do not just return filenames — return enough context for the user to act.
/obsidian-recap [today|week|month]
/obsidian-recap [today|week|month]Summarizes a time period from the vault.
Steps:
- Determine the date range from the argument (default:
if not specified)week - List all daily notes in the range with
list_files_in_dir("Daily/") - Spawn parallel subagents — one per daily note — to read and extract key points from each simultaneously
- Also spawn parallel agents to read dev logs and completed kanban tasks from the same period
- Synthesize all agent results: what was worked on, decisions made, people interacted with, tasks completed, ideas captured
- Present as a clean narrative summary — not a raw dump of note content
/obsidian-review
/obsidian-reviewGenerates a structured weekly or monthly review note.
Steps:
- Ask: weekly or monthly? (or infer from context)
- Read daily notes and dev logs for the period
- Read active projects and check for status changes
- Read completed tasks from kanban boards
- Draft a review note using
if it exists, otherwise use a standard structure:Templates/Review.md- What I accomplished
- Key decisions made
- People I worked with
- What I learned
- What to carry forward
- Save to
(or Monthly)Reviews/YYYY-MM-DD — Weekly Review.md - Link from the last daily note of the period
/obsidian-board [optional: board name]
/obsidian-board [optional: board name]Shows or updates a kanban board.
Steps:
- If a board name is given, search
for it (fuzzy match)Boards/ - If no name given, list available boards and ask which one
- Read and display the current board state: columns, item counts, overdue items (past
)@{date} - Ask if the user wants to make updates — if yes, infer changes from conversation context
- Move completed items to ✅ Done with strikethrough, add new items in the right column
- Flag any items that are overdue or have been in the same column for more than a week
/obsidian-project [name]
/obsidian-project [name]Creates or updates a project note.
Steps:
- Search the vault for an existing project matching the name (fuzzy — handle typos)
- If found: show what was found, confirm, then update with new info from conversation
- If not found: create
with full frontmatter schema (Projects/Project Name.md
,date
,tags: [project]
,status: active
)job - Fill in everything inferable from the conversation: description, goals, key people, current status
- Add a card to the relevant kanban board in the
or📥 Backlog
column🔨 In Progress - Link from today's daily note
/obsidian-health
/obsidian-healthRuns a vault health check and summarizes findings.
Steps:
- Run:
python scripts/vault_health.py --path ~/path/to/vault --json - Parse the JSON output and split findings into categories
- Spawn parallel subagents to handle each category simultaneously:
- Links agent: verify broken links, attempt to resolve them
- Duplicates agent: confirm duplicates are truly the same concept, not just similar names
- Frontmatter agent: identify notes missing required fields by type
- Staleness agent: check overdue tasks and unfilled template syntax
- Orphans agent: check orphaned notes and empty folders
- Contradictions agent: scan Key Decisions and Knowledge/ for claims that conflict or are superseded
- Concept gaps agent: find terms mentioned 3+ times without a dedicated page
- Stale claims agent: flag Knowledge/ notes older than 6 months on fast-moving topics
- Merge agent results and group by severity:
- 🔴 Critical: broken links, unfilled template syntax, contradictions
- 🟡 Warning: duplicates, stale tasks, missing frontmatter, stale claims, concept gaps
- ⚪ Info: orphaned notes, empty folders
- Present a clean summary with counts per category
- For safe fixes (missing frontmatter, obvious duplicates, creating pages for concept gaps), offer to fix them automatically
- For destructive fixes (archiving, merging, resolving contradictions), list them and ask for explicit confirmation before touching anything
- Append to
with severity countslog.md
/obsidian-reconcile
/obsidian-reconcileFinds and resolves contradictions across the vault.
Steps:
- Read
to understand the full vault landscapeindex.md - Spawn parallel subagents to find contradictions:
- Claims agent: scan
andwiki/concepts/
for conflicting factual claimswiki/projects/ - Entity agent: scan
for outdated roles, companies, or descriptionswiki/entities/ - Decisions agent: scan
for reversed or superseded decisions never updatedwiki/decisions/ - Source freshness agent: compare
dates againstraw/
pages for stale referenceswiki/
- Claims agent: scan
- For each contradiction, evaluate: which is newer, which is more authoritative, is it a genuine conflict or an evolution
- Resolve:
- Clear winner: rewrite the outdated page, add a History section noting what changed
- Ambiguous: create
with both sides, markwiki/decisions/Conflict — Topic.mdstatus: open - Evolution: update the page to current state with historical context
- Rebuild affected
sections, append toindex.md
, update daily notelog.md
/obsidian-synthesize
/obsidian-synthesizeAutomatic synthesis — the vault thinks for itself.
Can run manually or as a scheduled agent. Scans the vault for patterns nobody asked about.
Steps:
- Read
andindex.md
(last 20 entries) for recent activitylog.md - Spawn parallel subagents:
- Cross-source agent: find concepts appearing in 2+ unrelated sources from the last 7 days
- Entity convergence agent: find people who appear together in multiple contexts but have no connection page
- Concept evolution agent: find concepts updated 3+ times and document how thinking changed
- Orphan rescue agent: find unlinked notes that should be connected to existing pages
- For each pattern: create
with evidence, interpretation, and suggested actionwiki/concepts/Synthesis — Title.md - Link synthesis pages FROM all source notes they reference
- Update
,index.md
, and today's daily notelog.md
/obsidian-export
/obsidian-exportExport a clean snapshot any agent or tool can consume.
Steps:
- Scan all notes in
and extract: path, title, type, date, status, summary, links, tags, frontmatterwiki/ - Output as JSON (default) to
or markdown to_export/vault-snapshot.json_export/vault-snapshot.md - The snapshot is a flat, structured representation of the vault — no folder structure knowledge needed
- Any AI tool, automation, or agent can read this file and understand the vault
- Append to
log.md
/obsidian-init
/obsidian-initBootstraps
for the vault — the operating manual._CLAUDE.md
Steps:
- Call
to map the full structurelist_files_in_vault() - Spawn parallel subagents to discover vault context simultaneously:
- Dashboard agent: read
or equivalent dashboardHome.md - Templates agent: read all files in
Templates/ - Boards agent: read all files in
Boards/ - Samples agent: read one existing note per major folder to capture naming conventions and frontmatter patterns
- Dashboard agent: read
- Merge all agent results into a complete picture of the vault
- Generate a complete
using the template in_CLAUDE.md
, filled with real values from the vaultreferences/claude-md-template.md - Write it to
at the vault root via_CLAUDE.mdappend_content("_CLAUDE.md", content) - Confirm what was written and tell the user to restart their Claude session so the new file takes effect
If
_CLAUDE.md already exists: show a diff of what would change and ask before overwriting.
/obsidian-ingest
/obsidian-ingestIngests a source into the vault — one source touches many pages.
Steps:
- Accept a URL, file path, or pasted text as the source
- Classify the source type before full read: article, PDF, transcript, video, or raw text
- Read or fetch the full source content
- Extract: entities (people, companies, tools), concepts, claims, action items, notable quotes
- Save the raw source to
with full summary and source linkKnowledge/YYYY-MM-DD — Source Title.md - Spawn parallel subagents to distribute knowledge across the vault:
- People agent: create or update People/ notes for each person mentioned
- Projects agent: update existing project notes with new findings
- Ideas agent: create or append to Ideas/ for new concepts
- Knowledge agent: create or update Knowledge/ notes for factual claims and frameworks
- Update
with all newly created notesindex.md - Append to
:log.md## [YYYY-MM-DD] ingest | Source Title (type) — X created, Y updated - Update today's daily note with an ingest summary
A single ingest should touch 5-15 files. Compile knowledge once, distribute everywhere.
Thinking Tools
These commands use the vault as a thinking partner — not just storage. They surface insights, challenge assumptions, and generate connections that the user cannot see on their own.
/obsidian-challenge
/obsidian-challengeRed-teams your current idea against your own vault history.
Steps:
- Identify the user's current claim, plan, or assumption — from the argument or conversation context
- Extract the key premises behind that position
- Spawn parallel subagents to search for counter-evidence:
- Decisions agent: search Key Decisions sections for past decisions that contradicted similar thinking
- Failures agent: search dev logs, daily notes, and archives for past failures or lessons related to this topic
- Contradictions agent: search for notes where the user held the opposite position or flagged risks
- Synthesize a structured "Red Team" analysis:
- Your position: restate the claim
- Counter-evidence from your vault: cite specific notes, dates, and quotes
- Blind spots: what the user might be ignoring based on their own history
- Verdict: consistent with past experience, or does the vault suggest caution?
- Log the challenge in today's daily note under a Thinking section
Do not be agreeable. The entire point is to pressure-test. Cite specific vault files.
/obsidian-emerge
/obsidian-emergeSurfaces unnamed patterns from recent notes — recurring themes and conclusions you haven't explicitly stated.
Steps:
- Determine the date range from the argument (default: last 30 days)
- Spawn parallel subagents to scan vault content:
- Daily notes agent: extract recurring topics, complaints, observations, energy patterns
- Dev logs agent: extract repeated blockers, tools, architectural patterns
- Decisions agent: look for directional trends across project notes
- Ideas agent: look for thematic clusters in Ideas/ notes
- Identify:
- Recurring themes: topics that appeared 3+ times without being named as a priority
- Emotional patterns: what energizes vs. drains (based on language)
- Unnamed conclusions: things the notes imply but never state outright
- Emerging directions: where the vault suggests the user is heading
- Present a "Pattern Report" — each pattern with evidence (cited notes), interpretation, and suggested action
- Offer to save the report to
or a relevant project noteIdeas/ - Log a summary in today's daily note
The goal is insight the user cannot see themselves. Surface what they haven't named yet.
/obsidian-connect [topic A] [topic B]
/obsidian-connect [topic A] [topic B]Bridges two unrelated domains using the vault's link graph to spark new ideas.
Steps:
- Parse two domains from arguments (e.g.,
)/obsidian-connect "distributed systems" "cooking" - For each domain, search the vault: find all related notes, map backlinks and outgoing links to build a local cluster
- Find the bridge:
- Shared links, tags, or people between the two clusters
- If a direct path exists in the link graph, trace it and explain each hop
- If no direct path, find the closest semantic overlap
- Generate creative connections:
- Structural analogy: how a pattern in A maps to B
- Transfer opportunities: what works in A that could apply to B
- Collision ideas: new concepts that only exist at the intersection
- Present 3-5 specific, actionable connections — not vague analogies but concrete ideas
- Offer to save the best connections to
with links to both source domainsIdeas/ - Log the connection exercise in today's daily note
The value is in unexpected links. If the connection is obvious, dig deeper.
/obsidian-graduate
/obsidian-graduatePromotes an idea fragment into a full project spec with tasks, board entries, and structure.
Steps:
- If argument given: search
, daily notes, and captures for a matching idea (fuzzy)Ideas/ - If no argument: list recent ideas (last 14 days) and ask the user to pick one
- Read the full idea note and any linked notes for context
- Research the vault for related content: overlapping projects, related people, past decisions, similar ideas explored before
- Generate a full project spec:
- Project note in
with complete frontmatter (status: planning, linked idea)Projects/ - Goals: 3-5 concrete outcomes
- Key tasks: broken into phases with priorities
- Open questions: what still needs answering
- Related notes: links to everything relevant
- Project note in
- Add cards to the relevant kanban board
- Update the original idea note: add
and link to the new projectstatus: graduated - Link the new project from today's daily note
The idea doesn't die — it evolves. The original note stays as the origin story.
Context Engine
/obsidian-world
/obsidian-worldLoads your identity, values, priorities, and current state in one shot — with progressive context levels.
Uses token budgets to avoid loading the entire vault. Start light, go deeper only as needed.
Steps:
- L0 — Identity (~200 tokens): read
/SOUL.md
andAbout Me.md
/CORE_VALUES.mdValues.md - L1 — Navigation (~1-2K tokens): read
(vault catalog) andindex.md
(last 10 entries)log.md - L2 — Current State (~2-5K tokens): read
/Home.md
, today's daily note, last 3 daily notes, active kanban boards, previous session digestsDashboard.md - L3 — Deep Context (on demand, ~5-20K tokens): only load if needed — active project notes, full Knowledge/ articles, recently mentioned people
Present a brief status after L0-L2 (do NOT load L3 unless needed):
- Who I am to you: persona and communication style
- Your current priorities: top 3-5 active threads (from index.md + boards)
- Open threads from last session: anything unfinished (from log.md + daily notes)
- Overdue / needs attention: stale tasks or projects
- Today so far: what's already logged
Keep output concise — this is a boot-up sequence, not a report.
If identity files don't exist, offer to create them by asking 5-7 quick questions about the user's role, values, and preferences. If
index.md doesn't exist, offer to run /obsidian-init to generate it.
/obsidian-adr
/obsidian-adrGenerates a decision record when the vault structure changes.
Steps:
- Identify the structural decision from the argument or conversation context
- Create
with:Knowledge/ADR-YYYY-MM-DD — Title.md- Decision: one-line summary
- Context: what prompted this
- Options Considered: 2-3 alternatives evaluated
- Rationale: why this option won
- Consequences: what changed — notes created, moved, or restructured
- Related: links to affected notes
- Update the relevant project note's Key Decisions section with a link to the ADR
- Update
and append toindex.mdlog.md - Link from today's daily note
The vault knows why it's structured the way it is. When a future session asks "why?" — the ADR has the answer.
Can also be triggered automatically by
/obsidian-graduate, /obsidian-health structural fixes, or folder reorganizations. In those cases, offer to create an ADR — don't force it.
Scheduled Agents
Four autonomous agents designed to run on a schedule with no user intervention. Each runs a focused vault operation at a set time, then stops. They are conservative by default — they never delete or archive anything autonomously, and they never ask the user questions mid-run.
Set these up once using the
/schedule skill in Claude Code.
obsidian-morning
— Daily at 8:00 AM
obsidian-morningCreates today's daily note and surfaces what needs attention.
Prompt to schedule:
Read _CLAUDE.md. Create today's daily note in Daily/ using the Daily Note template. Pull in any tasks from kanban boards that are due today or overdue. List any projects with status active that have no recent activity in the last 7 days. Do not ask questions — infer everything from the vault. Save and stop.
Setup:
/schedule obsidian-morning — daily 8:00 AM
obsidian-nightly
— Daily at 10:00 PM
obsidian-nightlySleeptime consolidation — the vault gets smarter overnight.
This agent does more than close the day. It actively consolidates and improves the vault while you sleep.
Prompt to schedule:
Read _CLAUDE.md. This is a sleeptime consolidation pass — the vault should be smarter when the user wakes up. Phase 1 — Close the day: - Read today's daily note. Append a ## End of Day section with a 3-5 bullet summary. - Move any completed kanban tasks to Done. Phase 2 — Reconcile: - Scan wiki/entities/ for outdated roles, companies, or descriptions that conflict with newer daily notes. - Scan wiki/concepts/ for claims contradicted by recently ingested sources. - Auto-resolve clear winners. Flag ambiguous ones in wiki/decisions/. Phase 3 — Synthesize: - Scan sources ingested today and yesterday. Find concepts that appear in 2+ unrelated sources. - If patterns found: create wiki/concepts/Synthesis — Title.md with evidence and interpretation. Phase 4 — Heal: - Find notes created today with no incoming links. Add links from relevant existing pages. - Check if any entity pages reference old timeline entries without an "until" date that should be closed. - Rebuild index.md to reflect today's changes. Phase 5 — Log: - Append to log.md: ## [YYYY-MM-DD] nightly | End of day + X reconciled, Y synthesized, Z orphans linked Do not ask questions. Do not fix anything destructive — only add, update, link. Save and stop.
Setup:
/schedule obsidian-nightly — daily 10:00 PM
obsidian-weekly
— Every Friday at 6:00 PM
obsidian-weeklyGenerates a weekly review note from the vault.
Prompt to schedule:
Read _CLAUDE.md. Run /obsidian-recap week to gather this week's activity. Generate a weekly review note using the Review template (or standard structure if none exists). Save to Reviews/YYYY-MM-DD — Weekly Review.md. Link it from this week's last daily note. Do not ask questions. Save and stop.
Setup:
/schedule obsidian-weekly — every Friday 6:00 PM
obsidian-health-check
— Every Sunday at 9:00 PM
obsidian-health-checkRuns the vault health check and logs a report.
Prompt to schedule:
Read _CLAUDE.md. Run: python scripts/vault_health.py --path ~/path/to/vault --json Parse the output. Write a health report to Knowledge/Vault Health YYYY-MM-DD.md summarizing findings by severity (critical, warning, info). Do not fix anything autonomously — only report. Do not ask questions. Save and stop.
Setup:
/schedule obsidian-health-check — every Sunday 9:00 PM
Setting up scheduled agents
All four can be configured at once:
/schedule
Then tell Claude which agents you want and at what times. Claude Code's scheduling system will handle the rest — agents run autonomously in the background on the defined cron schedule.
To list or remove scheduled agents:
/schedule list /schedule remove obsidian-morning
Background Agent (PostCompact Hook)
A background agent that fires automatically whenever Claude compacts the conversation context. It reads the session summary and propagates everything worth preserving to the vault — no user action required.
What it does: After each compaction, a headless
claude -p subprocess wakes up, reads _CLAUDE.md, scans the summary for vault-worthy items (people, projects, decisions, tasks, dev work, ideas), and writes updates everywhere they belong — people notes, project notes, dev logs, kanban boards, and today's daily note.
How it works:
hook fires in Claude Code after context compactionPostCompact- Hook script reads the JSON summary from stdin
- Spawns a headless
subprocess in the vault directoryclaude --dangerously-skip-permissions -p - Agent runs silently, propagates updates, and exits — user sees nothing
Setup:
-
Make the hook script executable (one-time):
chmod +x ~/.claude/skills/obsidian-second-brain/hooks/obsidian-bg-agent.sh -
Set
inOBSIDIAN_VAULT_PATH
:~/.claude/settings.json{ "env": { "OBSIDIAN_VAULT_PATH": "/path/to/your/vault" } } -
Add the
hook toPostCompact
:~/.claude/settings.json{ "hooks": { "PostCompact": [ { "matcher": "", "hooks": [ { "type": "command", "command": "/Users/you/.claude/skills/obsidian-second-brain/hooks/obsidian-bg-agent.sh", "timeout": 10, "async": true } ] } ] } }
Debugging: The agent logs to
/tmp/obsidian-bg-agent.log. Check there if updates aren't appearing.
Safety: The agent never deletes, archives, or merges anything. It only adds or updates. If the summary has nothing vault-worthy, it exits without touching the vault.
Reference Files
— Complete folder structure + frontmatter specs for all note typesreferences/vault-schema.md
— Detailed writing, linking, and formatting rulesreferences/write-rules.md
— Template for generating a vault'sreferences/claude-md-template.md_CLAUDE.md
Scripts
— One-command installer (wires hook + env var + MCP)scripts/setup.sh
— Bootstrap a complete vault from scratchscripts/bootstrap_vault.py
— Audit a vault for structural issuesscripts/vault_health.py