ln-002-session-analyzer について
ツールエラー、作業プロセス、コミュニケーション、スコープ逸脱など10の観点から、単一のエージェントセッションを調べる独立したスキルです。発見事項をスキル、ツール、フック、プロンプトへの具体的な改善策に結び付けます。
主な機能
- 01現在または最近のセッションを分析
- 0210の行動観点を確認
- 03ツールエラーと無駄を特定
- 04発見事項を具体的な修正に対応
- 05指定したスキルに焦点を設定
活用シーン
- 01完了したタスクのセッションを振り返る
- 02ツールやフックの問題を診断
- 03スキル実行後に手順を改善
MCP 対応
MCP接続は必須ではありません。hex-lineは大きなセッションログやリポジトリファイルの処理を効率化できますが、MCPが使えない場合も内蔵ツールで分析を続けます。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ levnikolaevich/ claude-code-skills --skill ln-002-session-analyzerインストール後、Claude Code で/ln-002-session-analyzerを入力して読み込まれたか確認します。
同梱ファイルreferences/meta_analysis_protocol.md
詳細
パス: ファイルパス(
references/、../ln-*)は、このスキルディレクトリからの相対パスです。
セッションアナライザー(スタンドアロンユーティリティ)
タイプ: スタンドアロンユーティリティ
カテゴリー: 0XX 共有
セッションを分析して、エラー、非効率な点、改善の機会を特定します。スキル、ツール、フック、コミュニケーションスタイルに対する、実行可能な改善策を提示します。
範囲: 1つのセッションを対象とした詳細分析(10の観点)です。プロトコルのセルフ監査より広く、/audit-sessions による一括分析より狭い範囲です。
スキルのセルフ監査については、references/meta_analysis_protocol.md §7 を参照してください。複数日にわたるパターンについては、/audit-sessions を使用してください。
このスキルを使用するタイミング
- タスクの完了後 — 問題点と改善方法を確認します
- 定期的に — 最近のセッションを監査してパターンを見つけます
- スキルの実行後 — スキルの指示がどれほど適切に機能したかを分析します
- ツールやフックの問題をデバッグするとき — セッションデータから根本原因を見つけます
入力
$ARGUMENTS:
- (空) — 現在のセッション(会話のコンテキスト)を分析します
recent— エージェント(Claude、Codex)ごとに最新の JSONL セッションをスキャンします{skill-name}— セッション内での、そのスキルの実行に分析対象を絞ります
hex-line は、大きなローカルセッションログやリポジトリファイルを扱う場合のオプションの高速化手段です。MCP を利用できない場合は、組み込みの Read/Grep/Glob/Bash を使用して続行してください。このスキルは MCP の接続状況によって処理を中断してはなりません。
分析の観点
| # | 観点 | スキャン対象 | 改善対象 |
|---|---|---|---|
| D1 | ツールエラー | NOOP_EDIT、TEXT_NOT_FOUND、ハッシュの不一致、範囲外 | SKILL.md の手順 — パスやアンカーを追加 |
| D2 | ツールの無駄 | アウトラインを確認せずに全体を読み込む、読み込みの繰り返し、bash へのフォールバック | SKILL.md — 「まずアウトラインを確認」、MCP ツールを明記 |
| D3 | プロセスの問題 | 3回以上のツールループ、リトライの連発、行き詰まり、対象の誤り | SKILL.md のフェーズ — 作業を分割 |
| D4 | スクリプトの抽出 | 実行のたびに場当たり的な bash/python スクリプトを作成 | references/scripts/ |
| D5 | フックと権限 | フックによるブロック、権限拒否、MCP ではなく組み込み機能を使用 | フック設定、allowed-tools |
| D6 | コミュニケーション | 過剰な説明、状況報告の欠落、不要な確認 | CLAUDE.md の設定、スキルの出力に関する注記 |
| D7 | 意思決定の質 | 方針転換までの行き詰まり、試行錯誤、エラー検出の遅れ | SKILL.md の判断ツリー、手順の明確さ |
| D8 | コンテキストの負荷 | 同じファイルの再読込、解決済みの内容を再質問、スレッドの喪失 | キャッシュに関する注記、簡潔な指示 |
| D9 | サブエージェントの品質 | 結果が空、タイムアウト、範囲が広すぎるプロンプト | エージェントのプロンプト、タイムアウト設定 |
| D10 | スコープの逸脱 | 目標からの逸脱、意図しない拡大、理由のない方針転換 | スコープのガード、目標の確認 |
フェーズ 1:セッションデータの収集
$ARGUMENTS に基づいてデータソースを決定します。
現在のセッション(引数が空の場合)
会話のコンテキストを直接スキャンします。すべてのツール呼び出し結果、エラー、メッセージを参照できます。
最近のセッション(引数が recent の場合)
エージェントごとに最新のセッションを見つけます。
echo "=== LATEST SESSIONS ==="
echo "## Claude"
CLAUDE_LATEST=$(stat -c '%Y %n' ~/.claude/projects/*/*.jsonl 2>/dev/null | sort -rn | head -1 | cut -d' ' -f2-)
[ -n "$CLAUDE_LATEST" ] && echo " $CLAUDE_LATEST ($(wc -l < "$CLAUDE_LATEST") lines)" || echo " No sessions found"
echo "## Claude Active Sessions"
for f in "$HOME/.claude/sessions"/*.json; do
[ -f "$f" ] || continue
PID=$(basename "$f" .json)
kill -0 "$PID" 2>/dev/null && echo " ACTIVE: $(cat "$f")" || echo " STALE: PID=$PID"
done
echo "## Codex"
CODEX_LATEST=$(stat -c '%Y %n' ~/.codex/sessions/????/??/??/rollout-*.jsonl 2>/dev/null | sort -rn | head -1 | cut -d' ' -f2-)
[ -n "$CODEX_LATEST" ] && echo " $CODEX_LATEST ($(wc -l < "$CODEX_LATEST") lines)" || echo " No sessions found"
JSONL セッションから生データを抽出
見つかった各セッションファイル($F)に対して実行します。
echo "=== TOOL CALLS ==="
grep -oE '"name"\s*:\s*"[^"]*"' "$F" 2>/dev/null | sed 's/"name"\s*:\s*"//;s/"//' | sort | uniq -c | sort -rn | head -30
echo "=== ERRORS ==="
grep -oE 'NOOP_EDIT|TEXT_NOT_FOUND|FILE_NOT_FOUND|HASH_HINT|DANGEROUS|out of range|mismatch|tool_use_error|permission denied' "$F" 2>/dev/null | sort | uniq -c | sort -rn
echo "=== TOOL LOOPS (3+ consecutive) ==="
grep -oE '"name"\s*:\s*"[^"]*"' "$F" 2>/dev/null | sed 's/"name"\s*:\s*"//;s/"//' | uniq -c | sort -rn | awk '$1 >= 3'
echo "=== BUILT-IN vs MCP ==="
grep -oE '"name"\s*:\s*"(Read|Edit|Write|Grep|mcp__hex-line__\w+)"' "$F" 2>/dev/null | sed 's/.*"name"\s*:\s*"//;s/"//' | sort | uniq -c | sort -rn
echo "=== HOOK EVENTS ==="
grep -oE 'hook_progress|blocking error|PreToolUse|PostToolUse|hex-confirmed|Obligatory use|Use mcp__hex-line' "$F" 2>/dev/null | sort | uniq -c | sort -rn
echo "=== SKILL/COMMAND INVOCATIONS ==="
grep -oE '"display":\s*"/[a-z-]+' "$F" 2>/dev/null | sed 's/"display":\s*"//' | sort | uniq -c | sort -rn
キーワードに基づくエラー件数は、あくまでヒューリスティックとして扱ってください。 報告された一致が、同じ文字列を含むプロンプト、テンプレート、参照ドキュメントではなく、実際のツール失敗イベントまたは結果イベントに由来することを確認してください。
Claude JSONL からトークン統計を抽出
実際のトークン使用量を取得するため、Claude のセッションファイル($F)に対して実行します。
echo "=== TOKEN STATS ==="
TOTAL_IN=$(grep -oE '"input_tokens":[0-9]+' "$F" | grep -oE '[0-9]+' | paste -sd+ | bc 2>/dev/null)
TOTAL_OUT=$(grep -oE '"output_tokens":[0-9]+' "$F" | grep -oE '[0-9]+' | paste -sd+ | bc 2>/dev/null)
CACHE_CREATE=$(grep -oE '"cache_creation_input_tokens":[0-9]+' "$F" | grep -oE '[0-9]+' | paste -sd+ | bc 2>/dev/null)
CACHE_READ=$(grep -oE '"cache_read_input_tokens":[0-9]+' "$F" | grep -oE '[0-9]+' | paste -sd+ | bc 2>/dev/null)
echo "in=${TOTAL_IN:-0} out=${TOTAL_OUT:-0} cache_create=${CACHE_CREATE:-0} cache_read=${CACHE_READ:-0}"
フェーズ 2:観点ごとの分析
収集したデータに D1~D10 を適用します。各所見を分類してください。
| 重大度 | 観点 | 意味 |
|---|---|---|
| エラー | D1、D5 | 問題が発生 — ツールの失敗、権限の拒否 |
| 無駄 | D2、D4、D8 | 不要な作業 — 重複した読み込み、場当たり的なスクリプト、情報の再収集 |
| パターン | D3、D6、D7、D9、D10 | 改善できる行動 — ループ、コミュニケーション、意思決定 |
D1:ツールエラー
種類ごとに件数を数えます:NOOP_EDIT、TEXT_NOT_FOUND、ハッシュの不一致、範囲外、FILE_NOT_FOUND。それぞれについて、原因となった手順またはフェーズを特定します。
D2: ツールの無駄
- 事前のアウトラインなしでの読み取り (100 行超のファイル)
- 同じファイルを 3 回以上読み取り
- MCP に同等のものが存在するのに Bash の
cat/grep/head/sedを使用
D3: プロセスの問題
- ツールループ: 進展がないまま同じツールを同じファイルに 3 回以上実行
- リトライの嵐: 異なるパラメータで 3 回以上の試行
- 行き止まり: アプローチを検討した後に放棄
- 対象の誤り: Y が必要なのにファイル X を参照
D4: スクリプトの抽出
- セッション中に作成された Bash/Python スクリプト
- スキルの実行ごとにスクリプトが必要になる場合 →
references/scripts/の候補
D5: フックとパーミッション
- フックのブロック (PreToolUse/PostToolUse のブロッキングエラー)
- MCP が強制されているのに組み込みの Read/Edit/Write/Grep を使用
hex-confirmedのバイパス — それらは正当化されていたか?
D6: コミュニケーション
- メッセージ長の分布 (過剰な説明 vs 簡潔)
- 不要な確認 (「進めてよろしいですか?」)
- マイルストーンでのステータス更新の欠如
- 冗長なサマリー
D7: 意思決定の質
- エラーを検知して方針転換するまでの時間 (エラーと修正の間のツール呼び出し)
- 試行錯誤の連続 vs 的を絞ったアプローチ
- ツール選択の理由 (最初に誤ったツールを使用)
D8: コンテキストの圧迫
- フェーズをまたいで同じファイルを複数回読み取り
- すでに利用可能だった情報を再度収集
- スレッドを見失う兆候 (解決済みの質問を再質問)
D9: サブエージェントの品質
- 結果が空または低価値な Agent ツールの呼び出し
- Agent のタイムアウト
- 範囲が広すぎるプロンプト (エージェントがやりすぎた、またはやらなさすぎた)
D10: スコープの逸脱
- 当初の目標 vs 実際の成果物 — 逸脱はあるか?
- 実行中の計画外の追加
- 明示的な理由のない方針転換
フェーズ 3: 修正へのマッピング
各所見について、具体的な対象と修正を特定します:
| 対象の種類 | 例 |
|---|---|
| SKILL.md のステップ | 「ln-400 ステップ 2: ファイルパス src/config.ts を追加」 |
| SKILL.md のフェーズ | 「ln-300 フェーズ 3: 3a〜3c のサブステップに分解」 |
allowed-tools | 「ln-400: mcp__hex-line__edit_file を追加」 |
| フック設定 | 「settings.json: npm test の例外を追加」 |
references/scripts/ | 「ln-520: test_harness.sh を references/scripts/ に移動」 |
| CLAUDE.md | 「優先設定を追加: 簡潔な応答、末尾のサマリーなし」 |
| MCP ツール | 「hex-line edit_file: 同時編集時のハッシュ不一致」 |
| Agent プロンプト | 「ln-310 Agent A: スコープをセキュリティ専用に絞る」 |
| スコープガード | 「ln-400: フェーズ 1 に Goal Articulation Gate を追加」 |
フェーズ 4: レポート
references/meta_analysis_protocol.md の形式に従ってチャットに出力します。
### Session Analysis: {session identifier}
#### Improvements
| # | Dim | Finding | Target | Fix |
|---|-----|---------|--------|-----|
| 1 | D1 | 3 edit failures Phase 4 | ln-400 Step 2 | Add file path |
| 2 | D4 | test.sh written ad-hoc | ln-520 | Move to references/scripts/ |
| 3 | D6 | Over-explained 5 times | CLAUDE.md | Add "terse" pref |
| 4 | D5 | Hook blocked Read 4x | settings.json | Add MCP permission |
#### Session Errors
| Problem Type | Count | Examples |
|-------------|-------|---------|
| Retry storm | 4 | 3x edit_file on config.ts |
| Wrong target | 2 | Read utils.ts not helpers.ts |
#### Subagent Errors: {Agent Name} (per agent, if any)
| Problem Type | Count | Examples |
|-------------|-------|---------|
| {type} | {N} | {brief} |
IF no findings AND no errors: "Session analysis: clean run."
アンチパターン
| やってはいけないこと | 代わりに |
|---|---|
| 独自の出力テンプレートを定義する | プロトコルの形式を参照する |
| セッションに含まれないファイルを分析する | 実際に使用されたものだけを分析する |
| 一般的な推奨事項 | 各修正を特定のファイル + 位置に結び付ける |
| 問題のない次元を報告する | 問題のある所見のみ |
フェーズ 5: メタ分析
任意の参照: ユーザーが実行後のメタ分析またはプロトコル形式の実行リフレクションを求めた場合にのみ、references/meta_analysis_protocol.md を読み込みます。
求められた場合は、プロトコル §7 に従ってこのセッションを分析します。プロトコルの形式に従って出力します。
完了の定義
- D1〜D10 の次元を確認済み
- JSONL スキャンが機能する (
recentモード) - 各所見に具体的な対象 + 修正がある
- プロトコル形式で出力 (改善点のみ)
- テンプレートの重複がない
- メタ分析を実行済み
バージョン: 1.1.0 最終更新: 2026-04-05