v0.7.0 — zoekt sym: search, honest search totals, hardened lifecycle
zoekt's sym: symbol search works for the first time, searchCode reports real match totals instead of a fabricated one, and the embedded zoekt-webserver gets an identity-checked health probe.
Install
Claude Code plugin:
/plugin marketplace add jarvis-intelligence/jarvis-index
/plugin install jarvis@jarvis
Standalone (uv / uvx):
uvx --from jarvis-mcp jarvis-server
To activate sym: symbol search on an existing install
sh setup.sh
jarvis reindex <slug>
zoekt only extracts symbols when universal-ctags is on PATH at index time; existing shards built without it stay symbol-less until reindexed.
What changed
sym:symbol search revived. jarvis never installeduniversal-ctags, so zoekt's symbol-definition ranking andsym:queries silently returned nothing for every language.setup.shnow installs it and symlinks the realctagsbinary (what Homebrew/apt actually name it) asuniversal-ctags(the exact name zoekt looks up). Surfaced ascapabilities.search.ctagsInstalledingetIndexStatus.searchCode's response shape changes (breaking).total(always justlen(hits), never a real total) is replaced bytotalMatchesandfileCountsourced from zoekt's own match statistics,truncated, andindexedAt.- Unbounded
searchCode/semanticSearchpayloads, fixed. zoekt's JSON API applies no result caps when a request omitsOpts— a broad query could stream every match zoekt found into one response. Requests now cap display counts, and a single oversized match line (minified/generated files) is capped at 2000 characters. - zoekt-webserver health check now checks identity, not just "something answered". It requires zoekt's own
GET /healthz(a real canary search, 200 only once shards are loaded) instead of accepting any HTTP response under 500 from whatever holds the port. Spawn failures now surface the child's stderr,JARVIS_ZOEKT_PORToverrides the hardcoded6070, and a spawn race between two jarvis processes now has the loser adopt the winner instead of erroring. semanticSearch's lexical signal revived for natural-language queries. zoekt's implicit-AND query semantics meant a six-word NL query typically matched nothing; NL-shaped queries now OR-expand through the existing symbol tokenizer, while code-shaped queries (identifiers,sym:/lang:syntax) pass through unchanged.
Platforms: macOS (arm64/x86_64) and Linux (x86_64/aarch64), Python 3.12–3.14.
See CHANGELOG.md.