Sense について
Sense は AI コーディングエージェント向けの MCP サーバーで、コードベースをローカルでインデックス化し、シンボルグラフとセマンティックコード検索を提供します。Claude Code、Cursor、Codex CLI などのクライアントを対象とし、SaaS アカウント、API キー、クラウド依存は不要とされています。呼び出し関係、影響範囲、プロジェクトの規約を AI に与える点が特徴です。
主な機能
- 01呼び出し元、呼び出し先、継承関係を含むシンボルグラフ
- 02テキスト検索へのフォールバック付きハイブリッドセマンティック検索
- 03影響範囲とリスクスコアの分析
- 04プロジェクトのコーディング規約の検出
- 05増分更新に対応したローカルインデックス
活用シーン
- 01リファクタリング前に関数のすべての呼び出し元を調べる
- 02変更がコードとテストに与える影響範囲を見積もる
- 03AI コーディングエージェントにチームのコードスタイルを守らせる
- 04リポジトリ内のデッドコードを特定する
MCP 対応
本プロジェクトは MCP サーバーであり、sense_graph、sense_search、sense_blast、sense_conventions の 4 つのツールを MCP クライアントに提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Sense ⠎⠑⠝⠎⠑
AI コーディングエージェント向けに構築された、コードベースのコンテキストを提供する MCP サーバーです。
「この関数を呼び出しているのは誰?」という質問に答えるために、AI エージェントは19個のファイルを読み込みます。コードベースのテキストは持っていても、その構造を示す地図がないからです。タスクのたびに構造を再導出し、grep の連鎖をたどってトークンを浪費し、存在しない依存関係を幻覚します。Sense はリポジトリを一度インデックス化し、MCP 経由でシンボルグラフとセマンティックコード検索を提供します。Claude Code、Cursor、Codex CLI、その他あらゆる MCP クライアントは、同じタスクをツール呼び出し19回ではなく10回で、228Kトークンではなく156Kトークンで、同じ正確さを保ちながら完了します(bench/)。
バイナリは1つ、ローカルインデックスは1つ、AI 向けツールは4つ。SaaS アカウントも、API キーも、クラウドへの依存も不要です。
Sense はあなたのマシン上で動き、習得に手間はかかりません。そして、あなたのためのものではありません。あなたの AI のためのものです。
初めての方は、ガイドから始めてください。読者の立場に応じて、各ドキュメントへの道筋を案内します。
Sense が大切にしていること
コードベースとは、単なるテキストではなく構造です。何が何を呼び出すか、何が何を壊すか、チームがどのようにコードを書くかを示すグラフは現実に存在し、把握でき、保持する価値があります。Sense はそれをあなたのマシン上に保管し、AI に渡します。
ほかのすべては、ここから導かれます。コードはあなたのものだからローカルで動作します。理解のために変更権限は必要ないから読み取り専用です。AI に必要なのは、選択肢が100個あることではなく、きちんと動くツールがいくつかあることだから、ツールは4つです。
これらは機能ではありません。Sense の形を決める理由です。
AI が得られるもの
AI 向けのツールは4つ。あなた向けの CLI はフル機能。余計なものはありません。
| ツール | 機能 |
|---|---|
sense_graph | シンボルの関係、呼び出し元、呼び出し先、継承、テスト、デッドコード |
sense_search | キーワード検索とテキスト検索へのフォールバックを備えた、バイエンコーダーとクロスエンコーダーを組み合わせたハイブリッドなセマンティックコード検索 |
sense_blast | 影響範囲、影響を受けるコード、影響を受けるテスト、リスクスコア |
sense_conventions | ソースコードから検出したプロジェクトの慣習 |
AI は「これを呼び出しているのは誰?」という質問に答えるために、30個のファイルを読む必要がなくなります。依存関係を幻覚しなくなります。正しくてもチームの書き方に合わないコードを書くこともなくなります。
慣習の検出
4つのツールのうち、慣習の検出は、他にうまくできるものがほとんどない機能です。AI ツールが苦手なのは構造だけではありません。スタイルも苦手です。正しいコードを書いても、あなたのコードベースでの書き方には従いません。
Sense は実際のソースコードからパターンを検出します。主要な型とその宣言、フレームワークのイディオム(Rails の関連付け、Go のインターフェース、Django のモデル)、アーキテクチャのレイヤー、命名規則などです。AI は説明されるからではなく、これらのパターンを見ることで、それに沿って書くようになります。慣習の検出は単なる機能ではありません。AI が書いたコードを、チームに馴染むものにする要です。
変更点
7 つの実際のコードベース(Discourse、Flask、Next.js、Axum、Gin、Javalin、および非公開の E コマースリポジトリ)で測定しました。
詳しい方法と生データについては、bench/ をご覧ください。Serena、Probe、GitNexus、コード検索 MCP との直接比較のリーダーボードについては、docs/bench-leaderboard.svg をご覧ください。
| 指標 | Claude Code (Opus 4.6) | Claude Code (Opus 4.6) + Sense | 変化 |
|---|---|---|---|
| タスクあたりのツール呼び出し回数 | 19 | 10 | -47% |
| タスクあたりのトークン数 | 228K | 156K | -32% |
| タスクあたりのコスト | $0.42 | $0.31 | -26% |
| セッション時間 | 91s | 73s | -19% |
| 10 万トークンあたりのスコア | 0.19 | 0.30 | +64% |
| 1 分あたりのスコア | 0.28 | 0.38 | +37% |
正確性はそのままに、作業量を大幅に削減します。Sense がモデルを賢くするわけではありません。モデルに構造的な理解を与えることで、無駄な作業を減らします。
構造的なタスク
テキストを読むだけでなく、コード間の関係を理解する必要があるタスクでは、Sense が優位性を発揮します。
| タスクの種類 | ベースライン | + Sense | 理由 |
|---|---|---|---|
| 影響範囲 | 0.17 | 0.25 | 事前計算された依存関係グラフと手動での grep の連鎖との比較 |
| 呼び出し元の検索 | 0.27 | 0.33 | グラフ検索と数十個のファイルの読み込みとの比較 |
| デッドコード | 0.00 | 0.05 | ベースラインではまったく実行できません |
| セマンティック検索 | 0.36 | 0.38 | テキストフォールバックを備えた 2 段階検索(バイエンコーダー + クロスエンコーダー) |
Sense が役立たないケース
Sense が提供するのは構造的な理解であり、汎用検索エンジンではありません。ログメッセージの検索や文字列リテラルの場所の特定など、根本的にテキストの grep で済むタスクでは、通常の grep が適切なツールであり、Sense を使っても何も加わりません。検索のテキストフォールバック(ripgrep)がこの差をある程度埋めますが、あくまでフォールバックであり、置き換えではありません。
インストール
curl -fsSL https://luuuc.github.io/sense/install.sh | sh
または、最新リリースからご利用の OS 用のバイナリをダウンロードして解凍し、sense を PATH 上の任意の場所に移動します。
リリースの検証(任意)
各リリースのチェックサムファイルは Sigstore で署名されています(キーレスで、このリポジトリのリリースワークフローに紐付けられています)。cosign をインストールした状態で、次を実行します。
cosign verify-blob \
--certificate-identity-regexp '^https://github.com/luuuc/sense/\.github/workflows/release\.yml@refs/tags/v.+$' \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate sense_<version>_checksums.txt.pem \
--signature sense_<version>_checksums.txt.sig \
sense_<version>_checksums.txt
アーティファクトにはビルド来歴の証明も付属しています。gh attestation verify sense_<version>_<os>_<arch>.tar.gz --owner luuuc を実行してください。
Go を使用する場合(1.26 以降)
go install github.com/luuuc/sense/cmd/sense@latest
コードベースをインデックス化する
cd /path/to/project && sense scan
tree-sitter でコードを解析し、シンボルと関係を抽出して、同梱の ONNX モデルですべてを埋め込み、ローカルの .sense/ インデックスに書き込みます。実行するたびに差分更新されます。
AI を接続する
cd /path/to/project && sense setup
インストール済みの AI ツール(Claude Code、Cursor、Codex CLI、OpenCode、Windsurf、Cline)を自動検出し、それぞれの連携設定を書き込みます。
.mcp.json/.cursor/mcp.json/.codex/config.toml/opencode.json:検出されたツール(または任意の MCP クライアント)の MCP サーバーエントリーCLAUDE.md/.cursorrules/AGENTS.md:ツール置換テーブルを含むルーティングガイダンス。単一の共有ソースから生成されます.claude/settings.json:Claude を Sense のツールへ誘導するライフサイクルフック.claude/skills/と.opencode/skills/:探索、影響分析、規約のワークフロースキル
Windsurf と Cline はグローバル設定からのみ MCP サーバーを読み込むため、この 2 つについては sense setup が AGENTS.md を書き込み、手動で追加するエントリーを表示します。
手動での設定は不要です。sense setup を実行するだけで、AI がコードの構造を理解できるようになります。
Sense は、コードベースのコールドスタートマップである .sense/summary.md も生成します(主要な名前空間、ハブシンボル、エントリーポイント、規約)。AI はセッション開始時にこれを読み込み、プロジェクトの構造をすぐに把握します。把握のためのツール呼び出しは不要です。
Sense のアップグレード後に再設定するには:
sense setup
設定したら、そのまま使えます
sense setup の後は、何もする必要はありません。エディターがすでに起動している MCP サーバーは、バックグラウンドで作業ツリーを監視し、変更が加わるたびに再インデックスするため、編集が AI によるものでも、自分でエディターを操作したものでも、git pull によるものでも、ブランチ切り替えによるものでも、インデックスは最新の状態に保たれます。別のプロセスを起動する必要も、--watch を覚えておく必要もありません。スキャンのたびにサマリーが再生成されます。AI はより速く回答し、トークンの消費も減ります。以前は感じていた不便さも、いつしか意識しなくなります。
仕組み
Sense は tree-sitter でコードベースを解析し、シンボル(関数、クラス、モジュール、メソッド)とその関係(呼び出し、インポート、継承)を抽出します。次に、バンドルされた量子化 ONNX モデルで各シンボルを埋め込み表現に変換し、すべてを .sense/ 内のローカル SQLite インデックスに保存します。
cd /path/to/project && sense scan
これ以降、AI は MCP を通じて構造に関する質問ができます。これらは AI が呼び出すツールです。検証のために手動で実行することもできます。全リファレンスについては、CLI.md を参照してください。
MCP サーバーはクエリに回答するだけではありません。エディターセッションの間、デバウンス付きファイルシステム監視機能で作業ツリーを監視し、リクエスト処理とは別に、変更されたファイルをバックグラウンドで再インデックスします。ブランチ切り替え時は、すべてのファイル変更に反応するのではなく、git diff から一度だけ再インデックスします。数マイクロ秒前に変更されたファイルをクエリした場合は、回答前にサーバーがそのファイルだけをインラインで修復するため、編集が見落とされることはありません。一度にインデックスするプロジェクトは 1 つです。単一書き込みロックにより、2 つ目のエディターウィンドウや、ターミナルで実行する sense scan --watch は、二重にインデックスすることなく読み取りを処理します。バックグラウンド監視を無効にするには、.sense/config.yml で watch: false を設定してください。
パフォーマンス
Sense はワークフローに自然に溶け込みます。クエリはミリ秒単位で解決されるため、AI は処理が滞ることなく構造について推論できます。
| 操作 | 計測値(p50 / p95) |
|---|---|
| グラフクエリ | 0.2ms / 3ms |
| 影響範囲 | 0.1ms / 10ms |
| 規約 | 16ms / 16ms |
| コールドスタート | 48ms |
| フルスキャン | 4.9s |
| 増分スキャン | 2.3s |
Sense 自身のコードベース(382 ファイル、4,032 シンボル)で計測しています。プロジェクトのローカルな数値を確認するには、sense benchmark を実行してください。
Sense が目指さないもの
コードエディターではありません。トークンオプティマイザーではありません。検索エンジンではありません。機能数を競う製品ではありません。何にも依存しません。目標としないものは省略ではなく、製品のあり方を形づくるものです。詳細は NON-GOALS.md をご覧ください。
対応プラットフォーム
| プラットフォーム | 状況 |
|---|---|
| Linux amd64 | 対応 |
| Linux arm64 | 対応 |
| macOS Apple Silicon (arm64) | 対応 |
| macOS Intel (amd64) | 対応(レガシー) |
| Windows | WSL2 を使用して対応 |
Windows ネイティブビルドはまだ利用できません。WSL2 で Linux バイナリを使用してください。
macOS Intel 版のバイナリは現在も提供され、動作しますが、macOS 10.15(Catalina)以降が必要です。また、Microsoft が ONNX Runtime 1.23.1 以降の macOS x86_64 ランタイムビルドを提供しなくなったため、古いバンドル済みランタイム(ONNX Runtime 1.23.1)に固定されています。この依存関係は固定されており、更新できないため、Mac では Apple Silicon を推奨します。
要件
- バイナリ用に約 60 MB のディスク容量
.sense/インデックス用に 100~200 MB(プロジェクトの規模によって異なります)
言語サポート
Sense は解析に tree-sitter を使用します。2 つのティアにわたる 13 言語向けの抽出器が含まれています。
フルティア。 シンボル、呼び出し、継承、インポート、影響範囲、セマンティック検索、およびフレームワーク固有の推論に対応します。
| 言語 | フレームワークのサポート |
|---|---|
| Ruby | Rails(関連付け、コールバック、ルート)、Stimulus、Turbo |
| TypeScript / JavaScript | React(JSX コンポーネントの呼び出し) |
| Go | - |
| ERB | Stimulus、Turbo(JS コントローラーへの言語横断エッジ) |
標準ティア。 シンボル、呼び出し、継承、インポート、影響範囲、およびセマンティック検索に対応します。
| 言語 | 備考 |
|---|---|
| Python | Django(モデル、URL パターン)、FastAPI(ルート、Depends) |
| Rust | 構造体、トレイト、列挙型、impl ブロック |
| Java | クラス、インターフェース、列挙型、レコード |
| Kotlin | クラス、インターフェース、オブジェクト |
| C# | クラス、インターフェース、構造体、名前空間 |
| C++ | クラス、構造体、名前空間(:: スコープ) |
| C | 関数、構造体、列挙型 |
| PHP | クラス、インターフェース、トレイト(\ スコープ) |
| Scala | クラス、トレイト、オブジェクト |
Java、Kotlin、C#、C++、C、PHP、Scala では、手書きのウォーカーではなく、テーブル駆動型の汎用抽出器を使用しています。それぞれ約 25 行の設定で構成されています。Python と Rust には専用の抽出器があり、Python では Django と FastAPI の推論にも対応しています。新しい言語の追加についてはCONTRIBUTING-A-LANGUAGE.mdを、フレームワークのサポート(およびそれに伴うデッドコードの細分化)の追加についてはCONTRIBUTING-A-FRAMEWORK.mdを参照してください。
記事
コードベースインテリジェンス、ベンチマーク手法、Sense の開発思想について詳しく解説しています:ARTICLES.md。
フィードバック
問題はgithub.com/luuuc/sense/issuesで報告してください。
開発
make build # build the binary
make test # run tests
make lint # run linters
make ci # all of the above
コントリビューション
Sense は v1 の機能が完成しています。外部からのコントリビューションは、新しい言語やフレームワーク、言語またはフレームワーク向けのデッドコードの細分化、AI ツールとの統合の 3 分野で受け付けています。バグ修正はいつでも歓迎しますが、新機能の追加は受け付けていません。対象範囲の詳細と手順ガイドはCONTRIBUTING.mdに記載されています。
- CONTRIBUTING-A-LANGUAGE.md:新しい言語の追加。
- CONTRIBUTING-A-FRAMEWORK.md:フレームワークのサポートとデッドコードの細分化。
- CONTRIBUTING-AN-AI-TOOL.md:新しい AI コーディングツールとの統合。
ライセンス
MIT。LICENSEを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。