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.
One outbound dependency
Section titled “One outbound dependency”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.
| Property | Value |
|---|---|
| Direction | Outbound only. The client opens no listening port on a network interface, and nothing on the machine becomes reachable from the network |
| Destination | app.openlatch.ai, on TCP 443 |
| Transport | HTTPS. 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 proxy | Yes: HTTP and HTTPS CONNECT, SOCKS5, and proxy auto-config where the operating system supports it, with Basic and Kerberos (Negotiate) authentication |
| IP allowlisting | Not supported. There is no static address range, so allowlist by fully qualified domain name and SNI |
| Certificates | None issued by OpenLatch, and none required from you |
Egress requirements
Section titled “Egress requirements”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.
| Destination | Port | Direction | Protocol | Purpose | Allowlisting |
|---|---|---|---|---|---|
app.openlatch.ai | TCP 443 | Outbound | HTTPS | Policies, decision records, authentication, and the optional product telemetry and crash reports | By name and SNI. There is no static address range |
Your package registry: registry.npmjs.org, unless you point the client at a mirror | TCP 443 | Outbound | HTTPS | Installing the client, and downloading an update when you allow one | By name, or by the name of your internal mirror. Needed only during an install or an update |
openlatch.ai | TCP 443 | Outbound | HTTPS | Downloading the install script, install.sh or install.ps1, and the install report it sends | By name. Needed only when installing with a script |
challenges.cloudflare.com, from the browser of anyone who signs in to the console | TCP 443 | Outbound | HTTPS | The check the email step runs at sign-in | By name, for browsers only. No machine running the client contacts it |
The administrator’s browser
Section titled “The administrator’s browser”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’ own traffic
Section titled “Your agents’ own traffic”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.
Proxy support matrix
Section titled “Proxy support matrix”Answer per control. A “No” row is a design decision rather than a gap, and each one names the path to take instead.
| Network control | Supported | How it is handled | Notes |
|---|---|---|---|
| Unauthenticated HTTP or HTTPS CONNECT proxy | Yes | Discovered at install, or handed to the install | The common corporate shape. Whatever route works is recorded on the machine |
| Basic authentication | Yes | The credential is prompted for on a challenge and kept in the operating system credential store | Never written to a file in plain text |
| Kerberos (Negotiate) | Yes | Uses the logged-on identity, through the operating system’s own mechanism | The 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 |
| NTLM | No | Not supported, by design | Microsoft 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 macOS | The URL is handed to the operating system’s own resolver | Refused on Linux, where no auto-config resolver is available to the client. Set the route explicitly there |
| SOCKS5 | Yes | A socks5:// or socks5h:// route | Name resolution stays local with socks5 and moves to the proxy with socks5h |
| Transparent proxy | Yes | No configuration on the machine; the traffic is intercepted in the path | Pair it with the TLS inspection row where the device re-signs the connection |
| TLS inspection with a corporate certificate authority | Yes | The interception root goes in the operating system trust store, or is supplied as a PEM bundle at install | The bundle is merged on top of the operating system roots, never a replacement, and verification is never disabled |
| mTLS client certificates to the proxy | No | — | The client presents no client certificate. Use one of the supported authentication schemes |
| IP-based allowlisting of OpenLatch egress | No | — | There is no static address range. Allowlist app.openlatch.ai by name and SNI |
Configure the route
Section titled “Configure the route”How the route is found
Section titled “How the route is found”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.
Hand the route to the install
Section titled “Hand the route to the install”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:
export OPENLATCH_NO_INIT=1curl -LsSf https://openlatch.ai/install.sh | sh~/.local/bin/openlatch init --proxy http://proxy.corp:8080 --ca-bundle /etc/ssl/corp-root.pemOn Windows:
$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.pemOn a machine that already has Node.js, npx @openlatch/client init takes the same flags in a single step:
npx @openlatch/client init --proxy http://proxy.corp:8080 --ca-bundle /etc/ssl/corp-root.pemA 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.
Credential handling
Section titled “Credential handling”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.
TLS inspection
Section titled “TLS inspection”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.
Offline and degraded behavior
Section titled “Offline and degraded behavior”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.
| Situation | What the machine does | What you see |
|---|---|---|
| The console is unreachable | Keeps enforcing the policies it holds and retries in the background. Records are held on the machine | The machine stops checking in. openlatch status reports it as disconnected, with policies present |
| The policies on the machine have not been refreshed for some time | Keeps enforcing them. Policies do not expire | A staleness warning. Staleness is reported, never acted on |
| The wave credential is revoked or rotated, and the console rejects it | Stops collecting updates, keeps enforcing what it holds, and resumes on its own once a valid credential is in place | An authentication warning on the machine, and no further check-ins in the console |
| Your organization has published no policy yet | Keeps whatever it already holds in force | The machine reports as connected, with nothing to collect |
| An update arrives damaged or in a form the machine does not recognize | Rejects it and keeps the previous policies. A damaged update never takes effect | An integrity warning on the machine, with the previous policies still in force |
| The local copy of the policies is altered on the machine | Discards it. The machine runs without policy until the next successful refresh | Every verdict is stamped to show it was decided without policy, and the machine reports the loss |
| No policy has ever reached the machine | Returns Allow: a machine never blocks without policy | Every verdict is stamped to show it was decided without policy |
| The client is not running | The action proceeds and is not held up | openlatch status reports the client as not running, and the console shows no recent activity for the machine |
| Records cannot be delivered | Retries, then holds them on the machine and sends them when the console is reachable again | A 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 console | Each machine applies the change on its next refresh, and records what it would have done | The change, in the console, with no access to a machine needed. Decisions keep being recorded |
Verify the route
Section titled “Verify the route”Run these commands on the first machine before the wave, and again on any machine that reports a connection problem.
openlatch statusopenlatch doctoropenlatch system proxy test| Command | What it proves |
|---|---|
openlatch status | Whether 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 doctor | The 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 test | The 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.
In short
Section titled “In short”- Approve one entry for the machines:
app.openlatch.aion TCP 443, outbound. There are no inbound ports. - The browsers that sign in to the console also need
challenges.cloudflare.comon 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.