Skip to main content

Dual-Use Filter

The dual-use-filter policy matches content against a list of dual-use terms. If you do not configure blocked_terms, the gateway falls back to a built-in reference list that includes terms such as weapon, explosive, bioweapon, nerve agent, centrifuge, uranium enrichment, and NATO classification phrases.

Configuration

pack:
name: dual-use-filter-example
version: 1.0.0
enabled: true

policies:
chain:
- dual-use-filter

policy:
dual-use-filter:
blocked_terms:
- centrifuge
- precursor chemical
- maraging steel
- uranium enrichment
action: block
fuzzy_matching: true
max_distance: 2

Fields

FieldTypeDescriptionDefault
blocked_termsstring[]Terms to match. If omitted, the gateway uses its built-in reference list.built-in list
actionblock | redactblock stops the request. redact returns a redact verdict for the gateway redaction path.block
fuzzy_matchingbooleanEnable near-match detection.false
max_distanceintegerMaximum edit distance used with fuzzy matching.1

Built-in reference terms

The default list includes a broad starter set such as:

  • weapon
  • explosive
  • bioweapon
  • nerve agent
  • dual-use / dual use
  • nato restricted, nato confidential, nato secret
  • precursor chemical
  • cyber surveillance
  • intrusion software
  • nuclear material
  • centrifuge
  • uranium enrichment
  • plutonium
  • heavy water
  • maraging steel
  • carbon fibre / carbon fiber

Use Cases

Block with custom terms

pack:
name: export-control
version: 1.0.0
enabled: true

policies:
chain:
- dual-use-filter
- entity-list-filter
- itar-ear-filter

policy:
dual-use-filter:
blocked_terms:
- uranium hexafluoride
- thermal imaging
- night vision
action: block

Use the built-in defaults

pack:
name: default-dual-use-guard
version: 1.0.0
enabled: true

policies:
chain:
- dual-use-filter

policy:
dual-use-filter: {}

How It Works

  1. Keeptrusts joins the current message content into a single text buffer.
  2. It loads blocked_terms, or the built-in reference list when blocked_terms is omitted.
  3. It checks for exact case-insensitive matches, and optionally fuzzy matches within max_distance.
  4. On a match it returns block or redact according to action.

Best Practices

  • Keep blocked_terms focused when you override the defaults.
  • Use block when you need deterministic enforcement of the matched term itself.
  • Treat redact as a softer verdict that depends on the gateway's redaction handling rather than a dual-use-specific replacement marker.
  • Pair this policy with entity-list-filter and itar-ear-filter for stronger export-control coverage.

Next steps