Skip to content

Network requirements

Use this page as the change request for your network team. The client needs one outbound destination, reached through your proxy, and opens nothing inbound.

The client runs on the machine that runs the agent, inside the agent’s own lifecycle. It reaches OpenLatch for three things: to collect the policies it decides against, to deliver the record of what it decided, and to authenticate. All three go to one destination over one port. The optional product telemetry and crash reports go to that same destination, so OpenLatch adds no other destination, whether you leave them on or turn them off.

PropertyValue
DirectionOutbound only. The client opens no listening port on a network interface, and nothing on the machine becomes reachable from the network
Destinationapp.openlatch.ai, on TCP 443
TransportHTTPS. TLS is verified against the operating system trust store, plus an optional certificate bundle merged on top of it. Verification cannot be disabled
Through your proxyYes: HTTP and HTTPS CONNECT, SOCKS5, and proxy auto-config where the operating system supports it, with Basic and Kerberos (Negotiate) authentication
IP allowlistingNot supported. There is no static address range, so allowlist by fully qualified domain name and SNI
CertificatesNone issued by OpenLatch, and none required from you
Machines behind a proxyA fleet of machines behind a corporate proxy: one outbound destination, nothing inbound.MachineCorporate proxyMachineMachineapp.openlatch.ai:443HTTPS
Figure 1. A fleet of machines behind a corporate proxy: one outbound destination, nothing inbound.

This is the table to paste into a change request. The first row is what OpenLatch needs to run, and it is the only destination a machine running the client needs from OpenLatch. The second is needed only while you install or update the client; an estate that mirrors packages internally points it at its own mirror instead. The third is needed only when you install with one of the two scripts. The fourth concerns browsers only.

DestinationPortDirectionProtocolPurposeAllowlisting
app.openlatch.aiTCP 443OutboundHTTPSPolicies, decision records, authentication, and the optional product telemetry and crash reportsBy name and SNI. There is no static address range
Your package registry: registry.npmjs.org, unless you point the client at a mirrorTCP 443OutboundHTTPSInstalling the client, and downloading an update when you allow oneBy name, or by the name of your internal mirror. Needed only during an install or an update
openlatch.aiTCP 443OutboundHTTPSDownloading the install script, install.sh or install.ps1, and the install report it sendsBy name. Needed only when installing with a script
challenges.cloudflare.com, from the browser of anyone who signs in to the consoleTCP 443OutboundHTTPSThe check the email step runs at sign-inBy name, for browsers only. No machine running the client contacts it

Sign-in to the console starts with an email step, and that step runs a short check in the browser that the visitor is a person. The check is served from challenges.cloudflare.com, so the browsers your administrators sign in with must reach that name on TCP 443. A browser that cannot reach it fails the check every time. This requirement applies to browsers only: app.openlatch.ai stays the one destination a machine running the client needs.

Your agents reach their model endpoints exactly as they did before OpenLatch was installed. OpenLatch neither terminates nor re-signs that traffic, and it adds no destination of its own to it. Those endpoints must stay reachable, and they must be exempt from response buffering and streaming inspection, so that a streamed response is not held back on its way to the person waiting for it.

A device that buffers the response, or scans it as a whole body, holds the stream until it completes and then releases it in one burst. The request still succeeds; the developer sees an agent that appears to stall and then prints everything at once.

For proxy products that steer by application rather than by destination, the process name is openlatch on macOS and Linux and openlatch.exe on Windows. Use that name in a custom application definition.

Answer per control. A “No” row is a design decision rather than a gap, and each one names the path to take instead.

Network controlSupportedHow it is handledNotes
Unauthenticated HTTP or HTTPS CONNECT proxyYesDiscovered at install, or handed to the installThe common corporate shape. Whatever route works is recorded on the machine
Basic authenticationYesThe credential is prompted for on a challenge and kept in the operating system credential storeNever written to a file in plain text
Kerberos (Negotiate)YesUses the logged-on identity, through the operating system’s own mechanismThe service principal defaults to the proxy host’s HTTP service and can be overridden at install. A missing or expired ticket is reported with its remedy
NTLMNoNot supported, by designMicrosoft deprecated NTLM, and a client that quietly downgrades to it works against what it was deployed for. Use Negotiate, or an unauthenticated path for the client
Proxy auto-config (PAC or WPAD)Yes, on Windows and macOSThe URL is handed to the operating system’s own resolverRefused on Linux, where no auto-config resolver is available to the client. Set the route explicitly there
SOCKS5YesA socks5:// or socks5h:// routeName resolution stays local with socks5 and moves to the proxy with socks5h
Transparent proxyYesNo configuration on the machine; the traffic is intercepted in the pathPair it with the TLS inspection row where the device re-signs the connection
TLS inspection with a corporate certificate authorityYesThe interception root goes in the operating system trust store, or is supplied as a PEM bundle at installThe bundle is merged on top of the operating system roots, never a replacement, and verification is never disabled
mTLS client certificates to the proxyNo—The client presents no client certificate. Use one of the supported authentication schemes
IP-based allowlisting of OpenLatch egressNo—There is no static address range. Allowlist app.openlatch.ai by name and SNI

On most corporate machines the install finds the route without being told. It probes what is already configured, then walks the operating system’s own settings, including proxy auto-config on Windows and macOS. It asks a question only when none of those reach the console, once, on a terminal. An unattended install that cannot find a route stops with a report naming every candidate it tried, rather than silently going direct.

Whatever route made the install work is recorded on the machine. This matters: the client starts with the user’s session and does not inherit the installing shell’s variables, so a route that lived only in an environment variable would be lost at the next restart.

Where discovery cannot work, or where a managed install runs with no terminal to ask on, hand the route to the install directly. Supply the certificate bundle at the same time if the operating system does not already trust the interception root.

Hold the enrollment back with OPENLATCH_NO_INIT and run it as a second step, so that the flags reach the command that performs it. Export the variable before the script runs, so that the shell that reads the script carries it too.

On macOS and Linux:

Terminal window
export OPENLATCH_NO_INIT=1
curl -LsSf https://openlatch.ai/install.sh | sh
~/.local/bin/openlatch init --proxy http://proxy.corp:8080 --ca-bundle /etc/ssl/corp-root.pem

On Windows:

Terminal window
$env:OPENLATCH_NO_INIT = "1"
powershell -ExecutionPolicy Bypass -c "irm https://openlatch.ai/install.ps1 | iex"
& "$env:LOCALAPPDATA\openlatch\bin\openlatch.exe" init --proxy http://proxy.corp:8080 --ca-bundle C:\corp\corp-root.pem

On a machine that already has Node.js, npx @openlatch/client init takes the same flags in a single step:

Terminal window
npx @openlatch/client init --proxy http://proxy.corp:8080 --ca-bundle /etc/ssl/corp-root.pem

A bypass list can be supplied alongside the route, in the usual grammar. Traffic that never leaves the machine does not go to the proxy and needs no bypass entry.

Where policy forbids a machine from ever reaching out without the proxy, the client can be configured to refuse a direct connection when no route resolves. It then reports a route failure instead of quietly going around your controls. Client configuration lists the settings.

A proxy credential lives in the operating system’s credential store: Credential Manager on Windows, Keychain on macOS, Secret Service on Linux, and an encrypted file on a headless host that has none. It is never written to a configuration file in plain text. Every place a proxy URL is printed or logged shows it as user:*****@host. A proxy URL that carries a password on the command line is refused, because a command line is readable by any process on the machine.

The connection to the console works under inspection, and needs no bypass. The client makes ordinary request-and-response HTTPS calls, verifies against the operating system trust store, and pins no certificate. Put the interception root in the trust store where your estate already does that, or supply a PEM copy of it at install. The bundle is merged on top of the operating system roots, so a machine keeps trusting everything it trusted before.

Your agents’ own model endpoints are the exception, and the request there is narrow: exempt them from response buffering and streaming inspection, and leave the rest of your inspection policy alone.

The client refreshes its policies from the console in the background. Every decision is made on the machine, against the policies already there, so no network call sits on the decision path. That is what makes a verdict survive a broken route.

Where the machine holds policy, it keeps enforcing whatever the network does. Where it holds none, it allows the action and stamps the record to say the decision was made without policy. Nothing fails silently.

SituationWhat the machine doesWhat you see
The console is unreachableKeeps enforcing the policies it holds and retries in the background. Records are held on the machineThe machine stops checking in. openlatch status reports it as disconnected, with policies present
The policies on the machine have not been refreshed for some timeKeeps enforcing them. Policies do not expireA staleness warning. Staleness is reported, never acted on
The wave credential is revoked or rotated, and the console rejects itStops collecting updates, keeps enforcing what it holds, and resumes on its own once a valid credential is in placeAn authentication warning on the machine, and no further check-ins in the console
Your organization has published no policy yetKeeps whatever it already holds in forceThe machine reports as connected, with nothing to collect
An update arrives damaged or in a form the machine does not recognizeRejects it and keeps the previous policies. A damaged update never takes effectAn integrity warning on the machine, with the previous policies still in force
The local copy of the policies is altered on the machineDiscards it. The machine runs without policy until the next successful refreshEvery verdict is stamped to show it was decided without policy, and the machine reports the loss
No policy has ever reached the machineReturns Allow: a machine never blocks without policyEvery verdict is stamped to show it was decided without policy
The client is not runningThe action proceeds and is not held upopenlatch status reports the client as not running, and the console shows no recent activity for the machine
Records cannot be deliveredRetries, then holds them on the machine and sends them when the console is reachable againA gap in the console that closes when the machine reconnects. The hold is bounded: past its size cap the oldest unsent records are dropped, and the daemon log records an OL-1204 warning
You set every policy to Monitor from the consoleEach machine applies the change on its next refresh, and records what it would have doneThe change, in the console, with no access to a machine needed. Decisions keep being recorded

Run these commands on the first machine before the wave, and again on any machine that reports a connection problem.

Terminal window
openlatch status
openlatch doctor
openlatch system proxy test
CommandWhat it proves
openlatch statusWhether the machine is connected to the console, whether policies are present, and which agents are wired. It answers even when the route is broken, which is exactly when you need it
openlatch doctorThe whole machine, with a cause and a remedy against each finding. It reports the hop through your proxy separately from the connection to the console, so a dead proxy and an unreachable console never look like the same failure
openlatch system proxy testThe route itself, probed one hop at a time. It stops at the hop that fails and names it

Deploy the client covers installing it, and Verify and roll out covers full verification of a machine.

  • Approve one entry for the machines: app.openlatch.ai on TCP 443, outbound. There are no inbound ports.
  • The browsers that sign in to the console also need challenges.cloudflare.com on TCP 443. No machine running the client contacts it.
  • Allowlist by name and SNI, not by address. There is no static address range.
  • Your agents reach their model endpoints as before. Keep those endpoints reachable and exempt from response buffering and streaming inspection.
  • TLS inspection needs no bypass for the console connection. Basic, Kerberos, SOCKS5, transparent and auto-config proxies are supported. NTLM is not, so plan a Negotiate or unauthenticated path.
  • A broken route degrades delivery, not enforcement. The machine keeps deciding with the policies it holds, records wait until the console is reachable, and both states show in openlatch status.