mcpField
S
session-replay

session-replay

github.com/atholaクリエイティブ・メディア34380 回インストール2 日前に更新
リポジトリ

session-replay について

session-replayは、Claude CodeのセッションJSONLを端末出力風のアニメーションGIFに変換するスキルです。開発デモやプルリクエストの証拠、チュートリアル用の再生動画を作成でき、対象ターンや表示レイヤーを選べます。

主な機能

  1. 01セッションJSONLをターンに解析
  2. 02ターンと表示レイヤーの選択
  3. 03会話からVHSテープを生成
  4. 04テープをアニメーションGIFにレンダリング

活用シーン

  1. 01開発ワークフローのデモ作成
  2. 02プルリクエストへの再生証拠の添付
  3. 03SlackやGitHubでのセッション共有
  4. 04チュートリアルへの再生GIF埋め込み

インストール

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

$npx skills add https://github.com/athola/claude-night-market --skill session-replay

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

詳細

セッションリプレイ

Claude Code のセッション JSONL ファイルを、会話をターミナル出力としてタイプ表示するアニメーション GIF に変換します。

このスキルでは、セッションファイルをターンに解析し、そのターンから VHS テープを生成して、GIF のレンダリングを scry に引き継ぐという 3 つのステップを実行します。

使用する場面

  • 開発ワークフローのデモを作成する
  • プルリクエストに視覚的な証拠を追加する
  • セッションのハイライトを Slack や GitHub で共有する
  • チュートリアルにセッションリプレイを埋め込む

使用しない場面

  • セッションをもとにブログ記事を作成する場合(scribe:session-to-post を使用)
  • API ドキュメントを生成する場合(scribe:doc-generator を使用)
  • ライブのターミナルコマンドを録画する場合(scry:vhs-recording を直接使用)

連携ポイント

必要なことスキル提供する機能
GIF のレンダリングscry:vhs-recordingVHS テープをアニメーション GIF に変換します
チュートリアルへの埋め込みscribe:tech-tutorialチュートリアルの Markdown に GIF を埋め込みます
PR の準備sanctum:prepare-prリプレイを PR の証拠として添付します

ワークフロー

ステップ 0:セッションを選ぶ(パスが指定されていない場合)

ユーザーがパス引数なしで /session-replay を実行した場合は、 s​​cribe.session_parser.list_sessions() を使って ~/.claude/projects/ から最近の セッションファイルを探します。

この関数は、更新日時の新しい順に並んだ SessionInfo オブジェクトの リストを返します。各オブジェクトには次の情報が含まれます。

  • path:.jsonl ファイルのフルパス
  • modified:mtime タイムスタンプ
  • first_user_message:最初のユーザーメッセージのプレビュー
  • turn_count:セッション内のユーザーターン数
  • project_name:親ディレクトリ名

番号付きメニューとしてリストをユーザーに提示します。

Recent sessions:
 1. [my-project] "implement auth module" (8 turns, 2h ago)
 2. [api-server] "fix rate limiting bug" (3 turns, 5h ago)
 3. [docs-site]  "update installation guide" (12 turns, 1d ago)

ユーザーに番号を選んでもらいます。以降のステップでは、選択された セッションの path を使用します。

list_sessions が空のリストを返した場合は、セッションが見つからなかったことを 伝え、パスを直接指定するよう提案します。

ステップ 1:セッションを解析する

scribe.session_parser.parse_session() を使って JSONL ファイルを読み込みます。 パーサーは次の処理を行います。

  • ユーザーとアシスタントのターンを抽出します
  • サイドチェーン(サブエージェント)のレコードをスキップします
  • ツール呼び出しを読みやすい要約にまとめます
  • 設定された列幅でテキストを折り返します
  • 設定された行数を超える長い応答を切り詰めます

ユーザーのオプションに応じてフィルターを適用します。

  • --turns は特定のターン範囲を選択します(例:1-5)
  • --show は表示するレイヤーを指定します:user、assistant、 tools、thinking(thinking はデフォルトで除外されます)
ステップ 2:VHS テープを生成する

scribe.tape_generator.generate_tape() を使って、解析済みのターンを VHS テープファイルに変換します。ジェネレーターは次の処理を行います。

  • Output ディレクティブと Set コマンドを作成します
  • ユーザーメッセージを $ のプレフィックス付きで 1 文字あたり 30 ms でタイプ表示します
  • アシスタントの応答を 1 文字あたり 15 ms でタイプ表示します
  • ツールの要約を 2 つのスペースでインデントし、100 ms でタイプ表示します
  • ターンの間に 1.5 秒の一時停止を挿入します
  • 最終フレームを 3 秒間表示します
  • --speed 倍率に応じて、すべてのタイミングを調整します
  • --max-duration を超えた場合は切り詰めます

テープを一時ファイルに書き込みます。 {tempdir}/session-replay-{timestamp}.tape

ステップ 3:GIF をレンダリングする

テープファイルのパスを指定して Skill(scry:vhs-recording) を呼び出します。 Scry はテープを検証して VHS を実行し、Output ディレクティブで 指定されたパスに GIF を生成します。

レンダリングが成功したら、一時テープファイルを削除します。

エラー処理
エラー対応
VHS がインストールされていないgo install github.com/charmbracelet/vhs@latest でインストールするよう伝えます
テープの構文エラーVHS のエラー出力を報告します。文字列のエスケープに関する不具合の可能性があります。
GIF の生成に失敗VHS のエラーを報告します。対象範囲を減らすために --turns 1-5 を提案します。
Scry スキルが見つからないGIF のレンダリングには scry プラグインが必要であることを伝えます。

例

# Pick from recent sessions interactively
/session-replay

# Replay a specific file directly
/session-replay ~/.claude/projects/my-project/abc123.jsonl

# First 5 turns only, faster playback
/session-replay --turns 1-5 --speed 1.5

# Show only the conversation, no tool calls
/session-replay --show user,assistant --output demo.gif

出力(対話型ピッカー):

Recent sessions:
 1. [my-project] "implement auth module" (8 turns, 2h ago)
 2. [api-server] "fix rate limiting bug" (3 turns, 5h ago)
 3. [docs-site]  "update installation guide" (12 turns, 1d ago)

Pick a session [1-3]: 1

Parsed 42 turns from session (12 user, 15 assistant, 15 tools)
Generated tape: /tmp/session-replay-1711234567.tape
Rendering GIF via scry...
Done: session-replay.gif (18s, 960x540)

終了条件

  • レンダリングを試みる前に、VHS テープファイルが {tempdir}/session-replay-{timestamp}.tape に書き込まれている
  • GIF がテープの Output ディレクティブで指定されたパスに生成され、そのサイズ(再生時間、寸法)が報告される
  • GIF のレンダリング成功後に一時テープファイルが削除される
  • VHS がインストールされていない場合、黙って失敗するのではなく、インストールコマンド go install github.com/charmbracelet/vhs@latest を含むエラーが報告される
  • JSONL パスが指定されておらず、list_sessions() が空を返した場合、セッションが見つからなかったことをユーザーに伝え、パスを直接指定するよう案内する

コメント