sable network
Documentation · all sections

Outbound scrubbing

sable_scrub: true on a chat request makes the gateway redact known secret/PII shapes from the outbound prompt before it reaches any vendor. The redaction happens in memory at the egress shim (after the sealed request is opened, before the upstream call), and each match is replaced with a typed marker like [redacted:email] so the model can still reason about the text's structure.

It is opt-in, per request, and works on both the OpenAI surface (POST /v1/chat/completions) and the Anthropic Messages API (POST /v1/messages):

curl https://api.buildsable.com/v1/chat/completions \
-H "Authorization: Bearer $SABLE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "sable",
  "sable_scrub": true,
  "messages": [{"role":"user","content":"Summarize this log dump"}]
}'

What gets redacted

The filter is deliberately conservative and pattern-based. It catches the shapes that are near-certainly secrets or contact identifiers:

ShapeMatchesBecomes
Email addressMatcheslocal@domain.tldBecomes[redacted:email]
EVM address / tx hashMatches0x + 40 or 64 hex charactersBecomes[redacted:evm]
API keys & tokensMatchesCommon prefixes (sk-, sk_, ghp_, github_pat_, xoxb-, AKIA, AIza, eyJhbGciOi, …) and Bearer … values, 20+ charsBecomes[redacted:key]
Long bare hexMatches32+ contiguous hex characters (hashes, raw private keys, session tokens)Becomes[redacted:hex]
Card numberMatches13 to 19 digits, unbroken or in groups of 3+ separated by spaces or hyphens, that pass the Luhn checksumBecomes[redacted:card]
Phone numberMatchesA + followed by 8 to 15 digits (+31 6 1234 5678); a number with a leading 0 or 00 and 10 to 15 digits (06 12345678, 020 7946 0958); or the North American 3-3-4 grouping ((555) 123-4567, 555.123.4567)Becomes[redacted:phone]

Where it runs: the §3 story

The privacy contract is unchanged by this feature, and the scrub is built inside it, not next to it:

  • The request is sealed on ingress as always. The scrub runs after unsealing, inside the egress frame, immediately before the upstream call, the same short window where plaintext already exists.
  • Nothing scrubbed or unscrubbed is ever stored or logged. The only new thing that reaches a log is the redaction count, which is content-free.
  • The scrubbed text goes to the vendor; the original never leaves the frame.

The receipt proof

A scrubbed request's signed receipt carries "scrubbed": true, proof that the filter ran on that request. The field is present only when you opted in.

Honest limits

Read these before relying on it:

  • Pattern-based, not NER. It catches secret shapes: emails, keys, wallet addresses, long hex, card and phone numbers. It does not catch names, addresses in prose, or any free-text PII. A number glued to a word or inside a URL is left alone, and a bare ten-digit number without a leading 0 is not treated as a phone (Unix timestamps have that shape), so a phone number written that way passes through. A long number that happens to pass the card checksum is redacted even when it is not a card. An opt-in redactor that silently mangled prose would be worse than none, so it doesn't try.
  • This is redaction, not anonymization. The surrounding content still reaches the vendor in plaintext (on standard-tier routing, the host sees the prompt; see the privacy ladder). Scrubbing narrows what leaves; it does not change which rung you're on.
  • scrubbed: true means the filter executed, not that the prompt contained nothing sensitive afterward.

When to use it

The threat model is the agent stack handling untrusted input: a prompt-injected agent pastes whatever it has into a model call, and whatever it has often includes keys, wallets, and tokens. With sable_scrub: true on the call (or baked into your agent's request wrapper), those shapes never reach the upstream vendor at all, and the receipt proves the filter was on.

Shipped
Sable Launchpad — launch a coin with a character, on Robinhood ChainProof of Backing — continuous reserve verification, published wholeSupport Program register opened to SABL holdersEight models added, including the Claude 5 and Gemini 3.8 familiesKnow Your Agent — a machine-checkable credential at a passport handleAutopilot — receipted evidence for a cheaper configurationThe Verifiable Arena — every score backed by a real receipted runTime Machine — record a request, replay it, diff the resultSable Notary — sign and anchor work Sable did not runIntelligence Engine — compile a configuration into an immutable buildSealed Calls — commit a prediction now, reveal it laterAgent Post — cross-account mail between agents, with postageSable Legacy — a dead man's switch for sealed contentThe Judge — a panel of models, one signed verdictSable Memory, Agent Runtime and the non-custodial payment railPersistent sandbox sessions with exec, files and snapshotsMCP Gateway — every tool call allowlisted, metered and receiptedOAuth 2.1 + dynamic client registration for one-click MCP connectSable Vault — a private registry with public settlement