Each pack is a versioned bundle of rules for one domain. When the hosted protocol or @decionis/mcp decides under a pack, it is exactly this bundle, at this version. Each pack's page lists every rule in the order the evaluator tries it.
A pack replaces the repository policy file for one evaluation, locally, or decides on the hosted protocol for the requests it selects.
decionis_list_policy_packs lists the packs with their exact versions. Pass a key as policy_pack to decionis_evaluate; the bundle is seeded into the in-process evaluator once and its version pinned. No network, nothing recorded.
{ "policy_pack": "devops", "payload": { "action": "infra-destroy" } }That decides ESCALATE, by escalate_infra_destroy: the payload's action becomes the decision type, and the rest of the payload is the request's context.
The verdict comes from the policy bundles stored for your organization. A pack's rules decide once its bundle is stored there, and each evaluation then names it: vertical_pack, the pack's policy_version and require_exact_policy_version: true. Without an exact version, selection falls back to your newest active bundle, and vertical_pack alone changes only the decision domain.
The evaluator considers the enabled rules for the request's decision domain, highest priority first, and the first rule whose conditions all hold decides. Its action becomes the outcome. No matching rule is a REVIEW. Missing required signals hold the decision as an ESCALATE, and so does a reserved request fact, such as amount or risk_score, that a rule reads but the caller put only in the context.
A pack per domain, with the rules for that domain's decisions.
Narrow packs for one workflow, selected by its workflow keys.