Demo Video Creator
Analysis
The skill appears purpose-aligned for making demo videos, but it attaches to an existing browser session and records/automates pages, so users should review what browser profile and pages it can access before running it.
Findings (5)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
await page.goto('http://localhost/dashboard');
await button.click();
await input.fill('example query');
await page.keyboard.press('Enter');The script intentionally automates browser navigation and interactions. This is central to recording a demo, but it means actions happen automatically once the script is run.
if (fs.existsSync(outputDir)) {
fs.rmSync(outputDir, { recursive: true });
}Before saving frames, the script recursively deletes the configured output directory. The default is a dedicated ./demo-frames directory, but changing outputDir to an important path could remove existing files.
Required binaries (all must exist): none No install spec — this is an instruction-only skill.
The metadata does not declare runtime requirements, while the SKILL.md asks for FFmpeg and the code imports playwright-core. This is an under-declared setup dependency rather than evidence of hidden behavior.
Checks whether tool use, credentials, dependencies, identity, account access, or inter-agent boundaries are broader than the stated purpose.
const browser = await chromium.connectOverCDP(CONFIG.cdpEndpoint); const context = browser.contexts()[0]; const pages = context.pages();
The script attaches to an existing browser context over CDP rather than launching a fresh isolated browser. That context may contain active sessions or open pages, so the skill can operate with whatever browser privileges are already present.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
frames.push(Buffer.from(event.data, 'base64')); fs.writeFileSync(path.join(outputDir, filename), frames[i]);
The skill stores captured browser screencast frames as local JPEG files. This persistence is expected for video creation, but the frames may contain whatever was visible in the browser.
