lcc — Local Context Compiler について
lccはコーディングエージェント向けのローカルコンテキスト圧縮ツールです。古いツール出力を退避し、残す内容はそのまま保持してハッシュ検証付きで復元できます。CLI、Claude Codeプラグイン、MCPサーバーとして提供されます。
主な機能
- 01セッションと文書のローカル圧縮
- 02ユーザーとアシスタントの発言をそのまま保持
- 03削除した出力の退避とハッシュ検証
- 04監査レポートと削除理由の生成
- 05トークン数と削減量のオフライン計測
活用シーン
- 01長いコーディングセッションのコンテキスト削減
- 02コンテキストから除かれたツール出力の復元
- 03圧縮時に残した内容と除いた内容の確認
MCP 対応
MCPサーバーとして、compact、compact_transcript、recall、inspect、prepare、explain、intakeの各ツールを公開し、MCPクライアントによる圧縮と退避内容の復元に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
7掲載時のツール一覧 · 1 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| text | string | はい | |
| provider | enum | いいえ | auto | jev | laya | mechanical |
| question | string | はい | |
| threshold | number | いいえ |
詳細
lcc — ローカルコンテキストコンパイラー
要約で内容を失わず、コーディングエージェントのコンテキストを圧縮します。
lcc はモデルに不要なものを削り、それ以外はバイト単位でそのまま保持し、処理記録を作成します。
/compact と lcc の比較
Claude Code の /compact は、モデルが作成した要約でセッションを置き換えます。要約では、エージェントが 2 ターン後に必要とする正確なエラー、パス、行が失われます。lcc は逆の動作をします。古いツール出力はコンテキストから取り除かれますが、recall ですぐに取り出せます。また、すべてのユーザーメッセージとアシスタントメッセージは、元のまま保持されます。
| 実際の Claude Code セッション 1 件(193 メッセージ、75 ツール呼び出し) | トークン | ユーザーとアシスタントのメッセージ | 削除されたツール出力 |
|---|---|---|---|
| 変更前 | 57,083 | 43 件、そのまま | — |
/compact | 1 つの要約 | 要約に書き換え | 消失 |
lcc(rules、stashed) | 28,807(−49.5%) | 43 / 43 件、バイト単位でそのまま | 33 件、それぞれ recall ですぐに取得可能 |
lcc measure-session で計測(PyPI 1.2.0、オフライン、正確な o200k_base トークン数。再実行日:2026-10-23)。stash の注記に行数とサイズが記載されるようになった main では、同じセッションの結果は 28,983(−49.2%)です。このセッションは特に良好な結果が得られたケースの 1 つです。私の長時間セッション 299 件すべて(それぞれ 100 メッセージ以上、合計 36.3 M トークン)では、削減率の中央値は 21.8%(中央半分は 15%~31%、最大 65%)で、メッセージの損失はありませんでした(python benchmarks/research/long_sessions.py、2026-10-23、main)。これはすべて私のセッションでの結果です。ご自身のセッションで実行して、結果を投稿してください。
実際のリクエスト 172 件を対象とした事前登録済みテスト(エビデンス)では、stashed コンテキストと recall を使って回答したエージェントは、ファイルの想起において完全なコンテキストを使った場合と同等の成績でした(+0.006、95% CI −0.023~+0.034)。トークン数は 36.6% 少なくなりました。削除された内容についての質問の 90% で recall が呼び出されました。同じセッションを対象にした /compact 形式の要約では、正確な値の 73% を正しく回答しました(Opus が作成した /compact の再実装)。完全かつ逐語的なコンテキストでは 98% でした。
インストール
pip install "local-context-compiler[tiktoken]" # the CLI is `lcc`
lcc fetch-tokenizer # once: exact token counts
lcc measure-session "$(ls -t ~/.claude/projects/*/*.jsonl | head -1)" # your latest session
fetch-tokenizer は tiktoken のエンコーディングファイルを一度ダウンロードします。オンライン接続が必要な lcc のコマンドはこれだけで、実行しない場合、カウントには「概算」と表示されます。最後の行は、最新の Claude Code セッションを読み込み、ルールモードをオフラインで数秒間実行して、カウントのみを出力します。何も変更されず、マシンの外にデータが送信されることもありません。
Claude Code プラグイン(/compact の要約を置き換えます)。関数フックは早期アクセスのため、Claude Code 2.1.274 以降と以下のフラグが必要です。
export CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1
claude plugin marketplace add lucasmartins-ai/lcc
claude plugin install lcc@lcc --config provider=rules --config rulesMode=stashed
エージェントが削除された出力を取得できるよう、mcp__plugin_lcc_lcc__recall を許可してください。処理に失敗した場合や、削除が不十分な場合、プラグインは組み込みの要約に切り替わり、その旨をトーストで通知します。詳細:Claude Code ガイド。
MCP(Claude Code、Cursor、Claude Desktop、およびすべての stdio クライアント):
{"mcpServers": {"lcc": {"command": "lcc", "args": ["mcp"]}}}
ツール:compact、compact_transcript、recall、inspect、prepare、explain、intake(MCP ガイド)。
CLI(セッションファイルまたは任意のドキュメントを対象):
lcc compact ~/.claude/projects/<project>/<session>.jsonl -q "finish the parser fix" \
--mode tool-calls --provider rules --rules-mode stashed -o compacted.json -r report.json
lcc recall <id> # a removed output, hash-checked
lcc compact notes.md -q "what is wrong with the booking flow?" \
--provider mechanical -o compacted.md -r report.json
lcc explain report.json --source notes.md # why each block was kept or dropped
数値をお寄せください
lcc measure-session ~/.claude/projects/<project>/<session>.jsonl --markdown
# Codex CLI rollouts are auto-detected from their session_meta record:
lcc measure-session /path/to/rollout.jsonl --markdown
# or a whole project directory: per-mode median and p90 reduction over its sessions
lcc measure-session ~/.claude/projects/<project>/ --markdown
セッションの1つを使い、すべてのモードをオフラインで実行して、件数のみを出力します。メッセージ数、ツール呼び出し数、処理前後のトークン数、保持されたメッセージ数、時間です。テキスト、パス、ツールの出力は含まれません。正確な件数を得るには、tiktoken エクストラをインストールし、トークナイザーを一度キャッシュしてください(lcc 自体がダウンロードすることはありません)。
python -c "import tiktoken; tiktoken.get_encoding('o200k_base')。それ以外の場合、レポートには approximate とその理由が記載されます。Discussions → Results に貼り付けてください。
セッションで課金対象となった入力の内訳を確認するには、--input-map を追加してください。キャッシュの読み書きや、ツールの結果、ツール呼び出しの入力、挿入された指示、固定のシステムプロンプトとツールスキーマが占める割合を確認できます(ファイル内の使用記録に基づく件数のみ)。
すでに lcc で圧縮していますか?lcc share-stats を使うと、ローカルのレポートから同じ形式の件数のみの概要を作成できます(SHARE_STATS.md)。または結果の課題フォームをご利用ください。
私以外の人から寄せられる数値が増えるほど、上記の主張は私個人のものではなくなり、より真実に近づきます。
lcc を選ぶ理由
- 原文のまま。 保持された範囲は、ソースとバイト単位で同一です。要約や書き換えは一切行いません。
- 復元可能。
stashedは削除された出力をローカルのコンテンツアドレス方式のストア(~/.cache/lcc/stash)に移動します。読み出し時にはrecallが再ハッシュします。 プレースホルダー[removed: 120 lines, 4.3 KB · lcc recall <id>]に示されるのは行数とサイズであり、トークン数ではないため、どのマシンでも同じ内容になります。 - 監査可能。 各パスで JSON レポートが書き出され、
lcc explainを使うと、削除された各項目の理由を確認できます。 - ローカル。 デフォルトの判定器は、通常の Python で CPU 上で動作します。API キーもネットワーク接続も不要です。
プロバイダー
| プロバイダー | 実行場所 | 使用される場面 | レポートの記載内容 |
|---|---|---|---|
specialist-v3 | ローカル、CPU | デフォルト(auto)。トランスクリプトブロックがある場合に使用:Claude Code フック、compact_transcript、--mode tool-calls | semantic_guarantee: none(判断ではなく、順位付けです) |
mechanical | ローカル、CPU | --provider mechanical。auto でのプレーンテキスト(TypeSafe キーを設定しても、LCC_AUTO_REMOTE=1 を設定しない限り変わりません) | semantic_guarantee: none |
rules(lossless、recoverable、stashed) | ローカル、モデルなし | トランスクリプトに対する provider: rules | lossless:証明可能な重複のみ削除。recoverable:再読み込み可能な出力も削除。stashed(推奨):削除された出力は recall でバイト単位の復元が可能な状態で保持 |
jev | リモート(TypeSafe API) | オプトイン:--provider jev / provider: jev。TYPESAFE_API_KEY が必要 | 意味的な判断、または明示的な機能低下 |
laya | ローカルモデル | 非推奨。明示的に指定した場合のみ実行 | 指定されたモデルとフォールバック状態 |
specialist-v3 の詳細と制限:SPECIALIST.md。Rules モード:
TOOL_CALLS.md。Jev は明示的に指定する任意の経路(--provider jev)です。目的とコンテキストのブロックを TypeSafe API に送信し、LCC_DISABLE_NETWORK=1 を設定すると無効になります。auto が独自に選択することはありません。キーを持っていることは、コンテキストを外部マシンに送信する同意を意味しないため、LCC_AUTO_REMOTE=1 を設定しない限り、auto でのプレーンテキストには mechanical が引き続き使われます。compact は relevance-compaction-1.2 レポートを書き出します。出力を信頼する前に provider_used と degraded を確認してください。
ベンチマーク
実セッション(ホールドアウト、INFERIDO)。 簡単に言うと、ランカーがセッションの一部を削除するとき、次にエージェントが実際に使った内容をどのくらいの頻度で残せるかを測定します。1.0なら常に残せることを意味します。トレーニングのカットオフ以降に開始したメンテナーのセッション36件から、193項目を使って一度だけ実施した最終テストです。候補トークンの0~60%を削除する範囲における保持AUC:
| ランカー | 再現率AUC | 全保持AUC |
|---|---|---|
| specialist-v3 | 0.899 | 0.434 |
| mechanical | 0.829 | 0.238 |
| recency | 0.818 | 0.306 |
| bm25 | 0.803 | 0.270 |
| random | 0.689 | 0.138 |
ラベルは、メンテナー1人のClaude Codeセッションにおける次のアクションの証拠であり、v3のトレーニング目標に有利に働きます。セッションは非公開で、集計値のみ公開しています (SPECIALIST.md)。
合成データ、再現可能(python benchmarks/run_judge_bench.py、約20秒、ネットワーク不要)。
手書きのエッジケース9件:置換、矛盾、設定変更、例外ルール、ポルトガル語と英語の混在、ツール出力内のプロンプトインジェクション、大きなgit差分、古い根本原因、再読み込み。
| 生のランキング | specialist-v3 | mechanical | bm25 | recency |
|---|---|---|---|---|
| 30 / 50 / 70%削減時に必須保持ブロックをすべて保持したケース数(9件中) | 8 / 7 / 7 | 9 / 9 / 9 | 9 / 9 / 7 | 8 / 6 / 3 |
| フルパス、デフォルト設定 | 必須保持ブロックの保持数 | 302ブロック | 1,138ブロック | ピークRSS |
|---|---|---|---|---|
specialist-v3、ツール呼び出しモード | 9/9 | 181 ms | 3.4 s | 71 MB |
rules 損失なし | 9/9 | 2 ms | 16 ms | 55 MB |
これらのケースは語彙的に簡単なため、語彙ベースのベースラインが良好な結果を出しています。v3はポルトガル語のケースを取りこぼします。時間は、マシンに高い負荷がかかったmacOS arm64での測定値です。手法、すべての実験条件、制限事項: BENCHMARKS.md。実セッションでのルールモード: REAL_SESSION_BENCHMARKS.md。
削減率は、コンテキストに含まれるノイズの量によって異なります。25%未満の改善は、レポートで実施する価値なしと表示され、Claude Codeプラグインは組み込みの要約をそのまま使用します。
対応していないこと
- モデルが正しく回答するかどうかは確認しません。構造上の
PASSは、回答品質の評価ではありません。 - RAG、埋め込み、ベクトルストアには対応していません。
- 保護ルールと制限付き復元によって証拠の喪失を減らせますが、完全には防げません。安全性モデルを参照してください。
specialist-v3はClaude Codeのトランスクリプトでトレーニングされています。他のエージェントや通常のドキュメントは分布外データです。オプトインでJevを有効にしない限り、通常のテキストにはmechanicalが使用されます。
ドキュメント
| トピック | リンク |
|---|---|
| CLIの5分間ツアー | QUICKSTART.md |
| Claude Codeプラグイン | CLAUDE_CODE.md |
| MCPサーバー | MCP.md |
| ツール呼び出しの圧縮とルールモード | TOOL_CALLS.md |
| Aiderのチャット履歴を入力として使用 | AIDER.md |
| ローカルランカー | SPECIALIST.md |
| ベンチマーク | BENCHMARKS.md、REAL_SESSION_BENCHMARKS.md、benchmarks/ |
Python API(lcc.msi.compile) | msi-api.md |
| アーキテクチャと意思決定 | architecture.md、ADR 0010、ADRインデックス |
| オプトインおよび非推奨のプロバイダー | JEV.md、LAYA.md |
| 研究アーカイブ | paper.md、results-master.md、TRANSCRIPT_AB.md |
| プライバシー | PRIVACY_POLICY.md |
開発
Python 3.11以降。
python -m pip install -e '.[dev,tiktoken]'
pytest -q && ruff check . && mypy
npm test # Node API and hook tests
python benchmarks/run_judge_bench.py --check --out /tmp/judge-bench
PyPIにある lcc という名前のパッケージは無関係です。このプロジェクトのパッケージ名は local-context-compiler です。
コントリビューション:CONTRIBUTING.md。セキュリティ:SECURITY.md。
変更履歴:CHANGELOG.md。
ライセンス
MITです。オプションのLaya統合には、NOTICEに記載されたApache-2.0の帰属表示が含まれます。LookADevがメンテナンスしています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。