ワンクリックで
vhs
Techniques for creating deterministic terminal demo screencasts with VHS
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Techniques for creating deterministic terminal demo screencasts with VHS
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use this when building a Bun (bun.lock) project with Nix. Covers bun2nix, the bun.nix dependency workflow, the bun --compile top-level-await pitfall, and a CI drift check.
Use this when setting up CI for a GitHub repository — offers GitHub Actions or Vira depending on the project
Use this when a flake's `nix develop` / `direnv allow` / `nix flake archive` is slow on a fresh checkout (the "first time takes 10 minutes" complaint). Diagnoses where the time actually lives and how to shrink the flake.lock input graph without changing build outputs.
Write a programming essay or blog post in the voice of the canon — Spolsky, Yegge, Graham, Mickens, Dijkstra, Brooks, Nystrom, Kleppmann, patio11. Invoke when the user wants to argue an idea about software, architecture, languages, or the craft — not a debugging war story (use debugging-story for that), not a tutorial, not a release note. The audience is working developers worldwide with taste and strong opinions of their own.
Use this when diagnosing or fixing a user's Nix installation — checks flakes, version, caches, max-jobs, direnv, rosetta, trusted-users, and shell config
Conventions for building Leptos CSR apps with Nix (crane + Trunk).
| name | vhs |
| description | Techniques for creating deterministic terminal demo screencasts with VHS |
VHS records terminal sessions by scripting keystrokes in .tape files and rendering them as GIFs. Use Wait+Screen /regex/ to synchronize with interactive TUI elements instead of fragile fixed Sleep durations. VHS can only detect text appearing on screen, not disappearing — keep this constraint in mind when designing wait conditions.
When recording an LLM-powered TUI, detecting when a response is complete requires special care. Naive approaches all fail:
| Approach | Why it fails |
|---|---|
Fixed Sleep | Not deterministic |
Unique marker in prompt (XYZENDXYZ) | Appears in the typed prompt on screen — Wait+Screen matches immediately |
Math formula (347+829 → wait for 1176) | LLM computes the answer in its visible thinking trace before the response finishes |
Wait+Line /^MARKER$/ | TUI padding/borders prevent exact line matching |
Hide + type marker | Hide only hides VHS command log, not terminal content |
Ask the LLM to concatenate two words and print the result. The prompt contains both words separately but never the combined string:
Type "briefly explain this repo. Then print ALFA concatenated with BRAVO."
Enter
Wait+Screen /ALFABRAVO/
Why it works:
...ALFA concatenated with BRAVO — no ALFABRAVOALFABRAVOALFABRAVO — the only matchUse uncommon words (ALFA, BRAVO, ZULU) so the combined form can't appear accidentally.
ffmpeg -i demo.gif -vf "select='eq(n\,100)'" -vsync vfr /tmp/frame.png
flake.nix for the demo (e.g., doc/demo/flake.nix) so anyone can reproduce the recording with nix run.vhs "${./.}/demo.tape") — don't cd into the store, as it may contain a flake.nix that confuses nix run inside the recording.