Generated banner for obsidian-mind
Generated logo for obsidian-mind

obsidian-mind

Vault template

First committed by breferrari

Published in breferrari/obsidian-mind. Publisher page

5,527 GitHub stars

What it is

A self-organizing Obsidian vault that gives AI coding agents persistent memory.
— the description by breferrari

AutoGineer overview, from the brain’s own files

Obsidian Mind transforms an Obsidian vault into a persistent, structured brain for AI coding agents like Claude Code, Codex, and Gemini CLI. It solves the problem of agent amnesia by maintaining a hybrid memory model that combines file-based storage with semantic search capabilities. The system uses a set of lifecycle hooks to manage agent context, including project status, meeting notes, decisions, and performance tracking. By leveraging a structured folder hierarchy and automated indexing, it ensures that agents can recall past decisions, track project progress, and maintain context across sessions. The vault is designed to be self-maintaining, with automated hygiene checks and routing logic that keeps the knowledge base organized as it grows.

How it works

Memory model: Hybrid

AutoGineer overview, from the brain’s own files

The system uses a combination of Obsidian markdown files for storage and procedural hooks for management. Lifecycle hooks handle tasks like session initialization, content classification, and vault hygiene. The vault is organized into specific folders for work, performance, organizational data, and agent-specific knowledge. Semantic search is provided via an optional QMD integration, which uses local models to index and retrieve information. Agents interact with the vault through commands and MCP tools, allowing them to read, write, and update notes while the underlying scripts ensure that the vault remains structured and linked.

Folders
FolderRoleFiles
.claudeagent-config230
.codexagent-config1
.geminiagent-config21
.githubagent-config11
.obsidianobsidian-config1
brainmemory6
templatestemplates5
.claude-pluginfolder2
.scriptsfolder3
.shardmindfolder6
basesfolder9
orgfolder3
perffolder4
referencefolder1
thinkingfolder1
workfolder6

The agent reads

The agent writes

Requirements

Apps: Obsidian

Databases: Redis, SQLite

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Google Antigravity, Kiro, OpenCode, Amp, Roo Code, Cline, JetBrains Junie, Devin (ex-Windsurf)

Set it up

  1. This brain runs code automatically: 14 hooks (claude-code, codex, gemini-cli). Review .claude/settings.json, .codex/hooks.json, .gemini/settings.json before opening the folder in Claude Code. No step below turns a hook on for you.

    • .claude/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+17 chars]
    • .claude/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+20 chars]
    • .claude/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+18 chars]
    • .claude/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+15 chars]
    • .claude/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+18 chars]
    • .codex/hooks.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/session-start.ts"
    • .codex/hooks.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/classify-message.ts"
    • .codex/hooks.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/validate-write.ts"
    • .codex/hooks.json: node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/stop-checklist.ts"
    • .gemini/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/session-start.ts
    • .gemini/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/classify-message.ts
    • .gemini/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/validate-write.ts
    • .gemini/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/pre-compact.ts
    • .gemini/settings.json: node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/stop-checklist.ts
  2. Clone the repository at the commit AutoGineer scanned:

    git clone https://github.com/breferrari/obsidian-mind.git && cd obsidian-mind && git checkout fae7be467fc5e23bf9d51df7207d41f0c07e2754
  3. In Obsidian, choose “Open folder as vault” and pick the folder.

  4. Point Claude Code at .claude-plugin/marketplace.json: it does not read that file on its own.

  5. cd obsidian-mind && claude

  6. AutoGineer scanned these files at commit fae7be4.

  7. Not scanned by AutoGineerThe author’s MCP configuration (README.md) also starts it in a way AutoGineer does not offer. Read that file: AutoGineer did not scan that path; what it runs is listed under “This brain runs”. https://github.com/breferrari/obsidian-mind/blob/fae7be467fc5e23bf9d51df7207d41f0c07e2754/README.md
  8. Not scanned by AutoGineerThe author’s README also describes installing it from a clone of its repository. Read its install section: AutoGineer did not scan that path. https://github.com/breferrari/obsidian-mind/blob/fae7be467fc5e23bf9d51df7207d41f0c07e2754/README.md#-install-via-shardmind-recommended
  9. Not scanned by AutoGineerThe author also offers https://github.com/breferrari/obsidian-mind/tree/fae7be467fc5e23bf9d51df7207d41f0c07e2754. https://github.com/breferrari/obsidian-mind/tree/fae7be467fc5e23bf9d51df7207d41f0c07e2754
  10. First committed by breferrari. Published in breferrari/obsidian-mind. Licence: MIT License.

Usage

AutoGineer overview, from the brain’s own files

  • Start a new session to load project context and North Star goals.
  • Capture meeting takeaways and decisions using automated commands.
  • Query the vault for past decisions or project history using semantic search.
  • Perform end-of-day wrap-ups to index new notes and identify uncaptured wins.
  • Manage incident response and documentation within the vault structure.
  • Maintain performance records and brag documents for review cycles.
“/om-standup”
The agent loads the North Star goals, active projects, and recent tasks to provide a summary of current work status.
“/om-dump Just had a 1:1 with Sarah. She wants error monitoring added before release.”
The agent updates the person note for Sarah, creates a meeting record, and adds an error monitoring task to the active project note.
“What did we decide about caching?”
The agent uses semantic search to retrieve the specific decision record regarding the Redis migration.
“wrap up”
The agent verifies note links, updates indexes, and identifies uncaptured wins for the brag document.

Documentation by breferrari

🌐 English | 日本語 | 中文 | 한국어

<p align="center"> <img src="obsidian-mind-logo.png" alt="Obsidian Mind" width="120"> </p>

<h1 align="center">Obsidian Mind</h1>

Image: Claude Code Image: Codex CLI Image: Gemini CLI Image: Obsidian Image: Obsidian CLI Image: Obsidian Skills Image: QMD Image: Node Image: 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.

Install via shardmind install or git clone — same vault either way.


⚡ See It In Action

<p align="center"> <img src="obsidian-mind-demo.gif" alt="Obsidian Mind demo — standup and dump commands" width="800"> </p>

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

npm install -g shardmind
mkdir my-vault && cd my-vault
shardmind install github:breferrari/obsidian-mind

shardmind install writes into the current directory, so create and enter a fresh folder first. The wizard collects your name, organization, vault purpose, agents to include, and whether to enable QMD; ShardMind then initializes git, optionally bootstraps QMD, and personalizes brain/North Star.md with your answers. Then:

  1. Open the installed folder as an Obsidian vault

  2. Enable the Obsidian CLI in Settings → General (requires Obsidian 1.12+)

  3. Run your agent in the vault directory: claude, codex, or gemini. Codex runs the vault's hooks only once the folder is trusted and each hook approved: see Using with Other Agents.

  4. Start talking about work

ShardMind is the package manager for Obsidian vault templates. The install adds a .shardmind/ sidecar that powers the wizard, optional modules (skip what you don't use), and three-way-merge upgrades. With every value at its default the install is byte-equivalent to git clone — clone-UX is preserved exactly. Delete .shardmind/ and shard-values.yaml from the installed vault and it keeps working: ShardMind is additive, not load-bearing.

Or clone directly
git clone https://github.com/breferrari/obsidian-mind.git

Or use it as a GitHub template. Skip the wizard, get the bare template. Then run through the same 4 steps above, plus fill in brain/North Star.md with your goals (the ShardMind wizard does this for you).

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. Your agent is instructed (via AGENTS.md, which points to .claude/rules/brain-topics.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 resolves this vault's index name — the qmd_index field from vault-manifest.json when set, otherwise the vault folder name slugified — reads qmd_context, 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
How it works under the hood

QMD runs three small models locally, so there is no API key to set up, no per-query cost, and it works offline:

modelsizejob
embeddinggemma-300M~328MBturns notes and queries into vectors
qmd-query-expansion-1.7B~1.28GBrewrites your query into better search terms
Qwen3-Reranker-0.6B~640MBreorders the shortlist by actual relevance

They download on first use and are cached. QMD offloads to the GPU when it finds one — CUDA on a discrete card, Metal on Apple Silicon — and falls back to CPU otherwise. Check what yours is doing with qmd doctor.

Use qmd 2.5.1 or later. In 2.1, qmd status probes the GPU, and on a machine without one that can take several seconds (4 to 37 s on CI runners, measured 2026-10-13, #349). SessionStart's self-heal reads qmd status under a 5-second limit, so a status that times out leaves it unable to see a broken install.

The three CLI verbs map onto that stack, cheapest first: qmd search is BM25 keywords with no model at all, qmd vsearch is vector-only, and qmd query is the full hybrid. If you want to avoid the larger downloads, search alone is genuinely useful.

What that means for the MCP server

The om server sends a lexical and a vector sub-query, so retrieval finds the note that answers your question even when it shares no keywords with it. Practical consequences worth knowing:

  • Reads are the expensive side, not writes. A query embeds locally before it can search, so recall with a query takes a couple of seconds while recall without one is near-instant. search over notes is fast — it is the vector step that costs.

  • Writing a memory does not wait for the model. The index update is synchronous, so a new memory is immediately retrievable; generating its vector happens in the background, because that only affects where it ranks, not whether it is found.

  • No index, no problem. Without QMD the server falls back to lexical matching. Ordering gets worse; nothing disappears.

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 AGENTS.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

The lifecycle hooks handle routing automatically:

HookWhenWhat
🚀 SessionStartOn startup/resumeQMD re-index + self-heal, inject North Star focus, active work, recent changes, tasks, file listing, vault-hygiene drift flags — held under a byte budget that fits Claude Code's hook output cap, ending with an injection-size meter
💬 UserPromptSubmitEvery messageClassifies content (decision, incident, win, 1:1, architecture, person, project update) and injects routing hints; also hands the agent the Stop report from the previous turn
✍️ PostToolUseAfter writing .mdValidates frontmatter + wikilinks, blocks misplaced memory files, flags oversized notes (split, don't trim) and write-time topic clusters
💾 PreCompactBefore context compactionBacks up session transcript to thinking/session-logs/
🏁 StopAfter every responseChecklist + concrete drift findings (same hygiene scan as SessionStart), shown once per session and again only when they change: you see a short summary, one line per section, and the agent gets the full report with your next message and decides whether to act; hands drift to om-tidy

TIP
You just talk. The hooks handle the routing.

🧩 The Claude Code mod

On Claude Code 2.1.287 or later, the vault also ships a mod: .claude/skills/obsidian-mind/, a plugin whose code runs inside Claude Code. It runs the vault's own hook scripts and changes only how their output reaches the session:

  • Session context arrives as an instruction file, the way AGENTS.md does. It is re-read whole after compaction and /clear (as hook output it shrinks to a pointer), it reaches general-purpose subagents (hook output never does), and it is not cut at Claude Code's 10,000-character hook limit. Its budget is eager_layer_instruction_budget_bytes in vault-manifest.json; sections that never shrink, such as open tasks, can still take it past that. /memory lists it as .claude/session-context.md.

  • The Stop report becomes one line under the answer. When the findings change you see a line beneath Claude's reply, starting with the mod's name — obsidian-mind: vault check: …. Claude Code joins the names of the plugins that answered on Stop with +, so when another plugin also answers, the label reads obsidian-mind+<plugin>: vault check: …. Claude gets the full report with your next message, unseen. A finding marked urgent gets Claude's attention at once instead, once per message you send (a second one waits inside the report); the template's own report has none.

For each event it handles, the mod tells the matching hook to stand down. Wherever the mod does not load, the hooks run exactly as before: Codex and Gemini, older Claude Code, a session started in a vault subfolder (launch from the vault root, or /cd there and /clear), or a folder you have not trusted. It loads only after you accept Claude Code's trust prompt for the vault.

A mod is unsandboxed code that runs with your permissions, so check what it does before trusting the folder: claude plugin validate .claude/skills/obsidian-mind lists every event it hooks and every call it makes (it runs the vault's own scripts, writes the context file, remembers in its own store which report each session was shown, and can submit a prompt for an urgent finding, nothing else). To turn it off, add "enabledPlugins": { "obsidian-mind@skills-dir": false } to .claude/settings.local.json.

<!-- mod-validate:start -->

The two lines that matter in its output, for this version of the mod:

  ❯ ./register.ts hooks: classic.SessionStart, prompt.context, classic.Stop, turn.complete, prompt.submit, turn.start
  ❯ ./register.ts calls: $.fs.write, $.process.run (via runScript), $.prompt.submit, $.session.root, $.state.get, $.state.set, $.store.get (via setShown, shownFor), $.store.set (via setShown), $.ui.invalidate

<!-- mod-validate:end -->

⚡ Token Efficiency

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

TierWhatWhenCost
AlwaysAGENTS.md (plus .claude/rules/ on Claude Code) + SessionStart context (North Star excerpt, git summary, tasks, vault file listing)Session startcapped by the manifest budget, itself held under Claude Code's 10,000-character hook output cap; the meter reports the real size every session
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. Five mechanisms keep the eager layer honest as the vault grows: source-aware injection (resume/compact re-inject only volatile sections — the static bulk is already in-conversation), an injection-size meter as the last line of every injection (you always see what context costs), an injection budget that enforces what the meter measures (over the ceiling, the cheapest-to-lose sections degrade to pointers — and the meter names every one it dropped, because a silent loss is worse than the bloat), a single hook spawn per write (the QMD refresh rides the validation hook), and listing collapse (any folder past a note-count threshold folds to one count line, so a vault can't outgrow the ceiling through whichever folder nobody thought to configure). Both the budget and the threshold are tunable in vault-manifest.json, and the budget is held under Claude Code's 10,000-character hook output cap whatever it is set to, because past the cap a session receives only a 2,000-character preview. 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, Gemini CLI, Antigravity and Grok. Every agent reads one instruction file, AGENTS.md. The hook scripts in .claude/scripts/ and the commands in .claude/commands/ are agent-agnostic — pure Markdown, TypeScript, and shell with no SDK dependencies. .claude/rules/ holds guidance only Claude Code can use (its skills, subagents, auto-memory index, hooks and mod), and the sections AGENTS.md moved out to stay under its size cap. Claude Code and Grok load every file there at session start, so Claude keeps the whole manual; the other agents read a moved section when AGENTS.md points them to it.

AgentReads AGENTS.mdFrom a vault subfolderAlso loadsKnown gaps
Claude CodeNatively, when no CLAUDE.md is presentYes, but @ imports are dropped (upstream).claude/rules/*.mdA CLAUDE.md beside or above AGENTS.md is read instead, silently: see Troubleshooting
Codex CLINativelyYes (walks up to the git root)—Stops reading past ~32 KiB, silently
Gemini CLIThrough .gemini/settings.json (context.fileName)No: see Troubleshooting—What a live session does with it is not yet observed (TBC)
AntigravityNativelyYes— (not .claude/rules/, not CLAUDE.md)Stops reading past ~24,000 bytes, silently. Has a workspace-trust dialog; whether it gates AGENTS.md is TBC (a headless -p run loaded it in a never-opened folder). Its .agents/ manifests are not exercised here (TBC)
GrokOnce the folder is trustedYes, once trusted.claude/rules/*.md and CLAUDE.md, plus project .claude/settings.json hooks and user-level ~/.claude skills, permissions and hooksAn untrusted folder gets no project instructions at all: see Troubleshooting

Observed with scratch vaults as of 2026-10-06 (Claude Code 2.1.291, Codex CLI 0.160.0, Gemini CLI 0.37.1 discovery log, Antigravity 1.3.0, Grok 1.0.46); the measurements are in #321. A test keeps AGENTS.md under 22,000 bytes, so no agent cuts it off.

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

Codex CLI — 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).

Codex runs a project's hooks only once two kinds of trust are in place (observed with Codex CLI 0.160.0 as of 2026-10-13, #345):

  • The vault folder is trusted. Codex records this in ~/.codex/config.toml under [projects.'<path>']. On Windows the key is the \\?\-prefixed path, e.g. [projects.'\\?\C:\path\to\vault'].

  • Each hook is approved. Codex stores each approval as a trusted_hash under [hooks.state]. Approving them in an interactive codex session is expected to write these (inferred: the #345 check stood in for them with --dangerously-bypass-hook-trust, a flag for one non-interactive run).

Until both are in place, Codex runs no hook, and the session gets no vault context.

Gemini CLI — hook config at .gemini/settings.json maps Gemini's event names to the shared hook scripts, and its context.fileName setting points Gemini at AGENTS.md. Gemini reads custom commands only as TOML, so .gemini/commands/ holds a generated wrapper per command that injects the command's .md (node --experimental-strip-types .scripts/gemini-commands.ts regenerates them).

Antigravity and Grok — read AGENTS.md for vault conventions. Their hook, skill and command layers are tracked in #322 and #323.

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 and the obsidian-mind mod are Claude Code-specific. .claude/rules/hooks-per-agent.md maps each hook to each agent's event.


🧠 Reach Your Vault From Any Repo

Your vault normally only helps while you are sitting in it. The om MCP server changes that: a coding session in any other repository can search your notes, read them, follow the graph, and record what it learned back into the vault.

Step 1 — register the server once, for every repo
claude mcp add --scope user om node "/absolute/path/to/your-vault/.claude/scripts/om-mcp.mjs"

User scope is the right default here: it registers in your own config, so the server is available in every directory on the machine with nothing added to any repository. No env var is needed either, because the launcher resolves the vault from its own location.

<details> <summary>Per-repo alternative, and one trap to avoid</summary>

If you would rather a specific repo carry the wiring (so a teammate gets it on clone), put it in that project's .mcp.json:

{
  "mcpServers": {
    "om": {
      "command": "node",
      "args": ["/absolute/path/to/your-vault/.claude/scripts/om-mcp.mjs"]
    }
  }
}

Note the cost: that path is absolute and machine-specific, so committing it breaks every collaborator and every other machine of yours.

Use an absolute path, and do not copy the relative one. This vault's own .mcp.json registers qmd with a relative path (.claude/scripts/qmd-mcp.mjs). That is correct there, because a relative path resolves against the current working directory and a session in the vault is already in it. Reused for om in a consuming project, the same shape silently resolves against that project instead, and the server never starts.

</details>

Step 2 — point the consuming project at the vault

Add this to that project's own instruction file (CLAUDE.md or AGENTS.md), filling in the triggers:

## Where design decisions live

Design rationale for this project is recorded outside this repo, reachable
through the `om` MCP server.

- **`search`** reaches the written record: why a choice was made, what was
  rejected, what a constraint was set against. **Start here.**
- **`expand`** shows a known note's links and backlinks, which is cheaper than
  searching again for its neighbourhood.
- **`recall`** returns short durable lessons scoped to this project. It is empty
  until sessions put things in it, so early on it returns nothing, and that is
  *not* evidence the record is missing.
- **`health`** when something that should be there cannot be found. Every failure
  in this layer looks identical from outside (no results), and this tells them
  apart.

Consult the record before changing:

- <the storage format or schema>
- <the ID or key semantics>
- <the public surface: CLI flags, API shape, exported names>

If that record and this repo disagree, the record holds the *why*. Reconcile
before changing behaviour.

**Say what came back, in whatever you write before implementing:** a plan, a
design note, an issue comment. Name the recorded decisions the work rests on,
anything you found that argues *against* the approach, and an explicit "nothing
recorded on this" when the record is empty, which is a finding rather than a
blank to skip. Consulting once at the start of a task is consulting at the
moment you know least about what you will need; writing the result down moves it
to the moment you commit, while a contradiction is still free to fix.

## Recording what you learn

Two tools, and picking the wrong one is the common mistake. The test is whether
it would help someone working on a **different** project.

- **`remember`** stores a durable lesson: a constraint you discovered, a gotcha
  that cost time, a rule that generalises. Set `confidence`
  (`verified` / `inferred` / `unverified`) honestly and supply `verification`
  when you claim `verified`. For something specific to this project use
  `scope: "project"` with `projects: ["<this-repo>"]`. Reach for
  `scope: "platform"` before `"general"`: a dependency's quirk or a language's
  rule is platform-level however hard-won, and `general` claims it would help
  someone whose stack shares nothing with yours. When you do claim `general`,
  supply `generality` saying why, the same way `verification` backs `verified`.
- **`record_work`** files what happened *here*: changes, decisions and the
  alternatives rejected, what was learned, what is still open, how it was
  verified.

A dependency limitation that would bite any project is a `remember`. "Landed the
watch engine and here is what it cost" is a `record_work`. Do both when both are
true.

Three to five triggers, and name specific nouns. Consult it before changing the storage format, ID semantics, or the CLI surface works. Check the vault for context is exactly the advisory phrasing that gets skipped, because it gives the model nothing to match against the task in front of it.

Anchor the consultation to an artifact, not to a moment. "Consult before changing X" fires once, at the start of a task, which is when the session knows least about what it will need. Requiring the result to appear in whatever the project writes before implementing turns consultation from something a session intends to do into something an artifact is incomplete without. Measured across a day of real use: captures ran roughly four times heavier than consultations, because remember fires on an event (you just learned something) while consulting fires on intention. Event-triggered behaviour happens; intention-triggered behaviour decays.

TIP
Do not lead with recall. It returns memories, and the store is empty on a project's first session by construction: remember refuses when called from inside the vault, since a memory written there would be scoped to the vault and reach nobody. So memories only ever arrive from outside. A snippet that promises recall will return this project's decisions therefore returns nothing on the first run, and fails silently as "no results" rather than as an error.

IMPORTANT
Both steps are required, and the second is not paperwork. Measured: with the server wired and no repo-side instruction, a session made zero vault calls and implemented a design the vault had recorded as explicitly rejected. With the instruction present, it refused and cited the note.

A prohibition in the MCP instructions field propagates into the calling session reliably. A positive "go consult the vault" is advisory and gets skipped whenever a nearer source exists. The server can stop a session doing something; only the project's own law makes one go looking.

That asymmetry decides which side a rule belongs on, and it matters most for anything you would rather not advertise. Writing "this repo deliberately excludes X" into a public repo announces the withholding and points at exactly what is being withheld. The same rule as a prohibition in instructions reaches every session invisibly, and the repo says nothing at all. Routing belongs repo-side because it has to; constraints belong server-side because they can.

What the session gets: search (semantic + keyword), expand (a note's links and backlinks), recall (durable lessons scoped to that repo), remember (record a lesson), record_work (file what happened), reason (judgement across several notes), and health (is the wiring intact?). Plus your notes as readable resources.

reason is the one that thinks. The others retrieve; this one reads the vault with a second Claude session and answers questions that need judgement across notes — is what I am about to do consistent with what these six notes decided? It seeds itself from search, so you never have to search first. It runs on your own CLI default model, so the vault answers at the level you are already working at, and nothing about it is capped: it is Claude, on your machine, under your auth. Every call is logged with its cost, turns, model and wall time. Its answers are marked confidence: inferred and are never recorded as memories on their own — your session decides whether any of it is worth keeping.

Repos are identified by folder name, which is right until it isn't — two repos both called api share one identity and therefore each other's memories. Drop a .om-project file with a distinct name at the repo root to separate them; health tells you which repo it thinks is calling and where that name came from.

Cross-repo memory with an epistemic contract. A lesson learned in one repo reaches the repos it was scoped to and no others. Reach is declared at write time, never guessed at read time, so a sibling project does not inherit another's constraints. Everything recorded carries confidence: verified | inferred | unverified, dated volatile facts, and provenance derived server-side — a session cannot claim to be a project it is not. Corrections supersede rather than overwrite, so the store gets more trustworthy as it grows instead of accumulating contradictions.

Which notes it serves. Your vault, your notes, your session — the default is simply what your vault already declares as your content (user_content_roots), at the granularity you wrote it (work/active/, not all of work/). Set mcp_exposed_roots in vault-manifest.json only if this vault holds material that is not yours to share — employer-confidential notes, a client's data. A note tagged private is never served, and memories are never served as ordinary notes, since they carry their own scope. One case reads across the two: when a capture's promoted: marker carries an anchor, recall serves that block out of brain/ so a foreign repo gets the corrected version rather than the capture as first written — bounded by this same policy, so a private or withheld note is refused there too.

Every read is logged with the calling repo, so "what did that session actually see" is answerable afterwards.

NOTE
Keeping vault material out of a public PR is the contract's job, not the exposure list's — a session can read your vault directly regardless. The prohibition injected into the calling session is the part that measurably holds.

Want the mechanics? ARCHITECTURE.md → Reaching the Vault From Another Repo walks the whole layer with diagrams: the four MCP surfaces and why the non-tool ones matter, the identity handshake, a search call traced end to end, how each memory's reach is evaluated, the write path, and every failure mode against the signal that reveals it.


📅 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-tidySelf-maintenance — acts on every hygiene flag: archive, group, split. Never deletes, never commits
/om-correctSweep a corrected fact — applies it at the single source, links restatements, preserves dated records
/om-vault-auditAudit indexes, links, orphans, stale context
/om-vault-upgradeUpgrade this vault through ShardMind (keeps your local improvements), or import 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 — plus a Stale Actives view (active but untouched 14+ days)
Recently TouchedEvery note by real modified time — the correct answer to "what did I work on recently" (filename dates lie for living notes)
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
AGENTS.md               Operating manual — read by every agent, every session
vault-manifest.json     Template metadata — version, structure, schemas
.shardmindignore        Files excluded from `shardmind install` (CONTRIBUTING, translations, marketing media)
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/
  rules/                Claude Code-only guidance, loaded beside AGENTS.md
  commands/             20 slash commands
  agents/               10 subagents
  scripts/              Hook scripts + charcount.ts utility
  skills/               Obsidian + QMD skills, and the obsidian-mind mod
  settings.json         5 hooks configuration

.scripts/                Vault-level tooling — QMD bootstrap (run once on a fresh clone)

.shardmind/             ShardMind sidecar — only used if installed via `shardmind install`
  shard.yaml            Manifest (name, version, modules, hooks)
  shard-schema.yaml     Wizard values + module gating
  hooks/                bootstrap (git init + QMD), personalize (North Star), post-update

NOTE
.shardmind/ is additive, not load-bearing. A clone-and-open vault never reads it; only the shardmind CLI does. Delete it and the vault keeps working. See the v6 layout contract in shardmind/docs/SHARD-LAYOUT.md.


📝 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 conventionsAGENTS.md — the operating manual, evolve it as you go (.claude/rules/ for Claude Code-only additions)
Your domainAdd folders, subagents in .claude/agents/, or classification rules in .claude/scripts/

IMPORTANT
AGENTS.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 appear automatically and hook scripts are updated in place. If you edited CLAUDE.md, the pull stops on it, because you changed a file the template deleted: move your additions out as Troubleshooting describes, then delete it.

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 AGENTS.md, brain/ notes; a CLAUDE.md you edited conflicts with its deletion, see Troubleshooting). Infrastructure files (.claude/scripts/, .codex/, .gemini/) should merge cleanly.

Adopting an existing clone into ShardMind (v5.x → v6)

Already cloned obsidian-mind and want the wizard, optional modules, and three-way-merge upgrades without losing your customizations? shardmind adopt reconciles your existing vault into a managed v6 install — keeping every byte of your edits and only adding the .shardmind/ sidecar + shard-values.yaml:

npm install -g shardmind
shardmind adopt github:breferrari/obsidian-mind

The 2-way diff UI walks you through any local changes, asks per-file what to keep, then writes the engine metadata. Result: a v6-managed vault with your existing content intact, ready for shardmind update from there forward. No re-cloning.

Migrating from an older vault (or any other vault)

Using a pre-v5 obsidian-mind, or migrating from a totally different 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.


🩺 Troubleshooting

Claude Code ignores the vault's conventions. Claude Code reads a CLAUDE.md in place of AGENTS.md and skips AGENTS.md without saying so. Two ways that happens:

  • A leftover CLAUDE.md in the vault. An update keeps a CLAUDE.md you edited. The session hygiene flags say CLAUDE.md present beside AGENTS.md, and /om-vault-upgrade lists it under Move out. Move what you added to .claude/rules/local.md (or into AGENTS.md if every agent needs it, keeping AGENTS.md under 23 KB, where the hygiene flags start: Antigravity stops reading it at ~24,000 bytes), then delete CLAUDE.md. Nothing is merged automatically.

  • A CLAUDE.md in a folder above the vault. Claude Code reads that one too, and AGENTS.md is skipped. The hygiene flag cannot see it, because it checks the vault root only. Move the vault out from under that folder, or move that file's content somewhere it applies only where you want it.

Gemini CLI loads no instructions when started in a vault subfolder. Gemini's context search walks up the folders, but its settings lookup does not, so a session started in a subfolder never reads the vault's .gemini/settings.json and never learns to look for AGENTS.md. Start Gemini from the vault root.

Gemini ignores what you added to GEMINI.md. Gemini now reads AGENTS.md (through .gemini/settings.json), so a leftover GEMINI.md is never loaded. The hygiene flags say GEMINI.md present beside AGENTS.md, and /om-vault-upgrade lists it under Move out. Move your additions to AGENTS.md, then delete it.

Grok reads nothing from the vault. Grok loads project instructions only from a trusted folder. Trust the vault once: run /hooks-trust in a Grok session, or launch with --trust. One grant covers MCP, LSP, hooks, project instructions and project skills.


🗺️ Roadmap

Issues and bug reports welcome. Code contributions go through assignment: comment on an issue to ask for it, and open a PR once it's assigned to you. A PR for an issue not assigned to you is closed without review. See CONTRIBUTING.md.


🙏 Design Influences


👤 Author

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


📄 License

MIT

README.ja.md

🌐 English | 日本語 | 中文 | 한국어

NOTE
この翻訳はAIの支援を受けて作成されました。不自然な表現や誤訳がありましたら、ぜひIssueやPull Requestでお知らせください。コミュニティからの修正を歓迎します。

<p align="center"> <img src="obsidian-mind-logo.png" alt="Obsidian Mind" width="120"> </p>

<h1 align="center">Obsidian Mind</h1>

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

Claude Codeにすべてを記憶させるObsidianボールト。 セッションを開始して、日々のことを話すだけ — ノート、リンク、インデックス、パフォーマンス管理はClaudeが自動で処理します。すべての会話が前回の続きとして積み重なっていきます。


🔴 課題

AIコーディングエージェントは強力ですが、忘れてしまいます。毎回のセッションがゼロからの出発 — あなたの目標、チーム、パターン、実績に関するコンテキストがありません。同じことを何度も説明し直し、3回前の会話で下した決定が失われます。知識が蓄積されないのです。

🟢 解決策

エージェントに脳を与えましょう。

あなた: "セッション開始"
エージェント: *North Starを読み、アクティブなプロジェクトを確認し、最近の記憶をスキャン*
エージェント: "Project Alphaに取り組んでいますね。BEコントラクトでブロック中です。
              前回のセッションでコーディネーターを分割することに決めましたね。
              明日マネージャーとの1on1があります — レビューブリーフは準備完了です。"

shardmind install または git clone でインストール — どちらも同じボールトです。


⚡ 実際の動作

<p align="center"> <img src="obsidian-mind-demo.gif" alt="Obsidian Mind デモ — standup と dump コマンド" width="800"> </p>

朝のキックオフ:

/om-standup
# → North Star、アクティブプロジェクト、未完了タスク、最近のgit変更を読み込み
# → "アクティブなプロジェクトが2つあります。認証リファクタリングはAPIコントラクト待ちです。
#    14時にSarahとの1on1があります — 前回、オブザーバビリティについて指摘がありました。"

ミーティング後のブレインダンプ:

/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.
→ org/people/Sarah Chen.md をミーティングの内容で更新
→ work/1-1/Sarah 2026-03-26.md を作成(要点まとめ付き)
→ Decision Record を作成: 「RedisマイグレーションをQ2に延期」
→ perf/Brag Doc.md に追加: 「マネージャーから認証アーキテクチャを評価された」
→ work/active/Auth Refactor.md にエラーモニタリングタスクを追加

インシデント対応:

/om-incident-capture https://slack.com/archives/C0INCIDENT/p123456
# → slack-archaeologist がすべてのメッセージ、スレッド、プロフィールを読み取り
# → people-profiler が関係者のノートを作成
# → 完全なタイムライン、根本原因分析、Brag Docへのエントリー

一日の終わり:

あなた: "wrap up"
# → すべてのノートにリンクがあるか確認
# → インデックスを更新
# → brag-spotter が記録されていない実績を発見
# → 改善点を提案

🚀 クイックスタート

📦 ShardMindでインストール(推奨)
npm install -g shardmind
mkdir my-vault && cd my-vault
shardmind install github:breferrari/obsidian-mind

shardmind install はカレントディレクトリに書き込むため、先に新しいフォルダを作成して移動してください。ウィザードがあなたの名前、組織、ボールトの目的、含めるエージェント、QMDを有効化するかどうかを収集します。続いてShardMindがgitを初期化し、必要に応じてQMDをブートストラップし、あなたの回答に基づいてbrain/North Star.mdをパーソナライズします。その後:

  1. インストールされたフォルダをObsidianボールトとして開く

  2. 設定 → 一般でObsidian CLIを有効化(Obsidian 1.12以上が必要)

  3. ボールトディレクトリでエージェントを実行:claude、codex、または**gemini**。Codex はフォルダーが信頼され、各フックが承認されるまでボールトのフックを実行しません:他のエージェントでの利用を参照。

  4. 仕事について話し始める

ShardMindはObsidianボールトテンプレートのパッケージマネージャーです。インストール時に.shardmind/サイドカーが追加され、ウィザード、オプションのモジュール(不要なものはスキップ可能)、3-wayマージのアップグレードを実現します。すべての値がデフォルトの場合、インストール結果はgit cloneとバイト等価 — クローン体験はそのまま保たれます。インストール済みボールトから.shardmind/とshard-values.yamlを削除しても動作し続けます:ShardMindは追加機能であり、必須ではありません。

または直接クローン
git clone https://github.com/breferrari/obsidian-mind.git

またはGitHubテンプレートとして使用。ウィザードをスキップし、素のテンプレートを取得します。その後、上記の4ステップを実行し、加えて**brain/North Star.md**に目標を記入してください(ShardMindウィザードを使えば自動で行われます)。

🔍 推奨:QMDセマンティック検索

ボールト全体のセマンティック検索(ノートのタイトルが「Redis Migration ADR」でも「キャッシュについて何を決めた?」で見つかる):

npm install -g @tobilu/qmd
node --experimental-strip-types .scripts/qmd-bootstrap.ts

ブートストラップは冪等で、再実行しても安全です。vault-manifest.json の qmd_index と qmd_context フィールドを読み取り、名前付きインデックスを登録してエンベディングを生成します(インデックス名は qmd_index が設定されていればその値、未設定ならボールトのフォルダ名をスラッグ化した値)。SessionStart フック、.mcp.json のラッパー、CLI コマンドはすべて同じマニフェストフィールドを参照するため、同一マシン上の他のボールトと QMD データが混ざりません。CLI 実行時は常に --index <名前> を渡してください:

qmd --index obsidian-mind query "キャッシュについて何を決めた?"
qmd --index obsidian-mind update   # 一括編集後
qmd --index obsidian-mind embed    # 多数の新規ノート後

MCPによるネイティブなエージェントツール。 .mcp.jsonにModel Context Protocolサーバーとして登録されています — QMDがインストールされていれば、mcp__qmd__query、mcp__qmd__get、mcp__qmd__multi_getがReadやEditと並んでエージェントのツールメニューに表示されます。サブエージェント、スラッシュコマンド、メイン会話はすべて同じ型付きコントラクトを呼び出します。後から別のMCP対応ツール(データベース、チケット管理、カレンダー)を追加しても、同じ方法でプラグインできます。

内部の仕組み

QMDは3つの小さなモデルをローカルで実行します。設定するAPIキーは不要で、クエリごとの費用もかからず、オフラインでも動作します:

モデルサイズ役割
embeddinggemma-300M~328MBノートとクエリをベクトルに変換
qmd-query-expansion-1.7B~1.28GBクエリをより良い検索語に書き換え
Qwen3-Reranker-0.6B~640MB候補を実際の関連性で並べ替え

初回使用時にダウンロードされ、キャッシュされます。GPUが見つかればオフロードし(ディスクリートGPUではCUDA、Apple SiliconではMetal)、なければCPUにフォールバックします。qmd doctorで自分の環境を確認できます。

3つのCLIコマンドは、安い順にこのスタックへ対応します: qmd searchはモデルを一切使わないBM25キーワード検索、qmd vsearchはベクトルのみ、qmd queryは完全なハイブリッドです。大きなダウンロードを避けたい場合、searchだけでも十分実用的です。

MCPサーバーにとっての意味

omサーバーは字句クエリとベクトルクエリの両方を送るため、キーワードが一致しなくても質問に答えるノートを見つけられます。実務上の要点:

  • 重いのは書き込みではなく読み取りです。 クエリは検索前にローカルで埋め込まれるため、クエリ付きのrecallは数秒かかり、クエリなしのrecallはほぼ即時です。ノートに対するsearchは高速で、コストがかかるのはベクトル処理の部分です。

  • メモリの書き込みはモデルを待ちません。 インデックス更新は同期的なので新しいメモリはすぐ取得可能になり、ベクトル生成はバックグラウンドで行われます。ベクトルは順位にのみ影響し、見つかるかどうかには影響しないためです。

  • インデックスが無くても動きます。 QMDが無い場合、サーバーは字句マッチにフォールバックします。順位は悪くなりますが、何も失われません。


📋 要件

  • Obsidian 1.12以上(CLIサポートのため)

  • Claude Code

  • Node 22+ LTS(フックスクリプト用 — Claude Code / Codex / Gemini CLI と一緒に通常インストール済み)

  • Git(バージョン履歴用)

  • QMD(オプション、セマンティック検索用)

Node フラグについて。 フックスクリプトは Node の --experimental-strip-types フラグで TypeScript を直接実行します。このフラグは Node 22.6+(2024年8月)で安定し、Node 23.6+ ではデフォルトの動作になりました。実験的扱いではあるものの 22 LTS と 24 LTS で挙動は変わっていません。将来の Node リリースでフラグが廃止・改名された場合、.claude/settings.json、.codex/hooks.json、.gemini/settings.json のフックコマンドを1行修正する必要があります。


⚙️ 仕組み

手続き的コードが環境を所有し、エージェントがコンテンツを所有します。 .claude/scripts/のフックが分類、検証、インデックス作成、ライフサイクル注入を処理します — 決定論的で、テスト可能で、どのエージェントでも同じように動作します。ノートを書き、配置し、リンクし、ブリーフを作成する — それらは判断であり、エージェントに委ねられます。両者は小さなハンドオフで出会い(フックがコンテキストを注入し、エージェントがボールトを読む)、どちらも相手の仕事をする必要はありません。

フォルダは目的別にグループ化。リンクは意味別にグループ化。 ノートは1つのフォルダ(その居場所)に存在しますが、多くのノート(そのコンテキスト)にリンクします。エージェントがこのグラフを維持し、作業ノートを人物、意思決定、コンピテンシーに自動的にリンクします。レビューシーズンが来たとき、各コンピテンシーノートのバックリンクがそのままエビデンスの軌跡になっています。リンクのないノートはバグです。

ボールトファーストのメモリがセッション間・マシン間でコンテキストを保持します。永続的な知識はすべてbrain/のトピックノート(git管理、Obsidianで閲覧可能、リンク付き)に保存されます。Claude CodeのMEMORY.md(~/.claude/)はボールト内の場所を指す自動読み込みインデックスであり、ストレージそのものではありません。これにより、記憶はマシン変更後も生き残り、グラフの一部として機能します。

セッションには設計されたライフサイクルがあります。 SessionStartフックが自動的にNorth Starの目標、アクティブプロジェクト、最近の変更、未完了タスク、ボールト全体のファイル一覧、ボールト衛生フラグを注入します — Claudeは白紙からではなく、コンテキストを持ってセッションを開始します。終了時に「wrap up」と言えば、Claudeが/om-wrap-upを実行 — ノートの検証、インデックスの更新、記録漏れの実績の発見を行います。CLAUDE.mdがその間のすべてを統制します:ファイルの配置場所、リンクの仕方、ノートの分割タイミング、意思決定やインシデントの扱い方。

🔗 フック

5つのライフサイクルフックが自動的にルーティングを処理します:

フックタイミング内容
🚀 SessionStart起動/再開時QMD再インデックス+セルフヒール、North Starフォーカス・アクティブプロジェクト・最近の変更・タスク・ファイル一覧・ボールト衛生フラグを注入 — 全体はClaude Codeのフック出力上限に収まるバイトバジェットで抑えられ、最終行は注入サイズメーター
💬 UserPromptSubmit全メッセージコンテンツを分類(意思決定、インシデント、実績、1on1、アーキテクチャ、人物、プロジェクト更新)してルーティングヒントを注入。前のターンのStopレポートもエージェントに渡す
✍️ PostToolUse.md書き込み後フロントマター+ウィキリンクの検証、誤配置メモリファイルのブロック、肥大ノート(削るのではなく分割)と書き込み時トピッククラスタのフラグ
💾 PreCompactコンテキスト圧縮前セッション記録をthinking/session-logs/にバックアップ
🏁 Stop各応答の終了時チェックリスト+具体的なドリフト検出(SessionStartと同じ衛生スキャン)。セッションごとに1回、内容が変わった時のみ再表示。あなたにはセクションごとに1行の短い要約、エージェントには次のメッセージと一緒に完全なレポートが届き、対応するかはエージェントが判断。対応はom-tidyへ

TIP
ただ話すだけ。フックがルーティングを処理します。

🧩 Claude Code の mod

Claude Code 2.1.287 以降では、ボールトは mod も同梱しています。.claude/skills/obsidian-mind/ にある、Claude Code の内部で動くプラグインです。ボールト自身のフックスクリプトを実行し、その出力がセッションに届く経路だけを変えます。

  • セッションコンテキストは、CLAUDE.md と同じく instruction ファイルとして届きます。 コンパクションや /clear の後もそのまま全体が読み直され(フック出力ではポインタに縮みます)、汎用サブエージェントにも届き(フック出力は届きません)、Claude Code のフック出力の 10,000 文字制限で切られません。予算は vault-manifest.json の eager_layer_instruction_budget_bytes です。オープンタスクのように縮まないセクションは、それを超えることがあります。/memory には .claude/session-context.md として表示されます。

  • Stop レポートは回答の下の 1 行になります。 指摘が変わると、Claude の返答の下に、mod の名前で始まる行 obsidian-mind: vault check: … が表示されます。Claude Code は Stop で応答したプラグインの名前を + で連結するため、他のプラグインも応答すると obsidian-mind+<プラグイン>: vault check: … のようになります。Claude は完全なレポートを次のメッセージと一緒に、表示されない形で受け取ります。緊急とマークされた指摘は、代わりにすぐ Claude に届きます(あなたのメッセージ 1 通につき 1 回まで。2 件目はレポートの中で待ちます)。テンプレート自身のレポートにはそれはありません。

mod は処理するイベントごとに、対応するフックに待機を伝えます。mod が読み込まれない場所では、フックはこれまでどおり動きます。Codex と Gemini、古い Claude Code、ボールトのサブフォルダで始めたセッション(ボールトのルートで起動するか、そこへ /cd して /clear)、信頼していないフォルダです。mod は、ボールトに対する Claude Code の信頼確認を承認した後にだけ読み込まれます。

mod はサンドボックス化されておらず、あなたの権限で動くコードです。フォルダを信頼する前に内容を確認してください。claude plugin validate .claude/skills/obsidian-mind が、フックするイベントと行う呼び出しをすべて一覧にします(ボールト自身のスクリプトを実行し、コンテキストファイルを書き、各セッションにどのレポートを見せたかを自分のストアに記録し、緊急の指摘があればプロンプトを送るだけです)。無効にするには、.claude/settings.local.json に "enabledPlugins": { "obsidian-mind@skills-dir": false } を追加します。

<!-- mod-validate:start -->

この版の mod で、その出力のうち確認すべき 2 行は次のとおりです:

  ❯ ./register.ts hooks: classic.SessionStart, prompt.context, classic.Stop, turn.complete, prompt.submit, turn.start
  ❯ ./register.ts calls: $.fs.write, $.process.run (via runScript), $.prompt.submit, $.session.root, $.state.get, $.state.set, $.store.get (via setShown, shownFor), $.store.set (via setShown), $.ui.invalidate

<!-- mod-validate:end -->

⚡ トークン効率

obsidian-mindはボールト全体をコンテキストに読み込みません。階層型ローディングでトークンコストを抑えます:

階層内容タイミングコスト
常時CLAUDE.md + SessionStartコンテキスト(North Star抜粋、git概要、タスク、ボールトファイル一覧)セッション開始時マニフェストのバジェットが上限(それ自体もClaude Codeの10,000文字のフック出力上限の内側に抑えられる)。実サイズは毎セッション末尾のメーターが表示
オンデマンドQMDセマンティック検索結果エージェントが特定のコンテキストを必要とした時対象のみ
トリガー分類ルーティングヒント毎メッセージ~100トークン
トリガーPostToolUse検証.md書き込み後~200トークン
まれファイル全体の読み込み明示的に必要な場合のみ可変

SessionStartは軽量なコンテキストを読み込みます — 主要ファイルからの短い抜粋、ファイル名、git概要のみで、ノート全体は読み込みません。エージェントはQMDで意味検索してからファイルを読むため、関連する情報のみを取得します。分類フックはメッセージごとに軽量なNode呼び出し1回です。検証フックはMarkdown書き込み時のみ発火し、除外パスはスキップします。 ボールトが成長しても注入層を正直に保つ5つの仕組み: ソース認識注入(resume/compact時は揮発セクションのみ再注入 — 静的な大部分はすでに会話内にある)、全注入の最終行に付く注入サイズメーター、メーターが計測する値を実際に強制する注入バジェット(上限を超えると失っても影響の小さいセクションからポインタに縮退し、縮退したものはメーターに必ず名前が出る — 黙って失われる方が肥大化より悪いため)、書き込みごとのフック起動は1プロセスのみ(QMDリフレッシュは検証フックに同乗)、一覧の折りたたみ(ノート数のしきい値を超えたフォルダは1行のカウント表示に畳まれるので、誰も設定し忘れたフォルダ経由でボールトが上限を超えて育つことはない)。バジェットとしきい値はどちらも vault-manifest.json で調整できます。ただしバジェットは設定値にかかわらずClaude Codeの10,000文字のフック出力上限の内側に抑えられます。上限を超えると、セッションには2,000文字のプレビューしか届かないためです。

🌐 他のエージェントでの利用

obsidian-mindはClaude Code、Codex CLI、Gemini CLIで動作します。CLAUDE.mdのボールト規約、.claude/scripts/のフックスクリプト、.claude/commands/のコマンドはすべてエージェント非依存です — 純粋なMarkdown、TypeScript、シェルでSDK依存はありません。

Claude Code — フルサポート。フック、コマンド、サブエージェント、メモリシステムがすべてそのまま動作します。

Codex CLI — AGENTS.mdをネイティブに読み込みます。.codex/hooks.jsonのフック設定がClaude Codeと同じフックスクリプトを接続 — セッションコンテキスト、メッセージ分類、書き込み検証が自動的に動作します。

Codex がプロジェクトのフックを実行するには、2 つの信頼が必要です(Codex CLI 0.160.0 で確認、2026-10-13 時点、#345)。

  • ボールトのフォルダーが信頼されていること。 Codex は ~/.codex/config.toml の [projects.'<path>'] に記録します。Windows ではキーが \\?\ 付きのパスになります(例: [projects.'\\?\C:\path\to\vault'])。

  • 各フックが承認されていること。 Codex は各承認を [hooks.state] の trusted_hash として保存します。対話型の codex セッションで承認するとこれが書き込まれるはずです(推測:#345 の確認では、1 回の非対話実行用のフラグ --dangerously-bypass-hook-trust で代用しました)。

両方が揃うまで Codex はフックを一切実行せず、セッションにボールトのコンテキストは届きません。

Gemini CLI — GEMINI.mdをネイティブに読み込みます。.gemini/settings.jsonのフック設定がGeminiのイベント名を共有フックスクリプトにマッピングします。

その他のエージェント(Cursor、Windsurf、GitHub Copilot、JetBrains AI)— AGENTS.mdでボールト規約を読み取ります。フックサポートはエージェントにより異なります。

NOTE
フック、コマンド、サブエージェントプロンプト、ボールトメモリ(brain/)はすべてエージェント非依存です。~/.claude/の自動メモリローダーのみがClaude Code専用です。詳細はAGENTS.mdをご覧ください。


🧠 どのリポジトリからでもボールトにアクセス

ボールトは通常、その中で作業しているときにしか役立ちません。om MCPサーバーがそれを変えます。他のあらゆるリポジトリのコーディングセッションが、ノートを検索し、読み、グラフをたどり、学んだことをボールトに記録できるようになります。

{
  "mcpServers": {
    "om": {
      "command": "node",
      "args": ["/path/to/your-vault/.claude/scripts/om-mcp.mjs"]
    }
  }
}

これは利用側プロジェクトの.mcp.jsonに記述します。次に、そのプロジェクト自身のCLAUDE.mdにボールトを指し示す短いセクションを追加してください。

IMPORTANT
両方の手順が必須で、2つ目は事務作業ではありません。 実測: サーバーを接続してもリポジトリ側の指示がない場合、セッションはボールトを一度も呼び出さず、ボールトが明確に却下したと記録していた設計をそのまま実装しました。指示があった場合は、実装を拒否しノートを引用しました。

MCPのinstructionsフィールドにおける禁止事項は呼び出し側セッションへ確実に伝播します。一方「ボールトを参照せよ」という肯定的な指示は助言的で、より近い情報源があれば無視されます。サーバーはセッションを止められますが、セッションに探しに行かせられるのはそのプロジェクト自身の規約だけです。

セッションが得られるもの: search(セマンティック+キーワード)、expand(ノートのリンクと被リンク)、recall(そのリポジトリにスコープされた恒久的な教訓)、remember(教訓の記録)、record_work(作業内容の記録)、reason(複数ノートにまたがる判断)、health(配線は正常か)。加えて、ノートを読み取り可能なリソースとして提供します。

思考するのはreasonだけです。 他が検索するのに対し、これは2つ目のClaudeセッションでボールトを読み、ノートをまたぐ判断を要する問いに答えます — これから行おうとしていることは、これら6つのノートが決めた内容と整合しているか? 内部で先に検索を行うため、事前に検索する必要はありません。あなた自身のCLIデフォルトモデルで動くので、ボールトは今あなたが作業しているのと同じ水準で答えます。そして一切の上限はありません — これはあなたのマシン上で、あなたの認証のもとで動くClaudeです。呼び出しごとにコスト・ターン数・モデル・実経過時間が記録されます。回答はconfidence: inferredが付き、それ単体でメモリとして記録されることはありません — 残す価値があるかはあなたのセッションが決めます。

リポジトリはフォルダ名で識別されます。 これは通常正しく、稀に誤ります: apiという名前のリポジトリが2つあると同一の識別子を共有し、互いのメモリを受け取ってしまいます。リポジトリのルートに.om-projectファイルを置き、別の名前を書けば分離できます。healthがどのリポジトリとして認識しているか、その名前がどこから来たかを教えてくれます。

認識論的契約を伴うリポジトリ横断メモリ。 あるリポジトリで学んだ教訓は、スコープ指定されたリポジトリにのみ届きます。到達範囲は読み取り時に推測されるのではなく書き込み時に宣言されるため、兄弟プロジェクトが他方の制約を継承することはありません。記録されるすべてにconfidence: verified | inferred | unverified、変動しやすい事実の日付、そしてサーバー側で導出される来歴が付随します — セッションが自分とは異なるプロジェクトを名乗ることはできません。訂正は上書きではなく置き換えとして記録されるため、ストアは矛盾を蓄積するのではなく、成長するほど信頼性が高まります。

何が提供されるか。 あなたのボールト、あなたのノート、あなたのセッションです。デフォルトは、ボールトがすでに自分のコンテンツとして宣言しているもの(user_content_roots)を、書いたままの粒度で使います(work/全体ではなくwork/active/)。vault-manifest.jsonのmcp_exposed_rootsを設定するのは、あなたが共有する権限を持たない素材 — 雇用主の機密情報やクライアントのデータ — をこのボールトが抱えている場合だけです。privateタグの付いたノートは提供されず、メモリは独自のスコープを持つため通常のノートとしては提供されません。ひとつだけ両者をまたぐケースがあります。キャプチャのpromoted:マーカーがアンカーを持つ場合、recallはbrain/のそのブロックを提供するため、他リポジトリは最初に書かれたキャプチャではなく修正済みの版を受け取ります。これも同じポリシーに従うので、privateや非公開のノートはここでも拒否されます。すべての読み取りは呼び出し元リポジトリとともに記録されます。

NOTE
ボールトの内容を公開PRに出さないようにするのは、公開範囲リストではなく契約の仕事です。セッションはいずれにせよボールトを直接読めます。呼び出し側セッションに注入される禁止事項こそが、実測で効果を持つ部分です。


📅 日常ワークフロー

朝: /om-standupを実行。エージェントがNorth Star、アクティブプロジェクト、未完了タスク、最近の変更を読み込みます。構造化されたサマリーと優先度の提案が表示されます。

日中: 自然に話しましょう。下した決定、発生したインシデント、終わったばかりの1on1、覚えておきたい実績を伝えてください。分類フックがエージェントに各情報を正しく整理するよう促します。まとめてダンプしたい場合は/om-dumpを使い、すべてを一度に語ってください。

終業時: 「wrap up」と言えば、エージェントが/om-wrap-upを呼び出します — ノートの検証、インデックスの更新、リンクの確認、記録漏れの実績の発見を行います。

週次: /om-weeklyを実行してセッション横断の振り返り — North Starとの整合性確認、パターンの発見、記録漏れの実績、翌週の優先事項。/om-vault-auditを実行して孤立ノート、壊れたリンク、古くなったコンテンツを検出します。

レビューシーズン: /om-review-brief managerを実行すれば、エビデンスがすべてリンクされた構造化レビュー準備ドキュメントが生成されます。


🛠️ コマンド

.claude/commands/で定義されています。任意のClaude Codeセッションで実行できます。

コマンド機能
/om-standup朝のキックオフ — コンテキスト読み込み、前日の振り返り、タスクの表示、優先度の提案
/om-dumpフリーフォームキャプチャ — 何でも自然に話せば、適切なノートに振り分け
/om-wrap-upセッション全体のレビュー — ノート、インデックス、リンクの検証、改善点の提案
/om-humanize文体の調整 — Claudeが書いたテキストをあなたが書いたように修正
/om-weekly週次振り返り — セッション横断のパターン、North Starとの整合性、記録漏れの実績
/om-prep-1on11on1の準備 — 相手のコンテキスト、未解決事項、提案アジェンダを読み込み
/om-meetingトピック別ミーティング準備 — 未解決事項、ブロッカー、考慮すべきポイントを整理
/om-intakeミーティングノート受信箱を処理 — work/meetings/のファイルを分類して適切なノートに振り分け
/om-capture-1on11on1ミーティングのトランスクリプトを構造化ボールトノートとしてキャプチャ
/om-incident-captureSlack/チャンネルからインシデントを構造化ノートとしてキャプチャ
/om-slack-scanSlackチャンネル/DMをエビデンス収集のためにディープスキャン
/om-peer-scanレビュー準備のために同僚のGitHub PRをディープスキャン
/om-review-briefレビューブリーフを生成(マネージャー版またはピア版)
/om-self-reviewレビューシーズン用の自己評価を作成 — プロジェクト、コンピテンシー、原則
/om-review-peerピアレビューを作成 — プロジェクト、原則、パフォーマンスサマリー
/om-correct修正した事実を一括反映 — 単一の情報源に適用し、他ノートの記述はリンクに置換、日付付きの記録は保全
/om-vault-auditインデックス、リンク、孤立ノート、古いコンテキストを監査
/om-vault-upgrade既存ボールトからコンテンツをインポート — バージョン検出、分類、移行
/om-project-archive完了プロジェクトをactive/からarchive/に移動し、インデックスを更新
/om-tidyセルフメンテナンス — 衛生フラグに基づき、完了ノートのアーカイブ、クラスタのフォルダ化、肥大ノートの分割を実行。削除もコミットもしない

🤖 サブエージェント

分離されたコンテキストウィンドウで実行される専門エージェント。メインの会話を汚さずに重い処理を担当します。

エージェント目的呼び出し元
brag-spotter記録漏れの実績やコンピテンシーギャップを発見/om-wrap-up, /om-weekly
context-loader人物、プロジェクト、コンセプトに関するボールトコンテキストをすべて読み込み直接呼び出し
cross-linker不足しているウィキリンク、孤立ノート、壊れたバックリンクを発見/om-vault-audit
people-profilerSlackプロフィールから人物ノートを一括作成/更新/om-incident-capture
review-prepレビュー期間のパフォーマンスエビデンスをすべて集約/om-review-brief
slack-archaeologistSlackの完全な復元 — すべてのメッセージ、スレッド、プロフィール/om-incident-capture
vault-librarianボールトの徹底メンテナンス — 孤立ノート、壊れたリンク、古いノート/om-vault-audit
review-fact-checkerレビュー原稿のすべての主張をボールトのソースと照合して検証/om-self-review, /om-review-peer
vault-migratorソースボールトからコンテンツを分類、変換、移行/om-vault-upgrade

NOTE
サブエージェントは.claude/agents/で定義されています。ドメイン固有のワークフロー用に独自のエージェントを追加できます。


📊 パフォーマンスグラフ

ボールトはパフォーマンス追跡システムとしても機能します:

  1. コンピテンシーノート(perf/competencies/)が組織のコンピテンシーフレームワークを定義 — コンピテンシーごとに1つのノート

  2. 作業ノートが## Relatedセクションでコンピテンシーにリンクし、何を実証したかを注記

  3. バックリンクが自動的に蓄積 — レビュー準備は各コンピテンシーノートのバックリンクパネルを読むだけ

  4. Brag Docが四半期ごとの実績をエビデンスノートへのリンク付きで集約

  5. **/om-peer-scan**が同僚のGitHub PRをディープスキャンし、構造化されたエビデンスをperf/evidence/に記録

  6. **/om-review-brief**がすべてを集約して完全なレビューブリーフを生成:Bragエントリー、意思決定、インシデント、コンピテンシーエビデンス、1on1フィードバック

TIP
始め方:テンプレートからコンピテンシーノートを作成し、作業を進めながら作業ノートをリンクしていくだけ。あとはグラフが処理します。


📋 Bases

bases/フォルダには、ノートのフロントマタープロパティを検索するデータベースビューが格納されています。ノートが変更されると自動的に更新されます。

Base表示内容
Work Dashboard四半期でフィルタリングされ、ステータスでグループ化されたアクティブプロジェクト — 14日以上更新のないアクティブノートを示す Stale Actives ビュー付き
Recently Touched実際の更新時刻順の全ノート — 「最近何に取り組んだか」への正しい答え(生きたノートではファイル名の日付は当てにならない)
Incidents重要度と日付で並べ替えられた全インシデント
People Directoryorg/people/の全員(役割、チーム付き)
1:1 History人物と日付でソート可能な全1on1ノート
Review Evidence人物とサイクルでグループ化されたPRスキャンとエビデンス
Competency Mapバックリンクからのエビデンス数付きコンピテンシー一覧
Templates全テンプレートへのクイックアクセス

Home.mdがこれらのビューを埋め込んでおり、ボールトのダッシュボードとして機能します。


📁 ボールト構造

Home.md                 ボールトのエントリーポイント — 埋め込みBaseビュー、クイックリンク
CLAUDE.md               運用マニュアル — エージェントが毎セッション読み込み
AGENTS.md               マルチエージェントガイド — Codex、Cursor、Windsurf等
GEMINI.md               マルチエージェントガイド — Gemini CLI
vault-manifest.json     テンプレートメタデータ — バージョン、構造、スキーマ
.shardmindignore        `shardmind install` から除外されるファイル(CONTRIBUTING、翻訳、マーケティング素材)
CHANGELOG.md            バージョン履歴
CONTRIBUTING.md         テンプレート開発チェックリスト
README.md               プロダクトドキュメント
LICENSE                 MITライセンス

bases/                  動的データベースビュー(Work Dashboard、Incidents、Peopleなど)

work/
  active/               現在のプロジェクト(常時1〜3ファイル)
  archive/YYYY/         完了した作業(年別に整理)
  incidents/            インシデントドキュメント(メインノート + RCA + ディープダイブ)
  1-1/                  1on1ミーティングノート — <人名> YYYY-MM-DD.md
  Index.md              全作業のMap of Content

org/
  people/               人物ごとに1ノート — 役割、チーム、関係性、重要な出来事
  teams/                チームごとに1ノート — メンバー、スコープ、関わり
  People & Context.md   組織知識のMOC

perf/
  Brag Doc.md           実績の継続記録(エビデンスへのリンク付き)
  brag/                 四半期ごとのBragノート(各四半期1つ)
  competencies/         コンピテンシーごとに1ノート(リンクターゲット)
  evidence/             PRディープスキャン、レビュー用データ抽出
  <cycle>/              レビューサイクルのブリーフとアーティファクト

brain/
  North Star.md         目標とフォーカスエリア — 毎セッション読み込み
  Memories.md           記憶トピックのインデックス
  Key Decisions.md      重要な意思決定とその理由
  Patterns.md           作業全体で観察された繰り返しパターン
  Gotchas.md            うまくいかなかったことその理由
  Skills.md             カスタムワークフローとスラッシュコマンド

reference/              コードベースの知識、アーキテクチャマップ、フロードキュメント
thinking/               ドラフト用スクラッチパッド — 知見を昇格させたら削除
templates/              YAMLフロントマター付きObsidianテンプレート

.claude/
  commands/             18個のスラッシュコマンド
  agents/               9個のサブエージェント
  scripts/              フックスクリプト + charcount.tsユーティリティ
  skills/               Obsidian + QMDスキル、obsidian-mind mod
  settings.json         5つのフック設定

.scripts/                ボールトレベルのツール — QMDブートストラップ(新規クローン時に一度実行)

.shardmind/             ShardMindサイドカー — `shardmind install`でインストールした場合のみ使用
  shard.yaml            マニフェスト(名前、バージョン、モジュール、フック)
  shard-schema.yaml     ウィザードの値 + モジュールゲーティング
  hooks/                bootstrap(git初期化 + QMD)、personalize(North Star)、post-update

NOTE
.shardmind/は追加機能であり、必須ではありません。 クローンして開くボールトはこれを読み込みません。shardmind CLIだけが読み込みます。削除してもボールトは動作し続けます。v6レイアウト契約はshardmind/docs/SHARD-LAYOUT.mdを参照してください。


📝 テンプレート

YAMLフロントマター付きテンプレート。段階的開示のためのdescriptionフィールドを含みます:

  • Work Note — date、description、project、status、quarter、tags

  • Decision Record — date、description、status(proposed/accepted/deprecated)、owner、context

  • Thinking Note — date、description、context、tags(スクラッチパッド — 昇格後に削除)

  • 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


🔧 同梱内容

🧩 Obsidianスキル

kepano/obsidian-skillsが.claude/skills/にプリインストール済み:

  • obsidian-markdown — Obsidianフレーバーのmarkdown(ウィキリンク、埋め込み、コールアウト、プロパティ)

  • obsidian-cli — ボールト操作用CLIコマンド

  • obsidian-bases — データベーススタイルの.baseファイル

  • json-canvas — ビジュアル.canvasファイル作成

  • defuddle — WebページからMarkdownへの変換

🔍 QMDスキル

.claude/skills/qmd/にあるカスタムスキル。ClaudeにQMDセマンティック検索を積極的に活用するよう教えます — ファイルを読む前、ノートを作成する前(重複チェック)、ノートを作成した後(リンクすべき関連コンテンツの発見)に使用します。


🎨 カスタマイズ

これは出発点です。あなたの働き方に合わせて適応させてください:

対象場所
あなたの目標brain/North Star.md — すべてのセッションの基盤
あなたの組織org/ — マネージャー、チーム、主要なコラボレーターを追加
あなたのコンピテンシーperf/competencies/ — 組織のフレームワークに合わせる
あなたのツール.claude/commands/ — GitHub org、Slackワークスペースに合わせて編集
あなたの規約CLAUDE.md — 運用マニュアル、使いながら進化させる
あなたのドメインフォルダの追加、.claude/agents/へのサブエージェント追加、.claude/scripts/への分類ルール追加

IMPORTANT
CLAUDE.mdは運用マニュアルです。規約を変更したら更新してください — エージェントは毎セッション読み込みます。


🔄 アップグレード

エージェントに頼む

一番簡単な方法 — エージェントに伝えるだけ:

このボールトを最新のobsidian-mindに更新して https://github.com/breferrari/obsidian-mind

エージェントが最新の変更を取得し、コンフリクトを解消し、インフラファイルを更新します。Claude Code、Codex CLI、Gemini CLIで動作します。

既存クローンの更新

リポジトリを直接クローンした場合:

cd your-vault
git pull origin main

新しいファイル(AGENTS.md、GEMINI.md、.codex/、.gemini/)が自動的に追加され、フックスクリプトも更新されます。

フォークの更新

リポジトリをフォークした場合:

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

カスタマイズしたファイル(通常はCLAUDE.md、brain/ノート)のコンフリクトを解消してください。インフラファイル(.claude/scripts/、.codex/、.gemini/)はクリーンにマージされます。

既存のクローンをShardMindに取り込む(v5.x → v6)

すでにobsidian-mindをクローンしていて、カスタマイズを失わずにウィザード、オプションのモジュール、3-wayマージのアップグレードが欲しい?shardmind adoptが既存のボールトを管理されたv6インストールへと整合させます — あなたの編集を1バイトも失わず、.shardmind/サイドカーとshard-values.yamlを追加するだけです:

npm install -g shardmind
shardmind adopt github:breferrari/obsidian-mind

2-way diffのUIがローカルの変更箇所を案内し、ファイルごとに何を残すか確認した上で、エンジンのメタデータを書き込みます。結果:既存のコンテンツが無傷のままのv6管理ボールトが手に入り、以降はshardmind updateが使えます。再クローン不要。

古いボールトからの移行(またはその他のボールト)

v5以前のobsidian-mindを使っている、または全く別のObsidianボールトから移行したい?/om-vault-upgradeコマンドがコンテンツを最新テンプレートに移行します:

# 1. 最新のobsidian-mindをクローン
git clone https://github.com/breferrari/obsidian-mind.git ~/new-vault

# 2. エージェントで開く
cd ~/new-vault && claude   # または codex、gemini

# 3. 古いボールトを指定してアップグレードを実行
/om-vault-upgrade ~/my-old-vault

エージェントが以下を行います:

  1. 検出 — ボールトのバージョンを特定(v1〜v3.x、またはobsidian-mind以外のボールトとして識別)

  2. 棚卸し — すべてのファイルを分類(ユーザーコンテンツ、スキャフォールド、インフラ、未分類)

  3. 移行プランの提示 — コピー、変換、スキップされるものを正確に確認できます

  4. 承認後に実行 — フロントマターの変換、ウィキリンクの修正、インデックスの再構築

  5. 検証 — 孤立ノート、壊れたリンク、不足しているフロントマターをチェック

古いボールトは一切変更されません。--dry-runを使えば、実行せずにプランだけをプレビューできます。

NOTE
obsidian-mindだけでなく、あらゆるObsidianボールトで動作します。obsidian-mind以外のボールトの場合、エージェントは各ノートを読んで意味的に分類し、作業ノート、人物、インシデント、1on1、意思決定を適切なフォルダに振り分けます。


🗺️ ロードマップ

Issue とバグ報告を歓迎します。 コードのコントリビューションはアサイン制です。Issue にコメントして担当を申し出て、アサインされてから PR を開いてください。あなたにアサインされていない Issue への PR はレビューせずにクローズします。詳しくは CONTRIBUTING.md を参照してください。


🙏 設計上の影響を受けたもの

  • kepano/obsidian-skills — 公式Obsidianエージェントスキル

  • James Bedford — ボールト構造の哲学、AI生成コンテンツの分離

  • arscontexta — descriptionフィールドによる段階的開示、セッションフック


👤 作者

Brenno Ferrari が作成 — ベルリン在住のシニアiOSエンジニア、Claude Codeで開発者ツールを構築中。


📄 ライセンス

MIT

329 files · 3 not served here

Advantages

  • Provides persistent memory across sessions, preventing agents from starting from zero. evidence: README.md
  • Uses local semantic search for efficient, offline retrieval of information. evidence: README.md
  • Automates vault hygiene and organization through lifecycle hooks. evidence: README.md

Limitations

  • Requires manual setup of hooks and optional dependencies like QMD for full functionality. evidence: README.md
  • Semantic search indexing can be resource-intensive on machines without a dedicated GPU. evidence: README.md
  • Hook scripts rely on experimental Node.js flags that may change in future versions. evidence: README.md

Security

Risk level: High risk

This brain runs

Agent instructions that run or fetch something (82)

  • .claude/agents/brag-spotter.md: `git log --since="<quarter start>" --oneline` on the vault itself
  • .claude/agents/correction-sweep.md: Run both.
  • .claude/agents/review-prep.md: **Git History** (optional): `git log --since="<start>" --until="<end>" --oneline` for volume of vault activity during the period.
  • .claude/agents/vault-librarian.md: Run a full health check and produce a maintenance report.
  • .claude/agents/vault-librarian.md: **Orphan Detection**: Run `obsidian orphans` (or `grep -rL '\[\[' work/ org/ perf/ brain/ reference/` as fallback).
  • .claude/agents/vault-librarian.md: **Broken Wikilinks**: Run `obsidian unresolved` (or grep for `\[\[.*\]\]` patterns and check if targets exist).
  • .claude/agents/vault-migrator.md: **Task**: Execute the migration plan — read from source, transform, write to target.
  • .claude/commands/om-correct.md: Run it **at the moment of correction**, not on a schedule.
  • .claude/commands/om-humanize.md: The user can run `git diff` for the full picture.
  • .claude/commands/om-humanize.md: If charcount matters (review content in `perf/`), verify limits after editing with `node --experimental-strip-types .claude/scripts/charcount.ts`.
  • .claude/commands/om-incident-capture.md: "Should I run `/om-vault-audit` to verify everything links properly?"
  • .claude/commands/om-intake.md: No arguments needed — just drop files and run.
  • .claude/commands/om-intake.md: Run this command after.
  • .claude/commands/om-intake.md: Before routing, run `qmd query "<meeting topic or person name>"` to find existing notes the content should attach to.
  • .claude/commands/om-meeting.md: **Search the vault** — run `qmd query "$ARGUMENTS"` and `qmd vsearch "$ARGUMENTS"` to find everything related to the topic, including semantically related content
  • .claude/commands/om-prep-1on1.md: **Check open tasks** — run `obsidian tasks daily todo`;
  • .claude/commands/om-prep-1on1.md: Run `/om-capture-1on1 $ARGUMENTS` to file the notes into `work/1-1/` and update the person note.
  • .claude/commands/om-project-archive.md: git mv "work/active/<Note>.md" "work/archive/YYYY/"
  • .claude/commands/om-project-archive.md: git mv "work/active/<Topic>" "work/archive/YYYY/<Topic>"
  • .claude/commands/om-project-archive.md: Run a quick check that no wikilinks are broken (Obsidian resolves by name, so moves shouldn't break links)
  • .claude/commands/om-review-peer.md: PR evidence from `perf/evidence/<Name> PRs - <cycle>.md` (run `/om-peer-scan` if missing)
  • .claude/commands/om-review-peer.md: Use `node --experimental-strip-types .claude/scripts/charcount.ts <file> "<section>" "" <limit>` to verify.
  • .claude/commands/om-review-peer.md: Run these before presenting the draft:
  • .claude/commands/om-review-peer.md: [ ] All sections within your tool's character limit (use `node --experimental-strip-types .claude/scripts/charcount.ts <file> "<section>" "" <limit>`)
  • .claude/commands/om-self-review.md: [ ] All sections within your tool's character limit (use `node --experimental-strip-types .claude/scripts/charcount.ts <file> "<section>" "" <limit>`)
  • .claude/commands/om-standup.md: Run the morning standup.
  • .claude/commands/om-standup.md: Re-reading `Home.md`, `brain/North Star.md`, or re-running `git log` doubles the token cost for zero new information.
  • .claude/commands/om-tidy.md: Run on demand, during wrap-up when flags are present, or when the flag list has visibly piled up.
  • .claude/commands/om-tidy.md: **Completed-not-archived** — `git mv` from `work/active/` to `work/archive/YYYY/`;
  • .claude/commands/om-tidy.md: `node --experimental-strip-types .claude/scripts/tidy-fix.ts [--apply]` runs the DETERMINISTIC subset from cron with no agent: archives completed work, migrates misplaced memory files (copy → regenerate index → verify → remove), and refuses every judgment class with a pointer back here.
  • .claude/commands/om-tidy.md: Dry-run by default.
  • .claude/commands/om-vault-audit.md: If a note is in the wrong folder, move it with `git mv`
  • .claude/commands/om-vault-upgrade.md: /om-vault-upgrade --dry-run # show the upgrade plan only
  • .claude/commands/om-vault-upgrade.md: /om-vault-upgrade <path-to-source-vault> --dry-run
  • .claude/commands/om-vault-upgrade.md: /om-vault-upgrade --source <path-to-source-vault> [--dry-run]
  • .claude/commands/om-vault-upgrade.md: `--dry-run` — produce the plan without changing anything
  • .claude/commands/om-vault-upgrade.md: upgrade with `npm i -g shardmind@latest`).
  • .claude/commands/om-vault-upgrade.md: node --experimental-strip-types .claude/scripts/upgrade-plan.ts
  • .claude/commands/om-vault-upgrade.md: **Managed** (`.shardmind/state.json` exists): it reads `shardmind --json` and `shardmind update --dry-run --json`.
  • .claude/commands/om-vault-upgrade.md: It reads `shardmind adopt … --from-version <v> --dry-run --yes --json` and hashes each differing file against that release.
  • .claude/commands/om-vault-upgrade.md: With `--dry-run`, stop here.
  • .claude/commands/om-vault-upgrade.md: ShardMind executes only through its terminal UI (`--json` works with `--dry-run` only), so run it non-interactively: `CI=true … --yes < /dev/null`.
  • .claude/commands/om-vault-upgrade.md: **Conflicts:** ask the user to run `!
  • .claude/commands/om-vault-upgrade.md: A managed update deletes an untouched `CLAUDE.md` or `GEMINI.md` in that same run;
  • .claude/commands/om-vault-upgrade.md: node --experimental-strip-types .claude/scripts/upgrade-plan.ts --apply-behind
  • .claude/commands/om-vault-upgrade.md: **Conflicts:** have the user run `!
  • .claude/commands/om-vault-upgrade.md: The hooks run: `echo '{}' | node --experimental-strip-types .claude/scripts/session-start.ts` exits 0 and prints the session context, as one JSON object whose `hookSpecificOutput.additionalContext` carries it.
  • .claude/commands/om-vault-upgrade.md: **Not found**: run version fingerprint detection from the target's `vault-manifest.json`:
  • .claude/commands/om-vault-upgrade.md: Run Tier 0 (vault shape detection) to understand the organizational pattern
  • .claude/commands/om-vault-upgrade.md: On re-run, compute the **source hash** for each source file and compare against the logged source hash:
  • .claude/commands/om-vault-upgrade.md: Say 'go' to execute."
  • .claude/commands/om-vault-upgrade.md: **For `--dry-run`**: write the plan to `thinking/vault-upgrade-plan-YYYY-MM-DD.md` and stop.
  • .claude/commands/om-vault-upgrade.md: ⚠ 3 orphan notes (no inbound links) — run /om-vault-audit to fix
  • .claude/commands/om-vault-upgrade.md: "Run `/om-vault-audit` for a full structural check"
  • .claude/commands/om-weekly.md: **`brag-spotter`** — run with weekly scope to find uncaptured wins and competency gaps
  • .claude/commands/om-weekly.md: `git log --since="7 days ago" --oneline --no-merges` — all vault changes
  • .claude/commands/om-weekly.md: Run the `brag-spotter` subagent with its standard (quarterly) scope, then filter its findings down to wins that clearly occurred in the past 7 days.
  • .claude/commands/om-wrap-up.md: **`brag-spotter`** — run at the end to find uncaptured wins and competency gaps from the session
  • .claude/commands/om-wrap-up.md: Auto-memory index — if brain/ notes were added or their descriptions changed, REGENERATE the index instead of hand-editing it: `node --experimental-strip-types .claude/scripts/generate-memory-index.ts > <your ~/.claude/projects/<slug>/memory/MEMORY.md path>`.
  • .claude/skills/defuddle/SKILL.md: If not installed: `npm install -g defuddle`
  • .claude/skills/excalidraw-diagram/SKILL.md: When generating an Excalidraw diagram, **automatically execute these steps:**
  • .claude/skills/excalidraw-diagram/SKILL.md: 1. Open https://excalidraw.com · uses the network
  • .claude/skills/excalidraw-diagram/SKILL.md: 1. Open https://dai-shi.github.io/excalidraw-animate/ · uses the network
  • .claude/skills/obsidian-bases/SKILL.md: | Function | Signature | Description | |----------|-----------|-------------| | `date()` | `date(string): date` | Parse string to date (`YYYY-MM-DD HH:mm:ss`) | | `now()` | `now(): date` | Current date and time | | `today()` | `today(): date` | Current date (time = 00:00:00) | | `if()` …[+244 chars] · uses the network
  • .claude/skills/obsidian-cli/SKILL.md: Run `obsidian help` to see all available commands.
  • .claude/skills/obsidian-cli/SKILL.md: Run JavaScript in the app context:
  • .claude/skills/obsidian-cli/SKILL.md: Run `obsidian help` to see additional developer commands including CDP and debugger controls.
  • .claude/skills/qmd/SKILL.md: Use when the MCP server isn't registered (older vault clones, Windows install drift, disabled in `.mcp.json`), or for one-off shell checks outside a session.
  • .claude/skills/qmd/SKILL.md: The template ships `qmd_index` empty so every install gets its own store without being asked a question.
  • .claude/skills/qmd/SKILL.md: The SessionStart hook and the PostToolUse debounced refresh both run this automatically;
  • .claude/skills/qmd/SKILL.md: `qmd --index <name> embed` — Regenerate vector embeddings (slower, run after bulk changes).
  • .claude/skills/qmd/SKILL.md: Run the bootstrap once:
  • .claude/skills/qmd/SKILL.md: node --experimental-strip-types .scripts/qmd-bootstrap.ts
  • .claude/skills/qmd/SKILL.md: Idempotent — safe to re-run.
  • .claude/skills/qmd/SKILL.md: Run `qmd --index <name> update && qmd --index <name> embed` in the shell.
  • .claude/skills/qmd/SKILL.md: The SessionStart hook and the PostToolUse debounced refresh run `update` automatically, but `embed` should be run explicitly after sessions that create many notes.
  • AGENTS.md: Stale Actives), `Recently Touched` (recency by real mtime — the answer to "what's most recent", not filename dates), `Incidents`, `People Directory`, `1-1 History`, `Review Evidence`, `Competency Map`, `Templates` | | `work/` | Work notes index | `Index.md` (detailed MOC) | | `work/ac …[+1219 chars]
  • AGENTS.md: See `.claude/rules/obsidian-cli.md`, or run `obsidian help`.
  • AGENTS.md: Codex will find and execute the command file.
  • AGENTS.md: On a fresh clone, run `node --experimental-strip-types .scripts/qmd-bootstrap.ts` once to build the index.
  • AGENTS.md: Run `/om-standup`.
  • AGENTS.md: **Zero data loss**: when reorganizing, always use `git mv`.

Hooks (14)

  • .claude/settings.json (SessionStart): node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+17 chars]
  • .claude/settings.json (UserPromptSubmit): node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+20 chars]
  • .claude/settings.json (PostToolUse): node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+18 chars]
  • .claude/settings.json (PreCompact): node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+15 chars]
  • .claude/settings.json (Stop): node --disable-warning=ExperimentalWarning --experimental-strip-types "$(r="${CLAUDE_PROJECT_DIR:-.}"; d="$r"; while [ ! -f "$d/vault-manifest.json" ] && p="$(dirname "$d")" && [ "$d" != "$p" ]; do d="$p"; done; [ -f "$d/vault-manifest.json" ] || d="$r"; printf %s "$d")/.claude/scripts/ …[+18 chars]
  • .codex/hooks.json (SessionStart): node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/session-start.ts"
  • .codex/hooks.json (UserPromptSubmit): node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/classify-message.ts"
  • .codex/hooks.json (PostToolUse): node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/validate-write.ts"
  • .codex/hooks.json (Stop): node --disable-warning=ExperimentalWarning --experimental-strip-types "${CODEX_PROJECT_DIR:-.}/.claude/scripts/stop-checklist.ts"
  • .gemini/settings.json (SessionStart): node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/session-start.ts
  • .gemini/settings.json (BeforeAgent): node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/classify-message.ts
  • .gemini/settings.json (AfterTool): node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/validate-write.ts
  • .gemini/settings.json (PreCompress): node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/pre-compact.ts
  • .gemini/settings.json (SessionEnd): node --disable-warning=ExperimentalWarning --experimental-strip-types .claude/scripts/stop-checklist.ts

MCP servers (2)

  • .mcp.json (qmd): node .claude/scripts/qmd-mcp.mjs
  • README.md (om): node /absolute/path/to/your-vault/.claude/scripts/om-mcp.mjs
  • Medium risk: runs-instruction-instruction-network (.claude/skills/excalidraw-diagram/SKILL.md:456)
  • Medium risk: runs-instruction-instruction-network (.claude/skills/excalidraw-diagram/SKILL.md:470)
  • Medium risk: runs-instruction-instruction-network (.claude/skills/obsidian-bases/SKILL.md:181)
  • Low risk: network-instructions (.claude/commands/om-vault-upgrade.md:30)
  • Low risk: scripts-present (.claude/scripts/classify-message.ts)
  • Low risk: scripts-present (.claude/scripts/lib/active-hygiene.ts)
  • Low risk: scripts-present (.claude/scripts/lib/atomic-write.ts)
  • Low risk: scripts-present (.claude/scripts/lib/correction-sweep.ts)
  • Low risk: scripts-present (.claude/scripts/lib/env-path.ts)
  • Low risk: scripts-present (.claude/scripts/lib/frontmatter.ts)
  • Low risk: scripts-present (.claude/scripts/lib/hint-state.ts)
  • Low risk: scripts-present (.claude/scripts/lib/hook-io.ts)
  • Low risk: scripts-present (.claude/scripts/lib/instruction-files.ts)
  • Low risk: scripts-present (.claude/scripts/lib/main-guard.ts)
  • Low risk: scripts-present (.claude/scripts/lib/matcher.ts)
  • Low risk: scripts-present (.claude/scripts/lib/mcp-exposure.ts)
  • Low risk: scripts-present (.claude/scripts/lib/mcp-qmd-client.ts)
  • Low risk: scripts-present (.claude/scripts/lib/memory-promoted.ts)
  • Low risk: scripts-present (.claude/scripts/lib/memory-recall.ts)
  • Low risk: scripts-present (.claude/scripts/lib/memory-supersede.ts)
  • Low risk: scripts-present (.claude/scripts/lib/memory-write.ts)
  • Low risk: scripts-present (.claude/scripts/lib/om-mod.ts)
  • Low risk: scripts-present (.claude/scripts/lib/project-dir.ts)
  • Low risk: scripts-present (.claude/scripts/lib/prose-width.ts)
  • Low risk: scripts-present (.claude/scripts/lib/qmd-cwd.ts)
  • Low risk: scripts-present (.claude/scripts/lib/qmd-refresh.ts)
  • Low risk: scripts-present (.claude/scripts/lib/qmd.ts)
  • Low risk: scripts-present (.claude/scripts/lib/read-head.ts)
  • Low risk: scripts-present (.claude/scripts/lib/regex.ts)
  • Low risk: scripts-present (.claude/scripts/lib/reinject.ts)
  • Low risk: scripts-present (.claude/scripts/lib/report-key.ts)
  • Low risk: scripts-present (.claude/scripts/lib/session-start-run.ts)
  • Low risk: scripts-present (.claude/scripts/lib/session-start.ts)
  • Low risk: scripts-present (.claude/scripts/lib/signals.ts)
  • Low risk: scripts-present (.claude/scripts/lib/stop-handoff.ts)
  • Low risk: scripts-present (.claude/scripts/lib/stop-report.ts)
  • Low risk: scripts-present (.claude/scripts/lib/write-targets.ts)
  • Low risk: scripts-present (.claude/scripts/pre-compact.ts)
  • Low risk: scripts-present (.claude/scripts/qmd-mcp.mjs)
  • Low risk: scripts-present (.claude/scripts/session-start.ts)
  • Low risk: scripts-present (.claude/scripts/stop-checklist.ts)
  • Low risk: scripts-present (.claude/scripts/validate-write.ts)
  • Low risk: network-instructions (.claude/skills/defuddle/SKILL.md:10)

AutoGineer scanned breferrari/obsidian-mind@fae7be4 (fae7be4).

Attribution and licence

First committed by
GitHub avatar of breferraribreferrari
Declared authors
  • Steph Ango (declared in .claude-plugin/plugin.json)
Publisher
Brenno Ferrari (Community)
Source
breferrari/obsidian-mind · commit fae7be4
Licence
MIT License (files served here)
  • ATTRIBUTION.md (written by AutoGineer)
Synced
Contributors
breferrari, Yi-111-a, sedetweiler, A220man, HoangThai18

AutoGineer is not affiliated with or endorsed by breferrari.

Install from source

3 of its files are not served here, so there is no ZIP. breferrari/obsidian-mind at fae7be4