Skip to content

Search

kura offers three search commands that trade speed for quality. All three run entirely on your machine.

FTS5 full-text search with BM25 ranking. On a fresh install this uses the sqlite-vaporetto morphological tokenizer, so a Japanese query splits into real words rather than character n-grams. It is fast (typically under 100 ms) and needs no LLM provider — this is the mode that always works.

kura search "WAL checkpoint"

Reach for it when you know roughly which words appear in the document.

Vector K-nearest-neighbor search over embeddings, using sqlite-vec. Documents are chunked and embedded by a local model, so a query matches on meaning rather than exact words — “how writes stay readable” can surface a note titled “WAL checkpointing” even with no shared terms.

kura vsearch "how writes stay readable"

vsearch needs embeddings, which need a provider. See degradation below.

The full pipeline: run keyword and semantic search, fuse the two ranked lists, then rerank the top candidates with a local LLM. This is the highest-quality mode and the one to use when you’re not sure of the exact wording.

kura query "SQLite concurrency"
You know… Use
the words that appear kura search
only the idea, not the words kura vsearch
you want the best answer, wording aside kura query

When you want an answer rather than a list of documents, kura ask runs the hybrid search and then has the local LLM answer your question using only the top hits, citing them as [1], [2], …:

kura ask "WAL モードで reader は writer をブロックする?"

The answer is followed by a numbered source list so every claim can be traced back to a document. Answers come strictly from your knowledge base — if it holds nothing relevant, kura says so instead of guessing. Without an LLM provider, kura ask simply shows the search results.

Semantic and hybrid search read from a vector index that has to be populated. Writes only mark new chunks as pending. Before a search, kura automatically embeds up to 100 pending chunks; use kura embed for a larger backlog or to resume interrupted work. kura status reports embedding coverage so you can tell when a backfill is due.

If you change the embedding model, run kura doctor --fix (to detect the change) and then kura embed to regenerate vectors at the new model’s dimensions.

Keyword and hybrid search work offline; only pure semantic search needs a model:

  • kura search works with or without a provider — always.
  • kura query falls back toward keyword results when semantic search or reranking is unavailable, so you still get an answer — just without the model-driven quality boost.
  • kura ask falls back to showing the search results instead of a generated answer.
  • kura vsearch is the exception: it requires an embedding provider and does not fall back. With none reachable it exits with code 4 (LLM provider unavailable). Use kura query when you want a result that degrades to keyword search instead.

This is a core guarantee: the knowledge base stays searchable offline. See Configuration to choose or disable the provider.