The guarantee
After the first token fill in a session, every screenshot the agent takes is a solid black image for the rest of that session, and a session receipt image is stored only when the proxy filled no sensitive value anywhere in the session. The blackout persists across navigation, new tabs andpage.close(). Only a new
proxy session clears it, and that discards the browser with it.
How it works
Why the whole image, not just the field
A page can echo a filled value as visible text anywhere on itself:- A confirmation page prints the submitted email.
- A shipping step repeats the address outside the input.
- A validation message quotes what was typed.
- A single-page checkout renders a summary on a new document, where the original input no longer exists.
evaluate() is disabled for agent sessions because it
is a general-purpose read channel. Withholding the whole capture is the only
approach that is sound.


After a token fill, a screenshot returns a black image with redaction metadata.
Reading the result
screenshot() returns PNG bytes with metadata attached:
The
reason string is written by the proxy and never contains page text or a
redacted value, so it is safe to log.
A different result, Screenshot withheld, means the image could not be measured
and was refused rather than blacked out.
Screenshots and the card fill
After a token fill, a capture no longer alters the page, for example by skipping animations, to get an image. A page with an animation that never settles therefore fails the screenshot rather than returning one. Treat that as a failed capture and nothing more: the card number is still in the form and the security code is still the next thing to fill. Do not refill the number, which would type a second number and record a second spend. In the rare case a capture returnssecurityCodeAuthorizationReleased, the
one-time authorization the card number armed for its security code was released.
Fill the number again and then the code, with nothing in between.
Seeing a page without screenshots
Before any fill
snapshot() returns the accessibility tree with every field’s role, name and
a ref handle, reaching into iframes. Field values are always stripped.After any fill
observe() answers a fixed set of questions about the page, plus the
page’s validation messages in errorText, scrubbed of every substituted
value. count() and waitForSelector() answer questions you ask with a
selector. A selector that tests a field’s value or a digit is refused.
Text without digits is allowed, so the non-digit characters of any value
the page echoes can still be probed. See
the digit-free echo exception.Values kept for scrubbing
A token fill uses its real value once. To scrub that value from everything the agent sees afterwards, such aserrorText and error messages, the proxy also
keeps the value and the other spellings a page may print it in (for example
URL-encoded, JSON-escaped or with whitespace collapsed) in its own memory for the
rest of the session. They are dropped when the session closes, and a new session
starts with none.
Receipts follow a stricter rule
The Activity feed can show a screenshot of the merchant’s confirmation page as the session receipt. The reason is the same as for the blackout: a confirmation page commonly echoes the submitted email or shipping address on a new document, and without reading the page the proxy cannot prove the echo is absent. A useful confirmation image and a guarantee that no personal data is stored are incompatible without page access, and Agent Vault keeps the guarantee. In practice:- A normal token-filled checkout shows no receipt image, and is marked confirmed without one.
- A session that filled nothing sensitive, such as a one-click checkout with a saved payment method, can get one. Capture is best effort, so a failed screenshot, an oversized image or a failed save leaves it without one.
What the audit trail never contains
No value the proxy substitutes is ever stored in a session event. Events record the token kind and non-sensitive context only. The one piece of agent-supplied free text that can be stored, the optional order total passed torecordOutcome(), is restricted to a money format at both the
proxy and the storage boundary. An email, name, password or CVV-shaped string in
that field is dropped.
Operational logs and error reports from the proxy are also scrubbed of
substituted values and card-number-shaped strings before they leave it.
Refusals
What this does not protect against
- Screenshots after a handoff with no token fill. Once the account holder has been handed the page for a challenge, screenshots are not blacked out unless a token was also filled, and the page can echo what the holder typed. Agents are instructed to stop taking screenshots once a handoff has been granted.
- Screenshots before the first fill. These are normal captures and show whatever the merchant page displays on its own.
- The merchant’s own records. What a merchant prints on its confirmation page or sends by email is outside Agent Vault.
How to verify
1
Capture before a fill
Open a session on a test checkout and call
screenshot(). redaction is
none.2
Fill one token and capture again
Fill an address token, then call
screenshot(). The image is black and
redaction is blackout.3
Navigate and capture again
Open a new tab or navigate to another page in the same session. The capture is
still black.
4
Check the receipt
After a token-filled test checkout completes and the agent records the
outcome, open the session in Activity. It has no receipt image. Session
recording is best effort, so if the session is missing, run the test again.
Related
What the agent can see
The complete read surface, before and after a fill.
Confirming outcomes
How to confirm what a session did without a screenshot.