CLI Reference nfltr

Reference for nfltr.xyz users. Use this page for client-side nfltr commands that connect to the hosted relay: tunnels, sharing, messages and files between machines, and your account. The orchestration commands, nfltr orch and nfltr node, have their own reference on orch.nfltr.xyz.

New to NFLTR? Start with When to Use NFLTR, then return here for command-level detail.


Start From The Right Command Path

GoalStart hereNext step
Give a hub a goal on nfltr.xyzclaude mcp add nfltr -- nfltr mcp --toolset hubAgent Orchestration overview
Join a machine that runs agentsnfltr node join --max-agents 2 --allow-all-tools, with CLAUDE_CODE_OAUTH_TOKEN (from claude setup-token) or ANTHROPIC_API_KEY in the environment; a claude login alone is not usedJoin machines
Monitor tasks & fleetnfltr orch task list --active / nfltr orch nodes listMany agents across machines
Secure transport or sharingnfltr http 8080Choose whether transport-only or orchestration-first is the right fit

After you choose a path, use the sections below as the deep command reference for flags, environment variables, examples, and operational details.


Installation

curl -fsSL https://nfltr.xyz/install.sh | sh -s -- --with orch installs nfltr and nfltr-orch: the orchestration commands (orch, node, mcp, ...) are nfltr-orch's, and nfltr runs it for them (it looks next to itself, then on PATH). Without --with orch you get the client commands only; nfltr update --apply --with orch adds nfltr-orch later, and nfltr update --apply keeps every installed binary current. Or download the binary for your platform from the landing page:

PlatformBinary
macOS (Apple Silicon)nfltr-darwin-arm64
macOS (Intel)nfltr-darwin-amd64
Linux (x86_64)nfltr-linux-amd64
Linux (ARM64)nfltr-linux-arm64
Windows (x86_64)nfltr-windows-amd64.exe
Windows (ARM64)nfltr-windows-arm64.exe
# Example: macOS Apple Silicon
chmod +x nfltr-darwin-arm64
sudo mv nfltr-darwin-arm64 /usr/local/bin/nfltr

Commands

Generated from the nfltr binary: every public command, its flags as --help prints them, and an example. Run nfltr <command> --help for the same text in your terminal.

nfltr http

Expose a local HTTP service

nfltr http <port> [flags]

Tutorials: Share a local app

FlagDefaultDescription
--acme-domain domain—obtain Let's Encrypt certificate for domain (implies --e2ee; requires port 443 reachable)
--allow-path /prefix—forward only requests under this path /prefix (repeatable; e.g. a single webhook endpoint); any other path gets 404 without reaching the local service. Every path by default. Turns off end-to-end TLS, since the agent must see each request
--api-key string$NFLTR_API_KEYAPI key for authentication
--basic-auth user:password$NFLTR_BASIC_AUTHrequire HTTP Basic Auth user:password for all incoming requests (optional)
--duration seconds—maximum runtime in seconds (0=unlimited)
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--health-addr address:29501health check HTTP endpoint address
--host-header HostpreserveHost your service gets: preserve (the public host the visitor asked for) or rewrite (your service's own host, for dev servers and virtual hosts that accept only that); X-Forwarded-Host carries the public host either way
--http-addr address—HTTP address of the relay for share and control-plane APIs
--insecure-skip-verify—skip TLS verification for local service
--intercept—live-print request/response summaries to stderr (traffic inspector); needs --mode inspectable
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching (e.g. fleet=web,zone=us-east)
--mode verified—tunnel mode: verified, `inspectable` or `passthrough` (preferred over --e2ee). passthrough: the relay and the agent pass the client's TLS on to your HTTPS service, which holds the certificate for the share host name
--name stringthis machine's nameagent identity (auto-generated if omitted)
--no-share—disable automatic share URL
--record—capture request/response traffic to a file for later replay; needs --mode inspectable
--record-file file—output file for captured traffic (default: nfltr-capture-<timestamp>.json)
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--route /prefix=port—path route: /prefix=port or `/prefix=url` (repeatable); the prefix is stripped and the rest appended to the URL's path (/hook=http://localhost:9000/github sends /hook/x to /github/x); needs --mode inspectable
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL after connecting (default: true)
--share-auth user:password$NFLTR_SHARE_AUTHHTTP Basic Auth user:password for share URL visitors
--share-bearer token—require Bearer token for share URL visitors
--share-header Header=Value—require HTTP Header=Value for share URL visitors (repeatable)
--share-ip-allowlist IP/CIDR—comma-separated IP/CIDR allowlist for share URL visitors
--share-login—share URL visitors must sign in to the relay's accounts as this machine's owner (or a --share-login-allow email); not with an agent certificate (--e2ee-cert, --acme-domain) or --mode passthrough
--share-login-allow emails—comma-separated emails a --share-login share also admits
--share-preset public—share workflow preset: public, `review`, or `webhook`
--share-ttl duration—how long the share URL lives without a visit, duration (for example 30m or 2h; default and cap: the relay's, 24h on nfltr.xyz); each visit starts it again
--timeout seconds60local service request timeout in seconds
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS
--transport transport—how the agent's sessions reach the relay: transport tcp, quic, auto (tcp: link over TLS/TCP; quic: QUIC over UDP, TCP when it fails; auto: both raced, QUIC first); the gRPC stream when neither connects (default: tcp; NFLTR_TRANSPORT)
--verbose—enable verbose per-request logging

Example:

nfltr http 8080

nfltr tcp

Expose a local TCP port (SSH, databases, etc.)

nfltr tcp <port> [flags]

Tutorials: SSH to a machine behind NAT

FlagDefaultDescription
--acme-domain domain—obtain Let's Encrypt certificate for domain (implies --e2ee; requires port 443 reachable)
--allow-client fingerprint—client key fingerprint allowed to open pinned sessions (repeatable or comma separated; each client prints its own with nfltr config client-key); an end-to-end encrypted tunnel needs one: the relay holds none, so it cannot reach the port
--api-key string$NFLTR_API_KEYAPI key for authentication
--duration seconds—maximum runtime in seconds (0=unlimited)
--e2eetrueend-to-end TLS on this agent (a self-signed certificate; its fingerprint is printed): sessions must be pinned with tcp-connect/dial --pin, a session without --pin is refused (the relay could read it); --e2ee=false serves plain sessions only
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--forward host:port—forward TCP connections to host:port instead of localhost:<port>
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching (e.g. fleet=web,zone=us-east)
--name stringthis machine's nameagent identity
--port port-1local TCP port to expose (alternative to positional <port>; 0: none, with --forward)
--retries attempts12retry attempts
--retry-wait seconds5longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--transport transport—how the agent's sessions reach the relay: transport tcp, quic, auto (tcp: link over TLS/TCP; quic: QUIC over UDP, TCP when it fails; auto: both raced, QUIC first); the gRPC stream when neither connects (default: tcp; NFLTR_TRANSPORT)
--verbose—verbose logging

Example:

nfltr tcp 22 --e2ee=false

nfltr tcp-connect

Connect to a remote agent's TCP service locally

nfltr tcp-connect <agent-name> <port> [flags]

Tutorials: SSH to a machine behind NAT

FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--listen endpoint:0local endpoint to listen on: host:port (e.g. :5432; a host-less :PORT binds 127.0.0.1, name a host such as 0.0.0.0 to serve other machines), unix:<path> (a 0600 socket in a directory only you can write to) or pipe:<name> (Windows named pipe, current user only)
--pin fingerprint—end-to-end encrypt every session: TLS with the agent, whose E2EE certificate must have this SHA-256 fingerprint (the agent prints it: nfltr up's banner and /status); the relay carries only ciphertext. A mismatch, or a service without E2EE, fails the session (dial: exit 7)
--pin-cert fingerprint—accept only the relay certificate with this SHA-256 fingerprint (as nfltr relay serve prints it; colons and a SHA256: prefix are optional). Without it a pin saved by nfltr config set-relay --cert-sha256 applies
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay address (host:port); grpc.<domain> is reached over HTTP at <domain>
--tlstrueuse TLS for server connection
--tls-cert file—client certificate file the relay's mTLS identity provider authenticates (with --tls-key; no API key needed)
--tls-key file—client key file for --tls-cert
--verbose—log each connection's open and close (failures are always logged)

Example:

nfltr tcp-connect my-ssh 22 --listen :2222

nfltr dial

One session to a remote service on stdin/stdout, with JSON events and exit codes

nfltr dial <agent>/<service> | <agent> <port> [flags]
FlagDefaultDescription
--api-key-file file—read the API key from this file (mode 0600 on Unix, or 0440 on a read-only mount such as a Kubernetes Secret volume; default $NFLTR_API_KEY_FILE)
--exit-with-parent—end the session and exit 8 when the process that started dial exits
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--open-timeout duration10sgive up opening the session after this duration; an offline agent is waited for until then (exit 3, else 5)
--pin fingerprint—end-to-end encrypt the session: TLS with the agent, whose E2EE certificate must have this SHA-256 fingerprint (from the agent: nfltr up's banner or /status); exit 7 on a mismatch
--pin-cert fingerprint—accept only the relay certificate with this SHA-256 fingerprint; without it a pin saved by nfltr config set-relay --cert-sha256 applies
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay address (host:port); grpc.<domain> is reached over HTTP at <domain>
--tlstrueuse TLS for the relay connection

Example:

nfltr dial home/db < query.bin > answer.bin

nfltr up

Run several http and tcp services from one config file in one process

nfltr up [-c nfltr.yaml] [flags]

Tutorials: Share a local app

FlagDefaultDescription
--api-key-file file—read the API key from this file (mode 0600 on Unix, or 0440 on a read-only mount such as a Kubernetes Secret volume; default $NFLTR_API_KEY_FILE)
--c filenfltr.yamlservices config file
--config filenfltr.yamlservices config file (same as -c)
--drain long5sat shutdown, let open connect: sessions and the open sessions of published services run this long before closing them (services leave the relay at once)
--exit-with-parent—stop everything and exit 8 when the process that started nfltr up exits
--http-addr address—HTTP address of the relay for share URLs and connect: sessions
--key-name string—use a named API key from config for every service (see 'nfltr config list-api-keys')
--log-format stringtextconnect: events on stderr: text or json (one JSON object per line, as nfltr dial)
--open-timeout long10sa connect: session that has not opened after this long fails (code unreachable); an offline agent is waited for until then (code not_found)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port) for every service

Example:

nfltr up

nfltr a2a

Agent-to-agent communication (send, listen, recv, pipe, list)

nfltr a2a <command> [flags]

Tutorials: Send files and messages between machines · End-to-end encryption and pairing keys

CommandDescription
nfltr a2a sendSend a message to another agent (unary RPC)
nfltr a2a listenListen for incoming A2A calls (print to stdout)
nfltr a2a recvReceive incoming A2A messages (receive-only, no echo)
nfltr a2a pipeBidirectional stdin/stdout streaming (like netcat)
nfltr a2a listList connected agents

nfltr a2a send

Send a message to another agent (unary RPC)

nfltr a2a send <target> [message]
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--json—emit response as a JSON object {sent_to, status, payload, latency_ms}
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr a2a send sensor-42 "get status"

nfltr a2a listen

Listen for incoming A2A calls (print to stdout)

nfltr a2a listen
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--echotrueecho received messages back to sender
--exec command—execute command for each call (stdin=request, stdout=response)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--prefixtrueprefix each line with [source-agent]
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr a2a listen --name responder

nfltr a2a recv

Receive incoming A2A messages (receive-only, no echo)

nfltr a2a recv
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--count n—exit after receiving n messages (0 = unlimited)
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--json—emit each message as a JSON object {from, payload}
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--prefixtrueprefix each line with [source-agent]
--recv-timeout duration—exit with code 2 after this duration if no message arrives (e.g. 200ms, 5s); 0 = wait indefinitely
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--types filter—comma-separated message-type filter (e.g. a2a-request,task.*); empty = all

Example:

nfltr a2a recv --name inbox

nfltr a2a pipe

Bidirectional stdin/stdout streaming (like netcat)

nfltr a2a pipe <target>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--line—send each stdin line as a separate message
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--to target—relay target agent name (alternative to positional arg)

Example:

nfltr a2a pipe sensor-42

nfltr a2a list

List connected agents

nfltr a2a list
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--filter-flavor string—only show agents with matching nfltr.worker.flavor label
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--json—output as JSON
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr a2a list

nfltr p2p

Peer-to-peer direct transfer (send, recv, chat, call, list)

nfltr p2p <command> [flags]

Tutorials: Send files and messages between machines

CommandDescription
nfltr p2p sendSend a file or directory to a peer
nfltr p2p recvReceive an incoming P2P transfer
nfltr p2p chatInteractive P2P text chat
nfltr p2p callAudio/video call (opens browser)
nfltr p2p listList connected peers

nfltr p2p send

Send a file or directory to a peer

nfltr p2p send <file|dir> <peer-agent-id>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--force-relay—skip direct P2P and always use server relay
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent ID used during this session
--retries int5connection retry attempts
--retry-wait int3longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute); also the wait between checks for a peer that has not connected
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443gRPC server address
--stun string$STUN_SERVER, else stun.l.google.com:19302 with nfltr.xyz, none with your own relaySTUN server for external address discovery
--tlstrueenable TLS for gRPC
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--turn url—your own TURN urls for calls and file transfers (comma-separated; credentials from NFLTR_TURN_USERNAME and NFLTR_TURN_CREDENTIAL); default: the TURN the relay offers, if any

Example:

nfltr p2p send report.pdf bob-laptop

nfltr p2p recv

Receive an incoming P2P transfer

nfltr p2p recv [--from <agent-id>]
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--force-relay—skip direct P2P and always use server relay
--from string—only accept transfers from this agent ID
--keep—keep listening for multiple transfers
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent ID used during this session
--no-browser—print URL instead of opening browser
--output string.directory to write received files
--retries int5connection retry attempts
--retry-wait int3longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute); also the wait between checks for a peer that has not connected
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443gRPC server address
--stun string$STUN_SERVER, else stun.l.google.com:19302 with nfltr.xyz, none with your own relaySTUN server for external address discovery
--tlstrueenable TLS for gRPC
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--turn url—your own TURN urls for calls and file transfers (comma-separated; credentials from NFLTR_TURN_USERNAME and NFLTR_TURN_CREDENTIAL); default: the TURN the relay offers, if any

Example:

nfltr p2p recv --name bob-laptop --output /tmp/received/

nfltr p2p chat

Interactive P2P text chat

nfltr p2p chat <peer-agent-id>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--force-relay—skip direct P2P and always use server relay
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent ID used during this session
--retries int5connection retry attempts
--retry-wait int3longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute); also the wait between checks for a peer that has not connected
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443gRPC server address
--stun string$STUN_SERVER, else stun.l.google.com:19302 with nfltr.xyz, none with your own relaySTUN server for external address discovery
--tlstrueenable TLS for gRPC
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr p2p chat bob-laptop

nfltr p2p call

Audio/video call (opens browser)

nfltr p2p call <peer-agent-id>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--force-relay—skip direct P2P and always use server relay
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent ID used during this session
--no-browser—print URL instead of opening browser
--retries int5connection retry attempts
--retry-wait int3longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute); also the wait between checks for a peer that has not connected
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443gRPC server address
--stun string$STUN_SERVER, else stun.l.google.com:19302 with nfltr.xyz, none with your own relaySTUN server for external address discovery
--tlstrueenable TLS for gRPC
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--turn url—your own TURN urls for calls and file transfers (comma-separated; credentials from NFLTR_TURN_USERNAME and NFLTR_TURN_CREDENTIAL); default: the TURN the relay offers, if any

Example:

nfltr p2p call bob-laptop

nfltr p2p list

List connected peers

nfltr p2p list
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--filter string—case-insensitive substring filter on agent_id
--force-relay—skip direct P2P and always use server relay
--json—output as JSON
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent ID used during this session
--retries int5connection retry attempts
--retry-wait int3longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute); also the wait between checks for a peer that has not connected
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443gRPC server address
--stun string$STUN_SERVER, else stun.l.google.com:19302 with nfltr.xyz, none with your own relaySTUN server for external address discovery
--tlstrueenable TLS for gRPC
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr p2p list

nfltr command

Expose a local CLI command as an HTTP endpoint

nfltr command <cmd> [args...] [flags]

Tutorials: Share a log file or command output

FlagDefaultDescription
--acme-domain domain—obtain Let's Encrypt certificate for domain (implies --e2ee; requires port 443 reachable)
--api-key string$NFLTR_API_KEYAPI key for authentication
--basic-auth user:password$NFLTR_BASIC_AUTHrequire HTTP Basic Auth user:password
--body-as-arg flag—pass POST body as a command flag instead of stdin (e.g. -p)
--capability value—additional capability identifier to advertise on the shared tunnel (repeatable, for example --capability terminal)
--concurrency int10max concurrent command executions
--cwd directory—working directory for the command
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--http-addr address—HTTP address of the relay for the --share API
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching
--max-input bytes1048576maximum request body size in bytes
--model model—default AI model (overridable from UI via X-Model header)
--name stringthis machine's nameagent identity
--no-share—disable automatic share URL (overrides --share)
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL (default: true; use --no-share to disable)
--tcp-forward host:port—optional local TCP host:port exposed through the same agent identity (for example localhost:22 or localhost:3389)
--timeout seconds120command execution timeout in seconds
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr command cat

nfltr tail

Stream a file's live output via a public URL (tail -f)

nfltr tail <file> [flags]

Tutorials: Share a log file or command output

FlagDefaultDescription
--acme-domain domain—obtain Let's Encrypt certificate for domain (implies --e2ee; requires port 443 reachable)
--api-key string$NFLTR_API_KEYAPI key for authentication
--basic-auth user:password$NFLTR_BASIC_AUTHrequire HTTP Basic Auth user:password
--capability value—additional capability identifier to advertise on the shared tunnel (repeatable, for example --capability terminal)
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--http-addr address—HTTP address of the relay for the --share API
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching
--lines lines50number of trailing lines to show initially
--name stringthis machine's nameagent identity
--no-share—disable automatic share URL
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL
--tcp-forward host:port—optional local TCP host:port exposed through the same agent identity (for example localhost:22 or localhost:3389)
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr tail /var/log/syslog

nfltr wg

WireGuard VPN tunnel to an agent's LAN (serve, connect, socks5, keygen)

nfltr wg <command> [flags]

Tutorials: Reach a private LAN

CommandDescription
nfltr wg serveRun as a WireGuard agent that forwards to the --allow destinations
nfltr wg connectRoute CIDRs to an agent's LAN over a kernel TUN (Linux, CAP_NET_ADMIN)
nfltr wg socks5Start a SOCKS5 proxy through a WireGuard tunnel
nfltr wg keygenGenerate a new WireGuard key pair

nfltr wg serve

Run as a WireGuard agent that forwards to the --allow destinations

nfltr wg serve --allow DEST[,DEST]
FlagDefaultDescription
--allow string—required: comma-separated destinations tunnel traffic may reach: CIDR, IP or host, each optionally :port (e.g. 192.168.1.0/24,10.0.0.5:5432), or "all" (everything but this machine's localhost, which needs an explicit 127.0.0.1:port or localhost:port)
--api-key string$NFLTR_API_KEYAPI key for authentication
--duration seconds—maximum runtime in seconds (0=unlimited)
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching
--name stringthis machine's nameagent identity
--private-key string$WG_PRIVATE_KEYWireGuard private key (base64); generates ephemeral key if empty
--retries attempts12retry attempts
--retry-wait seconds5longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--verbose—verbose logging

Example:

nfltr wg serve --name my-server --allow 192.168.1.0/24

nfltr wg connect

Route CIDRs to an agent's LAN over a kernel TUN (Linux, CAP_NET_ADMIN)

nfltr wg connect <agent-name> --allowed-ips CIDR
FlagDefaultDescription
--allowed-ips string—required: comma-separated CIDRs to route through the tunnel (e.g. 192.168.1.0/24)
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--key-name string—use a named API key from config
--private-key string—WireGuard private key (base64); generates ephemeral key if empty
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--tlstrueuse TLS for server connection

Example:

nfltr wg connect my-server --allowed-ips 192.168.1.0/24

nfltr wg socks5

Start a SOCKS5 proxy through a WireGuard tunnel

nfltr wg socks5 <agent-name>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—pairing key file (at least 32 random bytes, e.g. openssl rand -hex 32) that authenticates end-to-end keys so the relay cannot sit in the middle: the same file on every machine (env NFLTR_A2A_E2EE_KEY_FILE)
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--key-name string—use a named API key from config
--listen address:1080local SOCKS5 address to listen on (a host-less :PORT binds 127.0.0.1; name a host such as 0.0.0.0 to serve other machines)
--private-key string—WireGuard private key (base64); generates ephemeral key if empty
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--tlstrueuse TLS for server connection

Example:

nfltr wg socks5 my-server --listen :1080

nfltr wg keygen

Generate a new WireGuard key pair

nfltr wg keygen

Example:

nfltr wg keygen

nfltr shell

Embedded SSH server (no sshd required, exposed via tunnel)

nfltr shell [flags]

Tutorials: SSH to a machine behind NAT

FlagDefaultDescription
--acme-domain domain—obtain Let's Encrypt certificate for domain (implies --e2ee; requires port 443 reachable)
--api-key string$NFLTR_API_KEYAPI key for authentication
--authorized-keys file—path to authorized_keys file for public key auth
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--host-key file—path to SSH host key file (PEM); auto-generated if empty
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching
--name stringthis machine's nameagent identity
--no-auth—disable all SSH authentication (smoke tests only)
--password password$NFLTR_SHELL_PASSWORDSSH password for password authentication
--retries attempts12retry attempts
--retry-wait seconds5longest wait in seconds between connection attempts, before jitter (a second at most in an outage's first minute)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--shell command—shell command to spawn (default: $SHELL or /bin/sh)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS
--verbose—verbose logging

Example:

nfltr shell --password secret

nfltr terminal

Web-based terminal via tunnel (xterm.js, no WebSocket needed)

nfltr terminal [flags]
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--basic-auth user:password$NFLTR_BASIC_AUTHrequire HTTP Basic Auth user:password
--capability value—additional capability identifier to advertise on the shared tunnel (repeatable, for example --capability terminal)
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--http-addr address—HTTP address of the relay for the --share API
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--labels key=value—comma-separated key=value labels for fleet matching
--name stringthis machine's nameagent identity
--no-auth—allow unauthenticated terminal access (use with caution)
--no-share—disable automatic share URL
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL
--shell command—shell command to spawn (default: $SHELL or /bin/sh)
--tcp-forward host:port—optional local TCP host:port exposed through the same agent identity (for example localhost:22 or localhost:3389)
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr terminal --basic-auth admin:secret

nfltr ai

Remote AI CLI (Claude, Copilot) with text, voice & computer-use

nfltr ai [command] [args...] [flags]
FlagDefaultDescription
--api-key string—API key for authentication
--basic-auth user:password—require HTTP Basic Auth user:password
--cwd directory—working directory for the AI CLI session
--e2eetrueenable E2EE TLS termination
--e2ee-cert file—TLS certificate file for E2EE termination
--e2ee-key file—TLS key file for E2EE termination
--http-addr address—HTTP address of the relay for the --share API
--key-name string—use a named API key from config
--labels key=value—comma-separated key=value labels for fleet matching
--mode modeterminalUI mode: terminal (xterm.js) or chat
--name string—agent identity
--no-auth—allow unauthenticated access (use with caution)
--no-share—disable automatic share URL
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr ai --basic-auth admin:secret

nfltr share

Share text, a file, or stdin via an ephemeral URL

nfltr share [text|file|dir] [flags]

Tutorials: Share a local app · Share a log file or command output

FlagDefaultDescription
--acme-domain domain—obtain Let's Encrypt certificate for domain (implies --e2ee; requires port 443 reachable)
--api-key string$NFLTR_API_KEYAPI key for authentication
--basic-auth user:password$NFLTR_BASIC_AUTHHTTP Basic Auth user:password
--capability value—additional capability identifier to advertise on the shared tunnel (repeatable, for example --capability terminal)
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--expire duration—end the share URL and this command after duration (e.g. 30m, 1h, 24h; the relay may cap it)
--expires duration—alias for --expire (end the share after duration)
--file file—path to file to share (mutually exclusive with stdin)
--health-addr address:29501health check HTTP endpoint address
--http-addr address—HTTP address of the relay for share and control-plane APIs
--json—emit share metadata as JSON {share_id, url, expires_at, size_bytes}
--key-name string—use a named API key from config
--mode verified—tunnel mode: verified or `inspectable` (preferred over --e2ee)
--name stringthis machine's nameagent identity (auto-generated if omitted)
--no-share—disable automatic share URL
--raw—serve text as plain text (no HTML wrapper)
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL after connecting (default: true)
--share-auth user:password$NFLTR_SHARE_AUTHHTTP Basic Auth user:password for share URL visitors
--share-bearer token—require Bearer token for share URL visitors
--share-header Header=Value—require HTTP Header=Value for share URL visitors (repeatable)
--share-ip-allowlist IP/CIDR—comma-separated IP/CIDR allowlist for share URL visitors
--share-login—share URL visitors must sign in to the relay's accounts as this machine's owner (or a --share-login-allow email); not with an agent certificate (--e2ee-cert, --acme-domain) or --mode passthrough
--share-login-allow emails—comma-separated emails a --share-login share also admits
--share-preset public—share workflow preset: public, `review`, or `webhook`
--share-ttl duration—how long the share URL lives without a visit, duration (for example 30m or 2h; default and cap: the relay's, 24h on nfltr.xyz); each visit starts it again
--tcp-forward host:port—optional local TCP host:port exposed through the same agent identity (for example localhost:22 or localhost:3389)
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr share "error: connection refused"

nfltr watch

Run a command periodically and stream output via share URL

nfltr watch [flags] <command> [args...]

Tutorials: Share a log file or command output

FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--basic-auth user:password$NFLTR_BASIC_AUTHHTTP Basic Auth user:password
--capability value—additional capability identifier to advertise on the shared tunnel (repeatable, for example --capability terminal)
--e2eetrueenable E2EE TLS termination (generates self-signed cert; clients connect via SNI router)
--e2ee-cert file—TLS certificate file for E2EE termination (implies --e2ee)
--e2ee-key file—TLS key file for E2EE termination (implies --e2ee)
--expire duration—end the share URL and this command after duration (e.g. 30m, 1h; the relay may cap it)
--health-addr address:29501health check HTTP endpoint address
--http-addr address—HTTP address of the relay for the --share API
--interval interval2srefresh interval (e.g. 2s, 5s, 1m)
--key-name string—use a named API key from config
--name stringthis machine's nameagent identity (auto-generated if omitted)
--no-share—disable share URL
--retries attempts12connection retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--sharetruerequest a public share URL
--share-auth user:password$NFLTR_SHARE_AUTHHTTP Basic Auth user:password for share URL visitors
--tcp-forward host:port—optional local TCP host:port exposed through the same agent identity (for example localhost:22 or localhost:3389)
--tlstrueenable TLS for the gRPC connection
--tls-ca file—CA bundle file
--tls-cert file—client certificate file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr watch "kubectl get pods"

nfltr clipboard

Cross-machine clipboard sync via A2A messaging

nfltr clipboard <command> [flags]

Tutorials: Send files and messages between machines

CommandDescription
nfltr clipboard copySend text, a file, stdin or your clipboard to a target's clipboard
nfltr clipboard pasteFetch a target's clipboard (the target must allow it)
nfltr clipboard listenRun on the target: receive copies (and serve pastes)

nfltr clipboard copy

Send text, a file, stdin or your clipboard to a target's clipboard

nfltr clipboard copy <target> [text]
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--file file—read clipboard content from file instead of a positional argument
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--peer string—target agent name (alternative to the first argument)
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr clipboard copy --peer work-laptop "some text"

nfltr clipboard paste

Fetch a target's clipboard (the target must allow it)

nfltr clipboard paste <target>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--json—emit clipboard entry as JSON {content, peer, timestamp}
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--peer string—target agent name (alternative to the first argument)
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--stdout—print to stdout instead of writing to the system clipboard
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr clipboard paste --peer work-laptop

nfltr clipboard listen

Run on the target: receive copies (and serve pastes)

nfltr clipboard listen [--allow-paste]
FlagDefaultDescription
--allow-paste clipboard paste—also let agents on your account read this machine's clipboard with clipboard paste (off: copy only)
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr clipboard listen --name work-laptop

nfltr notify

Send desktop notifications between machines via A2A

nfltr notify <command> [flags]

Tutorials: Send files and messages between machines

CommandDescription
nfltr notify sendSend a notification
nfltr notify listenListen for incoming notifications
nfltr notify watchNotify when command finishes

nfltr notify send

Send a notification

nfltr notify send <target> <message>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--title titlenfltrnotification title
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr notify send work-laptop "Build finished!"

nfltr notify listen

Listen for incoming notifications

nfltr notify listen
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--json—emit received notification as JSON {title, body, source, timestamp}
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout duration—max wait duration before giving up (0 = wait forever)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr notify listen --name my-laptop

nfltr notify watch

Notify when command finishes

nfltr notify watch <target> <command>
FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--e2ee-key-file file—A2A end-to-end key file (default: this machine's <config dir>/a2a-root.key, else a2a-machine.key; the hub makes its root on first start, `nfltr orch hub machines add <machine> --out <file>` another machine's) (env NFLTR_A2A_E2EE_KEY_FILE)
--heartbeat-interval interval—app-level A2A heartbeat send interval (e.g. 60s). 0 = use the rpcclient default (15s). The stall watchdog cancels the connection when sendLoop hasn't shipped any frame for 2× this interval; bump it on networks where docker NAT or HTTP/2 backpressure can stall sends past 30s (symptom: repeated `code = Canceled` flap every 30-90s).
--keepalive preset—how the agent notices a relay gone silent: preset default, fast, nat, datacenter, mobile, or interval=<duration>,timeout=<duration> (default: default, dead within 15s; NFLTR_KEEPALIVE)
--keepalive-time interval—gRPC client keepalive ping interval (e.g. 30s). 0 = use the rpcclient default (60s). At least 30s: relays end a connection pinged more often (GOAWAY too_many_pings); for faster detection use --keepalive.
--keepalive-timeout timeout—gRPC client keepalive ACK timeout. 0 = use the rpcclient default (20s). Lower values declare a connection dead faster after a real drop. Pair with --keepalive-time.
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name stringthis machine's nameagent identity
--retries attempts12retry attempts
--retry-wait seconds5seconds between connection attempts once an outage passes a minute, doubling on repeated failures (a second at most before that)
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--timeout timeout30sclient-side send request timeout (e.g. 30s, 1m)
--timeout-sec seconds30request timeout in seconds (legacy; prefer --timeout)
--title titlenfltrnotification title
--tlstrueenable TLS
--tls-ca file—CA bundle file
--tls-cert file—client cert file for mTLS
--tls-key file—client key file for mTLS

Example:

nfltr notify watch work-laptop make test

nfltr config

Manage nfltr configuration (save API key, etc.)

nfltr config <command>

Tutorials: Getting started

CommandDescription
nfltr config loginSign in with your browser: enrol this machine in your account and save its key
nfltr config add-api-keySave API key read from a prompt or stdin (optionally with a label)
nfltr config set-relayUse your own relay (beta): its gRPC address, HTTPS URL, pinned certificate and, with -, its API key from stdin
nfltr config list-api-keysList all saved API keys
nfltr config use-api-keySwitch the active API key
nfltr config remove-api-keyRemove a saved API key
nfltr config checkValidate configuration file
nfltr config listShow current configuration
nfltr config pathPrint configuration file path
nfltr config client-keyPrint this machine's end-to-end client key fingerprint (made on first use): an agent serves pinned sessions only to the keys it lists with --allow-client

nfltr config login

Sign in with your browser: enrol this machine in your account and save its key

nfltr config login [--no-browser] [--machine name] [--name label]
FlagDefaultDescription
--machine string—this machine's name in the account (lower-case letters, digits, '-'; default: one the relay makes, renamed with nfltr machines rename); dial its services as <machine>.<service>
--name string—label for the saved key (default: the machine id the relay returns)
--no-browser—print the sign-in URL instead of opening a browser (headless or remote shells)
--timeout duration10m0show long to wait for the browser sign-in

Example:

nfltr config login --no-browser

nfltr config add-api-key

Save API key read from a prompt or stdin (optionally with a label)

nfltr config add-api-key [-] [--name label]

Example:

nfltr config add-api-key

nfltr config set-relay

Use your own relay (beta): its gRPC address, HTTPS URL, pinned certificate and, with -, its API key from stdin

nfltr config set-relay <host:port> --proxy-url URL [--cert-sha256 FP] [-] | --reset
FlagDefaultDescription
--cert-sha256 fingerprint—SHA-256 fingerprint of the relay's self-signed certificate (nfltr relay serve prints it); omit for a CA-issued certificate
--name labelrelaylabel for the API key read with -
--proxy-url url—the relay's HTTPS url (nfltr relay serve prints it)
--reset—forget the saved relay (server, URL, pin): back to nfltr.xyz

Example:

nfltr config set-relay relay.lan:8443 --proxy-url https://relay.lan:8444 --cert-sha256 <fingerprint> - < admin-api-key

nfltr config list-api-keys

List all saved API keys

nfltr config list-api-keys
FlagDefaultDescription
--json—Output as JSON
--key-name string—Only list the saved key with this label

Example:

nfltr config list-api-keys

nfltr config use-api-key

Switch the active API key

nfltr config use-api-key <label>

Example:

nfltr config use-api-key alice

nfltr config remove-api-key

Remove a saved API key

nfltr config remove-api-key <label>

Example:

nfltr config remove-api-key alice

nfltr config check

Validate configuration file

nfltr config check

Example:

nfltr config check

nfltr config list

Show current configuration

nfltr config list

Example:

nfltr config list

nfltr config path

Print configuration file path

nfltr config path

Example:

nfltr config path

nfltr config client-key

Print this machine's end-to-end client key fingerprint (made on first use): an agent serves pinned sessions only to the keys it lists with --allow-client

nfltr config client-key

Example:

nfltr config client-key

nfltr machine

Enrol this machine with a certificate; show its id, group and expiry

nfltr machine [enrol|status] ...
CommandDescription
nfltr machine enrolMake this machine's key here and get its certificate (the key never leaves the machine)
nfltr machine statusThis machine's id, name, group and certificate expiry

nfltr machine enrol

Make this machine's key here and get its certificate (the key never leaves the machine)

nfltr machine enrol --code <code> | --token <file> --name <name>
FlagDefaultDescription
--code code—the enrolment code the dashboard's Add machine shows
--name name—this machine's name (with --token)
--oidc-token file—file holding this workload's OIDC token (- reads stdin)
--token file—file holding a group enrolment token (- reads stdin)

Example:

nfltr machine enrol --code <code>

nfltr machine status

This machine's id, name, group and certificate expiry

nfltr machine status [--json]

Example:

nfltr machine status

nfltr machines

List, rename, move and revoke the account's machines

nfltr machines [list|rename|move|revoke] ...
CommandDescription
nfltr machines listList the account's machines: name, id, group
nfltr machines renameGive a machine a new name (its id, agents and open sessions stay)
nfltr machines moveMove a machine to another group
nfltr machines revokeRevoke a machine: its sessions are cut and its key refused

nfltr machines list

List the account's machines: name, id, group

nfltr machines list [--json]

Example:

nfltr machines list

nfltr machines rename

Give a machine a new name (its id, agents and open sessions stay)

nfltr machines rename <machine> <new name>

Example:

nfltr machines rename box1 build-01

nfltr machines move

Move a machine to another group

nfltr machines move <machine> <group>

Example:

nfltr machines move build-01 ci

nfltr machines revoke

Revoke a machine: its sessions are cut and its key refused

nfltr machines revoke <machine>

Example:

nfltr machines revoke build-01

nfltr groups

List the account's groups and reach rules; add and remove rules

nfltr groups [list|allow|remove-rule] ...
CommandDescription
nfltr groups listList groups and reach rules
nfltr groups allowLet a group or a machine list or dial another group's machines
nfltr groups remove-ruleRemove a reach rule

nfltr groups list

List groups and reach rules

nfltr groups list [--json]

Example:

nfltr groups list

nfltr groups allow

Let a group or a machine list or dial another group's machines

nfltr groups allow <from group | machine> <to group> [list,dial]

Example:

nfltr groups allow ci prod dial

nfltr groups remove-rule

Remove a reach rule

nfltr groups remove-rule <rule id>

Example:

nfltr groups remove-rule <rule id>

nfltr status

Check server connectivity and agent list

nfltr status [flags]

Tutorials: Diagnostics

FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key (enables agent list)
--json—output as JSON (for scripting/CI)
--quiet—suppress info lines; print only the status summary
--require-api-key—exit 1 when no API key is available
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--tlstrueserver uses TLS

Example:

nfltr status

nfltr diagnose

Run connectivity diagnostics (DNS, TCP, TLS, gRPC)

nfltr diagnose [flags]

Tutorials: Diagnostics

FlagDefaultDescription
--json—output as JSON (for scripting/CI)
--quiet—suppress progress output; print only a failure summary to stderr
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay gRPC address (host:port)
--tlstrueserver uses TLS

Example:

nfltr diagnose

nfltr ssh-proxy

SSH ProxyCommand helper (tunnel SSH via the relay)

nfltr ssh-proxy --peer <agent> [--port <port>] [flags]

Tutorials: SSH to a machine behind NAT

FlagDefaultDescription
--api-key string$NFLTR_API_KEYAPI key for authentication
--json—emit the session's events as JSON lines on stderr (as nfltr dial)
--key-name string—use a named API key from config (see 'nfltr config list-api-keys')
--name string—deprecated alias for --peer
--no-tls—disable TLS (sets --tls=false)
--peer string—agent identity (agentID) to connect to (required)
--pin fingerprint—end-to-end encrypt the session: TLS with the agent, whose E2EE certificate must have this SHA-256 fingerprint (as nfltr dial --pin); exit 7 on a mismatch
--port string22remote port (or service name) to tunnel to
--server address$NFLTR_SERVER, else grpc.nfltr.xyz:443relay address (host:port); grpc.<domain> is reached over HTTP at <domain>
--tlstrueuse TLS for server connection

Example:

ssh -o ProxyCommand='nfltr ssh-proxy --peer %h --port %p' admin@my-server

nfltr ssh-config

Generate ~/.ssh/config entries for tunnel agents

nfltr ssh-config <agent-name> [flags]

Tutorials: SSH to a machine behind NAT

FlagDefaultDescription
--config file—path to SSH config file (default: ~/.ssh/config)
--identity IdentityFile—SSH IdentityFile path (included in --json output)
--insecure-skip-host-key-check—turn off SSH host-key checking for this host (StrictHostKeyChecking no, no known_hosts); anyone on the tunnel path could impersonate the machine
--json—emit host_pattern, proxy_command, and identity_file as JSON
--port port22remote SSH port on the agent
--print—print the config block to stdout, don't modify files
--remove—remove the agent's Host block from SSH config
--user username—SSH username for the Host entry (default: current user)

Example:

nfltr ssh-config my-server --user admin

nfltr replay

Replay captured traffic against a local server

nfltr replay <capture-file> --target <url> [flags]
FlagDefaultDescription
--delay milliseconds—milliseconds between requests (0 = as fast as possible)
--dry-run—print requests without executing them
--json—emit per-message status as JSON lines on stdout
--method method—only replay requests matching this HTTP method (e.g. GET, POST)
--path substring—only replay requests whose URL contains this substring
--preserve-host—send the original Host header
--rate float—max requests per second (0 = unlimited)
--target URL—base URL to replay requests against (required)
--timeout seconds30request timeout in seconds
--verbose—print response bodies

Example:

nfltr replay capture.json --target http://localhost:3000

nfltr demo

Demo scenarios, including a feature tour with copy-pasteable commands

nfltr demo [scenario] [flags]

Example:

nfltr demo

nfltr update

Self-update to the latest version

nfltr update [flags]

Example:

nfltr update --check

nfltr completion

Generate shell completion script (bash, zsh)

nfltr completion <bash|zsh>
CommandDescription
nfltr completion bashGenerate bash completion
nfltr completion zshGenerate zsh completion

nfltr completion bash

Generate bash completion

nfltr completion bash

Example:

eval "$(nfltr completion bash)"

nfltr completion zsh

Generate zsh completion

nfltr completion zsh

Example:

eval "$(nfltr completion zsh)"

nfltr version

Print version information

nfltr version [--json]
FlagDefaultDescription
--json—emit structured build metadata as JSON

Example:

nfltr version

nfltr help

Show this help

nfltr help

Example:

nfltr help

Orchestration commands

The orchestration commands, nfltr orch and nfltr node, belong to the nfltr-orch binary, which nfltr runs for them. Their reference is on the orchestration site: orch.nfltr.xyz/docs/cli.


Authentication

nfltr supports multiple authentication methods, tried in order:

  1. --api-key flag — highest priority
  2. NFLTR_API_KEY environment variable
  3. --key-name flag — look up a named key from config
  4. Config file — active key in ~/.config/nfltr/nfltr.json
  5. mTLS certificates — --tls-cert, --tls-key, --tls-ca

API Key Authentication

The server administrator creates API keys on the dashboard. Each key is bound to an agent identity.

# Save once (or save multiple keys with --name)
nfltr config add-api-key                       # prompts, no echo
nfltr config add-api-key - --name alice < keyfile
printf '%s' "$KEY" | nfltr config add-api-key -

# All subsequent commands use the active key automatically
nfltr http 8080
nfltr status

# Or use a specific named key per-command
nfltr http 8080 --key-name alice

mTLS Authentication

For zero-trust environments without API keys:

nfltr http 8080 \
  --tls-cert client.crt \
  --tls-key client.key \
  --tls-ca ca.crt \
  --server grpc.yourcompany.com:443

Agent identity is derived from the certificate Common Name (CN).


Features

Share URLs

Share URLs are enabled by default. Every nfltr http or nfltr command session automatically gets a temporary public URL with a random code (e.g., https://k3vq7mzt2xw4hn5rbsd6jyfa2e.nfltr.xyz/). Share URLs:

nfltr http 8080
# → Share URL: https://k3vq7mzt2xw4hn5rbsd6jyfa2e.nfltr.xyz/

# Disable with --no-share:
nfltr http 8080 --no-share

Multi-Backend Routing

Route different URL paths to different local services:

nfltr http 8080 \
  --route /api=3000 \
  --route /ws=4000 \
  --route /admin=https://localhost:9443
PathTarget
/api/*http://localhost:3000
/ws/*http://localhost:4000
/admin/*https://localhost:9443
Everything elsehttp://localhost:8080

The prefix is stripped and the rest of the path is appended to the target's own path: /api/users reaches http://localhost:3000/users, and with --route /hook=http://localhost:9000/github, /hook/tasks reaches http://localhost:9000/github/tasks.

To expose only part of a service (for example one webhook endpoint), list the path prefixes to forward: nfltr http 8000 --allow-path /github. Any other path gets 404 from the agent and never reaches the service. Paths with .., // or an encoded slash are refused too. --allow-path turns off end-to-end TLS, because the agent must see each request.

Verbose Request Logging

With --verbose, every proxied request is logged:

[1] GET / → http://localhost:8080/ → 200 (4521 bytes, txn=abc123)
[2] GET /style.css → http://localhost:8080/style.css → 200 (1200 bytes, txn=def456)
[3] POST /api/login → http://localhost:3000/login → 200 (89 bytes, txn=ghi789)

Auto-Reconnect

nfltr automatically reconnects when the connection drops:

Duration Limit

Auto-stop after a fixed duration (useful for demos):

nfltr http 8080 --duration 3600  # Stop after 1 hour

Health Endpoint

nfltr exposes a local HTTP health endpoint (default :29501) for integration with monitoring tools:

nfltr http 8080 --health-addr :9999
# Health check: http://localhost:9999/health

Environment Variables

VariableDescriptionUsed By
NFLTR_API_KEYAPI keyall commands
NFLTR_SERVERServer gRPC addressall commands
NFLTR_PROXY_URLProxy API base URLmcp
NFLTR_CONFIGConfig file path overrideconfig, http, tcp
AGENT_IDAgent identityhttp, tcp
RPC_TLSEnable TLS (true/false)all commands
TLS_CERT_FILEmTLS client certificatehttp, tcp
TLS_KEY_FILEmTLS client keyhttp, tcp
TLS_CA_FILEmTLS CA bundlehttp, tcp
HEALTH_ADDRHealth endpoint addresshttp
REQUEST_TIMEOUTRequest timeout (seconds)http
CONNECT_RETRIESRetry attemptshttp, tcp
RETRY_WAITRetry interval (seconds)http, tcp
DURATIONMax runtime (seconds)http
VERBOSEVerbose logginghttp, tcp
COMMAND_TIMEOUTCommand execution timeoutcommand
COMMAND_CWDCommand working directorycommand
COMMAND_MODELDefault AI modelcommand
NFLTR_BASIC_AUTHBasic auth credentialscommand, http
NFLTR_SHARE_AUTHBasic auth for share URL visitorshttp
NFLTR_SHARE_BEARERBearer token for share URL visitorshttp
NFLTR_SHARE_IP_ALLOWLISTIP/CIDR allowlist for share URLshttp
NFLTR_LABELSComma-separated key=value labelshttp, tcp, command
SHARERequest a public share URLhttp, command
STUN_SERVERSTUN server for NAT traversalp2p
A2A_TIMEOUTA2A request timeout (seconds)a2a

Quick Command Map

Tasknfltr command
Expose HTTPnfltr http 8080
Create a stable named endpointnfltr http 8080 --name myapp
Create a public share URLnfltr http 8080 --share
Open a raw TCP tunnel from the agentnfltr tcp 22 --name my-ssh
Expose a remote TCP service on localhostnfltr tcp-connect my-ssh 22 --listen :2222
Route a path to a second local servicenfltr http 8080 --route /api=3000
Run connectivity diagnosticsnfltr diagnose
Save an API key locallynfltr config add-api-key
Manage API keysnfltr keys generate / list / revoke
Use NFLTR as SSH ProxyCommandnfltr ssh-proxy --peer %h --port %p
Expose a CLI as an HTTP servicenfltr command python3 myscript.py
Send messages agent-to-agentnfltr a2a send / listen / pipe
Send files or start a call peer-to-peernfltr p2p send / recv / chat / call
Give the hub a goalclaude mcp add nfltr -- nfltr mcp --toolset hub
Join this machine as a nodenfltr node join --max-agents 2
Check server statusnfltr status
Connect with mTLSnfltr http 8080 --tls-cert agent.crt --tls-key agent.key