cc-canary-html について
cc-canary-html は、cc-canary のセッション分析を HTML レポートにまとめる Claude スキルです。スクリプトの実行、説明文の記入、ブラウザーでの表示を案内し、回帰シグナルの判断基準も示します。
主な機能
- 01HTML レポート生成
- 02分析期間の設定
- 03回帰シグナルの分類
- 04ブラウザーでレポート表示
活用シーン
- 01最近のセッション傾向の確認
- 02モデルバージョンの比較
- 03回帰の可能性の評価
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ delta-hq/ cc-canary --skill cc-canary-htmlインストール後、Claude Code で/cc-canary-htmlを入力して読み込まれたか確認します。
同梱ファイルscripts/compute_stats.py
詳細
cc-canary-html — HTML で表示する nerf 検出レポート
/cc-canary と同じ分析を HTML で表示します。
同梱スクリプト scripts/compute_stats.py が約 2.5 秒で処理します。JSONL をスキャンし、変曲点と遷移日の検出、前後の集計、バージョン間比較、時間帯別分析、単語頻度、3 期間の思考深度、可視性の遷移、ターンごとの割合、異常を算出します。その後、すべての表を埋め、ASCII 棒グラフを等幅フォントの <pre> ブロックに保持した完全な HTML スケルトンを生成します。説明文を挿入する箇所には `` と記されています。
デフォルトの期間は 60d です。7d / 14d / 30d / 60d / 90d / 180d を指定できます。
4 ステップの作業
1. スクリプトを実行する
Bash(python3 <SKILL_DIR>/scripts/compute_stats.py --window {window} --render-html /tmp/cc-canary-skeleton-{window}.html > /dev/null 2>&1)
<SKILL_DIR>: .claude/skills/cc-canary-html/ → 見つからない場合は ~/.claude/skills/cc-canary-html/ を使用します。
フラグ:--window {Nd}(必須);--include-agents;--min-user-words N。
スクリプトが失敗した場合は、エラーを報告して --include-agents を付けて 1 回再試行します。それでも失敗した場合は終了します。手作業での計算に切り替えてはいけません。
2. HTML スケルトンを読む
Read /tmp/cc-canary-skeleton-{window}.html
3. すべての `` プレースホルダーを埋めて保存する
各プレースホルダーコメントを、HTML セーフな説明文に置き換えます。記述する内容に含まれる <、>、& はエスケープしてください。すべての表、<pre> の棒グラフ、既存の HTML は変更せずに保持します。次の名前で保存します。
Write ./cc-canary-{YYYY-MM-DD}.html
4. ブラウザーで開く
Bash(uname) でプラットフォームを判別します。
Darwin→Bash(open ./cc-canary-{YYYY-MM-DD}.html)Linux→Bash(xdg-open ./cc-canary-{YYYY-MM-DD}.html)- その他 →
Bash(start ./cc-canary-{YYYY-MM-DD}.html)
開くコマンドが失敗した場合は、エラーにせず、絶対パスを出力します。
メッセージの末尾は次の形式にします:Wrote /Users/.../cc-canary-{date}.html — opened in browser.(開けなかった場合は … open manually.)。
説明文のプレースホルダー
/cc-canary と同じ項目です。
verdict-line— HOLDING / SUSPECTED REGRESSION / CONFIRMED REGRESSION / INCONCLUSIVE +簡潔な根拠summary— 1~2 文で簡潔に、何がどの程度変化したかtimeline— 1~2 段落xv-para— バージョン間比較についての 1 段落(§2 がある場合)finding-N-class× 最大 5 — インライン分類:model-side | user-side | ambiguousfinding-N-reason× 最大 5 — 根拠を先に示し、最大 2~3 文root-cause— 3~5 段落what-would-help— 具体的な項目を 2~4 個appendix-a1…a4, b, c, d, e, f, g, h— それぞれ 1 段落meta-note— 一人称で正直に、2~5 文
判定の基準
- HOLDING:model-side のシグナルが 1 件以下
- SUSPECTED REGRESSION:model-side のシグナルが 2~3 件
- CONFIRMED REGRESSION:model-side のシグナルが 3 件以上、低下を示すバージョン間比較が空でない、
session_count ≥ 15、モデルが 2 つ以上、inflection.gap_sigma ≥ 1.0 - INCONCLUSIVE:
session_count < 15、または交絡要因が重なるinflection.method == "fallback_split_half"
次の場合は SUSPECTED を上限とします:モデルが 1 つのみ;セッションが 15 件未満;期間の途中からプロジェクトが始まった単一プロジェクト;変曲点がユーザー側の明らかなイベントと一致する場合。
厳守事項
- 絶対に
~/.claude/projects/**/*.jsonlを読み取ったり、grep や glob で検索したりしないでください。セッションファイルに対してjq/awk/wcを実行してはいけません。これらの処理はすべてスクリプトが行います。 - 絶対に既存の HTML、表、
<pre>ブロックを変更してはいけません。これらは実データから生成されています。 - 挿入する説明文はすべて HTML エスケープ します(
<、>、&→ エンティティ)。 - すべての finding に分類ラベルを付けます。
- バージョン間比較が空、または
session_count < 15の場合は、断定を避けます。 - チェックリストをすべて満たさずに CONFIRMED REGRESSION と判定してはいけません。
- スケルトンをそのまま保存してはいけません。先にすべての `` を置き換えます。
失敗時の対応
- スクリプトのインポートエラー →
python3 -Vで 3.8 以上であることを確認し、--include-agentsを付けて 1 回再試行します。それでも失敗した場合は終了します。 - スケルトンが 5KB 未満 → 期間内にセッションがない可能性があります。
inflection.method == fallback_split_half→ その旨を記載し、判定の上限を SUSPECTED とします。- バージョン間の Δ が
None→ model-A の値が 0 の場合にゼロ除算が発生しています。交絡要因として記載します。 - ブラウザーで開くコマンドが失敗 → エラーにせず、パスを出力して終了します。