ThemissingcontrollayerforproductionAI.

What Vault did for secrets, OGuardAI does for AI data. Detect, tokenize, transform, restore, revoke, every step controlled. Your LLMs work normally. Your data stays safe.

Not another model. Not another redaction script. Not another compliance checkbox. OGuardAI is the runtime layer every LLM stack is missing: own the runtime, not the model, and the values your policy protects never reach a model raw.

Apache-2.0 · Self-hosted · Provider-neutral

Full Lifecycle ControlDetect → Tokenize → Transform → Restore → Revoke
Reversible by DesignSemantic tokens preserve context, LLMs generate correct output
Drop-In for Any StackOpenAI, Anthropic, Mistral, local models, RAG, agents
No Provider Lock-InSelf-hosted and source-available, works with any LLM provider
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"

Works Everywhere in Your Stack

RAG Pipelines

Documents ingested with tokens only. Queries and context protected end-to-end.

Docs → Ingest → Vector DB (safe) → Query → LLM → Restore

Agentic Workflows

Each tool call sanitized independently. Per-step policy enforcement.

Agent → Tool Call → OGuardAI → External API → OGuardAI → Agent

Chat & Support

German formal replies with gender-aware restoration. Multi-language ready.

Input → Transform → LLM → Rehydrate → "Sehr geehrte Frau Sara..."
0+Unit Tests
0+Entity Types
0+Restore-template languages
0Restore Modes
0+Builtin Detectors

Source-available core. Apache-2.0 SDKs. Self-hosted.

How It Works

1

Your App Sends Text

User input containing sensitive data enters the pipeline.

Email sara@oronts.com about order #4821|
2

OGuardAI Detects + Tokenizes

PII is identified and replaced with semantic tokens.

Email {{email:e_001:136604cb4637}} about order #4821|
3

LLM Receives Only Tokens

The language model sees tokens in place of the protected values, never the raw ones.

Draft reply to {{email:e_001:136604cb4637}} re: order #4821|
4

LLM Responds with Tokens

The model generates output preserving token placeholders.

Dear {{email:e_001:136604cb4637}}, your order #4821 ships Monday.|
5

OGuardAI Restores Originals

Tokens are deterministically replaced with real values.

Dear sara@oronts.com, your order #4821 ships Monday.|

Detection Technology

Detection Technology

Multi-layered detection combining Rust-native performance with state-of-the-art NLP

R

Rust Regex Engine

  • Regex patterns covering 13 builtin entity types plus German tax ID and social security
  • Low single-digit ms detection on the builtin path (indicative, hardware-dependent)
  • Zero external dependencies
  • Deterministic: same input = same output
Rustregex crate
N

NER / NLP Models

  • Person, company, location detection (NER mode, slower than builtin)
  • GLiNER zero-shot NER model
  • spaCy pipeline (optional alternative)
  • ~30 metadata enrichers; 9 languages with full detection and restoration
  • Confidence scoring with 0.65 threshold
GLiNER (urchade/gliner_medium-v2.1)spaCyPythonFastAPI
P

Post-Processing

  • 3-stage token repair (strict > repair > fuzzy)
  • Output guard second-pass detection
  • Entity linking (sentence-level + JSON structural)
  • Overlap resolution and address merging
RustAES-256-GCMHMAC-SHA-256

Built with

RusttokioaxumserderegexAES-256-GCMHMAC-SHA-256GLiNERspaCyPythonFastAPIuvicornTypeScriptNode.jspnpmNext.jsReactTanStackTailwind CSSFumadocsmotionDockerHelmKubernetesnginxRedisPrometheusGrafanaGitHub Actions

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-driven policies control which entities are masked, passed through, or blocked.

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) handles malformed tokens from any LLM.

SS

Streaming (SSE)

Transform and rehydrate in real-time over server-sent events for chat UIs.

ER

Entity Revocation

Revoke specific tokens mid-session so restored values are never returned again.

RP

RAG Pipeline

Sanitize document ingestion and query-time context for retrieval-augmented generation.

ML

Multi-Language

Detect and protect PII across languages with gender and formality awareness.

OCR

Document & Image OCR

Extract and protect PII from scanned documents and images with a built-in Tesseract OCR path (transform or redact).

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.

Performance

Invisible to your users

A typical LLM call takes hundreds of milliseconds to seconds. On the builtin path OGuardAI completes in a fraction of that, so the overhead is negligible. Figures below are indicative and hardware-dependent; NER mode adds model inference and runs tens to hundreds of milliseconds.

~2ms
Transform
builtin regex detection + tokenization
~2ms
Rehydrate
restore originals in LLM output
< 1ms
Session seal
AES-256-GCM encrypt / decrypt
< 1ms
Token repair
3-stage fuzzy resolution

Where latency actually lives

Your AppOGuardAI ~2msLLM Provider (slow)OGuardAI ~2msYour App

The LLM provider is where latency lives: network round-trip, queue wait, model inference. OGuardAI sits on both sides doing fast string operations.

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

No database lookup, no session store query, no network hop. The encrypted session blob travels with the request.

🌊

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.

Proxy mode: one line change, same performance

# One line change. Detected PII is masked before it reaches the provider.
openai.base_url = "http://localhost:8081/v1"

Your existing OpenAI / Anthropic code stays the same. The proxy handles transform on the way in, rehydrate on the way out.

Not another redaction tool

Most tools stop at detection. OGuardAI controls the full lifecycle.

PII detection is solved. What's missing is a runtime layer that protects data flowing to and from LLMs, with reversible tokens, policy enforcement, and identity-level control.

YFull support
~Partial or add-on
-Not supported
Detect PII in text
Find sensitive entities across multiple languages
OGuardAI
YesPresidio
YesProtecto.ai
YesPrivate AI
YesTonic Textual
PartialOmnifact
Reversible tokenization
Replace PII with semantic tokens that can be fully restored later
OGuardAI
PartialPresidio
PartialProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Round-trip restore (6 modes)
full, partial, masked, formatted, abstract, none, per channel
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability
Identity-level lifecycle
Track the same person/entity across requests, sessions, and pipelines
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability
Revocation cascade (GDPR Art 17)
Delete once, gone everywhere, including linked entities
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability
SSE streaming protection
Transform and rehydrate real-time Server-Sent Event streams
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability
RAG pipeline support
End-to-end: ingest, query, context, answer with cross-chunk identity
OGuardAI
NoPresidio
PartialProtecto.ai
NoPrivate AI
PartialTonic Textual
NoOmnifact
Structured JSON / tool call / agent
Path-aware scanning of chat messages, tool arguments, agent memory
OGuardAI
NoPresidio
PartialProtecto.ai
NoPrivate AI
PartialTonic Textual
NoOmnifact
Per-entity policy engine
Per-entity-type, per-channel, per-destination rules in YAML
OGuardAI
PartialPresidio
PartialProtecto.ai
NoPrivate AI
NoTonic Textual
PartialOmnifact
Output guard (second-pass)
Re-scan LLM output for newly hallucinated PII
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability
Token repair (LLM damage)
3-stage recovery when models mangle token format
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability
Self-hosted / air-gapped
Run entirely on your infrastructure, no external calls
OGuardAI
YesPresidio
PartialProtecto.ai
YesPrivate AI
NoTonic Textual
YesOmnifact
Source-available core + Apache-2.0 SDKs
Runtime under Elastic License 2.0 (read, self-host, modify); SDKs, examples, and docs under Apache-2.0
OGuardAI
YesPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Low-latency builtin path
Rust-native runtime, no model inference in the builtin hot path (NER mode adds model latency)
OGuardAI
NoPresidio
NoProtecto.ai
NoPrivate AI
NoTonic Textual
NoOmnifact
Core OGuardAI capability

Competitor columns summarize each tool's documented primary focus from public sources, not an exhaustive feature audit. Tools evolve and may add capabilities. Corrections are welcome via the project repository.

Others detect data. OGuardAI controls how data flows through AI systems, source-available, self-hosted, built for production.

View on GitHub

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.

Healthcare

HIPAAGDPR§203 StGB
policy: healthcare-clinical

redacts hard identifiers, tokenizes clinical names, de-identifies for research export, role-gated restore, patient/do...

You send

Patient Anna Müller, MRN 4471982, KVNR A123456789, Dx ICD-10 E11.9, seen by Dr. Weber (NPI 1093817264).

The model sees

Patient {{person:p_001:147917db9b96}}, MRN {{mrn:x_001:1c012bbda756}}, KVNR {{kvnr:x_002:1ef29e5099fa}}, Dx {{icd10:x_003:33fb20c5b4c6}}, seen by {{person:p_002:3a1f75775a3c}} (NPI {{npi:x_004:3d1aa7c56d16}}).

Who can restore
ClinicianFull record
ResearcherDe-identified (Safe Harbor)
Ops / logsMasked
Domain entities, no code
{{mrn}}{{kvnr}}{{encounter_id}}{{icd10}}{{npi}}
$restore: full | abstract | masked · per output channel

Works in your language

Structured PII (email, phone, IBAN, cards, order and customer IDs) is detected by format in every language. Person, company, and location names are detected by the GLiNER NER model across Latin, Cyrillic, Arabic, and CJK scripts.

Names and structured PII

Both protected out of the box

GermanEnglishSpanishFrenchRussianArabicJapaneseKoreanTurkish

Structured PII, names improving

Regex PII fully protected; very short CJK names still filtered by the length floor

Chinese+ more via custom_patterns

Any language

Email, phone, IBAN, cards, IDs matched by format with 34 built-in regex patterns, independent of language

Format-based, any language

Where a specific name form is missed, a policy custom_pattern anchors it on titles or honorifics. Honest by design: this reflects what the tested backend protects today.

Enterprise-Grade Compliance

G

GDPR by Architecture

Art 17 right to erasure built into the runtime, not bolted on as an afterthought.

H

HIPAA Ready

PHI protection with audit trails and granular access controls built in.

S

SOC 2 Aligned

AES encryption with access controls and continuous monitoring support.

🔒

Self-Hosted

Your infrastructure, your data. Zero third-party dependency required.

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.

Extend it without forking

Add your own detectors, entity types, and event sinks through explicit config and API seams. Every seam is additive and fail-closed: an extension can only add or tighten detection, never widen the trust boundary. Event sinks receive PII-free events only; a webhook detector is a detection service you operate inside the boundary.

Custom patterns, no code

Define entity types and regex detectors in policy YAML, or pass custom_patterns on a single request. Context-gated patterns extend detection to any language or locale with no hardcoded ceiling. Validated on use, merged additively, never persisted.

External HTTP detector

Register your own detector under detector.webhook. The runtime POSTs the text and merges the returned spans additively, fail-closed when the detector is required.

Push-webhook notifications

Stream PII-free audit events (entity types and counts, fingerprinted ids) to your SIEM or observability pipeline. Fire-and-forget, so an outage never blocks a request.

The trust boundary holds

No in-process native plugin loader by design: a dropped-in binary must never run inside the runtime with raw-PII access. Extensions integrate over config and HTTP, not the trusted zone.

Read the plugin and extension guide

See the configuration reference for detector.webhook and notifications.

Drop-In Integration

OpenAI Python
from openai import OpenAI

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

One line change. No code rewrite needed.

Or embed it anywhere

SDK middleware

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

Proxy sidecar

A drop-in HTTP hop in front of any provider or gateway such as Langdock, Kong, or Portkey.

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.

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.comSource-available core, Apache-2.0 SDKs. Enterprise support available.

Ready to protect your AI pipeline?

Get running in seconds with a single command.

$ |