원클릭으로
playwright-interactive-sandbox
Persistent browser interaction through a normal Node.js Playwright script for fast iterative web UI debugging.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Persistent browser interaction through a normal Node.js Playwright script for fast iterative web UI debugging.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
| name | playwright-interactive-sandbox |
| description | Persistent browser interaction through a normal Node.js Playwright script for fast iterative web UI debugging. |
Set TARGET_URL to the app you are debugging. Use port 4444 and prefer 127.0.0.1 over localhost.
In this sandbox, Playwright browsers are preinstalled under /ms-playwright and PLAYWRIGHT_BROWSERS_PATH may already be set to that location. Do not assume the default cache path ~/.cache/ms-playwright.
In this Debian sandbox, use headless mode for Playwright. Do not spend attempts trying headed mode unless the environment explicitly provides an X server.
In this Debian sandbox, use headless mode for Playwright. Do not spend attempts trying headed mode unless the environment explicitly provides an X server.
In this Debian sandbox, use headless mode for Playwright. Do not spend attempts trying headed mode unless the environment explicitly provides an X server.
import { chromium } from 'playwright';
const TARGET_URL = 'http://127.0.0.1:4444';
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
viewport: { width: 1600, height: 900 }
});
const page = await context.newPage();
try {
await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });
console.log('Loaded:', await page.title());
// Add the task-specific interactions and assertions here.
await page.screenshot({ path: 'playwright-desktop.png', type: 'png' });
} finally {
await context.close().catch(() => {});
await browser.close().catch(() => {});
}
Use this pattern for the main changed flow. Keep the script focused on the exact behavior you need to verify.
If you want to confirm the Playwright browser path and installed browser payload, you can run:
echo "$PLAYWRIGHT_BROWSERS_PATH"
ls -al /ms-playwright
Example check run:
node /tmp/playwright-verify-desktop.mjs
Use a separate mobile script when the task affects responsive layout or touch behavior.
import { chromium } from 'playwright';
const TARGET_URL = 'http://127.0.0.1:4444';
const browser = await chromium.launch({ headless: true });
const context = await browser.newContext({
viewport: { width: 390, height: 844 },
isMobile: true,
hasTouch: true
});
const page = await context.newPage();
try {
await page.goto(TARGET_URL, { waitUntil: 'domcontentloaded' });
console.log('Loaded mobile:', await page.title());
// Add the task-specific interactions and assertions here.
await page.screenshot({ path: 'playwright-mobile.png', type: 'png' });
} finally {
await context.close().catch(() => {});
await browser.close().catch(() => {});
}
page.evaluate(...) may inspect or stage state, but it does not count as signoff input.Use normal Playwright screenshots for evidence and debugging.
Desktop screenshot:
await page.screenshot({ path: 'playwright-desktop.png', type: 'png' });
Mobile screenshot:
await mobilePage.screenshot({ path: 'playwright-mobile.png', type: 'png' });
Clipped screenshot for a focused region:
const clip = await page.locator('[data-testid="target"]').boundingBox();
if (clip) {
await page.screenshot({ path: 'playwright-target.png', type: 'png', clip });
}
Use viewport screenshots for signoff by default. Use full-page screenshots only as secondary debugging artifacts when needed.
Do not assume a screenshot is acceptable just because the main widget is visible. Before signoff, explicitly verify that the intended initial view matches the product requirement, using both screenshot review and numeric checks.
Web or renderer check:
console.log(
await page.evaluate(() => ({
innerWidth: window.innerWidth,
innerHeight: window.innerHeight,
clientWidth: document.documentElement.clientWidth,
clientHeight: document.documentElement.clientHeight,
scrollWidth: document.documentElement.scrollWidth,
scrollHeight: document.documentElement.scrollHeight,
canScrollX: document.documentElement.scrollWidth > document.documentElement.clientWidth,
canScrollY: document.documentElement.scrollHeight > document.documentElement.clientHeight
}))
);
Augment the numeric check with getBoundingClientRect() checks for the required visible regions in your specific UI when clipping is a realistic failure mode; document-level metrics alone are not sufficient for fixed shells.
For local web debugging, keep the app running in a persistent TTY session. Do not rely on one-shot background commands from a short-lived shell.
Build first, then start the built app on port 4444 only:
pnpm run build
PORT=4444 pnpm run start
Before page.goto(...), verify port 4444 is listening and the app responds.
4444 so the sandbox stays clean for the rest of the task.fuser is not available in this Debian sandbox. Use ss -ltnp | rg ":4444" to find the listening PID, then kill <pid>, then rerun ss -ltnp | rg ":4444" to confirm port 4444 is no longer listening.4444 so the sandbox stays clean for the rest of the task.fuser is not available in this Debian sandbox. Use ss -ltnp | rg ":4444" to find the listening PID, then kill <pid>, then rerun ss -ltnp | rg ":4444" to confirm port 4444 is no longer listening.4444 so the sandbox stays clean for the rest of the task.Cannot find module 'playwright': ensure the playwright package is installed in the current workspace and verify the import before running the Node.js script.echo $PLAYWRIGHT_BROWSERS_PATH and ls -al /ms-playwright. In this sandbox, browsers are expected at /ms-playwright, not ~/.cache/ms-playwright. Only run npx playwright install chromium if that directory is actually absent or unusable.page.goto: net::ERR_CONNECTION_REFUSED: make sure the dev server is still running in a persistent TTY session, recheck the port, and prefer http://127.0.0.1:<port>.Canonical workflow for a task. Read and follow strictly end to end while working on the task.
Primary Playwright governance skill for sandbox browser verification and deterministic end-to-end authoring or rewrite work.
This skill is strict implementation instruction, not advisory reference text. The skill treats the HTML as discovery-only input, forces interactive Playwright route/state capture, then moves through scored gates for source acceptance, implementation planning, authored UI reproduction, implementation integrity, visual verification, and adversarial proof before signoff.
Strict frontend design guardrails for building modern, minimal-visual-noise, airy, non-generic app UIs. Use whenever creating or changing frontend UI, React components, shadcn/ui themes, Tailwind styles, app layouts, or first-version product screens. This skill complements vertical/domain skills like CPQ, CRM, and similar app builders: follow the selected domain skill's workflow and layout requirements, then enforce this skill's shared visual rules for brand-aware theming, generous spacing, typography, contrast, roundedness, shadows, surface hierarchy, cardless defaults, no-sidebar defaults, and anti-pattern avoidance.
Use this skill for Customware existing-project migration tasks that move uploaded customer apps from other builders into the standard Customware stack while preserving the source product's routes, workflows, UI, UX, and styling with no intentional user-facing changes while replacing only the runtime foundation. This skill covers both `Migration build` and `Migration verify` and includes self-grading quality gates that must pass before the task can complete.
Configure-Price-Quote (CPQ) vertical skill for the Customware SPA. Defines patterns, minimum standards, layout patterns, lifecycle indicators, product configurator patterns, business rule templates, and mapping rules for transforming a DOMAIN.md into a CPQ-shaped application. Targeted at SMB customers (5-50 employees) migrating from spreadsheets and email-based quoting workflows. The prototype must feel dramatically better than Excel without feeling enterprise-overcomplicated. Patterns are defaults, not mandates — adapt them when the actual workflow deviates. Trigger signals: quoting, pricing, product configuration, calculators, guided intake forms, assessment tools, estimate builders, proposal workflows, eligibility checkers, any "fill in fields → calculate → produce a deliverable" pattern.