Prism-Vault
Prism-Vault is a Prism-first shared config, secret, and credential-resolution service. It gives Prism agents and Prism backend surfaces one stable contract for runtime configuration and secret access acrosslocal, lan, and render
deployments.
Prism-Vault is in design. SPEC-122 v0.1 is
draft; no implementation code has
landed yet. This page describes the agreed v0.1 shape. As each implementation
phase lands, the operator, build/deploy, and API pages described in the
Documentation Contract are
created alongside the code — not before it.Why it exists
Prism’s three deployment modes each pass credentials and config differently:local leans on .env and dev-service defaults, lan needs durable non-root
secret handling on a private network, and render uses platform env/secret
bindings. Agents need scoped runtime values without broad secret-store
credentials, and operators need masked metadata, audit evidence, and repairable
config state. Prism-Vault makes that boundary explicit and uniform.
The Datris HashiCorp Vault implementation (datris-platform-oss, reviewed
2026-05-14) is prior art — its compact KV v2 wrapper, self-describing secret
records, masked metadata, and
runtime env injection are ergonomic lessons Prism-Vault keeps. Prism-Vault
hardens that model for production: no fail-open tenant fallback, no root-token
provider access, no broad provider reads from application code.
Subproject boundary
Prism-Vault starts as a separable subproject inside the Prism umbrella — not a separate repository in v0.1 — but it behaves like an independent service from the first commit:- Own separable subproject path with repo-separation-ready boundaries.
- Own version string and changelog.
- Own build artifact / image and deploy config for local, LAN, and Render.
- Own contract tests.
- No hard dependency on Prism monolith internals; Prism integrates through the Prism-Vault API, not direct table or provider access.
Architecture
Prism-Vault is a broker with three internal surfaces — Secret Store, Config Store, and Credential Resolver — all passing through one identity, scope, policy, and audit gate. Callers never talk directly to Vault, Render env bindings, or any future provider; the provider adapter sits behind the gate. Source diagrams live indocs/diagrams/prism-vault/:
shared-service-architecture.mmd— the broker / adapter topology above.secret-resolution-sequence.mmd— runtime resolution call flow.deployment-modes.mmd— local / LAN / Render provider binding.scope-data-model.mmd— the scope tuple and durable record model.
Scope model
Authorization uses stable IDs; human-readable slugs are accepted as lookup input only. The canonical scope tuple is:environment names are deployment/runtime scopes, not Git branches. The
required initial values are local, lan, and render; anything else
(staging, preview, customer-prod) needs explicit registration and policy.
API contract
v0.1 follows the normal Prism capability shape — no standalone SDK:mcp-node verbs are the thin
client agents use. The logical verb surface:
get_metadata and list never return raw secret values. Resolution is the
only v0.1 path that returns secret values — it requires a purpose, is
allowed only for runtime identities (registered Prism agent or backend service),
and returns a short-lived env payload with a TTL and an audit_id.
Authorization and audit
Authorization is enforced in the backend, not advisory. Every request resolvescaller_identity, caller_kind (human / agent / service), tenant_id,
project_id, environment, and purpose. The default rule is default-deny:
a caller can only operate inside its own tenant and project unless an explicit
policy grants the caller and purpose. If Prism-Vault is uncertain, it fails
closed and writes a denied audit event.
Every value resolution writes an audit event before returning the value.
Audit writes are atomic with authorization — if audit cannot be written, the
operation fails closed. Audit never stores raw secret values, only a value hash.
Rollout order
Prism-Vault is Prism-first. Janus and DPA-Crawl/WebCrawl inform the design but are explicitly deferred — they integrate only after Prismlocal, lan,
and render paths pass the same contract tests.
Ownership
See also
- SPEC-122 v0.1 — full contract, data model, failure modes, acceptance criteria.
- Plan #28 — workstreams and review gates.
- Documentation Contract — what docs each implementation phase must produce.
- Prism-Vault Changelog — the subproject’s own version history.

