Skip to main content

ThemissingcontrollayerforproductionAI.

What Vault did for secrets, OGuardAI does for AI data. Detect, tokenize, transform, restore, revoke, every step under policy. Your LLMs work normally. Detected values your policy protects stay inside your boundary.

Self-hosted · Self-hosted · Provider-neutral

Full Lifecycle ControlDetect → Tokenize → Transform → Restore → Revoke
Reversible by DesignSemantic tokens preserve context, LLMs generate correct output
Fits Your StackREST API, SDKs, MCP server, or a proxy for OpenAI, Azure OpenAI, Vertex AI, Mistral, and Anthropic endpoints. RAG and agents included.
No Provider Lock-InSelf-hosted and provider-neutral: the API and SDKs never contact a model provider, your application forwards safe text to the one you choose; the proxy forwards to OpenAI, Azure OpenAI, Vertex AI, Mistral, and Anthropic endpoints; the optional NER model runs locally inside your boundary.
oguardai-demo

The Data Flow

If your AI sees raw PII, you have already lost control. Watch how OGuardAI keeps detected PII inside the trust boundary at every stage.

TrustedUntrusted

Swipe to see all stages

Your App
Raw input
User input with sensitive data enters the pipeline
>"Email sara@oronts.com about order #4821"

Proof points

Facts you can verify before the first call

No customer logos and no figures without a run behind them. Each point links to the document or code that backs it.

Any language, by design

structured data protected in every language; NER and restore extend to any language, no code

Email, phone, IBAN and other structured identifiers are matched by format regardless of language. Person, company and location names and restore templates ship broad coverage today (around 30 languages) and are extended per locale as data (a language pack or a restore-template overlay) with no source change.

Source: Language guide →

12industry policies ship with it

Healthcare, banking, legal, HR, government, insurance, tax, telecom, education, retail, CRM and social media, each with its entities, roles, channels and restore rules in YAML.

Source: Policy authoring →

7framework adapters

LangChain, LlamaIndex, Haystack, CrewAI, OpenAI Agents, Vercel AI and Mastra, for the Python and TypeScript SDKs; SDKs are also available for Go and Java, plus a REST API and an MCP server.

Source: SDK guide →

Runs inside your boundary

self-hosted, air-gapped if you want

No phone-home, no licence server. Detected values your policy protects are tokenized before anything leaves the runtime you operate.

Source: Licensing →

Deterministic restore

no model rewrites anything

Restored values come only from the AES-256-GCM sealed session that travels with the request. A full restore is byte-identical to the original, and nothing trains on your data.

Source: Security guarantees →

Revocable and auditable

revoke once, never restored again through the runtime

Revocation stores HMAC-SHA-256 digests, never raw values, and audit events carry entity types and counts only. Raw PII is never written to a log line.

Source: Data retention →

Proprietary core, Apache-2.0 SDKs. Self-hosted, no licence key.

What are you building

One primitive, applied where you call it

Pick what you are building. The proof and the quickstart below adapt to it. The primitive never changes: transform at a boundary your code owns, restore under a channel your policy allows.

The same value becomes the same token in every document and query of a corpus, raw values never enter your embeddings, and the answer is restored at the end.

Where it sits
docs → /v1/rag/ingest (corpus_id) → your embeddings + chunk_session_state → /v1/rag/query → retriever → /v1/rag/context → model → /v1/rag/answer
Facts you can verify

A corpus_id derives a deterministic, corpus-scoped id and cap, so the same value maps to the same token across documents and queries.

Source: API reference →

Ingest returns a per-chunk chunk_session_state stored beside the chunk, and context merges admitted chunks fail closed.

Source: RAG pipeline →
Start here
curl -X POST http://localhost:3000/v1/rag/ingest \
  -H 'X-API-Key: $GUARDAI_API_KEY' \
  -H 'content-type: application/json' \
  -d '{"corpus_id":"support-kb","text":"Ticket from Erika Mustermann ..."}'
Read the RAG guideRunnable example: examples/rag-pythonoutput_channel: user_output at answer, none in the store

Boundary: It cannot delete a value from your vector store. A runtime version upgrade invalidates sealed blobs and forces a re-ingest.

OGuardAI runs where you call it. It does not reach into a database, a vector store or a log sink on its own, and it cannot delete a value from one. The transform happens at the boundary your code owns.

Not a proxy. Not a chat platform. Not a model.

OGuardAI is a self-hostable AI data protection runtime that sits between your applications and the model providers you use. It detects sensitive values, tokenizes them under policy, restores them deterministically, and keeps an audit and revocation trail. Three questions come up in almost every first conversation; here are the direct answers.

“So this is an LLM proxy?”

No, it is the runtime, not the pipe.

The transparent proxy is one integration mode among several, there for teams that cannot touch application code.

  • Most deployments call the REST API or the SDKs straight from their backend, so no proxy ever enters the request path.
  • Every mode runs the same core: detection, policy decisions, semantic tokens, deterministic restore, audit, and revocation.

A gateway rewrites traffic. OGuardAI governs data.

“Is this the same as an AI workplace platform?”

No, it sits underneath one.

Workplace platforms give employees a chat UI on top of hosted models, with a contract as the privacy story.

  • OGuardAI has no UI your employees talk to and hosts no models.
  • It decides which values reach a model at all, inside your infrastructure, with encrypted sessions instead of promises.

A platform can embed OGuardAI. It does not compete with one.

“So a small model rewrites my text?”

No, nothing generates your text.

The runtime is deterministic Rust: format detectors find structured identifiers, policies decide, tokens replace exact spans, and restored values come only from the encrypted session.

  • Full restore returns the original value exactly; partial, masked, formatted, abstract, and none are deliberate policy choices per channel.
  • The only machine learning is optional and local: a name detector for people and organizations, and OCR when you send images, both inside your boundary.

Nothing generates text, and nothing trains on your data.

Read the architecture

One sentence for your security review: OGuardAI is a self-hosted data protection runtime between your applications and the model provider you choose. Detected, non-whitelisted values your policy protects are tokenized or removed before a request leaves your boundary.

Detection

Strong out of the box. Yours to extend and tune.

A deterministic format floor always runs. Named-entity models, your own patterns, your own detectors and per-language routing build on top of it, and the policy engine around them never changes.

A

Adaptive

Two paths, one policy: a format floor that always runs, and named-entity models where names matter.

  • 19 entity types detected out of the box by format: email, phone, IBAN, cards, national and tax identifiers, addresses in seven locales, money amounts, order and case references.
  • Person, company and location names come from the optional NER sidecar, GLiNER by default, so a deployment without it still protects every structured value.
  • The format floor is compiled Rust with no model call and no network hop; the same input always gives the same result.
  • An NER outage or timeout falls back to the floor for optional types and fails the request closed for the types your policy marks as required.
E

Extensible

Add detection in data and config, never in a fork. Every seam can only add or tighten.

  • Custom patterns in policy YAML or on a single request: MRN, Steuernummer, matter id, any domain identifier, with context words so a broad shape does not over-match.
  • Deployment detectors and vocabulary in server config, and an external HTTP detector you already run, merged additively and fail-closed when it is required.
  • Zero-shot NER labels mapped in policy on the default model, so a new entity class needs no retraining; a backend that cannot serve one fails readiness instead of guessing.
  • Language packs and restore templates are JSON and YAML overlays on a 30-language floor that only add or tighten; a malformed restore overlay aborts startup rather than loosening it.
T

Fine-tunable

Every knob moves toward more protection by default, and each one is a config value, not code.

  • NER precision floor at 0.65, raise it per policy; the model's own recall threshold is set separately on the sidecar.
  • Route any language to a different backend: spaCy for space-free scripts, a larger or domain-tuned model, or your own NERBackend class.
  • Mark entity types as required so a request never passes raw when their detector did not run.
  • Tune noise suppression with an acronym allow list and stoplist, and lower the minimum span length to catch short names.

Choose your detection

  • Use the bundled detection

    Works out of the box across languages, with every model licence documented before you deploy.

  • Use your own models

    Point a bundled engine at your own fine-tune, or route individual languages to the model that handles them best.

  • Use your own NER engine

    Not limited to the engines we bundle: a fine-tuned transformer, an in-house model, or any framework your team already runs, loaded as a backend class.

  • Use your own detection service

    Keep the detector your organisation has already approved. It runs alongside the built-in format floor, which always applies.

Whichever detection you choose, the rest is identical: the same policy engine, semantic tokens, restoration, output guard, audit trail and trust boundary. GET /v1/capabilities lists what your deployment detects, with the source of every type.

No in-process plugin loader by design: a dropped-in binary never runs inside the runtime with raw-PII access. Extensions integrate over config and HTTP as services you operate inside your boundary, never as code loaded into the runtime process.

A deployment that brings its own detection can run with no third-party model at all, so none of our model licences apply to it.

Features

  • ST

    Semantic Tokens

    Typed tokens like {{email:e_001:9cf4f72d6910}} carry context so LLMs generate correct output.

  • 6R

    6 Restore Modes

    Full, partial, masked, formatted, abstract, or none, per entity type and channel.

  • PE

    Policy Engine

    YAML policies decide per entity type and caller role: tokenize, abstract, or redact, with reject-on-redact, typed whitelists, and a restore mode per output channel.

  • OG

    Output Guard

    Second-pass scan re-runs detection on the LLM response, catching newly generated PII the detectors recognize.

  • TR

    Token Repair

    Three-stage repair (strict, repair, fuzzy) resolves tokens a model returns malformed.

  • SS

    Streaming (SSE)

    Transform and rehydrate delivered over server-sent events. The text is processed first, then streamed in chunks that never split a token across two frames.

  • ER

    Entity Revocation

    Revoke a value so every future rehydrate returns [DELETED]. Output already delivered downstream cannot be clawed back.

  • RP

    RAG Pipeline

    Sanitize document ingestion and query-time context for retrieval-augmented generation. The same value collapses to the same token across every chunk and document in a corpus, so cross-document references survive tokenization.

  • ML

    Multi-Language

    Structured values are matched by format in any language; names come from the NER model per language; and restore templates ship for around 30 languages today, extensible to any language with no code.

  • OCR

    Documents, images, and OCR

    Upload PDF, DOCX, HTML, Markdown, CSV, or TXT and every string is protected via native text extraction, with no OCR for born-digital files. A CSV column can be mapped to an entity type by header, so a free-text column is protected even with no shape to match. Scanned documents and images go through Tesseract OCR, bundled in the server container image.

  • RBAC

    Roles & Access Control

    Policy-defined caller roles gate how much each identity restores, so the same session reveals different values per role and channel.

  • {{}}

    Custom Entities

    Define any domain identifier with a regex custom_pattern (MRN, Steuernummer, MSISDN, matter id), detected and tokenized with no code.

  • OTel

    Observability

    OpenTelemetry-ready tracing, structured logs with request and trace IDs, and a full audit trail, with raw PII never written to a log line. PII-free audit events can be pushed to your SIEM.

  • MCP

    Works in ChatGPT, Claude, Cursor, and any MCP client

    Connect the self-hosted MCP server to ChatGPT, Claude Desktop and Code, Claude for Work/Team/Enterprise, Cursor, Windsurf, and other MCP clients. It protects the data the assistant works over, tool results, RAG context and connector data, not the text you type. A shipped example app brings your records into a ChatGPT conversation as tokens, and a human reveals the original only through a same-origin, single-use, short-lived ticket that never touches the model or the transcript. See the MCP integration guide.

Performance

Where the time actually goes

We publish no latency figure without a named benchmark run behind it, and there is no such run yet. What we can state is the shape of the work: on the builtin path every stage is in-process regex, span replacement and encryption, with no model inference and no network hop. Enabling NER adds a round-trip to the detector sidecar plus a model forward pass, and that dominates the request.

Measure it on your own hardware and workload; the benchmarks page has the method and scope. Read the benchmarks page for method and scope

In-process
Transform
builtin regex detection and tokenization, no model call
In-process
Rehydrate
restores from the session that travelled with the request
No store
Session seal
AES-256-GCM on the request itself, no session lookup
No model
Token repair
3-stage strict, repair, fuzzy resolution

Where latency actually lives

Your App→OGuardAI (builtin path)→LLM Provider→OGuardAI (builtin path)→Your App

The provider hop carries a network round-trip, queue wait and model inference. OGuardAI sits on both sides of it doing in-process string work.

  • ⚡

    Compiled Rust core

    Transform, tokenization, session encryption, and rehydration all run as native compiled code, not through a Python runtime or JVM.

  • 🔤

    String ops on the builtin path

    On the builtin path the pipeline is regex matching, span-based replacement, and AES-256-GCM encryption with no neural network in the hot path. NER mode adds model inference and is slower.

  • 📦

    Stateless by design

    With sealed sessions there is no database lookup and no session store query: the encrypted blob travels with the request. Redis-backed sessions and revocation are opt-in and add a hop.

  • 🌊

    Streaming-native

    SSE delivery runs the full transform or rehydrate first, then streams the finished text in token-boundary-aware chunks so a {{type:id}} token is never split across two frames. It is chunked delivery of the completed result, not token-by-token model passthrough.

Built for every regulated workflow

One runtime, a policy per industry. Each vertical gets the entities, restore rules, roles and channels it needs, defined in YAML with no code. Every example below is the shipped policy of that name.

Healthcare

HIPAAGDPR§203 StGB
policy: healthcare-clinical

SSN, health ids, passports, cards, IBANs, KVNR and DEA numbers refuse the request; MRN, NPI, encounter and diagnosis codes and patient and clinician names are tokenized, with restore gated by care-team role. German and English.

You send

Patient Erika Mustermann, MRN 4471982, Fallnummer F-88231, Dx code E11.9, seen by Dr. Mustermann, NPI 1093817264.

The model sees

Patient {{person:p_001:147917db9b96}}, {{custom:mrn:x_001:1c012bbda756}}, Fallnummer {{custom:encounter_id:x_002:1ef29e5099fa}}, Dx code {{custom:icd10:x_003:33fb20c5b4c6}}, seen by Dr. {{person:p_002:3a1f75775a3c}}, {{custom:npi:x_004:3d1aa7c56d16}}.

Who can restore
Clinician, nurse, care teamNames and diagnosis in full, MRN last 3
ResearcherAbstract, de-identified
Log channelRemoved entirely
Domain entities, no code
{{custom:mrn}}{{custom:encounter_id}}{{custom:icd10}}{{custom:npi}}{{custom:age}}
$an SSN, KVNR or DEA number in the input refuses the request

Works in your language

Structured values (email, phone, IBAN, cards, order and customer IDs) are matched by format, so they are protected in any language with no configuration. Names are a separate layer: they depend on the NER model, and that coverage is not uniform.

  • Names covered by the default model

    Default model

    The default GLiNER model returns person, company and location spans for these and other high-resource languages. Name coverage depends on the deployed model, so validate it for your own languages in your own deployment.

    13 languages

    GermanEnglishDutchFrenchSpanishItalianPortugueseRomanianUkrainianRussianGreekFinnishArabic
  • Names need a nudge

    Partial

    A name may be typed as company or location instead of person, or missed. Structured values stay protected regardless; for names, anchor them with a policy pattern or route the language to a stronger backend.

    7 languages

    PolishCzechHebrewHindiThaiChineseJapanese
  • Every language, by format

    Always on

    Format detectors match email, phone, IBAN, card and identifier patterns directly, independent of language or script. This layer always runs.

    EmailPhoneIBANCardsOrder & customer IDs

Treat name detection as a data-minimization control, not an absolute guarantee: a span the model does not return cannot be tokenized. Coverage is extensible per language without touching source code.

Built for regulated data

Architectural controls that support your compliance program. OGuardAI runs on your own infrastructure and is not itself certified or audited; certification remains your responsibility.

  • G

    GDPR-aligned design

    Tokenization supports data minimization and key-retirement erasure controls. Tokenized values are pseudonymous personal data, not anonymized, so GDPR still applies.

  • H

    Healthcare (PHI) controls

    PHI controls in the shipped healthcare policies: MRN, NPI, DEA, KVNR, ICD-10 and encounter ids as policy-defined patterns, diagnoses and medications as zero-shot labels on the general NER model, audit trails, and role-gated restore. Supports HIPAA programs; not a certification or BAA.

  • S

    Auditable security controls

    AES-256-GCM sessions, per-credential access controls, and a full audit trail with trace IDs. Supports SOC 2 evidence; not an attestation.

  • 🔒

    Self-hosted

    Your infrastructure, your data. The whole trust boundary runs on hardware you control.

Key Guarantees

  • Detected, non-whitelisted PII is tokenized or removed before the model sees it
  • AES-256-GCM encrypted sessions
  • HMAC-SHA-256 revocation (no PII stored)
  • Full audit trail with trace IDs
  • Fail-secure: failures return clean errors, never detected, non-whitelisted values in the clear
  • Self-hostable in your own EU VPC or air-gapped network; the whole trust boundary runs on your infrastructure

Built for the regulatory reality

Hosting your AI in the EU with a DPA does not remove the section 203 StGB confidentiality duty, and it does not neutralize the US CLOUD Act. When the raw identifier never reaches the provider, there is less to disclose and less third-country-transfer exposure to assess. OGuardAI is one technical data-minimization control, not a compliance product.

Section 203 StGB professional secrecy

Doctors, lawyers, and tax advisers keep control of protected data. The model sees tokens, not the secret.

CLOUD Act and third-country transfers

Raw PII stays inside a runtime you operate, so an EU data center plus a contract is not the only safeguard.

EU AI Act Article 10 data governance

Data minimization at the input boundary is one measure inside the assessment you still own.

Read the EU AI Act readiness background

Background, not legal advice. OGuardAI does not make a deployment compliant on its own.

Drop-In Integration

OpenAI Python
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8081/v1"
)
# Standard OpenAI usage. OGuardAI masks PII automatically.

Proxy mode is a base URL change. SDK and API modes are a few lines at your model call.

Or embed it anywhere

SDK middleware

Wrap your LLM calls in-process with the TypeScript, Python or Go SDK.

Proxy sidecar

A drop-in HTTP hop in front of OpenAI-compatible endpoints (including named support for Azure OpenAI, Google Vertex AI, and Mistral) and Anthropic-compatible endpoints.

MCP server

Expose protection as MCP tools to Claude, Cursor, or any MCP client.

Self-hosted or VPC

Run in your own EU VPC or air-gapped network; the whole trust boundary stays on your infrastructure.

Editions

The runtime is the same in every edition. What differs is the commercial relationship around it: support, response commitments, and negotiated terms.

  • Developer

    Developers, startups, and evaluation

    Free

    Evaluation under a written agreement

    • The complete protection runtime
    • Self-hosted anywhere, including air-gapped
    • Semantic tokenization and restoration
    • Policy engine and output guard
    • Python, TypeScript, Go and Java SDKs, Apache-2.0
    • Community support (no SLA)
    Request access
  • Business

    Teams running it in production

    Annual agreement

    Commercial support contract

    • Everything in Developer
    • Commercial support with response times
    • Support through security and compliance review
    • Guidance on policy and deployment design
    • Update and advisory entitlement
    Talk to Us
  • Enterprise

    Large regulated organisations

    Custom

    Negotiated agreement

    • Everything in Business
    • Dedicated support and an SLA
    • Priority fixes and engineering time
    • Negotiated services and onboarding
    • OEM terms where they are wanted
    Contact sales

Self-hosting, including air-gapped, needs no licence key and no phone-home. The runtime is proprietary: every deployment, including an evaluation, runs under a written agreement with Oronts.

Request a demo or license

A demo, a licence enquiry, or a meeting. We reply from office@oronts.com.

Licensing

Self-hosted

Run OGuardAI on your own infrastructure, including air-gapped, with no phone-home and no licence server. The runtime is proprietary; its use is licensed by Oronts under a written agreement.

Commercial support

Support with an SLA, plus help through security and compliance review for a production deployment.

OEM

Embedding OGuardAI in a product you distribute is covered by an OEM agreement with Oronts: distribution rights, support commitments, indemnities, and terms for your use case.

Managed Cloud (Waitlist)

Not offered today: OGuardAI is self-hosted only. Join the waitlist if you would want a hosted evaluation later.

Oronts

Built by Oronts

OGuardAI is developed by Oronts, a technology company specializing in AI infrastructure and data protection systems for enterprises and government organizations.

Visit oronts.comProprietary core, Apache-2.0 SDKs. Enterprise support available.

Ready to protect your AI pipeline?

Evaluation access is granted under a written agreement. Once granted, the runtime starts with one command; until then, request access or read the docs.