Filters
Filters inspect and rewrite model or tool responses before they return to the agent.Kinds
Filter kind is immutable after create.
Actions and precedence
When more than one JSON action targets the same path, precedence is
BLOCK > OMIT > REDACT.
Path syntax
JSON Filtermatcher.path values use a locked-down dialect. It is not JSONPath.
Exact-path matching is the default. The
**. prefix redacts a field by name wherever it appears.
Recursive descent (**.phone) fits when the field name is a reliable sensitivity signal regardless of depth, when response shapes vary across tools, or when enumerating every exact path is brittle. Exact paths (primary_contact.phone) fit when only specific occurrences are sensitive and a same-named field elsewhere should pass through.
** is only recognized as a leading prefix. Mid-path ** (for example a.**.b) is treated as literal key characters and never matches. There is no JSONPath .., no wildcards, and no slice ranges.
Tool payload coverage
JSON Filters traverse every tool-result shape the MCP server can return.
Field matchers apply at any depth. A matching
BLOCK short-circuits the Guard chain and replaces the result with a safe placeholder. The audit event identifies the blocking Filter.
Streaming window
The effective window at stream time ismax(workspace floor, connection override, per-request override). Any layer set to 0 drops out of the max.
Workspace floor fields are
llm_filter_window_bytes and llm_filter_window_tokens. Per-connection flags live on Models. Setting the layers is on Configure the streaming window.
Next steps
- Guards concept for Filters, directions, and fail-closed behavior
- Configure Guards to create, assign, and tune windows
- Models for per-connection filter windows