e

enzyme

@jshph/enzyme
0 Stars 2 次浏览 jshph 更新于 2026-08-23

Semantic search and AI context for your Obsidian vault. Surface patterns with catalysts.

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "https://github.com/jshph/enzyme-public/releases/download/v0.23.3/enzyme-mcp-0.23.3-macos-arm64.mcpb": {
      "args": [],
      "command": ""
    }
  }
}

可用工具 (5 个)

该服务在 MCP 协议中暴露的工具,AI 可按需调用

tavily_search 14 个参数 需填 1 项

Search the web for current information on any topic. Use for news, facts, or data beyond your knowledge cutoff. Returns snippets and source URLs.

必填参数:query

tavily_extract 6 个参数 需填 1 项

Extract content from URLs. Returns raw page content in markdown or text format.

必填参数:urls

tavily_crawl 11 个参数 需填 1 项

Crawl a website starting from a URL. Extracts content from pages with configurable depth and breadth.

必填参数:url

tavily_map 8 个参数 需填 1 项

Map a website's structure. Returns a list of URLs found starting from the base URL.

必填参数:url

tavily_research 2 个参数 需填 1 项

Perform comprehensive research on a given topic or question. Use this tool when you need to gather information from multiple sources to answer a question or complete a task. Returns a detailed response based on the research findings.

必填参数:input

服务介绍

enzyme.garden 鈥� main site with installation and usage docs.

What's in this repo

This README explains the concepts. For practical setup, see vault-guides/鈥攕hell script templates to (optionally) help you describe your vault structure before running enzyme init.

Enzyme Slate

A Slate is a structured map of your vault's conceptual topology鈥攚hich entities carry signal, when you last engaged them, and what questions they raise.

How it differs from CLAUDE.md

CLAUDE.md is static context. You write it, Claude reads it.

A Slate contains catalysts: questions that actively retrieve content from your vault. Not keyword search. Not "find files with this tag." Catalysts surface content that resonates with the question, even if the words don't match.

Think of CLAUDE.md as a map that tells Claude where things are. A Slate is more like a compass鈥攊ts catalysts point toward content that resonates with a question, surfacing what's latent rather than what's labeled.

A Slate is also computed. It reflects the current state of your vault, and you can't hand-write it. It changes as your vault changes.

Entities as semantic clusters

Every tag, link, and folder pattern in your vault is an entity: a semantic cluster that gathers related content.

When you tag a journal entry and a book highlight with #travel, you're not filing them. You're drawing a line between them. Enzyme sees that line鈥攁nd everything else connected to it.

#travel
鈹溾攢鈹� journal entry from a solo trip
鈹溾攢鈹� highlight from a book on wandering
鈹溾攢鈹� note about a conversation with a stranger
鈹斺攢鈹� question you wrote at 2am in a new city

That cluster exists whether you remember it or not. Enzyme surfaces it.

Hierarchical tags create nested clusters. #travel/pyrenees is a subset of #travel, and Enzyme understands this鈥攁 catalyst for #travel can pull from Pyrenees content, while one for #travel/pyrenees stays focused.

Wikilinks work differently. A link like [[open questions]] isn't a folder; it's a note that other notes reference. Enzyme treats it as an entity and clusters everything that links to it.

Folders group content by structure. Content in people/ or Readwise/Books/ forms its own cluster based on where it lives.

Within each cluster, Enzyme prioritizes recency. A folder like people/ surfaces the people you've been thinking about lately.

Catalysts probe the clusters

For each entity, Enzyme generates catalysts: questions tuned to surface what's latent in that cluster. The same vault, explored through different catalysts, reveals completely different material:

Catalyst What surfaces
"What kept pulling you forward when something was asking you to stay?" Meeting notes and journal entries about pace, presence, what someone else helped you see
"Rubin wrote 'begin with a question and use it to guide an adventure of discovery'鈥攚here did you do this, or fail to?" Book highlights alongside journal entries about craft, curiosity, getting lost
"Le Guin called attention 'not all that different from hunting'鈥攚here did the camera make you a tourist instead of a hunter?" Reflections on capture vs. presence, when documenting replaced noticing

Content surfaces not because it contains the right words, but because it speaks to the same question.

Temporal awareness

Enzyme tracks when you last engaged each entity, bucketing them into active, moderate, and dormant based on how recently and frequently you've touched them.

Dormant entities are often the most interesting. Enzyme can surface questions about threads you've abandoned, patterns you stopped noticing, ideas that went quiet.

What's in a Slate

A Slate is JSON. It captures what a CLAUDE.md file can't: when you last touched each thread, how active it's been, and questions generated from the content itself.

Enzyme generates a question that probes what's latent in the #travel cluster, and the question becomes the retrieval mechanism. It knows you touched this entity two days ago, that it's active, that you've been thinking about it. A static file can only know what you remembered to write down.

{
  "slate_entities": [
    {
      "entity": "#travel",
      "type": "tag",
      "temporal_metadata": {
        "last_seen": "2026-01-02",
        "activity_trend": "active"
      },
      "catalysts": [
        {
          "text": "What kept pulling you forward when something was asking you to stay?",
          "topic_name": "pace and presence"
        }
      ]
    }
  ],
  "summary": {
    "total_entities": 30,
    "total_catalysts": 281,
    "activity_distribution": { "active": 28, "moderate": 1, "dormant": 1 }
  }
}

Inspecting your Slate

# See what entities Enzyme found
enzyme slate | jq '.slate_entities[] | .entity'

# Check activity levels
enzyme slate | jq '.slate_entities[] | {entity, activity: .temporal_metadata.activity_trend}'

# Look at catalysts for an entity
enzyme slate | jq '.slate_entities[] | select(.entity | contains("travel")) | .catalysts[].text'

# Find dormant entities
enzyme slate | jq '.slate_entities[] | select(.temporal_metadata.activity_trend == "dormant") | .entity'

相关 MCP 服务