Install
openclaw skills install product-tour-captureCapture product tour video segments using browser automation and screen recording. Coordinates timing between UI interactions and narration cues for demo and walkthrough videos.
openclaw skills install product-tour-captureLast used: 2026-03-24 Memory references: 1 Status: Active Version: 1.0 · Author: Loki · Created: 2026-03-24 Proven on: Reddi Agent Protocol (14 steps, agent-protocol.reddi.tech/tour)
Captures a series of Playwright screenshots from a live web app, builds a full-screen clickable slideshow page (/tour), and deploys it. Gives any web app a polished "product tour" in one playbook run.
interface TourPlaybookInput {
appRepo: string // local path to Next.js repo
baseUrl: string // deployed app URL (https://...)
outputDir: string // public/tour/ relative to repo
tourPagePath: string // app/tour/page.tsx relative to repo
steps: TourStep[]
}
interface TourStep {
id: string // e.g. "01-landing" — used as filename
url: string // path on the app, e.g. "/"
title: string // sidebar label
caption: string // 1-sentence description shown in tour
scroll?: number // pixels to scroll after load
clickTab?: string // text of a tab to click (shadcn Tabs)
click?: string // text of element to click
fill?: string // text to fill into first textarea
wait?: number // ms to wait after fill/click
}
interface TourPlaybookOutput {
screenshotsCapured: number
screenshotsFailed: string[] // IDs of failed captures
tourUrl: string // live URL of the tour page
deployedAt: string // ISO timestamp
}
| Agent | Task | Input | Output |
|---|---|---|---|
| Orchestrator (Loki) | Receive request, construct step list, spawn agents | User brief | TourPlaybookInput |
| Capture agent (Kit/Finn) | Run Playwright, capture screenshots | TourPlaybookInput | screenshotManifest[] |
| Builder agent (Kit) | Generate /tour page from template + manifest, build, deploy | screenshotManifest[] + TourPlaybookInput | tourUrl |
| QA agent (Oli) | Spot-check screenshots (blank? matching captions?) | screenshotManifest[] | pass/warn/fail report |
Loki constructs TourPlaybookInput
→ spawn Kit (capture)
→ node scripts/capture-tour.mjs
→ returns: { captured: 14, failed: [], manifest: [...] }
→ spawn Kit (build)
→ writes app/tour/page.tsx from TOUR_STEPS template
→ npm run build → vercel deploy
→ returns: { tourUrl, httpStatus: 200 }
→ spawn Oli (QA)
→ checks each screenshot isn't blank (file size > 5KB)
→ spot-checks 3 captions match visible page content
→ returns: pass / conditional-pass / fail
Location: scripts/capture-tour.mjs in the target repo.
Key patterns:
page.goto(url, { waitUntil: 'networkidle', timeout: 20000 })page.getByRole('tab', { name: tabName }).first()page.evaluate(y => window.scrollTo(0, y), scrollY)textarea.fill(text) → button[generate].click() → waitForTimeout(ms)waitForTimeout(600) after navigation before screenshot1280 x 800 (16:10, clean for sidebar layout)Full-screen layout (no scroll):
Template component lives in app/tour/page.tsx. TOUR_STEPS is the only thing that changes per app.
getByRole('tab') — generic getByText can hit non-tab elementsfill + click + wait(7000) for mid-pipeline, wait(13000) for completenode node_modules/next/dist/bin/next build not npx next build — the .bin/next shim has path issues on Node 24 in some environmentsThis skill is a good test case for the playbook architecture because: