xowit-labs/sovran

Private agents. Private inference. No way out.

Sovran is a privacy-preserving runtime for agents and inference — for teams that will not put PII, transactions, or internal documents through a public model endpoint, whatever the contract says.

  • private inference
  • default-deny egress
  • tenant isolation
  • your session data
  • vision + working PoC
problem/

A DPA does not close every security review

Commercial model APIs, and even managed private endpoints, leave one objection on the table: your sensitive context leaves the perimeter you control. For many financial and health-adjacent teams, that alone blocks the AI feature.

Third-party model APIs

A DPA helps. It does not replace “this prompt never left our isolation boundary” for every risk committee.

Agents with tools

The risky surface is not the weights. Tooling, logging, support access, and “temporary” egress are where privacy quietly fails.

Product pressure

Isolation looks obvious on day one. Sustaining default-deny under velocity, on-call, and feature requests is the real work.

idea/

A sovereign runtime for agents and models

Separate the agent platform from the model plane. Give each tenant a hard data boundary. Keep the trusted compute off the open internet, and move data host-side so the workload sees local disk rather than a cloud SDK with broad rights.

fig.01 · product shape
Sovran product shape: control plane over agent runtime, private model plane, and per-tenant data; no general internet from the trusted compute boundary

Isolation is the product

Not a setting bolted onto a generic AI platform. The default is no general egress, private inference, and tenant data that never lands in shared ops logs.

Agents are the wider surface

Weights rarely phone home. Privacy fails through tools, prompt injection, logging, support access, and the first temporary NAT someone opens at 2am.

Default-deny has to survive shipping

Every exception stays explicit, tenant-scoped, logged, and awkward to add. Holding that line under product pressure is harder than the diagram, and worth more.

Session data is tenant data

Transcripts, tool outputs, and intermediate files live as your artifacts. Platform telemetry stays metadata-only, on purpose.

vision/

What Sovran aims to become

Not another chatbot with an enterprise toggle. A runtime you can place where procurement demands, keeping the same security contracts: scoped sessions, private inference, and a guest that cannot casually open the world.

for product teams

Ship AI features without shipping prompts out

Build agents that read tenant documents, call allowlisted tools, and leave transcripts as tenant data, while platform ops sees only health and policy denials.

for security & risk

Argue from architecture, not only paperwork

“There is no NAT on the agent tier” and “there is no path to a public model from this workload” is a different conversation from “the vendor promised not to train on our data.”

paths/

One product shape, several honest placements

Buyers are not all the same. Some accept a well-isolated shared platform; others run software only in accounts they control. Naming the options up front avoids selling the wrong trust story.

Deployment modes

M1

Shared multi-client

One platform account. Hard isolation between clients via network, identity, and storage. Efficient for pilots and SaaS-shaped adoption.

M2

Dedicated, you operate

One client in a dedicated account or VPC you manage. Same runtime contracts, fewer neighbours, for larger finance buyers.

M3

Customer-managed

They run the stack. You ship artifacts and runbooks, not long-lived custody of their prompts. The cleanest procurement story for sceptics.

Trust tiers

TierWhat they acceptWhere it fits
A Contractual + network isolationPlatform-hosted AWS, strict egress, no training on your dataPilots, SMB, first enterprise conversations
B Customer-controlled cloudDeploy into their account or a dedicated account they ownBanks that reject shared multi-tenant ops
C Hardware isolationEnclaves, confidential VMs, attestationHighest assurance reviews — longer road
D True air-gap / on-premTheir DC, no outbound dependencyEnd-state for some regulated buyers

Early work targets tier A, with a path toward B and, longer term, C/D. Presenting A as if it were a true air-gap loses late-stage reviews.

poc/

A reference architecture you can run

Vision without proof is a pitch deck. The proof is a multi-account AWS reference architecture: clients reach only their agent over PrivateLink; agents and models sit on no-NAT subnets; inference stays on a private plane; session artifacts land in per-client buckets.

fig.02 · poc architecture
Sovran PoC architecture: client accounts reach per-client agents over PrivateLink into a reference account with no-NAT agent and model tiers and per-client KMS and S3

What it demonstrates

  • Two clients, three AWS accounts, hard cross-client isolation
  • PrivateLink-only entry to each client's agent
  • No NAT on agent and model tiers; internet egress fails
  • Per-client KMS plus code and data buckets
  • Init + agent + sync-up workspace pattern, agent image without the AWS SDK
  • Metadata-only platform logs; transcripts as tenant data
  • Real tool-using completions from a private GPU that has no internet path
  • Storage policy scoped to this account's buckets — no provider-owned bucket in the allowlist
  • Container images served from a bucket we own, so there is no registry service to reach
  • A test that fails if a removed network path quietly comes back

What it deliberately is not

  • A finished multi-tenant SaaS control plane
  • Self-managed Firecracker density (roadmap)
  • Formal compliance certification
  • Account vending or a full org-hierarchy product
  • Proof that the residual ECS task-role risk is gone
  • A highly available model plane — one GPU, capped at one, minutes to cold start

Done · Platform slice

Terraform multi-account layout, Fargate agents, per-client endpoint services, isolation checks, filesystem tools under a path jail, and a Packer AMI running vLLM with Gemma 4 E2B baked in. Proven end to end on a private GPU: the model boots with every egress rule revoked, so there is no runtime Hugging Face dependency to fail closed.

Honest limit · ECS residual risk

One task IAM role is shared by the sync and agent containers. Soft mitigations help; a guest with zero cloud credentials needs host mediation. We document that residual risk rather than hide it.

Want the Terraform reference?

Free to ask for: the multi-account sample — PrivateLink agents, no-NAT tiers, per-client isolation, and operator notes to apply, demo, and tear it down. Tell us what you are building if you feel like it; we are just curious, and it is not a condition.

Get the Terraform code
faq/

Questions we expect

What is Sovran, in one sentence?

A privacy-first runtime for agents and inference: private models, default-deny networking, and hard isolation between tenants, so regulated buyers do not have to trust a third-party model API with their prompts.

Is this production multi-tenant SaaS today?

No. What exists is a working reference architecture and PoC on AWS. This site describes the product vision; the PoC proves the hard isolation properties first. Compliance packaging and SLOs are not claimed yet.

Why not just use Bedrock or OpenAI with a DPA?

Many finance and health-adjacent buyers refuse public model APIs regardless of contract language. Sovran's answer is structural: no path to those APIs from the agent, and a private model plane you control.

How is this different from multi-tenant agent samples on AWS?

Samples tend to isolate tenants from each other while still allowing internet egress or third-party model APIs. Sovran's difference is the boundary itself: private inference, host-mediated data patterns, and egress policy as a first-class feature rather than a missing toggle.

Which trust tier are you selling?

Tier A first — contractual plus network isolation on platform-hosted AWS — with a clear path toward customer-controlled deployment (B) and, later, stronger hardware or on-prem stories (C/D). We do not present A as if it were D.

Does the agent really have no cloud credentials?

That is the target design (host-mediated I/O; the guest sees local disk only). The current ECS PoC raises the bar — no AWS SDK in the agent image, sync sidecars hold the S3 rights — but one task IAM role is still shared across containers. Removing that residual needs host mediation, and we call it out rather than paper over it.

Where do prompts and completions go?

Into the tenant's session workspace and data store, not into shared platform log groups. Operators see latency, status, and policy denials. Tenants get transcripts they can export and retain under their own policy.

What models do you run?

Self-hosted open weights on a private plane, chosen for procurement comfort as much as capability. The PoC runs instruction-tuned Gemma 4 E2B on vLLM, on a single GPU instance, with the weights baked into the machine image so the model plane needs no internet at all — it has been booted with every egress rule revoked and still served. It has now been proven on two GPU generations in two regions, which matters mainly because it shows the model plane is not pinned to one scarce instance type. The capability gap versus frontier SaaS APIs is real; privacy is the trade a buyer is making.

How well does the private model actually perform?

Measured on the PoC's own hardware — one NVIDIA L4 (a g6.xlarge), 24GB, running Gemma 4 E2B on vLLM at its full 131k context. Numbers below are from the model host itself, so no load balancer, PrivateLink hop or agent logic is included in them.

Single stream, 256 output tokens
49 tok/s
Single stream, 2048 output tokens
47 tok/s
8 concurrent streams
366 tok/s total · 46 each
Prompt ingest (4.5k tokens)
well under a second
Cold start, zero to serving
~35 minutes

Two things stand out. Throughput is flat in answer length — 8x longer output costs under 4% — so "how long is the reply" is not a capacity question. And concurrency is close to free: eight simultaneous sessions cost about 7% each and deliver 7.4x the aggregate, so one conversation does not saturate a single GPU.

Qualitatively, at this size it is better than the parameter count suggests and clearly not frontier. Asked for a 700-word story it produced a coherent one that held its premise and landed a real ending. Asked for FizzBuzz in Python and Rust it wrote both idiomatically and correctly described why the Rust version reads differently. Given a function that concatenated user input into a SQL string, it led with the injection vulnerability. Tool calling is reliable enough that the end-to-end demo runs several tool calls per session without hand-holding.

Where it will disappoint: long-horizon reasoning, dense domain knowledge, and anything you would currently reach for a frontier model to do. The honest framing is that the architecture is model-agnostic — a larger open-weight model on a bigger GPU slots into the same private plane — and that a 24GB card capped at one instance is a proof of isolation, not a serving tier.

What if my agent needs to call something inside my own VPC, or on-premise?

This is the most common extension people ask about, so to be clear up front: it is not implemented or tested in the reference architecture. What follows is the shape that fits the design rather than something we have proven.

The wrong answer is a NAT gateway. Opening general egress to reach one internal API discards the property the whole architecture exists to hold, and it is the exact "temporary" exception that never gets closed.

The shape that fits is to turn the direction around: you publish the service. In your account you put an internal load balancer in front of the system the agent needs, and expose it as your own PrivateLink endpoint service. The reference account then gets an interface endpoint in the agent tier pointing at that one named service. If the target is on-premise, your side bridges it over Direct Connect or VPN — that is your existing private path, not something the agent platform has to open.

This keeps the properties that matter: still no NAT and no internet gateway, traffic never traverses the public internet, the reachable surface is one named service rather than a route to everywhere, and you own the endpoint service — so you can revoke access without our involvement.

The honest caveats. It genuinely widens what a compromised or prompt-injected agent can reach, and that target is now inside your network, so it belongs behind the same tool allowlisting and scoping discipline as any other capability — not simply switched on. And since we have not built it, treat the diagram as a design sketch: the isolation claims we have actually tested are the ones on the PoC diagram above.

fig.03 · client-published service (not implemented)
The agent tier gets an interface VPC endpoint pointing at a PrivateLink endpoint service the client owns, which fronts their internal API and, via Direct Connect or VPN, an on-premise system; general internet egress remains refused
Who is behind Sovran?

Sovran is a product of Xowit Labs (labs.xowit.com), a company registered in England and Wales (company number 17154346).

How do I get the Terraform reference code?

It is free. Email us at hello@sovran.uk and we will share sample Terraform for the multi-account reference architecture, plus operator notes to apply it, demo the isolation, and tear it down. Mentioning what you are building is welcome but optional — we are curious what people want this for, not vetting you.

What if I need other Python packages or Docker images?

Do not open general internet egress from the agent or model tier. Promote dependencies through a private artifact path — S3 used as a static index or registry. For Python, host a simple package index or wheels on S3 and install only from that URL. Same rule as model weights: every artifact enters through a controlled, allowlisted store, never pip or Docker Hub at runtime from the trusted boundary.

For containers this is no longer a suggestion — the PoC does it. A container pull is only two HTTP GETs, for a manifest and some blobs, and S3 can serve both as static objects. So the images are laid out as a read-only registry in a bucket the account owns, readable only through the VPC endpoint, and the registry service is gone entirely: no ECR repositories, no registry endpoints, and no registry permissions on the execution role, because an anonymous pull needs none.

The reason to bother was never the saving. While images came from a managed registry, the storage policy had to keep allowing a bucket owned by the cloud provider — an object store we can neither inspect nor reason about, sitting inside the one egress path the agent still has. Serving our own images closed that: the policy now names this account's buckets and nothing else. The cost is stated plainly in the repo — anything running in the VPC can read the image layers — which is a real trade, not a free win.

future/

After the PoC

The PoC freezes the isolation thesis. Product work grows the runtime toward denser isolation, placement choice, and tools that do not undo the boundary.

Credential-free guests

Host-mediated storage and model I/O so the guest never holds cloud credentials — Firecracker or equivalent density with a stronger trust boundary.

Placement you can choose

The same contracts across shared, dedicated-operated, and customer-managed modes, so procurement can move without a product rewrite.

Scoped tools, not open internet

Allowlisted connectors, DLP limits, and customer-owned paths for email, CRM, and banking APIs, without a general NAT just for one feature.

Tenant-native debug

Session lists, transcript export, retention, and break-glass with dual control, so support never needs to grep prompts out of your logs.

contact/

Privacy-first agents, built as architecture

Product exploration and reference notes for teams evaluating a sovereign agent and inference path.