auspex: Default redaction, custom patterns, and privacy mode

Last updated: October 27, 2026

auspex, the Span agent on each developer's machine, redacts secrets and personal information from agent traces before any data leaves the device, and Span runs a second redaction pass on its own servers before storage. This article covers what is redacted by default, how your organization can add its own patterns, and how to use privacy mode when redaction isn't enough.

Why it matters

Prompts, tool output, and edited files often contain personal data: a customer's email in a log line, a phone number in a test fixture, a name in a support ticket the agent was asked to read. Redaction keeps that data out of Span while leaving the rest of the session useful for analysis.

  • For security and privacy teams: secrets and structured personal data are removed on the device before anything is sent, and a second pass catches names and addresses before storage.

  • For admins: you can add patterns for your own identifiers, and you can ask Span to turn on privacy mode for every device in your organization.

  • For engineers: you don't need to clean up prompts by hand, and you can turn on privacy mode at any time for work that should never be captured.

How it works

Redaction markers

Each redacted value is replaced in place with a marker such as ‹REDACTED:email:1›. The marker names the kind of value that was removed. Values auspex removes on your device never leave it. Values the server-side pass removes are never written to Span's trace storage, but the uploaded event that held them stays in Span's internal ingestion queue for about 7 days. Within a single event, repeated copies of the same value share a marker number; markers aren't linked across events.

In a trace in Span, each redacted value appears as a labeled placeholder. Hover over it to see the entity type and where it was redacted: Device or Span server.

What auspex redacts by default

Default redaction runs entirely on the device, in memory, before an event enters auspex's upload queue; until then, the raw event waits in a local handoff file on the machine, normally for less than a second. It uses deterministic patterns and checksum validators, built on Microsoft Presidio's predefined recognizers. No model and no network call are involved. The defaults always run: your organization can add to them, but can't remove or turn off any of them.

Secrets and credentials

  • API keys and access tokens for several hundred common services and credential formats

  • Private key blocks

  • Database connection strings and passwords

  • High-entropy strings that look like secrets but don't match a known format

Personal information

  • Contact and network: email addresses, phone numbers, IP addresses (IPv4 and IPv6), and MAC addresses

  • Financial: credit card numbers (Luhn-validated), IBANs, US bank routing numbers, bank account numbers, and crypto wallet addresses

  • United States: SSN, ITIN, NPI, passport numbers, and driver's license numbers

  • Other national IDs: UK NHS number, National Insurance number, and postcode; Spain DNI and NIE; India Aadhaar and PAN; Australia TFN, ABN, and Medicare number; Singapore NRIC/FIN; Italy Codice Fiscale; Finland personal identity code; South Korea RRN; Poland PESEL; Sweden personnummer; and Canada SIN

A few of these shapes are too generic to redact on their own, so auspex redacts them only when a related word appears nearby: passport numbers, driver's license numbers, bank account numbers, ITINs, and UK postcodes. For example, a nine-digit number is redacted as a passport number only when the word "passport" is close to it.

auspex errs toward redacting too much rather than too little, so some values that only look like personal information are also redacted. URLs aren't redacted.

Server-side redaction after upload

On-device redaction only catches values that have a recognizable shape. Some personal information has no fixed shape, so Span runs a second redaction pass on its own servers before trace content goes into long-term storage.

This pass uses a named-entity recognition model that Span hosts inside its own cloud infrastructure. The model reads the surrounding text to find:

  • People's names

  • Postal addresses

  • Phone numbers

  • Account numbers

Because it reads context, the model can tell whether "Jordan" is a person or a branch name, which a fixed pattern can't do. A secret scanner runs in the same pass as a backstop for credentials. Each value either one finds is replaced with a marker that names its type, the same way on-device redaction works.

Because this pass runs after upload, these values do leave the developer's machine. They reach only Span's own infrastructure and no third-party service. If some content must never leave the machine, use privacy mode.

Setup

Add your own redaction patterns

If your organization has identifiers that the defaults don't cover, such as internal customer IDs, employee numbers, or project code names, you can add custom patterns. Custom patterns sync to every device and run on the device alongside the defaults, before any data leaves the machine.

To add a pattern, send your Span representative the following for each one:

  • A name. Use uppercase letters, digits, and underscores, for example CUSTOMER_ID. The name appears in the redaction marker.

  • A regular expression that matches the value.

  • A few example values that the pattern must match, and ideally a few that it must not.

Each pattern must meet these requirements:

  • Use RE2 syntax. RE2 doesn't support lookahead, lookbehind, or backreferences.

  • Keep it to 512 characters or fewer.

  • Avoid nested unbounded quantifiers, such as (a+)+, and keep the number of quantifiers small.

  • Make sure it can't match an empty string.

Turn privacy mode on or off on your machine

Redaction removes values with a recognizable shape. It can't recognize sensitive work in general. For that work, use privacy mode. Privacy mode doesn't redact more: it discards everything. While it's on, auspex captures, stores, and sends nothing from AI coding sessions on that machine. A heartbeat still reports that the device is healthy, but it carries no captured content.

Any developer can turn privacy mode on at any time. The change takes effect immediately and persists across restarts.

auspex privacy on
auspex privacy off
auspex privacy

The first command discards all capture, the second resumes capture, and the third shows the current state. Your organization can never turn your privacy mode off.

Turn on privacy mode for your whole organization

Your organization can force privacy mode on for every device. To do this, contact your Span representative. The setting reaches each device on its next policy sync. While it's active, developers can't turn privacy mode off, and auspex privacy reports:

privacy mode: on (enforced by your organization — you cannot turn this off)

When your organization releases this setting, each device returns to its developer's own choice. A developer who had turned privacy mode on stays private.

Things to know

  • Redaction errs toward too much. Some values that only look like personal information are redacted too. Redacting a little extra is safer than leaving personal data exposed.

  • URLs aren't redacted. A URL stays readable in the trace.

  • Custom patterns only add. They can't turn off or narrow any default.

  • A broken pattern is skipped, not fatal. If a device receives a pattern it can't compile, it skips that pattern and keeps capturing with everything else in place.

  • Redaction is a strong filter, not a guarantee. It removes values with a shape, and the server-side model can miss a name or address in an unusual format. Sensitive work without a shape, such as a performance review or a contract draft, isn't redacted. Use privacy mode so that work is never captured, or ask your Span account team about Trace Screening, which restricts sensitive traces to their author after collection.

  • Trace metadata isn't redacted. Span needs the work email, repository, and branch on each session to link it to a person and a pull request, so those fields stay readable.

  • Worked example. An engineer prompts: "Refund Jane Doe at jane.doe@example.com, cc ops@example.com, and call +1 415 555 0100." Before upload, auspex replaces the first address with ‹REDACTED:email:1›, the second with ‹REDACTED:email:2›, and the phone number with a phone-number marker. The two different addresses get numbers 1 and 2; if jane.doe@example.com appeared again in the same event, it would reuse number 1. On Span's servers, the model then replaces the name "Jane Doe" with a name marker. The prompt in Span's trace storage keeps its meaning and contains none of the four values. The addresses and phone number never left the device; the name reached Span's ingestion queue before the server-side pass removed it.

Related articles

Need help?

Contact your Span account team or reach out to support@span.app.