Skip to main content
Security & trust · Privacy by architecture

The work runs on your machine.
Private by construction.

OpenEng is local-first by design, not by policy. Both halves of the platform do their work on your own machine. Each of the five engineering apps drives a small engine that listens only on loopback (the Git and Chat engines are coming soon), so your code is never sent to OpenEng. The OpenEng AI engine runs your open-weight models locally and reads your files there. Between the browser and the engine travels what you exchange in the Web Console — your requests, its replies, and the engine data the console shows you — and it passes, encrypted, through the OpenEng Broker, which opens the requests and that engine data and keeps them for 7 days by default. The engine also registers its key and fetches configs from our API, and, if you use them, Cloud Planner requests and approval requests go to our API; a hosted model you choose receives what you send it. The browser is a thin client: it renders the work your engine does.

Loopback-only app engines Sealed per frame No engine telemetry Streamed AI replies sealed end-to-end

At a glance

Two engines, one rule: the work runs on your machine.

The five engineering apps and OpenEng AI both execute locally. What differs is how the browser reaches the engine, and so what can cross the wire.

How the engineering apps and OpenEng AI compare on security
PropertyEngineering appsOpenEng AI
Where the work runsAn engine per app, on your machineThe openeng engine, on your machine; its built-in models run in its enclosed model daemon, catalog models in a local Ollama daemon
How the browser reaches itDirectly, over loopback (127.0.0.1)Through the OpenEng Broker; the engine dials out
Listening portsOne loopback-only port per app engine, not reachable from your networkNo network port: the engine binds no network socket (its model daemon uses a local Unix socket)
Sealed end-to-endEvery frame of the web app’s session, after the handshake (the engine doesn’t yet reject unsealed frames)The engine’s streamed replies. Requests and the engine data the Web Console loads are encrypted in transit and at rest, and the broker opens them to route them
What OpenEng’s servers handleYour sign-in, the one-time pairing key, and update checksYour sign-in, the engine’s key registration (a Pro check) and its update checks, config fetches, approval requests, the configs, attachments, and vault values you save, Cloud Planner calls paid from planning credit, your requests, and the engine data the Web Console loads (thread history, memory, config), which the broker opens to deliver and keeps for 7 days by default — see the Privacy Policy
How you authenticateGoogle sign-in in the app, then a one-time start commandAn OpenEng key (a Console API key) passed to the engine; Pro required

Engineering apps · the model

Four design principles, with their limits.

Terminal, Kubernetes, Data, Git, and Chat run in your browser, and each one works through a small engine you run yourself: the Terminal, Kubernetes, and Data engines today, and the Git and Chat engines when they ship.

Execution is local

Every command, cluster call, git operation, and database query runs in an engine on your own machine, or, for a cloud connection, in a connector you deploy in your own cloud. Nothing executes on OpenEng’s servers.

Sealed per frame by the web app

The web app and the engine exchange session keys when they connect. After that handshake, the web app’s session is sealed in both directions, every frame with a fresh one-time key, even on your own machine. The engine doesn’t yet reject a frame that arrives unsealed or fails to open, so the seal protects the web app’s own traffic; it doesn’t keep other local programs out.

Loopback only

Each app engine listens only on 127.0.0.1, so nothing is exposed to your network. A machine-local handshake token gates every call from the page, but any process on this machine, including one under another user account on a shared host, can obtain it. The engines can’t defend against other local processes.

Your credentials stay yours

Git uses your credential helper, Kubernetes your kubeconfig. Secrets and tokens are resolved locally by the engine and are never sent to OpenEng. The one exception is the Git app’s CI/CD view: the forge API token you enter stays in that browser, which calls your forge with it directly — it never reaches OpenEng either.

What we never see

If it’s sensitive, it stays on your hardware.

Nothing about your work is sent as telemetry, and there is no server-side copy. An app engine talks to OpenEng’s cloud for only two things: exchanging the one-time key that pairs it with your account (and keeping that sign-in fresh), and checking the release feed for updates. Your own clusters, databases, and git remotes are reached directly from the engine. (The Terminal engine also downloads a small embedding model from Hugging Face once, for command suggestions.)

Run it yourself
Never sent to OpenEng
  • Your source code or repositories
  • Your terminal commands or output
  • Your kubeconfig, cluster data, or logs
  • Your databases and connection strings
  • API keys, passwords, or private keys

Under the hood

How the channel is sealed.

1

Handshake

On connect, the app and the engine exchange session public keys. It is the only unsealed call.

2

Key derivation

For every frame, the sender mints a fresh ephemeral key and derives a one-time symmetric key from it and the recipient’s session key.

3

Per-frame seal

Every request and response frame of the web app’s session is sealed with authenticated encryption, with a fresh, unique key and nonce per frame. The engine doesn’t yet reject a frame that arrives unsealed or fails to authenticate: it passes the bytes on as they arrived. Sealing is how the web app talks to the engine, not a gate the engine enforces.

4

Auth floor

A machine-local handshake token gates every call, and the default is deny. The engine hands that token to any local program that asks, including one under another user account on a shared host, so it keeps out nothing that already runs on this machine. The schema carries no field for an OpenEng secret. The only credentials that cross it are your own, such as a database connection string, sent over the sealed loopback channel and stored on your machine.

Pairing uses one-time keys

Signing in to an app with Google mints a single-use start key that expires within minutes, and the OpenEng API mints at most five unused keys an hour per account. The start command hands the key to your engine, which exchanges it once with the OpenEng API for its own session, so a copied command can’t be replayed. The browser can’t launch a program, so this step is copy and paste, never auto-run.

The same model is built into all 5 app engines: Terminal, Kubernetes, Data, Git, and Chat. Read the architecture docs.

OpenEng AI · what crosses the wire

What crosses the wire, and what never does.

The channel between the browser and your AI engine carries what you exchange in the Web Console, encrypted on every hop. Model weights, embeddings, the engine’s stored provider keys, and your OpenEng key never cross it.

Status: OpenEng AI isn’t live yet. The Console and Web Console interfaces load, but the OpenEng AI API routes and the Broker aren’t deployed. Nothing can be saved or published, and no AI engine can register or connect. Pro, Enterprise, and pay-as-you-go launch in Q4 2026 and can’t be purchased yet. Everything in the OpenEng AI half of this page is how it is built to work.

Most vendors ask you to trust a privacy policy. OpenEng executes the work on your machine: your open-weight models run there, the engine reads your files there, and your provider keys stay there. A hosted model you choose for a role receives what you send it. What crosses the wire is what you exchange in the Web Console: your requests, the engine’s streamed replies, and the engine data the console displays — your thread history, learned memory, the running config, and placeholder names. Requests and that engine data pass through our broker, encrypted in transit and at rest, and the broker can open them. The engine’s streamed replies are sealed end-to-end, so the broker cannot read them.

What never crosses

The models stay on your machine

A router that keeps a short log

  • Crosses the wire, encrypted: requests, replies, and the data you view
  • Weights, embeddings, stored provider keys, and your OpenEng key stay on-device

OpenEng AI · encryption

Sealed replies. Encryption on every hop.

The engine’s streamed replies are sealed end-to-end to your browser, and the broker relays that stream without being able to read it — provided it relays the engine and browser public keys honestly, because the broker is also what distributes them. Your prompts, and the engine data the Web Console loads, travel sealed to the broker, which opens and re-seals them to route them. On those legs the relay is a trusted component, not a blind one.

Authenticated encryption on every hop

  • Tampering is detected, not just decoded
  • Streamed replies are sealed past the broker’s store and traffic
  • Even loopback traffic is sealed, as if it crossed a network

One key agreement, every surface

  • One key-agreement design, every surface
  • XChaCha20-Poly1305 for OpenEng AI · ChaCha20-Poly1305 for the apps
  • Standard primitives, no bespoke crypto

OpenEng AI · the perimeter

No front door to pick.

The AI engine opens no network port. It dials out to reach your browser, so the classic browser-to-server attack surface simply isn’t there. What remains is authenticated and encrypted at every hop, in independent layers.

layer 1

No network port

layer 2

An explicit origin allow-list

layer 3

Paired to your engine only

layer 4

Checked continuously

OpenEng AI · egress & policy

One gateway for models. A floor no config can lower.

Every hosted or cloud model call leaves through one gateway, so model egress has a single place to be seen and governed. Every config runs above a security floor that no config can remove — and the defaults that operators can relax are named below.

One gateway for model calls

The floor no config can remove

Policy layers above it

OpenEng AI · credentials & execution

Short-lived sessions. Approval on anything that bites.

The Web Console’s credentials are short-lived (about an hour), re-minted silently, and gone when you close the tab; the Console keeps you signed in until you sign out, and the engine’s OpenEng key is long-lived, so treat it like a password. Where bubblewrap works on the host, the shell commands the agent runs execute in a kernel sandbox, and destructive actions need your approval by default.

Short-lived sessions, a long-lived key

A kernel sandbox where the host has one

  • Read-only root where bubblewrap works
  • Network off where the host can isolate it

Approval on destructive actions

Secrets & identity

Secrets stay by reference. Identity stays clean.

Configs hold references, not secret values, and the account system is built on boring, audited standards. There is no bespoke crypto. The engine’s OpenEng key is OpenEng AI’s long-lived API credential, which you can revoke in the Console. The Web Console’s sign-in ends when you close the tab, and the Console keeps you signed in until you sign out.

Secrets-by-reference control plane

  • Configs hold references, never secret values
  • Optional write-only vault · the environment wins

Identity hygiene

  • Standard browser sign-in
  • One interactive session per surface
  • API keys shown once · only a hash stored

What we never collect

No engine telemetry. No training on your data. No stored cards.

The simplest privacy guarantee is the one where the data never exists. None of the engines, neither the five app engines nor the AI engine, sends usage telemetry.

No engine telemetry

No training on your data

Card data never stored

The one thing we measure is this website: openeng.app uses Google Analytics for Firebase to count page visits. It runs only on this site: the apps, the Web Console, and the engines load no analytics. Read the Privacy Policy.

Our threat model, stated plainly

The one boundary we can't cross, and won't pretend we do.

The same-machine ceiling

Every OpenEng engine runs only on your own machine, and, where bubblewrap works on the host, the AI engine confines the shell commands its agent runs in a kernel sandbox. But the engines can't defend against other processes on the same machine. An app engine hands its handshake token to any local program that asks, including one running under another user account on a shared host, and that program can then drive the engine, which runs as you. The AI engine opens no port, but a process running as your OS user can read its key and its files. We'd rather state that plainly than imply a guarantee we can't make: run the engines only on a machine whose other users and programs you trust. For the Terminal, Kubernetes, and Data apps, everything above this line describes how they work today, and you can verify it; Git and Chat follow when their engines ship, and the OpenEng AI half describes how it is built to work until its API and Broker are deployed.

Questions

Security, answered.

The five engineering apps never send them to OpenEng: each app engine runs on your machine, binds only to loopback (127.0.0.1), and the web app reaches it over a session it seals per frame. What you point an app at yourself — your SSH hosts, clusters, forges, MCP servers, connectors, or an external model server for Chat — receives what you send it. For OpenEng AI, the models and the agent run on your machine, and the engine reads your files there; a hosted model you choose for a role receives what you send it. Your requests travel through the OpenEng Broker, encrypted in transit and at rest, and the broker opens them to route them to your engine. The engine’s streamed replies are sealed end-to-end, so the broker cannot read them. The engine data the Web Console loads — your thread list and history, learned memory, the running config, placeholder names, and loop, warm-up, and device status — is sealed to the broker, which opens it to deliver it. The broker keeps every envelope it routes for a retention window (7 days by default) and then deletes it by age.

Trust you can read for yourself.

Run an app engine on your own machine, watch the wire, and verify the engineering apps’ claims on this page. Private by construction: no engine telemetry and no training on your data.

Install the Terminal engine · free