clutchcall CLI and its QUIC data-plane engine drive the tunnel
modality. There is no typed Tunnel SDK class today.
A programmatic client, which embeds a tunnel in your own process, is
Preview. See Programmatic API (Preview) at the
bottom. For shipping work, use the CLI documented here.
Install
Sign in
0600). Sign out with
clutchcall logout.
Command surface
http — expose a local service
localhost:<local-port>. It prints the public URL and runs until
you interrupt it.
int
required
The local TCP port to expose (e.g.
3000).string
A label that the CLI appends to your reserved subdomain. With handle
alice,
--name api → https://alice-api.clutchcall.dev. It requires a claimed
handle.string
Set the slug explicitly (for power users). The edge still enforces your
namespace from the session token, so a stale slug cannot escape it.
p2p — direct peer-to-peer
Two peers run with the same pair-id. They discover each other through the
control-plane rendezvous and connect directly. The edge brokers candidates
but never carries bytes. Across NATs, set the <P>_STUN env var to a
reflector, so each side can gather its public candidate. <P> is your CLI’s
brand prefix in uppercase.
string
required
A shared secret that both peers know. It gates the direct tunnel and keys the
rendezvous.
int
(share) The local service port to expose to the peer.
int
(connect) A local port to listen on. The CLI pipes connections to it through
to the peer’s shared service.
string
default:"tcp"
(share)
tcp, udp, or http.string
The STUN reflector
host:port for reflexive candidate gathering. You can set
<P>_STUN instead.Endpoint-independent (cone) NATs punch through directly. Symmetric NATs fall
back to the relayed path.
status & devices
devices shows it, and the session token’s device claim enforces it.
Config
CLI state lives in your user config dir, for example~/.config/clutchcall/config.json (mode 0600). It stores only
non-secret session state:
Environment variables
Env vars use your CLI’s brand prefix, shown below as<P>. The prefix is the
binary name in uppercase, for example clutchcall → its uppercase form.
Data-plane engine flags
clutchcall http execs the QUIC engine (clutchcall-engine)
with the resolved arguments. You rarely call the engine directly, but the
surface is:
Remote desktop on the same transport
A remote-desktop client (a fork of an open-source remote-desktop project) runs its network transport over this same raw-QUIC relay instead of its own rendezvous/relay. To enable it, point the client’squic-relay-server option
at a host:port that runs the tunnel module:
- The controlled box registers its device id as a slug (
"proto":"quick") and parks bidi work streams. - The controller dials the box by slug. The edge splices the two QUIC streams.
- The remote-desktop client’s own message framing and end-to-end encryption ride unchanged on top. The edge only secures the QUIC hop to the PoP. It never sees cleartext.
Programmatic API (Preview)
- TypeScript (Preview)
- Python (Preview)
Related
- Tunnel overview — wire model & architecture
- Cookbook — task snippets
- Recipes — worked examples

