Setup

1. Quick start

Install the CLI, add Enzyme instructions to the agent you use, then ask the agent to set up Enzyme for your markdown vault or project notes. Then for the proof: can the agent prep for a real project or meeting?

  1. 1 Install Enzyme: curl -fsSL enzyme.garden/install.sh | bash.
  2. 2 From your vault root, run enzyme install codex for Codex/Pi/generic AGENTS.md-aware agents, or enzyme install claude for Claude Code. Hermes and OpenClaw are experimental; see Supported runtimes.
  3. 3 Ask your agent: Set up Enzyme for this vault. Read the installed enzyme-workspace-setup skill first.

Catalyst generation uses Enzyme hosted credits/auth by default. Bring your own OpenAI/OpenRouter/OpenAI-compatible or local provider only when you intentionally pass --use-env-llm. At query-time, Enzyme retrieves locally from the compiled index.

2. Prove it worked

A useful first run should help the agent onboard itself to context about a real project or meeting-prep. Enzyme should help your agent recover unresolved commitments, prior decisions, and adjacent notes from your own markdown.

  • Success: the setup exposes entities you recognize, identifies real open questions, and cites files/excerpts that help prep for a real project or meeting.
  • Failure: obvious keyword matches, generic summaries, files that feel adjacent but not useful. You should give feedback to the agent to help it edit its configuration.
Using Hermes Agent?

Start Hermes from the workspace root that contains the markdown you want Enzyme to index. The Enzyme CLI owns local indexing and refresh; Hermes uses the installed skill to know when to call it.

Install the CLI, then run enzyme install hermes from the workspace root before starting Hermes.

Ask Hermes to set up Enzyme for the workspace. It should preserve the existing markdown structure and show you when memory is ready to use.

Existing Obsidian conventions matter: inbox folders, daily notes, people/contact pages, tags, wikilinks, and date frontmatter are retrieval signal. Enzyme can propose frontmatter or people-page backfills, but it should show the exact files before changing them.

See Hermes Agent + Enzyme for the exact flow.

What does setup write?

Enzyme builds a local semantic graph for your markdown and exposes a CLI to efficiently query it for context. At setup time, it interprets the structure of your workspace and persists this to a configuration that you can modify.

Command Writes
install.sh Installs ~/.local/bin/enzyme, recreates ~/.enzyme while preserving auth.json and config.toml, may run login. No note content is sent.
enzyme install codex AGENTS.md plus .agents/skills/enzyme-workspace-setup/SKILL.md and .agents/skills/enzyme/SKILL.md. Use this for Codex and generic AGENTS.md-aware agents such as Pi.
enzyme install claude AGENTS.md, .claude/skills/enzyme-workspace-setup/SKILL.md, .claude/skills/enzyme/SKILL.md, and a CLAUDE.md import of @AGENTS.md.
enzyme install hermes/openclaw Experimental runtime instructions plus global skill files under ~/.hermes/skills/enzyme/ or ~/.openclaw/skills/enzyme/.

See Data flow & trust for reset/uninstall details and provider boundaries, and Supported runtimes for the runtime matrix.

3. Coding agents and terminal setup

Terminal
$ curl -fsSL enzyme.garden/install.sh | bash
$ cd /path/to/your/vault
$ enzyme install codex
# or: enzyme install claude
# experimental: enzyme install hermes / openclaw

Then ask your agent:

> Set up Enzyme for this vault. Read the installed enzyme-workspace-setup skill first, then diagnose what Enzyme actually sees.

Enzyme installs the runtime instructions; your agent handles the setup flow, shows what it found, and gets you to useful retrieval.

Questions

Does it only work with Obsidian?

No. Obsidian works well because its vaults are plain markdown with links, tags, folders, and timestamps. Enzyme can also index any markdown folder with enough accumulated structure to learn from.

Do I need to organize first?

No. Enzyme works with whatever structure exists — half-used tags, links that go nowhere, inconsistent folders. Incomplete organization is still signal. Even 20-30 documents is enough to compile a useful graph.

When should I not use Enzyme?

Use exact search, grep, or Obsidian search when you know the name, date, tag, filename, or phrase. Use a plain vector/RAG tool when you only need semantic passage search over mostly unstructured documents. Use a managed memory API if your first need is a hosted backend for app-user memories.

Enzyme is strongest when your markdown has enough prose and handles — folders, tags, wikilinks, dates, frontmatter, project notes, meeting notes, or decision logs — for an agent to prep from source-grounded context.

Do I need an account or credits?

By default, enzyme init and enzyme refresh use Enzyme hosted credits/auth for catalyst generation. They ignore inherited OPENAI_* and OPENROUTER_* env vars so an existing personal key is not used accidentally.

Bring your own OpenAI/OpenRouter/OpenAI-compatible provider only when you intend to bill through that provider: set the env vars and run enzyme init --use-env-llm or enzyme refresh --use-env-llm.

Query-time retrieval from the compiled index is local. The provider/credit path is for generating catalysts during init or refresh.

What gets sent to the cloud?

During enzyme init or enzyme refresh, selected excerpts are sent to an LLM for catalyst generation. Your raw files stay on your device. Nothing is stored on Enzyme's servers.

The default path uses Enzyme hosted credits/auth and ignores inherited personal LLM env keys. If you explicitly pass --use-env-llm with your own API key, excerpts go directly to the provider you configure. Hosted-credit excerpts are sent to OpenRouter (a US-based model provider). Enzyme does not store your raw files or log your note content. See privacy for details.

Using local or self-hosted models

Set OPENAI_API_KEY or OPENROUTER_API_KEY to use your own provider, then pass --use-env-llm on enzyme init or enzyme refresh. Base URL and model overrides are optional; if you only set model/base without a key, that is an incomplete env-provider config.

# OpenAI
export OPENAI_API_KEY="sk-..."
enzyme init --use-env-llm

# Custom OpenAI-compatible endpoint
export OPENAI_API_KEY="sk-..."
export OPENAI_BASE_URL="https://openrouter.ai/api/v1"
export OPENAI_MODEL="google/gemini-3-flash-preview"
enzyme init --use-env-llm

For local servers (LM Studio, Ollama, vLLM) that don't require authentication, use a placeholder key:

# LM Studio
export OPENAI_API_KEY="not-needed"
export OPENAI_BASE_URL="http://localhost:1234/v1"
export OPENAI_MODEL="qwen/qwen3-8b"
enzyme init --use-env-llm

# Ollama
export OPENAI_API_KEY="not-needed"
export OPENAI_BASE_URL="http://localhost:11434/v1"
export OPENAI_MODEL="qwen3:8b"
enzyme init --use-env-llm

When your env provider is active, enzyme init --use-env-llm prints the resolved model, base URL, and a masked key so you can confirm it's using your provider. Without --use-env-llm, Enzyme stays on hosted credits/auth even if those env vars exist.

Provider compatibility: Enzyme uses the OpenAI chat completions format. Most providers work out of the box. Tested providers include OpenRouter, OpenAI-compatible endpoints, Azure OpenAI, Together AI, Groq, LM Studio, Ollama, and vLLM.

Go deeper