TUI Change Verification for Warp
warpdotdev/warp
Runs Warp's terminal UI for real, drives it with keystrokes and reads the rendered screen back to confirm that a change looks and behaves as intended.
Confirms that a change to PlotJuggler 4 really works in the running app by proving the rebuild, launching with real data and measuring the result.
$ npx skills add PlotJuggler/PlotJuggler --skill verify-live -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install PlotJuggler/PlotJuggler verify-live --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/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/verify-live .claude/skills/verify-live && 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 "verify-live" agent skill from https://github.com/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-live into .claude/skills/verify-live/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-live", 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/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-liveType 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 PlotJuggler/PlotJuggler --skill verify-live -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install PlotJuggler/PlotJuggler verify-live --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.claude/skills/verify-live .agents/skills/verify-live && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "verify-live" agent skill from https://github.com/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-live into .agents/skills/verify-live/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-live", 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 PlotJuggler/PlotJuggler --skill verify-live -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install PlotJuggler/PlotJuggler verify-live --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.claude/skills/verify-live .cursor/skills/verify-live && 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 "verify-live" agent skill from https://github.com/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-live into .cursor/skills/verify-live/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-live", 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/PlotJuggler/PlotJuggler.git --path .claude/skills/verify-live--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 PlotJuggler/PlotJuggler --skill verify-live -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install PlotJuggler/PlotJuggler verify-live --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.claude/skills/verify-live .gemini/skills/verify-live && 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 "verify-live" agent skill from https://github.com/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-live into .gemini/skills/verify-live/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-live", 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 PlotJuggler/PlotJuggler verify-liveInstalls 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 PlotJuggler/PlotJuggler --skill verify-live -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .github/skills && cp -r skills-src/.claude/skills/verify-live .github/skills/verify-live && 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 "verify-live" agent skill from https://github.com/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-live into .github/skills/verify-live/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-live", 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 PlotJuggler/PlotJuggler --skill verify-live -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install PlotJuggler/PlotJuggler verify-live --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/PlotJuggler/PlotJuggler.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.claude/skills/verify-live .opencode/skills/verify-live && 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 "verify-live" agent skill from https://github.com/PlotJuggler/PlotJuggler/tree/main-4.x/.claude/skills/verify-live into .opencode/skills/verify-live/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "verify-live", 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.
verify-liveConfirms that a change to PlotJuggler 4 really works in the running app by proving the rebuild, launching with real data and measuring the result.
Two recorded mistakes motivate the skill: calling a fix verified when the file never recompiled, and claiming a visual check that never happened. Step one is to prove the rebuild by running `./build.sh`, logging its output and grepping for the edited file's `.cpp.o` line; without it, an edit with no effect is expected. The skill also warns against chaining a kill command with the build in one command, which skips compiling.
The app is then launched through `./run.sh` with real data such as `example.mcap`, bounded by `timeout` in scripted checks. What to observe depends on the change type. Visual and layout changes use the app's `--screenshot` flag or the qt-widgeteer harness, with notes that GNOME Wayland blocks external window capture and that QSS can override C++ sizing. Performance claims need a number such as repaint rate, which must stay at or below 60 Hz, frame time or CPU samples, gathered with `--apitrace`, `--heaptrack` or `perf`.
4 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 346dee6. 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.
No scripts in the folder and no shell commands in SKILL.md (its code samples are bash).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
PlotJuggler Live Verification loads about 956 tokens when it runs. Until then it costs about 60 tokens; SKILL.md has 455 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); files beside SKILL.md are not scanned.
The full file from PlotJuggler/PlotJuggler at commit 346dee6, republished under its MPL-2.0 licence (© PlotJuggler). 455 words, ~956 tokens.
.claude/skills/verify-live/SKILL.md (or your agent's skills folder).The two recorded failure modes: claiming a fix works when the file never recompiled, and claiming visual verification that never happened ("I don't see any difference" round-trips). The rule: prove the rebuild, verify in the live app, and calibrate the claim to what you actually checked.
./build.sh 2>&1 | tee /tmp/build.log
grep "Building.*<YourFile>.cpp.o" /tmp/build.log # must appear, or the edit is NOT live.cpp.o line means "no effect" is expected, not mysterious.pkill …; ./build.sh — the chain exits 144 and skips compiling. Kill the app in one command, build in a separate one.If the edit "had no effect", suspect this step before suspecting the code.
./run.sh # loads only marketplace-installed extensions
./run.sh --plugin-dir ../pj-official-plugins/build/all/Release/bin # locally-built pluginsrun.sh already unsets QT_IM_MODULE (IBus segfault) and pins the bundled Qt plugins — launch through it, not the raw binary.example.mcap at the repo root; more under module test assets.timeout 20 ./run.sh … for scripted checks so nothing hangs the session.Visual / layout / widget:
pj_app's --screenshot flag, or the qt-widgeteer harness (3rdparty/qt-widgeteer, in-process WidgeteerClient).QStyleSheetStyle). Diagnose in the live app with an env-gated qWarning dump of size/min/max/iconSize + style()->className() — offscreen tests use a different style and cannot reproduce it. Fix in QSS, not C++.Performance:
./run.sh --apitrace (GL trace), ./run.sh --heaptrack (heap), perf on the live PID (see the perf-profile skill).latestAt inside a per-tick gate decompresses cold chunks — use indexAt/entryTimestamps and re-measure.Behavioral (non-visual):
| What you actually did | What you may say |
|---|---|
| Built + tests pass, never launched | "Tests pass; not verified in the live app" |
| Launched, exercised the feature, watched it | "Verified live: <what you saw>" |
| Screenshot taken | Attach it; say what it shows |
| Measured before/after | State both numbers and the setup |
| Offscreen/unit test only, for a visual change | "Logic covered by test; visual appearance unverified" |
Never imply visual verification that didn't happen — the honest weaker claim costs one sentence; the false stronger claim costs a round-trip and trust.
Building …cpp.o greppkill and ./build.sh in one command© PlotJuggler, MPL-2.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in .claude/skills/verify-live of PlotJuggler/PlotJuggler.
Open the folder on GitHubat commit 346dee6
PlotJuggler Live Verification 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 |
|---|---|---|---|---|---|---|
| PlotJuggler Live Verification this skillPlotJuggler/PlotJuggler | 6.2k | — | ~956 | Automated safety check: Pass | MPL-2.0 | |
| TUI Change Verification for Warpwarpdotdev/warp | 65k | 1 repos | ~5.5k | Automated safety check: Notes | AGPL-3.0 | |
| Acceptance Evidence for Deliverieslobehub/lobehub | 83k | — | ~9.7k | Automated safety check: Pass | Apache-2.0 | |
| Codewhale Dogfood Installcodewhale-hq/Codewhale | 41k | — | ~1.3k | Automated safety check: Pass | MIT | |
| Issue Fixmono/SkiaSharp | 5.6k | — | ~5.1k | Automated safety check: Pass | MIT | |
| Evidence-Driven Testingmichaelshimeles/skills | 1.3k | 1 repos | ~3.9k | Automated safety check: Pass | None |
warpdotdev/warp
Runs Warp's terminal UI for real, drives it with keystrokes and reads the rendered screen back to confirm that a change looks and behaves as intended.
lobehub/lobehub
Verifies a delivery end to end by driving the real product on a CLI, web, desktop or iOS Simulator surface, capturing evidence and publishing a round with the lh CLI.
codewhale-hq/Codewhale
Proves a Codewhale change in the real product: a stamped release build, an atomic local install, fresh-shell verification and manual QA that automated gates cannot cover.
mono/SkiaSharp
Fix bugs in SkiaSharp C bindings. An agent skill from mono/SkiaSharp.
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.
crazywhalecc/static-php-cli
Diagnose StaticPHP v3 failures. An agent skill from crazywhalecc/static-php-cli.
PlotJuggler/PlotJuggler
Guides CPU profiling of PlotJuggler 4 on Linux with perf: count first, record cheaply with LBR, then read per-thread, flat, flamegraph or time-window views.
PlotJuggler/PlotJuggler
Directs porting of widgets, dialogs, panels and transforms from PlotJuggler 3 to PlotJuggler 4 by lifting the original files intact and rebinding only the data paths.
PlotJuggler/PlotJuggler
Runs a gated finish-line checklist before committing a PlotJuggler PJ4 change: build proof, red-test triage, hooks, docs freshness and a diff self-review.
Works with
Categories
Confirms that a change to PlotJuggler 4 really works in the running app by proving the rebuild, launching with real data and measuring the result. Two recorded mistakes motivate the skill: calling a fix verified when the file never recompiled, and claiming a visual check that never happened.o` line; without it, an edit with no effect is expected.
PlotJuggler Live Verification fits situations like: confirming a widget or layout change in PlotJuggler before calling it fixed; investigating an edit that seems to have no effect after rebuilding; measuring a performance change with repaint rate or frame time.
Run `npx skills add PlotJuggler/PlotJuggler --skill verify-live -a claude-code`. Or copy the skill folder (.claude/skills/verify-live in PlotJuggler/PlotJuggler) into .claude/skills/verify-live in your project. Claude Code loads it when a task matches its description.
Run `npx skills add PlotJuggler/PlotJuggler --skill verify-live -a codex`. Or copy the skill folder (.claude/skills/verify-live in PlotJuggler/PlotJuggler) into .agents/skills/verify-live 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 PlotJuggler/PlotJuggler --skill verify-live -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/verify-live, .gemini/skills/verify-live, .github/skills/verify-live and .opencode/skills/verify-live in your project.
SKILL.md names no scripts, command-line tools or credentials: PlotJuggler Live Verification is instructions for the agent only. Our summary lists: A PlotJuggler 4 source checkout with `build.sh` and `run.sh`; Test data such as `example.mcap` from the repository root.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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. Review the folder before installing.
PlotJuggler Live Verification is published under the MPL-2.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 956 tokens (SKILL.md is roughly 3.8k 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 PlotJuggler Live Verification: TUI Change Verification for Warp (warpdotdev/warp, 65k stars), Acceptance Evidence for Deliveries (lobehub/lobehub, 83k stars), Codewhale Dogfood Install (codewhale-hq/Codewhale, 41k stars) and Issue Fix (mono/SkiaSharp, 5.6k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
PlotJuggler (a GitHub organization) maintains it in PlotJuggler/PlotJuggler, which has 6,233 GitHub stars. The repository holds 4 skills in this directory. The repository was last updated on October 1, 2026.
Source: PlotJuggler/PlotJuggler on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.