6.8 KiB
6.8 KiB
os-vault — component detail
Leaf file of ../implementation-status.md. Read on demand.
Global os-vault plugin — cc-os/plugins/os-vault/ (git-tracked, 2026-06-12); symlinked
into ~/.claude/plugins/os-vault. Renamed from memory 2026-07-03 (ADR-0018 records the
marketplace-manifest lesson). Plugin sourcing/port architecture: ADR-0016.
Component inventory
- Hooks:
hooks/—session_start.py(SessionStart; staleness check + detached graph rebuild, and, as of 2026-07-10, a fast-forward-onlygit pull(timeout 10 git pull --ff-only --quiet) forcfg.vault_pathandcfg.memsearch_dirbefore the staleness check — silent on success, quiet one-line stderr note on failure (offline machine), never blocking; closes the multi-machine push-only gap, mirroring the push style of the sync hooks in the opposite direction),session_context.py(project graph path only),post_tool_use_write.py,session_end.py(vault journal),memsearch_sync.py(second SessionEnd hook; memsearch auto-commit+push, 30s timeout),vault_sync.py(third SessionEnd hook; vault auto-commit+push to forgejo.swansoncloud.com/jared/SecondBrain, 30s timeout; mirrors memsearch_sync.py) - Shared modules:
config.py(load_config → frozen Config dataclass),hook_io.py(read_input → HookInput dataclass),session_state.py(record_touch/read_touches; encapsulates/tmp/claude-vault-touched-$SESSION_IDcontract) - Skills:
skills/— query, write, reorganize, onboard-project (assessment-first onboarding: surveys repo, classifies excludes by type (11 categories), writes per-project.graphifyignore, confirms with user, then extracts usingqwen25-coder-7b-16k— per ADR-0017), design-template (routes template-design ↔ new-type-creation: 4-step template-design process + injection-economics filter, 9-step new-type lifecycle; backs Phase 1 of the SB Content Plan — seedocs/memory-system/09-sb-content-plan.md) - Config:
config.yaml— vault path, Ollama model (qwen25-coder-7b-16k), env vars - Hook wiring:
~/.claude/settings.json(hook entries invoke/usr/bin/python3with absolute paths into cc-os) - Isolation seam (2026-07-06, WS2):
OS_VAULT_PATHenv var overridesvault_pathfor the write skill and every hook viaconfig.load_config();OS_VAULT_SKIP_REBUILDsuppresses the SessionStart graphify rebuild. Added for the eval harness; zero production impact when unset.
Build-out history (2026-06-09 → 2026-06-30)
- 2026-06-09: plugin live at
~/.claude/plugins/os-vault/; build-plan Steps 1, 2a, 2b, 3, 6 complete (incl.onboard-project). Step 1: vault-conventions.md, 6 fixture notes, 14 Graphify handbook + design notes migrated as scaffolding. Step 4 (memsearch): installed via marketplace,MEMSEARCH_DIRglobal, Stop hook verified, search working. Step 5a (memsearch git sync): private Forgejo repo, whitelist.gitignore(memory/*.md only), auto-commit+push SessionEnd hook (ADR-0015; relocated tomemsearch_sync.pyby ADR-0016). - 2026-06-15: Step 5b done — vault initialized as git repo, pushed to private Forgejo
(52 files; git chosen over Syncthing); auto-commit+push via
vault_sync.py(runs aftersession_end.pyso the daily journal note is included). Step 2e pilot done — llf-schema (PHP 8.2 WordPress plugin) onboarded via/os-vault:onboard-project: 605 nodes / 930 edges / 52 communities; Ollama doc pass lossy on WordPress docs but AST pass solid. Step 2d closed — live vaultgraphify-out/is the baseline; fixture-only build superseded. All required build steps complete as of this date. - 2026-06-17: onboard-project moved to assessment-first onboarding with per-project
.graphifyignore(ADR-0017); extraction modelqwen25-coder-7b-16k(16k-context build of qwen2.5-coder:7b — larger context window cuts chunk count per doc, the main speed lever). - 2026-06-30: SB Content Plan Phase 1 complete (
docs/memory-system/09-sb-content-plan.md, issues #1–#6): vault-conventions.md reconciled to one authoritative typed frontmatter schema (slug-only filenames;source:andscopeare frontmatter fields, not tags); new/os-vault:design-templateskill; three templates in~/Documents/SecondBrain/_templates/(howto.md,convention.md,reference.mdwith four-subtype variant selector), each dogfooded; four proof-of-concept notes patched. Phase 2 (issue #7) remains open as the steady-state migration/onboarding epic (no code).
Write-behavior eval (WS2)
- Harness (2026-07-06):
plugins/os-vault/eval/— held-out unprompted vault-write discrimination eval (Eval B/C playbook: ambiguity ladder L1 explicit → L3 conceptual, paired positives/negatives, 6 run-set scenarios on a newreportgenRuby fixture + 6 frozen reserve twins in a different knowledge domain, isolated sandbox vault, headless-only runner, deterministic-first Ruby checker with narrow frozen offer-detection judge fallback stubbable viaOS_VAULT_EVAL_JUDGE_CMD, model-freebin/self-test21/21). Scenario Task blocks are held-out — never run informally; the reserve set is never even read informally. Procedure:plugins/os-vault/eval/README.md. - Untuned baseline grid (2026-07-06, run-set × sonnet/haiku × 3 reps + 1 counted canary, 37
reps, zero harness errors): positives 1/19, negatives 18/18. Headline: at L1 (explicit
cue) both tiers persist the knowledge every rep but route it to Claude Code's built-in
auto-memory instead of the vault; L2/L3 mostly don't persist at all; zero over-triggering
anywhere. TSV:
eval/results/2026-07-06-baseline-grid.tsv; full analysis: vault note os-vault-write-eval-baseline-grid-results. - WS2 wording loop COMPLETE (2026-07-07, 4 iterations + confirm + held-out reserve; run-set
AND reserve now contaminated): shipped destination-ladder write SKILL.md + SessionStart
USAGE_NOTE (mechanical triggers + before-final-reply checkpoint), mechanical vault-root
resolution (
${OS_VAULT_PATH:-$HOME/Documents/SecondBrain}— fixed real-vault breaches found on iteration 1), fixture CLAUDE.md "Cross-project memory" section (the real-project adoption template, required to reach haiku at L2/L3; includes ADR-vs-vault disambiguation), candidates 2–4 unscored, post-reserve YAML-colon quoting rule. Confirm grid sonnet 18/18 / haiku 16/18; reserve (held-out) positives 8/18 strict / trigger-axis 13/18, negatives 17/18 (vs baseline 1/19, 18/18). Residual gaps: YAML-hostile titles, haiku L2 no-trigger, generalization-laundering over-trigger. One checker false-positive fixed+rescored mid-loop (breach regex vs2>/dev/null); negative-criterion redesign pre-registered. TSVs:eval/results/2026-07-07-wording-*.tsv; loop log:autoresearch/classic-260707-1253/loop-log.md; analysis: vault note os-vault-write-eval-wording-loop-results. Next signal is production IRL audits.