verify
Drive an engine app headlessly in a pty, record a video of the whole verification, and open a summary page (video + timeline + checks) with pixel open.
Install / Use
npx skills add zenbu-labs/terminal-browser --skill verifyInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Content & MediaSupported Platforms
Tags
Our assessment of verify
verify scores 84/100 on our quality scale, 516th of 814 Content & Media skills we index.
Its SKILL.md is 4.0 KB long, split into 3 sections with 2 code examples: a solid amount of guidance for an agent.
With 3,233 GitHub stars, it is one of the more widely adopted skills in the catalogue.
Maintenance, license and trust
- The repository was last updated 8 days ago, so verify is actively maintained.
- It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
- Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands.
Automated pattern scan on 2026-09-29. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
verify compared with similar skills
All 4 of these similar skills score higher than verify; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| verify (this skill)by zenbu-labs | 84 | 3.2k | 8d ago | SKILL.md |
| siyuanby siyuan-note | 100 | 46.5k | today | MCP Server |
| algorithmic-artby anthropics | 100 | 177.9k | 6d ago | SKILL.md |
| pptxby anthropics | 100 | 177.9k | 6d ago | SKILL.md |
| designby nextlevelbuilder | 100 | 130.2k | 7d ago | SKILL.md |
Frequently asked questions
- How do I install verify?
- Run
npx skills add zenbu-labs/terminal-browser --skill verify. The install tabs above show the steps for each supported agent. - Which AI agents does verify work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is verify safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is verify still maintained?
- The repository was last updated 8 days ago, so verify is actively maintained.
Skill content
View source on GitHubname: verify description: Drive an engine app headlessly in a pty, record a video of the whole verification, and open a summary page (video + timeline + checks) with pixel open.
Apps here render via the kitty graphics protocol, so they can be verified
without a real terminal. Every verification is recorded: the harness in
tools/verify-recorder/ captures every frame the app emits, overlays your
inputs (click ripples, caption bar), encodes a video, and generates a summary
page. Do not hand-roll one-off pty scripts that only dump PNGs.
Writing a verification
Write a driver script (in /tmp is fine) using the checked-in package:
import sys
sys.path.insert(0, "<repo>/tools/verify-recorder")
from driver import Driver
from recorder import Recorder
rec = Recorder("wheel-pan", title="Wheel pan keeps cursor anchored")
d = Driver(["<repo>/engine/target/debug/typing"], rec,
cols=120, rows=32, xpixel=1200, ypixel=800)
d.pump(3.0) # pump between actions so frames arrive
rec.check("app painted", d.frame_size is not None, f"{d.frame_size}")
w, h = d.frame_size # REAL framebuffer size — always use this
d.text("hello", "type into editor") # every input takes a description
d.click(w // 2, h // 3, "select the note") # mouse coords are pixels (1016 mode)
d.wheel(w // 2, h // 2, down=True, n=3, description="scroll content")
d.pump(1.0)
rec.check("scroll redrew", len(rec.frames) > 40, f"{len(rec.frames)} frames")
rec.still("after-scroll") # named snapshot for the summary page
d.stop("ctrl+c") # or "ctrl+q" depending on the app
rec.finish() # composites markers, encodes mp4, writes summary
Driverspawns the argv in a pty (TERM=xterm-kitty, TIOCSWINSZ with pixel dims, answers the\x1b[?1016$pmouse probe), decodes kittya=T,f=32,o=zframes, and feeds them to the recorder. Node apps: spawn["npx", "tsx", "src/main.tsx", ...]withcwd=the package dir (tsx resolves tsconfig from cwd; a wrong cwd silently drops jsx config).- Input methods:
key("enter"/"esc"/"ctrl+q"/"super+shift+z"),text,click,press/drag/release(a drag needs all three —clicksends press+release together),move,wheel. Descriptions become the video caption bar and the summary timeline — write what the step is testing. rec.check(name, ok, detail)for every assertion;rec.still(name)to pin the current frame into the summary.- Give checks real assertions (frame deltas, decoded pixel colors via
recorder.png_read(rec.frames[-1]["path"])) — the summary shows pass/fail.
Ending a verification (required)
rec.finish() prints the run dir and summary path. Always end by opening
the summary in a split:
pixel open file:///tmp/verify-runs/<name>-<stamp>/summary.html
That page is the deliverable: what was tested (clickable timeline that seeks the video), the checks table, the stills, and the video of the whole run. Watch out for FAIL rows before declaring the verification passed.
Gotchas
- The engine rounds the window down to the cell grid, so the framebuffer can
be narrower than the requested winsize. Take coordinates from
d.frame_size, never from the requested pixels, or clicks land ~5% off. - Keep pumping after quit (
d.stopdoes) or the exit is never observed. - Escape must be kitty CSI-u (
d.key("esc")handles it); a bare\x1bmakes the app swallow the next escape sequence as literal text. - If a press lands on a node without handlers, the engine dispatches the click at the release position — a missed drag can silently click something else.
- Hover state only updates on move events; end interactions with a
moveif the screenshot should show hover styling. - Apps taking a file path argv need an ABSOLUTE path (their cwd is the package dir).
- Run artifacts live in
/tmp/verify-runs/<name>-<stamp>/:frames/,events.jsonl,run.json,verification.mp4,summary.html.
Related Skills
siyuan
46.5kAn open-source, privacy-first, self-hosted knowledge workspace where humans and AI agents work together 开源、隐私优先、自托管的知识工作空间,让人与智能体在此协作
algorithmic-art
177.9kCreating algorithmic art using p5.js with seeded randomness and interactive parameter exploration. Use this when users request creating art using code, generative art, algorithmic art, flow fields, or particle systems.
pptx
177.9kUse this skill any time a .pptx or .potx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx or .potx file (even if the extracted content will be used elsewhere, like in an em…
design
130.2kComprehensive design skill: brand identity, design tokens, UI styling, logo generation (55 styles, Gemini, Atlas Cloud, or MuAPI AI), corporate identity program (50 deliverables, CIP mockups), HTML presentations (Chart.js), banner design (22 styles, social/ads/web/print), icon design (15 styles, SVG…
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
