NOTEDASHBOARD
breferrari

Mind

An Obsidian vault template for engineers who use Claude Code as a thinking partner.

1976 Stars
GitHub

🌐 English | ζ—₯本θͺž | δΈ­ζ–‡ | ν•œκ΅­μ–΄

Obsidian Mind

Obsidian Mind

Claude Code Codex CLI Gemini CLI Obsidian Obsidian CLI Obsidian Skills QMD Node License

An Obsidian vault that gives AI coding agents persistent memory. Built for Claude Code, with working hooks for Codex CLI and Gemini CLI. Start a session, talk about your day, and the agent handles the rest β€” notes, links, indexes, performance tracking. Every conversation builds on the last.


πŸ”΄ The Problem

AI coding agents are powerful, but they forget. Every session starts from zero β€” no context on your goals, your team, your patterns, your wins. You re-explain the same things. You lose decisions made three conversations ago. The knowledge never compounds.

🟒 The Solution

Give your agent a brain.

You: "start session"
Agent: *reads North Star, checks active projects, scans recent memories*
Agent: "You're working on Project Alpha, blocked on the BE contract.
        Last session you decided to split the coordinator. Your 1:1
        with your manager is tomorrow β€” review brief is ready."

Works with Claude Code (full support), Codex CLI, and Gemini CLI β€” same hooks, same commands, same vault.


⚑ See It In Action

Obsidian Mind demo β€” standup and dump commands

Morning kickoff:

/om-standup
# β†’ loads North Star, active projects, open tasks, recent git changes
# β†’ "You have 2 active projects. The auth refactor is blocked on API contract.
#    Your 1:1 with Sarah is at 2pm β€” last time she flagged observability."

Brain dump after a meeting:

/om-dump Just had a 1:1 with Sarah. She's happy with the auth work but wants
us to add error monitoring before release. Also, Tom mentioned the cache
migration is deferred to Q2 β€” we decided to focus on the API contract first.
Decision: defer Redis migration. Win: Sarah praised the auth architecture.
β†’ Updated org/people/Sarah Chen.md with meeting context
β†’ Created work/1-1/Sarah 2026-03-26.md with key takeaways
β†’ Created Decision Record: "Defer Redis migration to Q2"
β†’ Added to perf/Brag Doc.md: "Auth architecture praised by manager"
β†’ Updated work/active/Auth Refactor.md with error monitoring task

Incident response:

/om-incident-capture https://slack.com/archives/C0INCIDENT/p123456
# β†’ slack-archaeologist reads every message, thread, and profile
# β†’ people-profiler creates notes for new people involved
# β†’ Full timeline, root cause analysis, brag doc entry

End of day:

You: "wrap up"
# β†’ verifies all notes have links
# β†’ updates indexes
# β†’ brag-spotter finds uncaptured wins
# β†’ suggests improvements

πŸš€ Quick Start

  1. Clone this repo (or use it as a GitHub template)
  2. Open the folder as an Obsidian vault
  3. Enable the Obsidian CLI in Settings β†’ General (requires Obsidian 1.12+)
  4. Run your agent in the vault directory: claude, codex, or gemini
  5. Fill in brain/North Star.md with your goals β€” this grounds every session
  6. Start talking about work

πŸ” Recommended: QMD Semantic Search

QMD is where most of the agent's retrieval intelligence comes from. Optional in the strict sense β€” the vault falls back to grep + the Obsidian CLI β€” but the experience is meaningfully better with it:

  • Semantic recall. Find "what did we decide about caching" even when the note is titled "Redis Migration ADR."
  • Brain topics available on demand. Claude is instructed (via CLAUDE.md) to consult brain/ guidance through QMD when the conversation touches a listed topic.
  • Subagents get sharper context. context-loader, review-prep, brag-spotter, and friends consult QMD first, then fall back to grep.
  • Native agent tools via MCP. Registered as a Model Context Protocol server in .mcp.json β€” when QMD is installed, mcp__qmd__query, mcp__qmd__get, and mcp__qmd__multi_get appear in the agent's tool menu alongside Read and Edit. Subagents, slash commands, and the main conversation all call the same typed contract. Add another MCP-aware tool later (a database, a ticketing system, a calendar) and it plugs in the same way.
npm install -g @tobilu/qmd
node --experimental-strip-types scripts/qmd-bootstrap.ts

The bootstrap is idempotent β€” safe to re-run. It reads the qmd_index and qmd_context fields from vault-manifest.json (default index name: obsidian-mind), registers the collection, attaches the context, and builds the index + embeddings. The SessionStart hook and .mcp.json wrapper both read the same manifest field, so CLI queries, the MCP server, and the re-index all scope to the same named SQLite store. This isolates the vault from any other QMD-using vault on the same machine.

If you want to use a different index name (for example, one vault per engineer on a shared workstation), edit qmd_index in vault-manifest.json before running the bootstrap. Once the store is populated, always pass --index <name> to the CLI:

qmd --index obsidian-mind query "what did we decide about caching"
qmd --index obsidian-mind update   # after bulk edits
qmd --index obsidian-mind embed    # after many new notes

[!NOTE] First-time qmd embed downloads a ~328MB embedding model. qmd query (with LLM reranking) also downloads a ~1.28GB model on first use β€” skip it with qmd search (BM25) or qmd vsearch (semantic only) if you want to avoid the larger download.

[!NOTE] If QMD isn't installed, everything still works β€” the agent falls back to grep and the Obsidian CLI, and the MCP server entry is skipped with a harmless warning.


πŸ“‹ Requirements

  • Obsidian 1.12+ (for CLI support)
  • An AI coding agent: Claude Code (full support), Codex CLI, or Gemini CLI
  • Node 22+ LTS (for hook scripts β€” typically already installed alongside Claude Code / Codex / Gemini CLI)
  • Git (for version history)
  • QMD (optional, for semantic search)

Note on the Node flag. Hook scripts execute TypeScript directly via Node's --experimental-strip-types flag, stable in Node 22.6+ (Aug 2024) and the default behaviour in Node 23.6+. The flag is marked experimental but has been unchanged across 22 LTS and 24 LTS; if a future Node release retires or renames it, hook commands in .claude/settings.json, .codex/hooks.json, and .gemini/settings.json need a one-line update.


βš™οΈ How It Works

Procedural code owns the environment. The agent owns content. The hooks in .claude/scripts/ handle classification, validation, indexing, and lifecycle injection β€” deterministic, testable, runs the same for every agent. Writing notes, filing them, linking them, drafting briefs β€” those are judgments, and they stay with the agent. The two halves meet at small handoffs (hooks inject context, agent reads the vault) so neither has to do the other's job.

Folders group by purpose. Links group by meaning. A note lives in one folder (its home) but links to many notes (its context). Your agent maintains this graph β€” linking work notes to people, decisions, and competencies automatically. When review season arrives, the backlinks on each competency note are already the evidence trail. A note without links is a bug.

Vault-first memory keeps context across sessions and machines. All durable knowledge lives in brain/ topic notes (git-tracked, Obsidian-browsable, linked). Claude Code's MEMORY.md (~/.claude/) is an auto-loaded index that points to vault locations β€” never the storage itself. This means memories survive machine changes and are part of the graph.

Sessions have a designed lifecycle. The SessionStart hook auto-injects your North Star goals, active projects, recent changes, open tasks, and the full vault file listing β€” your agent starts every session with context, not a blank slate. At the end, say "wrap up" and the agent runs /om-wrap-up β€” verifying notes, updating indexes, and spotting uncaptured wins. The CLAUDE.md operating manual governs everything in between: where to file things, how to link, when to split a note, what to do with decisions and incidents.

πŸ”— Hooks

Five lifecycle hooks handle routing automatically:

HookWhenWhat
πŸš€ SessionStartOn startup/resumeQMD re-index, inject North Star, active work, recent changes, tasks, file listing
πŸ’¬ UserPromptSubmitEvery messageClassifies content (decision, incident, win, 1:1, architecture, person, project update) and injects routing hints
✍️ PostToolUseAfter writing .mdValidates frontmatter, checks for wikilinks
πŸ’Ύ PreCompactBefore context compactionBacks up session transcript to thinking/session-logs/
🏁 StopEnd of sessionChecklist: archive completed projects, update indexes, check orphans

[!TIP] You just talk. The hooks handle the routing.

⚑ Token Efficiency

obsidian-mind does not dump your entire vault into context. It uses tiered loading to keep token costs low:

TierWhatWhenCost
AlwaysCLAUDE.md + SessionStart context (North Star excerpt, git summary, tasks, vault file listing)Session start~2K tokens
On-demandQMD semantic search resultsWhen the agent needs specific contextTargeted
TriggeredClassification routing hintsEvery message~100 tokens
TriggeredPostToolUse validationAfter .md writes~200 tokens
RareFull file readsOnly when explicitly neededVariable

SessionStart loads lightweight context β€” small excerpts from key files, filenames, and git summary β€” not full note contents. The agent queries by meaning via QMD before reading files, so it pulls only what's relevant. The classification hook is one lightweight Node call per message. The validation hook only fires on markdown writes and skips excluded paths.

🌐 Using with Other Agents

obsidian-mind works with Claude Code, Codex CLI, and Gemini CLI. The vault conventions in CLAUDE.md, the hook scripts in .claude/scripts/, and the 18 commands in .claude/commands/ are all agent-agnostic β€” pure Markdown, TypeScript, and shell with no SDK dependencies.

Claude Code β€” full support. Hooks, commands, subagents, and the memory system all work out of the box.

Codex CLI β€” reads AGENTS.md natively. Hook config at .codex/hooks.json wires the same hook scripts Claude Code uses β€” session context, message classification, and write validation work automatically. Commands work as regular prompts (e.g. type om-standup without the / prefix).

Gemini CLI β€” reads GEMINI.md natively. Hook config at .gemini/settings.json maps Gemini's event names to the shared hook scripts.

Other agents (Cursor, Windsurf, GitHub Copilot, JetBrains AI) β€” read AGENTS.md for vault conventions. Hook support varies by agent.

[!NOTE] Hooks, commands, subagent prompts, and vault memory (brain/) are all agent-agnostic. Only the ~/.claude/ auto-memory loader is Claude Code-specific. See AGENTS.md for the full portability guide.


πŸ“… Daily Workflow

Morning: Run /om-standup. Your agent loads your North Star, active projects, open tasks, and recent changes. You get a structured summary and suggested priorities.

Throughout the day: Talk naturally. Mention a decision you made, an incident that happened, a 1:1 you just had, a win you want to remember. The classification hook nudges the agent to file each piece correctly. For bigger brain dumps, use /om-dump and narrate everything at once.

End of day: Say "wrap up" and the agent invokes /om-wrap-up β€” verifies notes, updates indexes, checks links, spots uncaptured wins.

Weekly: Run /om-weekly for cross-session synthesis β€” North Star alignment, patterns, uncaptured wins, and next-week priorities. Run /om-vault-audit to catch orphan notes, broken links, and stale content.

Review season: Run /om-review-brief manager and get a structured review prep document with all the evidence already linked.


πŸ› οΈ Commands

Defined in .claude/commands/. Run them in Claude Code, Codex CLI, or Gemini CLI.

CommandWhat It Does
/om-standupMorning kickoff β€” loads context, reviews yesterday, surfaces tasks, suggests priorities
/om-dumpFreeform capture β€” talk naturally about anything, routes it all to the right notes
/om-wrap-upFull session review β€” verify notes, indexes, links, suggest improvements
/om-humanizeVoice-calibrated editing β€” makes Claude-drafted text sound like you wrote it
/om-weeklyWeekly synthesis β€” cross-session patterns, North Star alignment, uncaptured wins
/om-capture-1on1Capture a 1:1 meeting transcript into a structured vault note
/om-incident-captureCapture an incident from Slack/channels into structured notes
/om-slack-scanDeep scan Slack channels/DMs for evidence
/om-peer-scanDeep scan a peer's GitHub PRs for review prep
/om-review-briefGenerate a review brief (manager or peer version)
/om-self-reviewWrite your self-assessment for review season β€” projects, competencies, principles
/om-review-peerWrite a peer review β€” projects, principles, performance summary
/om-vault-auditAudit indexes, links, orphans, stale context
/om-vault-upgradeImport content from an existing vault β€” version detection, classification, migration
/om-prep-1on1Prep for an upcoming 1:1 β€” load person context, open items, suggested agenda
/om-meetingPrep for any meeting by topic β€” subject-forward briefing with open items and considerations
/om-intakeProcess meeting notes inbox β€” classify and route to the right vault notes
/om-project-archiveMove a completed project from active/ to archive/, update indexes

πŸ€– Subagents

Specialized agents that run in isolated context windows. They handle heavy operations without polluting your main conversation.

AgentPurposeInvoked by
brag-spotterFinds uncaptured wins and competency gaps/om-wrap-up, /om-weekly
context-loaderLoads all vault context about a person, project, or conceptDirect
cross-linkerFinds missing wikilinks, orphans, broken backlinks/om-vault-audit
people-profilerBulk creates/updates person notes from Slack profiles/om-incident-capture
review-prepAggregates all performance evidence for a review period/om-review-brief
slack-archaeologistFull Slack reconstruction β€” every message, thread, profile/om-incident-capture
vault-librarianDeep vault maintenance β€” orphans, broken links, stale notes/om-vault-audit
review-fact-checkerVerify every claim in a review draft against vault sources/om-self-review, /om-review-peer
vault-migratorClassify, transform, and migrate content from a source vault/om-vault-upgrade

[!NOTE] Subagents are defined in .claude/agents/. You can add your own for domain-specific workflows.


πŸ“Š Performance Graph

The vault doubles as a performance tracking system:

  1. Competency notes in perf/competencies/ define your org's competency framework β€” one note per competency
  2. Work notes link to competencies in their ## Related section, annotated with what was demonstrated
  3. Backlinks accumulate automatically β€” review prep becomes reading the backlinks panel on each competency note
  4. Brag Doc aggregates wins per quarter with links to evidence notes
  5. /om-peer-scan deep-scans a colleague's GitHub PRs and writes structured evidence to perf/evidence/
  6. /om-review-brief generates a full review brief by aggregating everything: brag entries, decisions, incidents, competency evidence, and 1:1 feedback

[!TIP] To get started: create competency notes from the template, then link your work notes to them as you go. The graph does the rest.


πŸ“‹ Bases

The bases/ folder contains database views that query your notes' frontmatter properties. They update automatically as notes change.

BaseShows
Work DashboardActive projects filtered by quarter, grouped by status
IncidentsAll incidents sorted by severity and date
People DirectoryEveryone in org/people/ with role, team
1:1 HistoryAll 1:1 notes sortable by person and date
Review EvidencePR scans and evidence grouped by person and cycle
Competency MapCompetencies with evidence counts from backlinks
TemplatesQuick access to all templates

Home.md embeds these views, making it the vault's dashboard.


πŸ“ Vault Structure

Home.md                 Vault entry point β€” embedded Base views, quick links
CLAUDE.md               Operating manual β€” read by your agent every session
AGENTS.md               Multi-agent guide β€” Codex, Cursor, Windsurf, etc.
GEMINI.md               Multi-agent guide β€” Gemini CLI
vault-manifest.json     Template metadata β€” version, structure, schemas
CHANGELOG.md            Version history
CONTRIBUTING.md         Template development checklist
README.md               Product documentation
LICENSE                 MIT license

bases/                  Dynamic database views (Work Dashboard, Incidents, People, etc.)

work/
  active/               Current projects (1–3 files at a time)
  archive/YYYY/         Completed work, organized by year
  incidents/            Incident docs (main note + RCA + deep dive)
  1-1/                  1:1 meeting notes β€” named <Person> YYYY-MM-DD.md
  Index.md              Map of Content for all work

org/
  people/               One note per person β€” role, team, relationship, key moments
  teams/                One note per team β€” members, scope, interactions
  People & Context.md   MOC for organizational knowledge

perf/
  Brag Doc.md           Running log of wins, linked to evidence
  brag/                 Quarterly brag notes (one per quarter)
  competencies/         One note per competency (link targets)
  evidence/             PR deep scans, data extracts for reviews
  <cycle>/              Review cycle briefs and artifacts

brain/
  North Star.md         Goals and focus areas β€” read every session
  Memories.md           Index of memory topics
  Key Decisions.md      Significant decisions and their reasoning
  Patterns.md           Recurring patterns observed across work
  Gotchas.md            Things that have gone wrong and why
  Skills.md             Custom workflows and slash commands

reference/              Codebase knowledge, architecture maps, flow docs
thinking/               Scratchpad for drafts β€” promote findings, then delete
templates/              Obsidian templates with YAML frontmatter

.claude/
  commands/             18 slash commands
  agents/               9 subagents
  scripts/              Hook scripts + charcount.ts utility
  skills/               Obsidian + QMD skills
  settings.json         5 hooks configuration

πŸ“ Templates

Templates with YAML frontmatter, each including a description field for progressive disclosure:

  • Work Note β€” date, description, project, status, quarter, tags
  • Decision Record β€” date, description, status (proposed/accepted/deprecated), owner, context
  • Thinking Note β€” date, description, context, tags (scratchpad β€” delete after promoting)
  • Competency Note β€” date, description, current-level, target-level, proficiency table
  • 1:1 Note β€” date, person, key takeaways, action items, quotes
  • Incident Note β€” date, ticket, severity, role, timeline, root cause, impact

πŸ”§ What's Included

🧩 Obsidian Skills

kepano/obsidian-skills pre-installed in .claude/skills/:

  • obsidian-markdown β€” Obsidian-flavored markdown (wikilinks, embeds, callouts, properties)
  • obsidian-cli β€” CLI commands for vault operations
  • obsidian-bases β€” Database-style .base files
  • json-canvas β€” Visual .canvas file creation
  • defuddle β€” Web page to markdown extraction

πŸ” QMD Skill

A custom skill in .claude/skills/qmd/ that teaches the agent to use QMD semantic search proactively β€” before reading files, before creating notes (to check for duplicates), and after creating notes (to find related content that should link to it).


🎨 Customize It

This is a starting point. Adapt it to how you work:

WhatWhere
Your goalsbrain/North Star.md β€” grounds every session
Your orgorg/ β€” add your manager, team, key collaborators
Your competenciesperf/competencies/ β€” match your org's framework
Your tools.claude/commands/ β€” edit for your GitHub org, Slack workspace
Your conventionsCLAUDE.md β€” the operating manual, evolve it as you go
Your domainAdd folders, subagents in .claude/agents/, or classification rules in .claude/scripts/

[!IMPORTANT] CLAUDE.md is the operating manual. When you change conventions, update it β€” your agent reads it every session.


πŸ”„ Upgrading

Ask your agent

The easiest way β€” just tell your agent:

Update this vault to the latest obsidian-mind from https://github.com/breferrari/obsidian-mind

The agent will pull the latest changes, resolve conflicts, and update infrastructure files. Works with Claude Code, Codex CLI, or Gemini CLI.

Updating an existing clone

If you cloned the repo directly:

cd your-vault
git pull origin main

New files (AGENTS.md, GEMINI.md, .codex/, .gemini/) appear automatically and hook scripts are updated in place.

Updating a fork

If you forked the repo:

git remote add upstream https://github.com/breferrari/obsidian-mind.git
git fetch upstream
git merge upstream/main

Resolve any conflicts in files you customized (typically CLAUDE.md, brain/ notes). Infrastructure files (.claude/scripts/, .codex/, .gemini/) should merge cleanly.

Migrating from an older vault

Using an older version of obsidian-mind (or any Obsidian vault)? The /om-vault-upgrade command migrates your content into the latest template:

# 1. Clone the latest obsidian-mind
git clone https://github.com/breferrari/obsidian-mind.git ~/new-vault

# 2. Open it in your agent
cd ~/new-vault && claude   # or codex, or gemini

# 3. Run the upgrade pointing to your old vault
/om-vault-upgrade ~/my-old-vault

The agent will:

  1. Detect your vault version (v1–v3.x, or identify it as a non-obsidian-mind vault)
  2. Inventory every file β€” classify as user content, scaffold, infrastructure, or uncategorized
  3. Present a migration plan β€” you see exactly what will be copied, transformed, and skipped
  4. Execute after your approval β€” transforms frontmatter, fixes wikilinks, rebuilds indexes
  5. Validate β€” checks for orphans, broken links, missing frontmatter

Your old vault is never modified. Use --dry-run to preview the plan without executing.

[!NOTE] Works with any Obsidian vault, not just obsidian-mind. For non-obsidian-mind vaults, the agent reads each note and classifies it semantically β€” routing work notes, people, incidents, 1:1s, and decisions to the right folders.


πŸ—ΊοΈ Roadmap

Contributions welcome. Open an issue first for anything bigger than a one-file change. Especially anything that touches the hooks, the install, or what people need installed. Saves you from building something that can't be merged.


πŸ™ Design Influences


πŸ‘€ Author

Created by Brenno Ferrari β€” Senior iOS Engineer in Berlin, building developer tools with Claude Code.


πŸ“„ License

MIT

Related

How to Install

  1. Download the dashboard markdown file from GitHub
  2. Drop it into your vault (anywhere)
  3. Install the Homepage plugin and point it at the file
  4. Enable any listed CSS snippets for the intended look
Open Repository

Stats

Stars

1976

Forks

279

License

MIT

Last updated 10h ago