Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console.

Apache-2.0Auto-check passedTesting & QA

Install Sim Smoke

skills CLI
$ npx skills add jonathanhawkins/microduck-lab --skill sim-smoke -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jonathanhawkins/microduck-lab sim-smoke --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jonathanhawkins/microduck-lab.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/sim-smoke .claude/skills/sim-smoke && rm -rf skills-src

Use ~/.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/

Facts

Skill name
sim-smoke
GitHub stars
132
Token cost
~1.2k tokens
SKILL.md length
550 words
Files
4
Skills in repo
7
Repo updated
First seen
Licence
Apache-2.0

At a glance

Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console.

  • Works in 2 steps: Bring the stack up (idempotent;… → Screenshot the page (needs Playwright;…
  • : smoke test /sim
  • Runs JavaScript and Shell scripts from its folder; calls node, ffmpeg and curl
  • Screenshot the sim page

What it does

Sim Smoke is an agent skill from jonathanhawkins/microduck-lab. Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console. Use after touching worldserver / world / sensors / brain or the viewer's sim files, whenever "does the page actually render/stream" is the question, and to capture a picture of a scenario for a PR. Trigger on: "smoke test /sim", "screenshot the sim page", "is the world page working", "show me the room".

Its SKILL.md is about 1.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 3 other files (for example `bringup.sh`).

It sits in Testing & QA, covering QA and bug reports. It works with Playwright. The repository describes itself as: Train RL policies for the Pollen Microduck 🦆 on an ordinary Mac, no CUDA GPU, and watch them learn live in the browser. The licence is Apache-2.0.

When your agent uses it

  • : smoke test /sim
  • Screenshot the sim page
  • Is the world page working
  • Show me the room

Example prompts

  • “s sim files, whenever”
  • “smoke test /sim”
  • “screenshot the sim page”
  • “/sim-smoke”

Requirements

  • Python 3
  • Node.js
  • A Bash shell

Workflow steps

2 steps, taken from the first numbered list in SKILL.md.

  1. Bring the stack up (idempotent; --restart relaunches the lab, which
  2. Screenshot the page (needs Playwright; on the web runner it is in the

What it can do on your machine

Read from SKILL.md and the folder at commit bbf0326. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships script files (JavaScript and Shell), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • ffmpeg
    • curl
    • bash
    • npm
    • npx

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use curl, npm and npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Sim Smoke loads about 1.2k tokens when it runs. Until then it costs about 128 tokens; SKILL.md has 550 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~128
When it runs · the whole SKILL.md, loaded when a task matches
~1.2k

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.

Safety

Auto-check passed

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); files beside SKILL.md are not scanned.

SKILL.md

The full file from jonathanhawkins/microduck-lab at commit bbf0326, republished under its Apache-2.0 licence (© jonathanhawkins). 550 words, ~1,189 tokens.

Download SKILL.mdSave it as .claude/skills/sim-smoke/SKILL.md (or your agent's skills folder). This skill also uses 3 other files; get the full folder from GitHub.
name
sim-smoke
description
Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console. Use after touching world_server / world / sensors / brain or the viewer's sim files, whenever "does the page actually render/stream" is the question, and to capture a picture of a scenario for a PR. Trigger on: "smoke test /sim", "screenshot the sim page", "is the world page working", "show me the room".

Two scripts, both from the repo root:

  1. Bring the stack up (idempotent; --restart relaunches the lab, which you need after editing any lab Python — the running process holds stale code):

    bash .claude/skills/sim-smoke/bringup.sh living-room --restart

    Every launch goes through the restart-servers scripts (restart.sh, viewer.sh), which start each server in its own session so it outlives the agent shell — never start the lab with a bare nohup from an agent shell. This script used to, with setsid as the detach; macOS has none, so the lab stayed in the tool call's process group, and on 2026-09-10 the harness reaped a backgrounded call of it and took the lab down with it, hours after "lab: up". The scenario is then loaded over the lab's own API (POST /world/load), so the lab is the user's — its roster, its logs. restart.sh refuses while a teach job is training.

    Built-in scenarios: empty-floor, wall-test, living-room, playroom, pitch, pitch-2v2, pitch-3v3 (GET /scenarios lists saved ones too). Logs: microduck_local/lab-server.log, duck-viewer/viewer-server.log.

  2. Screenshot the page (needs Playwright; on the web runner it is in the global node modules and Chromium is at /opt/pw-browsers/chromium; on a Mac npm i -g playwright && npx playwright install chromium and unset CHROMIUM_PATH):

    node .claude/skills/sim-smoke/shot.mjs --out /tmp/sim.png --keys "Escape"
    node .claude/skills/sim-smoke/shot.mjs --keys "1" --out /tmp/sim-d0.png   # select duck 1

    Then Read the PNG and check: the ● live badge (frames flowing), walls/boxes/ducks present, ToF dots on the surfaces the ducks face, the inspector heatmap painted, RTF ≈ 1.00 in the top bar. The script prints the browser console minus dev-server noise — a pageerror line is a bug.

Numbers to trust over the picture: curl -s :8788/world for per-duck falls and presets, and curl -s :8788/replay/ring | tail -c 600 for the last recorded frames (once record/replay exists).

Gotchas: never pkill -f duck-lab from an agent shell (the pattern matches your own command line and kills your shell — and every other lab on the machine, including another session's scratch lab on its own port; restart.sh stops only the process listening on :8788); the container has no EGL, so do not set MUJOCO_GL=egl here; headless software GL is slower than a Mac GPU, so give the page a few seconds. If a bring-up call ever overruns the tool timeout and is backgrounded, the servers now survive its reaping — that is the point of the delegation above.

Show full SKILL.md (224 more words)Show less

A screenshot is one instant. For what happened over a minute — a fall, a stall, a scrum — use the record-world skill instead: it runs the same scenario headless under a seed and writes an mp4, a contact sheet and an events log; no browser or running lab needed.

  1. Film the page, when the thing you want is the PAGE and not the physics — the room's textures, the camera insets, the LiDAR fan, the brain's map panel. record-world renders raw MuJoCo and none of that is in it, so a clip for the README comes from here:

    node .claude/skills/sim-smoke/film.mjs --url http://localhost:63317/sim \
         --out /tmp/film --w 1280 --h 863 --reset moss-yard --skip 37000 --seconds 21
    ffmpeg -framerate 60 -t 19 -i /tmp/film/f%05d.jpg \
         -vf "setpts=PTS/4,fps=15,scale=720:-1,palettegen=max_colors=64" -y /tmp/p.png
    ffmpeg -framerate 60 -t 19 -i /tmp/film/f%05d.jpg -i /tmp/p.png \
         -lavfi "setpts=PTS/4,fps=15,scale=720:-1[x];[x][1:v]paletteuse" -y out.gif

    CDP Page.startScreencast at ~60 fps, so setpts=PTS/4 is a true 4x and not dropped frames. --reset <scenario> POSTs /world/load AFTER the page is up, so --skip is measured from t = 0 and a window scouted with record-world on the same seed lands in the same place. --h is the WINDOW, not the viewport: Chrome's own chrome eats 143 px, so 863 gives 720 — ask for 720 and you get a 2.11:1 clip where the rest of the README is 16:9. docs/media/sim-moss-tidy.gif was made with exactly the above.

© jonathanhawkins, Apache-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 3 other files in .claude/skills/sim-smoke of jonathanhawkins/microduck-lab.

  • SKILL.md
  • bringup.sh
  • film.mjs
  • shot.mjs

Open the folder on GitHubat commit bbf0326

Compare with similar skills

Sim Smoke 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.

Sim Smoke compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Sim Smoke this skilljonathanhawkins/microduck-lab132—~1.2kAutomated safety check: PassApache-2.0
Diagnose Playwright Failure as Product Bugappsmithorg/appsmith41k—~1.5kAutomated safety check: PassApache-2.0
Evidence-Driven Testingmichaelshimeles/skills1.3k1 repos~3.9kAutomated safety check: PassNone
Verify Omnigent End-to-Endomnigent-ai/omnigent11k—~1.6kAutomated safety check: PassApache-2.0
Hands On Testktnyt/cclsp675—~1.7kAutomated safety check: PassMIT
Glance TestDebugBase/glance156—~827Automated safety check: PassMIT

Similar skills

  • Investigates a stubbornly failing Playwright test as a possible product bug, using error output, screenshots, traces and server code, and writes a structured bug report.

    41k GitHub stars~1.5k tokensUpdated yesterday
    Testing & QAAuto-check passed
  • Evidence-Driven Testing

    michaelshimeles/skills

    Records an annotated screen recording of the agent testing an app hands-on, then posts the video and a results summary to the PR and tracker issue.

    1.3k GitHub starsUsed in 1 repo~3.9k tokens
    Testing & QAAuto-check passed
  • Verify Omnigent End-to-End

    omnigent-ai/omnigent

    Spins up an isolated Omnigent server, runner and mock model to prove a user-facing behavior or bug fix with recorded evidence instead of reasoning from code.

    11k GitHub stars~1.6k tokensUpdated today
    Testing & QAAuto-check passed
  • Hands On Test

    ktnyt/cclsp

    Performs manual hands-on testing of a web application using playwright-cli.

    675 GitHub stars~1.7k tokensUpdated 7 mo ago
    Testing & QAAuto-check passed
  • Glance Test

    DebugBase/glance

    Run E2E browser tests on any web application using Glance MCP.

    156 GitHub stars~827 tokensUpdated 5 mo ago
    Testing & QAAuto-check passed
  • Takes a screenshot of a running Electron desktop app through playwright-cli over remote debugging, shrinks it and shows it so you can check the UI visually.

    9.3k GitHub stars~476 tokensUpdated yesterday
    Testing & QAAuto-check passed

More from jonathanhawkins/microduck-lab

  • Record World

    jonathanhawkins/microduck-lab

    Record a /sim WORLD scenario — the living room, the playroom tidy loop, a soccer pitch, any scenario JSON — to an mp4, a captioned contact sheet and an events log, headless and under a seed, then…

    132 GitHub stars~1.2k tokensUpdated 8 days ago
    Auto-check passed
  • Render Rollout

    jonathanhawkins/microduck-lab

    Render a microduck policy rollout to video AND to a frame contact sheet with per-frame diagnostics burned in, then READ the sheet to see what the policy actually does.

    132 GitHub stars~3.2k tokensUpdated 8 days ago
    Auto-check passed
  • Tidy Trace

    jonathanhawkins/microduck-lab

    Debug the playroom tidy loop (Track 12) — trace one run state by state, see every release, landing and fall with context, and re-measure the walker facts the brain's constants rest on.

    132 GitHub stars~1.1k tokensUpdated 8 days ago
    Auto-check passed
  • Train Loop

    jonathanhawkins/microduck-lab

    Run the CLOSED training loop on a MOSS/duck policy without a human having to ask "is it done yet": launch through the lab, block until the run finishes, print the standard report and the per-term…

    132 GitHub stars~947 tokensUpdated 8 days ago
    Auto-check passed
  • Restart Servers

    jonathanhawkins/microduck-lab

    Restart the microduck dev stack — the duck-lab backend (farm, :8788) and the duck-viewer dev server (:63317).

    132 GitHub stars~1.1k tokensUpdated 8 days ago
    Auto-check passed
  • Watch Training

    jonathanhawkins/microduck-lab

    Look at what the ACTIVE teach run is practicing right now: renders the live checkpoint under the trainer's own env knobs (actuator, spawn mix, reward gates — read from the live trainer process) and…

    132 GitHub stars~525 tokensUpdated 8 days ago
    Auto-check passed

Works with

Categories

Questions about Sim Smoke

What does Sim Smoke do?

Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console. Sim Smoke is an agent skill from jonathanhawkins/microduck-lab. Look at the /sim world page the way a user would — bring up the lab in world mode and the viewer, open the page in headless Chromium, press keys, screenshot it, and READ the screenshot and console.

When should I use Sim Smoke?

Sim Smoke fits situations like: : smoke test /sim; screenshot the sim page; is the world page working; show me the room.

How do I install Sim Smoke in Claude Code?

Run `npx skills add jonathanhawkins/microduck-lab --skill sim-smoke -a claude-code`. Or copy the skill folder (.claude/skills/sim-smoke in jonathanhawkins/microduck-lab) into .claude/skills/sim-smoke in your project. Claude Code loads it when a task matches its description.

How do I install Sim Smoke in Codex?

Run `npx skills add jonathanhawkins/microduck-lab --skill sim-smoke -a codex`. Or copy the skill folder (.claude/skills/sim-smoke in jonathanhawkins/microduck-lab) into .agents/skills/sim-smoke in your project. Codex loads it when a task matches its description.

Can I use Sim Smoke in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jonathanhawkins/microduck-lab --skill sim-smoke -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/sim-smoke, .gemini/skills/sim-smoke, .github/skills/sim-smoke and .opencode/skills/sim-smoke in your project.

What does Sim Smoke need to run?

Going by SKILL.md and its folder, Sim Smoke needs JavaScript and a shell for the scripts in its folder and the command-line tools its instructions call (node, ffmpeg, curl, bash, npm and npx). Our summary lists: Python 3; Node.js; A Bash shell.

Does Sim Smoke access the network?

SKILL.md contains no URLs. Its commands use curl, npm and npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Sim Smoke safe to install?

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. Review the folder before installing.

What licence does Sim Smoke use?

Sim Smoke is published under the Apache-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Sim Smoke use?

About 1.2k tokens (SKILL.md is roughly 4.8k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Sim Smoke?

Skills that share tags, products or a category with Sim Smoke: Diagnose Playwright Failure as Product Bug (appsmithorg/appsmith, 41k stars), Evidence-Driven Testing (michaelshimeles/skills, 1.3k stars), Verify Omnigent End-to-End (omnigent-ai/omnigent, 11k stars) and Hands On Test (ktnyt/cclsp, 675 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Sim Smoke?

jonathanhawkins (a GitHub user) maintains it in jonathanhawkins/microduck-lab, which has 132 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on October 1, 2026.

Source: jonathanhawkins/microduck-lab on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.