Search

PythonReactSEOPDF
OpenClaw

zettel-link

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

hxy92430 source installs☆ 0 Repository stars

Installation

Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.

SkillHub CLI

skillhub install hxy9243/zettel-link

Inspect the source and compatibility requirements, then follow its installation steps.

Give your agent the source link and ask it to inspect instructions and dependencies before explaining the installation steps.

View source ↗Guides

Skill instructions

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 p...

Source information

Source
github
Repository
openclaw/skills
Path
skills/hxy9243/zettel-link
Version
—
Commit
8becadb97ff46eb1c1190e0440c318b6447c0ce5
Classification source
rules
Status
active
Visibility
public

These signals come from indexed source analysis and may lag behind changes. Check the current source files.

README

zettel-link

A suite of Python scripts for semantically searching and linking notes in an Obsidian directory based on embedding similarity.

Scripts

scripts/
├── config.py # Configure the embedding model and provider
├── embed.py  # Embed notes, cached to .embeddings/embeddings.json
├── search.py # Semantic search over embedded notes
└── link.py   # All-pairs similarity → .embeddings/links.json

Quick Start

Install it via npx skills command:

npx skills install https://github.com/hxy9243/skills/blob/main/zettel-link/

Requirements

Supported Providers

Provider Default Model API Key Env
ollama mxbai-embed-large (none)
openai text-embedding-3-small OPENAI_API_KEY
gemini text-embedding-004 GEMINI_API_KEY

Security

To prevent suspicious environment scanning, zettel-link supports loading API keys from a local .env file within the skill directory.

  1. Create a .env file in the skill root.
  2. Add your keys:
    OPENAI_API_KEY=your_key_here
    GEMINI_API_KEY=your_key_here
    

The script will check the environment first, then fallback to the .env file.

Idempotency

All scripts are safe to re-run:

  • embed.py uses mtime-based caching — only re-embeds changed notes
  • search.py and link.py are read-only against the cache

Extracted content

SKILL.md
# 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:
  - [Ollama](https://ollama.com) with `mxbai-embed-large` (local, default)
  - [OpenAI API](https://platform.openai.com/) with `text-embedding-3-small`
  - [Google Gemini API](https://ai.google.dev/) with `text-embedding-004`

## 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:

```bash
uv run scripts/config.py
```

This creates `config/config.json` with defaults:

```json
{
    "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:

```bash
# 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 p...
README
# zettel-link

A suite of Python scripts for semantically searching and linking notes in an Obsidian directory based on embedding similarity.

## Scripts

```
scripts/
├── config.py # Configure the embedding model and provider
├── embed.py  # Embed notes, cached to .embeddings/embeddings.json
├── search.py # Semantic search over embedded notes
└── link.py   # All-pairs similarity → .embeddings/links.json
```

## Quick Start

Install it via npx skills command:

```bash
npx skills install https://github.com/hxy9243/skills/blob/main/zettel-link/
```

## Requirements

- uv 0.10.0+
- Python 3.10+
- One of:
  - [Ollama](https://ollama.com) with `mxbai-embed-large` (local, default)
  - [OpenAI API](https://platform.openai.com/) with `text-embedding-3-small`
  - [Google Gemini API](https://ai.google.dev/) with `text-embedding-004`

## Supported Providers

| Provider | Default Model            | API Key Env     |
|----------|--------------------------|-----------------|
| ollama   | mxbai-embed-large        | *(none)*        |
| openai   | text-embedding-3-small   | OPENAI_API_KEY  |
| gemini   | text-embedding-004       | GEMINI_API_KEY  |

## Security

To prevent suspicious environment scanning, `zettel-link` supports loading API keys from a local `.env` file within the skill directory.

1. Create a `.env` file in the skill root.
2. Add your keys:
   ```bash
   OPENAI_API_KEY=your_key_here
   GEMINI_API_KEY=your_key_here
   ```

The script will check the environment first, then fallback to the `.env` file.


## Idempotency

All scripts are safe to re-run:
- `embed.py` uses mtime-based caching — only re-embeds changed notes
- `search.py` and `link.py` are read-only against the cache

Related skills

OpenClaw

bambu-studio-ai

heyixuan2

Bambu Lab 3D printer control and automation. Activate when user mentions: printer status, 3D printing, slice, analyze model, generate 3D, AMS filament, print monitor, Bambu Lab, or any 3D printing task. Full pi...

OpenClaw

geo-optimization

capt-marbles

Generative Engine Optimization (GEO) for AI search visibility. Optimize content to appear in ChatGPT, Perplexity, Claude, and Google AI Overviews. Use when optimizing websites, pages, or content for LLM discove...

OpenClaw

0protocol

0isone

Agents can sign plugins, rotate credentials without losing identity, and publicly attest to behavior.

OpenClaw

0x0-messenger

eijiac24

Send and receive P2P messages using disposable numbers and PINs. No servers, no accounts. Use for human notifications, approval flows, and agent-to-agent communication.