OpenCode 動的コンテキスト剪定プラグイン

Tool

概要

OpenCode Dynamic Context Pruning プラグインは、会話型開発環境で発生する不要なツール出力(古くなったファイルの読み取り結果、既に解決されたエラー、試行的な検索結果など)を検出して会話履歴から除去または縮約することで、トークン消費を自動的に削減することを目的としたツールです。セッションがアイドルになったタイミングで会話履歴を分析し、「現在の文脈に寄与しない」と判断した出力を取り除くことで、以後のモデル呼び出しで送信されるコンテキストを軽くします。TypeScript で実装され、npm パッケージ @tarquinen/opencode-dcp として提供されています。設定可能なしきい値と安全なデフォルトにより、重要な情報を誤って削除しないよう配慮されています。

GitHub

リポジトリの統計情報

  • スター数: 2
  • フォーク数: 0
  • ウォッチャー数: 2
  • コミット数: 12
  • ファイル数: 9
  • メインの言語: TypeScript

主な特徴

  • トークン使用量の自動削減:不要なツール出力を検出して履歴を最適化
  • アイドル検出による処理トリガー:作業が止まったタイミングで解析を実行
  • 文脈ベースの判定:上書きや解決済みなど“関連性の低下”を判定するヒューリスティクス
  • TypeScript / npm 配布:OpenCode にプラグインとして組み込みやすい

技術的なポイント

README の記述から読み取れる本プラグインの技術的焦点は、「会話履歴の意味的・状態的解析」と「安全な削除・縮約戦略」の二点に集約されます。まず会話ログからツール出力を抽出し、それぞれについて「現在のワークスペース状態や後続の対話によって上書き・無効化されていないか」を評価します。評価にはタイムスタンプやツールの種類(ファイル読み取り、エラー出力、探索的検索など)、及び後続の操作との整合性が利用される想定です。例えば、あるファイルの古い読み取り結果がその後の別の読み取りや編集で上書きされていれば、その古い出力は削除候補になります。エラーについては、同様のエラーが後に解消されている場合に履歴から取り除けます。

実装面では、OpenCode のプラグイン API にフック(例:セッションのアイドルイベント、ツール出力イベント、メッセージ送信前のフィルタ)する形で動作することが想定されます。削除は単純にメッセージを履歴から消すのではなく、必要に応じて要約して置き換える(縮約する)戦略を採ることで、履歴の意味的連続性を保ちつつトークンを節約できます。設定可能なしきい値(何秒のアイドルで解析を行うか、関連性スコアの閾値、除外対象のツールタイプなど)を用意して、安全性と利便性のバランスを取る設計が想定されます。

TypeScript 製であることから、型定義による入力検証や非同期処理(API 呼び出しやファイル状態チェック)への対応が容易です。npm パッケージとして公開されているため、OpenCode の設定に組み込むだけで導入できる点も利点です。なお、誤削除を避けるためのログ出力や「取り消し」機能、ユーザーが明示的に保護するメッセージを指定するオプションがあると実運用で安心して使えます。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .gitignore: file
  • .npmignore: file
  • LICENSE: file
  • README.md: file
  • index.ts: file

…他 4 ファイル

まとめ

OpenCode セッションのトークン効率を自動で改善する実用的なプラグイン。導入も容易で運用メリットが大きい。

リポジトリ情報:

README の抜粋:

Dynamic Context Pruning Plugin

npm version

Automatically reduces token usage in OpenCode by removing obsolete tool outputs from conversation history.

What It Does

When your OpenCode session becomes idle, this plugin analyzes your conversation and identifies tool outputs that are no longer relevant (superseded file reads, old errors that were fixed, exploratory searches, …)