jarvis index
Index a repo: detect language, run the language indexer, convert to SQLite, build Zoekt (and optional semantic) indexes, atomically publish.
jarvis index <path> [options]Arguments
Section titled “Arguments”| Name | Required | Description |
|---|---|---|
path | yes | Path to the repo to index |
Options
Section titled “Options”| Flag | Description |
|---|---|
--slug <name> | Override the auto-derived slug |
--scheme <name> | Xcode scheme to build (Swift repos using xcodebuild with more than one scheme) |
--semantic-include <path> | Force-include a path prefix the generated-file filter would skip. Repeatable — pass it once per prefix. Persisted and reused by reindex/watch |
--language <name> | Force the indexer language instead of detecting it from git-tracked files. Choices: java, python, swift, typescript. Persisted and reused by reindex/watch |
--search-only | Skip SCIP indexing and publish only Zoekt + semantic search. Persisted and reused by reindex/watch |
Behavior
Section titled “Behavior”- Language detection — counts source files by extension across git-tracked files only (a
filesystem walk would also count gitignored scratch directories) and picks the winner; one
language per repo. Extension families:
.ts/.tsx→typescript,.py→python,.java/.kt→java,.swift→swift. Ties break by fixed priority:.ts,.tsx,.py,.java,.kt,.swift.--languageoverrides detection entirely. - Language indexer — the matching
scip-*CLI emits a.scipprotobuf file. - scip version gate —
jarvis indexrefuses to runscip expt-convertbelow scip 0.9.0. This is a settled behavior, not a conservative default: olderscipsilently writes a schema-valid database with zero chunks and zero mentions, so every navigation query returns empty with no error. Re-runsetup.shto get a compliantscipbuild. - SCIP → SQLite —
scip expt-convertproducesindex-<sha>.db. - Zoekt —
zoekt-git-indexbuilds search shards from git-tracked files. - Optional semantic — if the
[semantic]extra is installed: tree-sitter chunk + bge-m3 embed → LanceDB. Non-fatal on failure; never blocks publish. - Search-only publishing — with
--search-only(or after an automatic fallback), SCIP indexing is skipped entirely: only Zoekt and semantic search are published. Navigation tools (goToDefinition,findReferences,callHierarchy,typeHierarchy,documentSymbols) don’t work on a search-only repo;searchCodeandsemanticSearchdo. - Persisted options —
--search-only,--semantic-include,--scheme, and--languageare recorded in the registry and reused automatically byjarvis reindexandjarvis watch; there is no flag to clear them — re-runjarvis indexwith new values to change them. - Atomic publish —
os.replace()pointer swap on thecurrentfile; astatus/reindexnever observes a half-written index.
The fallback ladder
Section titled “The fallback ladder”When a language indexer produces zero SCIP shards, jarvis auto-falls back to --search-only:
- scip-java + Android/AGP — AGP replaces source sets; zero shards (scip-java#177)
- scip-kotlinc version mismatch — compiler-plugin API unstable across versions
Example
Section titled “Example”jarvis index /path/to/your/repojarvis status your-reposlug: your-repopath: /path/to/your/repolanguage: pythonstatus: indexedcommit: abc1234last_indexed: 2026-08-22T10:00:00+00:00semantic: -