Skip to content

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 ⌘⇧PBrain: Provenance Graph.

The brain graph

Nodes are colored by kind; edges carry a type and a timestamp.

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.

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.

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.

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.

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/skills and 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.