Frequently asked questions
The questions that come up first: what the tool actually does, what the relay can see, what happens when a link dies, and how an agent is supposed to use it.
19 answers no accounts no escrow
How it works
What exactly does PinchPass do?
It collects one or more sensitive values from a human and writes them into a
.env file. You run pinchpass request API_KEY, it starts
a one-time HTTP server on a random loopback port and prints a link, the human
opens the link and types the value, and the CLI writes it to disk and exits. The
value is encrypted in the browser, so the server and any tunnel relay only ever
handle ciphertext.
Do I need an account or a hosted service?
No. PinchPass is a single Go binary that runs on your machine. There is no
signup, no dashboard, no API key for the service itself, and no server to pay
for. The optional public link uses the public bore.pub relay, which
needs no account either.
What does the link look like?
A local request produces
http://127.0.0.1:<port>/claim/<name>#k=<key>. With
-tunnel it becomes
http://bore.pub:<remote-port>/claim/<name>#k=<key>.
The path segment is your secret name lowercased, and everything after the hash is
the base64url encryption key.
Can I collect several secrets at once?
Yes. Pass more than one name:
pinchpass request DB_HOST DB_PORT DB_NAME -out .env. The form asks
for each value and the browser sends them as a single encrypted JSON object. The
CLI rejects the payload if it contains any key you did not request.
Getting the link to a human
How do I reach a human on another machine, and do I need to open a firewall port?
Use -tunnel. PinchPass dials bore.pub:7835 with a
built-in standard-library client, gets a random public port, and prints a public
URL, so you never open a port or configure NAT. Without -tunnel the
server binds to 127.0.0.1 and is only reachable from the machine it
runs on.
What happens if the human never submits?
The link expires after the TTL, which defaults to 30 minutes and is set with
-ttl. The server shuts itself down, the CLI exits non-zero, and
nothing is written to your .env file. With -json the
final object reports success as false.
Security
Does the relay see my secret?
No. The value is encrypted in the browser with XSalsa20-Poly1305 before it is sent, and the decryption key travels in the URL fragment, which browsers never transmit. The relay forwards ciphertext it cannot open. It can still observe metadata: that a request happened, its size, its timing, and the request path.
Is the URL path a secret token?
No. The path is derived from the secret name, so GEMINI_API_KEY
becomes /claim/gemini_api_key, and anyone who knows the name can
find the endpoint while the request is live. It does not need to be secret,
because the path is not what protects the value: submitting requires producing
ciphertext under the encryption key, which only the URL fragment carries. Treat
the name as public and the value as protected. The
security model has the full reasoning.
Is HTTPS required?
No. The payload is encrypted before it leaves the browser, so there is nothing on the wire to intercept, and no WebCrypto or TLS support is needed. HTTPS would still hide surrounding metadata such as the fact, size, and timing of the request from a network observer.
Can I reuse a link?
No. The first accepted submission claims the request, and every later request to
that URL returns 404 with a link-expired page. If you need another
value, run the command again to get a fresh link and a fresh key.
What if the link leaks?
A leaked link is a limited risk. Anyone holding the full URL including the fragment can submit a value, but they cannot read what was submitted, and the first submission claims the request. A leaked link is therefore a denial of service rather than a disclosure: someone could occupy the slot and force you to issue a new link.
Can I recover a secret if I lose the URL?
No. The key exists only in the fragment of that URL and is held in memory by the running process, so there is no escrow and no recovery path. If the link is lost or the fragment is stripped by a chat client or shortener, ask the human to submit again on a new link.
Agents and tooling
How does the Pi tool choose between the dialog and a link?
The request_secret tool takes a via parameter.
modal opens a Pi dialog, link spawns the CLI and streams
the one-time URL, and auto, the default, uses the dialog in the
interactive TUI and a link everywhere else.
Does the dialog mode need the binary or the network?
No. Modal mode collects the value straight from the keyboard into your
.env file without starting a server or touching the network, so it
works even when the pinchpass binary is not installed. In link mode
the binary is resolved from PATH, ~/.local/bin,
~/.openclaw/bin, or ~/.pi/bin.
Can an agent read the secret back out of the transcript?
Not in modal mode: the value goes from the keyboard to disk and never enters the model's context or the session transcript. In link mode the value arrives as ciphertext, is decrypted by the CLI process locally, and is written to the file, so the tool result reports the saved path and key names rather than the value itself. See agent integration.
Practical use
What are the .env writing rules?
Each value is written as KEY="value" with backslashes, double quotes,
dollar signs, and backticks escaped, so the file survives being sourced. An
existing key is replaced in place and other lines are preserved. The file is
written with 0600 permissions and parent directories are created
with 0700.
How do I change the output path, TTL, or port?
-out config/secrets.env changes where the value is written,
-ttl 5 sets the expiry in minutes, and -port 9999 pins
the local port instead of picking a random one. The
CLI reference lists every flag.
What are the platform requirements, and is Windows supported?
Releases cover Linux and macOS on amd64 and arm64, as
raw binaries with no runtime dependencies. Building from source needs Go 1.26 or
newer, and golang.org/x/crypto is the only dependency. Windows is
not a published target. See install.
How do I update PinchPass?
brew upgrade --cask pinchpass, npm update -g @pinchpass/cli,
go install github.com/rubybear-lgtm/pinchpass@latest, or re-run the
curl command for a prebuilt binary. Updating the npm package also
replaces the downloaded binary, because the postinstall is version-aware.
Still stuck?
- Install covers channels, checksums, and troubleshooting.
- CLI reference has every flag, both JSON objects, and the exit behaviour.
- Security model explains the crypto and lists what PinchPass does not protect against.
- Open an issue if the answer is not here.