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.
[[wikilinks]]. The thing you actually open and read.
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;
A custom JSONL parser (it replaced the claude-extract tool) reads every
session, deduplicates by session_id, and only exports what's new or changed.
High-volume, low-signal labels (NOISE_LABELS) collapse into a single rollup
note instead of flooding the vault. It hardlinks each repo's CLAUDE.md into the vault and
auto-commits locally — no push; the subject syncs via his own cloud, not
GitHub. The core is process_session(): strip system XML, render 👤 User /
🤖 Claude turns, stamp front matter (date, project, session_id, slug, summary).
Builds a human-concept-keyed companion to the raw ledger: projects/<Label>/_hub.md
aggregates a project's sessions across every path it was ever run from, and best-effort
ingests the repo's own CLAUDE.md and overview. It reads graph.json and emits a
Mermaid subgraph per hub (capped at 40 nodes) — the same Mermaid you're
reading on this page is native to the vault, not decoration.
Reads the one source of truth — the projects: block in
governor-state.md — and reflects it into the vault: a Map-of-Content note per
project whose front matter lets Obsidian Bases filter by status, and a README regenerated
and grouped by status. Mechanical; it invents nothing, it mirrors.
Computes the week's facts once into digest/<week>.data.json,
renders a deterministic stub, and appends status-change proposals to
pending_status_changes — proposals only; it never mutates a project's status.
The optional rich prose newsletter is a separate, on-demand pass over the same JSON
(Claude today, a local Ollama tomorrow — both read the identical facts file).
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;
| SIGNAL | THRESHOLD |
|---|---|
| Forgotten — flagship | 7 days quiet |
| Forgotten — active | 21 days quiet |
| Propose active → dormant | 21 days |
| Propose dormant → archived | 60 days |
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;
governor-state.md — every note, README table, and digest proposal derives from it.
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 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.
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.
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.
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.
graph.json, technical
nodes only; the operator's personal communities are the biggest ones in the full graph, and they
are not drawn here.
graphify isn't only a picture — it answers questions by walking the graph. Real output, verbatim:
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]
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.
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.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:
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.