v0.9.0 — agents can build their own index (indexRepo)
An AI agent pointed at an unindexed repo can now index it itself: the tenth MCP tool, indexRepo, spawns jarvis index as a detached child and reports progress through getIndexStatus until the poll loop terminates — in every failure mode, not just success.
Install
Claude Code plugin:
/plugin marketplace add jarvis-intelligence/jarvis-index
/plugin install jarvis@jarvis
Standalone (uv / uvx):
uvx --from 'jarvis-mcp>=0.9.0' jarvis-server
What changed
indexRepo(new tool). Takes a local git repopath, runs pre-flight checks, writes an on-disk launch record before spawning, then detaches. The child's stdout isDEVNULL— one inherited write would corrupt the live JSON-RPC session.semanticdefaults to false so an agent call can never implicitly download a ~2 GB embedding model; passsemantic: trueto opt in.getIndexStatusnow reports anindexingblock (starting/running/failed-at-startup/abandoned) whose derivation reaps exited children for their true exit code, correlates attempts by timestamp (a stalefailedrow can no longer end a fresh run's poll loop), and ages out vanished launches. Every observation is terminal or progressing — callers' poll loops always exit.- Concurrency is now arbitrated. A per-slug
flockbuild lock covers whole index runs andjarvis forget's entire teardown; a second writer (CLI, watch, or MCP) gets a clean "another index is already running" instead of racing registry rows and artifacts. The lock file itself is never unlinked — that is the classic detached-inode flock footgun. - Fixed: same-basename overwrite. Two repos named
appat different paths both derived slugapp; the second index silently overwrote the first's. A collision is now rejected naming both paths; a genuinely moved repo re-paths its row. - Fixed: missing-index errors are agent-actionable.
IndexNotFoundErrorpayloads carryrecoveryTool: "indexRepo"with or without a registry row — the row-less case is exactly what an agent hits first. - New
--no-semanticCLI flag mirrors the tool default (tri-state, per-run, not persisted).
Upgrade
Nothing required. Existing installs keep working; uv tool upgrade jarvis-mcp picks this up when convenient. The searchCode/navigation tool contracts are unchanged; getIndexStatus responses gain an optional indexing key.
See CHANGELOG.md.