Skip to content

MOD-17269 Document Agent Memory sensitive-data exclusions - #3760

Merged
mich-elle-luna merged 7 commits into
mainfrom
claude/mod-17269-pii-exclusion-docs
Aug 13, 2026
Merged

MOD-17269 Document Agent Memory sensitive-data exclusions#3760
mich-elle-luna merged 7 commits into
mainfrom
claude/mod-17269-pii-exclusion-docs

Conversation

@plamilieva

@plamilieva plamilieva commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Ticket: MOD-17269 (epic: MOD-17267)

Documents the Sensitive-data exclusions card on the Redis Cloud Agent Memory console pages, placed to mirror where the card sits in the UI (last in the create flow, before Actions on the Configuration tab).

Availability framing

The feature is enabled per account rather than generally available, so both pages carry a note:

Sensitive-data exclusions are an early-stage feature, enabled for selected accounts. If you want to try them, contact your Redis representative or contact sales.

This follows the existing private-preview note on the self-managed Agent Memory index page. This PR is safe to merge — readers who don't have the feature are told how to ask for it.

What this adds

  • create-service.md — the semantic exclusions toggle and exclusion prompt (2,000 char limit, required when enabled), an advisory warning, an example, a "Where exclusions apply" coverage list, and the prompt validation rules.
  • view-service.md — the read-only/editable settings, that disabling preserves the saved prompt, and that existing memories are not re-evaluated (flush being the only way to clear them).
  • Two screenshots.

Scope

Phase 1 is semantic (prompt-based) exclusions only. The docs state that exclusions are advisory, that content still reaches the extraction model provider, and that they do not apply to long-term memories created directly through the API or an SDK.

Coverage is deliberately precise: exclusions apply to built-in extraction (including the session_summary_view recap) and custom memory types, but not to automatic summarization, which compresses messages within a session and never writes to long-term memory.

Not covered, because unmerged and not publicly exposed: on-prem YAML authoring (MOD-17150), the preview playground (MOD-17161 / MOD-17162), and longTermMemoryExclusions in either public OpenAPI spec.

Merge note

main moved these pages from content/operate/rc/context-engine/ to content/operate/iris/ and separately added its own shorter exclusions section. The merge commit reconciles the two: this branch's fuller version is kept, with main's better phrasings, heading anchor, and example data folded in, and main's fenced example block dropped (it was the only code block in the file). Net change against main is 4 files.

The rejected-phrasing table

#### Exclusion prompt rules lists phrasings the injection guard refuses, because it rejects ordinary customer prose and the UI error does not explain why. All strings in that table were verified against the live patterns in memory-common/domain/valueobjects/prompt.go. The guard matches phrases, not bare words — forget everything and override system reject, while forget alone passes.

Verification

.claude/hooks/check_shortcode_paths.py --scan reports 0 issues, 0 broken file refs, 0 broken relrefs on both pages. Every in-page anchor referenced has a matching heading, and the view page's relref was repointed at the new /operate/iris/ path.

🤖 Generated with Claude Code


Note

Low Risk
Documentation-only changes to operate guides; no runtime, auth, or data-path code is modified.

Overview
Documents the Redis Cloud Agent Memory “Sensitive-data exclusions” UI on the create and view service guides under operate/iris/agent-memory/, aligned with where the card appears in the console flow.

On create-service, the section is promoted in the custom-create outline and rewritten around semantic exclusions: early-access note, screenshot, toggle and exclusion prompt (2,000 characters, required when enabled), example behavior (generalized memories vs dropping detail), scope (extraction to long-term memory only; session memory unchanged), and a stronger advisory warning (model provider exposure; no effect on API/SDK-created memories).

On view-service, the Configuration tab lists the card; the section links back to create docs, adds the same availability note and screenshot, documents editable settings, explains that disabling preserves the saved prompt, and clarifies that existing long-term memories are not re-evaluated—only a full flush clears data stored before exclusions were configured.

Reviewed by Cursor Bugbot for commit 61c4de4. Bugbot is set up for automated code reviews on this repo. Configure here.

Add a Sensitive-data exclusions section to the Redis Cloud Agent Memory create
and view pages, covering the semantic exclusions toggle and exclusion prompt,
the advisory limits, which memory paths exclusions apply to, and the prompt
validation rules.

Phase 1 ships semantic (prompt-based) exclusions only. The authored prompt is
injected at system-message priority into the three LLM-mediated promotion paths
(INSTRUCT promotion, custom extraction, session summarisation), so the docs say
plainly that direct long-term writes and raw session events are untouched, and
that the policy is advisory rather than a guarantee.

The rejected-phrasing table exists because the injection guard refuses ordinary
prose — a bare occurrence of the word "system" followed by a colon matches the
instruction-override rule, as do "forget everything" and "ignore all
instructions". All six strings in that table were verified against the patterns
in iris memory-common/domain/valueobjects/prompt.go.

Learned: The exclusion-prompt injection guard rejects innocuous customer prose, which the UI error message does not explain.
Constraint: Publish only once isAgentMemorySensitiveDataExclusionsEnabled is enabled in production; the UI card is flag-gated and ships dark.
Gaps: On-prem YAML authoring (MOD-17150) and the exclusions preview playground (MOD-17161, MOD-17162) are unmerged and undocumented; neither public OpenAPI spec exposes longTermMemoryExclusions yet.
Ticket: MOD-17269
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 7 related items from repository history:

Memory updated at 61c4de4

@dwdougherty dwdougherty added the rc Redis Cloud docs label Aug 6, 2026
Drop the example exclusion prompt's code block and the prompt-assembly detail
from the section intro.

The fenced block was the only code block in the file, and the closest analogue —
the Extraction prompt field for custom memory types, another free-text
natural-language setting — carries no example at all. It was also redundant once
the rejected-phrasing table landed, since that table already shows six concrete
prompt strings. The example survives as prose, matching how Automatic
summarization presents its worked example.

The intro previously described how the authored text reaches the model, which is
prompt plumbing a customer cannot act on, and said "promoting" — vocabulary used
nowhere else in this page, where every other reference is to the extraction
pipeline. The warning below already establishes that exclusions only steer the
model, so the causality survives the trim.

Directive: Keep "extraction pipeline" in this page's prose; "extraction model" is reserved for quoting the UI's own wording, which is visible in the screenshots.
Ticket: MOD-17269
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 5 related items from repository history:

Memory updated at e723770

Review of the exclusions docs against the shipped implementation in iris
(origin/main) turned up two factual errors and two omissions.

"Where exclusions apply" listed automatic summarization as a covered path.
It is not: buildSummaryViewMessages injects the exclusion section only on
the session_summary_view path, and its doc comment states that
summarisation keeps using the unmodified prompt builder. The TDD lists
session summarisation as an explicit non-goal. Name the summary-view
memory type in the covered list instead, and add automatic summarization
to the "do not apply" list so the omission cannot be read as coverage.

The prompt rules told customers to avoid the bare words forget, ignore,
pretend, and simulate. The injection guard matches phrases, not words —
forget\s+(everything|all|previous), ignore\s+(previous|all|above)\s+
instructions?, pretend\s+(?:you\s+are|to\s+be), simulate\s+(?:a|being) —
so all four words pass on their own. Describe the blocked phrasings
instead, note that system= rejects as well as system:, and add rows for
two traps an ordinary prompt hits: override\s+(system|instructions?) and
run\s+(?:code|command|script).

On the view page, state that flushing is the only way to clear
previously stored memories and that it erases all of them, and repeat the
advisory caveat where the setting is actually edited.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

🧠 Redis Memory

Found 5 related items from repository history:

Memory updated at 747bbce

@mich-elle-luna

Copy link
Copy Markdown
Collaborator

Hi, the merge of Raphael's refactor has moved these two pages to content/operate/iris, if you can update this pr to add your new content there please.

plamilieva and others added 4 commits August 13, 2026 10:52
main moved the Redis Cloud Iris pages from content/operate/rc/context-engine/
to content/operate/iris/ and, in the same window, added its own shorter
Sensitive-data exclusions section to both pages. The merge therefore had to
reconcile two independently written versions of the same section rather than
just follow a rename.

Kept this branch's version, which is a superset: it carries the screenshots,
the "Where exclusions apply" coverage list, and the "Exclusion prompt rules"
guidance with the rejected-phrasing table. Folded in what main's version said
better: the explicit heading anchor, "the extraction model provider" over "the
model provider", "through the API or an SDK" over "your application writes
directly", and its example data (passwords, access tokens, recovery codes,
payment card information, booking confirmation codes).

Dropped main's fenced example block. It was the only code block in
create-service.md, and the rejected-phrasing table already carries concrete
prompt strings, so the example stays as prose next to the settings table.

Repointed the view page's relref at /operate/iris/agent-memory/create-service
and took main's "Redis Agent Memory service" wording in the Actions bullet.

Constraint: Exclusions do not cover automatic summarization; the exclusion section is injected only on the session_summary_view path. Do not re-add summarization to the covered list.
Ticket: MOD-17269
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The "Where exclusions apply" subsection read as an implementation map: it framed
coverage as "the memory paths that use the extraction model" and named the
session_summary_view recap to explain which of those paths are wired up. None of
that is actionable for someone filling in the field.

It was also mostly duplication. The advisory warning above already states that
exclusions are not a guarantee, that content reaches the extraction model
provider, and that they do not apply to long-term memories created directly
through the API or an SDK — three of the four bullets.

Two sentences carry what was left: exclusions apply when long-term memories are
created from a session, and session memory is untouched. The second half is worth
keeping because a reader could reasonably assume a summary of a sensitive message
gets filtered, and it does not.

Uses "session memory" rather than "short-term memory". The develop docs never use
"short-term memory" at all (0 occurrences; "session memory" appears 38 times), and
it survives on the console pages only as a gloss on the Short-term TTL field
label, so it is the UI-driven alias rather than the house term.

Directive: Prefer "session memory" over "short-term memory" in Agent Memory prose; the latter is only for describing the Short-term TTL field.
Ticket: MOD-17269
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The subsection documented the prompt-injection guard as though it were specific
to exclusions. It is not: Prompt.Validate and ExclusionPrompt.Validate both call
validation.By(validateNoInjection), differing only in their length bound (10,000
runes for a custom extraction prompt, 2,000 for an exclusion prompt). The custom
extraction prompt has carried that guard all along with nothing written about it,
so documenting it under exclusions made two identical fields look different.

Both settings tables now state a length bound and nothing more, which is the
parallel treatment.

This does leave a real gap: cloud-ui relays the server message straight to the
field, so a rejected prompt reports "must not match a <category> injection
pattern" with no hint about which phrasing caused it, for either field. The fix
is to document the guard once somewhere both fields can reference, which means
editing the custom-extraction section and is outside this ticket. Tracked
separately rather than left half-done here.

Gaps: The prompt-injection guard is undocumented for both prompt fields; a rejection surfaces only iris's raw category message.
Ticket: MOD-17269
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The section intro described the whole feature in terms of the only mechanism that
ships today: "describe, in plain language" and "the extraction pipeline uses your
description as guidance" are true of a semantic prompt and of nothing else. The
advisory warning had the same problem, and it sat above the mechanism heading
where it read as a property of exclusions in general.

Restructured so the section intro states only what the section is for, and every
claim that depends on how exclusions are evaluated now lives under Semantic
exclusions: the plain-language framing, the scope sentence, and the advisory
caveat. A second mechanism becomes a sibling subsection with no edit to the
intro, the note, the screenshot, or the page's section list.

Moving the warning below the prompt settings also matches the console, where the
advisory banner renders under the prompt field rather than above the toggle.

Deliberately says nothing about mechanisms that are not shipped.

Directive: Keep the Sensitive-data exclusions intro mechanism-neutral. Anything that depends on how an exclusion is evaluated belongs under its mechanism's subsection.
Ticket: MOD-17269
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@mich-elle-luna
mich-elle-luna merged commit 6b621bb into main Aug 13, 2026
90 checks passed
@mich-elle-luna
mich-elle-luna deleted the claude/mod-17269-pii-exclusion-docs branch August 13, 2026 16:40

@mich-elle-luna mich-elle-luna left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

rc Redis Cloud docs

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants