Configuration

Enzyme stores its configuration in ~/.enzyme/config.toml. For direct CLI setup, run enzyme scan --write-config from your vault to create or update that file, inspect it, then run enzyme init to build the index and catalysts. Changes take effect on the next enzyme refresh or enzyme init.

Setup flow

For agent setup, install the runtime instructions first:

enzyme install codex      # or claude / hermes / openclaw

Then ask the agent to inspect and initialize the vault.

For terminal-only setup:

enzyme scan --write-config
$EDITOR ~/.enzyme/config.toml
enzyme init
enzyme petri

The resulting config looks like this:

[defaults]
minimum_tags     = 8
minimum_links    = 6
minimum_folders  = 6
total_limit      = 30
max_embedding_files = 1024

[vaults."/Users/you/notes"]
entities = ["folder:projects", "#research", "[[Design Principles]]"]

Everything is editable. The scan-selected entities are a starting point — add what’s missing, exclude what doesn’t matter, and run enzyme refresh to update retrieval.

File structure

The config has two sections: [defaults] for global settings and [vaults."<path>"] for per-vault overrides.

[defaults]
minimum_tags     = 8                # minimum trending tag entities to select
minimum_links    = 6                # minimum trending link entities
minimum_folders  = 6                # minimum trending folder entities
total_limit      = 30               # cap on total entities selected
max_embedding_files = 1024          # max docs to embed per run (0 = unlimited)

[vaults."/Users/you/notes"]
entities = ["folder:projects", "[[Design Principles]]", "#research"]
excluded_tags = ["todo", "template"]         # skip these from trending selection
excluded_links = ["Template"]                # skip these links from trending selection
excluded_folders = ["templates"]             # skip these folders from trending selection
targets = ["/Users/you/code/my-app"]         # project catalysts onto external directories
min_top_catalysts = 13                       # minimum catalysts for the largest entity
max_embedding_files = 0                      # override: embed all docs in this vault

Entity reference syntax

Entities in entities and excluded_* fields use this syntax:

# Tags
"#research"
"#enzyme/pmf"            # nested tags

# Wikilinks
"[[Design Principles]]"
"[[Person Name]]"

# Folders
"folder:projects"
"folder:people/contacts"  # nested folders

Entity selection

enzyme scan --write-config suggests entities (tags, links, folders) to generate catalysts for. You can override this:

  • entities — The selected entities. These are written by scan/setup and stay fixed across refreshes. You can add or remove entries manually.
  • excluded_tags, excluded_links, excluded_folders — Skip these from automatic selection. Useful for noise like #todo, #template, or utility folders.

Embedding limits

By default, Enzyme embeds the 1,024 most recently created documents per run. For most vaults this covers all active content. For large vaults (10,000+ documents), older documents may be skipped.

To embed all documents regardless of vault size:

# In [defaults] to apply globally:
max_embedding_files = 0

# Or per-vault:
[vaults."/Users/you/large-vault"]
max_embedding_files = 0

The embedding output shows how far back coverage reaches:

  Embedded: back to Mar 2024 (312 docs/sec)

Setting this to 0 means unlimited — every document in the vault gets embedded. This is safe but will increase init time proportionally.

LLM provider setup

By default, enzyme init and enzyme refresh use Enzyme hosted credits/auth for catalyst generation. They intentionally ignore inherited OPENAI_* and OPENROUTER_* environment variables so an existing shell key cannot surprise-bill your personal provider account.

Use your own OpenAI, OpenRouter, OpenAI-compatible, or local provider only when you mean to. Export the provider variables and pass --use-env-llm on the catalyst-generation command:

export OPENAI_API_KEY="sk-..."
# Optional, for custom OpenAI-compatible endpoints:
export OPENAI_BASE_URL="https://openrouter.ai/api/v1"
export OPENAI_MODEL="google/gemini-3-flash-preview"
enzyme init --use-env-llm
# Later refreshes that should use the same env provider:
enzyme refresh --use-env-llm

If you set base/model variables without a key and pass --use-env-llm, Enzyme treats that as an incomplete env-provider config. Omit --use-env-llm to return to hosted credits/auth.

Tested providers

ProviderWorksNotes
OpenRouterYesEnzyme hosted credits/auth use an Enzyme-managed OpenRouter path; direct OpenRouter BYOK also works with --use-env-llm.
OpenAIYesDirect API; OPENAI_API_KEY defaults to OpenAI’s API URL/model
Azure OpenAIYesUse your Azure endpoint as OPENAI_BASE_URL
Together AIYes
GroqYes
LM StudioYesUse OPENAI_API_KEY="not-needed"
OllamaYesUse OPENAI_API_KEY="not-needed"
vLLMYesUse OPENAI_API_KEY="not-needed"

For local servers that don’t require authentication, set one key variable to any non-empty string (e.g. OPENAI_API_KEY="not-needed"), set the matching base/model overrides, and pass --use-env-llm on init/refresh.

Targets

External directories to project this vault’s catalysts onto:

[vaults."/Users/you/notes"]
targets = ["/Users/you/code/my-app"]

Run enzyme apply /Users/you/code/my-app to index and embed the target directory using your vault’s concept graph. See Apply for details.

File discovery

Enzyme indexes all **/*.md files in the vault, excluding generated/runtime folders including .enzyme/, .obsidian/, .git/, .trash/, .agents/, .claude/, .codex/, .codex-work/, .hermes/, .pi/, .local/, node_modules/, target/, dist/, and build/. It also respects .gitignore rules.