@cigno/search
v0.0.4
Published
Local-first code search. BM25F-ranked symbol search across large codebases.
Maintainers
Readme
Cigno
Privacy-oriented, local-first code search. Use it with Claude Code, Gemini, or as a standalone app! BM25F ranked symbol search across large codebases.
Supports search through codebases in C, C++, TypeScript, JavaScript, Python, Go, Rust, and Java. Miss a language? Open an issue!
Install
npm i -g @cigno/searchCLI Usage
Once Cigno is installed, you can start to search through a codebase. Let's say for example we want to search through the Orama codebase:
Search
cigno search "radix tree" ./path/to/orama
cigno search "getUserById" ./src --limit 5
cigno search "bm25" . --boost fileName=10 # search by file nameForce codebase indexing
By default, Cigno uses lazy indexing: it'll index the codebase only when the user starts to search. On each search, Cigno will check for changes and re-index added, removed, and changed documents. You can force indexing/reindexing at any time by running:
cigno index ./path/to/oramaClearing Cigno indexes
cigno clearExperimental: Semantic Search
# Hybrid BM25 + vector search (auto-embeds on first use)
cigno search "function that implements radix trees" ./path/to/orama --experimental-semanticStart the MCP server
cigno mcpMCP Usage with Claude Code, Gemini CLI, Cursor, Codex, Goose, etc.
Once Cigno is installed, you can use from any coding assistant tool:
Claude Code
claude mcp add cigno --description "Efficient, low-latency local code search" -- cigno mcpCursor / Claude Desktop / Gemini CLI / Other MCP clients
{
"mcpServers": {
"cigno": {
"command": "cigno",
"args": ["mcp"]
}
}
}How it works
- Crawl the directory tree (respects
.gitignore, skips binaries) - Extract symbols from each file using tree-sitter AST parsing
- Tokenize identifiers by splitting on camelCase, snake_case, and digit boundaries
- Index into a segmented inverted index with delta+varint compressed posting lists
- Search with BM25F scoring across multiple fields (name, signature, doc comment, body, file path)
- Lazy Reindexing scan for changes on new searches and reindex changed files only
See architecture.md for the full technical design.
