# Pinchtab npm Browser control API for AI agents — Node.js SDK + CLI wrapper. ## Installation ```bash npm install pinchtab ``` or globally: ```bash npm install -g pinchtab ``` On install, the postinstall script automatically: 1. Detects your OS and CPU architecture (darwin/linux/windows, amd64/arm64) 2. Downloads the precompiled Pinchtab binary from GitHub Releases - Example: `pinchtab-darwin-amd64`, `pinchtab-linux-arm64.exe` (Windows) 3. Verifies integrity (SHA256 checksum from `checksums.txt`) 4. Stores in `~/.pinchtab/bin/0.7.1/` (version-specific to avoid conflicts) 5. Makes it executable **Requirements:** - Internet connection on first install (to download binary from GitHub Releases) - Node.js 16+ - macOS, Linux, or Windows ### Proxy Support Works with corporate proxies. Set standard environment variables: ```bash npm install --https-proxy https://proxy.company.com:8080 pinchtab # or export HTTPS_PROXY=https://user:pass@proxy.company.com:8080 npm install pinchtab ``` ## Quick Start ### Start the server ```bash pinchtab serve --port 9867 ``` ### Use the SDK ```typescript import Pinchtab from 'pinchtab'; const pinch = new Pinchtab({ port: 9867 }); // Start the server await pinch.start(); // Take a snapshot const snapshot = await pinch.snapshot({ refs: 'role' }); console.log(snapshot.html); // Click on an element await pinch.click({ ref: 'e42' }); // Lock a tab await pinch.lock({ tabId: 'tab1', timeoutMs: 5000 }); // Stop the server await pinch.stop(); ``` ## API ### `new Pinchtab(options)` Create a Pinchtab client. **Options:** - `baseUrl` (string): API base URL. Default: `http://localhost:9867` - `timeout` (number): Request timeout in ms. Default: `30000` - `port` (number): Port to run on. Default: `9867` ### `start(binaryPath?)` Start the Pinchtab server process. ### `stop()` Stop the Pinchtab server process. ### `snapshot(params?)` Take a snapshot of the current tab. **Params:** - `refs` ('role' | 'aria'): Reference system - `selector` (string): CSS selector filter - `maxTokens` (number): Token limit - `format` ('full' | 'compact'): Response format ### `click(params)` Click on an element. **Params:** - `ref` (string): Element reference - `targetId` (string): Optional target tab ID ### `lock(params)` / `unlock(params)` Lock/unlock a tab. ### `createTab(params)` Create a new tab. **Params:** - `url` (string): Tab URL - `stealth` ('light' | 'full'): Stealth level ## CLI ```bash pinchtab serve [--port PORT] pinchtab --version pinchtab --help ``` ### Shell Completion After installing the CLI globally, you can generate shell completions: ```bash # Generate and install zsh completions pinchtab completion zsh > "${fpath[1]}/_pinchtab" # Generate bash completions pinchtab completion bash > /etc/bash_completion.d/pinchtab # Generate fish completions pinchtab completion fish > ~/.config/fish/completions/pinchtab.fish ``` ### Using a Custom Binary For Docker, development, or other custom setups: ```bash PINCHTAB_BINARY_PATH=/path/to/pinchtab npx pinchtab serve ``` Or in code: ```typescript const pinch = new Pinchtab(); const binaryPath = '/custom/path/to/pinchtab'; await pinch.start(binaryPath); ``` ## Troubleshooting **Binary not found or "file not found" error:** Check if the release has binaries: ```bash # Should show pinchtab-darwin-arm64, pinchtab-linux-x64, etc. curl -s https://api.github.com/repos/pinchtab/pinchtab/releases/latest | jq '.assets[].name' ``` If no binaries (only Docker images), rebuild with a newer release: ```bash npm rebuild pinchtab ``` Or use a custom binary: ```bash export PINCHTAB_BINARY_PATH=/path/to/pinchtab npm rebuild pinchtab ``` **Behind a proxy:** ```bash export HTTPS_PROXY=https://proxy:port npm rebuild pinchtab ``` **Using a pre-built binary:** ```bash PINCHTAB_BINARY_PATH=/path/to/binary npm rebuild pinchtab ``` ## Future: OptionalDependencies Pattern (v1.0) In a future major version, we plan to migrate to the modern `optionalDependencies` pattern used by esbuild, Biome, Turbo, etc. This will split platform-specific binaries into separate npm packages (@pinchtab/cli-darwin-arm64, etc.) for zero postinstall network overhead and perfect offline support. ## License MIT