Skip to Content
SDKTunnels

Tunnels

TL;DR

client.tunnels exposes a local service through the relay over a connected session: open a tunnel for a local port, close it, list and get active tunnels, and sessions() to pick a connected session to open against. Relay plane, async.

tunnels uses your relay token (CMDOP_TOKEN).

Methods

MethodWhat
open(session_id, local_port=, protocol=, local_host=, subdomain=, options=)Open a tunnel to a local port over a connected session.
close(tunnel_id)Close a tunnel (idempotent).
list(page=, per_page=)List tunnels (offset-paginated; also iter / pages).
get(tunnel_id)Detail for one tunnel.
sessions()The connected-session picker for opening tunnels.

protocol defaults to "http" and local_host to "127.0.0.1".

Open and close

Pick a connected session, then open a tunnel to a local port:

async with Client(token="...") as c: sessions = await c.tunnels.sessions() session_id = sessions[0].session_id tunnel = await c.tunnels.open(session_id, local_port=3000, protocol="http") print(tunnel.id) await c.tunnels.close(tunnel.id)
const sessions = await c.tunnels.sessions(); const tunnel = await c.tunnels.open(sessions[0].sessionId, { localPort: 3000, protocol: "http" }); await c.tunnels.close(tunnel.id);

List and inspect

page = await c.tunnels.list() for t in page.items: print(t.id, t.protocol) detail = await c.tunnels.get(tunnel_id)
const page = await c.tunnels.list(); const detail = await c.tunnels.get(tunnelId);