DLP & Privacy

Detect and protect sensitive data in requests and responses.

Request DLP

Block requests containing sensitive patterns:

{
  "type": "dlp",
  "config": {
    "action": "block",
    "patterns": {
      "ssn": "\\d{3}-\\d{2}-\\d{4}",
      "credit_card": "\\d{4}[- ]?\\d{4}[- ]?\\d{4}[- ]?\\d{4}",
      "api_key": "sk-[a-zA-Z0-9]{32,}"
    }
  }
}

Redact instead of block

Replace sensitive data with placeholders:

{
  "type": "dlp",
  "config": {
    "action": "redact",
    "patterns": {
      "email": "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}",
      "phone": "\\+?[1-9]\\d{1,14}"
    },
    "replacement": "[REDACTED]"
  }
}

Response DLP

Scrub sensitive data from responses before they reach the agent:

{
  "type": "response_dlp",
  "config": {
    "action": "redact",
    "patterns": {
      "password": "password['"]?\\s*[:=]\\s*['"]?[^'"\\s]+",
      "token": "token['"]?\\s*[:=]\\s*['"]?[^'"\\s]+"
    }
  }
}

Field redaction

Remove specific fields from audit logs:

{
  "type": "field_redaction",
  "config": {
    "fields": ["password", "secret", "token", "api_key", "credentials"]
  }
}

These fields are replaced with [REDACTED] in audit records.

Streaming DLP

For SSE responses, DLP is applied incrementally to each event. This ensures sensitive data is scrubbed even in long-running streams.

Built-in patterns

Use predefined patterns for common sensitive data:

{
  "type": "dlp",
  "config": {
    "action": "block",
    "builtin_patterns": [
      "ssn",
      "credit_card",
      "aws_key",
      "github_token",
      "private_key"
    ]
  }
}

Example: HIPAA compliance

{
  "name": "HIPAA DLP",
  "type": "dlp",
  "config": {
    "action": "block",
    "patterns": {
      "ssn": "\\d{3}-\\d{2}-\\d{4}",
      "mrn": "MRN[:\\s]?\\d{6,}",
      "dob": "DOB[:\\s]?\\d{1,2}/\\d{1,2}/\\d{2,4}"
    }
  }
}

Example: Prevent secret leaks

{
  "name": "No secrets",
  "type": "response_dlp",
  "config": {
    "action": "redact",
    "patterns": {
      "env_var": "[A-Z_]+=(sk|api|secret|password|token)[^\\s]*",
      "bearer": "Bearer [a-zA-Z0-9\\-._~+/]+=*"
    }
  }
}