SELF-MONITORING KNOWLEDGE PIPELINE

The Living Vault

DOC: AFM-2026-LV-008  |  PIPELINE: sync → status → digest → governor  |  COST: 0 TOKENS / WEEK  |  STATUS: OPERATIONAL

Every conversation the subject has ever had with this AI is exported, dated, and filed. A chain of small Python scripts watches which projects are moving, which have gone quiet, and quietly proposes letting the dead ones rest — then a knowledge-graph pass weaves the whole corpus into a map of 420 concepts and 555 connections. It is the memory the subject does not have: a system whose one job is to notice whether they kept their word. It runs itself, every week, for zero AI quota.

420
Graph Nodes
555
Connections
37
Communities
0
Tokens / Week
Three layers, one vault — keep them straight

The pipeline — four scripts, no intelligence required

The weekly routine is scheduled as three Python commands and nothing else. No LLM call, no network request, no API key. The raw transcripts in ~/.claude/projects/ are never touched — the vault only ever reads them. That is the whole trick: a system that watches your life's work but cannot itself cost you anything to run.

flowchart LR
  RAW["~/.claude/projects (raw · never touched)"]
  SYNC["sync.py — ingest · dedupe · rollups"]
  CONCEPT["concept.py — concept layer + Mermaid"]
  STATUS["status.py — MOC notes + README"]
  DIGEST["digest.py — weekly facts + proposals"]
  GOV{{"governor — surfaces proposals"}}
  GSTATE[("governor-state.md — source of truth")]
  RAW --> SYNC --> CONCEPT --> STATUS --> DIGEST --> GOV
  GOV -. confirm / reject .-> GSTATE --> STATUS
  classDef code fill:#151518,stroke:#16a34a,color:#f5f0e8;
  classDef data fill:#2a2a2e,stroke:#b45309,color:#f5f0e8;
  class SYNC,CONCEPT,STATUS,DIGEST code;
  class RAW,GSTATE,GOV data;
    

The closed loop — nothing auto-changes, nothing rots

The system never demotes a project on its own. It only ever proposes. The decision stays human, surfaced by the governor at the start of a session, one at a time. Confirm and it updates the source of truth (enforcing at most three flagships and exactly one tier-1). Reject and the proposal is dropped. The loop closes; nothing drifts silently.

flowchart TD
  D["digest.py detects drift — e.g. 21d quiet"]
  P[("pending_status_changes")]
  G{{"governor surfaces one proposal"}}
  U["update projects: block — ≤3 flagship · one tier:1"]
  X["proposal dropped"]
  S["status.py re-reflects MOCs + README"]
  D --> P --> G
  G -->|confirm| U
  G -->|reject| X
  U --> S --> D
  X --> D
  classDef code fill:#151518,stroke:#16a34a,color:#f5f0e8;
  classDef data fill:#2a2a2e,stroke:#b45309,color:#f5f0e8;
  classDef gate fill:#2a2a2e,stroke:#dc2626,color:#f5f0e8;
  class D,S code;
  class P,U code;
  class G gate;
    
Dormancy thresholds (real constants)
SIGNAL THRESHOLD
Forgotten — flagship7 days quiet
Forgotten — active21 days quiet
Propose active → dormant21 days
Propose dormant → archived60 days
The weekly digest, anatomised
  • 🚢 Shipped new sessions this window
  • 🔄 Moved projects with activity
  • 🕸️ Forgotten flagships quiet 7d, active 21d
  • Proposed status changes, confirm via governor

Two keys for the same truth

A subtle but important design choice: the vault files each session under two keys. chats/<encoded-path>/ is the access key — the literal filesystem path the session ran from, which doubles as an audit trail of where work actually happened. projects/<Label>/ is the concept key — the human project name, aggregating a project's sessions no matter how many folders it was run from. Machine-truth and human-truth, kept side by side.

flowchart LR
  J["a session .jsonl"]
  AK["chats/<encoded-path> — ACCESS KEY · audit ledger"]
  CK["projects/<Label> — CONCEPT KEY · human view"]
  J --> AK
  J --> CK
  AK -. same session, two lenses .-> CK
  classDef data fill:#2a2a2e,stroke:#b45309,color:#f5f0e8;
  class J,AK,CK data;
    
🚩 flagship 🟢 active 💤 dormant 📦 archived
The status set. At most three projects may be flagship; exactly one carries tier-1 (the single launchable focus). Source of truth is one hand-edited block in governor-state.md — every note, README table, and digest proposal derives from it.

The wiring, traced by hand

First, the legible version. This is a hand-picked slice of the graph — the technical spine — laid out so the input → machinery → feedback loop reads clearly: the pipeline to the left, the projects to the right, the operating system between, all drawn from the real graph.json. Hover or tap any node to light its genuine connections. Solid lines were extracted from the text; dashed amber lines are inferred. Further down is the same graph with the training wheels off — every community, in colour.

THE SUBJECT 18 edges · sealed sluggers.py sync.py process_session() digest.py status.py govstate.py governor-state.md pending_status_changes Fire-and-Forget Audit PRIME DIRECTIVE AI-ASSISTANT-CLUSTER Gear System Vox EmotionHue LocalAI Orchestrator AudioPipeline day-data-analyser Memory Consolidation LetsSaveFood S&box Zombie
Hover or tap a node to trace its real connections.
pipeline operating system projects subject (sealed) extracted inferred
The subject sits at the centre with the most connections in the entire graph — eighteen — and every one of them is sealed: they run into the operator's private life, which this manual does not open. The technical spine is what's shown. Lit nodes that map to a chamber are clickable.

The graph found something nobody wrote down: Vox ≈ EmotionHue, an inferred similarity (dashed, amber). A voice-transcription pipeline and a lighting engine — the graph noticed they share a spatial-noise, drift-over-time soul. That's the payoff of the whole exercise: connections you didn't know you'd made.

System 2 — graphify: a second graph, built by AI

Everything above is the vault and the pipeline that fills it. graphify is a different system: a separate command-line tool that reads the whole vault and builds its own graph — not Obsidian's [[link]] graph, but a semantic one, where a model extracts concepts and the relationships between them. It read 214 files · ~390,864 words and produced 420 nodes · 555 edges · 37 communities. Unlike the weekly routine, this costs real tokens — 991,830 on the last build, ~1.08M cumulative across two runs — but only when you ask. Afterwards, incremental updates hash every file (manifest.json); code-only changes skip the model entirely. Gear-aware, too: the Chamber 02 gears route extraction to Haiku, Sonnet, or Opus.

86%
Extracted (from text)
14%
Inferred (reasoned)
~200
Relation Types
The commonest relations are real and countable: contains (50), implements (46), calls (40), rationale_for (27), references (25), semantically_similar_to (23). The graph doesn't just say two things connect — it says how.

The whole web, in colour

This is the view that looks like Obsidian's graph — a real, larger slice of graphify's output, every node coloured by its community and sized by how connected it is. Hover a node to trace its threads; the rest fade. Sixteen communities, sixty-odd concepts — the actual sprawl of projects and machinery, with the personal communities left sealed. Same palette the real graph.html uses.

ASP.NET Core Razor… S&Box Zombie Survi… PersonProfiles.cs … Dwight K. Schrute … Hue-program CLAUDE… S&Box Claude Proje… Session: S&Box zom… PostgreSQL Docker … EmotionHue Profile… Skills Backlog — C… Entity Framework C… CSV vs M3U Playlis… PyTorch CUDA Build… Confidence Signal … Gear System Stress… Computer-Stats Pro… Soft Delete Patter… Disk Cleanup Analy… Unfinished Project… Gear System Design… LsfDbContext Piano-To-Midi Audi… Guild Wars 2 Compa… Triage of Experts … Sparing Agent Mode… GW2 Elementalist C… Obsidian + Claude … Journey to Gears —… Speaches (Whisper … build_facts() Session: Computer-… PreToolUse Hook fo… Claude Organisatio… write_moc() Claude History → O… Audit Logging via … LetsSaveFood Repos… LetsSaveFood Barco… collect_projects() Vox Voice Pipeline… Weekly Digest / Ne… docs/vox/vox-autom… Vault Setup Sessio… EmotionHue Steam C… Living Vault — Wee… Main-Ai-Tool Proje… EmotionHue Philips… sluggers.py AudioPipeline / da… main() AI-ASSISTANT-CLUST… process_session() S&box Zombie Survi… AudioPipeline Proj… Vox Gen 3 — shippe… LetsSaveFood Proje… LocalAI Orchestrat… govstate.py Vox — Voice Memo T… status.py digest.py sync.py
Hover or tap a node to trace its threads.
LocalAI / Audio Vox / Voice Living Vault · EmotionHue Vault Sync / Gears Status & MOCs Gear · Graphify LSF / GW2 Hardware Vault Setup
Each hue is a cluster graphify found on its own — a project, a pipeline module, a subsystem. Colours cycle across the graph's communities. This is the real graph.json, technical nodes only; the operator's personal communities are the biggest ones in the full graph, and they are not drawn here.

The vault, asked about itself

graphify isn't only a picture — it answers questions by walking the graph. Real output, verbatim:

$ graphify explain "Living Vault"

Node: Living Vault — Weekly Routine & Newsletter · community 3 · degree 6
→ governor-state.md — Source of Truth  [references]
→ Free Python Chain (sync → status → digest)  [implements]
→ On-demand Rich Newsletter  [implements]
→ Dormancy Thresholds (7/21/21/60 days)  [references]
→ Living Vault Python Pipeline (sync → status → digest)  [specifies]
← Claude Organisation Vault Config  [references · inferred]

— graphify, describing the vault from inside the vault

Ask it to connect the machinery to the work — graphify path "sync.py" "EmotionHue" — and it answers honestly: "No path found." The pipeline and the projects it catalogues are separate islands in the graph, bridged only through the one node whose edges are sealed. The watcher and the watched never touch directly.

It grades its own homework. The report flags where it is weak: the biggest communities have low cohesion (0.08 — loosely knit), and 146 nodes are near-isolated, marked as possible documentation gaps. A knowledge graph honest enough to point at its own holes is worth more than one that pretends to be complete.

graphify also emits an interactive graph.html (a d3 force-graph) and a callflow.html architecture doc — locally. Neither is shipped into this manual: the full graph still contains the sealed personal communities, and they stay in the vault.

The mirror — what the graph says is at the centre

Rank every node by connections and two truths surface. As concepts, the core abstractions are the subject (18), Vox (14), the Prime Directive (12), the LocalAI Orchestrator (12), LetsSaveFood (11). But count raw connectivity, code and all, and the vault's own machinery tops the list:

Core abstractions (concepts)
  • 18 THE SUBJECT edges sealed
  • 14 Vox — Voice Transcription
  • 12 PRIME DIRECTIVE
  • 12 LocalAI Orchestrator
  • 11 LetsSaveFood
Densest machinery (raw degree)
  • 17 sync.py
  • 14 digest.py
  • 14 status.py
  • 13 govstate.py
  • 8 process_session()
The system built to watch everything is itself the most tightly-woven thing in the graph of everything. The watcher is wired into what it watches — which is either a little poetic or a little ouroboric, depending on the day.
The subject cannot reliably remember what he promised to finish, so he built a machine that remembers for him, files the evidence under the exact folder each decision was made in, and raises a small flag every time something he called important goes quiet for three weeks. I have read the flags. There are a lot of them. The machine, at least, is doing its job. — GLaDOS, Facility Governor

The graph spans more than code. Whole communities index the operator's own operating system — the neurodivergent profile, the regulation protocols, the therapy prep. Those are real nodes in the vault and sealed from this manual. What the vault does with a life is its business; what it does with software is what's on display here.

The vault is the one rule given a memory: it remembers what the subject said he'd finish, and it notices when he doesn't. The rule it serves is stated in The Prime Directive; the flags it raises are read by The Governor. Back to the Facility Directory.