proof-video
Capture and annotate PR screenshots and videos with measured arrows, outlines, alignment guides, spacing brackets, captions, zoom, and speed cues.
Skill by openclaw
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/openclaw-proof-video
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/proof-video
What's inside
- Skill name
proof-video- Description
- Capture and annotate PR screenshots and videos with measured arrows, outlines, alignment guides, spacing brackets, captions, zoom, and speed cues.
- License
- MIT
- Instructions
- 234 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- annotations.md · references/
SKILL.md (first lines)
# Proof video
Use this developer skill for captioned Control UI recordings and native captures.
Captions are burned into an MP4; they are visual narration, not synthesized audio.
Keep the raw video as evidence, attach the polished MP4, and never commit media or
`.artifacts/` output. Inspect the entire capture for unrelated or private content
before publishing under the PR's existing authorization.
## Point out the claim
Choose marks that demonstrate the change. Use arrows to locate a control, outlines
to identify a region, alignment guides to compare edges or centers, and spacing
brackets to measure gaps. Measurements come from `locator.boundingBox()` after the
asserted layout settles; the renderer calculates the labels. Keep the reference
element first and use the same viewport, crop, scale, and edge before and after.
Keep marks sparse and labels in empty space. Preserve the raw capture.
For screenshot markup or timed video marks, read [annotations](references/annotations.md).
Both paths use the same SVG geometry renderer. Annotations are composited before
zoom, while narration stays fixed in the viewport. Re-measure and replace marks
after scrolling or layout changes; a cue describes a stationary capture, not a
live element tracker. Clear marks during movement when they would become stale.
## Standalone recording
From the repository root, save this script as `.artifacts/proof-video/record.mts`
(create the parent directory first), then run
`node --import tsx .artifacts/proof-video/record.mts`. It starts an isolated mocked
Control UI, records five captions, a real toolbar zoom, fast-forwarded startup, and an eight-second pause
at 4× speed. Every invocation allocates a fresh evidence directory.
```ts
import { chromium } from "playwright";
import { createControlUiE2eArtifactDir } from "../../ui/src/test-helpers/control-ui-e2e-artifacts.ts";
import {
installMockGateway,
resolvePlaywrightChromiumExecutablePath,
startControlUiE2eServer,
} from "../../ui/src/test-helpers/control-ui-e2e.ts";
import { startProofRecording } from "../../ui/src/test-helpers/proof-video.ts";
const dir = createControlUiE2eArtifactDir("captioned-toolbar", ".artifacts/proof-video");
const server = await startControlUiE2eServer(undefined, { source: true });
const browser = await chromium.launch({
executablePath: resolvePlaywrightChromiumExecutablePath(chromium.executablePath()),
args: ["--force-device-scale-factor=2"],
});
try {
const recording = await startProofRecording(browser, {
dir,
contextOptions: { colorScheme: "dark", locale: "en-US", reducedMotion: "reduce" },
});
const { page } = recording;
const sessions = ["Main", "Weekly planning", "Reading list"].map((label, index) => ({
key: index === 0 ? "agent:main:main" : `agent:main:proof-${index}`,
label,
displayName: label,
kind: "direct",
status: "done",
hasActiveRun: false,
updatedAt: Date.parse("2026-09-01T12:00:00Z") - index * 60000,
contextTokens: 200000,
totalTokens: 0,
model: "gpt-5.6-luna",
modelProvider: "openai",
}));
const gateway = await installMockGateway(page, {
sessionKey: "agent:main:main",
sessionArchiveFiltering: true,
methodResponses: {
"sessions.list": {
sessions,
count: sessions.length,
totalCount: sessions.length,
hasMore: false,
offset: 0,
limitApplied: 50,
nextOffset: null,
path: "",
ts: sessions[0].updatedAt,
defaults: { contextTokens: 200000, model: "gpt-5.6-luna", modelProvider: "openai" },
},
},
});
recording.caption("Open the mocked Control UI.");
recording.speed(8);
await page.goto(`${server.baseUrl}chat`);
await gateway.waitForRequest("sessions.list");
await page.getByRole("link", { name: "Weekly planning", exact: true }).waitFor();
const toolbar = page.locator(".sidebar-session-toolbar");
await toolbar.getByText("Sessions", { exact: true }).waitFor();
recording.speed(1);
await page.waitForTimeout(1500);
recording.caption("Find your conversations in the session list.");
await page.waitForTimeout(3000);
await recording.zoom(toolbar);
recording.caption("Zoom in on the session filter controls.");
await toolbar.getByRole("button", { name: "Filter & sort" }).click();
await page.locator(".sidebar-session-sort-menu").waitFor({ state: "visible" });
await page.waitForTimeout(4000);
recording.zoomOut();
recording.caption("Fast-forward an eight-second pause.");
recording.speed(4);
await page.waitForTimeout(8000);
recording.speed(1);
recording.caption("Return to the full session list.");
await page.getByRole("menuitemradio", { name: "All", exact: true }).click();
await page.waitForFunction(() =>
document
.querySelector(".sidebar-session-sort")
?.classList.contains("sidebar-session-sort--filtered"),
);
await page.waitForTimeout(3000);
console.log(JSON.stringify(await recording.finish(), null, 2));
} finally {
await browser.close();
await server.close();
}
```From openclaw/openclaw, MIT.
More from openclaw/openclaw
- 0.767score
openclaw-live-updater
openclaw
Maintain the canonical live OpenClaw main checkout, macOS LaunchAgent-managed Gateway, local macOS app, exact-head main CI, and recurring full release…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.766score
feishu-doc
openclaw
Feishu document read/write workflows.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
solid
openclaw
Write, refactor, review, or test Solid 2 UI in OpenClaw (Control UI, plugin views, Canvas hosts), including state ownership, native custom elements, overlays…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
openclaw-release-validation
openclaw
Guide human release testing on an isolated OCM copy or approved in-place gateway, collect feedback, or refresh the release campaign.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
auto-qa
openclaw
Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
plugin-sdk-impact
openclaw
Count Plugin SDK consumers across live ClawHub releases and bundled OpenClaw plugins before deprecation, removal, or behavior changes; supports public…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
discord-e2e
openclaw
Test Discord with Convex-leased QA bots: check credentials without a Gateway, exercise owned messages, or prove OpenClaw replies, files, threads, reactions…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
prototype-openclaw-tui
openclaw
Build throwaway, fixture-driven OpenClaw Clack or Pi TUI prototypes and compare multiple interactive variants side by side in tmux without running the full…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
claw-score
openclaw
Audit or refresh OpenClaw maturity scorecard docs from root taxonomy, maturity scores, and QA evidence artifacts without using maintainer discrawl data or…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
openclaw-pr-maintainer
openclaw
Review, triage, repair, or land OpenClaw issues and pull requests with current-source evidence and the native maintainer workflow.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
slack-e2e
openclaw
Test Slack with Convex-leased user OAuth or QA bots; check credentials, exercise owned messages, prove Gateway behavior, and distinguish API evidence from…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
control-ui
openclaw
Operate and troubleshoot the OpenClaw Control UI: navigate connected clients, organize sessions, build session dashboards, and handle direct or…
SkillAFreshness: A★ 392.9KClaude Code +9
Signals
- Stars
- 392,925
- Forks
- 82,585
- Open issues
- 4,992
- Last commit (this folder)
- Oct 16, 2026 (11 days ago)
- Last release
- Oct 24, 2026 (3 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/openclaw/openclaw
- Website
- openclaw.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from openclaw
- 0.767score
openclaw-live-updater
openclaw
Maintain the canonical live OpenClaw main checkout, macOS LaunchAgent-managed Gateway, local macOS app, exact-head main CI, and recurring full release…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.766score
feishu-doc
openclaw
Feishu document read/write workflows.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
openclaw-pr-maintainer
openclaw
Review, triage, repair, or land OpenClaw issues and pull requests with current-source evidence and the native maintainer workflow.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
auto-qa
openclaw
Run OpenClaw-wide autonomous QA and live/stress campaigns across independent subsystem lanes, with verified fixes and a resumable evidence report.
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
claw-score
openclaw
Audit or refresh OpenClaw maturity scorecard docs from root taxonomy, maturity scores, and QA evidence artifacts without using maintainer discrawl data or…
SkillAFreshness: A★ 392.9KClaude Code +9 - 0.764score
discord-e2e
openclaw
Test Discord with Convex-leased QA bots: check credentials without a Gateway, exercise owned messages, or prove OpenClaw replies, files, threads, reactions…
SkillAFreshness: A★ 392.9KClaude Code +9
Cite this page
proof-video skill. Agent Mart. https://agentmart.dev/skills/openclaw-proof-video (last updated 2026-10-24)