context-mode は、AIコーディングエージェントがツールを呼ぶたびに生の出力を会話へ流し込み、コンテキストを使い切ってしまう問題を抑える MCP サーバーだ。README はこれを「the other half of the context problem(コンテキスト問題のもう半分)」と呼ぶ。何を集めるかではなく、集めた結果がどれだけ枠を食うか、の側を受け持つ。
AIコーディングの全体像(始め方・ツール比較・実践ワークフロー)は Vibe Codingとは?AIコーディングの始め方・ツール比較・実践ワークフロー2026 にまとめている。本記事はその中で「エージェントのコンテキストを使い切らせない」道具として context-mode を扱う。
RAW VS SANDBOX何が変わるか
生の出力を会話に流さず、答えと索引への案内だけを返す
ふつうのツール呼び出し
Bash・Read・MCPの戻り値
- 268KBのログが全部コンテキストに入る
- 数回の呼び出しで枠が埋まり要約が走る
- 要約で、触っていたファイルや決めたことが抜ける
context-mode 経由
ctx_execute などの11ツール
- サブプロセスで実行stdout だけが会話に戻る
- 大きい出力は自動で索引へ戻りは183バイトの案内文
- 作業の記録は SQLite に要約の後に必要な分だけ引き戻す
30秒でわかる context-mode
- ・ツールの実行をサブプロセスに移し、標準出力だけを会話に返す MCP サーバー(11ツール・12言語)
- ・大きな出力は自動で SQLite の全文索引に入り、会話には「索引した」という案内だけが戻る。中身は
ctx_searchで必要な分だけ引く - ・2026-10-14 に v1.0.169 を動かした実測では、268KB のログを渡して戻りは183バイト。件数を数えるスクリプトは175バイトで正しい答えを返した
- ・Claude Code ではプラグインで hooks まで入る。MCP だけなら
claude mcp add1行で接続できた。ライセンスは ELv2
context-mode とは:ツール出力がコンテキストを食い潰す問題
リポジトリは mksglu/context-mode。2026-10-14 時点で Star は約28.7k、Fork は約2.0k。最新タグと npm の版はどちらも v1.0.169(2026-06-29)で、それ以降の main のコミットは CI が導入数の集計ファイルを書き換えているだけだった。前回の確認(2026-08-06、Star 19,675)から機能の変更は入っていない。
README が挙げる問題ははっきりしている。Playwright のスナップショット1回で56KB、GitHub Issue 20件で59KB、アクセスログ1本で45KB。こうした生の出力が積み上がると、30分で枠の4割が埋まり、会話の要約(コンパクション)が走る。要約の後のエージェントは、どのファイルを編集していたか、何を決めたかを忘れている。
context-mode はこれを2つの原則で抑える。重い処理はサブプロセスで済ませて結果だけ返す。作業の記録は会話の外(SQLite)に逃がして、必要になったら引き戻す。README はこの考え方を “Think in Code” と呼び、「50個のファイルを読み込んで関数を数えさせるのではなく、数えるスクリプトを書かせる」と説明している。
読者の3つの問いへの答え
- ・何ができる:ツールの生の出力を会話に入れずに処理し、答えだけを返す。作業の記録を残して要約の後に戻す
- ・何を解決する:ツール出力によるコンテキストの枯渇と、コンパクションで作業の文脈が抜け落ちること
- ・何を代替する:大きな出力を手で要約して貼る運用、要約のたびに前提を貼り直す運用、参照のたびにドキュメントを丸ごと読ませる運用
context-mode の仕組み|サンドボックス実行・索引・セッション継続
THE ROUTE出力の通り道
hooks がツール呼び出しを横取りし、重いものはサンドボックスと索引へ回す
-
エージェント
Bash や WebFetch を呼ぶ
-
PreToolUse hook
ctx_* へ振り替え・deny で止める
-
サブプロセス
12言語。stdout だけ拾う
-
FTS5 索引
5KB超・intent つきは索引して該当だけ
-
会話
答えか ctx_search の結果だけ
サンドボックス実行:stdout だけが会話に戻る
ctx_execute は呼び出しごとに独立したサブプロセスを立て、コードを実行して標準出力だけを拾う。言語は JavaScript・TypeScript・Python・Shell・Ruby・Go・Rust・PHP・Perl・R・Elixir・C# の12種類。gh・aws・kubectl などの認証済み CLI は、環境変数と設定ファイルをそのまま引き継いで動く。
出力が5KBを超え、呼び出しに intent(何を探しているか)が付いていると、全文を索引に入れて intent に合う部分だけを返す。intent が無くても、大きな出力は索引に回り、会話には案内文だけが返る(実測の節で確かめた)。
ナレッジベース:FTS5 の索引を2通りの検索で引く
ctx_index は Markdown を見出しの単位で切り、コードブロックは崩さずに SQLite の FTS5 に入れる。ctx_search は語幹をそろえる Porter 方式と、部分文字列に当たるトライグラム方式の2つで検索し、順位を RRF(Reciprocal Rank Fusion)で混ぜる。複数語の質問では語が近くに並ぶ段落を上げ、kuberntes のような綴りの誤りも直してから引き直す。埋め込みモデルもベクタ DB も使わず、手元で完結する。
ctx_fetch_and_index は URL を取ってきて索引に入れる。24時間以内に同じ URL を呼ぶと取り直さず、索引をそのまま使う(ttl で変えられる)。14日より古いデータベースは起動時に消える。
セッション継続:記録は SQLite、戻すのは関連する分だけ
ファイル編集・git 操作・タスク・エラー・ユーザーの判断を、プロジェクトごとの SQLite に記録する。会話が要約されたとき、または --continue・--resume で戻ったときに、記録を丸ごと会話へ戻すのではなく、索引から関連する分だけを検索して渡す。この記録は hooks(PreToolUse・PostToolUse・PreCompact・SessionStart・UserPromptSubmit・Stop)がそろって初めて回る。
11個のツール
| ツール | 役割 | README の削減例 |
|---|---|---|
ctx_execute |
コードを実行し stdout だけ返す | 56KB → 299B |
ctx_execute_file |
ファイルをサンドボックス内で処理 | 45KB → 155B |
ctx_batch_execute |
複数のコマンドと検索を1回で(並列1〜8) | 986KB → 62KB |
ctx_index / ctx_search |
Markdown を索引に入れる/複数の質問で引く | 60KB → 40B |
ctx_fetch_and_index |
URL を取得して索引に入れる(24時間キャッシュ) | — |
ctx_stats / ctx_doctor |
削減量の表示/導入状態の診断 | — |
ctx_upgrade / ctx_purge |
更新/索引の全消去 | — |
ctx_insight |
ブラウザで Insight のダッシュボードを開く | — |
context-mode を実際に動かした結果(2026-10-14 実測)
npm から v1.0.169 を入れ(Node 22.22・Linux)、MCP サーバーを標準入出力で起動して、JSON-RPC で各ツールを直接呼んだ。材料は5,000行・274,063バイトの合成アクセスログと、context-mode 自身の README(1,619行)。
MEASURED手元で測った
268KBのログを渡しても、会話に戻ったのは200バイト前後
183B
cat access.log の戻り
全文は索引へ。元は274,063B
175B
件数を数えるスクリプト
ERROR 160件を正しく返す
1,113B
intent つきの抜き出し
該当1,039行から5行だけ。1行は200
| 呼び出し | 会話に戻った量 | 中身 |
|---|---|---|
ctx_execute で cat access.log |
183バイト | 全文は索引へ。「ctx_search で引け」という案内だけ |
| ERROR 行を数える JS | 175バイト | ERROR lines: 160(grep の結果と一致) |
cat に intent「500 errors on /api/items」 |
1,113バイト | 5行を抜粋。1行はステータス200 |
README を ctx_index |
168バイト | 45セクション(コード入り20) |
ctx_search 2問 |
4,910バイト | 該当する節の抜粋 |
件数を数えた呼び出しは次のとおり。読者が試すときも、この形でエージェントに書かせればよい。
ctx_execute("javascript", `
const l = require('fs').readFileSync('access.log', 'utf8').split('\n');
console.log('ERROR lines: ' + l.filter(x => x.includes(' ERROR ')).length);
`);
わかったことは4つある。
・intent つきの抜き出しは「絞り込み」ではなく「検索」だった。ステータス500の行は1,039行あるが、返ったのは上位5行で、1行は条件に合わない200の行だった。全件の集計が要るなら、intent ではなく数えるスクリプトを書かせる
・ctx_stats は5回の呼び出しで「99.3%削減・約1.15ドル節約(Opus 換算)」と出した。ただし ctx_search 1回で672KB 節約という数え方を含む。削減率は context-mode 自身の計算で、ほかのツールと比べる数字ではない
・データの置き場所は、README の本文にある ~/.context-mode/content/ ではなく ~/.claude/context-mode/ の下だった(設定表の既定値の側と一致)。場所は CONTEXT_MODE_DIR で変えられる
・.claude/settings.json に Bash(sudo *) の deny を書くと、ctx_execute の sudo echo hi も、echo ok && sudo id のように連結した中の sudo も止まった。Claude Code の権限の書き方が、サンドボックスの中にも効く
context-mode の導入方法|Claude Code・Gemini CLI・Copilot CLI
Claude Code(プラグイン・hooks まで入る)
README が勧めるのはプラグインマーケットプレイス経由。hooks と /context-mode:ctx-stats などのスラッシュコマンドがまとめて入る。Claude Code v1.0.33 以降が必要。
/plugin marketplace add mksglu/context-mode
/plugin install context-mode@context-mode
/reload-plugins
/context-mode:ctx-doctor
この手順は試していない(未検証)。ctx-doctor の全項目に [x] が付けば導入できている、と README は書いている。
MCP だけで試す(hooks なし)
まず試すなら、MCP サーバーとしてだけ登録する方法がある。11個のツールは使えるが、エージェントを ctx_* に誘導する hooks は入らない。一時的なホームディレクトリで実行し、claude mcp list で √ Connected と出ることを確かめた(Claude Code 2.1.299)。
claude mcp add context-mode -- npx -y context-mode
claude mcp list
Gemini CLI・Copilot CLI ほか
ほかのツールは npm install -g context-mode で入れてから、ツールごとの設定ファイルに MCP サーバーと hooks を書く。GitHub Copilot CLI はプラグインの形で入る(未検証)。
npm install -g context-mode
copilot plugin install mksglu/context-mode:configs/copilot-cli
Node.js は 22.5 以降が要る。SQLite に node:sqlite を使うため、Node 22 では起動のたびに「experimental」の警告が出るが、動作には影響しなかった。Claude Code と Codex を行き来する人は Codex Plugin CC|Claude CodeからOpenAI Codexを呼び出すプラグイン完全ガイド、Copilot CLI から入る人は GitHub Copilot CLI入門 - コマンドラインでAI補助を使い始める完全ガイド で先に CLI 自体を用意しておくとよい。
context-mode の対応プラットフォームと hooks の差
README の対応表には18のツールが並ぶ。どれでも MCP のツールは使えるが、hooks がどこまで使えるかで効き方が変わる。README の見積もりでは、hooks でツール呼び出しを振り替えられると約98%、指示ファイル(CLAUDE.md や AGENTS.md)で頼むだけだと約60%の削減にとどまる。振り替えられなかった curl 1回や Playwright のスナップショット1回で、56KB が会話に入るからだ。
| 区分 | ツール(README・2026-10-14 時点) | 要約の後の復元 |
|---|---|---|
| hooks がそろう | Claude Code・Gemini CLI・VS Code Copilot・JetBrains Copilot・OpenCode・KiloCode・OpenClaw・Pi・OMP | できる |
| hooks あり | GitHub Copilot CLI・Qwen Code・Kimi Code・Codex CLI・Antigravity CLI | Codex は部分的、agy は範囲限定。ほかは README に個別の記述なし |
| 開始の hook が無い | Cursor(sessionStart が検証で弾かれる)・Kiro(未配線) |
できない |
| MCP のみ | Antigravity IDE・Zed | できない(指示ファイル頼み) |
hooks があると、振り替えだけでなく危ないコマンドを実行前に止めることもできる。指示ファイルはモデルへのお願いなので、何も止められない。自分のツールがどの行にあるかで、期待してよい効果が決まる。
context-mode は何を代替できるのか|比較と導入時の注意点
| 観点 | context-mode | 生の出力そのまま | 手で要約して貼る | RAG(検索だけ) |
|---|---|---|---|---|
| ツール出力 | サブプロセスで処理し結果だけ | 全量が会話に入る | 人が都度まとめる | 対象外 |
| 要約の後 | SQLite から関連分を戻す | 文脈が抜ける | 前提を貼り直す | 対象外 |
| ドキュメント参照 | FTS5 の索引を手元で検索 | 都度ファイルを読む | 手で探して貼る | ベクタ DB などが要る |
| 導入 | プラグインか MCP 1行 | 不要 | 不要(運用が重い) | 基盤づくりが要る |
RAG が「外の知識をどう取り込むか」を受け持つのに対し、context-mode は「取り込んだ結果で会話を溢れさせない」側を受け持つ。競合ではなく補い合う関係だ。LangChain のようなエージェントの枠組みとも層が違い、MCP の層で横から効く。
効くのは、1回のツール呼び出しで数十KBが返る使い方だ。ブラウザ操作の MCP、大きなリポジトリの調査、多数の Issue や PR を横断する作業がこれに当たる。短い単発の作業が中心なら効果は小さい。
導入前に確かめたい点
- ・ライセンスは ELv2。個人・社内での利用は無償だが、マネージドサービスとして第三者に出す用途は制限される
- ・README は「何もマシンの外に出ない(テレメトリ無し)」と書く一方、
ctx_insightはホストされた Insight のダッシュボード(context-mode.com/insight)を開く。そこへ何が送られるかは未検証。社内で使うなら先に確かめたい - ・README の導入数(2026-10-14 の
stats.jsonで users 682.1k+・うち npm 633.6k+、マーケットプレイス 48.4k+)は、プロジェクトが CI で書き出している自己申告の値。users の定義は書かれていない - ・効果を引き出すには hooks が要る。MCP だけの導入では、エージェントが生の Bash や Read を使えば、そのまま会話に入る
まず claude mcp add で接続し、ctx_stats で自分の作業での削減量を見てから、プラグインで hooks まで入れるかを決めるのが手堅い。
参照ソース
- mksglu/context-mode GitHub リポジトリ(README・LICENSE・stats.json・BENCHMARK.md)
- context-mode(npm)
- Model Context Protocol 公式仕様
- Claude Code MCP設定ドキュメント(Anthropic公式)





