Semlith について
Semlith は、コードやドキュメントを扱うエージェント向けのローカル検索・コードグラフシステムです。意味検索とキーワード検索を組み合わせ、インデックスを継続更新し、シンボル間の関係も示します。通常、クエリはネットワークに送信されません。
主な機能
- 01ベクトル検索とキーワード検索
- 02コードシンボルと呼び出しグラフ
- 03ファイル監視によるインデックス更新
- 04コードと各種文書の検索
- 05画像内容による画像検索
- 06検索履歴と削減トークンの記録
活用シーン
- 01質問に関係するコード範囲の特定
- 02呼び出し元の追跡と変更影響の確認
- 03PDF、Office 文書、ノートブックの検索
- 04エージェントにローカルリポジトリ検索を提供
MCP 対応
stdio とデーモンの HTTP `/mcp` エンドポイントで MCP ツールを提供します。`semlith setup` は対応するエージェントクライアントにサーバーを登録し、既定のツールセットを全ツールに拡張できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Semlith を選ぶ理由
大規模なコードベースで作業するエージェントは、読み込みすぎて処理が遅く高コストになるか、開くファイルを推測して間違えることがよくあります。必要なのは、質問への答えとなるわずかな範囲です。Semlith はそれを見つけます。
- ハイブリッド検索。 各クエリはベクトルインデックス(意味)とキーワードインデックス(正確な名前)を検索し、両方のランキングを統合します。リトライのバックオフはどのように機能しますか と
EMBED_BATCHは、どちらも適切なチャンクにたどり着きます。 - 同じパスで構築されるコードグラフ。 定義はノードになり、呼び出し、インポート、再エクスポートはエッジになります。それぞれに、どの程度裏付けられているかを示すラベルが付きます。ある関数を呼び出しているもの、その関数を変更すると壊れるもの、2 つのシンボルのつながりを尋ねられます。
- 常に最新。 ファイルを保存すると、ウォッチャーが再度埋め込みます。ビルド手順は不要で、作業ツリーとの不整合も生じません。
- 設計からローカル。 API キーは不要です。また、別途ホストされたサービスである Semlith Cloud に
semlith cloud loginでサインインしない限り、クエリ時にネットワーク接続は発生しません。ポータルがバインドするのは127.0.0.1のみです。ダウンロードされるのはモデルの重みとアクセラレーションパックのみで、いずれもダイジェストで固定されています。また、--airgapは接続が開く前にすべての外向きリクエストを拒否します。 - エージェント向け。 MCP サーバーにはデフォルトで 8 個、合計 16 個のツールがあり、
semlith setupを使ってエージェントのクライアントに登録できます。また、取得内容と節約したトークン数をすべて記録する台帳も備えています。 - コード以外にも対応。 PDF、Office ドキュメント、ノートブック、Markdown をテキストとして読み取り、画像も写っている内容から検索できます。
インストール
Rust ツールチェーンは不要で、コマンド 1 つでインストールできます。
macOS と Linux
curl --proto '=https' --tlsv1.2 -fsSL https://raw.githubusercontent.com/semlith/semlith/main/install.sh | sh
Windows
irm https://raw.githubusercontent.com/semlith/semlith/main/install.ps1 | iex
インストーラーは使用しているマシンに合ったリリースを選び、リリースの SHA256SUMS に付された ed25519 署名を検証し、アーカイブがその内容と一致することを確認してから、~/.semlith/bin に展開し、semlith setup を実行します。セットアップでは Semlith を PATH に追加し、埋め込みモデルをダウンロードし、登録用 CLI がある各エージェントクライアントに Semlith を登録して、デーモンをログインサービスとしてインストールします。インストールを修復するには、いつでも semlith setup を再実行してください。--yes を指定すると、すべてのデフォルト設定が適用されます。
| 変数 | 効果 |
|---|---|
SEMLITH_VERSION | 特定のリリースタグをインストールします。 |
SEMLITH_HOME | ~/.semlith 以外の場所にインストールします。 |
SEMLITH_NO_SERVICE=1 | ログインサービスをスキップします。 |
cargo install semlith を実行するか、リリースページからアーカイブを取得することもできます。
semlith upgrade はバイナリを最新リリースに置き換えます。Semlith が自動で更新を確認することはありません。
要件。 Apple シリコン搭載の macOS、x86_64 または aarch64 の Linux、あるいは x86_64 の Windows を実行する 64 ビットマシンが必要です(Windows PowerShell 5.1 で十分です)。Linux アーカイブにはバイナリと同じ場所に libonnxruntime.so が含まれており、必要なのは glibc 2.34 以降と libstdc++(GLIBCXX_3.4.22)のみです。Debian 12、Ubuntu 22.04、RHEL 9、Amazon Linux 2023 はすべて要件を満たします。ONNX Runtime が Intel Mac 向けの提供を終了したため、Intel Mac の macOS はサポートされていません。
インストーラーの検証
インストーラーはバイナリを ~/.semlith/bin(macOS と Linux ではモード 700)に書き込み、Linux では libonnxruntime.so もその隣に書き込みます。アーカイブが 3 つのチェックに合格するまでは、何も書き込まれません。SHA256SUMS にはプロジェクトの ed25519 署名が必要です。この署名は ssh-keygen -Y verify で検証します(macOS、最新の Linux ディストリビューション、Windows 10 以降に搭載されている OpenSSH 8.1 以降が必要です)。アーカイブの SHA-256 がその値と一致しなければなりません。gh が PATH にある場合は、このリポジトリのリリースワークフローによって署名された GitHub アーティファクトの証明も検証されます。署名がないか正しくない場合はインストールが中止されます。また、semlith upgrade は、バイナリに組み込まれた同じ鍵を使ってリリースを検証します。この鍵は semlith --version で確認できます。curl は https と TLS 1.2 以降に制限され、スクリプトはダウンロードが完全に終わってから一度だけ実行されます。
v0.40.0 より前のリリースには署名がないため、これらのインストーラーではインストールできません。
実行する前にインストーラーを確認するには、次のようにします。
curl --proto '=https' --tlsv1.2 -fsSLO https://github.com/semlith/semlith/releases/latest/download/install.sh
less install.sh
gh attestation verify install.sh --repo semlith/semlith
sh install.sh
Windows では、irm https://github.com/semlith/semlith/releases/latest/download/install.ps1 -OutFile install.ps1 を実行して install.ps1 を保存し、内容を確認してから、powershell -ExecutionPolicy Bypass -File install.ps1 を実行してください。
アーカイブを手動で検証するには、次のようにします。
echo 'semlith-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICMTHiHMzeSHzzc+8UDZHUzJcvb6XGUBb+TJdFes91xm' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I semlith-release -n file -s SHA256SUMS.sig < SHA256SUMS
grep " semlith-<tag>-<target>.tar.gz$" SHA256SUMS | shasum -a 256 -c
gh attestation verify semlith-<tag>-<target>.tar.gz --repo semlith/semlith
クイックスタート
cd ~/src/ripgrep
semlith index . # one store, and the model (~52 MB) downloads once
semlith search "where is a file detected as binary"
semlith neighbors search_parallel # callers and callees
semlith start # the daemon and the portal
$ semlith search "where is a file detected as binary" -k 1
1. 0.083 vf GUIDE.md:735-746
binary files:
1. The default mode is to attempt to remove binary files from a search
completely. ...
$ semlith neighbors search_parallel
callers (2)
main via defines (extracted) crates/core/main.rs:44 · call at line 166
run via calls (resolved) crates/core/main.rs:78 · call at line 90
callees (25)
matcher via calls (resolved) crates/core/flags/hiargs.rs:379 · called at crates/core/main.rs:177
search_worker via calls (resolved) crates/core/flags/hiargs.rs:705 · called at crates/core/main.rs:176
...
ヒットはすべて path:start-end 形式のロケーターで、エディターやエージェントに渡せます。また、vf はベクトルリストとキーワードリストの両方で見つかったことを示します。ドキュメントも同じように回答します。
## エージェントから使用する
semlith setup # registers each agent client that has a registration CLI
semlith doctor # checks each client can actually reach it, and says how to fix it if not
semlith setup は、登録用 CLI を備えたインストール済みクライアントのうち、12 個のドキュメント化されたクライアントのうち 6 個で、MCP サーバーをユーザースコープに登録します。残りの 6 個は設定ファイルを使用します。semlith setup --register-all を実行すると、設定ファイルが自動的に書き込まれ、semlith doctor はすべてのクライアントについて報告します。各設定項目は tests/clients.rs のバイナリに対して実行されます。また、docs/clients.md には、HTTP トランスポートを使用するすべてのクライアントが記載されています。セットアップでは、エージェントが grep を実行しようとしたときに Semlith の呼び出しを提案するステアリングフックである Semlith Agent Skill と、読み取り専用の調査エージェントもインストールされます。
semlith mcp は stdio 経由で MCP を提供し、デーモンはエージェントキー(semlith key show)で保護された /mcp で、同じツールを HTTP 経由で提供します。各リクエストで定義ごとにトークンを消費するため、デフォルトでは 8 個のツールが一覧表示されます。SEMLITH_MCP_TOOLS=all を設定すると、16 個すべてが一覧表示されます。
| ツール | 回答する内容 |
|---|---|
semlith_search | 答えはどこにありますか?パス、範囲、包含するシンボル、および見つかった方法。 |
semlith_brief | 1 つの質問に必要なすべてを 1 回の呼び出しで取得します。トークン予算内で、範囲、テキスト、1 ホップ先の呼び出し元と呼び出し先を含みます。 |
semlith_read | 1 つの範囲または 1 つのシンボルのみを取得し、その周辺は取得しません。 |
semlith_symbol | これはどこで定義されていますか?history: true を指定すると、以前の状態を取得します。 |
semlith_neighbors | 何がこれを呼び出し、これが何を呼び出しますか? |
semlith_impact | これに到達するすべてのものと、関連するファイル。 |
semlith_files | どのファイルがインデックス化されていますか? |
semlith_stats | 各ストアには何が格納されていますか? |
semlith_path, semlith_trace | 2 つのシンボルがどのようにつながっているかを、経路または根拠として取得します。 |
semlith_pattern | 1 つの言語に対する tree-sitter の構造パターン。 |
semlith_index, semlith_add, semlith_forget | 会話中にストアを変更します。 |
semlith_report | 台帳、インデックス、グラフから 5 種類のレポートのいずれかを取得します。 |
semlith_languages | lang が受け付ける言語名。 |
引数なしの semlith mcp は登録済みのすべてのストアを開くため、1 つの質問で複数のリポジトリを横断できます。tests/mcp.rs のセッションでそれぞれ動作が確認された MCP 2026-07-28、2025-11-25、2025-06-18、2024-11-05 に対応しています。公式のMCP レジストリでは、次の mcp-name で登録されています:io.github.semlith/semlith
ポータル
semlith start は、すべてのストアを管理するデーモンを 1 つ起動します。各ストアの書き込みロックを保持し、フォルダーを監視し、保存した内容を再埋め込みして、http://127.0.0.1:7365 でポータルを提供します。セッション トークン付きの URL は、標準出力に 1 回だけ表示されます。各ページの詳細は docs/portal.md をご覧ください。
![]() 検索。ハイブリッド検索結果には、それぞれどのリストが見つけたかが表示されます。 | ![]() グラフ。呼び出し元、呼び出し先、影響範囲、パスを表示します。 |
![]() インデックス作成の実行。デバイスごとのリアルタイム速度を確認し、一時停止や停止ができます。 | ![]() 台帳。すべての検索と、それによって節約されたトークン数を表示します。 |
ネットワークには公開されません。 デーモンは 127.0.0.1 のみで待ち受け、変更するフラグはありません。すべてのページと /api/ ルートには、実行ごとのセッション トークンが必要です。トークンは Semlith-Token リクエストヘッダーで送信し、指定しない場合は 401 が返されます。エージェントキーで開けるのは /mcp のみです。レスポンスには 'self' の Content-Security-Policy が含まれ、CORS ヘッダーは送信されません。ポータルが読み込むバイトはすべてバイナリにコンパイルされています。--airgap を指定すると、接続が確立される前にすべての外部リクエストが拒否されます。これには、キャッシュされていないモデルやパックのダウンロード、semlith upgrade、価格表、Semlith Cloud、semlith add が含まれます。プライバシーページでは、実行中のデーモンを使ってこれらの主張を確認できます。詳細は docs/security.md をご覧ください。
仕組み
files ──chunk──> text ──embed──> vectors ──quantize──> index/*.tvim (turbovec)
│
└──parse──> symbols, edges ─────────> store.db (SQLite)
query ──embed──> vector ──search shards──┐
──keywords──> FTS5 ────────────────┴──fuse──> ranked spans ──> enclosing symbol
- 読み取り。 ファイルは、人が目にするテキストとして読み取られます。13 種類の形式には、それぞれ専用のリーダーがあります(PDF、Word、PowerPoint、Excel、ノートブックなど)。それ以外はすべて UTF-8 として読み取り、行に沿って最大 800 文字のチャンクに分割します。Markdown のチャンクは見出しのパスとともに埋め込まれ、コードのチャンクはそれを囲む定義とともに埋め込まれます。
- 埋め込み。
granite-embedding-small-english-r2(int8、384 次元、約 52 MB)を ONNX Runtime で実行し、ストアごとに固定します。デーモンは Apple シリコンの Neural Engine と GPU(Core ML、WebGPU、CUDA)でも埋め込みを実行します。各処理経路は、初回バッチの前に既知の回答と照合して確認されます。画像は CLIP ViT-B/32 を介して第 2 のベクトル空間に埋め込まれ、OCR ではなく、画像に何が写っているかに基づいて照合されます。 - 保存。
index/には 65 536 個の量子化ベクトルからなる turbovec のシャードが格納され、store.dbにはチャンクのテキスト、スパン、シンボル、エッジ、台帳、再インデックスを差分で行うためのコンテンツハッシュが格納されます。保存すると、1 つのシャードが書き換えられます。 - グラフ。 46 言語すべてでエッジが保持されます。各エッジは
extracted(ファイル自体から確定)、resolved(候補が 1 つ)、ambiguous(候補が複数あり、その数も表示)、またはinferred(名前の単純一致)のいずれかです。semlith pathは、--all-edgesを指定しない限り、特定できない名前をまたぐことを拒否します。
docs/architecture.md に全容が記載されています。
コマンド
| コマンド | 説明 |
|---|---|
semlith index [PATHS...] | パスをストアにインデックス化します。再実行時は変更されたものだけを埋め込みます。--each は各パスに個別のストアを作成し、--projects <DIR> はリポジトリごとにストアを作成します。 |
semlith watch [PATHS...] | ファイルが保存されるたびに再び埋め込みます。 |
semlith start | デーモンです。すべてのストアを最新の状態に保ち、ポータルと /mcp を 127.0.0.1:7365 で公開します。 |
semlith search <QUERY> | ハイブリッド検索です。-k、--json、--path/--ext/--lang(繰り返し指定可能。先頭に ! を付けると除外)、--prefer code|docs、定義を含む正規表現行を検索する --exact が使えます。 |
semlith brief <QUESTION> | --budget トークン(デフォルトは4000)の範囲内で、スパン、そのテキスト、および1ホップ先の呼び出し元と呼び出し先を表示します。 |
semlith read <TARGET> | 1つのスパン(src/store.rs:1041-1080)または1つのシンボルを表示します。 |
semlith symbol、neighbors、impact、path、trace | グラフを表示します。定義、呼び出し元と呼び出し先、影響範囲、チェーン、根拠を確認できます。 |
semlith pattern <QUERY> --lang L | tree-sitter の構造パターンです。 |
semlith stats、files、languages、models | ストアの内容を確認できます。files --tree では、インデックス化されなかったものとその理由を表示します。 |
semlith refused、scan | インデックス化されなかったファイルとその理由、および今日のルールでは拒否されるファイルを表示します。 |
semlith add <URL> | 1つの https URL をストアに取得します。クローリング、認証情報、プライベートアドレスには対応しません。 |
semlith forget、compact、drop | ファイルの削除、再埋め込みなしで不要なバイトを回収、ストアの削除を行います。 |
semlith adopt、trust | ストアをストアホームに移動するか、ストアホーム外のストアを1つ許可します。 |
semlith ledger、report、schedule、prices | 検索履歴、5種類の形式のレポート、スケジュール済みレポート、価格表を表示します。 |
semlith mcp、hook、key | stdio 経由の MCP、ステアリングフック、HTTP エージェントキーを扱います。 |
semlith setup、doctor、upgrade | インストールと修復、各クライアントの診断、バイナリの置き換えを行います。 |
semlith accel | 埋め込みを行うデバイスを表示します。CPU(常に有効。SEMLITH_CPU_CAP で上限を設定)、Neural Engine、GPU、および実験的な CUDA、TensorRT、OpenVINO、llama.cpp の各レーンに対応します。 |
semlith cloud | 別のホスト型サービスである Semlith Cloud に接続します。semlith cloud login を実行するまでは、ネットワークに接続しません。 |
semlith <command> --help ですべてのフラグを確認できます。
ストアの保存場所。 各ストアは ~/.semlith/stores/<name> にあり、~/.semlith/registry.json に登録されます。そのため、semlith mcp と semlith start はフラグなしですべてのストアを見つけられます。コマンドは --store または SEMLITH_STORE からストアを選び、次にコーパスの隣にある .semlith、その次にカレントディレクトリをカバーする登録済みストアを探します。いずれも見つからない場合はストアを作成します。
インデックス化されるもの。 指定されたパスの下にあるものはすべて対象ですが、.gitignore に記載されたファイルと隠しファイル、バイナリ、8 MiB を超えるファイル、展開すると32 MiBを超えるアーカイブ、生成物またはベンダー提供のディレクトリは除きます。node_modules は常にスキップされます。また、SEMLITH_DEFAULT_IGNORES=0 が設定されていない限り、target、build、dist、vendor はそれぞれのマニフェストの隣でスキップされます。認証情報は決してインデックス化されず、グレーゾーンをどう扱うかは自分で決められます。
検索履歴
MCP 経由でエージェントから実行された場合も、CLI やポータルから実行された場合も、すべての検索がストアに記録されます。各行には、クエリ、クライアント、セッション、ヒット、および読み取られた内容が含まれます。
各行には直前の行のハッシュが記録されるため、semlith ledger --verify で編集または削除された行を検出できます。これはローカルで記録され、デフォルトで有効です。--no-ledger または SEMLITH_LEDGER=0 で無効にできます。
このリポジトリでの節約量。 このリポジトリの検索ハーネスにある107個すべての質問を、src/ のストアに対して semlith brief で実行し、その後 semlith ledger --verify を実行します。回答された質問をエージェントに送るトークン数は平均 3 982トークン でした。一方、回答で示された4.1個のファイルを丸ごと読むと 105 132トークン でした。ストア独自のトークナイザーで数えると、カバレッジ100 %のまま26倍少なくなります。2つの回答で同じファイルが示された場合に二重に数えているため、これは上限値です。
ベンチマーク
53 件の公開ドキュメントについて 127 件の質問を行ったところ、Grep、Glob、Read を使う Opus エージェントは 63 % の確率で該当箇所を見つけましたが、127 件の回答のうち 41 件の引用は、指定したドキュメントのどこにも記載されていませんでした。ファイル名からファイルを見つけたものの、内容を読めず、もっともらしい文章を書いたのです。Semlith をインストールした場合は 98 % の確率で見つけ、126 件の引用のうち捏造されたものは 0 件でした。強力なモデルを使った単一リポジトリのコードでは効果がなく、Opus のスコアは Semlith の有無にかかわらず 92 % です。
公開コード検索ベンチマークは、2026 年 10 月に M1 MacBook Air 1 台で bench/scorecard/ を使って実行し、別のツールが勝った場合も含め、測定結果をそのまま公開しています。すべての表、すべてのグラフ、および各数値を再現するコマンドは、スコアカードのページにあります。
| ベンチマーク | semlith | ベースライン | インスタンス数 |
|---|---|---|---|
| SWE-bench Verified、上位 10 件以内に正しいファイルが含まれる割合 | 76.8 % | grep then read で 47.0 % | 500 |
| SWE-bench Lite、上位 10 件以内に正しいファイルが含まれる割合 | 72.3 % | grep then read で 47.3 % | 300 |
| SWE-bench Verified、最初に正しいファイルが見つかるまでのトークン数の中央値 | 224 | grep then read で 15 491 | 500 |
| CodeRAG-Bench DS-1000、NDCG@10 | 0.260 | BM25 で 0.158 | 513 |
| エージェント(Opus)、正解 1 件あたりのコスト | $0.065 | grep only で $0.072 | 50 × 3 runs |
| ドキュメント(PDF、Office、EPUB など)、4k トークン以内に該当箇所が見つかった割合 | 116/127 | rga で 34/127 | 127 |
| これらのドキュメントでのエージェント(Opus)、該当箇所が見つかった割合 | 124/127 | grep only で 80/127 | 127 |
| 実際のセッション、読み込んだファイル全体に対して送信されたトークン数 | 75.2× 少ない | 1,575 件の検索 |
Semlith が常に勝つわけではありません。20 インスタンスの競合サンプルでは hit@1 と hit@10 で Semble がわずかに上回り、CodeRAG-Bench の RepoEval では BM25 が Semlith を上回ります。また、Grep が組み込まれているため、Opus が自分から Semlith を使うことはほとんどありません。スコアカードのページには、これらの行と RepoBench-R も掲載しています。
数値
カバレッジはコードから読み取っています。tests/readme.rs は、以下のいずれかがソースと異なるとビルドに失敗します。
| 検索およびグラフ化できる言語 | 46 |
| エッジの種類 | 6 |
| リーダーが用意されているドキュメント形式 | 13 |
| 画像の種類 | 5 |
| MCP ツール | 16 |
| CLI コマンド | 36 |
エージェントクライアント。各セットアップ手順を tests/clients.rs でバイナリに対して実行 | 12 |
| ビルド済みターゲット | 4 |
測定値は、4P+4E の Apple シリコン搭載ノートパソコンで、各測定を再現するコマンドとともに記載しています。docs/performance.md に全表があります。
| チャンク数が 700/7 000/70 000 の場合のウォーム検索。ピーク RSS は 240 MB 未満 | 16.2 / 37.9 / 159.1 ms | cargo test --release --test measure -- --ignored --nocapture |
| ディスク上の編集から検索可能になるまで。ウォッチャー実行中 | 1.24 s | docs/performance.md |
| M1 Air でのインデックス作成:Neural Engine/Core ML 経由の CPU および GPU | 229.8 / 62.7 chunks/s p10 | docs/performance.md |
| 実行後 60 秒時点のデーモンメモリ使用量。7 つのストアをオープン | 465 MB | footprint -p <pid> |
| 60 秒間アイドル状態のウォッチャーの CPU 使用時間 | 1.0 s 未満 | 同上 |
| 変更されたファイル 1 件 | 1 シャードを書き換え | cargo test --release --test shards -- --ignored --nocapture |
tools/list | 2 633 bytes、8 個のツール。Opus リクエストに追加されるトークンは 1 323 個 | cargo test --release --test retrieval -- --ignored |
| 107 件中 30 件の固定済み質問による検索性能 | hit@1 24/30、hit@3 27/30、hit@8 29/30、ばらつきなし。識別子は 11 件中 11 件が上位 3 件に入る | 同上 |
| 検索 1 回。再スコアリングのオフ/オン | 8.2 ms / 300 ファイルのストアで 132.2 ms | 同上 |
回答済みの質問 1 件。brief と検索してから読む方法の比較 | 1.00 回対 2.54 回、1 112 トークン対 725 | 同上 |
| 呼び出しエッジの解決率 | 62 % | 同上 |
| macOS arm64 バイナリ | 125 435 312 bytes(119.6 MiB) | ls -l target/release/semlith |
| Linux の glibc 最低バージョン | GLIBC_2.34 | objdump -T semlith runtime/libonnxruntime.so |
ピークメモリはコーパスのサイズに応じて増えないため、インデックスの対象にかかわらず約 600 MB を見込んでください。クエリのレイテンシは増加します。ベクトルスキャンは線形だからです。
既知の制限
- 1 つのストアに対して書き込みできるのは 1 つだけです。デーモンまたは
semlith watchがストアを保持している間に、別のsemlith indexを実行すると終了し、保持しているプロセスを表示します。 - 初回のインデックス作成はモデルの速度に制約されます。M1 の Neural Engine では約 230 チャンク/秒、CPU と GPU では 63、CPU のみでは 30 です。以降の実行では、変更された内容だけを埋め込みます。macOS では、launchd によるエージェントスレッドのスケジュール方法のため、ログインサービス内で CPU 処理のみを行う場合、ターミナルでの速度の約 60 % になります。
- Mac では、
semlith accel on gpu-beside-aneを実行しない限り、GPU は Neural Engine と並行して埋め込みを行いません。CUDA が動作するのは Linux x86_64 のみです。Windows では、NVIDIA カードを使用した埋め込みは WebGPU 経由で行われます。 - macOS では新しいバイナリを使うたびに、Documents などのフォルダーへのアクセス許可を再度求められます。該当する場所にあるストアは、許可のプロンプトに応答するまで
runningと表示され、待機します。 - ストアが
SEMLITH_INDEX_MEMORYより大きい場合、クエリのたびにディスクからシャードを読み込みます。ストアがメモリに収まる場合は、予算を増やしてください。 - デフォルトのモデルは英語専用で、ストア作成時に固定されます。画像検索は OCR ではありません。
- 検索フィルターは SQLite の
GLOB(正規表現ではありません)です。また、--langは拡張子を使って判定し、ファイルの内容は読み取りません。複数ストアの検索では、順位をまとめて再計算するのではなく、各順位を統合します。クロスエンコーダーによる再スコアリング(SEMLITH_RERANK=on)はデフォルトでオフです。k=1 で 77 件中 2 件の回答を追加するために、検索時間が約 16 倍かかるためです。 - バイナリは Apple による公証を受けておらず、Windows 用の Authenticode 署名もありません。各リリースには、ed25519 署名済みの
SHA256SUMSと GitHub アーティファクトのアテステーションが付属します。Windows ARM64 版と Intel Mac 版はありません。また、semlith upgradeが置き換えられるのは~/.semlith/bin内のバイナリのみです。
ドキュメント
| ドキュメント | 内容 |
|---|---|
| docs/portal.md | ポータルのすべてのページとコントロール。 |
| docs/clients.md | 12 種類のエージェントクライアントと HTTP トランスポートのセットアップ設定。 |
| docs/architecture.md | 各要素の連携方法とその理由。 |
| docs/performance.md | 測定値のすべてと、その測定に使ったコマンドおよび日付。 |
| docs/models.md | 埋め込みモデルと、モデルの選び方。 |
| docs/security.md | 脅威モデルと、通信されるデータ。 |
| docs/compatibility.md | 契約の内容と、0.x バージョンが保証すること。 |
| CHANGELOG.md | 各リリースでの変更内容。 |
コントリビューション
コントリビューションを歓迎します。CONTRIBUTING.mdではビルド方法、 CI で実行されるチェックと対象外の内容を説明しています。AGENTS.mdには、 コーディングエージェント向けの同じ内容を記載しています。全員が行動規範に従います。 セキュリティ上の問題を報告する場合は、イシューを開くのではなく SECURITY.mdをご覧ください。
先行事例
Semlith のベクトルインデックスは、Ryan Codrai(MIT ライセンス)による turbovecです。これは、Amir Zandieh、Majid Daliri、Majid Hadian、Vahab Mirrokni による "TurboQuant: Online Vector Quantization with Near-optimal Distortion Rate" の TurboQuant を実装したものです。TurboQuant はデータに依存しません。各ベクトルを ランダムに回転させ、トレーニング処理を行わずに各座標を個別に量子化します。これは、ファイルを保存するたびに更新されるインデックスに必要な特性です。最初のファイルを追加する前に収集しておくデータはなく、コーパスの増加に伴う再構築も不要です。また、ベクトルを追加すれば、そのベクトルを検索できます。
ライセンス
Apache-2.0。LICENSEおよびNOTICEをご覧ください。
モデルの重みは、それぞれのライセンスに基づき、実行時にダウンロードされます。デフォルトの ibm-granite/granite-embedding-small-english-r2 は Apache-2.0 ライセンスです。また、CLIP ViT-B/32 ペア、WebGPU プラグイン(MIT ライセンス)、および CUDA パックが取得する NVIDIA ライブラリにも、それぞれのライセンスが適用されます。 docs/models.mdをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。




