A user ran Enzyme on her workspace — what she called “pure chaos, very poorly managed.” No tags, no system. She said: “It talks like a writer. How??”
What she encountered were catalysts. Questions Enzyme generated from her content. They sound like something a careful reader of your work would ask:
“The team revisited caching three times — once as a performance fix, once as a cost concern, once as a reliability question. What changed between each return?”
That question connects a frustrated aside in a November retro to a confident decision in a March strategy doc. The November note never mentions strategy. The March doc never mentions frustration. The catalyst found both because it was generated from the full timeline of the entity — it knows the question has been opened before, and it reaches for every place it was.
How they’re built
Catalysts and their similarity scores are pre-computed at init, so that query time is a lookup.
Build timeruns at init and refresh · seconds, not minutes
1
Pick an entity
folder:meeting-notes89 files · spans 14 months
2
Sample across its timeline
earlyapi-kickoff.md, vendor-eval.md, ...
midretro-2025-11.md, slack-summary-oct.md, ...
recentmigration-plan.md, sync-2026-01.md, ...
3
Generate catalysts from the samples
"Which decisions kept getting reopened, and what was unresolved each time?"
"The vendor conversation died in Q2. What replaced it?"
4
Pre-compute: every catalyst × every document chunk
retro-2025-11
migration-plan
api-kickoff
slack-oct
"decisions reopened..."
0.84
0.71
0.38
0.79
"vendor conversation..."
0.22
0.31
0.87
0.54
query time is a lookup into this table
Query time~50ms · no API calls · local
query"why did we change direction"
→
matches catalyst"decisions reopened..."
→
looks up pre-computed scoresretro-2025-11 0.84, slack-oct 0.79, migration-plan 0.71
What this reaches
The same query, three approaches. The catalyst finds what the others can’t.
query"why did we change direction"
Keyword search
Finds
docs/migration-plan.mdcontains "change direction"
meeting-notes/2026-01-12.mdcontains "direction"
Misses
The retro note that named the real blocker — never uses "direction"
The Slack thread summary where the dissent first appeared
The earlier proposal that got quietly abandoned
Embedding search
Finds
docs/migration-plan.mdsemantically close to "change direction"
meeting-notes/2026-01-12.mdsimilar topic cluster
notes/api-concerns.mdnearby in vector space
Misses
The retro note — written in a different emotional register, embeddings don't bridge frustration → strategy
The abandoned proposal — 8 months old, no recency signal to surface it
Catalyst search
Finds
meeting-notes/2025-11-08.mdcatalyst: "which decisions kept getting reopened" bridges frustration to strategy
notes/api-proposal-v1.mdcatalyst spans eras — found the abandoned first attempt from 8 months ago
meeting-notes/2026-01-12.mdalso matches, boosted by recency
notes/slack-summary-2025-10.mdcatalyst recognized the dissent pattern across contexts
Why these surfaced
The catalyst was generated from two years of content across this entity — it knows the question has been reopened before, and reaches for all the places it was.
Catalysts identify blind spots — threads you stopped noticing, tensions you resolved in one place and left open in another. They draw throughlines — recurring concerns showing up under different names across months. They regenerate as the corpus grows, so the same entity produces different catalysts six months from now. The probes stay alive where summaries go stale.