pinchtab
Use this skill when a task needs browser automation through PinchTab: open a website, inspect interactive elements, click through flows, fill out forms, scrape…
Use this skill when a task requires browser automation through PinchTab's MCP server connected to a remote browser instance. Covers navigation, element interaction, data extraction, form filling, multi-step flows, and session management via MCP tools.
$ npx -y skills add pinchtab/pinchtab --skill pinchtab-mcp --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/pinchtab-mcpContext preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when a task requires browser automation through PinchTab's MCP server connected to a remote browser instance. Covers navigation, element interaction, data extraction, form filling, multi-step flows, and session management via MCP tools.
name: pinchtab-mcp
description: "Use this skill when a task requires browser automation through PinchTab's MCP server connected to a remote browser instance. Covers navigation, element interaction, data extraction, form filling, multi-step flows, and session management via MCP tools."
metadata:
mcp:
servers:
- name: pinchtab
config:
command: pinchtab
args: ["mcp"]Use MCP tools to control a browser through the PinchTab HTTP API. The MCP server defaults to `http://127.0.0.1:9867`; for remote or containerized PinchTab instances, override with the `PINCHTAB_SERVER` env var (e.g. `PINCHTAB_SERVER=http://pinchtab:9867`).
1. **Navigate**: `pinchtab_navigate(url="https://example.com")` — auto-creates a session and tab. 2. **Observe**: `pinchtab_snapshot(interactive=true, compact=true)` — returns numbered refs like `e5`, `e12`. 3. **Interact**: `pinchtab_click(selector="e5")` — use refs from the snapshot. 4. **Verify**: `pinchtab_get_text()` or re-snapshot to confirm the action succeeded.
**Critical rule**: An element ref (`e5`, `e12`) denotes a DOM node, so the same node keeps its ref across `interactive` vs full, a `selector` scope and a `depth` limit — a filtered view is therefore sparse (`e0, e1, e6`), never assume refs are contiguous. What a ref does NOT survive is navigation to a new document: refs expire on page load, so always re-call `pinchtab_snapshot` afterwards. A ref that can no longer resolve to its node is refused with `vocab_superseded` (or `ref not found`), never acted on positionally — the tools carry each snapshot's vocabulary token forward so a filter-only re-read keeps a ref valid while a new document supersedes it.
---
Choose the cheapest tool that satisfies your goal:
| Goal | Tool | Token Cost | |------|------|------------| | Check a specific value | `pinchtab_eval(expression="document.title")` | Lowest | | Find a specific element | `pinchtab_find(query="login button")` | Low | | Read page text only | `pinchtab_get_text()` | Low | | Read a whole site to markdown | `pinchtab_scrape(url=..., preview=true)` then expand | Varies | | Find interactive elements | `pinchtab_snapshot(interactive=true, compact=true)` | Medium | | Full page structure | `pinchtab_snapshot()` | Medium-High | | Visual verification | `pinchtab_screenshot()` | Highest |
**Default observation**: `pinchtab_snapshot(interactive=true, compact=true)` — returns only interactive elements in compact format. Use this as your starting point.
---
pinchtab_navigate(url="https://example.com")
**After navigation**: Always call `pinchtab_snapshot()` before interacting. The page may have redirects, modals, or cookie banners.
---
To read a **whole site** (not one page) into markdown, use `pinchtab_scrape` — it crawls over HTTP first and browser-renders only the pages that need it (thin, blocked, or JS-only).
pinchtab_scrape(url="https://example.com", preview=true)
---
pinchtab_snapshot(interactive=true, compact=true)
Returns an accessibility tree, one element per line as `ref:role "name"`:
e0:link "About" e2:button "Sign in" e5:textbox "Search"
**Key rules**:
pinchtab_get_text()
Use when you only need to read content (articles, dashboards, results). Cheaper than snapshot when you won't interact with elements.
pinchtab_find(query="submit button")
Semantic search for elements without a full snapshot. Returns matching refs. Great for known targets.
pinchtab_screenshot()
Returns an MCP image (image/jpeg by default) — clients render it inline. The text block is always the JSON envelope `{"format": "jpeg"|"png", "annotations": [...]}`; `annotations` is `[]` by default and becomes `[{ref, role, name, tag, box: {x, y, w, h}}, ...]` with `annotate=true` so refs in the picture map back to the same selectors used by `pinchtab_click` etc. Screenshots are heavy (500KB–2MB per image), so use sparingly.
**When to use screenshots**:
**When NOT to use screenshots**:
High-performance browser automation bridge and multi-instance orchestrator with advanced stealth injection and real-time dashboard.
Use this skill when a task needs browser automation through PinchTab: open a website, inspect interactive elements, click through flows, fill out forms, scrape…
Develop and contribute to the PinchTab project. Use when working on PinchTab source code, adding features, fixing bugs, running tests, or preparing PRs.…
Run the PinchTab optimization loop (Docker, 3 blind subagents on the runner's HIGH model, 108 steps across 47 groups) against chrome, cloak, ghost-chrome, or…
Run the PinchTab stealth-score sweep against 15 bot-detection / fingerprint sites (sannysoft, rebrowser, deviceandbrowserinfo, iphey, whoer, browserscan,…