|
Download docs/reference/config.md from AUXteam/pinch: direct link, hf CLI and curl.
- Browser
- Download file 8.27 kB
-
https://huggingface.co/spaces/AUXteam/pinch/resolve/main/docs/reference/config.md
- Command line
-
hf download hf://spaces/AUXteam/pinch/docs/reference/config.md
-
curl -L -o config.md https://huggingface.co/spaces/AUXteam/pinch/resolve/main/docs/reference/config.md
8.27 kB
| # Config | |
| `pinchtab config` is the CLI entry point for creating, inspecting, validating, and editing PinchTab's config file. | |
| Use this page as the command and schema reference. Broader deployment patterns can move to a separate guide later. | |
| For security posture, token usage, sensitive endpoint policy, and IDPI guidance, see [Security](../guides/security.md). | |
| ## Commands | |
| ### `pinchtab config` | |
| Opens the interactive config overview/editor. | |
| It currently exposes these high-signal settings directly: | |
| - `multiInstance.strategy` | |
| - `multiInstance.allocationPolicy` | |
| - `instanceDefaults.stealthLevel` | |
| - `instanceDefaults.tabEvictionPolicy` | |
| It also shows: | |
| - the active config file path | |
| - the dashboard URL when the server is running | |
| - the masked server token | |
| - a `Copy token` action for clipboard/manual copy | |
| ```bash | |
| pinchtab config | |
| ``` | |
| ### `pinchtab config init` | |
| Creates a default config file at the standard user config location. | |
| ```bash | |
| pinchtab config init | |
| ``` | |
| Current behavior note: | |
| - `config init` writes to the default config path | |
| - it does not currently switch to a custom `PINCHTAB_CONFIG` target path | |
| ### `pinchtab config show` | |
| Shows the effective runtime configuration after applying: | |
| ```text | |
| env vars -> config file -> built-in defaults | |
| ``` | |
| ```bash | |
| pinchtab config show | |
| ``` | |
| ### `pinchtab config path` | |
| Prints the config file path PinchTab will read. | |
| ```bash | |
| pinchtab config path | |
| ``` | |
| ### `pinchtab config validate` | |
| Validates the current config file. | |
| ```bash | |
| pinchtab config validate | |
| ``` | |
| ### `pinchtab config get` | |
| Reads a single dotted-path value from the config file. | |
| ```bash | |
| pinchtab config get server.port | |
| pinchtab config get instanceDefaults.mode | |
| pinchtab config get security.attach.allowHosts | |
| ``` | |
| ### `pinchtab config set` | |
| Sets a single dotted-path value in the config file. | |
| ```bash | |
| pinchtab config set server.port 8080 | |
| pinchtab config set instanceDefaults.mode headed | |
| pinchtab config set multiInstance.strategy explicit | |
| ``` | |
| ### `pinchtab config patch` | |
| Applies a JSON patch object to the config file. | |
| ```bash | |
| pinchtab config patch '{"server":{"port":"8080"}}' | |
| pinchtab config patch '{"instanceDefaults":{"mode":"headed","maxTabs":50}}' | |
| ``` | |
| ## Config Priority | |
| PinchTab loads configuration in this order: | |
| 1. environment variables | |
| 2. config file | |
| 3. built-in defaults | |
| The supported env vars are: | |
| - `PINCHTAB_CONFIG` — path to config file | |
| - `PINCHTAB_TOKEN` — auth token (overrides config file) | |
| Everything else is configured in `config.json`. For CLI targeting a remote server, use the `--server` flag. | |
| For the common local workflow, prefer the interactive `pinchtab config` screen for everyday changes and use `get`, `set`, or `patch` when you need an exact scripted edit. | |
| ## Config File Location | |
| Default location by OS: | |
| - macOS: `~/Library/Application Support/pinchtab/config.json` | |
| - Linux: `~/.config/pinchtab/config.json` (respects `$XDG_CONFIG_HOME` if set) | |
| - Windows: `%APPDATA%\pinchtab\config.json` | |
| Legacy fallback: | |
| - if `~/.pinchtab/config.json` exists and the newer location does not, PinchTab still uses the legacy location | |
| Override the read path with: | |
| ```bash | |
| export PINCHTAB_CONFIG=/path/to/config.json | |
| ``` | |
| ## Config Shape | |
| Current nested config shape: | |
| ```json | |
| { | |
| "server": { | |
| "port": "9867", | |
| "bind": "127.0.0.1", | |
| "token": "your-secret-token", | |
| "stateDir": "/path/to/state" | |
| }, | |
| "browser": { | |
| "version": "144.0.7559.133", | |
| "binary": "/path/to/chrome", | |
| "extraFlags": "", | |
| "extensionPaths": [] | |
| }, | |
| "instanceDefaults": { | |
| "mode": "headless", | |
| "maxTabs": 20, | |
| "maxParallelTabs": 0, | |
| "stealthLevel": "light", | |
| "tabEvictionPolicy": "close_lru", | |
| "blockAds": false, | |
| "blockImages": false, | |
| "blockMedia": false, | |
| "noRestore": false, | |
| "noAnimations": false | |
| }, | |
| "security": { | |
| "allowEvaluate": false, | |
| "allowMacro": false, | |
| "allowScreencast": false, | |
| "allowDownload": false, | |
| "allowUpload": false, | |
| "attach": { | |
| "enabled": false, | |
| "allowHosts": ["127.0.0.1", "localhost", "::1"], | |
| "allowSchemes": ["ws", "wss"] | |
| }, | |
| "idpi": { | |
| "enabled": true, | |
| "allowedDomains": ["127.0.0.1", "localhost", "::1"], | |
| "strictMode": true, | |
| "scanContent": true, | |
| "wrapContent": true, | |
| "customPatterns": [] | |
| } | |
| }, | |
| "profiles": { | |
| "baseDir": "/path/to/profiles", | |
| "defaultProfile": "default" | |
| }, | |
| "multiInstance": { | |
| "strategy": "always-on", | |
| "allocationPolicy": "fcfs", | |
| "instancePortStart": 9868, | |
| "instancePortEnd": 9968, | |
| "restart": { | |
| "maxRestarts": 20, | |
| "initBackoffSec": 2, | |
| "maxBackoffSec": 60, | |
| "stableAfterSec": 300 | |
| } | |
| }, | |
| "timeouts": { | |
| "actionSec": 30, | |
| "navigateSec": 60, | |
| "shutdownSec": 10, | |
| "waitNavMs": 1000 | |
| }, | |
| "scheduler": { | |
| "enabled": false, | |
| "strategy": "fair-fifo", | |
| "maxQueueSize": 1000, | |
| "maxPerAgent": 100, | |
| "maxInflight": 20, | |
| "maxPerAgentInflight": 10, | |
| "resultTTLSec": 300, | |
| "workerCount": 4 | |
| } | |
| } | |
| ``` | |
| ## Sections | |
| | Section | Purpose | | |
| | --- | --- | | |
| | `server` | HTTP server settings | | |
| | `browser` | Chrome executable and launch wiring | | |
| | `instanceDefaults` | Default behavior for managed instances | | |
| | `security` | Sensitive feature gates, attach policy, and IDPI | | |
| | `profiles` | Profile storage defaults | | |
| | `multiInstance` | Strategy, allocation, instance port range, and restart policy | | |
| | `timeouts` | Runtime timeouts | | |
| | `scheduler` | Optional task queue (see [Scheduler](./scheduler.md)) | | |
| ## Common Examples | |
| ### Headed Mode | |
| ```json | |
| { | |
| "instanceDefaults": { | |
| "mode": "headed" | |
| } | |
| } | |
| ``` | |
| ### Network Bind With Token | |
| ```bash | |
| pinchtab config set server.bind 0.0.0.0 | |
| pinchtab config set server.token secret | |
| pinchtab | |
| ``` | |
| ### Custom Instance Port Range | |
| ```json | |
| { | |
| "server": { | |
| "port": "8080" | |
| }, | |
| "multiInstance": { | |
| "instancePortStart": 8100, | |
| "instancePortEnd": 8200 | |
| } | |
| } | |
| ``` | |
| ### Tab Eviction Policy | |
| ```json | |
| { | |
| "instanceDefaults": { | |
| "maxTabs": 10, | |
| "tabEvictionPolicy": "close_lru" | |
| } | |
| } | |
| ``` | |
| ### Attach Policy | |
| ```json | |
| { | |
| "security": { | |
| "attach": { | |
| "enabled": true, | |
| "allowHosts": ["127.0.0.1", "localhost", "chrome.internal"], | |
| "allowSchemes": ["ws", "wss"] | |
| } | |
| } | |
| } | |
| ``` | |
| ### IDPI Policy | |
| ```json | |
| { | |
| "security": { | |
| "idpi": { | |
| "enabled": true, | |
| "allowedDomains": ["example.com", "*.example.com"], | |
| "strictMode": true, | |
| "scanContent": true, | |
| "wrapContent": true, | |
| "customPatterns": [] | |
| } | |
| } | |
| } | |
| ``` | |
| This is policy only. The actual `cdpUrl` is provided in the attach request, not in global config. | |
| ## Legacy Flat Format | |
| Older flat config is still accepted for backward compatibility: | |
| ```json | |
| { | |
| "port": "9867", | |
| "headless": true, | |
| "maxTabs": 20, | |
| "allowEvaluate": false, | |
| "timeoutSec": 30, | |
| "navigateSec": 60 | |
| } | |
| ``` | |
| Use `pinchtab config init` to create a nested config file. | |
| ## Validation | |
| `pinchtab config validate` currently checks, among other things: | |
| - valid server port values | |
| - valid `instanceDefaults.mode` | |
| - valid `instanceDefaults.stealthLevel` | |
| - valid `instanceDefaults.tabEvictionPolicy` | |
| - `instanceDefaults.maxTabs >= 1` | |
| - `instanceDefaults.maxParallelTabs >= 0` | |
| - valid `multiInstance.strategy` | |
| - valid `multiInstance.allocationPolicy` | |
| - valid `multiInstance.restart.*` values | |
| - valid `security.attach.allowSchemes` | |
| - `multiInstance.instancePortStart <= multiInstance.instancePortEnd` | |
| - `multiInstance.restart.initBackoffSec <= multiInstance.restart.maxBackoffSec` | |
| - non-negative timeout values | |
| Valid enum values: | |
| | Field | Values | | |
| | --- | --- | | |
| | `instanceDefaults.mode` | `headless`, `headed` | | |
| | `instanceDefaults.stealthLevel` | `light`, `full` | | |
| | `instanceDefaults.tabEvictionPolicy` | `reject`, `close_oldest`, `close_lru` (default) | | |
| | `multiInstance.strategy` | `simple`, `explicit`, `simple-autorestart`, `always-on` (default) | | |
| | `multiInstance.allocationPolicy` | `fcfs`, `round_robin`, `random` | | |
| | `security.attach.allowSchemes` | `ws`, `wss`, `http`, `https` | | |
| ## Notes | |
| - `config show` reports effective runtime values, not just raw file contents. | |
| - `config get`, `set`, and `patch` operate on the file config model, not on transient env overrides. | |
| - Most operational behavior now belongs in `config.json`, not in startup env vars. | |