ClawKit Logo
ClawKitReliability Toolkit
Back to Registry
Official Verified

zettel-link

This skill maintains the Note Embeddings for Zettelkasten, to search notes, retrieve notes, and discover connections between notes.

skill-install — Terminal

Install via CLI (Recommended)

clawhub install openclaw/skills/skills/hxy9243/zettel-link
Or

Zettel Link Skill

This skill provides a suite of idempotent Python scripts to embed, search, and link notes in an Obsidian vault using semantic similarity. All scripts live in scripts/ and support multiple embedding providers.

The skill should be triggered when the user wants to search notes, retrieve notes, or discover connections between notes.

If the search directory is indexed with embeddings, the skill should prompt the user if they want to create new embeddings.

Dependencies

  • uv 0.10.0+
  • Python 3.10+
  • One of the following embedding providers:

Overview of Commands

  • uv run scripts/config.py: Configure the embedding model and other settings.
  • uv run scripts/embed.py: Embed notes and cache to .embeddings/embeddings.json
  • uv run scripts/search.py: Semantic search over embedded notes
  • uv run scripts/link.py: Discover semantic connections, output to .embeddings/links.json

Workflow

Step 0 — Setup and Config

If the config/config.json file does not exist, create it:

uv run scripts/config.py

This creates config/config.json with defaults:

{
    "model": "mxbai-embed-large",
    "provider": {
        "name": "ollama",
        "url": "http://localhost:11434"
    },
    "max_input_length": 8192,
    "cache_dir": ".embeddings",
    "default_threshold": 0.65,
    "top_k": 5,
    "skip_dirs": [".obsidian", ".trash", ".embeddings", "Spaces", "templates"],
    "skip_files": ["CLAUDE.md", "Vault.md", "Dashboard.md", "templates.md"]
}

To use a remote provider:

# OpenAI
uv run scripts/config.py --provider openai

# Gemini
uv run scripts/config.py --provider gemini

# Custom model
uv run scripts/config.py --provider openai --model text-embedding-3-large

To adjust tuning parameters:

uv run scripts/config.py --top-k 10 --threshold 0.7 --max-input-length 4096

Step 1 — Create Embeddings

uv run scripts/embed.py --input <directory>

This creates <directory>/.embeddings/embeddings.json with the embedding cache.

  • Incremental updates: Only re-embeds files that have been modified since the last run (based on file modification time).
  • Text truncation: Automatically truncates text to max_input_length before embedding.
  • Stale pruning: Removes entries for files that no longer exist.
  • Force re-embed: Use --force to re-embed everything.

Step 2 — Semantic Search

uv run scripts/search.py --input <directory> --query "<query>"

This embeds the query using the configured provider and compares it with all cached embeddings, returning the top_k most similar notes.

Results are saved to <directory>/.embeddings/search_results.json.

Step 3 — Semantic Connection Discovery

Metadata

Author@hxy9243
Stars2387
Views0
Updated2026-03-09
View Author Profile
AI Skill Finder

Not sure this is the right skill?

Describe what you want to build — we'll match you to the best skill from 16,000+ options.

Find the right skill
Add to Configuration

Paste this into your clawhub.json to enable this plugin.

{
  "plugins": {
    "official-hxy9243-zettel-link": {
      "enabled": true,
      "auto_update": true
    }
  }
}
Safety NoteClawKit audits metadata but not runtime behavior. Use with caution.