Privacy architecture

Detection without exfiltration.

Itzal runs its detection engine as a local process on the employee’s device. Only a redacted event record — type, count, confidence, masked snippet, risk score — is transmitted over mutual TLS. The raw prompt text never crosses the network boundary.

ONE PASTE SANCTIONED PERSONAL
Same hostname. Same interface. Entirely different legal position.
Enforced by No classification API CI build gates mTLS only Masked, not tokenised

The boundary

Stated exactly, row by row.

“Privacy-first” is a phrase every vendor uses. The only useful response is to say precisely where the boundary sits and how it is enforced.

What stays on the device and what crosses the network
 Stays on the deviceCrosses the network
The prompt the employee typed or pastedYesNever
The AI tool’s responseYesNever
Attached file contentsYesNever
The matched sensitive value itselfYesNever
Salted hash of the matched valueOptional, local audit trailNever
Finding type, count and confidenceYesYes
Masked context snippetYesYes
Destination, and whether it is sanctionedYesYes
Risk score and the action takenYesYes

The record

Two details matter more than the rest.

snippet is masked, not tokenised. The characters are gone, not encoded. There is no vault, no key, no reversal — not for Itzal, not for your administrators, not for anyone who compromises the event store. It exists so a reviewer can judge intent without ever seeing the value.

action_taken is the decision that executed, read back from the enforcement path — not the policy’s intended action. A policy set to block that fell back to warn because the deadline expired reports warn. A console that reports intentions rather than outcomes overstates its own protection.

{
  "event_id":    "b9c1f0e2-…",
  "device_id":   "sha256:9f3a…",
  "user_id":     "corp-directory-id",
  "destination": { "app": "claude.ai", "is_sanctioned_tool": true },
  "findings": [{
    "type": "SSN",
    "framework": ["HIPAA", "Internal-PII"],
    "count": 1,
    "confidence": 0.97,
    "context_snippet_redacted": "my ssn is ***-**-6789 please reformat"
  }],
  "risk_score":  "Critical",
  "action_taken": "blocked"
}

Why it is architectural

A promise that depends on a config flag is not a promise.

Four mechanisms make the boundary structural rather than configured.

Detection has nowhere to send text

Both layers run inside the local agent process. There is no classification API, so there is no endpoint that could be pointed at a server — not by misconfiguration, not by a future feature, not by a support engineer under pressure.

It cannot learn from your text

False-positive text never leaves the device and there is no mechanism to request it. Quality comes from synthetic generation, public corpora, aggregate counters and analyst labels on already-redacted snippets.

The rule holds in debug builds

Most real leaks in security products are not exfiltration features — they are a debug print somebody forgot to remove.

CI enforces it

Static checks fail the build on a raw span reaching a log macro, an unmasked field on a serialisable struct, or a non-TLS transport path.

The second one is the constraint most likely to be argued away in month eight, when there is pressure to improve the numbers. Designing the alternative up front is what makes the answer “no” rather than “well, if it’s opt-in”.

What it costs

Three real trade-offs.

Investigation depth. An analyst seeing a Critical event cannot pull up the full prompt. If your process requires reading what the employee wrote, Itzal is the wrong tool — and any tool that offers it is one breach away from being the incident.

Tuning is slower. Without customer text to learn from, improving a noisy detector takes synthetic corpus work rather than a feedback button.

Some surfaces stay uncovered longer. Everything is bounded by the endpoint’s budget. OCR for pasted screenshots cannot fit inside a blocking path and is a log-after-send capability at best.

They are on this page because a vendor that lists none is hiding them.

Ask any vendor

Seven questions. Use them on us too.

  1. 01

    Where does classification physically execute?

    Endpoint, your cloud, or the vendor’s.

  2. 02

    Is the stored snippet masked or reversible?

    If reversible, who holds the key.

  3. 03

    Can a support engineer retrieve the original text?

    Under any workflow at all.

  4. 04

    Does the product improve by collecting customer content?

    And under what consent.

  5. 05

    What happens to raw content in debug logging?

    This is where the real leaks are.

  6. 06

    What does the product not see?

    And is that published.

  7. 07

    Does the console report the action intended, or the one that executed?

    Those differ more often than anyone admits.

Straight answers

Can Itzal reconstruct what an employee typed?

No. The snippet in an event record is masked rather than hashed, so there is no key that reverses it. The optional exact-value hash is salted per device and stored only on-device — it is never transmitted.

Does the raw text leave the device in debug or trace logs?

No. Redaction of matched spans before printing is enforced in debug and development builds as well as production, and a CI check fails the build on violations.

Where is the detection model hosted?

On the device. Both the pattern layer and the quantised model run locally inside the agent process. No text is sent to a server for classification.

Verify it yourself.

A packet capture, a unique string and an afternoon. It is the only claim in this category you can check without trusting anyone.