
Session Replay
- 75 installs
- 325 repo stars
- Updated August 2, 2026
- athola/claude-night-market
Turn a Claude Code session JSONL log into an animated terminal GIF for demos, PR evidence, and tutorial embeds.
About
Session Replay is an agent skill that converts a finished Claude Code session JSONL file into an animated GIF that replays the conversation as typed terminal output—ideal for solo builders who need to show how a fix or feature actually happened without screen-recording friction. It orchestrates parsing session turns into a script, building a VHS tape representation, and delegating render to the scry:vhs-recording dependency so you get a portable visual artifact. Typical triggers include demoing agentic workflows, attaching evidence to pull requests, posting highlights to Slack or GitHub, or embedding replays in tutorials. It deliberately does not replace long-form post generation, API doc synthesis, or live terminal capture; those belong to scribe or direct VHS recording skills. Because output is derived from historical JSONL, it fits after the work is done—primarily Ship review and Launch distribution—even though the underlying session occurred during Build. Pair with PR prep or tutorial skills when you want the GIF inside a structured narrative.
- 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
Session Replay by the numbers
- 75 all-time installs (skills.sh)
- Ranked #709 of 1,879 Documentation skills by installs in the Skillselion catalog
- Security screen: HIGH risk (skills.sh audit)
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/athola/claude-night-market --skill session-replayAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 75 |
|---|---|
| repo stars | ★ 325 |
| Security audit | 2 / 3 scanners passed |
| Last updated | August 2, 2026 |
| Repository | athola/claude-night-market ↗ |
What it does
Turn a Claude Code session JSONL log into an animated terminal GIF for demos, PR evidence, and tutorial embeds.
Files
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-recordingdirectly)
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 filemodified: mtime timestampfirst_user_message: preview of the first human messageturn_count: number of user turns in the sessionproject_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:
--turnsselects specific turn ranges (e.g.1-5)--showcontrols 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
--speedmultiplier - Truncates when
--max-durationis 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/charmbracelet/vhs@latest |
| Tape syntax error | Report VHS error output. Likely a string escaping bug. |
| GIF generation fails | Report VHS error. Suggest --turns 1-5 to reduce scope. |
| Scry skill not found | Report: scry plugin required for GIF rendering. |
Example
# 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.gifOutput (interactive picker):
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)Exit Criteria
- [ ] VHS tape file written to
{tempdir}/session-replay-{timestamp}.tape
before rendering is attempted
- [ ] GIF produced at the path specified in the tape's
Output
directive and its size reported (duration, dimensions)
- [ ] Temp tape file deleted after the GIF renders successfully
- [ ] If VHS is not installed, error reported with the install command
go install github.com/charmbracelet/vhs@latest rather than silently failing
- [ ] If no JSONL path is given and
list_sessions()returns empty,
user is told no sessions were found and directed to provide a path directly
Related skills
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.