The brain
The brain is a graph view of how your LatchAI instance is connected: agents, workflows, chats, memory, skills, files, stories, and runs, with typed edges between them. Nothing in it is user-authored. It is derived entirely from data the daemon already writes, and it is read-only and side-effect free — building the graph never writes into your home.
Open it with the ⌬ button in the activity bar, or ⌘⇧P → Brain: Provenance Graph.

Nodes are colored by kind; edges carry a type and a timestamp.
Two layers
Section titled “Two layers”The schema layer comes from the documents you own: agents, workflows, chats, memory files, and skills, each of which is a node with a stable identity and, where it makes sense, a path that opens in the editor.
The causal layer comes from the append-only JSONL run logs: which run produced which file, which workflow a run belonged to, which story a run touched. That is the part no note-taking tool can reconstruct after the fact — LatchAI’s daemon observed the edge being created, so it records the relationship with a type and a time rather than inferring it later from co-occurrence.
The vocabulary
Section titled “The vocabulary”Eight node kinds, each with its own colour and glyph:
| Node | Derived from | Opens |
|---|---|---|
agent ✦ |
<home>/agents/*.md |
— |
workflow ⌘ |
<home>/workflows/*.json |
The workflow tab |
skill ✧ |
workspace/.claude/skills/<name>/SKILL.md |
The SKILL.md file |
memory ◈ |
workspace/memory/<agent>/*.md |
The memory file |
chat ✉ |
workspace/chats/*.md |
The conversation note |
run ⟳ |
<home>/runs/*.jsonl |
— |
file ▤ |
Paths a run touched | The file |
story ⬡ |
Issue keys found in text (AP-512) |
— |
And the edges between them:
| Edge | Meaning |
|---|---|
uses |
A workflow references an agent in a node’s config; an agent pins a skill |
remembers |
An agent owns a memory file |
authored-by |
A chat ran under a named agent |
produced-by |
A run belonged to a workflow, or to a chat session |
ran |
A run executed under a named agent |
touched |
A run read, wrote or edited a file |
references |
A note links another node with [[wikilinks]], or text mentions a story key |
Story keys are found by shape (ABC-123) with a denylist for the tokens that share it and
never mean an issue — UTF-8, SHA-256, RFC-2119, WCAG-2. Wikilinks resolve against
node names, filenames and agent names; anything unresolved is dropped rather than creating
a ghost node.
Reading it
Section titled “Reading it”Nodes that are file-backed open in the editor, which is the point: the graph is a way to navigate the work, not a poster. Runs carry their event time and files their modification time, so recency is visible.
- Click a node to focus it. The graph re-queries centred on that node.
- Drag the depth slider (1–3) to widen or tighten the neighbourhood around the focus.
- Double-click to open: a workflow node opens its tab, anything file-backed opens the file.
- Toggle type chips to hide kinds you don’t care about — turning them all off is refused, since an empty graph helps nobody.
- Change the time window — 24 hours, 7 days, 30 days, or all time. Structural edges are timeless and always survive; only dated ones fall out of the window.
Two questions it answers well: what did this agent touch last night (focus the agent,
24h, depth 2 — the runs it ran and the files those runs wrote) and what produced this file
(focus the file and read the touched edges back to their runs, and from there to the
workflow or chat that started them).
Layout is a force simulation run to convergence once per query, then handed to the canvas as static positions. You can drag nodes, but nothing is written back — the arrangement is ephemeral by design, because the graph is recomputed rather than stored.
Why derived, not stored
Section titled “Why derived, not stored”A graph you have to maintain is a graph that goes stale. Because the brain is computed from run logs and the files themselves, deleting a chat or renaming a workflow simply changes the graph the next time it is built. There is no index to rebuild and no second source of truth to reconcile — the same convention that keeps workflows as one document.
Recomputing on every request is affordable because the expensive part is cached: run logs are append-only, so a parsed log is keyed by its path and modification time and re-read only when it actually changes.
What it doesn’t show
Section titled “What it doesn’t show”The graph is bounded on purpose, and the bounds are worth knowing before you conclude something is missing:
- The newest 100 run logs, and 400 nodes overall. When the cap bites, the ranking keeps what is nearest the focus, then what is connected at all, then the schema layer (agents, workflows, skills, memory, stories) over the long tail of runs and files, then the most recent.
- Skills from the workspace tier only —
~/.claude/skillsand mounted repos’ skills are not walked here, even though agents can load them. - Agent nodes don’t open.
<home>/agents/sits outside the multi-root filesystem, so there is no path for the editor to open; edit them in Settings. - Story keys are scanned from the first 300KB of a run log, up to 25 per run.
- Edge labels hide themselves past 60 edges, for the same reason the atlas canvas does it.