node $SKILL_DIR/run.js /tmp/playwright-task.js
For inline code (variables are auto-injected, see below):
node $SKILL_DIR/run.js "const b = await chromium.launch(); const p = await b.newPage(); await p.goto('http://localhost:3000'); console.log(await p.title()); await b.close();"
$SKILL_DIR is where you loaded this file from. </execution>
<headless-vs-headed> Default: headless (invisible, less intrusive).Use { headless: false } when user wants to see the browser. You know when that is.
</headless-vs-headed>
BASE_URL- from PLAYWRIGHT_BASE_URL env varCI_ARGS- browser args for CI (['--no-sandbox', '--disable-setuid-sandbox'])EXTRA_HEADERS- from PW_HEADER_NAME/VALUE or PW_EXTRA_HEADERSchromium,firefox,webkit,devices- from playwright
Example:
node $SKILL_DIR/run.js "
const browser = await chromium.launch({ args: CI_ARGS });
const page = await browser.newPage();
await page.goto(BASE_URL || 'http://localhost:3000');
console.log(await page.title());
await browser.close();
"
</injected-variables>
<auto-install>
run.js auto-installs Playwright on first use. No manual setup needed.
</auto-install>
<advanced-patterns>
For network mocking, auth persistence, multi-tab, downloads, video, traces:
[API_REFERENCE.md](API_REFERENCE.md)
</advanced-patterns>