원클릭으로
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.