{"id":46290730,"url":"https://github.com/jshph/enzyme","last_synced_at":"2026-04-26T00:01:16.749Z","repository":{"id":341977859,"uuid":"920398699","full_name":"jshph/enzyme","owner":"jshph","description":"A compile step for knowledge bases. Gives your agent a concept graph of your content — under 20s to index, 8ms queries on device.","archived":false,"fork":false,"pushed_at":"2026-04-23T03:04:29.000Z","size":174744,"stargazers_count":30,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-04-23T04:05:35.757Z","etag":null,"topics":["claude-code","knowledge-management","local-first","obsidian","pkm","semantic-search"],"latest_commit_sha":null,"homepage":"https://enzyme.garden","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jshph.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-01-22T04:37:02.000Z","updated_at":"2026-04-23T03:04:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"0fd5acf5-cf8a-4f62-a7a5-23925fa7dfdf","html_url":"https://github.com/jshph/enzyme","commit_stats":null,"previous_names":["jshph/enzyme"],"tags_count":57,"template":false,"template_full_name":null,"purl":"pkg:github/jshph/enzyme","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshph%2Fenzyme","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshph%2Fenzyme/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshph%2Fenzyme/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshph%2Fenzyme/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jshph","download_url":"https://codeload.github.com/jshph/enzyme/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshph%2Fenzyme/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32280981,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T18:29:39.964Z","status":"ssl_error","status_checked_at":"2026-04-25T18:29:32.149Z","response_time":59,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude-code","knowledge-management","local-first","obsidian","pkm","semantic-search"],"created_at":"2026-03-04T08:08:51.113Z","updated_at":"2026-04-26T00:01:16.739Z","avatar_url":"https://github.com/jshph.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🧬 Enzyme\n\n**Don't let your agent get lost in your knowledge base.**\n**Enzyme compiles 1,000+ documents into a concept graph in under 20 seconds. 8ms queries on device.**\n\n[![Discord](https://img.shields.io/discord/1191288276536008745?label=Discord\u0026logo=discord\u0026style=flat-square)](https://discord.gg/nhvsqtKjQd)\n[![License](https://img.shields.io/github/license/jshph/enzyme?style=flat-square)](LICENSE)\n[![Release](https://img.shields.io/github/v/release/jshph/enzyme?style=flat-square)](https://github.com/jshph/enzyme/releases/latest)\n[![Downloads](https://img.shields.io/github/downloads/jshph/enzyme/total?style=flat-square\u0026label=Downloads\u0026color=6c757d)](https://github.com/jshph/enzyme/releases)\n\n[Website](https://enzyme.garden) · [Docs](https://enzyme.garden/docs) · [Discord](https://discord.gg/nhvsqtKjQd) · [Getting Started](#install)\n\n\u003c/div\u003e\n\nEnzyme reads a knowledge base — markdown files, Obsidian vaults, Readwise exports, any text corpus — and compiles it into a concept graph. The graph captures the cross-cutting themes in your material as **catalysts**: pre-computed questions that an agent can search through instead of grepping through your files.\n\nNo conversation history needed. No runtime reasoning. The expensive work happens once at init. After that, queries run locally in ~8ms on an on-device embedding model.\n\n## Install\n\n```bash\ncurl -fsSL https://raw.githubusercontent.com/jshph/enzyme/main/install.sh | bash\n```\n\nOn macOS you can also use Homebrew:\n\n```bash\nbrew install jshph/enzyme/enzyme-cli\n```\n\nThen add the Claude Code plugin:\n\n```bash\nclaude plugin marketplace add jshph/enzyme\nclaude plugin install enzyme\n```\n\n### MCP server\n\nIf you prefer MCP over the plugin, Enzyme ships a stdio MCP server that works with any MCP-compatible client (Claude Desktop, Cursor, etc):\n\n```bash\nclaude mcp add enzyme -- enzyme mcp\n```\n\nThe MCP server exposes `init`, `petri`, `catalyze`, and `status` tools — you can initialize and explore your vault entirely from the client without running CLI commands separately.\n\n## Quick start\n\n```bash\ncd /path/to/your/vault    # any folder of markdown files\nenzyme init                # compiles concept graph — under 20s for 1k docs\n```\n\nInside Claude Code, invoke `/enzyme` to explore your vault by concept.\n\n## What it does\n\nEnzyme reads the structure of your knowledge base — tags, links, folders, timestamps — and builds semantic clusters with temporal weight on every entity. From those clusters it generates **catalysts**: thematic questions that cut across your content and surface connections keyword search can't reach.\n\nA search for \"why we keep rewriting the auth layer\" finds the ADR from six months ago, a retro note about scope creep, and a Readwise highlight on accidental complexity — even if none of those share keywords with the query.\n\n### Core concepts\n\n- **Entities** — the tags, links, and folders in your content. Each one becomes a semantic cluster.\n- **Catalysts** — pre-computed themes Enzyme discovers across your material. Searching through catalysts connects content that keyword and vector search miss.\n- **Petri** — the compiled index: what's trending, what entities exist, and what catalysts are anchored to each.\n- **Apply** — project your concept graph onto an unfamiliar corpus. `enzyme apply /path/to/other/repo` maps your catalysts onto new content. See [apply docs](https://enzyme.garden/docs/apply/).\n\n### Example: petri output\n\n```bash\nenzyme petri | jq '.entities[:2]'\n```\n\n```json\n[\n  {\n    \"name\": \"system-design\",\n    \"type\": \"tag\",\n    \"activity_trend\": \"active\",\n    \"frequency_12m\": 84,\n    \"catalysts\": [\n      {\n        \"text\": \"What does the commitment to simplicity cost when the pressure to ship keeps winning?\",\n        \"context\": \"velocity vs craft in infrastructure\",\n        \"era\": \"2024-Q3\"\n      },\n      {\n        \"text\": \"Where does the analysis of user needs gather information that delays rather than clarifies the core value?\",\n        \"context\": \"research as avoidance\",\n        \"era\": \"2025-Q1\"\n      }\n    ]\n  },\n  {\n    \"name\": \"working-with-others\",\n    \"type\": \"tag\",\n    \"activity_trend\": \"rising\",\n    \"frequency_12m\": 47,\n    \"catalysts\": [\n      {\n        \"text\": \"What assumptions about leadership are held by those who are good at building things?\",\n        \"context\": \"craft vs delegation\",\n        \"era\": \"2024-Q4\"\n      },\n      {\n        \"text\": \"How does the goal of not depending on others shape the approach to collaboration?\",\n        \"context\": \"independence vs team trust\",\n        \"era\": \"2025-Q2\"\n      }\n    ]\n  }\n]\n```\n\nEach entity has catalysts spanning different eras — questions that cut across months of writing. These are what the agent searches through, not your raw text.\n\n### Example: catalyze query\n\n```bash\nenzyme catalyze \"why we keep rewriting the auth layer\"\n```\n\n```json\n{\n  \"query\": \"why we keep rewriting the auth layer\",\n  \"results\": [\n    {\n      \"file_path\": \"retros/2024-q3-platform-retro.md\",\n      \"content\": \"scoped auth extraction as a two-week project for the third time. real blocker wasn't the token service — nobody wanted to own the session model. every proposal added a layer instead of removing one.\",\n      \"similarity\": 1.46\n    },\n    {\n      \"file_path\": \"adrs/007-auth-service-extraction.md\",\n      \"content\": \"the monolith's session handling has become the bottleneck for every team shipping independently. chose separation of concerns over the coordination cost of a new service boundary.\",\n      \"similarity\": 1.24\n    },\n    {\n      \"file_path\": \"reading/highlights-accelerate.md\",\n      \"content\": \"'Teams that can deploy independently are twice as likely to be in the high-performer category.' — we keep choosing the rewrite over the boundary.\",\n      \"similarity\": 1.13\n    }\n  ],\n  \"top_contributing_catalysts\": [\n    {\n      \"entity\": \"system-design\",\n      \"text\": \"What does the commitment to simplicity cost when the pressure to ship keeps winning?\",\n      \"relevance_score\": 0.74\n    }\n  ]\n}\n```\n\nThe query matched no keywords in the retro or the ADR. The catalyst bridged them — the retro talked about \"scope creep\" and the ADR talked about \"separation of concerns,\" but the underlying tension was the same.\n\n### Why compile-time?\n\nMost memory tools build understanding at runtime — they need conversation history before they know anything about your content. Enzyme works the other way: it extracts the conceptual structure from what already exists. The first agent conversation is as rich as the hundredth.\n\nThis matters when you're building on imported content (reading highlights, curated collections, research corpora). There's no cold start. The intelligence layer is ready from the moment the content is indexed.\n\n## Requirements\n\n- A folder of markdown files (Obsidian vaults, Readwise exports, any `.md` corpus)\n- macOS (Apple Silicon or Intel) or Linux (x86_64 or aarch64)\n- Works out of the box via [OpenRouter](https://openrouter.ai)'s free tier — or bring your own API key (`OPENAI_API_KEY`, `OPENAI_BASE_URL`, `OPENAI_MODEL`)\n\n## Links\n\n- [enzyme.garden](https://enzyme.garden) — landing page\n- [Docs](https://enzyme.garden/docs) — how it works, catalysts, apply, for teams\n- [Setup guide](https://enzyme.garden/setup) — install and configure\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjshph%2Fenzyme","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjshph%2Fenzyme","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjshph%2Fenzyme/lists"}