Claude Code の並列エージェント(agent teams・teammate)の後始末と無応答時の打ち切りルール。`name` を付けて Agent を起動するとき、TeamCreate でチームを組むとき、teammate から `idle_notification` が届いたとき、評価ループ等で次のイテレーションのエージェントを起動する前、エージェントの返信が届かないときに参照する。`name` を付けない通常のサブエージェント起動だけなら対象外。
session-insights
Claude Code の過去セッション(transcript JSONL)・設定・運用パターンを cclens と同梱スクリプトで収集し、指定された分析観点に沿って傾向分析と改善案を出す。/session-insights で明示起動されたときのみ使用する。キーワードマッチによる自動起動はしない。
起動時に分析観点の指定が必須。
含まれるファイル(7)
- SKILL.md16.0 KB
- .gitignore4.5 KB
- pyproject.toml619 B
- references/data-model.md13.8 KB
- scripts/collect_sessions.py72.3 KB
- scripts/test_collect_sessions.py48.9 KB
- uv.lock4.5 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
session-insights — Claude Code 利用実態の分析と改善提案
このスキルの目的
$CLAUDE_CONFIG_DIR(未設定なら ~/.claude)に蓄積されたセッション transcript・設定を機械的に読み出し、ユーザーが指定した分析観点に沿って利用傾向を分析し、設定・スキル・プロンプトの運用改善案を出す。
分析対象は本人の全会話履歴という機微なデータであり、量も巨大(数百セッション・100MB超)なので、次の2つを設計上の前提にしている:
- 収集は決定論。
- 読み出しは cclens と同梱スクリプト経由で行い、AI が生の JSONL を Read/Grep で無作為に漁ることはしない。
- 巨大ファイルの直読みはコンテキストを浪費するだけでなく、走査範囲が毎回変わり分析の再現性を失うため。
- 観点駆動。
- 「なんとなく全部見る」は禁止。
- 観点が先、収集は観点に必要なものだけ。
収集の三系統(どれを使うか先に決める)
道具は 3 つあり、それぞれにしか無い情報がある。同じ指標を二重に集計せず、観点に応じて使い分ける。
| 担当 | ここにしか無いもの |
|---|---|
| cclens | ツール/スキル使用頻度・skill 単位のトークン消費とコンテキスト増加・常時コスト(overhead)・ツールエラーのカテゴリ分類・設定の棚卸しと未使用検出・プロンプト種別の分布・繰り返し失敗・再編集ループ |
| ccusage | 金額(USD)。モデル別価格表と重複レコード排除を持つ。cclens はトークン量は出すが USD 換算を持たない |
| 同梱スクリプト | プロンプト本文・生 transcript の時系列・ツールの入出力本文(実行コマンド・stdout/stderr・終了状態)・全セッション横断の本文検索・compaction の発生記録・分析対象範囲の明示 |
境界の理由:
- cclens は SQLite ストアへ抽出済みで、カテゴリ分類・静的トークンコスト・任意 SQL を備える。横断集計はここが最も速く正確
- cclens には価格表が無い(ソースにコスト計算が存在しない)。金額を問われたら必ず ccusage 系(
costサブコマンド)へ回す - cclens はプロンプトを
instruct/steer/correct/questionの 4 ラベルへ集約して本文を保持しない。「どう書いたか」を読む観点はスクリプト側でしか扱えない - cclens は compaction を差分計算時に補正するノイズとしてしか扱わない(発生回数・トリガーを残さない)
- cclens の
eventsは本文を持たない(bash_cmdはコマンドの先頭語のみ、tool_errorは 200 字の抜粋のみ)。本文での横断検索はスクリプトのsearchが担う。全件走査でも 400 セッション弱で 1 秒未満なので索引は持たない。cclens はeventsのsession_id/source_pathで候補セッションを絞る前段としてだけ使える
起動チェック(必須)
起動引数に分析観点が含まれていなければ、収集を始めずに停止して確認する。 観点とは「何を知りたいか/何を改善したいか」が判別できる指示のこと。例:
- 「コンテキストを浪費している操作パターンを見つけたい」
- 「スキルが想定通り使われているか、死にスキルがないか」
- 「意図が伝わらず手戻りしたプロンプトの傾向を知りたい」
- 「compact が多発するセッションの共通点は」
/session-insights 単体や「分析して」だけの起動は観点不足。その場合は上の例を提示し、観点・期間・対象プロジェクトを確認してから始める。
データ収集の鉄則
共通: 生のセッション JSONL・history.jsonl を Read/Grep/head で直接開かない。必要な読み出し方が無ければ、それはスクリプトに足すべき機能(ユーザーに提案する)。
cclens(横断集計)
DB="${XDG_CACHE_HOME:-$HOME/.cache}/cclens/cclens.db"
cclens <subcommand> --db "$DB" [--scope <scope>] [--frozen]
- バイナリ解決:
command -v cclensで見つからなければnix run github:lambdalisue/cclens -- <subcommand …>を使う。どちらも無ければ、そのぶんの観点は cclens 不在として報告し、スクリプト側で取れる範囲に切り替える(分析全体を止めない) - ストア: プロジェクト直下に
./cclens.dbがあればそれを使い--dbを省く。無ければ上記の per-user ストアを使う(カレントプロジェクトへ db を落とさない) - 各レポートは実行前に自動で
analyze(増分・高速)を走らせる。同一分析中に何度も引くときは--frozenで固定してよい(sqlは--frozenを受け付けず、常に解析済みストアをそのまま読む) - 出力は
table(既定)/markdown。doctorのみjsonも持つ。sqlは JSON を持たないので、構造化して受けたいときはdoctor --format jsonか、素直に表を読む
--scope で分析軸を切る(doctor / inventory / waste / failures が対応):
| scope | 意味 |
|---|---|
global | ~/.claude の設定レイヤ。failures ではプロジェクトを跨いで繰り返す失敗=習慣・グローバル設定の問題 |
project | 各プロジェクト自身の設定。failures では各プロジェクト固有の失敗 |
project:<slug> | 特定プロジェクトに限定(slug は -home-user-src-… 形式) |
「自分の癖なのか、特定プロジェクトの事情なのか」を切り分けるための軸なので、改善提案の宛先(~/.claude かプロジェクトの .claude/ か)を決めるときは必ず通す。
同梱スクリプト(本文・時系列・compaction)
依存は stdlib のみ・Python バージョンは skill 直下の pyproject.toml から uv が解決・出力は JSON・時刻は JST:
UV_PROJECT_ENVIRONMENT="$HOME/.cache/uv-venvs/session-insights" uv run --project "<skill-dir>" python "<skill-dir>/scripts/collect_sessions.py" <subcommand> [オプション]
UV_PROJECT_ENVIRONMENTは必ず付ける。スキルディレクトリは read-only(nix store / plugin cache)に配置され得るため、venv をスキル配下に作れないCLAUDE_CONFIG_DIRはスクリプトが自動で解決する。手で~/.claudeをハードコードしない- サブコマンドは
paths/sessions/prompts/cost/search/transcript/dialogs/waitsの 8 つだけ。横断集計を求められたら cclens へ回す dialogsは permission-gate のログ(${XDG_STATE_HOME:-~/.local/state}/claude/permission-prompts.jsonl、無ければprompt_log.exists: false)と transcript の許可判定を時系列で返す。waitsは tool_use から tool_result までの経過秒で、許可ダイアログの待ちと実行時間の両方を含む(run_in_backgroundは除外)searchはヒットした位置(セッション ID・JSONL の行番号・スニペット)を返すだけの横断照会。本文を読む深掘りは従来どおりtranscriptで 3〜5 件に絞る。--toolだけを指定すると、検索対象はツールの入出力(tool-input/tool-result)に絞られる。既定の上限は--limit 40/--per-session 3/--context 80で、切られてもtotal_hitsとby_session(ヒットの多いセッション上位 30 件)で全体量が分かるcostは ccusage への薄い移譲(ccusage claude daily|session --json --timezone Asia/Tokyo)。ccusage が無ければ理由を返して停止するので、その観点だけ落として分析は続ける- 各サブコマンドの limit / max-chars 既定値はコンテキスト保護のための意図的な制約。
- 外すときは範囲を十分絞ってから
- レコード形式・ディレクトリ配置の詳細(公式ドキュメント準拠の一覧、「実プロンプト」の判定規則、cclens スキーマとの対応)は
references/data-model.mdを参照
分析フロー
1. 環境確認
UV_PROJECT_ENVIRONMENT="$HOME/.cache/uv-venvs/session-insights" uv run --project "<skill-dir>" python "<skill-dir>/scripts/collect_sessions.py" paths
command -v cclens; command -v ccusage # 使える道具の確認
設定ディレクトリの解決結果(CLAUDE_CONFIG_DIR の有無)、セッション数、設定・スキル類の配置を把握し、レポート冒頭に「分析対象の範囲」として明記する。cclens / ccusage が使えるかもここで確認し、欠けていれば対応する観点を範囲外として明記する。
2. 観点に応じた一次収集(集計層)
観点をサブコマンドに写像する。複数併用してよいが、観点に関係ない収集はしない(「cclens」は cclens のサブコマンド、「script」は同梱スクリプトのサブコマンド):
| 観点 | サブコマンド |
|---|---|
| コンテキスト効率・compact 多発・トークン消費 | cclens overhead / usage(--by day 等)+ script sessions の peak_context/compactions |
| コスト(USD) | script cost |
| プロンプトの書き方・依頼の傾向・手戻り | cclens prompts(種別の分布)+ script prompts(本文。特定の言い回しは --grep)、深掘りは script transcript |
| スキル・コマンドの活用度(死にスキル検出) | cclens usage + inventory + waste |
| ツール運用(MCP・サブエージェント・並列化) | cclens sql(events の agent_spawn 等)+ script sessions の agents/subagent_files |
| 設定の妥当性(permissions・hooks・モデル選択) | cclens inventory / overhead + script sessions の models/permission_modes |
| 許可ダイアログ・待ち時間 | script dialogs(判定の出所と時系列)+ waits(Bash は ask 対象別の件数・中央値・--threshold 超過一覧) |
| エラー・摩擦ポイント | cclens failures(--scope)+ stuck、深掘りは該当セッションの script transcript |
| 特定の操作・発言を含むセッションを探す | script search(--in / --tool で対象を絞る)→ 該当セッションの transcript --tool-detail |
| 特定プロジェクトの運用 | script は --project、cclens は --scope project:<slug> |
script の共通オプション: --project <部分一致> / --since / --until(JST日付)/ --session <ID前方一致>。Agent/Task 起動由来のセッションは既定で除外される(人間の運用分析を歪めるため)。
含めるなら --include-agents。
金額(USD)は cost が ccusage に移譲する(ccusage claude daily|session --json)。
絶対量・金額は ccusage の値を正とする(重複レコード排除とモデル別価格計算済み)。
sessions の usage / aggregate.usage は peak_context・compactions などセッション内訳分析用の生合算。
3. 深掘り(個別セッション)
集計から仮説を立ててから、該当セッションだけを読む:
UV_PROJECT_ENVIRONMENT="$HOME/.cache/uv-venvs/session-insights" uv run --project "<skill-dir>" python "<skill-dir>/scripts/collect_sessions.py" transcript --session <ID> --tail 40
UV_PROJECT_ENVIRONMENT="$HOME/.cache/uv-venvs/session-insights" uv run --project "<skill-dir>" python "<skill-dir>/scripts/collect_sessions.py" transcript --session <ID> --include-tools
UV_PROJECT_ENVIRONMENT="$HOME/.cache/uv-venvs/session-insights" uv run --project "<skill-dir>" python "<skill-dir>/scripts/collect_sessions.py" transcript --session <ID> --tool-detail --tail 40
--include-toolsはツール名と説明(brief)だけ。実行したコマンドと結果(status/exit_code/ stdout・stderr の抜粋)まで読むときは--tool-detailを使う--tool-detailの上限: 入力--input-chars 300、結果--result-chars 600(先頭と末尾を残す)、セッション全体--detail-budget 30000(既定の上限でおよそ 30 ツール分。超えた分はbriefに戻り、件数がdetail_omittedに出る)。予算は古いターンから順に消費するので、末尾を詳しく読むときは--tailで範囲を絞ってから使う- 成功した Bash の
exit_codeはnull(transcript に記録が無い)。status: okを成功と読む
深掘りは仮説の検証に必要なセッションに絞る(目安: 1観点あたり3〜5件まで)。 全セッションの transcript を順に読むような使い方はこのスキルの禁止事項。
cclens の固定レポートで足りない切り口は、cclens sql --db "$DB" "<SELECT …>" で直接引く。SELECT sql FROM sqlite_master でスキーマを確認してから書き、想定した encoding が本当に入っているかを少量サンプルして確かめる(tool_errors ビューは友好的な列名を与えるが、events 側は列を多重利用している)。ストアは read-only で開かれるためクエリが状態を壊すことはない。
4. レポートと改善案
分析結果は以下の構成でまとめる(ファイル出力を求められたら [[tmp-output]] の規約に従う。時刻表記は常に JST):
# セッション分析: <観点>
## 分析対象の範囲(期間・プロジェクト・セッション数・除外条件)
## 観測された事実(数値・セッションIDつき)
## 傾向と解釈
## 改善案
改善案の書き方:
- 事実と対にする。「compact が直近30日で12回、うち9回が loglass の長時間セッション(例: abcd1234)」→「そのプロジェクトの CLAUDE.md に調査結果の中間ファイル化を指示する」のように、観測に紐づかない一般論は書かない
- 変更対象は具体パスで。この環境の
~/.claude/*は dotfiles(~/dotfiles/home/.claude/...)への symlink なので、編集提案は dotfiles 側の実体パスで示す - 設定・スキルの変更はあくまで提案として提示する。ユーザーの承認なしにCLAUDE.md・settings.json・既存スキルを書き換えない
制約
- 明示起動のみ(frontmatter で自動起動無効化済み)。分析観点なしでは動かない
- 分析結果・transcript の内容を外部システム(Slack・Notion・Issue 等)へ送らない。求められた場合も [[external-writes]] の確認手順に従う
- transcript には過去の業務情報・秘匿情報が含まれうる。レポートへの引用は分析に必要な最小限にとどめ、トークンやパスワード様の文字列は伏せる
- スクリプトは本文を出す全箇所で既知形式のトークン・鍵・
password=等を[REDACTED:<kind>]に置き換える(外すオプションは無い)。正規表現で拾えない形式は素通りするので、引用時の確認は省かない
- スクリプトは本文を出す全箇所で既知形式のトークン・鍵・
- スクリプトの改修時は
UV_PROJECT_ENVIRONMENT="$HOME/.cache/uv-venvs/session-insights" uv run --project "<skill-dir>" pytestを全件通す
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
spec.md の REQ-# を入力に、機能一覧・モジュール構成・インターフェース・データフローを持つ docs/dev/<対象>/basic-design.md を作成・改訂するスキル。/basic-design <対象名> で明示的に呼び出されたときのみ使用する。
技術的な内容を、技術用語を排したビジネス職向けの平易な説明文に翻訳する。`/biz-translate` と明示的に呼ばれたときのみ実行する。
`git commit` / `git commit --amend` を実行する前、または「commit」「amend」「コミット」「コミットして」の一語・短文だけを渡された時点で必ず発火する git コミット実施ルール。理由や差分の説明が一切無くても、ファイル全文を読んでメッセージを組み立てる前に先に参照する。主目的は論理的に独立した修正を都度・適切な粒度でコミットすること。メッセージは Conventional Commits 形式、素材は同梱の決定論スクリプト commit-context.sh が出す staged diff のみ。「コミット分けて」と依頼される、独立した複数修正をまとめるか分けるか判断する、レビューコメント対応をコミットする、rebase / squash / cherry-pick 後のメッセージを整える、`gh pr create` の PR タイトルをコミット流儀へ揃える場面でも参照する。plan モードでのコミット計画の立案は commit-plan スキルの領分。
実装計画・リファクタリング計画・レビュー対応計画・並列作業のタスク分解など、計画を成果物として書き出すときに必ず参照するコミット計画ルール。plan モードでは ExitPlanMode で plan を提示する前に必須、計画ドキュメントや job-graph のタスク分解・エージェントへの指示文でも同様に適用する。計画成果物にコミット計画セクション(論理的に独立した修正単位での分割と Conventional Commits 形式のメッセージ)が無ければ実装に入らない。「実装計画を立てて」「planを立てて」「実行計画を作って」「リファクタリング計画を立てて」「コミット計画を立てて」「タスクを分解して」と依頼される、複数の独立した修正をまとめるか分けるか計画段階で判断する等の場面では、ユーザーが「コミット」に一切言及していなくても必ず発火する。コミットの実施(素材収集・メッセージ確定・git commit 実行)は commit-flow スキルが担う。
プロジェクトに 1 つの「完成の定義」docs/dev/definition-of-done.md を対話で構築・改訂し、機械判定節と人判定節の二部構成で書き出すスキル。/def-done で明示的に呼び出されたときのみ使用する。