LLM Knowledge Bases: a practical guide

source

LLM Knowledge Bases: a practical guide

Ben Holmes (developer relations lead, Warp) - channel: AI Engineer

Type
video (conference talk, AI Engineer World's Fair 2026, Track 3 "Memory & Continual Learning")
Published
2026-08-12 (talk delivered 2026-07-01)
Topics
memory, rag, skills, agents
Visual leg
analysed (8 frames kept)
Status
compounded
About this note

Persona: curator + mentor, with fact-checker at the gate. Re-adopt when working this file.

The distilled document you learn from, anchored by the eight frames gated in nodes.md. Every claim carries a node ID. See SOURCE.md for metadata.

On this pageTL;DRThe 1-minute versionKey claimsWhat you will learn, and in what orderMovement I - the ground you already hold1. The pile, and why pointing search at it does not help2. Compile once - the pattern, and why it is S8's rather than this talk'sMovement II - what running it actually takes3. Capture, the constraint nobody budgets for4. Enrichment as a separate pass, not a capture-time discipline5. The stamp that turns a corpus-wide sweep into an incremental one6. The registry that stops the taxonomy sprawlingMovement III - the payoff, and the crack in it7. Before and after, and the rule the system breaks8. What a good derived page looks likeMovement IV - taking the human out of the trigger9. Taking the human out, and the scoping that makes that safe10. What none of this tells youDiagram (mental model)💡 TermsWhat to distrust in this noteOpen questionsFeeds these topicsPresentation narrativeSlide 1 - The headlineSlide 2 - The problem was accumulation, not retrievalSlide 3 - The architecture is an ownership decision, not a storage oneSlide 4 - What the pattern left out is what decides whether it survivesSlide 5 - The rule it endorses is the rule it breaksSlide 6 - It runs unattended, and the gate that makes that safe was never examinedKey takeaway message

TL;DR#

This brain already holds the pattern for LLM-maintained knowledge bases, as S8, and has never seen anyone run one. This talk is that missing half. Ben Holmes read Karpathy's gist, built it, and put the working parts on a projector - the skill file, the tag registry, the generated entity page, the scheduled job - which turns a set of eighteen needs-check assertions into something you can watch operate. Two things make it worth twenty minutes. The mechanisms he had to invent that the pattern does not mention are the ones that decide whether it survives past a month, and there are four of them. And the system quietly breaks the pattern's single most load-bearing rule - raw sources are immutable - which turns out not to be sloppiness but a genuine correction, because the rule as written cannot be implemented and the rule as practised can.

flowchart TB
    P["S8: the pattern<br/>(a gist, 2026-04)"] --> Q{"can it actually<br/>be run?"}
    Q --> R["S26: one instance<br/>(a vault, 2026-07)"]

    R --> N1["idempotence stamp<br/><i>makes sweeps incremental</i>"]
    R --> N2["controlled vocabulary<br/><i>stops taxonomy sprawl</i>"]
    R --> N3["scheduled unattended run<br/><i>removes the human trigger</i>"]
    R --> N4["per-directory schema<br/><i>one job, many wikis</i>"]

    R --> D["<b>and it violates<br/>'raw is immutable'</b>"]
    D --> D2["the rule that survives:<br/><b>one declared writer per layer</b>"]

    R --> Z["<b>but measures nothing</b><br/><i>instantiability, not efficacy</i>"]

    classDef add fill:#dcfce7,stroke:#15803d,color:#14532d
    classDef div fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d
    classDef warn fill:#fef3c7,stroke:#b45309,color:#78350f
    class N1,N2,N3,N4 add
    class D,D2 div
    class Z warn

Green is what the instance adds, red is where it contradicts its own source, and amber is the ceiling on all of it. The crux is that the interesting content of an implementation is exactly the part the pattern did not specify, which is why the four green nodes matter more than the faithful reproduction above them. It is drawn as one fan-out rather than as the talk's five-stage pipeline because the pipeline is S8's and reproducing it here would say that the value of this source is its agreement, when the value is its residue. The amber node hangs off the instance rather than sitting at the bottom as a caveat, because it qualifies every green node individually and none of them survives being quoted without it. Synthesized from n1, n5, n6, n10, n12, n16 and d1.

The 1-minute version#

This talk is a demonstration of a personal knowledge base that an LLM maintains on the author's behalf, shown end to end on a real vault of a few hundred notes. It covers how the raw material gets captured, how a background agent adds structure to it, how a browsable wiki is generated on top, and how the whole thing is put on a schedule so it runs overnight. It is a working system on screen rather than a proposal, and that is its entire contribution.

The problem it works on is one most engineers recognise and few have solved. You accumulate notes - meeting scraps, half-finished thoughts, things you read - and the pile grows faster than your ability to navigate it, so the notes stop being an asset and become an archive you feel guilty about. The speaker opens by asking how many people have a disorganised notes folder, and essentially every hand in the room goes up [@t=49].

What makes it hard is not storage and not search, and this is the part that took the field a while to name. The obvious response is to point retrieval at the pile, which is what every RAG-shaped tool does. But retrieval is stateless across queries, so the model rediscovers everything from scratch each time you ask, and any question needing five documents synthesised pays that synthesis again on every single ask, while you wait [S8 n1]. Nothing accumulates. The pile stays a pile, and you have merely bought a better flashlight for looking into it.

So the pattern this talk implements moves the work. Instead of retrieving at query time, an LLM incrementally builds and maintains a persistent wiki of markdown files sitting between you and the raw sources - synthesis compiled once at ingest and then kept current, rather than re-derived per question [S8 n2, n3, visuals/frame_712.jpg]. The architecture is three layers defined by who may write to them, and the immutability of the raw layer is what makes every derived claim auditable [S8 n4, visuals/frame_728.jpg]. All of that is S8's, and this talk displays it rather than establishing it.

The reason to spend time here is what the instance adds. Four mechanisms appear that the pattern never mentions, and each one is load-bearing in a way you only discover by running the thing. Enrichment stamps every note it finishes with an enrichedAt timestamp and skips anything already stamped, which turns a whole-corpus pass into an incremental one [n5]. Tags come from a registry the agent must read first, with an explicit instruction to be reluctant about coining new ones, because the model otherwise invents a fresh vocabulary on every pass [n6]. Maintenance runs unattended on a schedule in a cloud sandbox rather than waiting for a human to remember [n10]. And each wiki directory carries its own schema file that overrides the generic one, so a single scheduled job can maintain several knowledge bases with different conventions [n12].

Then there is the thing the talk does not notice about itself. The system enriches notes by writing titles, frontmatter and backlinks into the raw files [n7], while the same talk displays the rule that raw sources are never modified and encodes that rule in its own automation prompt [n11, d1]. Both are true on screen, minutes apart. The reconciliation is visible in the automation's own wording and never said aloud, and it is the most useful sentence this source produces: immutability is scoped per job, not per layer. Enrichment owns raw's metadata, the wiki job owns the wiki, and neither may cross. One declared writer per layer is implementable where "raw is immutable" is not.

What it costs is real and mostly unbudgeted. You are handing a model write access to your own notes, and the audit trail moves from "the agent could not have edited this" to "git will tell you what it did". Backlinks are a judgement call rather than a threshold [n8], and a wrong one is invisible once written. The human's remaining job is to review a diff every morning, which is asserted as sufficient and never tested [n13].

How far to trust it is the easiest question in this note, because the answer is bounded and clean. Nothing here is measured - no baseline, no comparison against the retrieval systems the pattern dismisses, no error rate, no count of bad edits, no corpus size [n16]. It is a demo, and a demo proves a thing can be built and shown working once. That happens to be exactly the evidence this brain was missing about S8, so the fit is good, but it does not extend one inch further.

The table below compresses the same argument for someone returning to check one row.

The problem Personal notes accumulate faster than you can organise them, so they decay into an archive you cannot use [@t=49, n2].
Why the obvious answer fails RAG over the pile is stateless across queries - the model re-derives from scratch every time and nothing accumulates, so a five-document synthesis question is paid for again on every ask [S8 n1, visuals/frame_712.jpg].
Why it is hard The missing component was never storage, retrieval or linking. It was labour - the bookkeeping that makes humans abandon wikis [S8 n13, n15].
The idea Compile synthesis once at ingest into a persistent, interlinked wiki the LLM owns and maintains, layered over an immutable raw collection [S8 n2, n4, visuals/frame_728.jpg].
How it works here Capture without structure [n2, n3] -> a skill adds tags, source and backlinks in a later pass [n4] -> a generated wiki of entity pages with per-bullet citations [n9] -> the whole thing on a nightly schedule in a sandbox [n10].
What the instance adds Idempotence stamp [n5], controlled tag registry [n6], unattended scheduling [n10], per-directory schema override [n12].
The interesting contradiction Enrichment mutates the raw layer the pattern calls immutable, and the talk never notices. The rule that survives is one declared writer per layer [n7, n11, d1].
What it costs A model with write access to your own notes, backlink precision nobody measures [n8], and an audit story that now depends on git rather than on layering [d1].
How far to trust it As instantiability only. Zero measurements of any kind [n16]; T4 practitioner, with a T2 commercial interest on the automation section [d2].

Key claims#

What you will learn, and in what order#

flowchart TB
    subgraph M1["I - the ground you already hold"]
        S1["1. the pile, and why<br/>search does not fix it"]
        S2["2. compile once:<br/>the pattern, from S8"]
    end
    subgraph M2["II - what running it actually takes"]
        S3["3. capture: the constraint<br/>nobody budgets for"]
        S4["4. enrichment as<br/>a separate pass"]
        S5["5. the stamp that makes<br/>it incremental"]
        S6["6. the registry that stops<br/>the taxonomy sprawling"]
    end
    subgraph M3["III - the payoff and the crack"]
        S7["7. before and after,<br/>and the rule it breaks"]
        S8b["8. what a good derived<br/>page looks like"]
    end
    subgraph M4["IV - taking the human out"]
        S9["9. the schedule, and the<br/>scoping that makes it safe"]
        S10["10. what none of<br/>this tells you"]
    end
    M1 --> M2 --> M3 --> M4
    classDef core fill:#dcfce7,stroke:#15803d,color:#14532d
    class M2,M3 core

Movement I is orientation and you may skim it if you have read this brain's S8 note, though section 1 is short and sets up the question the rest answers. Movement II is the payload and the reason this source was ingested, because sections 5 and 6 are mechanisms that exist nowhere in the pattern and decide whether an instance is alive in six months. Movement III is where the note stops agreeing with its source, and section 7 is the single most valuable page here - skipping it costs you the one correction this instance forces. Movement IV takes the human out of the loop and then puts the ceiling on everything above it, and a reader who reads only section 10 will at least not misquote the source.

Movement I - the ground you already hold#

flowchart TB
    PILE["a pile of notes<br/><i>grows faster than you organise it</i>"] --> Q{"which cost<br/>is the expensive one?"}
    Q -->|"the instinctive answer"| LOOK["finding the documents<br/><i>buy better search</i>"]
    Q -->|"the actual answer"| SYN["relating them to each other<br/><i>happens after you have them</i>"]
    LOOK --> STUCK["synthesis still re-derived<br/>on every question"]
    SYN --> ONCE["<b>compile once at ingest</b><br/>then keep it current"]
    classDef wrong fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d
    classDef right fill:#dcfce7,stroke:#15803d,color:#14532d
    class LOOK,STUCK wrong
    class SYN,ONCE right

Red is the purchase most teams make and green is the one that pays. The crux is that the diagnosis is a fork between two different costs, and the entire retrieval industry is aimed at the cheaper one. It is drawn as a fork rather than as a pipeline because the two branches are not stages you pass through - they are alternatives, and choosing the red one feels like progress right up until you notice the synthesis is still being paid for on every question. Sections 1 and 2 walk the two branches in order. Synthesized from S8 n1 and n2.

1. The pile, and why pointing search at it does not help#

Start with the artifact, because the whole design is a response to it.

raw dictated note
raw dictated note

What it teaches: what the input to this system actually looks like - raw/walt-disney.md, 306 words, no title, no headings, no tags, no links, nine unbroken paragraphs of dictated speech. Corroborated by n3, narration @ t=311s.

Look at the sidebar rather than the prose. Every filename is a date and a fragment of a sentence, and they run down the pane further than the window shows. That is the problem stated more honestly than any diagram could state it, and the speaker's opening question to the room - who has a notes folder that is a complete disorganised mess - got essentially every hand [@t=49].

The instinctive fix is to search it, and at small scale that works well enough that the real failure stays hidden. It surfaces when you ask something that no single note answers. Suppose you want to know what you have concluded about how founders handle failure, having written about Disney in January and Ferrari in March and something else in between. Retrieval will find you three chunks. It will not have noticed, at any point in the intervening months, that those three notes are about the same thing.

Background, supplied. Retrieval-augmented generation embeds your documents, finds the chunks nearest your question, and puts them in the prompt. The important property for this argument is that it is stateless across queries - each question starts from the raw corpus, and nothing the model worked out last time is available this time. (Uncited by construction: background, not from this source.)

That statelessness is the actual defect, and it is sharper than the usual complaint that retrieval returns bad chunks. The synthesis you need is performed fresh on every ask, while you wait, and then discarded [S8 n1]. Ask the same question twice and you pay twice. Nothing accumulates.

Which raises the question the pattern answers: if the synthesis is the expensive part and it keeps being thrown away, why is it being done at query time at all?

2. Compile once - the pattern, and why it is S8's rather than this talk's#

It is not being done at query time in this design, and the alternative is displayed on stage.

Karpathy's llm-wiki gist, The core idea
Karpathy's llm-wiki gist, The core idea

What it teaches: the pattern's own statement of the trade - the LLM "incrementally builds and maintains a persistent wiki... The knowledge is compiled once and then kept current, not re-derived on every query." Corroborated by n1, narration @ t=697s.

Stop and note whose words those are, because it changes what this whole note is evidence for. That is Andrej Karpathy's llm-wiki gist, which this brain already ingested as S8, and Ben Holmes names it on stage as where the idea came from [@t=697]. He is implementing it, not proposing it.

The consequence is a gating rule worth internalising, because it is easy to get wrong in exactly the direction that feels like progress. A second source displaying the first does not corroborate it. Same author, same document, same revision - under the independence rule that is one leg wearing a different hat, and every one of S8's eighteen nodes remains needs-check after this ingest [n1]. What genuinely arrived is narrower and still valuable: somebody other than the author built it.

The architecture that gets implemented is the second half of the same gist.

the gist's Architecture section
the gist's Architecture section

What it teaches: three layers defined by who may write to them - raw sources ("immutable... the LLM reads from them but never modifies them. This is your source of truth"), the wiki ("The LLM owns this layer entirely... You read it; the LLM writes it"), and the schema (a CLAUDE.md or AGENTS.md that makes the LLM "a disciplined wiki maintainer rather than a generic chatbot"). Corroborated by n1; this is S8 n4 and n5 rendered.

Hold onto the word immutable in the first layer. It is the quiet load-bearing rule of the entire pattern, because it is what lets any derived claim be walked back to something the model could not have edited, and it is the rule this implementation breaks in section 7.

So the pattern is settled and this brain already held it. What it never held was anyone running one, and running one turns out to require parts the pattern does not mention.

Movement II - what running it actually takes#

flowchart TB
    CAP["capture<br/><i>friction must be near zero</i>"] --> RAW["raw note<br/>no title, no tags"]
    RAW --> PASS["enrichment pass<br/><i>a versioned skill, run later</i>"]
    PASS --> G1{"already<br/>stamped?"}
    G1 -->|yes| SKIP["skip<br/><i>cost tracks writing rate</i>"]
    G1 -->|no| WORK["tag, attribute, link"]
    REG[("tag registry<br/><i>read first, extend reluctantly</i>")] --> WORK
    WORK --> STAMP["write enrichedAt"]
    classDef guard fill:#dbeafe,stroke:#1d4ed8,color:#1e3a5f
    class G1,REG guard

The two blue elements are the mechanisms S8 never specifies, and they are the subject of sections 5 and 6. The crux is that both are guards rather than features - one bounds cost, the other bounds vocabulary - and a system missing either degrades quietly rather than failing. They are drawn touching the same work step because that is the honest picture: neither is a stage in the pipeline, each is a constraint the pipeline consults, which is why a reader skimming the talk hears four sequential steps and misses both. Sections 3 and 4 set up why enrichment is a separate pass at all. Synthesized from n2, n3, n4, n5, n6.

3. Capture, the constraint nobody budgets for#

The first of those parts is upstream of everything the pattern describes, which is presumably why the pattern does not describe it.

The argument is not the one you expect. Voice dictation gets recommended, at a claimed 200 words per minute against typing, and the reason given is not comfort or speed for its own sake [@t=188]. It is supply. "If you want to get to a point where you can actually have LLMs generate wikis, visualizations, etc., you need a lot of raw data. You need a lot of raw materials" [@t=296, n2]. The synthesis layer is a function of its inputs, and a knowledge base assembled from the six notes you had the discipline to write is not worth maintaining.

To see why this is a design constraint rather than a productivity tip, consider what capture friction does. Every unit of effort at capture time is paid at the moment you are least willing to pay it, in the middle of doing something else, and the note you do not write is not a degraded input but an absent one. So the system's front door has to cost approximately nothing, and the 200 wpm figure - which is unsourced folklore and should be treated as such [n2] - is pointing at a real asymmetry even if the number is wrong.

The corollary is the part that takes discipline, and it is stated flatly. "Don't worry if you're being a little bit scrappy, a little bit rambly. You're not formatting things with perfect bullet points. That's fine" [@t=311, n3]. Look back at the frame in section 1 and note that it has no title. Not a bad title - no title.

Structure has not been abandoned here, and that is the whole trick. It has been deferred to a machine pass, which is only an affordable decision because something downstream reliably performs it. That something is the next section.

4. Enrichment as a separate pass, not a capture-time discipline#

the enrich-note SKILL.md
the enrich-note SKILL.md

What it teaches: enrichment is a versioned skill file in the vault, invoked by name, doing three fixed things - tags, source, related notes - to one note at a time. Corroborated by n4, narration @ t=389s.

The thing to notice first is what kind of object this is. It is not a prompt typed into a chat window and it is not a script. It is a SKILL.md living in .agents/skills/enrich-note/ inside the vault itself, sitting beside refresh-wiki, enrich-notes-loop and summarize-voice-transcription in the sidebar - a small library of maintenance operations, versioned with the notes they operate on.

That placement is doing more work than it appears to. The schema layer in S8's architecture is a document telling the LLM how the wiki is organised, and what has happened here is that the procedures have been factored out of it into separate addressable files. The result is that maintenance can be invoked by name, by a human or by a scheduler, without restating what it means each time.

The three steps are unremarkable in themselves - tag it, record where it came from, link it to related notes. What is worth study is the two things wrapped around them, because those are the parts that were invented rather than inherited, and they are the difference between a system that works in a demo and one that works in a year.

5. The stamp that turns a corpus-wide sweep into an incremental one#

The first is three lines long and easy to read past.

"Enrich one note - the one given by path, or the note in context - with metadata. If the frontmatter already has enrichedAt, the note is done - skip it. Do the three steps below, then stamp enrichedAt with the current ISO timestamp." [visuals/frame_404.jpg, n5]

flowchart LR
    subgraph WITHOUT["without the stamp"]
        W1["every run reads<br/>the whole corpus"] --> W2["cost grows with<br/>everything ever written"]
        W2 --> W3["<b>gets dearer as the<br/>base gets more valuable</b>"]
    end
    subgraph WITH["with the stamp"]
        S1["every run reads<br/>only the unstamped"] --> S2["cost tracks<br/>your writing rate"]
        S2 --> S3["<b>flat, so it can<br/>go on a timer</b>"]
    end
    classDef bad fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d
    classDef good fill:#dcfce7,stroke:#15803d,color:#14532d
    class W1,W2,W3 bad
    class S1,S2,S3 good

The crux is that the stamp is not a convenience, it is what converts maintenance from a cost that punishes success into one that does not. The two chains are drawn in parallel rather than as a before-and-after sequence because they are not stages of anything - they are the same operation under two economics, and the third box in each is where they actually diverge. This is also the shape of the answer to a question S8 leaves open: sections 9's nightly schedule is unreachable from the red chain, because nobody puts an unbounded pass on a timer. Synthesized from n5, and from S8 n8.

Before reading on, ask what that buys, because the answer is larger than it looks and the talk states only the small half of it. Ben's own framing is about coordination between agents: "put a little time stamp on there so if we ask the agent to do another pass it remembers that some other agent did it in the past" [@t=404].

That is true and it is the lesser benefit. The larger one is economic. Without the stamp, "enrich my notes" is an operation over the whole corpus, and its cost grows with everything you have ever written, which means it gets more expensive precisely as the knowledge base gets more valuable. With the stamp it is an operation over what is new, and its cost tracks your writing rate instead of your archive size. Operationally that is exactly how it is used: the loop "will go ahead and find any notes that weren't enriched in the past" [@t=526, n5].

Now connect it forward, because this is the load-bearing dependency in the whole system. S8's maintenance operation is "periodically, ask the LLM to health-check the wiki" [S8 n8]. That phrasing assumes a human deciding when, and it assumes it because an unbounded pass over everything is not something you would put on a timer. The stamp is what makes a timer safe, and section 9's nightly schedule is not reachable without it. A mechanism the pattern never mentions turns out to be the precondition for the pattern's most attractive property.

One thing it does not solve, and the talk does not raise: a stamped note is skipped forever, so a note enriched under an early version of the skill never gets revisited when the skill improves. The stamp records that work happened, not which version did it.

6. The registry that stops the taxonomy sprawling#

The second wrapper addresses a failure you would not predict from the pattern and would certainly hit by month two.

the tags.md registry
the tags.md registry

What it teaches: the controlled vocabulary as an actual file - tags grouped under Product & business, Creativity & craft, Growth & living, Literature and Personal & misc, each carrying a one-line definition, with a separate "Source medium" axis holding book, podcast, video, article. Corroborated by n6, narration @ t=420s.

The instruction that governs it is in the skill file from section 4, and its tone is unusual for a prompt. "Read references/tags.md first. Reuse an existing tag whenever one fits. Be reluctant to add new tags. Tags should span many notes, not a couple. Only coin a new tag when nothing matches, and when you do, append it to the registry with a one-line description so the next note can reuse it" [n6].

The reason given is behavioural and blunt: without it "the agent isn't inventing new tags every time" and, more directly, "Claude loves to get creative" [@t=420, @t=435]. At first glance that reads as a complaint about model temperament, and it is worth seeing why it is structural instead. Each enrichment call sees one note. A tag that is locally perfect for that note - disney-animation-history - is globally useless, because a taxonomy's entire value is that two notes end up under the same label. An agent with no view of the corpus will produce a vocabulary with one term per document, which is not a taxonomy but a restatement of the filenames.

So the registry is not documentation. It is the mechanism that gives a per-note operation a corpus-wide memory, and every part of its design follows from that. It must be read before tagging, or the agent has no idea what already exists. New tags must be appended with a definition, or the next pass cannot tell a genuine new concept from a synonym of an old one. And the reluctance has to be stated explicitly, because the model's default is to be helpful, and inventing a precise new label feels helpful in the moment.

The quieter idea in the same frame is the separate Source medium axis, holding book, podcast, video, article apart from the topic tags. That is faceting - keeping "what this is about" from colliding with "what kind of thing it was" - and it is the cheapest possible defence against a vocabulary in which podcast and founders compete for the same slot.

Both mechanisms so far are about the process. What they produce is the subject of the next section, and it is where the design stops agreeing with itself.

Movement III - the payoff, and the crack in it#

flowchart TB
    ENR["enrichment job"] -->|"writes title,<br/>tags, backlinks"| RAW
    WIKI["wiki-maintenance job"] -->|"<b>forbidden</b>"| RAW
    RAW[("raw notes<br/><i>declared 'read-only'</i>")] -->|"reads"| W
    WIKI -->|"writes"| W[("wiki pages<br/><i>cited per claim</i>")]
    classDef bad fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d
    classDef ok fill:#dcfce7,stroke:#15803d,color:#14532d
    class ENR bad
    class WIKI,W ok

Two jobs reach for the same layer and only one of them is supposed to. The crux is that "raw is immutable" was never the operative rule - the operative rule is one declared writer per layer, and the talk enforces it without ever saying so. It is drawn with both arrows landing on raw because the contradiction is only visible when you put the two jobs on one picture, which the source never does; seen separately each looks correct. Section 7 is where the frames prove it happened and section 8 is the payoff that makes the derived layer worth trusting anyway. Synthesized from n7, n9, n11, d1.

7. Before and after, and the rule the system breaks#

Here is the same file from section 1, after the pass has run.

the enriched note
the enriched note

What it teaches: raw/walt-disney.md now carries a title, "Walt Disney (Acquired)", and a trailing ## Related section linking to Ferrari (Acquired), Insights from "Sell Like Steve Jobs", and David Senra on life's work. Same path in the sidebar, same prose body. Corroborated by n7, narration @ t=372s.

Compare it against the frame in section 1 before reading on, and name what changed. The prose is identical, word for word. What is new is a title, frontmatter, and three links to notes written weeks apart that nobody sat down and connected. That is the payoff of the entire design in one screen, and those backlinks were chosen by judgement rather than by a similarity threshold - the skill hands the agent grep, key-term search and the instruction to "use your judgment" [n8].

Now look at the path in the sidebar again. raw/walt-disney.md.

The system just wrote into the raw layer. Five minutes earlier the same talk displayed the rule that raw sources are "immutable... the LLM reads from them but never modifies them. This is your source of truth" [visuals/frame_728.jpg], and its own scheduled automation encodes that rule as a hard constraint: "Raw source notes are read-only" [n11]. Both are on screen, minutes apart, and the talk never notices [d1].

The instinct is to call this an implementation bug. It is worth resisting, because the rule as written cannot survive contact with a real vault and the reason is visible in section 3. Capture must be frictionless, so notes arrive with no title and no tags. Enrichment has to put them somewhere. If the raw layer is genuinely append-only, then every note needs a shadow metadata file, and you have doubled the file count of the system to protect a purity that buys you nothing you could not get from git.

The reconciliation is sitting in the automation prompt's own wording, unremarked. The constraint is not "raw is immutable" but "do not edit original notes outside ~/vault/wikis/ unless explicitly instructed by that wiki's AGENTS.md" [n11]. That is a different rule. It says the wiki job may not touch raw, and it leaves room for a declared exception - which is exactly what the enrichment job is. So the principle that survives is one declared writer per layer: enrichment owns raw's metadata, the wiki job owns wikis/, and neither crosses into the other's territory.

That is weaker than S8's version and it is implementable, which is the trade. It does cost something real, and the cost should not be waved past. Under strict immutability, a derived claim can always be walked back to a file the model could not have edited, and that property is what makes the derived layer safe to trust. Once raw is writable by anything, the audit trail depends on version control rather than on the architecture, and "the agent could not have done that" becomes "let me check the history".

Which makes it fair to ask what the derived layer looks like when it is done well, since it is now trusted on weaker grounds than the pattern intended.

8. What a good derived page looks like#

a generated wiki entity page
a generated wiki entity page

What it teaches: a generated person page structured Who / What the sources say / Related / Sources, in which every claim bullet terminates in a link to the specific dated raw note supporting it. Corroborated by n9, narration @ t=774s.

This is the most transferable frame in the source, and the reason is one structural choice rather than anything about its subject.

Read the four bullets under "What the sources say". Each makes a claim, and each ends in a link - 2026-01-14-the-case-for-christ-study-notes-097z7d8n, then a different note for the next claim, and so on. The page is cited per claim, not per page. A "Sources" list at the bottom would have told you the page was derived from four notes; this tells you which sentence came from which one.

To see why that distinction carries the whole design, consider what happens when a claim on this page turns out to be wrong. With page-level sourcing you know the page drew on four notes and you have to re-read all four to find the error. With claim-level sourcing you follow one link. The page becomes debuggable in the way code is debuggable, one assertion at a time, and a generated artifact that cannot be debugged is one you eventually stop trusting wholesale.

It also changes what the raw layer is for. Those dated filenames are not an archive - they are the things the derived layer points at, which is why section 7's rule matters and why "let me check the history" is an acceptable fallback rather than a disaster. The link is only worth following if what it lands on is stable.

Notice what this page is not, as well. It is not a summary of a source. It is an entity - a person - assembled from four sources that were ingested separately and never mention each other. That is the accumulation the pattern promised in section 2, made concrete: the page did not exist in any input.

The remaining question is who runs all this, and how often.

Movement IV - taking the human out of the trigger#

flowchart TB
    CRON["nightly / weekly schedule"] --> DOWN["sync vault into sandbox"]
    DOWN --> RUN["run the skill<br/><i>incremental, so it is bounded</i>"]
    RUN --> UP["sync back"]
    UP --> DIFF["morning diff"]
    DIFF --> REV["human reviews"]
    REV -.->|"never measured"| BAD["reject / revert<br/><i>no rate, no procedure</i>"]
    classDef unknown fill:#fef3c7,stroke:#b45309,color:#78350f
    class BAD unknown

Every arrow here is solid except one. The crux is that the loop is deliberately unclever and the entire safety argument rests on the single dotted arrow, which nobody has examined. The amber node is drawn as an endpoint rather than a feedback edge on purpose: a real review loop would return to the wiki with a correction, and what the source actually documents is a human looking at a diff with no recorded case of anything being sent back. Section 9 covers the mechanism and the per-directory schema that makes it general; section 10 is the ceiling on all of it. Synthesized from n10, n12, n13, n16.

9. Taking the human out, and the scoping that makes that safe#

The honest answer in most personal-knowledge-base systems is that nobody runs it, which is why they die. Ben's answer is to remove the human from the trigger entirely.

the scheduled maintenance prompt
the scheduled maintenance prompt

What it teaches: a saved schedule labelled Weekly, whose prompt syncs the vault into a cloud sandbox, names the pattern it is maintaining, and issues a numbered task list including the read-only constraint. Corroborated by n10, narration @ t=903s; n11 and n12 are figure-only.

The loop itself is deliberately unclever and he whiteboards it live: sync the markdown down into a sandbox, run the skill, sync it back up [@t=903, n10]. Obsidian's headless CLI does the syncing because it avoids manual pushes and pulls, and he immediately offers the substitute - "you could also just do like a git clone" [@t=918]. Two schedules are shown, one weekly for the wiki refresh and one daily for enrichment, and the framing of the payoff is the memorable line: "I wake up to a perfectly fresh wiki that I can review. It's like the daily paper, but it's your own" [@t=995, n13].

Background, supplied. This is the same shape as a nightly build. Work that is expensive, mechanical and not urgent is moved off the interactive path onto a timer, and the human's relationship to it becomes reviewing output rather than triggering it. (Uncited by construction.)

Two things in that prompt are worth more than the scheduling, and both are visible only in the screenshot - the narration never mentions either, so both are single-leg and should be held accordingly [n11, n12].

The first is that the immutability rule made the trip from prose into an executable constraint. The prompt names the pattern - "These wikis follow Andrej Karpathy's knowledge-base pattern: raw sources elsewhere in the vault are immutable" - and then encodes it as an instruction the job must obey [n11]. Most patterns never make that trip, and the fact that this one did is what makes section 7's contradiction interesting rather than merely careless, because the rule is being enforced somewhere.

The second is that the schema layer turns out to be plural, which S8 does not anticipate. "Each wiki is a directory with its own AGENTS.md, index.md, overview.md, log.md, sources/, and synthesis subdirectories", and the job is told: "For each wiki, read AGENTS.md and index.md first. Follow that wiki's local schema over any generic instruction here" [n12]. Discovery is a find command.

Sit with what that enables, because it is a small line with a large consequence. The scheduled job knows nothing about any particular knowledge base. It discovers them, reads each one's local conventions, and defers to them. One maintainer, many knowledge bases, none of which had to be registered anywhere - and a new wiki becomes maintained by creating a directory with an AGENTS.md in it. The generic instructions become a fallback rather than a specification.

So the human is out of the trigger and into the review seat. Which raises the question that decides whether any of this is trustworthy, and the source does not answer it.

10. What none of this tells you#

Nothing in this talk is measured [n16].

flowchart TB
    A["Four mechanisms, fully specified<br/>capture, enrichment, the stamp, the registry"]
    B["One gate, barely specified<br/>'read a fresh wiki in the morning' - n13"]
    C["A nightly job with write access<br/>to your own corpus - n12"]
    Q{"Is the corpus still<br/>trustworthy by morning?"}
    M["Unanswerable from this source.<br/>No bad-edit rate, no rejection ever reported,<br/>no revert path, no corpus size - n16"]

    A --> C
    B --> C
    C --> Q --> M

    classDef weak fill:#fee2e2,stroke:#b91c1c,color:#7f1d1d
    classDef open fill:#fef3c7,stroke:#b45309,color:#78350f
    class B weak
    class M open

This is an evidence-weight diagram, not an architecture diagram, and the thing to read off it is how much detail each box got rather than how the parts connect. The crux is that the specification effort in this talk runs inversely to the load each component bears: four mechanisms are described well enough to reimplement, and the single gate the whole unattended design depends on gets one sentence. It is drawn with the mechanisms and the gate entering from the same level because they are not a system and its caveat, they are two halves of one safety argument, and the talk treats only one half as engineering. Notice that the failure this shape predicts is silent rather than loud: a wrong backlink is invisible once written [n8], so the morning review is being asked to catch precisely the class of error it is least able to see.

Synthesized from n8, n12, n13 and n16. The inverse relationship between specification detail and load is this brain's reading, not a claim the source makes.

That sentence is worth stating plainly because everything above is attractive, and attractive unmeasured systems are how this brain gets into trouble. Across twenty-one minutes there is no baseline, no comparison against the retrieval systems section 1 dismisses, no retrieval quality figure, no time saved, no error rate, no count of bad edits, no corpus size and no cost. The only number uttered is the 200 wpm dictation figure, which is about typing, is unsourced, and is not about this system at all.

The gap that matters most is the review step, because it is what the entire unattended design rests on. A nightly job with write access to your notes is safe if and only if bad output gets caught, and the evidence that it does is one sentence about reading a fresh wiki in the morning [n13]. Nothing reports how often a run produces a bad edit, whether one has ever been rejected, what rejection looks like operationally, or how a wrong write is reverted. The same hole sits under backlinks - they are a judgement call [n8], and a wrong backlink is invisible once written, silently joining two things that are not related.

None of this makes the source weak for what it actually is. It is evidence that the pattern can be built by someone other than its author and run on a real corpus, which is precisely the evidence this brain lacked about S8, and it comes with four mechanisms and one correction that you only find by building. Read it as an existence proof with a parts list. Do not read it as a result.

Diagram (mental model)#

flowchart TB
    V["voice / typing<br/><i>friction must be ~0</i>"] -->|"capture, unstructured"| RAW

    subgraph L1["layer 1 - raw"]
        RAW["dated markdown notes<br/><i>+ agent-written metadata</i>"]
    end
    subgraph L2["layer 2 - wiki"]
        W["entity + concept pages<br/><i>cited per claim</i>"]
    end
    subgraph L3["layer 3 - schema"]
        SK["skills: enrich-note,<br/>refresh-wiki"]
        AG["per-wiki AGENTS.md<br/><i>local overrides generic</i>"]
    end

    RAW -->|"enrich: tags, source,<br/>backlinks"| RAW
    RAW -->|"synthesize"| W
    SK -.->|"governs"| RAW
    SK -.->|"governs"| W
    AG -.->|"overrides"| SK
    W -->|"generate on demand"| VIZ["disposable HTML views"]

    CRON["nightly / weekly sandbox<br/><i>sync down, run, sync up</i>"] ==>|"invokes"| SK
    H["human"] -->|"reviews the diff"| W
    H -->|"co-evolves"| AG

    classDef writer fill:#dcfce7,stroke:#15803d,color:#14532d
    classDef human fill:#dbeafe,stroke:#1d4ed8,color:#1e3a5f
    class SK,AG writer
    class H,V human

Read it as three stacked layers with the write paths drawn as solid arrows and the governing relationships as dotted ones. Blue is where a human touches the system, green is the schema layer that decides how the agent behaves, and the heavy arrow from the scheduler is what runs the whole thing without anyone present.

The crux is that the layers are defined by who may write to them, and the schema layer is the only place a human's intent enters the machine. Everything the agent does to the other two layers is determined by files in layer 3, which is why co-evolving those files - rather than writing notes or editing wiki pages - is the human's actual job.

It is drawn with the self-loop on raw rather than with a clean top-to-bottom flow because that loop is this instance's departure from its source, and hiding it would reproduce the tidy version of the architecture that section 7 showed to be unimplementable. Two arrows land on layer 1 and they come from different jobs, which is the whole content of the "one declared writer per layer" rule - a shape that showed a single writer would make the rule look automatic when it is in fact a discipline someone has to maintain. Note also that the human has no arrow into layer 2 at all. They read it and they review a diff, and if they edit it directly the next scheduled run will not know why. Synthesized from n4, n5, n6, n7, n9, n10, n11, n12, n14 and d1; layer names from S8 n4.

💡 Terms#

What to distrust in this note#

The source is T4 - one practitioner demonstrating his own workflow - and it measures nothing [n16]. That is the ceiling on everything above, and it is not softened by how well the mechanisms reason.

There is a T2 commercial interest, and it sits on the most novel section. Ben Holmes is developer relations lead at Warp and volunteers this at the top [@t=18]. The knowledge-base half pitches nothing and explicitly tells you any markdown viewer will do [@t=109]. The automation half - section 9, one of the four things this source adds beyond S8 - is demonstrated exclusively on oz.dev, which is Warp's, with the URL given twice as a call to action [d2]. The mechanism survives removing the vendor, because he names git clone and a competitor's product as substitutes on stage, but weigh the section accordingly.

Three of the most interesting findings are figure-only. The operational immutability constraint [n11], the per-wiki schema override [n12] and the gap-finding purpose of the graph view [n15] appear in screenshots and are never spoken. They are single-leg and marked as such at the point of use. The first two are also the least likely to be wrong, since a screenshot of a saved prompt is strong evidence about that prompt - but it is evidence about a prompt, not about a system's behaviour.

The most reusable claim in this note is also the least corroborated by the source. Section 7's "one declared writer per layer" is this brain's reading, derived by holding S8's architecture against this talk's frames. The talk does not say it, does not notice the contradiction it resolves, and would perhaps not agree with the resolution. It is flagged as commentary in d1 and should be carried as a hypothesis with a good argument behind it, not as a finding.

And the independence trap is worth restating because it is the easiest error to make here. This source displays S8 at length and agrees with it completely. That agreement is worth nothing evidentially - it is the same document on a projector [n1]. Anyone citing S8 and S26 together as two sources for the pattern is counting one source twice.

Open questions#

Feeds these topics#

Presentation narrative#

Presentation framing, synthesized. A senior-leadership talk track derived from this source's gated nodes. It presents the work as an architecture decision and an evidence increment. It adds no production-readiness claim the source did not establish, and where the source measures nothing the track says so rather than rounding it up.

Slide 1 - The headline#

A pattern this brain has held since April now has its first independent implementation, and the valuable part is not that it works - it is the four mechanisms the pattern never specified. Someone at another company read Karpathy's llm-wiki gist, built it, and ran it against a real corpus of a few hundred notes [n1].

The leadership significance is that we can stop treating this design as a proposal. What we could not say in April was whether anyone other than its author could stand it up; we can say that now. What we still cannot say is whether it outperforms the retrieval systems it replaces, because nothing in this source is measured [n16].

the pattern being implemented
the pattern being implemented

This is a provenance slide, not an architecture slide. Those words are the gist's, not the speaker's, so his agreement with them buys nothing evidentially - it is one source displayed twice. The crux is that we gained an existence proof and not a second opinion, which is what stops us counting one idea as two when we cite it. Synthesized from n1 and n16.

Slide 2 - The problem was accumulation, not retrieval#

Every knowledge base we have built attacks the wrong cost. Notes arrive faster than anyone organises them, the instinct is to point search at the pile, and better search genuinely improves which document comes back [n3].

It changes nothing about the expensive part. Retrieval is stateless across queries, so a question needing five documents synthesised pays for that synthesis again on every single ask, while the user waits, and then the result is discarded [S8 n1]. The question for an architecture review is therefore not whether our retrieval is good enough. It is whether anything we compute is ever kept.

a raw dictated note
a raw dictated note

The sidebar matters more than the note, where dated filenames run past the fold. The crux is that nothing in that list was ever related to anything else, and no search infrastructure will relate them. Engineers should notice where that puts the budget - chunking, embeddings and rerankers all improve lookup, and every one leaves synthesis where it was. Corroborated by n3, narration @t=311s.

Slide 3 - The architecture is an ownership decision, not a storage one#

The design that works layers the store by who is allowed to write to it, and that is a governance choice before it is a technical one. Raw sources are immutable and act as the audit anchor, the derived wiki is written only by the model and read only by us, and the schema document is the single layer both parties touch [S8 n4, n5].

What engineers should take from this is where the engineering lands. Not the retrieval stack and not the embedding model - a prose contract telling the agent how the store is organised. The leadership significance is that an autonomous writer is governed by a reviewable document rather than by code nobody reads.

the three layers, defined by who may write
the three layers, defined by who may write

This is an ownership diagram, not a component diagram. Nothing here tells you where bytes live, and that is deliberate. The crux is that the immutable raw layer is what lets any derived claim be walked back to something the model could not have edited - remove it and the knowledge base becomes its own only witness. Hold that word immutable; slide 5 is where this implementation breaks it. Corroborated by S8 n4, n5.

Slide 4 - What the pattern left out is what decides whether it survives#

Two mechanisms appear in the implementation that appear nowhere in the design, and both are guards rather than features. The first is an idempotence stamp: three lines in the enrichment skill that skip any note already carrying an enrichedAt timestamp and write one on completion [n5].

That sounds like housekeeping and it is the difference between a design and an operation. Without it, maintenance costs grow with everything ever written, so the job gets dearer precisely as the knowledge base becomes more valuable. With it, cost tracks your writing rate. Nobody puts an unbounded pass on a timer, which is why the pattern says "periodically ask the model" and this implementation says "nightly". The second guard is a tag registry the agent must read before tagging, because each call sees one note and an agent with no view of the corpus coins a locally perfect, globally useless label [n6].

the enrichment skill and its idempotence rule
the enrichment skill and its idempotence rule

This is a control diagram rather than a data-flow one. The crux is that both mechanisms bound something - one bounds cost, the other bounds vocabulary - and a system missing either degrades quietly rather than failing. That is what makes them easy to omit from a design document and expensive to omit from a build. Corroborated by n5, n6, and visuals/frame_425.jpg.

Slide 5 - The rule it endorses is the rule it breaks#

The implementation writes titles, tags and backlinks directly into the raw notes, minutes after displaying the rule that raw sources are read-only, and never notices [n7, n11, d1].

We should resist calling this an implementation bug, because the strict rule cannot survive a real vault. Capture has to be frictionless, so notes arrive with no metadata, and that metadata has to land somewhere; enforcing purity means a shadow file per note to protect a property version control already supplies. The rule that survives is one declared writer per layer, with the exception written down. The cost belongs in any adoption decision and is easy to skip past: the audit story moves from "the agent could not have edited this" to "check the history", and what carries trust instead is that every generated claim links to the one note behind it [n9].

the enriched note, written back into the raw layer
the enriched note, written back into the raw layer

This is a before-and-after of a single file, and the sidebar path is the whole finding. The crux is that the contradiction is only visible when you put both jobs on one picture, which the source never does - seen separately, each looks correct. That is worth remembering as a review habit, because it is how a governance rule quietly stops being enforced. Corroborated by n7 and d1; the reconciliation is this brain's reading, not the source's.

Slide 6 - It runs unattended, and the gate that makes that safe was never examined#

The whole system runs overnight in a cloud sandbox and the human meets it as a morning diff, which is the right design and rests on one unexamined sentence [n10, n13].

The loop itself is deliberately unclever - sync the vault down, run the skill, sync it back - and it is affordable only because of the stamp from slide 4. The leadership significance is the part to slow down on. Unattended maintenance with write access to our notes is safe if and only if bad output gets caught, and the entire evidence for that is one remark about reading a fresh wiki over breakfast. No bad-edit rate. No recorded rejection. No revert procedure.

the scheduled maintenance job
the scheduled maintenance job

This is a saved prompt, which is exactly as much as it proves. The crux is that the immutability constraint and the per-directory schema override visible here were never spoken aloud, so they are evidence about a configuration rather than about behaviour - both are single-leg and should be cited that way. Corroborated by n10; n11 and n12 are figure-only.

Key takeaway message#

A knowledge base decays because synthesis is re-derived on every question and nobody maintains the result, and this source is the first independent evidence that the compile-once alternative can actually be built and run by someone other than its author. What it delivers is the parts list the pattern omits - an idempotence stamp that makes maintenance schedulable, a controlled vocabulary that stops the taxonomy sprawling, per-claim citations that keep the derived layer auditable, and the correction that immutability is scoped per job rather than per layer. The boundary is unambiguous and it sets the verdict: nothing here is measured, and the human review step carrying the entire safety argument for unattended operation has never been examined by anyone. So the decision is neither to adopt nor to reject, but to pilot with that gate instrumented - build the four mechanisms, which are cheap and well reasoned, and measure the one number nobody has, which is how often an overnight run produces an edit a human rejects. That number is what turns a good design into an operable one, and it costs a fortnight.

Inherits the global rules in ../../AGENTS.md.