Skip to main content
This page lists Guard types and the catalogs that back them. Filters are the Guard type available today; validators are coming soon. For how content inspection works, see the Guards concept. To configure Guards, see Filter responses.

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 Filter matcher.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 is max(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