Skip to content

How long derived data is kept

Shield360 also creates data of its own from your telemetry and from the way people use it: Rex conversations, AI trace analyses, Openground runs and agent test transcripts. This page lists what each of these stores keeps and for how long.

By default, Shield360 doesn’t store content in these places. Content means prompts, responses and the other text your traces carry. A person can see content live, if they’re allowed to, but no copy is kept. Content that was stored before this default existed isn’t purged. It ages out under the periods below.

StoreWhat is keptKept for
Rex chat messagesWhat people typed and Rex’s answers. Query results are kept without content.90 days from when each message was written
Rex conversationsTitle, model and running totals90 days after the conversation was last used
AI trace analysesThe run’s model, tokens, cost and worst severity. The findings are kept only when content storage is allowed.30 days
Openground runsThe person’s own test prompt and each provider’s response, with secrets removed90 days
Agent test transcriptsWhat the agent under test was asked and answered. The outcome, score and assertions stay after the transcript is emptied.90 days
Data gateway access recordsWho read which fields of which table, for what purpose, and how many rows. Never a value. Records a legal hold covers are kept while it is active.365 days
Data export archivesThe archive, encrypted at rest7 days

The ClickHouse periods are set as table TTLs by the add-derived-store-ttl-v1 migration. Agent test transcripts are emptied by the agent-tests job, at most once an hour. Data gateway access records are deleted by the daily retention job; see Data retention.

Rex can run SQL over your traces and logs, so a query result can contain prompts and responses. Before a result is saved to chat history:

  • Content is withheld. Values in columns or attributes whose names mark them as content are replaced with [CONTENT WITHHELD]. Examples include prompt, completion, input, output, messages, content, body, arguments, result, query, statement, and keys such as gen_ai.input.messages inside SpanAttributes or LogAttributes. Counts and costs about content, such as prompt_tokens, are kept.
  • Results are bounded. At most 100 rows and 64 KB are kept for each result, and each value is cut to 2,000 characters.
  • Secrets are removed. The patterns used at ingest replace API keys, tokens, private keys and credentials in URLs with [REDACTED]. This applies to every message, including what people typed and what Rex wrote, and to conversation titles.

The person who asked still sees the full result in the chat while the conversation is open.

  • Queries over content tables keep only metadata. If a query reads a table that holds content, the saved result keeps only numbers, true/false values, timestamps and short strings shaped like metadata. Those tables are otel_traces, otel_logs, the span cache, Openground, trace analysis and chat history, and the list lives in one place in the code. A short string here means 64 characters or fewer with no spaces, such as an id, a model, service or tool name, or a status. Every other value is withheld, whatever the column is called, so an alias such as SELECT Body AS b doesn’t get past it. Maps, arrays and JSON values from these queries are withheld too. Results whose query isn’t known are treated the same way. Queries that read only metadata tables are matched by column name, as above.

A trace analysis is a model’s summary of a trace’s content. When content storage isn’t allowed, the analysis appears in full while it runs, but the saved run keeps only its model, tokens, cost and worst severity. When you open a saved run later, it says its findings weren’t kept.

Openground is a playground for your own test prompts, so runs are kept whatever the content setting is. Secrets are removed from prompts, variables, responses and raw provider responses before they’re saved.

Records under a legal hold are copied into their own table, which has no TTL. The copies stay while the hold is active and are removed when the hold is released. The TTLs on this page don’t apply to them.

Content is kept in Rex chat history and trace analyses only when both of these allow it:

  • The organisation’s setting. Store prompt and response content in Data retention, as it applies to the environment the data is written to. An environment can store less than its organisation, never more.
  • The deployment. An operator allows content storage for the whole deployment by setting SHIELD360_ALLOW_CONTENT_STORAGE=true. When it isn’t set, nothing is kept, whatever an organisation chose.

If Shield360 can’t tell which organisation the data belongs to, or can’t read its setting, the content isn’t kept. A change to the setting takes effect within 30 seconds. Content saved earlier stays until it ages out. Secret redaction, row limits and the retention periods still apply.