{"id":"05b39d7c-8fd7-4156-b467-72227b4277d1","entityType":"agent","slug":"clawhub-athola-nm-scribe-session-replay","name":"session-replay","canonicalUrl":"https://www.xpersona.co/agent/clawhub-athola-nm-scribe-session-replay","canonicalPath":"/agent/clawhub-athola-nm-scribe-session-replay","generatedAt":"2026-10-10T10:45:14.591Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":null},"description":"Converts a Claude Code session JSONL file into an animated GIF terminal replay Skill: session-replay Owner: athola Summary: Converts a Claude Code session JSONL file into an animated GIF terminal replay Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:49.154Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:45.701Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:34.476Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:16.816Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.6K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scribe-session-replay","sourceUrl":"https://clawhub.ai/athola/nm-scribe-session-replay","homepage":"https://clawhub.ai/athola/skills/nm-scribe-session-replay","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/athola/nm-scribe-session-replay","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/athola/skills/nm-scribe-session-replay","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":64,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Converts a Claude Code session JSONL file into an animated GIF terminal replay Skill: session-replay Owner: athola Summary: Converts a Claude Code session JSONL"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":null},"stars":null,"forks":null,"downloads":1611,"packageName":null,"latestVersion":"1.9.19","tractionLabel":"1.6K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T06:46:14.590Z","lastCrawledAt":"2026-10-10T06:46:14.590Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T06:46:14.590Z","lastVerifiedAt":null,"highlights":[{"version":"1.9.19","createdAt":"2026-08-26T13:21:49.154Z","changelog":"Release v1.9.19","fileCount":3,"zipByteSize":3915},{"version":"1.9.17","createdAt":"2026-07-30T05:41:45.701Z","changelog":"Release v1.9.17","fileCount":3,"zipByteSize":3970},{"version":"1.9.16","createdAt":"2026-07-14T19:58:34.476Z","changelog":"Release v1.9.16","fileCount":3,"zipByteSize":3961},{"version":"1.9.14","createdAt":"2026-06-30T18:06:16.816Z","changelog":"Release v1.9.14","fileCount":3,"zipByteSize":3937},{"version":"1.9.13","createdAt":"2026-06-27T16:24:00.344Z","changelog":"Release v1.9.13","fileCount":3,"zipByteSize":3955},{"version":"1.9.12","createdAt":"2026-06-19T03:19:38.609Z","changelog":"Release v1.9.12","fileCount":3,"zipByteSize":3892},{"version":"1.0.2","createdAt":"2026-05-09T02:20:20.641Z","changelog":"Release v1.9.5","fileCount":3,"zipByteSize":3901},{"version":"1.0.1","createdAt":"2026-05-06T14:21:49.052Z","changelog":"Release v1.9.4","fileCount":2,"zipByteSize":2792}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17emme0e2m3cpf7k2jvp3a84984b8z9:nm-scribe-session-replay","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T10:45:14.590Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-athola-nm-scribe-session-replay/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":null},"readme":"Skill: session-replay\n\nOwner: athola\n\nSummary: Converts a Claude Code session JSONL file into an animated GIF terminal replay\n\nTags: latest:1.9.19\n\nVersion history:\n\nv1.9.19 | 2026-08-26T13:21:49.154Z | user\n\nRelease v1.9.19\n\nv1.9.17 | 2026-07-30T05:41:45.701Z | user\n\nRelease v1.9.17\n\nv1.9.16 | 2026-07-14T19:58:34.476Z | user\n\nRelease v1.9.16\n\nv1.9.14 | 2026-06-30T18:06:16.816Z | user\n\nRelease v1.9.14\n\nv1.9.13 | 2026-06-27T16:24:00.344Z | user\n\nRelease v1.9.13\n\nv1.9.12 | 2026-06-19T03:19:38.609Z | user\n\nRelease v1.9.12\n\nv1.0.2 | 2026-05-09T02:20:20.641Z | user\n\nRelease v1.9.5\n\nv1.0.1 | 2026-05-06T14:21:49.052Z | user\n\nRelease v1.9.4\n\nv1.0.0 | 2026-04-20T14:01:42.091Z | auto\n\nInitial release of session-replay skill for animated session playback.\n\n- Converts a Claude Code session JSONL file into an animated GIF replay showing the conversation as typed terminal output.\n- Guides the user to select a session interactively if no path is provided.\n- Steps through parsing the session, generating a VHS tape, and rendering the GIF via the scry skill.\n- Supports filters for turn ranges, visible layers, speed, and truncation.\n- Handles errors such as missing dependencies or tape syntax issues with clear user messages.\n- Suitable for demos, tutorials, and embedding video evidence in PRs or documentation.\n\nArchive index:\n\nArchive v1.9.19: 3 files, 3915 bytes\n\nFiles: skill-card.md (1952b), SKILL.md (5383b), _meta.json (144b)\n\nFile v1.9.19:SKILL.md\n\n---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.9.19:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750509154\n}\n\nFile v1.9.19:skill-card.md\n\n## Description:\n\nConverts a Claude Code session JSONL file into an animated GIF terminal replay.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to turn Claude Code session history into shareable terminal replay GIFs for demos, pull requests, tutorials, and visual evidence.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated replay GIFs can expose private Claude session history in a shareable artifact.\n\nMitigation: Use the skill only for sessions intended to be shared, prefer an explicit session path over browsing recent sessions, and inspect or redact the GIF before posting it.\n\nRisk: Including tools or thinking can reveal sensitive workflow details.\n\nMitigation: Keep thinking excluded and include tool summaries only when they are necessary for the replay purpose.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-replay)\n- [ClawHub publisher profile](https://clawhub.ai/user/athola)\n- [clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe)\n\n## Skill Output:\n\n**Output Type(s):** [files, shell commands, guidance]\n\n**Output Format:** [Animated GIF files with supporting terminal status text and command guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can include selected session turns, optional tool summaries, playback speed, maximum duration, and output path.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release metadata; artifact frontmatter reports 1.9.8)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.9.17: 3 files, 3970 bytes\n\nFiles: skill-card.md (2257b), SKILL.md (5383b), _meta.json (144b)\n\nFile v1.9.17:SKILL.md\n\n---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.9.17:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.17\",\n  \"publishedAt\": 1785390105701\n}\n\nFile v1.9.17:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session JSONL file into an animated GIF terminal replay. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and teams use this skill to turn selected Claude Code session JSONL files into shareable animated terminal GIFs for demos, pull request evidence, tutorials, and workflow highlights. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generated replays may expose secrets, private paths, customer data, incident details, or proprietary prompts from selected session files. <br>\nMitigation: Use --turns and --show to limit included content, then review the generated replay before sharing it. <br>\nRisk: The skill reads Claude Code session files and turns selected conversations into shareable GIFs. <br>\nMitigation: Install and run it only for sessions whose contents are appropriate for conversion and distribution. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-replay) <br>\n- [Publisher profile](https://clawhub.ai/user/athola) <br>\n- [metadata.openclaw homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n- [clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Shell commands, Configuration, Files, Guidance] <br>\n**Output Format:** [Markdown/plain text status and guidance with generated VHS tape and GIF file paths.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May generate a temporary VHS tape and an animated GIF; output content depends on selected session turns and visibility filters.] <br>\n\n## Skill Version(s): <br>\n1.9.17 (source: release evidence; artifact frontmatter reports 1.9.8) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.16: 3 files, 3961 bytes\n\nFiles: skill-card.md (2147b), SKILL.md (5383b), _meta.json (144b)\n\nFile v1.9.16:SKILL.md\n\n---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.9.16:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.16\",\n  \"publishedAt\": 1784059114476\n}\n\nFile v1.9.16:skill-card.md\n\n## Description: <br>\nNm Scribe Session Replay converts a Claude Code session JSONL file into an animated GIF terminal replay. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to turn past Claude Code sessions into GIF replays for pull request evidence, demos, tutorials, or internal sharing. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can expose sensitive local Claude session history by listing previews and rendering full transcripts into shareable GIFs. <br>\nMitigation: Use a narrow turn range, exclude tool output unless needed, and review the generated GIF for secrets or confidential context before sharing. <br>\nRisk: Generated session replays may carry confidential development context into pull requests, chat, or tutorials. <br>\nMitigation: Treat generated GIFs as sensitive until redacted and share them only in destinations appropriate for the underlying session content. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-replay) <br>\n- [Project homepage from metadata](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Files, Shell commands, Configuration instructions, Guidance] <br>\n**Output Format:** [GIF file path and concise text status, with optional shell command examples] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Can filter turn ranges and visible layers before rendering; GIF output should be reviewed for sensitive session content before sharing.] <br>\n\n## Skill Version(s): <br>\n1.9.16 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.14: 3 files, 3937 bytes\n\nFiles: skill-card.md (2060b), SKILL.md (5383b), _meta.json (144b)\n\nFile v1.9.14:SKILL.md\n\n---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.9.14:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.14\",\n  \"publishedAt\": 1782842776816\n}\n\nFile v1.9.14:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session JSONL file into an animated GIF terminal replay. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and operators use this skill to turn Claude Code session files into animated terminal GIFs for demos, pull request evidence, Slack updates, GitHub discussions, or tutorials. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Claude Code session files can contain private project details, prompts, tool output, or secrets that would be exposed in a rendered GIF. <br>\nMitigation: Review the source session before rendering or sharing, and use turn or content-layer filters to exclude sensitive material. <br>\nRisk: The skill reads local Claude session files and depends on local rendering tooling. <br>\nMitigation: Install only in environments where local session access and the configured scry/VHS rendering workflow are acceptable. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-replay) <br>\n- [Skill homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [files, shell commands, guidance] <br>\n**Output Format:** [Animated GIF file with terminal status text] <br>\n**Output Parameters:** [Session JSONL path with optional turn range, content layer, speed, duration, and output path settings.] <br>\n**Other Properties Related to Output:** [Requires scry GIF rendering configuration and a working VHS installation.] <br>\n\n## Skill Version(s): <br>\n1.9.14 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.13: 3 files, 3955 bytes\n\nFiles: skill-card.md (2089b), SKILL.md (5383b), _meta.json (144b)\n\nFile v1.9.13:SKILL.md\n\n---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.9.13:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.13\",\n  \"publishedAt\": 1782577440344\n}\n\nFile v1.9.13:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session JSONL file into an animated GIF terminal replay. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to turn prior Claude Code sessions into animated GIF terminal replays for demos, pull requests, tutorials, or shared workflow evidence. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill reads prior Claude session logs under ~/.claude/projects/, which may contain sensitive prompts, tool outputs, or project details. <br>\nMitigation: Choose the session deliberately and review the parsed content before rendering or sharing the replay. <br>\nRisk: Generated GIFs can expose private or irrelevant session details when full sessions, tool output, or thinking content are included. <br>\nMitigation: Limit the replay to necessary turns, exclude tools or thinking unless needed, and manually redact sensitive content before distribution. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-replay) <br>\n- [Clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Files, Shell commands, Configuration, Guidance] <br>\n**Output Format:** [Markdown guidance with file paths, command examples, and generated replay artifacts] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Generates a temporary VHS tape and delegates GIF rendering to the configured scry:vhs-recording dependency.] <br>\n\n## Skill Version(s): <br>\n1.9.13 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.9.12: 3 files, 3892 bytes\n\nFiles: skill-card.md (1956b), SKILL.md (5383b), _meta.json (144b)\n\nFile v1.9.12:SKILL.md\n\n---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.9.12:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.12\",\n  \"publishedAt\": 1781839178609\n}\n\nFile v1.9.12:skill-card.md\n\n## Description: <br>\nConverts a Claude Code session JSONL file into an animated GIF terminal replay. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and technical teams use this skill to convert selected Claude Code session logs into animated GIF terminal replays for pull requests, tutorials, workflow demos, and visual evidence. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: The skill can list and read local Claude Code session logs, which may include secrets, customer data, internal URLs, tokens, tool output, or private discussion. <br>\nMitigation: Install only if comfortable granting that access, review generated GIFs before sharing, and prefer narrow options such as --turns and --show user,assistant. <br>\n\n\n## Reference(s): <br>\n- [ClawHub release page](https://clawhub.ai/athola/nm-scribe-session-replay) <br>\n- [Clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [text, code, shell commands, configuration, files, guidance] <br>\n**Output Format:** [Markdown/text responses with command examples, generated VHS tape files, and animated GIF outputs through the scry dependency] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [May read local Claude Code JSONL session logs and should use narrow filters such as --turns and --show to limit exposed content.] <br>\n\n## Skill Version(s): <br>\n1.9.12 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.2: 3 files, 3901 bytes\n\nFiles: skill-card.md (2001b), SKILL.md (5370b), _meta.json (143b)\n\nFile v1.0.2:SKILL.md\n\n---\nname: session-replay\ndescription: |\n  Convert a Claude Code session JSONL file into an animated GIF replay showing the conversation as typed terminal output\nversion: 1.9.5\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.0.2:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.0.2\",\n  \"publishedAt\": 1778293220641\n}\n\nFile v1.0.2:skill-card.md\n\n## Description: <br>\nConvert a Claude Code session JSONL file into an animated GIF replay showing the conversation as typed terminal output. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[athola](https://clawhub.ai/user/athola) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to turn selected Claude Code session logs into shareable animated replays for demos, pull requests, tutorials, and workflow reviews. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Generated GIFs can expose anything visible in the selected Claude session, including prompts, code, file paths, tool summaries, and secrets. <br>\nMitigation: Use explicit session paths or narrow turn ranges, hide sensitive layers, and inspect the GIF before sharing it. <br>\nRisk: The skill depends on separate scribe, scry, and VHS rendering tooling. <br>\nMitigation: Confirm the required rendering configuration is available and evaluate that tooling before using the replay output. <br>\n\n\n## Reference(s): <br>\n- [ClawHub skill page](https://clawhub.ai/athola/nm-scribe-session-replay) <br>\n- [Night Market scribe plugin](https://github.com/athola/claude-night-market/tree/master/plugins/scribe) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [files, shell commands, guidance] <br>\n**Output Format:** [Animated GIF replay with terminal-style session output and status text.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires the night-market.scry:vhs-recording configuration for GIF rendering.] <br>\n\n## Skill Version(s): <br>\n1.0.2 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.1: 2 files, 2792 bytes\n\nFiles: SKILL.md (5370b), _meta.json (143b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: session-replay\ndescription: |\n  Convert a Claude Code session JSONL file into an animated GIF replay showing the conversation as typed terminal output\nversion: 1.9.4\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778077309052\n}\n\nArchive v1.0.0: 2 files, 2793 bytes\n\nFiles: SKILL.md (5370b), _meta.json (143b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: session-replay\ndescription: |\n  Convert a Claude Code session JSONL file into an animated GIF replay showing the conversation as typed terminal output\nversion: 1.8.2\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (subagent) records\n- Collapses tool calls into readable summaries\n- Wraps text at the configured column width\n- Truncates long responses at the configured row count\n\nApply filters based on user options:\n\n- `--turns` selects specific turn ranges (e.g. `1-5`)\n- `--show` controls which layers appear: `user`, `assistant`,\n  `tools`, `thinking` (thinking is excluded by default)\n\n### Step 2: Generate VHS Tape\n\nUse `scribe.tape_generator.generate_tape()` to convert the\nparsed turns into a VHS tape file. The generator:\n\n- Creates the Output directive and Set commands\n- Types user messages at 30ms/char with `$ ` prefix\n- Types assistant responses at 15ms/char\n- Types tool summaries at 100ms with two-space indent\n- Adds 1.5s pauses between turns\n- Holds the final frame for 3s\n- Scales all timing by the `--speed` multiplier\n- Truncates when `--max-duration` is exceeded\n\nWrite the tape to a temp file:\n`{tempdir}/session-replay-{timestamp}.tape`\n\n### Step 3: Render GIF\n\nInvoke `Skill(scry:vhs-recording)` with the tape file path.\nScry validates the tape, runs VHS, and produces the GIF at\nthe path specified in the Output directive.\n\nAfter successful rendering, delete the temp tape file.\n\n### Error Handling\n\n| Error | Action |\n|-------|--------|\n| VHS not installed | Report: install via `go install github.com/charmbracelet/vhs@latest` |\n| Tape syntax error | Report VHS error output. Likely a string escaping bug. |\n| GIF generation fails | Report VHS error. Suggest `--turns 1-5` to reduce scope. |\n| Scry skill not found | Report: scry plugin required for GIF rendering. |\n\n## Example\n\n```bash\n# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif\n```\n\nOutput (interactive picker):\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)\n```\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1776693702091\n}","readmeExcerpt":"Skill: session-replay Owner: athola Summary: Converts a Claude Code session JSONL file into an animated GIF terminal replay Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:49.154Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:45.701Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:34.476Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:16.816Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:","codeSnippets":[],"executableExamples":[{"language":"text","snippet":"Recent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)"},{"language":"bash","snippet":"# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif"},{"language":"text","snippet":"Recent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)"},{"language":"text","snippet":"Recent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)"},{"language":"bash","snippet":"# Pick from recent sessions interactively\n/session-replay\n\n# Replay a specific file directly\n/session-replay ~/.claude/projects/my-project/abc123.jsonl\n\n# First 5 turns only, faster playback\n/session-replay --turns 1-5 --speed 1.5\n\n# Show only the conversation, no tool calls\n/session-replay --show user,assistant --output demo.gif"},{"language":"text","snippet":"Recent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n\nPick a session [1-3]: 1\n\nParsed 42 turns from session (12 user, 15 assistant, 15 tools)\nGenerated tape: /tmp/session-replay-1711234567.tape\nRendering GIF via scry...\nDone: session-replay.gif (18s, 960x540)"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: session-replay\ndescription: Converts a Claude Code session JSONL file into an animated GIF terminal replay\nversion: 1.9.8\ntriggers:\n  - recording\n  - demo\n  - session-capture\n  - gif\n  - terminal\n  - replay\n  - creating demos or visual evidence from past sessions\nmetadata: {\"openclaw\": {\"homepage\": \"https://github.com/athola/claude-night-market/tree/master/plugins/scribe\", \"emoji\": \"\\ud83e\\udd9e\", \"requires\": {\"config\": [\"night-market.scry:vhs-recording\"]}}}\nsource: claude-night-market\nsource_plugin: scribe\n---\n\n> **Night Market Skill** — ported from [claude-night-market/scribe](https://github.com/athola/claude-night-market/tree/master/plugins/scribe). For the full experience with agents, hooks, and commands, install the Claude Code plugin.\n\n\n# Session Replay\n\nTurn a Claude Code session JSONL file into an animated GIF\nthat plays back the conversation as typed terminal output.\n\nThe skill orchestrates three steps: parse the session file\ninto turns, generate a VHS tape from those turns, and hand\noff to scry for GIF rendering.\n\n## When To Use\n\n- Creating demos of development workflows\n- Adding visual evidence to pull requests\n- Sharing session highlights to Slack or GitHub\n- Embedding session replays in tutorials\n\n## When NOT To Use\n\n- Writing blog posts from sessions (use `scribe:session-to-post`)\n- Generating API documentation (use `scribe:doc-generator`)\n- Recording live terminal commands (use `scry:vhs-recording` directly)\n\n## Integration Points\n\n| Need | Skill | What it adds |\n|------|-------|-------------|\n| GIF rendering | `scry:vhs-recording` | Converts VHS tape to animated GIF |\n| Tutorial embedding | `scribe:tech-tutorial` | Embed GIF in tutorial markdown |\n| PR preparation | `sanctum:prepare-pr` | Attach replay as PR evidence |\n\n## Workflow\n\n### Step 0: Pick a Session (when no path is provided)\n\nWhen the user invokes `/session-replay` without a path argument,\nuse `scribe.session_parser.list_sessions()` to discover recent\nsession files from `~/.claude/projects/`.\n\nThe function returns a list of `SessionInfo` objects sorted by\nmodification time (most recent first), each containing:\n\n- `path` -- full path to the .jsonl file\n- `modified` -- mtime timestamp\n- `first_user_message` -- preview of the first human message\n- `turn_count` -- number of user turns in the session\n- `project_name` -- parent directory name\n\nPresent the list to the user as a numbered menu:\n\n```\nRecent sessions:\n 1. [my-project] \"implement auth module\" (8 turns, 2h ago)\n 2. [api-server] \"fix rate limiting bug\" (3 turns, 5h ago)\n 3. [docs-site]  \"update installation guide\" (12 turns, 1d ago)\n```\n\nAsk the user to pick a number. Use the selected session's\n`path` for the remaining steps.\n\nIf `list_sessions` returns an empty list, report that no\nsessions were found and suggest providing a path directly.\n\n### Step 1: Parse the Session\n\nUse `scribe.session_parser.parse_session()` to read the JSONL\nfile. The parser:\n\n- Extracts user and assistant turns\n- Skips sidechain (s"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7d107jg9jv602h9ytsegydq184a42s\",\n  \"slug\": \"nm-scribe-session-replay\",\n  \"version\": \"1.9.19\",\n  \"publishedAt\": 1787750509154\n}"},{"path":"skill-card.md","content":"## Description:\n\nConverts a Claude Code session JSONL file into an animated GIF terminal replay.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[athola](https://clawhub.ai/user/athola)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to turn Claude Code session history into shareable terminal replay GIFs for demos, pull requests, tutorials, and visual evidence.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Generated replay GIFs can expose private Claude session history in a shareable artifact.\n\nMitigation: Use the skill only for sessions intended to be shared, prefer an explicit session path over browsing recent sessions, and inspect or redact the GIF before posting it.\n\nRisk: Including tools or thinking can reveal sensitive workflow details.\n\nMitigation: Keep thinking excluded and include tool summaries only when they are necessary for the replay purpose.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/athola/skills/nm-scribe-session-replay)\n- [ClawHub publisher profile](https://clawhub.ai/user/athola)\n- [clawdis homepage](https://github.com/athola/claude-night-market/tree/master/plugins/scribe)\n\n## Skill Output:\n\n**Output Type(s):** [files, shell commands, guidance]\n\n**Output Format:** [Animated GIF files with supporting terminal status text and command guidance]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can include selected session turns, optional tool summaries, playback speed, maximum duration, and output path.]\n\n## Skill Version(s):\n\n1.9.19 (source: server release metadata; artifact frontmatter reports 1.9.8)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Converts a Claude Code session JSONL file into an animated GIF terminal replay Skill: session-replay Owner: athola Summary: Converts a Claude Code session JSONL file into an animated GIF terminal replay Tags: latest:1.9.19 Version history: v1.9.19 | 2026-08-26T13:21:49.154Z | user Release v1.9.19 v1.9.17 | 2026-07-30T05:41:45.701Z | user Release v1.9.17 v1.9.16 | 2026-07-14T19:58:34.476Z | user Release v1.9.16 v1.9.14 | 2026-06-30T18:06:16.816Z | user Release v1.9.14 v1.9.13 | 2026-06-27T16:24:","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1045,"uniquenessScore":52,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T06:46:14.590Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T10:45:14.591Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}