Searching
Search your library with /find followed by a query. It understands both
meaning and keywords, so you can search by intent:
/find preparing for a coding interview/find self-hosted tools/find quirky javascript behaviour…or by exact terms (/find rust async). You get up to eight matches, each showing
the title, summary, tags, and a link.
How matching works
Section titled “How matching works”/find is hybrid:
- Semantic — your query is turned into a vector with a Workers AI embedding
model (
@cf/baai/bge-base-en-v1.5) and compared against a Vectorize index of every link. This finds conceptually related links even when they share no words —self-hosted toolssurfaces Bitwarden and Cal.com;automate without codesurfaces n8n. - Keyword — a SQLite FTS5 full-text search over each link’s URL, title, summary, tags, and note then fills in anything the semantic pass missed (great for exact names and rare terms).
Semantic matches are listed first (ranked by similarity), then keyword-only matches. Each link is embedded when you save it.
- Natural-language queries work well — describe what you’re after, not just keywords.
- It degrades gracefully: if the embedding service is briefly unavailable,
/findfalls back to keyword search; if a query trips FTS5’s operator syntax, the semantic results still stand. - Searching is case-insensitive. No results? Try broader terms, or check
/recentto see what’s saved.
Asking questions — /ask
Section titled “Asking questions — /ask”Where /find returns a list, /ask returns an answer synthesized from your
library (retrieval-augmented generation):
/ask what do I have for self-hosting?/ask which of my links explains tricky javascript?/ask what should I review before a frontend interview?It retrieves your most relevant links (the same hybrid search), feeds them to the model,
and replies with a short answer that cites the links it used ([#5]), followed by the
sources. It’s grounded — the model is told to answer only from your saved links and to say
so if they don’t cover the question.