docs: use single quotes in all bash examples to prevent shell expansion
All `-e` arguments in bash examples now use single quotes instead of double
quotes. This prevents bash from interpreting `$`, backticks, and backslashes
inside JS code — a major pain point for agents that construct playwriter
commands programmatically.
Changes across skill docs, README, and website copies:
- **Single quotes for one-liners**: `playwriter -s 1 -e 'await page.goto("...")'`
- **Heredoc preferred for multiline**: `<<'EOF'` disables all bash expansion
- **Quoting rules summary**: explains when to use single quotes vs heredoc vs `$'...'`
- **Rewrote mistake #6**: now explains *why* double quotes break (bash `$` expansion
silently corrupts regex like `/\$[\d.]+/` and template literals)
- **Added locator-scoped snapshot section**: shows `snapshot({ locator: page.locator("main") })`
which dramatically reduces output size from ~150 lines to ~20 lines by snapshotting
only a subtree instead of the full page
- **Added single-quote tip** to README quick start and SKILL.md stub
The locator-scoped snapshot feature already existed but wasn't documented.
Discovered during real-world Cloudflare dashboard automation where full page
snapshots were dominated by 60+ sidebar navigation links.
This commit is contained in:
@@ -33,7 +33,7 @@ Other browser MCPs spawn a fresh Chrome — no logins, no extensions, instantly
|
||||
|
||||
```bash
|
||||
npm i -g playwriter
|
||||
playwriter -s 1 -e "await page.goto('https://example.com')"
|
||||
playwriter -s 1 -e 'await page.goto("https://example.com")'
|
||||
```
|
||||
|
||||
4. Install the skill so your agent knows how to use Playwriter:
|
||||
@@ -45,11 +45,13 @@ Other browser MCPs spawn a fresh Chrome — no logins, no extensions, instantly
|
||||
|
||||
```bash
|
||||
playwriter session new # creates stateful sandbox, outputs session id (e.g. 1)
|
||||
playwriter -s 1 -e "await page.goto('https://example.com')"
|
||||
playwriter -s 1 -e "console.log(await snapshot({ page }))"
|
||||
playwriter -s 1 -e "await page.locator('aria-ref=e5').click()"
|
||||
playwriter -s 1 -e 'await page.goto("https://example.com")'
|
||||
playwriter -s 1 -e 'console.log(await snapshot({ page }))'
|
||||
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'
|
||||
```
|
||||
|
||||
> **Tip:** Always use single quotes for `-e` to prevent bash from interpreting `$`, backticks, and `\` in your JS code. Use double quotes for strings inside the JS.
|
||||
|
||||
## CLI Usage
|
||||
|
||||
Each session has **isolated state**. Browser tabs are **shared** across sessions.
|
||||
@@ -61,15 +63,15 @@ playwriter session list # show sessions + state keys
|
||||
playwriter session reset <id> # fix connection issues
|
||||
|
||||
# Execute (always use -s)
|
||||
playwriter -s 1 -e "await page.goto('https://example.com')"
|
||||
playwriter -s 1 -e "await page.click('button')"
|
||||
playwriter -s 1 -e "console.log(await page.title())"
|
||||
playwriter -s 1 -e 'await page.goto("https://example.com")'
|
||||
playwriter -s 1 -e 'await page.click("button")'
|
||||
playwriter -s 1 -e 'console.log(await page.title())'
|
||||
```
|
||||
|
||||
Create your own page to avoid interference from other agents:
|
||||
|
||||
```bash
|
||||
playwriter -s 1 -e "state.myPage = await context.newPage(); await state.myPage.goto('https://example.com')"
|
||||
playwriter -s 1 -e 'state.myPage = await context.newPage(); await state.myPage.goto("https://example.com")'
|
||||
```
|
||||
|
||||
Multiline:
|
||||
@@ -216,7 +218,7 @@ npx -y traforo -p 19988 -t my-machine -- npx -y playwriter serve --token <secret
|
||||
```bash
|
||||
export PLAYWRITER_HOST=https://my-machine-tunnel.traforo.dev
|
||||
export PLAYWRITER_TOKEN=<secret>
|
||||
playwriter -s 1 -e "await page.goto('https://example.com')"
|
||||
playwriter -s 1 -e 'await page.goto("https://example.com")'
|
||||
```
|
||||
|
||||
Also works on a LAN without traforo (`PLAYWRITER_HOST=192.168.1.10`). Full guide with use cases (remote Mac mini, user support, multi-machine control): [docs/remote-access.md](./docs/remote-access.md)
|
||||
|
||||
Reference in New Issue
Block a user