Armos masks PII before it reaches any AI provider — names, emails, Aadhaar, PAN, card numbers. Works as a Python/Node SDK wrapper and as a Claude Code MCP. The model sees tokens. Your app gets real values back.
from openai import OpenAI client = OpenAI() response = client.chat .completions.create( model="gpt-4o", messages=[{ "content": prompt }] )
from openai import OpenAI from armos import ArmosOpenAI client = ArmosOpenAI(OpenAI()) response = client.chat .completions.create( model="gpt-4o", messages=[{ "content": prompt }] )
Names, emails, phone numbers, financial identifiers — they reach the model provider's infrastructure with every API call. Most teams don't think about this until they have to.
The response comes back with real values restored. Your app sees John Smith, not the token.
Four steps, invisible to your application. Armos handles the full round-trip before and after every LLM call.
[PII:NAME:a1b2c3d4]. The same value always maps to the same token within a session.Not a firewall. Not a scanner. A privacy layer that sits between your code and any AI provider, invisibly.
Detection and masking happen before your request leaves your infrastructure. The model provider only ever sees tokens — never actual names, emails, or ID numbers.
See the flow →Responses come back with real values restored. Your app sees John Smith, not a token. One wrapper line or one MCP command — nothing else in your code changes.
Get started →Audit logs record entity types and counts — never the actual text. We know Armos masked 3 email addresses. We have no idea what those email addresses were.
About our audit log →Python and Node SDK wrappers for your app. A Claude Code MCP for your editor. Same privacy guarantee, two integration paths — add both in under five minutes.
Two integration paths →Covers global PII — including Indian identifiers no other library handles reliably out of the box.
Tested on real Indian and Western names, addresses, and structured identifiers. Armos ships with armos-ner-en — a custom-trained spaCy NER model built specifically for PII detection, not adapted from a generic base.
Armos is a complete privacy layer — detection, tokenization, encryption, vault, and restore. Not just a scanner.
[PII:NAME:a1b2] — not a different token each time. This means the model can reason about the same person across a multi-turn conversation without ever seeing the real name.AES-256-GCM(HKDF(api_key, token)). The encryption key is never stored — it's derived on demand from your API key and the token. Even if the Redis vault were compromised, the data inside is unreadable without the original API key.Two integration paths. Pick the one that fits your stack.
from openai import OpenAI from armos import ArmosOpenAI client = ArmosOpenAI(OpenAI()) # or: ArmosAnthropic(Anthropic()) # or: ArmosAsyncOpenAI(AsyncOpenAI())
We work directly with a handful of teams to understand their real data privacy challenges. 20 minutes, no pitch — just an honest conversation about your use case. You get early access and shape what we build next.