SELECT 1
Entry 015Sun 2026.10.25
One launch a day. Picked, run, explained.

Sun 2026.10.25

Enzyme: searching notes with questions made in advance

Today's pick: Enzyme

Enzyme is a product that builds a local search index and a list of questions from Markdown notes. Coding agents such as Claude Code use it to find notes.

It is today’s pick because it lets an agent answer questions about what changed across months of notes.

exit 0Ran itIt works. With the default settings it built the index, and search ran with no network.
Found on
Show HN
Built with
Rust, SQLite

The problem

A coding agent with months of Markdown notes has to find the notes that matter for each question by itself. According to Anthropic’s Claude Code docs, Claude Code finds files by pattern and searches their content with regex. Joshua Pham, the maker of Enzyme, says in the README that this kind of search is fast for a name or an exact phrase. He says Enzyme helps with questions about change over time, such as what changed in a project.

How it solves it

Enzyme was posted as a Show HNA post on Hacker News, a developer community, in which someone presents what they made. Its title starts with "Show HN:". on Hacker News on October 24, 2026. It builds a local index inside the notes folder. Its settings file has the .enzyme extension and, unlike the index, is stored outside the notes folder, in Enzyme’s home directory. In this file you name the folders and tags to read. Then enzyme init does two things.

First, it picks excerpts from different points in time for each folder and tag, and an LLMA large language model. It is an AI model trained on large amounts of text to understand and generate text. writes questions from them. Enzyme calls these questions catalysts. Second, it indexes every note for search by keywords and by meaning. According to the README, an enzyme catalyze query returns each result with the catalyst that best connects it to the query.

What is different

The first difference is how notes are found. A regex search finds every file that contains the pattern. Enzyme ranks results by how close they are to the query and attaches a question to each one. The agent can read the most relevant notes first and use the question to see why each result came up. But today most results got the same question, so the questions did not explain why each result came up.

The second difference is that Enzyme needs an LLM when you run enzyme init, and a regex search needs none. By default Enzyme’s hosted model writes the questions, so you can start without your own API key. The tradeoff is that excerpts of your notes are sent to that model.

What it makes easier

  • Developers on teams that keep months of meeting notes and decision records in Markdown. Today I asked why a decision changed. The search terms Postgres and billing appeared in several notes, but the document with the new decision came first.
  • People who keep their notes in Obsidian. According to the README, Enzyme indexes notes as they are, without moving or cleaning them up. Today Enzyme did not change the note files. The index went into a .enzyme directory inside the notes folder.

How it was built

  • The repository’s 713 commits date from March 1 to October 24, 2026, in the author’s time zone. 276 of them have a Co-authored-by trailer for Claude.
  • The Rust code in the repository’s crates directory is 88,321 lines.
  • In an HN comment on October 24, 2026, the maker says he started Enzyme as an Obsidian plugin. It then became an MCPModel Context Protocol: a standard for how AI models connect to outside tools and data. server for Obsidian, and he open-sourced it that week.

Running it

I built it from source in an isolated environment and tested it with 10 notes I wrote. They were meeting notes, decision documents and journal entries. The meeting notes and decision documents describe a billing database moving from Postgres to SQLite.

  1. Build. cargo build --release -p enzyme-cli finished in 4 minutes 46 seconds. The build script downloads an embeddingText turned into a vector of numbers. Sentences with similar meanings get nearby vectors, so search can match meaning even when the words differ. model file from Hugging Face.
  2. Settings. According to the README, enzyme compile proposes settings through an OpenRouterA service that offers many companies' AI models through one API and one account. API. I skipped this step and wrote the settings file myself from the README’s example.
  3. Index. With the default settings, enzyme init made 33 catalysts in 14.5 seconds. I had set an OpenAI API key and base URL in the environment. But the log said init got its model settings from Enzyme’s free config server. No request reached the address I set.
  4. A model I chose. I used Claude Haiku 5.5 through OpenRouter with --llm env. All 9 of the model’s responses stopped at the 512-token output limit that Enzyme set in its requests. Each one had only reasoning text and an empty answer. init made no catalysts and failed.
  5. Question list. enzyme petri listed the questions with their time periods.
  6. Search. With the network blocked, I used enzyme catalyze on the index from the default run to ask why a decision changed. It returned the default 10 results, which were all the notes. Enzyme reported a processing time of 3 ms. The first result was the document with the new decision. All 10 results came with a catalyst, but 9 of them had the same question.
  7. Refresh. I edited one note and ran enzyme refresh. It embedded only the edited note again. The refresh took 19 ms. According to the README, refresh needs enzyme login. But this refresh finished without a login and made no new catalysts.
  8. Cost. The 9 requests sent with --llm env all failed, but they used 23,235 tokens and cost $0.00417.

I checked three claims from the README, and two held up. Search runs only on your machine, and by default Enzyme ignores OPENAI_* variables. Each result came with a catalyst. I had not set expected answers beforehand, so I could not confirm that each catalyst best connects its result to the query.

Resolved API config from Enzyme free-config broker (model=anthropic/claude-haiku-5.5)
[catalyst] [1/3] meetings (failed: all 3 retry attempts failed: Failed to parse LLM API response as JSON)
{"processing_time":0.003,"query":"why did we move billing off Postgres and what did finance lose",...}
projects/billing-db-v2.md 0.992 | via: Why did I choose Postgres for billing when finance wanted SQL reports?

Not checked

  • The settings enzyme compile proposes. According to the README, compile uses your own key only when OPENAI_BASE_URL is the OpenRouter address. Run it that way and compare its output with the settings I wrote.
  • Use with an agent. Install Enzyme’s skill in Claude Code with enzyme install claude and check whether Claude Code answers real questions about the notes.
  • Catalysts from a local model. Install a model with enzyme model and compare its catalysts with the hosted model’s.

Verdict

It works. With the default settings it built the index, and search ran with no network. But today the model I chose could not make catalysts. Only Enzyme’s hosted model could. It is worth trying if an agent has to answer questions about what changed across months of Markdown notes, and if you can send excerpts to a hosted model. If your notes must not leave your environment, this product is not a good fit until you check that a local model can make catalysts.

What to take away

  • Return each search result with the reason it was picked, and check that the reasons differ from result to result.
  • Check whether a tool uses a hosted model by default, even when you set your own API key. Enzyme used its hosted model even with OPENAI_* variables set.

Getting started

  1. cargo build --release -p enzyme-cli
  2. enzyme init && enzyme catalyze "a question about your notes"
You need
Rust 1.88 to build from source, or the install script in the README · A folder of Markdown notes. A second notes folder on the same machine needs enzyme login
Cost
Free under Apache-2.0. According to the README, Enzyme’s hosted model writes the questions by default. You can index the first notes folder without a login. Indexing a second folder needs enzyme login.

To use your own OpenAI-compatible API key, pass the --llm env option to enzyme init. Without it, OPENAI_* environment variables are ignored.

Steps select 1 ran.

Progress

  1. Day 3Upcoming
  2. Day 7Upcoming
  3. Day 15Upcoming
  4. Day 30Upcoming
  5. Day 90Upcoming
  6. Day 180Upcoming
  7. Day 365Upcoming

Full history →