mcpField
R
retrospective

retrospective

github.com/glebisエージェントワークフロー403132 回インストール3 日前に更新
リポジトリ

retrospective について

Retrospective は、単一の会話または複数プロジェクトのセッションを振り返り、承認された学びを記録する対話型スキルです。ユーザーからの修正、スキルの失敗、反復パターンを見つけ、メモリーやスキルファイルへの具体的な変更を提案します。

主な機能

  1. 01単一会話または複数セッションの振り返り
  2. 02修正点や反復パターンの抽出
  3. 03最大5件のアクション案の提示
  4. 04承認済みのメモリーやスキルの更新
  5. 05学びの重複回避

活用シーン

  1. 01修正内容を今後の作業ルールとして保存
  2. 02スキルの失敗時に使った回避策を記録
  3. 03一日の複数セッションから学びを確認
  4. 04反復するワークフローを更新に反映

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/glebis/claude-skills --skill retrospective

インストール後、Claude Code で/retrospectiveを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

retro_engine.py
test_retro_engine.py
.claude-plugin/
plugin.json
scenarios/
01_productive_long.yaml
02_short_session.yaml
03_rough_session.yaml
04_no_skills.yaml
05_many_learnings.yaml
06_duplicate_memory.yaml
07_skill_conflict.yaml
08_linear_not_configured.yaml
09_cross_skill_workflow.yaml

詳細

振り返り

セッション終了後に行う対話型の振り返りです。セッションをスキャンし、焦点を絞った質問を行い、ユーザーが一度の操作で承認できる具体的なアクションを提案します。

モード

単一セッションモード(実質的な会話の途中で呼び出した場合のデフォルト)

現在の会話のみをスキャンします。これが従来の動作です。

複数セッションモード(引数なし、「today」、または日付を指定して呼び出した場合のデフォルト)

指定した日(デフォルト:今日)のすべてのプロジェクトにおける全セッションをスキャンします。JSONL のトランスクリプトから、ユーザーによる修正、スキルの失敗、パターンを抽出します。

起動方法: 新しいセッションの開始時に /retrospective、または /retrospective today、または /retrospective 2026-05-24 を実行します。

複数セッションの検出

ステップ 0 — セッションを検出する
# Find today's sessions (default)
find ~/.claude/projects -maxdepth 2 -name "*.jsonl" -not -path "*/subagents/*" -mtime 0

# Or for a specific date, filter by file modification date
find ~/.claude/projects -maxdepth 2 -name "*.jsonl" -not -path "*/subagents/*" -newermt "YYYY-MM-DD" ! -newermt "YYYY-MM-DD + 1 day"

見つかった JSONL ファイルごとに、概要を抽出します:

  1. パスからプロジェクト名を解析します(パスエンコーディングをデコードしたうえで、projects/ の後に続くディレクトリ名を取得)
  2. user と assistant のメッセージを抽出します(タイプが user と assistant のもの)
  3. ユーザーメッセージの場合:message.content(文字列の場合と、{type: "text", text: "..."} の配列の場合があります)
  4. アシスタントメッセージの場合:message.content 配列から type == "text" のテキストブロックを収集します
  5. 要約したトランスクリプトを作成します:最初のユーザーメッセージ 10 件と最後のユーザーメッセージ 5 件(最後の方の修正を把握するため)
  6. ユーザーメッセージが 3 件未満のセッションはスキップします(学びを得るには短すぎるため)
ステップ 0b — セッション一覧を提示する

見つかった内容をユーザーに表示します:

Found N sessions today:
- project-name-1 (session-id[:8]) — "first user message preview..."
- project-name-2 (session-id[:8]) — "first user message preview..."

続いて、すべてのセッションの調査結果をまとめてステップ 1a に進みます。各候補アクションには、どのセッションから得られたものか(プロジェクト名 + 短い ID)を記載します。

単一セッションの手順

ステップ 0 — ゲートチェック(サイレント)

会話をスキャンして、セッションの深さを見積もります。ツール呼び出し(Read、Edit、Write、Bash、Skill の呼び出し)、発生したエラー、やり取りの往復を確認します。正確に数えようとせず、全体的な印象で判断してください:

  • 短いセッション(簡単な質疑応答、約 1~2 件のタスク)→ クイックモード(ステップ 1b)
  • 実質的なセッション(複数のタスク、スキルの使用、エラー、修正)→ フルモード(ステップ 1a)
ステップ 1a — フルモード

会話をサイレントにスキャンして、次の内容を収集します:

  1. 呼び出されたスキル — 成功したもの、失敗したもの、適用した回避策
  2. ユーザーによる修正 — 明示的な「違います。こうしてください」という場面(最も重要なシグナル)
  3. 繰り返し発生したパターン — 同じエラーが複数回発生した、同じ回避策を適用した
  4. スキルをまたぐワークフロー — 3 つ以上のスキルを順番につないだもの

次に、既存の状態を読み取ります:

  • 現在のプロジェクトのメモリディレクトリを見つけます:glob ~/.claude/projects/*/memory/MEMORY.md を実行し、そのファイルと関連するメモリファイルを読み取ります
  • 呼び出されたスキルのスキルファイルを読み取ります(~/.claude/skills/{name}/skill.md)
  • Linear CLI が存在するか確認します:test -f ~/.claude/skills/linear/scripts/linear && echo "configured" || echo "not configured"

シグナルの強さに応じて、最大 5 件の候補アクションを生成します:

  1. ユーザーによる修正(最優先)
  2. 失敗したスキル、または回避策を適用したスキル
  3. 繰り返し発生したパターン
  4. エラーのパターン
  5. ワークフローのパターン(最優先度が低い)

重複排除のルール:

  • 候補の内容が既存のメモリファイルと重複する場合は、候補から除外します
  • スキル更新の候補が既存のスキルファイルの内容と重複する場合は、候補から除外します
  • Linear が設定されていない場合は、Linear タスクの候補を除外します

すべてを単一の AskUserQuestion 呼び出し(質問は最大 4 件)で提示します:

#質問タイプ
1「セッションを簡単に振り返りますか?」単一選択:Productive / Mixed / Rough / Skip retro
2「遅い、またはうまくいかなかったと感じた点はありますか?」「その他」から自由記述(任意)
3「ルールとして今後も引き継ぎたいことはありますか?」「その他」から自由記述(任意)
4「これらのうち、保存するものはどれですか?」複数選択:説明付きの生成候補。「何も保存しない/すべてスキップ」を必ず含めます。

Q1 が「Skip retro」の場合 → 直ちに終了します。

Q1 が「Rough」で、Q2/Q3 が空の場合 → 「保存するものはありません — セッションを終了しました。」として終了します。ユーザーがすでに終了の意思を示しているため、追加の質問はしません。

Step 1b — 高速モード

質問を1つだけ含む AskUserQuestion 呼び出しを1回実行します:

  • 「このセッションから覚えておく価値のあることはありますか?」。選択肢:
    • 「特にありません。終了します」(デフォルト)
    • その他(自由入力)

「特にありません」の場合 → 終了します。自由入力があった場合 → メモリーとして保存し、終了します。

Step 2 — 実行(通知なし、再確認なし)

Q4 で承認された各項目(および Q2/Q3 の自由入力から得た知見)について:

  1. 書き込む前に対象ファイルを読む
  2. 現在の内容と照らし合わせて競合や重複がないか確認する
  3. 問題がなければ変更を書き込む
  4. 競合が検出された場合は、警告を出してスキップする

アクションの種類と対象:

種類対象ツール
スキルの更新~/.claude/skills/{name}/skill.mdEdit
メモリー(フィードバック)現在のプロジェクトの memory/feedback_*.md + MEMORY.mdWrite
メモリー(プロジェクト)現在のプロジェクトの memory/project_*.md + MEMORY.mdWrite
CLAUDE.md のルール~/.claude/CLAUDE.md またはプロジェクトの CLAUDE.mdEdit
Linear のタスク~/.claude/skills/linear/scripts/linear issue create --title "..." --description "..."Bash
Step 3 — 要約(簡潔に)

実行したアクションごとに1行で記載します:

Updated telegram skill — added chat type mismatch note
Saved memory — Qwen /api/chat not /api/generate
Skipped: pdf-generation update (already documented)

完了です。末尾にコメントを追加しないでください。

JSONL トランスクリプト形式

セッションのトランスクリプトは、~/.claude/projects/{project-path}/{session-id}.jsonl に JSONL ファイルとして保存されます。

各行は type フィールドを持つ JSON オブジェクトです。関連するタイプ:

  • user — ユーザーメッセージ。内容は message.content に格納されます(文字列、または {type: "text", text: "..."} の配列)。
  • assistant — Claude の応答。内容は message.content に格納されます(コンテンツブロックの配列。「type == "text"` に該当するものを抽出します)。
  • ai-title — 自動生成されたセッションタイトル

JSONL ファイルから読みやすいトランスクリプトを抽出するには、Python のワンライナーを使うか、ファイルを読み込んで user/assistant タイプに絞り込みます。

プロジェクト名のデコード: ディレクトリ名は、スラッシュをダッシュに置き換えた絶対パスを使用します。例:-Users-glebkalinin-ai-projects-foo → ~/ai_projects/foo。

モード選択ロジック

/retrospective が呼び出されたとき:

  1. 現在の会話にユーザーメッセージが10件以上ある場合 → 単一セッションモード(この会話を振り返ります)
  2. 現在の会話が短い場合(/retrospective の呼び出しのみ) → 複数セッションモード(今日のセッションをスキャンします)
  3. 引数に日付(例:「今日」、「昨日」、「2026-05-24」)が含まれる場合 → その日付の複数セッションモード
  4. 引数に「all」が含まれる場合 → 今日の複数セッションモード

候補の説明形式

Q4 の各候補には、タイトルだけでなく、提案する正確な内容を示す説明が必要です。ユーザーはファイルを開かず、説明を読んで候補を判断します。

良い例:"telegram スキルに追加:get_chat_type() はプライベートチャットをチャンネルと誤判定する — DM では Telethon クライアントの send_message() を直接使用する"

悪い例:"DM の修正で telegram スキルを更新"

このスキルが行わないこと

このスキルはセッションから得た知見を記録するだけです。コード品質のレビュー、PR の分析、ドキュメントの作成、テストの実行は行いません。これらには、適切な専用スキルを使用してください。

ルール

  • 学びをこのスキルファイル自体に書き込まないでください。関連するスキルまたはメモリーに振り分けます。
  • さらに多くの知見があっても、候補は最大5件にしてください。
  • ユーザーからの訂正は、常にツールの失敗より優先度を高くします。
  • Step 1a の複数選択が承認にあたります。アクションごとに再確認しないでください。
  • セッションでスキルが使われていない場合は、メモリーと CLAUDE.md の候補のみを提示してください。
  • やり取り全体を2つのタイミングに収めてください。質問の呼び出しを1回行い、その後は通知せずに実行します。

ツール

  • AskUserQuestion:対話形式の質問(1回の呼び出しにつき1〜4問、単一選択/複数選択)
  • Read:変更を提案する前に、既存のメモリーとスキルファイルを確認します。
  • Edit:既存のスキルファイルと CLAUDE.md を更新します。
  • Write:新しいメモリーファイルを作成します。
  • Bash:Linear タスクの作成、スキルディレクトリの一覧表示
  • Glob:スキルファイルとメモリーファイルを検索します。

テスト

エンジンロジックは、9つのシナリオフィクスチャと30件の pytest テストを使用して retro_engine.py でテストされます。 実行:cd ~/.claude/skills/retrospective && python3 -m pytest test_retro_engine.py -v

コメント