octocode
App Listed
AI-powered code intelligence with semantic search, knowledge graphs, and built-in MCP server. Transform your codebase into a queryable knowledge graph for AI assistants.
- Downloads
- 208
- Dependents
- Not applicable
- Stars
- 522
- Forks
- 60
- Contributors
- 10
- Commits
- 760
- Latest release
- 0.29.1 ·
About
Code search and dependency graphs for AI assistants.
Quick start · MCP integration · OctoFS · Documentation · Contributing · Website
Octocode is a Rust CLI and MCP server for exploring codebases. It combines semantic search, structural search, and a live graph of symbols and dependencies. Connect it to Claude Code, Codex, Cursor, Windsurf, or another MCP client, or search directly from your terminal.
- Find code by intent with hybrid vector and keyword search, plus configurable reranking.
- Locate definitions and usages with structural search over the current source.
- Trace relationships between files and symbols: imports, calls, inheritance, and implementations.
- Read signatures without loading entire files; add a language server for definitions, references, and hover information.
- Run locally with the default embedding and reranking models, or configure remote providers.
Quick start
1. Install
Use the installer on Linux or macOS, or in a Unix-compatible shell on Windows:
curl -fsSL https://raw.githubusercontent.com/Muvon/octocode/master/install.sh | sh
Alternatively, on macOS:
brew install muvon/tap/octocode
Other installation methods
Read the full README
Download a binary from GitHub Releases, or install the published crate:
cargo install octocode
Building from source requires Rust 1.95 or later and protoc. See the installation guide for platform requirements, build features, and manual installation.
Verify the installation:
octocode --version
2. Index and search
Run these commands in your project's Git repository:
cd /path/to/your/project
octocode index
octocode search "authentication middleware"
The default configuration uses local FastEmbed models for embeddings and reranking. No API key is required; model files download on first use. For a directory without Git, use octocode index --no-git.
# Combine related queries
octocode search "auth" "middleware" "session"
# Filter code results by language
octocode search "database connection pool" --language rust
# Search documentation
octocode search "deployment configuration" --mode docs
3. Connect your AI assistant
Choose your client in MCP integration. Structural search, signatures, and the live dependency graph read the current source directly and work without an index. Semantic search uses the index created above.
MCP integration
Install Octocode where your client can find it on PATH, and replace /path/to/your/project with your project's absolute directory path.
Claude Code
claude mcp add --transport stdio octocode -- octocode mcp --path /path/to/your/project
claude mcp list
See the Claude Code MCP documentation for configuration scopes and connection details.
Codex CLI
codex mcp add octocode -- octocode mcp --path /path/to/your/project
codex mcp list
See the Codex MCP documentation for CLI and configuration-file options.
Claude Desktop, Cursor, and Windsurf
Add an Octocode entry to your client's MCP configuration:
{
"mcpServers": {
"octocode": {
"command": "octocode",
"args": ["mcp", "--path", "/path/to/your/project"]
}
}
}
Restart the client after saving. The MCP client setup guide covers configuration locations and other clients.
Octomind
Octomind is a companion AI agent runtime. Its developer:general agent includes Octocode and OctoFS capabilities. After installing Octomind, start it in your project:
cd /path/to/your/project
octomind run developer:general
The first run may install required tools and ask for model credentials. See the Octomind quick start for installation and model access.
Available tools
| Tool | Use it for | Requires an index |
|---|---|---|
semantic_search | Find code, documentation, and indexed history by meaning | Yes |
structural_search | Find definitions, usages, and AST patterns in current source | No |
view_signatures | Read function signatures, declarations, and imports | No |
graphrag | Explore live file and symbol relationships and dependency paths | No |
lsp_* | Definitions, references, hover information, symbols, and completion | No; requires a language server |
To enable LSP tools, install a language server and add --with-lsp to the server command, for example:
octocode mcp --path /path/to/your/project --with-lsp rust-analyzer
By default, the MCP server uses the existing semantic index without updating it. Rerun octocode index after changes, or run octocode watch separately in the project directory. In-process indexing is available through index.mcp_index = true.
See the MCP integration guide for tool parameters, HTTP transport, and serving multiple repositories, and the LSP guide for language server setup.
Use Octocode with OctoFS
OctoFS adds file reading and atomic editing tools to your assistant. Run both MCP servers against the same project directory.
Octocode's structural_search returns source lines as N:hh|content, with the same line IDs used by OctoFS view. An agent can use these IDs directly in OctoFS batch_edit, without reading the same lines again to obtain edit targets. Exact-name lookups include complete definitions up to 32 lines; larger results identify omitted ranges for a targeted read.
Each ID hashes the original line, including indentation. OctoFS checks IDs before applying edits and reports stale targets when the content no longer matches. Group known edits to a file into one atomic batch, then use the fresh IDs returned by the edit for follow-up changes. The N:hh| prefix is metadata, not part of the source code.
After installing OctoFS, add it alongside the Octocode server configured above. Choose your client:
Claude Code:
claude mcp add --transport stdio octofs -- octofs mcp --path /path/to/your/project
Codex CLI:
codex mcp add octofs -- octofs mcp --path /path/to/your/project
Use the same absolute project path for both servers. OctoFS is optional; Octocode's search and navigation tools work independently.
How it works
Current source → Language parsers → Live file and symbol graph → MCP tools
Indexed code → Embeddings + BM25 → Hybrid search + reranking → CLI / MCP
The live graph uses Tree-sitter to extract symbols and relationships from current source, without embeddings or an LLM. It remains available through MCP when [graphrag].enabled = false.
Enabling indexed GraphRAG adds persisted file-level enrichment, including semantic file discovery and optional LLM descriptions and architectural relationships. The octocode graphrag CLI uses this persisted layer:
octocode config --graphrag-enabled true
octocode index
octocode graphrag overview
See the architecture guide for module boundaries and storage details.
Supported languages
| Language | Extensions |
|---|---|
| Rust | .rs |
| Python | .py |
| TypeScript / JavaScript | .ts, .tsx, .js, .jsx |
| Go | .go |
| PHP | .php |
| C / C++ | .c, .cpp, .cc, .cxx, .c++, .h, .hpp, .hxx, .cppm, .ixx, .mxx, .ccm, .cxxm |
| Ruby | .rb |
| Elixir | .ex, .exs |
| Java | .java |
| Swift | .swift |
| Svelte | .svelte |
| Lua | .lua |
| CSS | .css, .scss, .sass |
| JSON | .json |
| Bash | .sh, .bash |
| Markdown | .md, .markdown |
Retrieval benchmark
The repository includes ground truth, scoring scripts, and reproduction instructions. The published local matrix used 127 code-search queries, corpus commit b1771ba, Octocode 0.17.1, and fastembed:jinaai/jina-embeddings-v2-base-code, with reranking disabled for the variants below.
| Configuration | Hit@5 | Hit@10 | MRR | NDCG@10 | Recall@10 |
|---|---|---|---|---|---|
| Dense vector only | 0.598 | 0.717 | 0.485 | 0.528 | 0.671 |
| Hybrid, vector/keyword weights 0.7/0.3 | 0.598 | 0.717 | 0.485 | 0.528 | 0.671 |
| Hybrid, vector/keyword weights 0.3/0.7 | 0.732 | 0.835 | 0.572 | 0.620 | 0.807 |
These are historical results from June 21, 2026; they do not measure the current release or its default configuration. See the full variant matrix for settings and reranker comparisons.
Privacy and configuration
- Local models by default. Embedding and reranking run locally after model downloads. Remote embedding, reranking, and LLM providers are optional; when enabled, they receive the queries and source content needed for those features.
- Local storage. Indexes live outside your repository in Octocode's per-project data directory.
- File exclusions. Indexing respects
.gitignoreand.noindex. Configure exclusions for files you do not want indexed. - Client access. The default MCP transport is stdio. The model used by your AI client may receive source content returned by tools, even when Octocode uses local models.
- Provider credentials. API keys can be supplied through environment variables. See the API key guide before enabling remote providers.
The configuration guide explains model selection and indexing options. The embedded default template contains the current defaults.
Documentation
- Getting started — basic workflow
- Installation — binaries, source builds, and platform requirements
- MCP clients — client setup and configuration locations
- MCP integration — tools, transports, and multiple repositories
- LSP integration — language server tools
- Commands — CLI reference
- Configuration — models and customization
- API keys — remote provider setup
- Architecture — internals
- Changelog — release history
Contributing
Bug reports, documentation improvements, and code contributions are welcome. Read the contributing guide for development setup and the engineering standards before changing code.
Use GitHub Issues for bugs and feature requests, Discussions for questions, or contact opensource@muvon.io.
License
Apache License 2.0. Maintained by Muvon.
Compatibility
- Runs on
- Metal
What shows it
- Metal: octocode feature metal
- Native code
- Required
- Binds native code: tree-sitter, tree-sitter-language, zstd-sys
- Python bindings
- No Python binding crate found
- License
- Apache-2.0
Compare with similar projects
Order: strongest tier first, then most downloads, then name, with unmeasured values last. A library counts downloads over 30 days. An app counts binary downloads per release. An app with none counts its crate downloads over 30 days. ML Rust runs this catalogue, so its closest project always gets a row.
| Project | Downloads | Dependents | Stars | Latest release | Runs on (GPU) | Native code | License |
|---|---|---|---|---|---|---|---|
|
AI-powered code intelligence with semantic search, knowledge graphs, and built-in MCP server. Transform your codebase into a queryable knowledge graph for AI assistants. |
208 binary downloads per release | Not applicable | 522 | 0.29.1 | Metal | Binds native code: tree-sitter, tree-sitter-language, zstd-sys | Apache-2.0 |
|
A lightning-fast search engine API bringing AI-powered hybrid search to your sites and applications. |
5,660 binary downloads per release | Not applicable | 59,815 | Not measured | Not measured | Not measured | |
|
splintr Listed
Tokenizer for Rust and Python: pure Rust by default, with 18 bundled vocabularies and four backends covering BPE, SentencePiece and WordPiece. Its output matches Hugging Face tokenizers id for id on 14 model families, including GPT-2, Qwen, Whisper, T5 and BERT. Python bindings |
8,204 downloads over 30 days | 7 | 63 | 0.22.2 | GPU support unknown | Binds native code: pcre2-sys (feature pcre2) | MIT |
|
🔍 Tiny, full-text search engine for static websites built with Rust and Wasm |
147 binary downloads per release | Not applicable | 2,980 | Not measured | Not measured | Apache-2.0 | |
|
Korvus is a search SDK that unifies the entire RAG pipeline in a single database query. Built on top of Postgres with bindings for Python, JavaScript, Rust and C. Python bindings |
54 downloads over 30 days | 0 | 1,474 | 1.1.5 | GPU support unknown | No native code found | MIT |
|
xberg New
High-performance document intelligence library for Rust. Extract text, metadata, and structured data from PDFs, Office documents, images, and 107 formats and 371 programming languages via tree-sitter code intelligence with async/sync APIs. |
26,095 downloads over 30 days | 2 | 9,565 | 1.3.10 | CUDA, Metal | Binds native code: libheif-sys, libz-sys, xberg_libwpd, xberg_tesseract, clipper-sys and 4 more. Build uses a native toolchain: cc, bindgen (feature bindings), cmake (feature build-tesseract), pkg-config (feature dynamic-linking), vcpkg (feature dynamic-linking) | MIT |
|
llm-kernel New
Foundation library for Rust AI-native apps — provider catalog, LLM client, MCP server, search, telemetry, and safety |
791 downloads over 30 days | 8 | 3 | 0.33.1 | GPU support unknown | Binds native code: libsqlite3-sys (feature store), mach-sys (feature embedding-mlx), mlx-sys (feature embedding-mlx), openssl-sys (feature graph-pg-tls), ort-sys (feature embedding-fastembed-coreml) | Apache-2.0 |
Why ListedNo archive, New or Featured rule places it, so it is Listed.
What it lacks for Featured
- The check holds no value for Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days. A gate that lacks its signal does not pass.
What else the check found
- The last activity is on 8 Nov 2026, 1 day ago. The rules expect an update within 365 days. Dormancy rule
Not measured: Homebrew installs on request over 365 days, Repology repository families, Docker pull growth over 90 days.
Exact rules: Listed, Featured app. The check on applied thresholds version 9.
Every rule outcome, as the check records it
expected-interval: app: E = 365 daysdormancy: last activity 2026-11-08, 1 days ago, E = 365: activefeatured: not featured: unknown homebrew_on_request_365d, repology_families, docker_pull_growth_90dlisted: listed: no archive, new or featured rule applies
Measurements and sources
Each signal row shows the raw value, its source and the fetch date. The Sources list gathers every distinct source on this page. Movement needs more history.
Sources6 sources
- Description: the crates.io description
- crates.io database dump, fetched
- GitHub releases, fetched
- GitHub repository, fetched
- crates.io package, fetched
- GitHub contributors, fetched
Adoption208 binary downloads per release4 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Active dependents | Not measured | Yes | ||
| New dependents (365 days) | Not measured | Yes | ||
| Peak active dependents | Not measured | Yes | ||
| Active dependents as a share of the peak | Not measured | Yes | ||
| Binary downloads per release | 208 | GitHub releases | Yes |
MaintenanceLatest human commit: 1 day ago4 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Latest human commit | 2026-11-08 | GitHub repository | Yes | |
| Latest release | 2026-11-08 | GitHub releases | Yes | |
| First release | 2025-06-26 | crates.io database dump | Yes | |
| Latest version | 0.29.1 | crates.io database dump | No | |
| Days the oldest outside issue waits for a reply | 446 | GitHub repository | Yes | |
| Maintainer replies over 365 days | 30 | GitHub repository | Yes | |
| Repository archived | false | GitHub repository | Yes | |
| Repository gone | false | GitHub repository | Yes | |
| Release commit or manifest in the repo | true | crates.io package | No | |
| Published docs | Not measured | Yes | ||
| Latest release fails cargo check | Not measured | Yes | ||
| Build check date | Not measured | Yes | ||
| Build check toolchain | Not measured | Yes |
SecurityNot measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Unpatched vulnerabilities past the grace window | Not measured | Yes | ||
| RustSec unmaintained advisory | Not measured | Yes | ||
| Deprecation notice | Not measured | Yes | ||
| Deprecated requirement | Not measured | Yes |
Distribution47 releases, 88 downloads over 30 days6 not measured
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| Releases | 47 | crates.io database dump | No | |
| Downloads over 30 days | 88 | crates.io database dump | No | |
| Binary downloads over the last 3 releases | 626 | GitHub releases | Yes | |
| Homebrew installs on request over 365 days | Not measured | Yes | ||
| Repology repository families | Not measured | Yes | ||
| Docker pull growth over 90 days | Not measured | Yes | ||
| Docker pulls at the growth baseline | Not measured | Yes | ||
| Every version a prerelease | false | crates.io database dump | Yes | |
| Every version 0.0.x | false | crates.io database dump | Yes | |
| Every version yanked | Not measured | Yes | ||
| Crate deleted from crates.io | Not measured | Yes |
Repository522 stars, 60 forks, 10 contributors, 760 commits. Stars alone never qualify a project.
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| GitHub stars | 522 | GitHub repository | Yes — one part of the repository route | |
| GitHub forks | 60 | GitHub repository | Yes — one part of the repository route | |
| Contributors with a GitHub account | 10 | GitHub contributors | Yes — one part of the repository route | |
| Commits on the default branch | 760 | GitHub repository | No | |
| Repository's main crate left out of the entry | none | crates.io database dump | Yes |
Facts that never count
| Signal | Value | Source | Fetched | Counts |
|---|---|---|---|---|
| License | Apache-2.0 | crates.io database dump | No | |
| Runs on, from listed crates and their direct dependencies | Metal | crates.io database dump | No | |
| What shows each backend | Metal: octocode feature metal | crates.io database dump | No | |
| Native code, from listed crates and their dependencies | Binds native code: tree-sitter, tree-sitter-language, zstd-sys | crates.io database dump | No | |
| Python bindings, from direct dependencies of listed crates | No Python binding crate found | crates.io database dump | No | |
| Crates that depend on a listed crate directly | Not measured | No |
Corrections and review history
No correction applies to this entry.
Judgments
A judgment enters only through an approved issue and a merged pull request.
No judgment applies to this entry.