asciinema-player
Play .cast terminal recordings in iTerm2. TRIGGERS - asciinema play, .cast file, play recording, recording playback.
Best use case
asciinema-player is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Play .cast terminal recordings in iTerm2. TRIGGERS - asciinema play, .cast file, play recording, recording playback.
Teams using asciinema-player should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/asciinema-player/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How asciinema-player Compares
| Feature / Agent | asciinema-player | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Play .cast terminal recordings in iTerm2. TRIGGERS - asciinema play, .cast file, play recording, recording playback.
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# asciinema-player
Play terminal session recordings (.cast files) in a dedicated iTerm2 window with full playback controls. Opens a **clean window** (bypasses default arrangements) for distraction-free viewing.
> **Platform**: macOS only (requires iTerm2)
> **Self-Evolving Skill**: This skill improves through use. If instructions are wrong, parameters drifted, or a workaround was needed — fix this file immediately, don't defer. Only update for real, reproducible issues.
## When to Use This Skill
Use this skill when:
- Playing back .cast recordings in iTerm2
- Reviewing session recordings without browser limitations
- Handling large recordings (>100MB) that crash browser players
- Demoing or reviewing terminal sessions
---
## Why iTerm2 Instead of Browser?
| Aspect | Browser Player | iTerm2 CLI |
| -------------------- | ----------------------- | ----------------- |
| Large files (>100MB) | Crashes (memory limit) | Streams from disk |
| Memory usage | 2-4GB for 700MB file | Minimal |
| Startup time | Slow (download + parse) | Instant |
| Native feel | Web-based | True terminal |
**Decision**: iTerm2 CLI is the only reliable method for large recordings.
---
## Requirements
| Component | Required | Installation |
| ----------------- | -------- | ---------------------------- |
| **iTerm2** | Yes | `brew install --cask iterm2` |
| **asciinema CLI** | Yes | `brew install asciinema` |
> **Note**: This skill is macOS-only. Linux users should run `asciinema play` directly in their terminal.
---
## Workflow Phases (ALL MANDATORY)
**IMPORTANT**: All phases are MANDATORY. Do NOT skip any phase. AskUserQuestion MUST be used at each decision point.
### Phase 0: Preflight Checks
**Purpose**: Verify iTerm2 and asciinema are installed.
#### Step 0.1: Check Dependencies
```bash
# Check iTerm2 is installed
ls -d /Applications/iTerm.app 2>/dev/null && echo "iTerm2: OK" || echo "iTerm2: MISSING"
# Check asciinema CLI
which asciinema && asciinema --version
```
#### Step 0.2: Report Status and Ask for Installation
**MANDATORY AskUserQuestion** if any dependency is missing:
```
Question: "Required dependencies are missing. Install them?"
Header: "Setup"
Options:
- Label: "Install all (Recommended)"
Description: "Will install: {list of missing: iTerm2, asciinema}"
- Label: "Cancel"
Description: "Abort - cannot proceed without dependencies"
```
#### Step 0.3: Install Missing Dependencies (if confirmed)
```bash
# Install iTerm2
brew install --cask iterm2
# Install asciinema CLI
brew install asciinema
```
---
### Phase 1: File Selection (MANDATORY)
**Purpose**: Discover and select the recording to play.
#### Step 1.1: Discover Recordings
```bash
# Search for .cast files in common locations
fd -e cast . --max-depth 5 2>/dev/null | head -20
# Also check common locations
ls -lh ~/scripts/tmp/*.cast 2>/dev/null
ls -lh ~/.local/share/asciinema/*.cast 2>/dev/null
ls -lh ./tmp/*.cast 2>/dev/null
```
#### Step 1.2: Get File Info
```bash
# Get file size and line count for selected file
ls -lh {file_path}
wc -l {file_path}
```
#### Step 1.3: Present File Selection (MANDATORY AskUserQuestion)
**If user provided path directly**, confirm:
```
Question: "Play this recording?"
Header: "Confirm"
Options:
- Label: "Yes, play {filename}"
Description: "{size}, {line_count} events"
- Label: "Choose different file"
Description: "Browse for other recordings"
```
**If no path provided**, discover and present options:
```
Question: "Which recording would you like to play?"
Header: "Recording"
Options:
- Label: "{filename} ({size})"
Description: "{line_count} events"
- ... (up to 4 most recent)
```
---
### Phase 2: Playback Settings (MANDATORY)
**Purpose**: Configure playback options before launching iTerm2.
#### Step 2.1: Ask Playback Speed (MANDATORY AskUserQuestion)
```
Question: "Select playback speed:"
Header: "Speed"
Options:
- Label: "2x (fast)"
Description: "Good for review, see everything"
- Label: "6x (very fast)"
Description: "Quick scan of long sessions"
- Label: "16x (ultra fast)"
Description: "Rapid skim for 700MB+ files"
- Label: "Custom"
Description: "Enter your own speed multiplier"
```
**If "Custom" selected**, ask for speed value (use Other option for numeric input).
#### Step 2.2: Ask Additional Options (MANDATORY AskUserQuestion)
```
Question: "Select additional playback options:"
Header: "Options"
multiSelect: true
Options:
- Label: "Limit idle time (2s)"
Description: "Cap pauses to 2 seconds max (recommended)"
- Label: "Loop playback"
Description: "Restart automatically when finished"
- Label: "Resize terminal"
Description: "Match terminal size to recording dimensions"
- Label: "Pause on markers"
Description: "Auto-pause at marked points (for demos)"
```
---
### Phase 3: Launch in iTerm2
**Purpose**: Open clean iTerm2 window and start playback.
#### Step 3.1: Build Command
Construct the `asciinema play` command based on user selections:
```bash
# Example with all options
asciinema play -s 6 -i 2 -l -r /path/to/recording.cast
```
**Option flags:**
- `-s {speed}` - Playback speed
- `-i 2` - Idle time limit (if selected)
- `-l` - Loop (if selected)
- `-r` - Resize terminal (if selected)
- `-m` - Pause on markers (if selected)
#### Step 3.2: Launch iTerm2 Window
Use AppleScript to open a **clean window** (bypasses default arrangements):
```bash
osascript -e 'tell application "iTerm2"
create window with default profile
tell current window
tell current session
write text "asciinema play -s {speed} {options} {file_path}"
end tell
end tell
end tell'
```
#### Step 3.3: Display Controls Reference
```markdown
## Playback Started
**Recording:** `{filename}`
**Speed:** {speed}x
**Options:** {options_summary}
### Keyboard Controls
| Key | Action |
| -------- | --------------------------------- |
| `Space` | Pause / Resume |
| `Ctrl+C` | Stop playback |
| `.` | Step forward (when paused) |
| `]` | Skip to next marker (when paused) |
### Tips
- Press `Space` to pause anytime
- Use `.` to step through frame by frame
- `Ctrl+C` to exit when done
```
---
## TodoWrite Task Template (MANDATORY)
**Load this template into TodoWrite before starting**:
```
1. [Preflight] Check iTerm2 installed
2. [Preflight] Check asciinema CLI installed
3. [Preflight] AskUserQuestion: install missing deps (if needed)
4. [Preflight] Install dependencies (if confirmed)
5. [Selection] Get file info (size, events)
6. [Selection] AskUserQuestion: confirm file selection
7. [Settings] AskUserQuestion: playback speed
8. [Settings] AskUserQuestion: additional options (multi-select)
9. [Launch] Build asciinema play command
10. [Launch] Execute AppleScript to open iTerm2
11. [Launch] Display controls reference
```
---
## CLI Options Reference
| Option | Flag | Values | Description |
| ---------- | ---- | ------------------- | -------------------------------- |
| Speed | `-s` | 0.5, 1, 2, 6, 16... | Playback speed multiplier |
| Idle limit | `-i` | seconds (e.g., 2) | Cap idle/pause time |
| Loop | `-l` | (flag) | Continuous loop |
| Resize | `-r` | (flag) | Match terminal to recording size |
| Markers | `-m` | (flag) | Auto-pause at markers |
| Quiet | `-q` | (flag) | Suppress info messages |
---
## AppleScript Reference
### Open Clean iTerm2 Window (No Default Arrangement)
```applescript
tell application "iTerm2"
create window with default profile
tell current window
tell current session
write text "your command here"
end tell
end tell
end tell
```
**Why this works**: `create window with default profile` creates a fresh window, bypassing any saved window arrangements.
### One-liner for Bash
```bash
osascript -e 'tell application "iTerm2"
create window with default profile
tell current window
tell current session
write text "asciinema play -s 6 -i 2 /path/to/file.cast"
end tell
end tell
end tell'
```
---
## Troubleshooting
### "Device not configured" error
**Cause**: Running `asciinema play` from a non-TTY context (e.g., Claude Code's Bash tool)
**Fix**: Use AppleScript to open a real iTerm2 window (this skill does this automatically)
### Recording plays too fast/slow
**Fix**: Use the speed AskUserQuestion to select appropriate speed:
- 2x for careful review
- 6x for quick scan
- 16x for ultra-fast skim of very long recordings
### iTerm2 not opening
**Cause**: iTerm2 not installed or AppleScript permissions not granted
**Fix**:
1. Install iTerm2: `brew install --cask iterm2`
2. Grant permissions: System Settings → Privacy & Security → Automation → Allow Terminal/Claude to control iTerm2
### Large file (>500MB) considerations
The CLI player streams from disk, so file size doesn't cause memory issues. However:
- Very long recordings may benefit from higher speeds (6x, 16x)
- Use `-i 2` to skip idle time
- Consider splitting very long recordings
---
## Post-Change Checklist
After modifying this skill:
1. [ ] Preflight checks verify iTerm2 and asciinema
2. [ ] AskUserQuestion phases use proper multiSelect where applicable
3. [ ] AppleScript uses heredoc wrapper for bash compatibility
4. [ ] Speed options match CLI capability (-s flag)
5. [ ] TodoWrite template matches actual workflow phases
---
## Reference Documentation
- [asciinema play Usage](https://docs.asciinema.org/manual/cli/)
- [asciinema CLI Options](https://man.archlinux.org/man/extra/asciinema/asciinema-play.1.en)
- [iTerm2 AppleScript Documentation](https://iterm2.com/documentation-scripting.html)
- [asciinema Markers](https://docs.asciinema.org/manual/cli/markers/)
## Post-Execution Reflection
After this skill completes, reflect before closing the task:
0. **Locate yourself.** — Find this SKILL.md's canonical path before editing.
1. **What failed?** — Fix the instruction that caused it.
2. **What worked better than expected?** — Promote to recommended practice.
3. **What drifted?** — Fix any script, reference, or dependency that no longer matches reality.
4. **Log it.** — Evolution-log entry with trigger, fix, and evidence.
Do NOT defer. The next invocation inherits whatever you leave behind.Related Skills
youtube-to-bookplayer
Download YouTube audio and push to BookPlayer on iPhone via USB. TRIGGERS - youtube audio, bookplayer, download youtube, push to iphone, youtube to bookplayer, audiobook from youtube, youtube bookplayer
asciinema-streaming-backup
Real-time asciinema backup to GitHub orphan branch. TRIGGERS - streaming backup, asciinema backup, session backup, recording backup.
asciinema-recorder
Record Claude Code sessions with asciinema. TRIGGERS - record session, asciinema record, capture terminal, demo recording.
asciinema-converter
Convert .cast recordings to .txt for analysis. TRIGGERS - convert cast, cast to txt, strip ANSI, batch convert.
asciinema-cast-format
Asciinema v3 .cast file format reference. TRIGGERS - cast format, asciicast spec, event codes, parse cast file.
asciinema-analyzer
Semantic analysis of asciinema recordings. TRIGGERS - analyze cast, keyword extraction, find patterns in recordings.
voice-quality-audition
Audition Kokoro TTS voices to compare quality and grade. TRIGGERS - audition voices, kokoro voices, voice comparison, tts voice, voice quality, compare voices.
settings-and-tuning
Configure TTS voices, speed, timeouts, queue depth, and bot settings. TRIGGERS - configure tts, change voice, tts speed, queue depth, tts timeout, bot config, tune settings, adjust parameters.
full-stack-bootstrap
One-time bootstrap for Kokoro TTS engine, Telegram bot, and BotFather setup. TRIGGERS - setup tts, install kokoro, botfather, bootstrap tts-tg-sync, configure telegram bot, full stack setup.
diagnostic-issue-resolver
Diagnose and resolve TTS and Telegram bot issues. TRIGGERS - tts not working, bot not responding, kokoro error, audio not playing, lock stuck, telegram bot troubleshoot, diagnose issue.
component-version-upgrade
Upgrade Kokoro model, bot dependencies, or TTS components. TRIGGERS - upgrade kokoro, update model, upgrade bot, update dependencies, version bump, component update.
clean-component-removal
Remove TTS and Telegram sync components cleanly. TRIGGERS - uninstall tts, remove telegram bot, uninstall kokoro, clean tts, teardown, component removal.