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
| Field | Type | Description | Default |
|---|---|---|---|
blocked_terms | string[] | Terms to match. If omitted, the gateway uses its built-in reference list. | built-in list |
action | block | redact | block stops the request. redact returns a redact verdict for the gateway redaction path. | block |
fuzzy_matching | boolean | Enable near-match detection. | false |
max_distance | integer | Maximum edit distance used with fuzzy matching. | 1 |
Built-in reference terms
The default list includes a broad starter set such as:
weaponexplosivebioweaponnerve agentdual-use/dual usenato restricted,nato confidential,nato secretprecursor chemicalcyber surveillanceintrusion softwarenuclear materialcentrifugeuranium enrichmentplutoniumheavy watermaraging steelcarbon 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
- Keeptrusts joins the current message content into a single text buffer.
- It loads
blocked_terms, or the built-in reference list whenblocked_termsis omitted. - It checks for exact case-insensitive matches, and optionally fuzzy matches within
max_distance. - On a match it returns
blockorredactaccording toaction.
Best Practices
- Keep
blocked_termsfocused when you override the defaults. - Use
blockwhen you need deterministic enforcement of the matched term itself. - Treat
redactas 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-filteranditar-ear-filterfor stronger export-control coverage.
Next steps
- Entity List Filter — Restricted-party screening
- ITAR/EAR Filter — Export-control term blocking
- Embedding Detector — Similarity-based matching
- DLP Filter — Custom regex and term controls