Configuration

New Markdown setups use readable .enzyme settings under ~/.enzyme/configs/. enzyme compile -v proposes and saves a file, printing its exact path. Review that file before initializing. Existing config.toml settings remain supported; when a .enzyme file defines the same workspace, that definition takes precedence.

Setup flow

The Quickstart has a prompt your agent can use to install Enzyme, review the proposal with you, and demonstrate an answer from your notes.

For terminal-only setup, run from your notes folder:

enzyme compile -v
# Open the saved path printed above and review the settings.
enzyme init --quiet
enzyme doctor
enzyme petri

Compile uses online selection. It is not a read-only scan. It can replace settings for an existing workspace, so retain a copy before re-running it on a working setup. To adjust the proposal, edit the saved file rather than compiling again.

A small settings example:

vault "~/notes" {
  learn questions from folder "projects" about operational
  learn questions from tag "research"
}

The selected folders, tags, and links supply questions to guide retrieval. Leaving a topic out of that selection does not exclude its notes from search. Folder exclusions do remove notes from discovery and search.

Existing TOML configuration

The reference below applies to existing ~/.enzyme/config.toml installations. For a workspace already defined in a .enzyme file, edit that file instead of adding a competing TOML workspace definition. After a settings change, ask the setup skill to refresh and verify it; some changes need additional preparation.

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

In an existing TOML workspace, these fields control selection:

  • entities — The selected entities. These stay fixed across refreshes. You can add or remove entries manually.
  • excluded_tags, excluded_links — Skip these from entity selection.
  • excluded_folders — Exclude these folders from file discovery and search.

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.