Skip to content

Categories

A category is one kind of security question Patronus Ark can answer about a text. You choose the categories a gateway scans at construction time. Each category is backed by a specific set of layers — some are native-only, some are model-backed, one is transformer-only.

The ten categories

Category Question it answers L1 L2 L3 model
injection Is this a prompt-injection / jailbreak attempt? ✅ ✅ Wolf Defender (small) or unified Lion Warden
dlp Does this contain credentials, sensitive business identifiers/content, or a risky data operation? ✅ — —
pii Does this contain validated or anchor-bound personal identifiers? ✅ — —
dynamic-pii Which named entities (GLiNER labels) appear, with exact spans? — — GLiNER small v2.5 (edge)
sensitive_document What document class is this (legal, HR, finance, source code, …)? — ✅ Orca Sonar
tool_class Which kind of tool does this call/operate (file, db, api, shell, …)? — ✅ Husky Sight
tool_action Which operation does the tool perform (read, write, exec, …)? — ✅ Husky Paw
tool_tags Data-flow properties (sensitive source, untrusted source, external sink)? — ✅ Husky Nose
routing What is the operational intent of the request? — ✅ Panther Read
threat What type of security threat is this? Native rules ✅ Wolf Defender Threat

The models are documented on Hugging Face under the patronus-studio organization and mapped to categories in rust/src/assets/specs.rs. See Models & the NTDB format.

By layer profile

Native-only (L1)

dlp and pii are resolved entirely by native Rust detectors. They never download model assets and are always available offline. pii combines checksum/structure validators with field anchors for contact, payment, government, account, and person identifiers. dlp detects credentials and secrets as well as gateable business identifiers, internal metrics, source code, SQL, dumps, logs, and risky operations. PII and regex-based DLP findings populate evidence_spans with original-text offsets; native DLP operation and MCP rules also retain source-bound components and finding spans. Both can publish localized, non-finding l1_anchors with explain: true. The shared Rust/Python/API default enables only credential/secret DLP rules by default; other DLP families are opt-in through rule gates. See Native detectors.

Native + model-backed (L1 → L2 → L3)

injection and threat start with native L1 detectors and can escalate to an NTDB L2 classifier and, on promotion, a full transformer at L3. This gives immediate rule-based coverage plus learned generalization for novel phrasings.

Model-backed (L2 → L3)

sensitive_document, tool_class, tool_action, tool_tags, and routing are learned classifiers with an NTDB L2 package and a dedicated L3 transformer. They have no native L1 stage; if their assets are not cached they simply do not produce a model verdict.

Transformer-only (L3)

dynamic-pii is an L3-only GLiNER pipeline with its own labels, thresholds, chunking, text limit, and timeout. It enqueues directly to the L3 worker and has no lower-layer fallback. It can emit non-authoritative provisional entity previews before the authoritative completed result. Conditional label groups can be gated by final source-pipeline results and scoped to matching source chunks. See the dynamic PII how-to context in the tutorials and the configuration reference.

The agentic-tool trio

tool_class, tool_action, and tool_tags describe the same tool call from three angles — what kind of tool, what operation, and what data-flow risk. Combined, they let a policy engine reason about agentic actions (for example: an api tool performing a write whose tool_tags include an external sink). They correspond to the Husky model family.

The unified vs. dedicated split at L3

At L3 you can run one dedicated transformer per category (l3_strategy="dedicated") or a single coalesced multi-head model (l3_strategy="multi", the Lion Warden unified model) that serves several categories from one inference. The multi-head path trades a little per-category tuning for a large throughput win when several model-backed categories are active at once. See l3_strategy and Performance.

Choosing categories

Scan only what you need — every category adds work. A prompt firewall might run ["injection", "threat"]; a DLP gateway ["dlp", "pii", "sensitive_document"]; an agent guard ["injection", "tool_class", "tool_action", "tool_tags"]. See Choose categories & levels for guidance and the offline implications of each choice.