Enzyme SDK Preview Private beta
Your users accumulate taste — annotated recipes, saved references, logged experiments, collected research. You could build a RAG pipeline that your agent could query, but it wouldn’t know what to ask. Enzyme gives the user’s words to the agent, so it can find what matters: the patterns, preferences, and taste built through hundreds of small choices they never think to articulate.
A cooking app
Let’s say one user has saved and commented on 407 recipes. The user asks:
I’m making dinner for friends Saturday. They’re vegetarian. What should I cook?
RAG might search “vegetarian dinner” against the recipe collection and return the closest matches. Enzyme does something different — the query matches against a pre-computed question that already knows what connects this user’s entries:
With Enzyme, your agent knows that taste isn’t built on a search problem, but an associative one. It matched against a pattern Enzyme found across a year of annotations — miso for butter, tahini for cream, fermented for dairy — none tagged the same way, none sharing a keyword. The indirection surfaces entries that no amount of better embedding search would reach.
I could give you a list of vegetarian crowd-pleasers. But I think I know what you’d actually want to cook.
You’ve been doing something interesting for the last year — swapping fermented ingredients for dairy fats. Miso for butter in the salmon glaze. Tahini for cream in risotto. That banana bread where you halved the sugar and added miso and “people couldn’t figure out why it was so good.”
It’s not a dietary thing — you still use cheese and cream sometimes. It’s a flavor thing. You’re reaching for umami depth and finding it in fermented ingredients more consistently than in dairy.
For vegetarian guests, that’s actually your superpower. A miso-tahini dressing is richer than anything cream-based, and it’s naturally vegan. Here’s where I’d start:
A roasted cauliflower with that miso-tahini glaze you’ve been circling around. Your Caesar trick — anchovy paste, miso, nutritional yeast — works as a dipping sauce without the anchovies if you up the miso.
One question: the banana bread taught you that miso works in sweet contexts too. Any interest in a dessert that plays the same trick? A miso-brown-butter cookie would land in exactly the space you keep finding.
The user gets a sandbox, not search results — not generic vegetarian recipes, but dishes that play to their specific palate. And the dessert suggestion isn’t a random upsell; it’s a miso-brown-butter cookie the user will make, love, and annotate, which sharpens the catalysts for next time.
How catalysts work
“vegetarian dinner for friends” lands far away in embedding space from the banana bread comment from last September, so ranking comments to the query by pure cosine similarity would have missed the connection. Enzyme pre-computes an indirection layer: it reads the accumulated entries, finds recurring patterns, and generates catalysts — thematic questions — for each one. At query time, the agent matches against those questions, not the documents directly.
User's query: "vegetarian dinner for friends"
Catalyst match: "Fermented for dairy, consistently — umami depth
or past richness-through-fat?"
Your users’ queries of the moment deserve the recognition of their taste across time. The catalyst is specific to this person — formed from annotations that don’t share a keyword or tag:
Personalization is built at index time and catalysts evolves off of the query request path. With these catalysts, the agent wastes no time finding the right user content to answer from.
Integration
The SDK starts from your app’s own model. Define the activity your product already has — saved recipes, comments, agent observations, edits, accepted suggestions — then map it once into an Enzyme connector.
from enzyme_sdk import Activity, CatalystProfile, EnzymeConnector, enzyme
connector = EnzymeConnector(
app_id="cooking-app",
display_name="Cooking App",
content_label="cooking notes",
collections=[UserRecipeComment, AgentObservedPreference],
catalyst_profiles={
UserRecipeComment: CatalystProfile.PREFERENCE_EVIDENCE,
AgentObservedPreference: CatalystProfile.PREFERENCE_EVIDENCE,
},
)
@enzyme.hydrate(connector)
def hydrate_user(user_id: str):
return db.load_recipe_comments_and_observations(user_id)
@enzyme.transform(connector)
def to_activity(item) -> Activity:
return Activity(
title=item.title,
content=item.notes,
created_at=item.created_at,
source_id=item.id,
collections=[type(item)],
metadata={"labels": item.tags},
)
That connector becomes the integration surface. Serve it as MCP for agent clients, query hosted search from your product, or point it at a self-hosted search service when data residency or deployment constraints require it:
# Expose the same connector as a user-scoped MCP server.
connector.serve(port=9460, init_users=["user-1", "user-2"])
# For local testing with Claude or another MCP client:
# python examples/run_mcp_server.py --ngrok # Query Enzyme's hosted search from your product.
scope = connector.hosted("user-123")
response = scope.catalyze(
"quick vegetarian dinner ideas with umami depth",
limit=8,
)
for result in response.results:
print(result.source_id, result.title) # Run search in your own environment when needed.
scope = connector.self_hosted(
"user-123",
base_url="http://localhost:8766",
)
response = scope.catalyze(
"what has this user been returning to?"
) Enzyme saves you tokens in understanding any domain where choices accumulate — saved bookmarks, logged experiments, collected references. The sharper the reasoning in your data, the sharper the catalysts. We’ll help you figure out what your activity model looks like in Enzyme during onboarding.
Questions
Is the SDK public?
Not yet. The SDK is in private beta while we work directly with product teams on data shape, deployment, and harness integration.
What data shape works best?
Enzyme works best when users accumulate choices over time: saves, annotations, highlights, edits, accepted or rejected options, logs, transcripts, and other traces that show preference or reasoning. A pile of static content can work; content with user decisions works better.
Do we need a lot of history?
No, but existing history helps. The strongest integrations hydrate prior user content through the connector, then keep new activity flowing through the same app-native save path so catalysts sharpen over time.
Is this self-hosted or managed?
Both paths are available. Managed search is the fastest product integration; self-hosted search is available when data residency, infrastructure, or customer requirements make that the right fit. We scope this during onboarding rather than treating deployment as one-size-fits-all.
If you're building a product where users accumulate taste, we'd like to hear about it. We'll walk through your corpus, deployment constraints, and the right integration path.
You're on the list. We'll reach out within a week.