Versioned, layered, dependency-aware governance distribution for VaultKit.
The Policy Pack system allows VaultKit to ship secure, production-ready governance defaults in a structured, upgradeable format.
Policy Packs solve one core problem:
Organizations should not have to design secure governance from scratch.
Instead, they can install curated, versioned packs that enforce secure defaults and domain-specific protections.
A Policy Pack is:
Each pack lives inside:
lib/vkit/policy/packs/<pack_name>/
Structure:
<pack_name>/
metadata.yaml
policies/
01_policy.yaml
02_policy.yaml
Each pack must include metadata.yaml.
Example:
__pack_meta:
name: starter
version: "1.0.0"
layer: foundation
description: "Secure baseline governance rules."
dependencies: []
priority_band:
min: 100
max: 199
| Field | Required | Description |
|---|---|---|
name |
✅ | Pack identifier |
version |
✅ | Semantic version string |
layer |
✅ | foundation / domain / custom |
description |
❌ | Human-readable summary |
dependencies |
❌ | Required packs |
priority_band |
❌ | Enforced priority range |
Layers define enforcement precedence.
| Layer | Purpose |
|---|---|
foundation |
Core safety defaults |
domain |
Domain-specific governance |
custom |
Organization-authored rules |
Installation order must respect:
foundation → domain → custom
VaultKit enforces dependency presence but does not auto-install.
When a pack is installed:
config/policies/Installed file naming pattern:
<pack_name>__<index>__<policy_slug>.yaml
Example:
starter__01__mask_pii.yaml
starter__02__cross_region.yaml
This guarantees:
VaultKit records installed packs in:
.vkit/packs.yaml
Example:
format_version: v1
installed_packs:
starter:
name: starter
version: "1.0.0"
layer: foundation
installed_at: "2026-02-15T15:00:00Z"
pack_checksum: "abc123..."
files:
- path: config/policies/starter__01__mask_pii.yaml
policy_id: mask_pii
This enables:
Drift is detected when:
installed_version != shipped_version
CLI output:
⚠ starter (installed v1.0.0, available v1.1.0)
Drift detection does NOT auto-upgrade.
Upgrades require explicit command:
vkit policy pack upgrade
Each pack generates a SHA256 checksum over:
metadata.yamlpolicies/**/*.yamlChecksum ensures:
Checksum stored in state file and embedded in bundle metadata.
When compiling a policy bundle, installed packs are embedded:
"installed_packs": [
{
"name": "starter",
"version": "1.0.0"
}
]
This ensures:
Upgrade flow:
Upgrade command:
vkit policy pack upgrade
Options:
| Flag | Behavior |
|---|---|
--dry-run |
Preview without writing |
--force |
Overwrite existing pack files |
VaultKit never overwrites non-pack files.
Before installation:
ensure_dependencies!
If missing:
DependencyMissing: Pack requires dependencies not installed: starter
VaultKit does NOT auto-install dependencies to prevent surprise governance changes.
If priority_band is defined:
All policies inside the pack must respect:
min <= policy.priority <= max
Violation raises:
InvalidPack: Policy priority outside allowed band
This prevents cross-pack priority collisions.
When removing a pack:
Removal command:
vkit policy pack remove starter
Policy Packs guarantee:
The Pack System follows:
starter (foundation)
↓
ai_safety (domain)
↓
financial_compliance (domain)
↓
custom_company_rules (custom)
Each layer builds on the one below.
Planned improvements:
Policy Packs are not templates.
They are versioned governance modules.
They allow VaultKit to scale from:
“Write your own policies”
to
“Install secure governance instantly.”
They are a foundational component of VaultKit’s long-term compliance and distribution strategy.