Product

What Never Reaches the Model: Secrets and Personal Data

CloudThinker catches pasted secrets before a message sends, swaps known secrets and personal identifiers for placeholders before a model call, and scans public replays again. Custom guardrails extend that to your own identifier formats.

Cover Image for What Never Reaches the Model: Secrets and Personal Data

What Never Reaches the Model: Secrets and Personal Data

An engineer is debugging a failed payment job at the end of a long day. They copy the job's config into the chat to ask what's wrong. The config has a live database connection string in it, password included.

Nobody meant to share it. That's how it always happens. And a tool reading production output will print a token sooner or later, because that's what production output contains.

So we design for both directions. Secrets come in through what people paste, and they come out through what tools print. This post covers how Frontier Investigation Agents keep both away from the model, the screen and anyone you share a conversation with.

Why the usual approach breaks

The common answer is a policy: "don't paste secrets into AI tools". Policies don't survive a 2 a.m. incident. People paste what's in front of them.

The other common answer is a filter after the fact. Scan the logs, find the key, rotate it. By then the value is in a transcript, maybe in a model provider's request, maybe on a public link. Rotation is the cleanup, not the protection.

We wanted the check to happen before the value goes anywhere, and the default to be that the model works with a stand-in, never the real thing.

Four checkpoints

01On send

Scan the paste

Credential-shaped values stop the message until you decide.

02Model call

Swap for placeholders

Known secrets and detected personal identifiers go out as stand-ins.

03Agent output

Scrub what it shows

Known secret values are replaced in chat, stored output and logs.

04Public replay

Scan again

Detected secrets and personal data become REDACTED before a viewer sees them.

Four checkpoints between your keyboard and anyone who reads the conversation.

Each checkpoint covers a different leak. Together they cover the path a value takes from your keyboard to a page someone outside your team might read.

Checkpoint one: when you paste

When you send a message, CloudThinker scans it for credential-shaped values: API keys, tokens, passwords, connection strings. Long pasted text is scanned the same way before it's attached.

If something is detected, a Review detected secrets dialog opens and the message waits. Nothing is sent until you decide, item by item.

01Save secrets

Store and reference

The value becomes a workspace credential and the message uses $KEY.

02Redact

Remove and send

The value is replaced with [sensitive data removed].

03Not a secret

Keep as written

The item is treated as a false positive and sent unchanged.

The three choices in the Review detected secrets dialog. Nothing sends until you pick.

Save secrets stores the value as a workspace credential and rewrites your message to reference $KEY instead. The agent can still use the secret in the commands it runs, and it sees the key name, not the value. Saving needs the Admin workspace role; everyone else can redact or mark a false positive.

That's the connection string from the opening scene. The engineer gets their answer about the config, and the password never lands in the transcript.

Checkpoint two: before the model call

A model call sends the agent's system prompt, tool definitions, conversation history and retrieved context. Before it goes out, CloudThinker replaces known secrets and detected personal identifiers with placeholders.

The placeholders look like this:

ct:secret:v2:…
ct:pii:v3:<category>:<hash>

A placeholder is irreversible. It can't be converted back to the value, by you or by an agent. But the same value gets the same placeholder within a conversation, so the agent can still tell that two references point at one secret. It can reason "this key in the error is the key in the config" without ever holding the key.

This holds on your own model key too. With BYOK, calls go to your AWS Bedrock or Anthropic account, and the same placeholders are applied first.

Checkpoint three: what agents show back

When an agent's work would surface a known secret value (a connection credential, a workspace credential, or a value you saved from chat) the value is replaced with the placeholder before it appears anywhere: in chat, in stored output, or in logs.

Agents see and report credential key names only. To change a secret, you update it in Connections or Credentials. There's no way to read it back out through the agent.

Checkpoint four: public replays

A conversation can be shared as a public replay. Before any viewer sees it, CloudThinker scans it again. Detected secrets and personal data in message text, tool activity, plans and attachment names are replaced with ***REDACTED***.

If a message can't be scanned cleanly, its content is withheld entirely. We'd rather show a gap than show something unscanned.

Your own identifiers: custom guardrails

Built-in protections cover the common formats. Your business has its own: account numbers, customer IDs, internal reference codes.

Admin Settings → Guardrails lets admins choose which built-in identifiers are protected and add custom patterns for structured personal or business identifiers. A pattern is a regular expression for the format, never a real value. ACC-\d{6} describes the prefix ACC- followed by six digits. When it matches, the agent sees a ct:pii: placeholder with the category you chose.

01Off

Does not run

A custom pattern stays saved and still uses one of five slots.

02Organization

Every workspace

Owners and Admins manage this baseline and can lock built-in rules.

03Workspace

This workspace

Where new custom patterns start, managed by workspace admins.

Where a guardrail runs. Only an enabled rule or pattern produces a placeholder.

Each rule or pattern runs Off, at Workspace scope, or at Organization scope. An organization admin can lock a built-in rule so it stays on in every workspace. Before a pattern saves, Guardrails checks that it's valid, can't match empty text, and is fast enough to run on messages.

The design decisions

Check before send, not after. A secret caught in the dialog was never stored. A secret caught in a log scan already was.

Storing is always explicit. Nothing becomes a workspace credential without your confirmation.

Consistent stand-ins. An agent that can't tell two secrets apart can't debug a credential mismatch. Same value, same placeholder, inside one conversation.

Withhold on doubt. On a public page, an unscannable message is hidden, not shown.

Honest limits

Detection runs on send, not while you type. Unsent drafts stay in your browser for up to 24 hours and are cleared when you log out. On a shared computer, log out instead of closing the tab.

"Mark as not a secret" means what it says. If you mark a real key as a false positive, it goes through as written.

Output scrubbing covers known values. The placeholder applies to secrets CloudThinker holds (connections, credentials, values saved from chat) and to detected personal identifiers.

Custom patterns are for identifiers, not secrets. They extend identifier protection and don't add secret-detection rules. Each workspace gets five custom patterns, counting organization patterns that apply to it. There's no match preview, so test with care.

Broad patterns cost you context. A generic UUID pattern would mask values the agent needs to investigate. Make each pattern specific to your format.

Deleting a pattern is permanent. Agents may see matching values again if no other protection catches them.

Try it

"Here's the config for the failing job. Tell me why the connection keeps timing out." (paste it with the secret in, and watch the dialog)

"Use $STRIPE_API_KEY to list this week's failed payments and tell me which key you used, by name."

Start a trial or book a walkthrough.

Related reading

securitydataprotectionsecretspiiguardrailsredactionbyokcloudthinker