このプロジェクトについて

PyPIで jarvis-mcp として公開されている jarvis は、コーディングエージェント向けのローカルファーストなコードインテリジェンスレイヤーです。stdioを話すModel Context Protocol (MCP) サーバーとして提供されるため、Claude Code、Cursor、Claude Desktop、またはその他のMCPクライアントが、すでにインデックス化されたリポジトリをクエリできます。ホストされたサービスや認証、ネットワーク依存性はなく、マシン外にデータが出ることはありません。 2つの構成要素の連携 このプロジェクトは、意図的にライター(writer)とリーダー(reader)に分割されており、両者は唯一の契約であるローカルデータディレクトリ(デフォルトは ~/.jarvis)を共有しています。 - インデックス作成CLI: jarvis index はリポジトリパスを受け取り、サポートされているすべてのファイルに対して Tree-sitter 構文ベースラインを構築します。オプションで言語の SCIP インデクサーを実行して出力を SQLite に変換し、Zoekt シャードとオプションの埋め込み(embeddings)を構築した後、小さなカレントポインタによって選択される1つの不変のスナップショットとしてすべてを公開します。 - ランタイム: jarvis-server は、遅延初期化されたシングルトンによってバックアップされたツールを stdio 経由で公開します。最初の検索時に zoekt-webserver が起動し、pidファイルを通じてプロセス間で共有されます。 クエリは公開されたデータベースを読み取り専用で開くため、サービングパスで書き込みが発生することはありません。公開はアトミックに行われます。古いファイルを読み取っているクエリは、再インデックスによってポインタが切り替わっても動作し続け、オプションステージのいずれかで失敗しても前のスナップショットが維持されます。また、再インデックスのたびに、蓄積させるのではなく、そのリポジトリの外部パッケージエッジを再構築します。 9つのMCPツール goToDefinition は、シンボルを定義ファイルと範囲に解決します。ファイルに SCIP 定義カバレッジがある場合は SCIP で、それ以外の場合は構文ベースライン宣言によって提供され、各場所にはプロバイダーのタグが付与されます。findReferences はシンボルの出現箇所をリストアップし、SCIPのみで動作します。callHierarchy は入出力コールを返し、これもSCIPのみです。typeHierarchy はスーパータイプとサブタイプを返し、SCIPのみです。documentSymbols は1つのファイルで定義されたシンボルのアウトラインを返し、SCIPアウトラインと Tree-sitter 宣言の間でファイルごとにルーティングされます。searchCode は、オプションのリポジトリフィルタを伴う Zoekt 字句検索または正規表現検索を実行します。semanticSearch は自然言語検索であり、相互ランク融合(reciprocal rank fusion)を用いて、ベクトルヒット、Zoektヒット、および SCIP シンボル定義マッチを統合します。blastRadius は、インデックス化された他のどのリポジトリがパッケージに依存しているかを最大2ホップまで表示します。getIndexStatus は、公開されたコミット、鮮度、ワーキングツリーに対する古さ、およびツールごとのプロバイダー機能を報告します。 SCIP専用ツールは、データが不足している場合に静かに空の結果を返すのではなく、必要な機能、理由、およびリカバリヒントを報告します。ツールの失敗はトランスポートエラーではなくペイロードオブジェクトとして返されるため、不正なクエリによって stdio サーバーが停止することはありません。 インデックス作成と監視 コマンドには jarvis index, list, status, reindex, forget に加え、オプションの watchdog エクストラを使用したデバウンス(デフォルト5秒)付きの自動再インデックスを行う jarvis watch が含まれます。言語は git 管理下のファイルの拡張子の多数決によって検出され、--language で上書き可能です。ステータス値には indexing, indexed, partial, degraded, failed があり、degraded な実行であっても構文ベースラインを公開し、原因を記録して終了コード0で終了します。 要件と制限 このプロジェクトは、範囲を限定していることを明示しています。 - macOS および Linux のみ。Windows はサポートされていません。 - 1リポジトリにつき1言語。多言語混在のモノレポは、最も多くの追跡ファイルを持つ言語としてインデックス化されます。 - ビルド不要の Tree-sitter ベースラインは17言語(Python, JavaScript, TypeScript/TSX, Java, Kotlin, Swift, Go, Ruby, Rust, C, C++, C#, PHP, Scala, Bash, SQL)をカバーしており、パッケージ自体の pip 依存関係としてインストールされます。 - 精密な SCIP ナビゲーションは、TypeScript/TSX, Python, Java/Kotlin, Swift の4つの言語ファミリーをカバーしています。 - オプションの SCIP および Zoekt 強化には、セットアップスクリプトでインストールされる外部バイナリが必要です: scip (最小 v0.9.0), zoekt-git-index, zoekt-webserver, universal-ctags, scip-typescript, scip-python, scip-swift (macOS arm64のみ), および scip-java (検出のみで、Dockerイメージのプル前に確認します)。 - インデックス作成は明示的なステップであり、ライブで分析されることはありません。 - jarvis は読み取り専用であり、コードを編集することはありません。READMEでは、セマンティックな名前変更やリファクタリングを処理する Serena を補完するものとして位置づけられています。 検索と設定 semanticSearch にはオプションの semantic エクストラ (lancedb および sentence-transformers) が必要で、Tree-sitter でチャンク化されたコード上のベクトル検索と字句結果を融合させます。セマンティックインデックスは .gitignore を尊重し、1MBを超えるファイルや生成ファイルヒューリスティックをスキップします(これらは include フラグで上書き可能です)。環境変数でデータディレクトリと埋め込みクエリ/ドキュメントの指示プレフィックスを設定でき、bge-m3, e5, nomic-embed モデルを自動検出します。 READMEでは、既知の上流 SCIP の制限(型階層向けに宣言されているが書き込まれていない関係データ、バックフィルされた表示名と種類、scip-java が Android/Gradle リポジトリをインデックス化できないこと、Kotlin に正確なコンパイラバージョンの一致が必要なこと、MavenベースのJavaビルドにbashのバージョン要件があること)についても記載されており、これらは jarvis のバグではなく基盤ツールの動作として扱われています。プラグインには 3 つの Claude Code エージェントスキル (jarvis-setup, jarvis-use, jarvis-issues) が付属しています。プロジェクトは MIT ライセンスで、テストスイートは pytest で実行され、実際のインデクサーバイナリをシェル経由で呼び出す統合テストは別途マークされています。