
2026/04/25 2:53
CC-Canary:Claude Code の性能低下を示す初期兆候を検出するための手法
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
cc-canary は、機密データを漏らさずにローカルな Claude Code セッションでのドリフト検出およびコーディング行動分析を行うプライバシー重視のオフライン AI ツールです。標準ライブラリのみを使用して macOS、Linux、WSL 上で動作し、
~/.claude/projects/ の JSONL セッションログを処理します。ネットワークコールゼロ、テレメトリゼロ、バックグラウンドデーモンなしを実現しています。ユーザーのプロンプトは 180 文字以内に截断され、機密パスは削除(redacted)されます。現在はプレアルファ(0.x)段階で、バンドルされたスクリプトは約 2.5 秒で実行され、Claude がナラティブのスロットを埋めるために追加の 10〜20 秒がかかります。
セッション内で
/cc-canary [window] または /cc-canary-html [window] を呼び出すことで使用でき(ここで [window] はデフォルトで 60 日であり、--window フラグを通じて 7〜180 日の範囲に変化可能です)、共有可能な Markdown 形式の法医学レポート(GitHub に貼り付け即用)を生成するか、ダークテーマの HTML ダッシュボードを自動開きます。追跡するメトリクスには、読み込み/書き込み比率、変化に対する書き込みの割合、推論ループ、挫折率、思考-redaction レート、平均思考長、API ターン数、およびユーザーターンあたりのトークン使用量が含まれます。分析には、反転日(0.75σ の床値あり)のための argmax 検出を含む複合的健康度スコア、週のトレンドバー、クロスバージョン比較、そして一日中の思考深さ付録が含まれます。
このツールは
--include-agents および --min-user-words のような追加フラグをサポートし、PATH 上に Python ≥3.8 を必要とし、github.com/delta-hq/cc-canary/issues を通じて issue に貢献します。その核心機能は、大規模言語モデルとの対話を透明性高くローカルで管理することであり、外部サービスに依存せずにユーザーがデジタルワークフローに対して厳格な制御を維持するのを助けます。本文
Claude Code のドリフト検出機能:2 つのインストール可能なエージェント・スキルとして提供されています。
このツールは、
~/.claude/projects/ 内に既に記録されている JSONL セッションログを読み込み、モデルがあなたの作業に対してドリフト(行動や特性の変化)しているかを検出し、共有可能なフォレンジックレポートを生成します。ネットワークへの接続不要、アカウント登録不要、テレメトリ送信なし、バックグラウンド・デーモンの起動もありません。すべてディスク上の既存データを対象に動作します。
現状:0.x / プリアльфа版
出力フォーマットや指標セットは今後の変更可能性があります。
提供されるスキル一覧
| スキル | 呼び出し方法 | 出力内容 |
|---|---|---|
| cc-canary | | フォレンジックなマークダウン形式のレポート(例:) → GitHub のイシューやギストにそのまま貼り付け可能 |
| cc-canary-html | | 同じデータをダークテーマで表示した HTML ダッシュボードとして出力(例:) ブラウザで自動的に開きます |
-
[window] のデフォルト値は 60 日間です。
受入可能な範囲:7d / 14d / 30d / 60d / 90d / 180d。 -
それぞれのレポートには以下の項目が含まれます:
- Verdict(判断): HOLDING / SUSPECTED REGRESSION(疑わしい劣化)/ CONFIRMED REGRESSION(確認された劣化)/ INCONCLUSIVE(不確実)
- ヘッダー指標テーブル(事前・事後比較、🟢/🟡/🔴のバンド判定付き)
- ウィークリー・トレンドグラフ:コスト(米ドル、ccusage によるセント単位の検証済み)、読み込み対編集比率(read:edit ratio)、推論ループ回数、ターンあたりのトークン数
- クロスバージョン比較:同一ユーザー、異なるモデルバージョンでの比較(タスクミックスを制御しながら)
- 自動検出された転換日:複合健康スコアの変化点
- 発見事項の分類:モデル側 / ユーザー側 / アンビギュラス(不明確な要因)
- 附属書:一日別の思考深さ、単語頻度変化、三期間における思考表示度の移行、ターンごとの行動率など
インストール方法
npx skills add delta-hq/cc-canary
個別にインストールする場合:
npx skills add delta-hq/cc-canary --skill cc-canary # または npx skills add delta-hq/cc-canary --skill cc-canary-html
その後、任意の Claude Code セッションから以下のように呼び出します:
/cc-canary 60d /cc-canary-html 30d
要件:
PATH に
python3 ≥ 3.8 が必要です。cc-canary-html の自動ブラウザ開き機能は、macOS / Linux / WSL に対応しています(失敗した場合やサポート環境でない場合はパスのみを出力します)。
動作原理
- スキャン:
bundlingされた純粋な標準ライブラリ(pip や NodeJS は使用せず)による Python スクリプトが
を走査し、指定したウィンドウ幅でフィルタリング、デフォルトではサブエージェントセッションを除外します。~/.claude/projects/**/*.jsonl - 重複排除(Dedupe):
およびmessage.id
に対してアシスタントメッセージの重複を除去します(ccusage が採用している手法と同じ)。Claude Code はセッション再開や分岐時に同じメッセージを複数の JSONL ファイルに書き込むためです。requestId - 集計:
セッション単位の指標:ツールの使用構成比、読み込み対編集比率、推論ループフレーズ、自己告白するエラー数、早期終了回数、中断回数、トークン使用量、コスト(現在の Claude 4.x レート)、一日別の思考深さ。 - 転換日の検出:
各日の複合健康スコアを計算し、候補日の中で
が最大になる日を argmax で選択(閾値は σ の 0.75 倍)。明確な変化点が見つかっていない場合は中央値 Timestamp での分割にフォールバックします。|before − after| - レポートのプレレンダリング:
スクリプトがすべてのテーブルや棒グラフを埋め込んだマークダウン/HTML スケレトンを書き込みます。Claude が埋める余地としては約 20 の短いナラティブスロット(
マークで示す)のみを残します(判断の一行、要約、各発見事項への推論理由、根本原因、附属書の段落など)。<!-- C: ... --> - 埋め込みと保存:
Claude はこのスケレトンを読み取り、ナラティブ部分を書き込み、最終ファイルを保存します。
所要時間: スクリプト実行で約 2.5 秒、Claude がナラティブを埋めるのに 10–20 秒。
各スキルが追跡する指標(ヘッダーテーブルに含まれるもの)
(適用される場合は健全/移行/懸念のバンド表示付き)
- 読み込み対編集比率(Read:Edit ratio): ファイルを一度読むごとに何回編集するか。モデルが変異を行う前にどれだけ徹底的に調査を行ったかの指標。
- 書き込みの割合(Write share of mutations): 総変更数における書き込みの割合
。割合が高いほど、モデルはファイル全体を書き換える傾向があり、外科的な編集を行わないことを示唆します。[Write / (Edit + Write)] - 推論ループ回数 / 1K ツール呼び出し: "let me try again", "oh wait", "actually," などのフレーズの頻度。
- 焦燥率(Frustration rate): ユーザープロンプト内の焦燥表現の出現率。
- 思考遮断率(Thinking redaction rate): 表示されていない(遮断された)思考ブロックと表示されている思考ブロックの比率。
- 平均思考長さ(Mean thinking length): 推論深さの指標(可視化されたコンテンツ長との相関係数 r=0.97、暗号署名長の計測による)。
- 1 ユーザーターンあたりの API ターン数: ユーザーメッセージに対するモデルからの API 呼び出し回数。
- 1 ユーザーターンあたりのトークン数: ユーザーメッセージごとの総トークン量(入力+出力+キャッシュ)。
また、附属書では以下の追加シグナルも提供します:
早期終了、自己告白するエラー、ショートカット語彙、ユーザー中断、一日別の思考深さ、単語頻度変化、三期間における思考表示度の移行、ターンごとの行動率など。
スキルのフラグとフィルター設定
Bash コマンド(
python3 scripts/compute_stats.py …)を通じて渡すことでカスタム実行が可能です:
| 引数 | デフォルト値 | 目的 |
|---|---|---|
| 60d | ウィンドウサイズ(7d / 14d / 30d / 60d / 90d / 180d) |
| off | サブエージェントセッションを含むか否か(デフォルト:除外 — ユーザープロンプトが自然に発生しないため) |
| 10 | この単語数未満のユーザープロンプトを持つセッションを除外する(トリビアルなセッションをフィルタリング) |
| — | マークダウンスケレオンを PATH に書き出す |
| — | HTML ダッシュボードを PATH に書き出す |
プライバシーポリシー
- 完全にローカル動作: ネットワークへの呼び出しは一切ありません。
- スクリプトは
のみを読み取ります。それ以外のファイルにはアクセスしません。~/.claude/projects/*.jsonl - ナラティブのプロース(文章)は、スキル実行時(あなたの Claude Code セッション内で)Claude によって書き込まれます。これにはディスク上の明示的に指定されたファイルへのみのアクセス権限があります。
- ユーザープロンプトの内容は、スケレオンに含める前に最大 180 キャラクタへ短縮され、
パス、メールアドレス、ヘキサンコードのようなトークンはマスキング(遮断)されます。/Users/… - 出力ファイル(
)はスキルが実行されたディレクトリにのみ配置され、どこにもアップロードされることはありません。./cc-canary-<日付>.{md,html}
コントリビューション
イシュー、指標に関する提言、そしてプルリクエストを大歓迎です:
github.com/delta-hq/cc-canary/issues
※ 0.x 期間中は出力フォーマットや指標セットの変更可能性があります。
名前の由来
炭鉱では、メス(岩ガスの危険を察知する鳥)を派遣して早期の危険兆候を検出させる慣習がありました。cc-canary も同様に、あなたの Claude Code セッションにおけるドリフトの早期兆候を検出します。
ライセンス
MIT License