Skip to content
NeuralRepo
Get Support

Search

NeuralRepo offers two search modes that work together to help you find ideas quickly, whether you remember the exact wording or just the general concept.

Semantic Search

Uses vector similarity powered by Cloudflare Vectorize and the @cf/baai/bge-m3 embedding model. Your query is converted into an embedding and compared against stored idea embeddings. Results are ranked by relevance score and reranked for quality.

Searching for “mobile habit tracker” will surface an idea titled “daily routine app for iOS” even though the words do not overlap.

Keyword Search

Uses SQLite FTS5 full-text search for exact word matching. Fast and precise when you know the specific terms you are looking for.

Searching for “React” returns only ideas that literally contain the word “React.”

Default Behavior — and Where the Fallback Actually Is

Section titled “Default Behavior — and Where the Fallback Actually Is”

Searching without a mode runs semantic search. What happens when semantic search finds nothing above the threshold depends on which surface you asked from, and the difference matters:

SurfaceNo semantic matches
GET /api/v1/ideas/searchReturns an empty result set with search_type: "semantic"
nrepo searchSame — reports 0 results
Web appSame, until you switch the mode toggle to keyword
Agent tool search_ideasFalls back to keyword automatically (search_type: "fts_fallback")
MCP search_ideas and code_modeFalls back to keyword automatically

So the REST API and the CLI do not silently retry — ask for mode=keyword when you know the exact wording. The one automatic fallback everywhere is the free-plan quota: once the ten monthly semantic searches are used, every surface returns keyword results — the REST API and the CLI flag it with semantic_limit_reached: true, and the MCP tool with a notice string.

Use the search box in the sidebar and pick a mode. Keyword search offers three matching styles — any word, all words, or exact phrase — and the result header names the mode that answered, so you always know which one you are reading.

Search results can be narrowed by combining the query with status and tag filters via the API.

Terminal window
GET /api/v1/ideas/search?q=auth&status=building&tag=backend

The search threshold controls the minimum relevance score for semantic results. Ideas scoring below this threshold are excluded from results.

SettingRangeDefaultScope
search_threshold0.1 - 0.90.2Your account, every surface
min_score query parameter0 - 1(uses search_threshold)One API request
  • Lower values (e.g., 0.2, the default) cast a wide net, surfacing more potential matches. Raise it if results feel noisy.
  • Higher values (e.g., 0.7 or 0.8) return fewer results, only very close matches.

Configure the threshold in your user settings:

Terminal window
# Via API
curl -X PATCH https://neuralrepo.com/api/v1/user/me \
-H "X-API-Key: nrp_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"settings_json": "{\"search_threshold\": 0.5}"}'
  1. Your query text is sent to the @cf/baai/bge-m3 model running on Cloudflare Workers AI.
  2. The model generates a vector embedding representing the meaning of your query.
  3. The embedding is compared against your stored idea embeddings in Cloudflare Vectorize. NeuralRepo asks for roughly three times the number of results you want (at least 20, at most 50) so there is room to filter and rerank.
  4. Matches scoring at or below the search threshold are dropped, as are archived ideas.
  5. A reranking step reorders what survives, and the top limit results are returned.

Idea embeddings are generated asynchronously when an idea is created or updated. There may be a brief delay before a brand-new idea appears in semantic search results. Archiving an idea removes its vector immediately, so a deleted idea stops influencing search and duplicate detection right away.