Learn Dogfood
debs-obrien/playwright-movies-app
Dogfood the learn/ course like a new user: docs site walk, fresh clone setup, then Practice and shell steps from each module.
Record silent product demos on this machine: a paced Playwright browser walkthrough of a web app or docs site, or a scripted asciinema terminal session against an API, rendered to mp4 with numbered…
$ npx skills add koolamusic/claudefiles --skill localframe -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install koolamusic/claudefiles localframe --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/koolamusic/claudefiles.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/localframe .claude/skills/localframe && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "localframe" agent skill from https://github.com/koolamusic/claudefiles/tree/main/skills/localframe into .claude/skills/localframe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "localframe", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/koolamusic/claudefiles/tree/main/skills/localframeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add koolamusic/claudefiles --skill localframe -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install koolamusic/claudefiles localframe --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/koolamusic/claudefiles.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/localframe .agents/skills/localframe && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "localframe" agent skill from https://github.com/koolamusic/claudefiles/tree/main/skills/localframe into .agents/skills/localframe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "localframe", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add koolamusic/claudefiles --skill localframe -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install koolamusic/claudefiles localframe --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/koolamusic/claudefiles.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/localframe .cursor/skills/localframe && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "localframe" agent skill from https://github.com/koolamusic/claudefiles/tree/main/skills/localframe into .cursor/skills/localframe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "localframe", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/koolamusic/claudefiles.git --path skills/localframe--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add koolamusic/claudefiles --skill localframe -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install koolamusic/claudefiles localframe --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/koolamusic/claudefiles.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/localframe .gemini/skills/localframe && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "localframe" agent skill from https://github.com/koolamusic/claudefiles/tree/main/skills/localframe into .gemini/skills/localframe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "localframe", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install koolamusic/claudefiles localframeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add koolamusic/claudefiles --skill localframe -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/koolamusic/claudefiles.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/localframe .github/skills/localframe && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "localframe" agent skill from https://github.com/koolamusic/claudefiles/tree/main/skills/localframe into .github/skills/localframe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "localframe", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add koolamusic/claudefiles --skill localframe -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install koolamusic/claudefiles localframe --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/koolamusic/claudefiles.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/localframe .opencode/skills/localframe && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "localframe" agent skill from https://github.com/koolamusic/claudefiles/tree/main/skills/localframe into .opencode/skills/localframe/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "localframe", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
localframeRecord silent product demos on this machine: a paced Playwright browser walkthrough of a web app or docs site, or a scripted asciinema terminal session against an API, rendered to mp4 with numbered…
Localframe is an agent skill from koolamusic/claudefiles. Record silent product demos on this machine: a paced Playwright browser walkthrough of a web app or docs site, or a scripted asciinema terminal session against an API, rendered to mp4 with numbered stills, a listing paragraph, and the shot list committed beside it. Gated so nothing is published until the demo key is revoked and the artefacts grep clean. Use when the user says 'record a demo of X', 'make a walkthrough video', 'screen-record the app', 'record a terminal demo of the API', 'shoot a take', or asks to…
Its SKILL.md is about 2.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts (for example `scripts/doctor.sh`, `scripts/postflight.sh` and `templates/demo.sh`).
It sits in Testing & QA, covering Static sites and blogs and Browser testing. It works with Playwright. The repository describes itself as: A minimal catalog of my favourite skills for working with claude. The licence is MIT.
5 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 8a20283. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Ships 2 files in scripts/ (Shell and JavaScript), which the agent can run.
Shell commands in SKILL.md call:
npmnpxnodeffmpegbashcurljqFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, npx and curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names these keys or tokens, usually read from environment variables:
DEMO_KEYFrom names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Localframe loads about 2.1k tokens when it runs. Until then it costs about 138 tokens; SKILL.md has 1,020 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.
The full file from koolamusic/claudefiles at commit 8a20283, republished under its MIT licence (© koolamusic). 1,020 words, ~2,055 tokens.
.claude/skills/localframe/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.Two kinds of take, one method:
The owner narrates over the result or uploads it as is. Takes are silent.
Templates and scripts live beside this file, deployed at ~/.claude/skills/localframe/. Call scripts by that full path and run them from the take directory:
| File | Use |
|---|---|
templates/walkthrough.mjs | browser shot list with pause, shot, typeSlow, scrollSlow, waitFile |
templates/demo.sh | terminal shot list with type_line, run, comment |
~/.claude/skills/localframe/scripts/doctor.sh [browser|terminal] | pre-flight tool check; installs nothing |
~/.claude/skills/localframe/scripts/postflight.sh <take> ['<revoke check>'] | the publish gate; exits 1 on any failure |
Copy a template into the take and edit it for the product. Don't build a shared library around it. Every product needs a different script.
<take>/
walkthrough.mjs | demo.sh shot list, committed so the take can be reproduced
walkthrough.mp4 | demo.mp4 the video
raw/walkthrough.webm browser original
demo.cast, demo.gif terminal originals
01-sign-in.png 02-overview.png ... one numbered still per screen; also the shot list
listing.md one paragraph describing the recording
.take/ scratch, gitignored, mode 700: secrets.env, relay files.take/secrets.env is the one place secrets live during a take. Set it to mode 0600. It holds BASE_URL, DEMO_KEY and anything else the shot list needs. The browser side writes a key it creates there. The terminal side sources it. Nothing secret goes in a command-line argument or in a committed script. Delete .take/ once postflight passes.
~/.claude/skills/localframe/scripts/doctor.sh browser or terminal from the take directory. Install what it reports missing. Its hints are exact. Note that the agg crate on crates.io is unrelated; install agg from asciinema's repo.demo-take-2026-10-10).bash demo.sh until every curl | jq line works against a real response. A jq filter written from memory is often wrong, and a mid-take failure costs a full re-shoot.mkdir -m 700 .take (the browser template also creates it), and add .take/ to the repository's .gitignore if the take lives in a repo.Pacing is the point. Hold each screen 2 to 3 seconds with pause(), type with typeSlow(), scroll with scrollSlow(), and take a shot(page, 'name') per screen. The stills number themselves.
npm i -D playwright && npx playwright install chromiumBASE_URL=https://app.example.com node walkthrough.mjsThe script closes the context first, which is when Playwright finishes the webm. It then renames the webm to raw/walkthrough.webm and converts it to H.264 walkthrough.mp4. If the walkthrough throws, the webm is still written, under Playwright's random filename in raw/, and no mp4 is made. Fix it and retake.
If this host's hosts file points the product's hostname at loopback, set RESOLVE="app.example.com <real-ip>". That maps the name inside Chromium only. Don't edit the hosts file.
The recorder can't read an inbox, so a person relays the code:
waitFile('code.txt', 'the emailed sign-in code'). It prints the exact path it's waiting on.! echo 123456 > <take>/.take/code.txt.Use a real inbox. Sign-up forms and mail providers often reject throwaway domains, and the take then stalls with no code ever sent. Relay other sign-up inputs (an organisation name, a first key) the same way, one file each.
Edit the scenes in demo.sh. Use comment lines to narrate what comes next, and run for each real command, trimmed with jq to what the viewer needs. Write secrets as \$DEMO_KEY so the typed line shows the variable name and eval supplies the value.
asciinema rec --headless --window-size 100x30 -q -c 'bash demo.sh' demo.castagg --cols 100 --rows 30 demo.cast demo.gifffmpeg -y -loglevel error -i demo.gif -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p -movflags +faststart demo.mp4Keep --window-size and --cols/--rows the same so the render matches the recording. The scale filter is required: agg's gif dimensions are often odd, and yuv420p rejects odd sizes.
A rate limit can make a good scene. Loop a request printing the remaining-quota header, stop at the first 429, then show Retry-After and the error body. First confirm the limit applies only to the demo account, so the burst doesn't affect anyone else.
In order. Nothing leaves the host until step 3 prints PASS.
Revoke the demo key. A recording that shows a key is only safe because that key no longer works.
Revoke only what the take created. Delete the rows with the disposable names. Never touch a key or record that existed before the run.
Run the gate, with a command that prints the HTTP status of a request made with the demo key:
~/.claude/skills/localframe/scripts/postflight.sh <take> 'curl -s -o /dev/null -w "%{http_code}" -H "Authorization: Bearer $DEMO_KEY" https://api.example.com/v1/me'It sources .take/secrets.env and requires 401 or 403. It greps every text artefact (casts, scripts, logs, listing, JSON) for key material, and only the revoked demo key is allowed through. It also checks that .take/ is gitignored. Add product-specific key formats to .take/patterns, one regex per line.
Look at every still and the video. Grep can't see pixels. Any key on screen other than the revoked demo key fails the take.
Delete .take/.
Walking the live product frame by frame shows exactly what a visitor sees. Past takes caught placeholder link text, a badge claiming something that wasn't true at that moment, and stale sample data. Treat every take as a review pass:
A demo of a defect that's still live isn't evidence the product works.
listing.md holds one short paragraph in product language: what the product does and what the recording shows. Don't name internal components, services or repos. Write it for someone deciding whether to watch.
listing.md and the shot list© koolamusic, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 4 other files (scripts) in skills/localframe of koolamusic/claudefiles.
Open the folder on GitHubat commit 8a20283
Localframe next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Localframe this skillkoolamusic/claudefiles | 130 | — | ~2.1k | Automated safety check: Pass | MIT | |
| Learn Dogfooddebs-obrien/playwright-movies-app | 103 | — | ~1k | Automated safety check: Notes | MIT | |
| PR Screenshotsbradygaster/squad | 3.3k | — | ~1.1k | Automated safety check: Pass | MIT | |
| Web Application Testinganthropics/skills | 180k | 51 repos | ~966 | Automated safety check: Pass | Apache-2.0 | |
| Playwright CLIsanity-io/sanity | 6.4k | 18 repos | ~1.9k | Automated safety check: Pass | MIT | |
| Write and Verify Playwright Testsappsmithorg/appsmith | 41k | — | ~2.9k | Automated safety check: Notes | Apache-2.0 |
debs-obrien/playwright-movies-app
Dogfood the learn/ course like a new user: docs site walk, fresh clone setup, then Practice and shell steps from each module.
bradygaster/squad
Capture Playwright screenshots and embed them in GitHub PR descriptions
anthropics/skills
Tests local web applications with Python Playwright scripts, checking frontend behavior, capturing screenshots and reading browser console logs.
sanity-io/sanity
Automates browser interactions for web testing, form filling, screenshots, and data extraction.
appsmithorg/appsmith
Writes a Playwright end-to-end test from a prompt, runs it against a live Appsmith deployment and retries with fixes up to three times until it passes.
github/gh-aw
Drives a real browser from the command line with playwright-cli to open pages, interact, mock requests, save state and work with Playwright tests.
koolamusic/claudefiles
A skill your agent uses when asked to explain a topic, codebase, process, or document in a specific output format — plain language or Simplified Technical English (STE, in the style of ASD-STE100…
koolamusic/claudefiles
Transform a workflow description into affordance tables showing UI and Code affordances with their wiring.
koolamusic/claudefiles
Turn the current session into a chief-of-staff thread that runs a war room of three role slots — surveyor, executor, auditor — and routes per-branch work to durable, reusable child agents.
koolamusic/claudefiles
A skill your agent uses when a user completes a phase, sprint, milestone, or meaningful unit of work and needs a retrospective.
koolamusic/claudefiles
Guide for creating effective skills. An agent skill from koolamusic/claudefiles.
koolamusic/claudefiles
Set up Caddy on a server so any local port is reachable at https://<port.<domain/, and two-letter or named labels like https://ui.<domain/ map to ports too, with certificates issued on demand and…
Works with
Categories
Record silent product demos on this machine: a paced Playwright browser walkthrough of a web app or docs site, or a scripted asciinema terminal session against an API, rendered to mp4 with numbered…. Localframe is an agent skill from koolamusic/claudefiles. Record silent product demos on this machine: a paced Playwright browser walkthrough of a web app or docs site, or a scripted asciinema terminal session against an API, rendered to mp4 with numbered stills, a listing paragraph, and the shot list committed beside it.
Localframe fits situations like: the user says record a demo of X; make a walkthrough video; screen-record the app; record a terminal demo of the API.
Run `npx skills add koolamusic/claudefiles --skill localframe -a claude-code`. Or copy the skill folder (skills/localframe in koolamusic/claudefiles) into .claude/skills/localframe in your project. Claude Code loads it when a task matches its description.
Run `npx skills add koolamusic/claudefiles --skill localframe -a codex`. Or copy the skill folder (skills/localframe in koolamusic/claudefiles) into .agents/skills/localframe in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add koolamusic/claudefiles --skill localframe -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/localframe, .gemini/skills/localframe, .github/skills/localframe and .opencode/skills/localframe in your project.
Going by SKILL.md and its folder, Localframe needs a shell and JavaScript for the scripts in its folder, the command-line tools its instructions call (npm, npx, node, ffmpeg, bash and curl) and credentials named DEMO_KEY. Our summary lists: Node.js; A Bash shell; A credential in DEMO_KEY.
SKILL.md contains no URLs. Its commands use npm, npx and curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.
Localframe is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.1k tokens (SKILL.md is roughly 8.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Localframe: Learn Dogfood (debs-obrien/playwright-movies-app, 103 stars), PR Screenshots (bradygaster/squad, 3.3k stars), Web Application Testing (anthropics/skills, 180k stars) and Playwright CLI (sanity-io/sanity, 6.4k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
koolamusic (a GitHub user) maintains it in koolamusic/claudefiles, which has 130 GitHub stars. The repository holds 15 skills in this directory. The repository was last updated on October 10, 2026.
Source: koolamusic/claudefiles on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.