Install PinchPass
PinchPass is a single Go binary. It has no runtime dependencies, starts an HTTP server on a random loopback port when you ask for a link, and exits when the secret arrives or the link expires. Pick whichever channel you already use.
MIT licensed Go 1.26+ macOS + Linux single dependency: golang.org/x/crypto
Pick a channel
Homebrew
The tap ships a cask for macOS and Linux.
brew install --cask rubybear-lgtm/tap/pinchpass
Provides the pinchpass command. Update with
brew upgrade --cask pinchpass.
npm, global
Installs the package and downloads the matching binary in a postinstall step.
npm i -g @pinchpass/cli
Provides the pinchpass command and the Pi / OpenClaw
extension. Update with npm update -g @pinchpass/cli.
npx, no install
Fetches the package and its binary on first use, then caches them.
npx @pinchpass/cli request API_KEY
Good for a one-off request on a machine you do not want to change.
Prebuilt binary
Raw binaries from GitHub Releases, no package manager involved.
curl -sL https://github.com/rubybear-lgtm/PinchPass/releases/latest/download/pinchpass-darwin-arm64 -o /usr/local/bin/pinchpass
chmod +x /usr/local/bin/pinchpass
See the asset names for the other platforms.
From source
Needs Go 1.26 or newer.
go install github.com/rubybear-lgtm/pinchpass@latest
The version comes from the module metadata, so
pinchpass --version still reports it.
Agent tool
Registers request_secret rather than a shell command.
pi install npm:@pinchpass/cli
Also downloads the binary for link mode. Detail on agent integration.
Releases cover Linux and macOS on both
amd64 and arm64. Windows is not a published target,
and there is no installer for it.
Prebuilt binaries
Release assets are named pinchpass-<os>-<arch>:
pinchpass-linux-amd64, pinchpass-linux-arm64,
pinchpass-darwin-amd64, and
pinchpass-darwin-arm64. They are raw executables, not archives,
so there is nothing to unpack:
# macOS on Apple silicon
curl -sL https://github.com/rubybear-lgtm/PinchPass/releases/latest/download/pinchpass-darwin-arm64 -o /usr/local/bin/pinchpass
chmod +x /usr/local/bin/pinchpass
# macOS on Intel — pinchpass-darwin-amd64
# Linux x86_64 — pinchpass-linux-amd64
# Linux arm64 — pinchpass-linux-arm64
Each release publishes a checksums.txt of SHA-256 hashes beside
the binaries. The npm postinstall verifies its own download against that file
before installing, so a corrupted or substituted asset fails loudly rather
than being installed. If you fetch a binary by hand, verify it yourself:
shasum -a 256 pinchpass-darwin-arm64
Verify the install
-
Confirm the binary runs and reports a version:
shellpinchpass --version # pinchpass v1.2.0 (abc1234)pinchpass versionandpinchpass -versionprint the same thing. A build from source reports the module version rather than a release tag. -
Run a first request. This starts a server on
127.0.0.1on a random port and prints a one-time link:shellpinchpass request TEST_KEY -
Open the printed link, type any value, and submit. The command blocks until the human submits or the TTL expires, then writes
TEST_KEY="..."into.envand exits. When the request times out it exits non-zero and writes nothing. -
Read the CLI reference for every flag, or the security model before you use this for anything that matters.
Add the agent tool
If an agent is the thing that needs the secret, install the extension and let
it call request_secret instead of shelling out.
Pi
pi install npm:@pinchpass/cli
Registers the tool and the bundled skill.
OpenClaw
The same package ships an OpenClaw plugin manifest, exposing the same tool
name with a $.raw backend. Install
@pinchpass/cli and enable the plugin.
For every other agent, install the universal skill — one command, no per-platform plugin:
# teach every detected agent
npx skills add rubybear-lgtm/pinchpass
# target specific agents
npx skills add rubybear-lgtm/pinchpass -a opencode -a claude-code -a openclaw
# install globally, available in every project
npx skills add rubybear-lgtm/pinchpass -g
On Pi, the dialog collection mode reads the value straight into
.env without starting a server or touching the network, so it works
even when the pinchpass binary is not installed at all.
Updating
| Installed with | Update with |
|---|---|
| Homebrew | brew upgrade --cask pinchpass |
| npm | npm update -g @pinchpass/cli |
go install |
go install github.com/rubybear-lgtm/pinchpass@latest |
| curl | Re-run the curl command and chmod +x again. |
Updating the npm package also replaces the downloaded binary: the postinstall compares the installed version against the package version and reinstalls when they differ, verifying the new asset against the release checksums. You do not need to remove the old binary first.
Troubleshooting
A rebuilt plugin still runs the old code in Pi
/reload does not pick up a rebuilt dist/, because
Node's ESM cache serves whatever module was already loaded for that path.
Restart Pi after a rebuild. /reload only helps the first time,
before anything is cached.
pinchpass: command not found after installing the Pi tool
The Pi package downloads a binary, and link mode resolves it by searching
PATH, ~/.local/bin, ~/.openclaw/bin, and
~/.pi/bin. Check those locations before adding anything to
PATH. Modal mode does not need the binary at all.
The command just sits there
That is the design. pinchpass request blocks until the human
submits or the TTL expires, then exits. In a script or an agent loop, treat it
as a long-running call and give it a timeout larger than the
-ttl you asked for.
My request timed out
Nothing was written. The human mode prints
❌ Request timed out. No secret was saved. and exits non-zero; with
-json the final object is
{"success": false, "message": "Request timed out or failed."}. Ask
again — a link cannot be reused or revived.
The form says "Missing encryption key"
The #k= fragment was lost, usually because a chat client or a
redirect stripped everything after #. The page then disables the
submit button on purpose, since it has no key to encrypt with. Send the full
URL from the CLI output verbatim, or request a new link.
Next
- CLI reference — every flag, the JSON output, and
how
.envis written. - Security model — what the relay sees, the exact crypto, and what this does not protect against.
- Agent integration — the tool, the skill, and a safe agent loop.
- FAQ — the questions that come up first.