Quickstart
jarvis gives your coding agent structural code intelligence — go-to-definition, find-references, call/type hierarchy, and search — computed locally from your own repositories, so it can ask who calls this? or where is this defined? instead of guessing from grep. Everything runs on your machine (macOS or Linux); nothing is uploaded.
Before you install, check your language is supported — navigation tools cover four language families, and every other language gets search only.
Choose your install path:
setup.sh installs the SCIP fork, Zoekt, and the language indexers into ~/.jarvis/bin:
curl -fsSL https://raw.githubusercontent.com/jarvis-intelligence/jarvis-index/main/setup.sh | shsetup.sh is idempotent — re-running it skips whatever is already installed. Use --force to
reinstall everything, or --only <name> to retry one dependency.
Install directly from your agent’s plugin marketplace:
# Claude Code/plugin marketplace add jarvis-intelligence/jarvis-index/plugin install jarvis@jarvis
# Codex CLIcodex plugin marketplace add jarvis-intelligence/jarvis-indexFor Cursor: open Settings → Plugins → search “jarvis” → Install.
uv tool install --python 3.13 jarvis-mcpRequires uv on PATH. This is also the fix for the uvx cold-start timeout you’d otherwise hit
in Step 4 — uv tool install builds and caches the wheel once.
Step 1: Install the external binaries
Section titled “Step 1: Install the external binaries”setup.sh installs the SCIP fork, Zoekt, and the language indexers into ~/.jarvis/bin:
curl -fsSL https://raw.githubusercontent.com/jarvis-intelligence/jarvis-index/main/setup.sh | shsetup.sh is idempotent — re-running it skips whatever is already installed. Use --force to
reinstall everything, or --only <name> to retry one dependency.
You’ll know it works when…
summary scip ok zoekt ok scip-swift ok scip-typescript ok scip-python ok scip-java okYou’ll know it broke when…
summary scip FAILED zoekt ok scip-swift ok scip-typescript ok scip-python ok scip-java okRe-run just the failed dependency: sh ./setup.sh --only scip --force. If a binary installs but
your shell still can’t find it, that’s a PATH issue — see
PATH troubleshooting.
Step 2: Install the CLI and MCP server
Section titled “Step 2: Install the CLI and MCP server”uv tool install --python 3.13 jarvis-mcpThe --python 3.13 pin is deliberate: on a machine with no Python at all, uv tool install
fetches its own interpreter and can resolve an older jarvis-mcp for it (observed: 0.5.1 on a
fresh 3.12-only environment — below the >=0.6.0 registration floor). Pinning 3.13 always
resolves the current release.
This puts jarvis and jarvis-server on PATH, and it’s also the fix for the uvx cold-start
timeout you’d otherwise hit in Step 4 — uv tool install builds and caches the wheel once, so
later uvx calls start in seconds.
See the Install guide for alternatives (pip, uvx ad-hoc).
You’ll know it works when…
$ jarvis --helpusage: jarvis [-h] {index,list,status,reindex,forget,watch} ...$ command -v jarvis-server/Users/you/.local/bin/jarvis-serverYou’ll know it broke when…
$ jarvis --helpzsh: command not found: jarvis~/.jarvis/binor uv's tool bin directory isn't onPATH` yet — see
PATH troubleshooting.
Step 3: Index a repo
Section titled “Step 3: Index a repo”jarvis index /path/to/your/repoThe slug defaults to the directory name. Re-running jarvis index (or jarvis reindex <slug>)
against the same repo always re-indexes and republishes atomically — safe to run again any time.
You’ll know it works when…
$ jarvis status <slug>:indexedYou’ll know it broke when…
jarvis index: error: installed scip 0.8.3 is below the required 0.9.0 — refusing to publisha zero-chunk indexBelow scip 0.9.0, the converter silently writes a schema-valid database with zero chunks and
zero mentions — see
the scip version-gate entry.
Step 4: Register jarvis with your client
Section titled “Step 4: Register jarvis with your client”/plugin marketplace add jarvis-intelligence/jarvis-index/plugin install jarvis@jarvisFull guide: Claude Code.
Add jarvis to Cursor Full guide: Cursor.
codex plugin marketplace add https://github.com/jarvis-intelligence/jarvis-index --ref maincodex plugin add jarvisFull guide: Codex CLI.
{ "mcpServers": { "jarvis": { "command": "uvx", "args": ["--from", "jarvis-mcp>=0.6.0", "jarvis-server"] } }}Full guide: Any stdio client.
Registering jarvis in several clients at once is safe — the stdio transport means each client
launches its own jarvis-server process, so there’s no shared state to race on.
You’ll know it works when…
Your client lists the jarvis tools (9 tools) after connecting.
You’ll know it broke when…
The first connect times out. On a cold uv cache and a platform without a prebuilt wheel
(macOS and common Linux glibc platforms have wheels — anything else builds jarvis-mcp’s
Rust extension from source, 5+ minutes) — see
the uvx cold-start entry
(Step 2’s uv tool install is the fix).
Step 5: Make your first tool call
Section titled “Step 5: Make your first tool call”Ask your agent to call getIndexStatus:
{ "repo": "toy-repo" }You’ll know it works when…
{ "repo": "toy-repo", "indexed": true, "status": "indexed", "commit": "abc1234", "generated_at": "2026-07-08T12:00:00+00:00", "stale": false, "freshness": "fresh", "checked_at": "2026-07-08T12:00:05+00:00", "searchCoverage": { "expected": 120, "indexed": 120, "complete": true }, "last_index_run": { "outcome": "indexed", "origin": "signature", "reason": null, "recovery": null }, "capabilities": { "navigation": { "available": true, "reason": null, "recovery": null }, "search": { "available": true, "reason": null }, "semantic": { "available": false, "reason": "semantic index not built for this repo (requires the `semantic` extra)" } }}Then try a real navigation query — goToDefinition:
{ "repo": "toy-repo", "symbol": "Greeter" }{ "symbol": "Greeter", "resolvedSymbol": "scip-typescript npm @toy/pkg 0.0.1 src/`greeter.ts`/Greeter#", "definitions": [ { "path": "toy/greeter.ts", "range": { "start": { "line": 0, "character": 6 }, "end": { "line": 0, "character": 13 } } } ], "commit": "abc1234", "generated_at": "2026-07-08T12:00:00+00:00", "stale": false, "freshness": "fresh", "checked_at": "2026-07-08T12:00:05+00:00"}You’ll know it broke when…
If symbol is ambiguous, you get a structured candidates list instead of a definition:
{ "error": "'dup' is ambiguous in toy-repo (2 matches). Retry with a qualifier, e.g. 'a.C.dup'.", "candidates": [ { "symbol": "sym-a", "dottedPath": "a.C.dup", "kind": "METHOD" }, { "symbol": "sym-b", "dottedPath": "b.D.dup", "kind": "METHOD" } ], "candidateTotal": 2}Retry with a qualified name from candidates (e.g. a.C.dup). For anything else, work through
the troubleshooting decision tree.
Watch the cold install
Section titled “Watch the cold install”This is a real cold-install run recorded on a fresh, isolated environment (fresh HOME,
prerequisites-only PATH), following exactly the steps above — setup.sh, the pinned
uv tool install, indexing a tiny repo, and the first getIndexStatus tool call over
stdio JSON-RPC. Timings are wall-clock, not edited.
Next steps
Section titled “Next steps”- Tools — the 9 MCP tools
- CLI — the
jarvisindexer CLI - Install Channels — PyPI, plugins, and the MCP Registry compared
- Concepts — how indexing and search actually work