Browser Automation with Playwright
SkillWeb & browsingBrowser automation CLI using Playwright. Use when automating browser workflows, filling forms, clicking elements, scraping pages, or debugging web issues.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Browser Automation with Playwright skill
What this skill tells your AI
The instructions your AI receives, as published by saffron-health/opencode-gui in .agents/skills/playwright/SKILL.md and read by ahel’s review.
Use the playwright-cli.ts script bundled with this skill to automate web interactions and debug browser issues.
Run it with: tsx .agents/skills/playwright/cli.ts
When to Use
- Pages require interaction, authentication, or dynamic content loading (instead of read_web_page)
- Debugging browser automation errors (clicks not working, selectors failing, elements not found)
- Testing interactions before codifying them in source files
Commands
tsx .agents/skills/playwright/cli.ts open <url> # Launch browser and navigate to URL
tsx .agents/skills/playwright/cli.ts exec <code> # Execute Playwright TypeScript code
tsx .agents/skills/playwright/cli.ts snapshot # Save full-page PNG + HTML to tmp/playwright-screenshots/
tsx .agents/skills/playwright/cli.ts list # List open tabs
tsx .agents/skills/playwright/cli.ts close # Close the browser
The exec command provides access to: page, context, state, browser, snapshot
Example
tsx .agents/skills/playwright/cli.ts open https://example.com
tsx .agents/skills/playwright/cli.ts exec "await page.locator('button:has-text(\"Sign in\")').click()"
tsx .agents/skills/playwright/cli.ts exec "await page.fill('input[name=\"email\"]', 'user@example.com')"
tsx .agents/skills/playwright/cli.ts snapshot
tsx .agents/skills/playwright/cli.ts close
Sessions & Profiles
Use --session <name> to run multiple isolated browser instances simultaneously.
Use save <domain> after logging in to persist cookies/localStorage for automatic reuse:
tsx .agents/skills/playwright/cli.ts open https://linkedin.com
# ... manually log in ...
tsx .agents/skills/playwright/cli.ts save linkedin.com
# Next time, profile is loaded automatically
Connecting to the Extension Debug Session
Launch the extension in a background tmux session with CDP enabled:
pnpm debug:extension # starts in tmux "opencode-debug", CDP on :9222
pnpm debug:extension --stop # stops the session
Then connect Playwright to it:
tsx .agents/skills/playwright/cli.ts connect http://127.0.0.1:9222 --session extension
tsx .agents/skills/playwright/cli.ts exec "return await page.title()" --session extension
Connecting to Other Browsers
Connect to any browser exposing a CDP endpoint:
tsx .agents/skills/playwright/cli.ts connect http://127.0.0.1:9222 --session my-session
tsx .agents/skills/playwright/cli.ts exec "return await page.title()" --session my-session
Signals
- GitHub stars
- 58
- Forks
- 20
- Last commit
- Sep 2026
- Hacker News mentions
- 20
Advanced
- Catalog kind
- skill
- Gateway key
playwright-saffron-health- Source
- github.com/saffron-health/opencode-gui