Duet Machines
Settings · PII redaction

Settings

PII redaction

Every ingest path redacts before it stores, so only redacted text is ever stored, judged, reproduced or trained on.

#Placeholders

Each detected value becomes a per-conversation placeholder such as [EMAIL_1] or [PHONE_2], numbered by first appearance. The same value keeps its placeholder throughout the conversation, so judge quotes still verify and the same email stays recognizable. A value detected anywhere (a date of birth in a tool argument) is also replaced where its exact text appears unlabeled, except a postal code or account number where something else names it (an order_id field, "order no. 73301"): those have no checksum, so the same digits can be another identifier. A JSON tool result stays valid JSON. The mapping is never stored, and the conversation shows a redacted badge with how many values were replaced.

#Detectors

Email, phone, IP
Address syntax; valid phone numbers grouped as their country writes them (national numbers read in the workspace's region); IPv4 and IPv6.
Card, SSN, IBAN
Luhn-valid card numbers from a payment network; US SSNs outside never-issued ranges; IBANs with a valid mod-97 check.
Street address
US street lines. Off by default.
Labeled values
Dates of birth, postal codes, routing numbers and account numbers count only where the text or a JSON key names them, such as "date of birth is 1991-01-22", "ZIP 73301" or account_number. A bare date or 5-digit number stays, so order numbers, amounts and appointment dates are not redacted.
National IDs
Mexican CURP and RFC, Brazilian CPF and Colombian NIT, each with its check digits.
Names
Opt-in English and Spanish name models. They guess, so they are off by default; choose the model of your conversations' language.
Custom patterns
Up to 20 labeled regular expressions (RE2, so no pattern can stall ingestion), run after the built-ins.

The settings page's test box redacts pasted text under the unsaved settings and stores nothing. Owners and admins change redaction.

#When settings change

A changed setting applies to conversations ingested from then on. Stored conversations are never rewritten: post a conversation again under the same external_id to store it redacted under the current setting, which also judges it again.

Not detected: person names without a name model, labeled kinds without a label, bank account numbers outside IBAN and labeled ones, other national IDs and non-US street addresses. Reproductions replace every placeholder with a synthetic value before planning, so your tests hold no customer value either.