PinchTab
Control browsers and access sites with PinchTab Skill: PinchTab Owner: pinchtab Summary: Control browsers and access sites with PinchTab Tags: latest:0.15.2 Version history: v0.15.2 | 2026-08-26T12:08:03.556Z | user Release v0.15.2 v0.15.1 | 2026-08-03T15:10:48.588Z | user Release v0.15.1 v0.15.0 | 2026-07-18T18:18:51.520Z | user Release v0.15.0 v0.14.1 | 2026-07-08T10:44:09.090Z | user Release v0.14.1 v0.14.0 | 2026-06-28T15:10:40.714Z | user Release v0.14.0 v0.1
Rank
62
Safety
84
Downloads
4.2k
Updated
Oct 9, 2026
Version
0.15.2
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 4.2K downloads reported by the source. Last updated 10/9/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 9, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 9, 2026
- Adoption signal
- 4.2K downloadsadoption · observed Oct 9, 2026
- Latest release
- 0.15.2release · observed Aug 26, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17d2vf1k1vrbm0e73czqqc3n9868wcg:pinchtab- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-pinchtab-pinchtab/snapshot"
Documentation
CLAWHUB
146,573 characters of source documentation, loaded on request.
Extracted files
5 files captured from the source.
SKILL.md
---
name: pinchtab
description: "Use this skill when a task needs browser automation through PinchTab: open a website, inspect interactive elements, click through flows, fill out forms, scrape page text, reuse a dedicated automation profile with user approval, export screenshots or PDFs, manage multiple browser instances, or fall back to the HTTP API when the CLI is unavailable. Prefer this skill for token-efficient browser work driven by stable accessibility refs such as `e5` and `e12`."
metadata:
openclaw:
requires:
bins:
- pinchtab
anyBins:
- google-chrome
- google-chrome-stable
- chromium
- chromium-browser
homepage: https://github.com/pinchtab/pinchtab
install:
- kind: brew
formula: pinchtab/tap/pinchtab
bins: [pinchtab]
- kind: npm
package: pinchtab
bins: [pinchtab]
---
# Browser Automation with PinchTab
CLI-first browser skill. Use `pinchtab` commands.
## Core Workflow
1. Create a session: `export PINCHTAB_SESSION=$(pinchtab session create --agent-id myagent)` — do this once before any browser command.
2. Navigate: `pinchtab nav <url> --snap` — auto-starts the local server if needed, then returns tab ID + interactive snapshot in one call.
3. Interact: `pinchtab click <ref> --snap-diff` — returns OK + only changed elements (most token-efficient).
- Click behavior: omit `--mode` for the normal click path, use `--mode dom`, or use `--mode dispatch`.
- Treat `--mode` as a broad, low-level escape hatch. Occlusion workaround is the common case: `pinchtab click <ref> --mode dom` or `pinchtab click <ref> --mode dispatch`
- `--mode` and `--humanize` are mutually exclusive.
4. For read-only observation: `pinchtab text` when you won't act on refs.
**Key optimization**: Use `--snap-diff` on `nav`, `click`, `fill`, `select`, `press`, `scroll`, `back`, `forward`, `reload` to get only added/changed/removed elements — most token-efficient for multi-step flows. Use `--snap` when you need the full snapshot (e.g., first navigation, or after major page changes). `--text` is available on `click`, `fill`, `select`, `press`, `back`, `forward`, `reload` (but NOT on `nav` or `scroll`) when you need prose content for verification (skips snap, returns page text directly). `dblclick` does not support any observation flag — run a separate `snap` after.
`--snap-diff` returns the same compact format as `snap`, but with change markers and a header showing counts:
```
# Page Title | URL | 57 nodes | +2 ~1 -0
e0:link "Home"
e5:button "Submit" [+]
e12:textbox val="updated" [~]
# removed: e99
```
`[+]` = added, `[~]` = changed, removed refs listed at end. All valid refs are shown — no need to remember previous snapshot. Do not follow with redundant `snap`; only call `text` when you need prose content.
Fallback observation (when `--snap` wasn't used):
- `pinchtab snap` — interactive elements + headings in compact format (default).
- `pinchtab snap [sel_meta.json
{
"ownerId": "kn75yfbg457nxg5e8yeh2ngtx9817sam",
"slug": "pinchtab",
"version": "0.15.2",
"publishedAt": 1787746083556
}references/agent-optimization.md
# Agent Optimization Playbook Practical guidance for running token-efficient, resilient PinchTab agent workflows. --- ## Cheapest-Path Decision Tree Choose the lowest-cost tool that satisfies your goal: ``` Need to check page state? ├─ Know the element ref already? → skip snap, use click/type directly ├─ Need to find interactive elements? → snap -i -c (cheapest) ├─ Need to read text/data only? → pinchtab text (no tree overhead) ├─ Need to find a specific element? → pinchtab find "<text>" ├─ Need full page structure? → snap --full ├─ Need to debug visually? → screenshot (use sparingly, large output) └─ Need to run a JS check? → eval (precise, zero visual overhead) ``` **Token cost ranking (cheapest → most expensive):** 1. `eval` — single value, no DOM traversal output 2. `find` — targeted element list only 3. `text` — readable text only 4. `snap` / `snap -i -c` — interactive elements, compact format 5. `snap --full` — full JSON tree 6. `screenshot` — image payload, highest token cost **Rule of thumb:** Reach for `snap -i -c` as your default snapshot. Only escalate to `screenshot` when visual layout matters (canvas or complex CSS). --- ## Diff Snapshots for Follow-Up Reads Use `--snap-diff` on action commands to get all refs plus change markers — in one call, not two. ```bash pinchtab click e5 --snap-diff # action + full refs with diff markers pinchtab fill e3 "text" --snap-diff ``` Output format shows all valid refs with change markers: ``` # Page | URL | 57 nodes | +2 ~1 -0 e0:link "Home" e5:button "Submit" [+] # added e12:textbox val="updated" [~] # changed # removed: e99 ``` **When to use `--snap-diff`:** - After clicks that update part of the UI (e.g. accordion opens, toast appears) - After form fills that show inline validation - During multi-step wizards where only one section changes - Any interaction where you need to see the result — you get all refs plus diff info **When NOT to use `--snap-diff`:** - After `nav` to a new URL (diff would mark everything as added — use `--snap` instead) - First snapshot of a session (no baseline exists — use `--snap`) **Fallback:** If you already performed an action without `--snap-diff`, use `snap -d` separately. --- ## Faster Page Loads Use `--block-images` on navigation for read-heavy tasks where images are not needed. ```bash pinchtab nav <url> --block-images --snap ``` **Best for:** Form automation, data extraction, API-heavy SPAs, and scraping workflows where image content is not required. --- ## Iframe Shortcuts Default `snap` (without `-i`) **flattens same-origin iframes** — nested iframe content appears as regular refs in the tree. Ref-based actions (`click`, `fill`, etc.) work **across iframe boundaries** without `frame` scope changes. ``` # snap already shows everything, including nested iframes: # e0:heading "Outer page" # e1:Iframe # e2:heading "Level 2" # e3:Iframe # e4:heading "Level 3" # e5:button "Deep button" ← 3 levels deep, but clickable
references/api.md
# PinchTab API Reference
Base URL for all examples: `http://localhost:9867`
> **CLI alternative:** All endpoints have CLI equivalents. Use `pinchtab help` for the full list. Examples are shown as `# CLI:` comments below.
## Agent Attribution
If an agent is calling the HTTP API directly, include `X-Agent-Id: <agent-id>` on the requests that should stay attributable to that agent.
Example:
```bash
curl -X POST /navigate \
-H 'X-Agent-Id: agent-crawl-01' \
-H 'Content-Type: application/json' \
-d '{"url": "https://pinchtab.com"}'
```
Notes:
- CLI users should prefer `pinchtab --agent-id <agent-id> ...` instead of setting the header manually
- scheduler-submitted tasks reuse their `agentId` as `X-Agent-Id` when the task is executed
- omitted `tabId` resolves by caller identity: agent sessions use a session-scoped current tab, `X-Agent-Id` uses an agent-scoped current tab when no session is present, and anonymous requests use the shared global/default tab
## Navigate
```bash
# CLI: pinchtab nav https://pinchtab.com [--new-tab] [--block-images]
curl -X POST /navigate \
-H 'Content-Type: application/json' \
-d '{"url": "https://pinchtab.com"}'
# With options: custom timeout, block images, open in new tab
curl -X POST /navigate \
-H 'Content-Type: application/json' \
-d '{"url": "https://pinchtab.com", "timeout": 60, "blockImages": true, "newTab": true}'
```
## Snapshot (accessibility tree)
```bash
# CLI: pinchtab snap [-i] [-c] [-d] [-s main] [--max-tokens 2000]
# Full tree
curl /snapshot
# Interactive elements only (buttons, links, inputs) — much smaller
curl "/snapshot?filter=interactive"
# Limit depth
curl "/snapshot?depth=5"
# Smart diff — only changes since last snapshot (massive token savings)
curl "/snapshot?diff=true"
# Text format — indented tree, ~40-60% fewer tokens than JSON
curl "/snapshot?format=text"
# Compact format — one-line-per-node, 56-64% fewer tokens than JSON (recommended)
curl "/snapshot?format=compact"
# YAML format
curl "/snapshot?format=yaml"
# Scope to CSS selector (e.g. main content only)
curl "/snapshot?selector=main"
# Truncate to ~N tokens
curl "/snapshot?maxTokens=2000"
# Combine for maximum efficiency
curl "/snapshot?format=compact&selector=main&maxTokens=2000&filter=interactive"
# Disable animations before capture
curl "/snapshot?noAnimations=true"
# Write to file
curl "/snapshot?output=file&path=/tmp/snapshot.json"
```
Returns flat JSON array of nodes with `ref`, `role`, `name`, `depth`, `value`, `nodeId`.
**Token optimization**: Use `?format=compact` for best token efficiency. Add `?filter=interactive` for action-oriented tasks (~75% fewer nodes). Use `?selector=main` to scope to relevant content. Use `?maxTokens=2000` to cap output. Use `?diff=true` on multi-step workflows to see only changes. Combine all params freely.
## Act on elements
```bash
# CLI: pinchtab click e5 / pinchtab type e12 hello / pinchtab press Enter
# Click by ref (normal click path; omit mode)
curl -X POreferences/commands.md
# CLI Commands Reference — PinchTab > **Quick tip:** Use `pinchtab help` or `pinchtab <command> --help` for full flag lists. --- ## Control Plane ### `pinchtab server` Start the PinchTab server (default port 9867). ```bash pinchtab server pinchtab server -H # visible browser for debugging pinchtab server -e ./ext # load browser extension ``` | Flag | Short | Description | |------|-------|-------------| | `--headed` | `-H` | Start browser in headed (visible) mode | | `--extension <path>` | `-e` | Load browser extension (repeatable) | | `--log-level <level>` | | Log threshold: `debug`, `info` (default), `warn` or `error` | | `--verbose` | `-v` | Show the full startup banner and log at debug level | > **Note:** Use `--headed` only when you need visual feedback (debugging, watching automation). Headless mode is more resource-efficient. ### `pinchtab daemon` Manage the user-level background service. ```bash pinchtab daemon pinchtab daemon install pinchtab daemon start pinchtab daemon stop pinchtab daemon restart ``` ### `pinchtab health` Check if the server is running and healthy. --- ## Browser Commands ### `pinchtab nav <url>` Navigate the current tracked tab to a URL, or create one when no current tab is available. This is the browser command that auto-starts the default local server when it is not already running. Without a session, `nav` uses a shared current tab — set `PINCHTAB_SESSION` first to get an isolated tab. ```bash pinchtab nav https://pinchtab.com pinchtab nav https://pinchtab.com --new-tab pinchtab nav https://pinchtab.com --snap pinchtab nav https://pinchtab.com --timeout 90 pinchtab nav https://pinchtab.com --block-images pinchtab nav https://pinchtab.com --tab <tabId> ``` | Flag | Description | |------|-------------| | `--new-tab` | Explicitly force a new tab | | `--tab <id>` | Reuse a specific tab | | `--snap` | Navigate and print an interactive compact snapshot | | `--timeout <seconds>` | Override the navigation timeout (maximum 120 seconds) | | `--block-images` | Block image loading (faster, fewer tokens) | | `--block-ads` | Block ads for this navigation | | `--print-tab-id` | Print only the tab ID | Only `http`/`https` URLs are accepted by default. `file://` (for opening a local HTML file) is rejected unless the server is started with `security.allowFileScheme` enabled — and even then it is blocked when a strict-mode domain allowlist is active, since `file://` has no host. `javascript:`, `chrome://`, and `data:` are always rejected. ### `pinchtab tab` (not `tabs`) Manage browser tabs. ```bash pinchtab tab # List all open tabs pinchtab tab <tabId> # Focus a tab by ID or 1-based index pinchtab nav <url> --new-tab # Open a new tab and navigate it pinchtab tab close <tabId> # Close specific tab ``` Unscoped commands resolve the current tab by caller identity. Session-authenticated callers use a current tab scoped to that session; `--agent-id` / `PINCHTAB_AGENT_ID` cal
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/pinchtab/skills/pinchtab",
"sourceUrl": "https://clawhub.ai/pinchtab/skills/pinchtab",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T05:53:57.504Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-pinchtab-pinchtab/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-pinchtab-pinchtab/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-09T05:53:57.504Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "4.2K downloads",
"href": "https://clawhub.ai/pinchtab/pinchtab",
"sourceUrl": "https://clawhub.ai/pinchtab/pinchtab",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-09T05:53:57.504Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "0.15.2",
"href": "https://clawhub.ai/pinchtab/pinchtab",
"sourceUrl": "https://clawhub.ai/pinchtab/pinchtab",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-26T12:08:03.556Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-pinchtab-pinchtab/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-pinchtab-pinchtab/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 0.15.2",
"description": "Release v0.15.2",
"href": "https://clawhub.ai/pinchtab/pinchtab",
"sourceUrl": "https://clawhub.ai/pinchtab/pinchtab",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-08-26T12:08:03.556Z",
"isPublic": true
}
]
}Record generated Oct 9, 2026.
