
Session Replay
Turn a Claude Code session JSONL log into an animated terminal GIF for demos, PR evidence, and tutorial embeds.
Install
npx skills add https://github.com/athola/claude-night-market --skill session-replayWhat is this skill?
- Three-step orchestration: parse JSONL session turns → generate VHS tape → hand off to scry:vhs-recording for GIF output
- Targets Claude Code session JSONL with glob **/*.jsonl
- Explicit When NOT To Use: session-to-post, doc-generator, or live VHS without JSONL source
- Integration table links scry:vhs-recording, scribe:tech-tutorial, and sanctum:prepare-pr
- Medium-complexity artifact workflow (~1500 estimated tokens) for shareable terminal replays
Adoption & trust: 1 installs on skills.sh; 304 GitHub stars; 2/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
Recommended Skills
Lark Doclarksuite/cli
Lark Wikilarksuite/cli
Opensource Guide Coachxixu-me/skills
Readme I18nxixu-me/skills
Doc Coauthoringanthropics/skills
Obsidian Markdownkepano/obsidian-skills
Journey fit
Primary fit
Ship → review is the canonical shelf because the skill’s clearest win is visual evidence attached to code review and merge conversations. Subphase review matches PR preparation, session highlights, and stakeholder proof of how work was done—not live recording.
Common Questions / FAQ
Is Session Replay safe to install?
skills.sh reports 2 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Session Replay
# Session Replay Turn a Claude Code session JSONL file into an animated GIF that plays back the conversation as typed terminal output. The skill orchestrates three steps: parse the session file into turns, generate a VHS tape from those turns, and hand off to scry for GIF rendering. ## When To Use - Creating demos of development workflows - Adding visual evidence to pull requests - Sharing session highlights to Slack or GitHub - Embedding session replays in tutorials ## When NOT To Use - Writing blog posts from sessions (use `scribe:session-to-post`) - Generating API documentation (use `scribe:doc-generator`) - Recording live terminal commands (use `scry:vhs-recording` directly) ## Integration Points | Need | Skill | What it adds | |------|-------|-------------| | GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF | | Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown | | PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence | ## Workflow ### Step 0: Pick a Session (when no path is provided) When the user invokes `/session-replay` without a path argument, use `scribe.session_parser.list_sessions()` to discover recent session files from `~/.claude/projects/`. The function returns a list of `SessionInfo` objects sorted by modification time (most recent first), each containing: - `path`: full path to the .jsonl file - `modified`: mtime timestamp - `first_user_message`: preview of the first human message - `turn_count`: number of user turns in the session - `project_name`: parent directory name Present the list to the user as a numbered menu: ``` 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) ``` Ask the user to pick a number. Use the selected session's `path` for the remaining steps. If `list_sessions` returns an empty list, report that no sessions were found and suggest providing a path directly. ### Step 1: Parse the Session Use `scribe.session_parser.parse_session()` to read the JSONL file. The parser: - Extracts user and assistant turns - Skips sidechain (subagent) records - Collapses tool calls into readable summaries - Wraps text at the configured column width - Truncates long responses at the configured row count Apply filters based on user options: - `--turns` selects specific turn ranges (e.g. `1-5`) - `--show` controls which layers appear: `user`, `assistant`, `tools`, `thinking` (thinking is excluded by default) ### Step 2: Generate VHS Tape Use `scribe.tape_generator.generate_tape()` to convert the parsed turns into a VHS tape file. The generator: - Creates the Output directive and Set commands - Types user messages at 30ms/char with `$ ` prefix - Types assistant responses at 15ms/char - Types tool summaries at 100ms with two-space indent - Adds 1.5s pauses between turns - Holds the final frame for 3s - Scales all timing by the `--speed` multiplier - Truncates when `--max-duration` is exceeded Write the tape to a temp file: `{tempdir}/session-replay-{timestamp}.tape` ### Step 3: Render GIF Invoke `Skill(scry:vhs-recording)` with the tape file path. Scry validates the tape, runs VHS, and produces the GIF at the path specified in the Output directive. After successful rendering, delete the temp tape file. ### Error Handling | Error | Action | |-------|--------| | VHS not installed | Report: install via `go install github.com/c