Compresr Context GatewayはAIエージェントのコンテキスト枯渇をどう解決するか
Claude CodeやCursorのようなAIコーディングエージェントを長時間使っていると、コンテキストウィンドウの上限に達して会話がリセットされる。とくにファイル読み込みやツール実行の結果が大きいと、あっという間にトークンを食い潰す。
YC出身のCompresrが公開しているOSSツール「Context Gateway」は、この問題をプロキシ層で解決しようというアプローチを取っている。Goで書かれており、Apache 2.0ライセンス。2026年2月の初回リリースから約6週間で451スター、35フォークを集めている。
基本アーキテクチャ
Context Gatewayはエージェントとプロバイダの間に挟まるリバースプロキシとして動作する。
graph LR
A[AIエージェント<br/>Claude Code等] --> B[Context Gateway<br/>localhost:18081]
B --> C[LLM API<br/>Anthropic, OpenAI等]
B --> D[Compresr API<br/>圧縮サービス]
エージェント側からは通常のAPIエンドポイントに見える。Gatewayが裏でリクエスト・レスポンスを傍受し、コンテキスト最適化を行う。対応プロバイダはAnthropic、OpenAI、Google Gemini、AWS Bedrock、Ollama、OpenRouter、LiteLLMなど幅広い。
3つの圧縮パイプライン
Context Gatewayの中核は3つのパイプライン(pipes)で構成される。
1. Preemptive Summarization(先読み要約)
コンテキスト使用率が閾値(デフォルト85%)を超える前に、バックグラウンドで会話履歴の要約を事前生成する仕組み。
graph TD
A[会話が進行] --> B{コンテキスト使用率<br/>を監視}
B -->|閾値未満| A
B -->|閾値に接近| C[バックグラウンドで<br/>要約を生成]
C --> D[要約をキャッシュ]
D --> E{コンテキスト上限<br/>に到達}
E -->|到達| F[キャッシュ済み要約で<br/>即座にコンパクション]
E -->|余裕あり| A
通常のコンテキストコンパクションは上限に達してから要約を生成するため待ち時間が発生する。Preemptive方式は事前に要約を済ませているので、切り替えが即座に完了する。
要約戦略は2種類から選べる。
| 戦略 | 内容 |
|---|---|
| external_provider | 指定したLLM(claude-haiku-4-5等)に要約させる |
| compresr | Compresr独自の圧縮API(hcc_espresso_v1モデル)を使用 |
セッション管理も行っており、セッションごとにTTL(デフォルト3時間)付きで要約をキャッシュする。
2. Tool Output Compression(ツール出力圧縮)
ReadツールやBashツールの実行結果はしばしば数千トークンに及ぶ。Tool Output Compressionはこれらの出力をLLMに渡す前に圧縮する。
設定例。
pipes:
tool_output:
enabled: true
strategy: "compresr"
min_tokens: 512 # これ以下はスキップ
max_tokens: 128000
target_compression_ratio: 0.5 # 約50%のトークン削減を目標
refusal_threshold: 0.05 # 5%未満の削減なら圧縮しない
min_tokensでノイズを避け、refusal_thresholdで圧縮の意味がないケースをスキップする設計になっている。圧縮前のオリジナルデータはキャッシュされ、エージェントがexpand_contextツールを呼ぶと元の内容に展開できる。
skip_tools機能でプロバイダごとに圧縮対象外のツールカテゴリを指定できるのも実用的。
3. Tool Discovery(ツールディスカバリ)
エージェントが使えるツール一覧自体がコンテキストを消費する問題に対処する。ツールディスカバリは、現在の会話内容に基づいて関連性の低いツール定義をフィルタリングする。
always_keep設定で重要なツールがフィルタリングされないことを保証できる。
Phantom Tools
v0.5.2で追加された機能。エージェントのツールリストを変更せずに、仮想的なツールを注入する。たとえばexpand_contextツールはGatewayが自動的に注入するPhantom Toolで、エージェントが圧縮されたツール出力の詳細を知りたいときに呼び出せる。
graph TD
A[エージェントがツール一覧を受信] --> B[Gatewayが<br/>expand_contextを注入]
B --> C[エージェントが<br/>expand_contextを呼び出し]
C --> D[Gatewayがキャッシュから<br/>オリジナルデータを返却]
エージェント自身には何も変更を加えずに機能を追加できるのがプロキシ型の利点。
セットアップ
インストールはワンライナーで完了する。
curl -fsSL https://compresr.ai/api/install | sh
起動するとTUIウィザードが立ち上がり、対話的に設定できる。
対応エージェント。
| 設定値 | エージェント |
|---|---|
| claude_code | Claude Code |
| cursor | Cursor IDE |
| openclaw | オープンソースのClaude Code代替 |
| custom | 任意のエージェント |
設定はYAMLで管理され、~/.config/context-gateway/configs/に保存される。ホットリロードに対応しているので、設定変更時にGatewayの再起動は不要。
ダッシュボード
v0.4.3で追加されたReactベースのダッシュボードで、圧縮の効果をリアルタイムに確認できる。
- セッション統計(トークン削減量、コスト節約額)
- メッセージ分類(ユーザー/アシスタント/ツール)
- 圧縮ログの可視化
http://localhost:18081/dashboard/でアクセスできる。
コスト管理
cost_controlセクションでセッション単位・グローバル単位の予算上限を設定できる。
cost_control:
enabled: true
session_cap: 5.0 # 1セッションあたり$5上限
global_cap: 100.0 # 月額$100上限
セキュリティ面
SSRFの対策として、許可されたLLMプロバイダのドメインのみにリクエストを転送するホワイトリスト方式を採用している。ローカルホスト(localhost/127.0.0.1)はデフォルトで許可リストから除外されており、GATEWAY_ALLOW_LOCAL=trueで明示的にオプトインする必要がある。
XSS対策やストリームバッファのサイズ制限(MaxStreamBufferSize)、リクエストボディのサイズ上限なども設定されている。
ただし、プロキシという性質上、APIキーがGateway経由で流れる点は理解しておく必要がある。.envで管理し、設定ファイルにはリテラル値ではなく環境変数参照(${ANTHROPIC_API_KEY})を使うよう警告を出す仕組みになっている。
ログとテレメトリ
各パイプラインの動作はJSONL形式で記録される。
| ログファイル | 内容 |
|---|---|
history_compaction.jsonl | 先読み要約の実行履歴 |
tool_output_compression.jsonl | ツール出力圧縮のログ |
tool_discovery.jsonl | ツールフィルタリングの結果 |
telemetry.jsonl | リクエスト全体のテレメトリ |
session_stats.json | セッション統計サマリ |
ATIF(Agent Trajectory Interchange Format)形式にも対応しており、SWE-benchなどの評価にも使える。
コンテキストの節約をエージェント側ではなくプロキシ層でやるという発想が面白い。まだv0.5だが、Claude Codeと組み合わせて試してみたくなるツールではある。