Documentation

Semantic search

Search by meaning, not just keywords, local embeddings, on-device, nothing sent anywhere.

Gisti understands what you meant, not just what you typed. Every note, clipboard item, chat, and screenshot is embedded on-device into a vector that captures its meaning, so searching for “deploy checklist” can surface a note titled “release steps” that never uses the word “deploy”.

How it works

  • Local model: embeddings are computed with Qwen3-Embedding (a compact, 4-bit quantized model), run through Apple’s MLX framework directly on your Mac’s GPU – not a cloud embeddings API. The ~350 MB model weights download once from Hugging Face on first use; after that, nothing about your content ever leaves the machine.
  • Everything gets indexed: note title + body, clipboard text, full chat transcripts, and (for screenshots and copied images) their recognized OCR text. A screenshot becomes searchable by what it says.
  • Hybrid ranking: exact matches, typo-tolerant fuzzy matches, and semantic matches are fused into one ranked list (Reciprocal Rank Fusion), so a literal hit and a “same idea, different words” hit can both surface – ranked by actual relevance, not just recency.
  • Similarity math runs locally via Apple’s Accelerate framework – fast enough to re-rank your whole library as you type.

Where you’ll see it

  • Search bar: the icon on the left of the input field is also the semantic-search toggle. Click it, or press S (in Stream or Topics), to switch modes – the icon itself switches from a magnifying glass (plain text search) to a brain icon (semantic search on), with a small progress ring around it while the model loads or your library is indexing.
  • Similar items: open any note, clip, chat, or screenshot, and a “Similar” panel suggests other saved items that are conceptually close, reusing the item’s already-computed vector, so it appears instantly.
  • Topics ( 2): your whole Stream, automatically clustered into meaning-based groups instead of folders – see Topics.

A pipeline that heals itself

Every stored vector is stamped with the embedding model that produced it and an internal pipeline version. If you switch models, or a future Gisti update improves how vectors are computed, old vectors are detected as stale automatically and the affected items are quietly re-embedded in the background – search quality keeps improving across updates without a manual re-index.

Turning it on

Semantic search and Topics are optional, off until you enable Settings → Semantic Search. Until then, the search-bar icon is dimmed and does nothing – there’s nothing to toggle until the setting is on. Turning it off again immediately stops indexing. Thresholds, result counts, and the embedding model itself are tunable in advanced.yaml.