ECIP Local — Code Intelligence
Local-first code intelligence for large repositories. Indexes your workspace with Tree-sitter, stores everything in SQLite, and exposes an MCP server so GitHub Copilot, Cursor, Claude Code, and other AI agents can query your code — no cloud, no Docker, no API keys.
Features
- Symbol search — find any function, class, interface, or type by name across your workspace
- Symbol resolution — get full details: docstring, type signature, file, line, reference count
- Reference lookup — find everywhere a symbol is called or used
- Semantic search — natural-language queries over code chunks (ONNX embeddings or BM25 fallback)
- Dependency inspector — list manifest dependencies (npm, Cargo, go.mod, Maven, pip)
- File context — get all chunks and symbols for a specific file
- Incremental indexing — file saves trigger instant re-indexing of only the changed file
- Zero-config Copilot integration — auto-writes
.vscode/mcp.json for GitHub Copilot
Supported Languages
TypeScript · JavaScript · Python · Rust · Go · Java
Quick Start
- Install the extension from the VS Code Marketplace (or sideload the
.vsix)
- Open any workspace containing supported source files
- The extension activates automatically and begins indexing in the background
- The status bar shows live progress:
⟳ ECIP: 42/170 (24%)
- When complete:
✓ ECIP: 170 files · 3,412 symbols
- GitHub Copilot Chat can now use the 6 MCP tools — try asking about your code
| Tool |
Description |
search_symbols |
Pattern-match symbol FQNs (e.g. auth, *Token*) |
resolve_symbol |
Get docstring, type sig, file, line, ref count for an exact FQN |
find_references |
Find all call sites of a symbol |
semantic_search |
NLP search over code chunks |
get_dependencies |
List manifest dependencies by ecosystem |
get_file_context |
Get chunks + symbols for a file path |
Commands
| Command |
Description |
ECIP: Reindex Workspace |
Force a full re-index |
ECIP: Show Index Status |
Show MCP server port and status |
ECIP: Configure MCP |
Rewrite .vscode/mcp.json |
ECIP: Clear Index |
Delete the local index (re-indexed on next open) |
Settings
| Setting |
Default |
Description |
ecip-local.embedding.mode |
auto |
auto tries ONNX then BM25; onnx requires ONNX; fallback forces BM25 |
ecip-local.indexing.fileExtensions |
.ts .tsx .js ... |
File extensions to index (restart required) |
ecip-local.indexing.excludePatterns |
**/node_modules/** ... |
Glob patterns to skip |
ecip-local.indexing.maxFileSizeKb |
512 |
Skip files larger than this (KB) |
ecip-local.indexing.maxConcurrency |
4 |
Concurrent files during indexing |
ecip-local.mcp.port |
0 |
MCP server port (0 = auto-assign) |
ecip-local.mcp.autoConfigureCopilot |
true |
Auto-write .vscode/mcp.json |
How It Works
Workspace files
│
▼
Tree-sitter WASM (TypeScript / JS / Python / Rust / Go / Java)
│
▼
Symbol extraction + chunking (ecip-core)
│
▼
Embeddings (ONNX all-MiniLM-L6-v2 · 384 dims, or BM25 fallback)
│
▼
SQLite (WAL mode, FTS5, optional sqlite-vec ANN)
│
▼
MCP HTTP+SSE server ←→ GitHub Copilot / Cursor / Claude Code
The index is stored in VS Code's extension global storage — one .db file per workspace, never committed to your repo.
Tested on a ~170-file React/TypeScript workspace:
- Initial index: < 60 seconds
- Incremental re-index on file save: < 500 ms
- Symbol search: < 10 ms
- Semantic search (BM25): < 50 ms
Troubleshooting
Extension doesn't activate — make sure the workspace contains .ts, .js, .py, .rs, .go, or .java files, or a package.json / Cargo.toml / go.mod.
semantic_search uses BM25 instead of ONNX — first run downloads the all-MiniLM-L6-v2 model (~23 MB) to extension storage. Watch the status bar for ⬇ ECIP: Downloading model X%. If download fails, the extension falls back to BM25 permanently until you retry.
No results from MCP tools — check the ECIP Local output channel for errors. Common causes: indexing still in progress, workspace not yet scanned, or large files exceeding maxFileSizeKb.
Native module error in output channel — run npm run rebuild in the extension directory to recompile better-sqlite3 for VS Code's Electron version. The extension falls back to sql.js automatically if rebuild hasn't been run, but vector search is disabled in that mode.
License
MIT