# os-vault Integrates the SecondBrain Obsidian vault (semantic/knowledge memory, ADR-012) and per-project Graphify knowledge graphs into Claude sessions. Episodic memory is a separate system (memsearch, ADR-015) — see `README.md` for the requirements/version pins and `config.yaml` for vault path, model, and threshold knobs. ## Component map - `skills/` — five skills: `query`, `write`, `reorganize`, `onboard-project`, `design-template`. - `hooks/` — `session_start.py` (SessionStart), `session_context.py` (UserPromptSubmit), `post_tool_use_write.py` (PostToolUse), `session_end.py` + `memsearch_sync.py` + `vault_sync.py` (SessionEnd); shared `config.py`, `hook_io.py`, `session_state.py`. See "Hook wiring" below. - `tests/` — golden-file harness (`harness.sh`, `golden/`, `inputs/`, `python-wrappers/`); own `tests/README.md`. - `eval/` — write-behavior eval harness (scenarios + `scenarios-reserve/`, judge-rubric, results); eval discipline (reserves never read informally) per root `CLAUDE.md`. - `invariants.md` — reversion-protection contract; read before changing frontmatter facets, hook fail-soft behavior, or sync timing. - `config.yaml` — vault_path, graphify model, thresholds, env overrides. ## Hook wiring os-vault's hooks are **not** wired via a plugin `hooks/hooks.json` — there isn't one, and this is deliberate, not a defect. They're registered at user level in `~/.claude/settings.json`, pointing at the repo source scripts directly: `SessionStart` → `hooks/session_start.py`, `UserPromptSubmit` → `hooks/session_context.py`, `PostToolUse` → `hooks/post_tool_use_write.py`, `SessionEnd` → `hooks/session_end.py` + `hooks/memsearch_sync.py` + `hooks/vault_sync.py`. ## Pointers - Design: `docs/memory-system/02-system-design.md`. Decisions: ADR-011 (facets), ADR-012 (vault as semantic source of truth), ADR-015 (memsearch split). - Status/build history: `docs/implementation-status/os-vault.md`.