session-replay について
session-replayは、Claude CodeのセッションJSONLを端末出力風のアニメーションGIFに変換するスキルです。開発デモやプルリクエストの証拠、チュートリアル用の再生動画を作成でき、対象ターンや表示レイヤーを選べます。
主な機能
- 01セッションJSONLをターンに解析
- 02ターンと表示レイヤーの選択
- 03会話からVHSテープを生成
- 04テープをアニメーションGIFにレンダリング
活用シーン
- 01開発ワークフローのデモ作成
- 02プルリクエストへの再生証拠の添付
- 03SlackやGitHubでのセッション共有
- 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-recording | VHS テープをアニメーション GIF に変換します |
| チュートリアルへの埋め込み | scribe:tech-tutorial | チュートリアルの Markdown に GIF を埋め込みます |
| PR の準備 | sanctum:prepare-pr | リプレイを PR の証拠として添付します |
ワークフロー
ステップ 0:セッションを選ぶ(パスが指定されていない場合)
ユーザーがパス引数なしで /session-replay を実行した場合は、
scribe.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()が空を返した場合、セッションが見つからなかったことをユーザーに伝え、パスを直接指定するよう案内する