Assessment now reasons about ignorable content by category (fetched
deps, build output, caches, tooling/AI-assistant dirs, lockfiles, bulk
data, binaries) so it generalizes across stacks. Onboarding switches to
the config.yaml model qwen25-coder-7b-16k: inference is GPU-bound at
~65 tok/s, so the speed lever is fewer chunks per doc via a larger
context window (GRAPHIFY_OLLAMA_NUM_CTX does not propagate through the
OpenAI-compatible path; context must come from the modelfile). Extends
ADR-017.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Onboarding ran a bare `graphify extract`, but graphify does not honor
.gitignore — it needs its own .graphifyignore. Without one, onboarding
viking-warrior-training-log walked node_modules/ (5,858 files) and
routed its non-code files through the Ollama doc pass; the run was
killed after ~1 hour with no graph.json.
Onboarding is now assessment-first: survey the repo, generate a
per-project .graphifyignore (the ignore set varies by stack), confirm
with the user, then extract. Records the gotcha and decision in ADR-017.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Move memory plugin source from ~/.claude/plugins/memory (untracked) into cc-os/plugins/memory under git
- Port four bash hooks to Python deep-module architecture (config.py, hook_io.py, session_state.py + thin entry points)
- Split memsearch auto-commit+push into dedicated memsearch_sync.py SessionEnd hook (relocation of ADR-015, behavior preserved)
- Cutover via symlink + settings.json rewrite; fresh-session test verified all hooks fire
- Add ADR-016; update CLAUDE.md, build plan, and fix stale bash-hook/source-path references
- Sync three new-capability delta specs into openspec/specs; archive change as 2026-06-12-memory-plugin-source-and-port
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
memsearch episodic memory (Step 4) is now live and synced via git. Record
the final sync design: dedicated private Forgejo repo at
forgejo.swansoncloud.com/jared/memsearch, auto-commit+push via cc-os
session-end hook, and the resolved decision to use a single global
cross-client store (not per-client repos). Commingling is an explicit
design choice, not a tolerated risk. Update build plan to split Step 5 into
5a (episodic sync, done) and 5b (vault sync, remaining). Update CLAUDE.md
implementation status, USER-GUIDE to reflect memsearch now operational, and
add full ADR-015 decision record with rationale and alternatives.
- Memory plugin installed globally at ~/.claude/plugins/memory/ with three hooks:
session-start.sh (background graphify rebuild), session-context.sh (UserPromptSubmit
vault injection), and post-tool-use-write.sh (session log + dirty-file tracking)
- Root cause fixed: SessionStart has last-write-wins semantics (undocumented); moved
vault context injection to UserPromptSubmit which concatenates multiple hooks
- Verified working: vault graph map (366 nodes, 346 edges) injected into every session
- ADR-014: Graphify is a structure extractor, not a topic clusterer — hub notes +
wikilinks must be author-provided; migration scaffolding is now a first-class deliverable
- Graph connectivity findings documented in 07-graph-connectivity-findings.md
- Archive 2026-06-05-add-memory-plugin change; sync memory-plugin-hooks and
memory-plugin-skills to stable specs
- Add graphify-out/ to .gitignore (build artifact)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Invert the build order to build-first / migrate-incrementally and
redesign Step 2c as a Claude reference-set benchmark.
- ADR-013 records the build-order inversion; CLAUDE.md locked-decisions
pointer updated
- New benchmark deliverable under docs/memory-system/benchmark/:
shared extraction spec + copy/paste dispatch prompt + reference-outputs
- Runbook (05): Step 1 = fixture selection with bulk migration deferred;
Step 2c = Claude-tiers-only reference set, quality-only metrics, Opus
as gold-standard rubric (produces references, not a model choice)
- 04-build-plan reconciled to the new build order and benchmark design
- Sync incremental-migration + reference-extraction-benchmark specs into
openspec/specs/; archive the completed change
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Lock two design decisions: (1) six independent namespaced tag facets
(type/client/project/domain/tool/convention/) plus scope/, with
hierarchy expressed via hub notes and Graphify edges, not nested paths;
(2) adopt the existing ~/Documents/SecondBrain vault as the knowledge
layer rather than creating a new one — it is already flat, governs to
the correct semantics, and contains useful patterns (proactive-query
spec, tag-inference table).
See ADR-011 and ADR-012 for rationale, rejected alternatives, and
migration cost (mechanical schema updates on existing ~20 notes).
The handoff document was a session artifact; it is no longer needed.
Update all architecture docs to reflect the design pivot: Graphify
knowledge graph supersedes the earlier Ruby/SQLite tag-index CLI and
the deferred QMD semantic layer. The vault metadata (summary + tags)
is retained; only the bespoke index is removed. Update ADRs 003, 005,
and 006 to note they are superseded by ADR-010 (Graphify), and update
all system-design doc references from the three-layer model to the
final two-layer model (episodic + knowledge).
This documents the complete architecture for a personal, cross-project
memory system for Claude Code: three-layer (episodic/knowledge/deferred-
semantic) design using Milvus Lite for fast local storage with lazy
remote sync. Includes video synthesis, architecture decisions with
rejected alternatives (MemPalace, Mem0, Postgres, LightRAG), concrete
build plan with scripts and hooks, and initial handoff for implementation.