QP Vault
The governed knowledge store for autonomous organizations.
Every document has a trust tier that weights search results. Every chunk has a SHA3-256 content ID. Every mutation is auditable. The entire vault is verifiable via Merkle tree. Content is screened by a Membrane before indexing. Access is controlled by RBAC. Air-gap native. Post-quantum ready.
AI coding agents: start with AGENTS.md. It contains build and test commands, the subpackage map, code style, crypto allowlist, and the guardrails (async-only, Membrane-gated ingest, CID invariant).
The Architecture
A Vault is a governed store of knowledge resources. Each resource is screened by the Membrane, chunked, hashed, trust-classified, and indexed for hybrid search. RBAC controls who can read, write, or administer.
┌─────────────────────────────────────────────────────────────────┐
│ VAULT │
├──────────────┬──────────────────────────────────────────────────┤
│ RBAC │ READER · WRITER · ADMIN permission matrix │
│ MEMBRANE │ Innate scan → Release gate → Index/Quarantine │
│ INGEST │ Parse → Chunk → SHA3-256 CID → Embed → Store │
│ GOVERN │ Trust tiers · Lifecycle · Data classification │
│ RETRIEVE │ Hybrid search · Trust-weighted · Time-travel │
│ GRAPH │ Entities · Edges · Traversal · Extraction │
│ VERIFY │ Merkle tree · CID per chunk · Proof export │
│ AUDIT │ Every write → VaultEvent → Capsule (opt.) │
│ ENCRYPT │ AES-256-GCM · ML-KEM-768 · ML-DSA-65 │
├──────────────┴──────────────────────────────────────────────────┤
│ Trust weights: CANONICAL 1.5x · WORKING 1.0x · EPHEMERAL 0.7x │
│ FIPS 202 · FIPS 197 · FIPS 203 · FIPS 204 │
└─────────────────────────────────────────────────────────────────┘
Knowledge that can't be verified can't be trusted.
Why qp-vault
Vector databases store embeddings and return them by similarity. When something goes wrong, or when a regulator asks "was this the current policy at the time?", similarity search is not enough.
qp-vault solves three problems that vector databases do not:
1. Trust-weighted retrieval. Every resource has a trust tier (CANONICAL, WORKING, EPHEMERAL, ARCHIVED) that multiplies its search relevance. A CANONICAL SOP at 0.6 similarity outranks a WORKING draft at 0.8 similarity. This is not metadata filtering; it is a scoring function that ensures authoritative knowledge surfaces first, every time, without manual curation.
2. Cryptographic content integrity. Every chunk receives a SHA3-256 content ID at ingest. Every resource receives a Merkle root over its chunk CIDs. The entire vault has a root hash. Any modification to any chunk, in any resource, changes the vault's Merkle root. Auditors can verify a single resource without downloading the vault, using an exported Merkle proof. No trust in the storage layer is required.
3. Knowledge lifecycle with temporal validity. Resources have lifecycles (DRAFT to ACTIVE to SUPERSEDED to ARCHIVED) with temporal validity windows. Point-in-time queries answer "what was our policy on March 15, 2024?" by returning only resources that were ACTIVE at that date. Supersession chains link v1 to v2 to v3 with cryptographic pointers. Expired resources auto-transition. None of this exists in any vector database.
Content Addressing
Every chunk is hashed with SHA3-256 and assigned a content ID:
vault://sha3-256/4cb02d65a1b2c3d4e5f67890abcdef1234567890abcdef1234567890abcdef12
Every resource receives a Merkle root computed over its sorted chunk CIDs. The vault itself has a root hash over all resource hashes:
Vault Merkle Root
/ \
Resource A Root Resource B Root
/ \ |
hash(c1+c2) hash(c3+c4) hash(c5)
/ \ / \ |
CID(c1) CID(c2) CID(c3) CID(c4) CID(c5)
Identical content always produces the same CID. Modified content always produces a different root. Auditors verify a single resource via Merkle proof without downloading the vault.
Trust Tiers
Trust is not metadata. It is a scoring function.
| Tier | Weight | Freshness Half-Life | Behavior |
|---|---|---|---|
| CANONICAL | 1.5x | 365 days | Immutable. Official SOPs, approved policies. |
| WORKING | 1.0x | 180 days | Default. Drafts, in-progress documents. |
| EPHEMERAL | 0.7x | 30 days | Temporary. Meeting notes. Auto-archives after TTL. |
| ARCHIVED | 0.25x | 730 days | Historical. Superseded versions. |
Search ranking formula:
relevance = (0.7 × vector_similarity + 0.3 × text_rank) × trust_weight × freshness_decay × layer_boost
Where freshness_decay = exp(-age_days / half_life × ln2). A 180-day-old WORKING document retains 50% freshness. A CANONICAL document of the same age retains 70%.
Knowledge Lifecycle
DRAFT ──→ REVIEW ──→ ACTIVE ──→ SUPERSEDED ──→ ARCHIVED
│
EXPIRED (auto when valid_until passes)
│
ACTIVE (re-activate)
vault.transition(r.id, "review", reason="Ready for security team")
vault.transition(r.id, "active")
old, new = vault.supersede(v1_id, v2_id) # v1 → SUPERSEDED, linked to v2
chain = vault.chain(v1_id) # [v1, v2, v3, ...]
results = vault.search("policy", as_of=date(2024, 3, 15)) # Time-travel
expiring = vault.expiring(days=90) # What's about to expire?
Explore the fit with your AI coding agent
Paste this prompt into Claude Code, Cursor, Codex, or any other agent:
Read the qp-vault README and AGENTS.md at https://github.com/quantumpipes/vault.
Then survey my codebase for every knowledge surface an AI reads from (docs, wikis,
RAG indices, prompt context, retrieval pipelines). For each, evaluate whether
trust-weighted search, SHA3-256 content addressing, the Membrane, or the knowledge
graph would improve safety, accuracy, or auditability. Recommend the single
highest-leverage place to start, with concrete files and functions to change.
Install
pip install qp-vault
| Command | What You Get | Dependencies |
|---|---|---|
pip install qp-vault |
SQLite, trust search, CAS, Merkle, lifecycle, Membrane, RBAC, Knowledge Graph | 1 (pydantic) |
pip install qp-vault[postgres] |
+ PostgreSQL + pgvector hybrid search | + sqlalchemy, asyncpg, pgvector |
pip install qp-vault[encryption] |
+ AES-256-GCM encryption at rest | + cryptography, pynacl |
pip install qp-vault[pq] |
+ ML-KEM-768 + ML-DSA-65 post-quantum crypto | + liboqs-python |
pip install qp-vault[capsule] |
+ Cryptographic audit trail | + qp-capsule |
pip install qp-vault[docling] |
+ 25+ format document processing (PDF, DOCX, etc.) | + docling |
pip install qp-vault[local] |
+ Local embeddings (sentence-transformers, air-gap safe) | + sentence-transformers |
pip install qp-vault[openai] |
+ OpenAI embeddings (cloud) | + openai |
pip install qp-vault[integrity] |
+ Near-duplicate + contradiction detection | + numpy |
pip install qp-vault[fastapi] |
+ REST API (30+ endpoints) | + fastapi |
pip install qp-vault[cli] |
+ vault command-line tool (15 commands) |
+ typer, rich |
pip install qp-vault[all] |
Everything | All of the above |
Combine extras with commas:
pip install qp-vault[postgres,encryption,pq,capsule,fastapi] # Production API server
pip install qp-vault[local,encryption,cli] # Air-gapped deployment
pip install qp-vault[docling,integrity,cli] # Development
Quick Start
from qp_vault import Vault
vault = Vault("./my-knowledge")
# Add with trust tiers
vault.add("Incident response: acknowledge within 15 minutes...",
name="sop-incident.md", trust_tier="canonical")
# Trust-weighted search (deduplicated, with freshness decay)
results = vault.search("incident response")
# Multi-keyword grep (single-pass FTS, three-signal scoring)
results = vault.grep(["incident", "response", "P0", "escalation"])
# Retrieve full content
text = vault.get_content(results[0].resource_id)
# Replace content (atomic: creates new version, supersedes old)
old, new = vault.replace(resource_id, "Updated policy v2 content")
# Verify integrity
result = vault.verify()
print(result.merkle_root)
# Export proof for auditors
proof = vault.export_proof(resource_id)
Knowledge Graph
Track entities, relationships, and mentions across your vault. Works on both PostgreSQL and SQLite.
# Create entities
alice = vault.graph.create_node(name="Alice Chen", entity_type="person",
properties={"role": "CTO"})
acme = vault.graph.create_node(name="Acme Corp", entity_type="company")
# Connect them
vault.graph.create_edge(source_id=alice.id, target_id=acme.id,
relation_type="works_at", weight=0.9)
# Search and traverse
results = vault.graph.search_nodes("Alice")
neighbors = vault.graph.neighbors(alice.id, depth=2)
# Track mentions in documents
resource = vault.add("Alice Chen leads engineering at Acme.", name="team.md")
vault.graph.track_mention(alice.id, resource.id,
context_snippet="Alice Chen leads engineering")
# Backlinks: find all documents mentioning an entity
backlinks = vault.graph.get_backlinks(alice.id)
# Build LLM context from graph relationships
context = vault.graph.context_for([alice.id, acme.id])
# Graph-augmented search: boost docs mentioning detected entities
results = vault.search("Alice project updates", graph_boost=True)
Intelligence services for extraction, detection, resolution, materialization, and wikilinks. See Knowledge Graph docs.
Multi-Tenancy
vault.add("content", tenant_id="site-123")
vault.search("query", tenant_id="site-123") # Scoped to tenant
# Or lock the vault to a single tenant
vault = Vault("./knowledge", tenant_id="site-123")
RBAC
vault = Vault("./knowledge", role="reader") # Search, get, verify only
vault = Vault("./knowledge", role="writer") # + add, update, delete
vault = Vault("./knowledge", role="admin") # + export, import, config
Batch Import
resources = vault.add_batch(["doc1.md", "doc2.md", "doc3.md"], trust_tier="working")
Memory Layers
from qp_vault import MemoryLayer
ops = vault.layer(MemoryLayer.OPERATIONAL) # SOPs, runbooks (boost=1.5x)
strategic = vault.layer(MemoryLayer.STRATEGIC) # ADRs, decisions (trust=CANONICAL)
compliance = vault.layer(MemoryLayer.COMPLIANCE) # Audit evidence (reads audited)
Health Scoring
score = vault.health() # Vault-wide (0-100)
score = vault.health(resource.id) # Per-resource
Content Screening (Membrane)
Content is screened before indexing. Prompt injection, jailbreak, XSS, and code injection attempts are quarantined.
vault.add("ignore all previous instructions") # Quarantined automatically
Plugin System
from qp_vault.plugins import embedder, parser
@embedder("my-model")
class MyEmbedder:
dimensions = 768
async def embed(self, texts):
return my_model.encode(texts)
Three discovery methods: explicit registration, entry_points, or --plugins-dir (air-gap).
Encryption
from qp_vault.encryption import AESGCMEncryptor, HybridEncryptor
# Classical
enc = AESGCMEncryptor()
ciphertext = enc.encrypt(b"secret")
# Post-quantum hybrid (ML-KEM-768 + AES-256-GCM)
enc = HybridEncryptor()
pub, sec = enc.generate_keypair()
ciphertext = enc.encrypt(b"classified", pub)
Event Streaming
from qp_vault.streaming import VaultEventStream
stream = VaultEventStream()
vault = AsyncVault("./knowledge", auditor=stream)
async for event in stream.subscribe():
print(f"{event.event_type}: {event.resource_name}")
Import / Export
await vault.export_vault("backup.json")
await vault.import_vault("backup.json")
CLI
vault init ./knowledge
vault add report.pdf --trust canonical
vault search "revenue projections" --top-k 5
vault list --trust canonical --tenant site-123
vault verify
vault health
vault delete <id>
vault transition <id> review --reason "Ready for review"
vault content <id>
vault replace <id> new-version.md
vault export backup.json
15 commands. Exit codes: 0 = pass, 1 = fail. Designed for CI: vault verify && deploy.
FastAPI
from qp_vault.integrations.fastapi_routes import create_vault_router
router = create_vault_router(vault)
app.include_router(router, prefix="/v1/vault")
# 22+ endpoints: resources, search, faceted search, verify, health,
# lifecycle, collections, provenance, batch, export, content
Web Explorer
A single-file, no-build, air-gap-safe browser UI for reading a vault. Folder tree, inline markdown reader, full-text search, semantic icons, and keyboard navigation, with zero network requests.
cd examples/web-explorer
python generate_manifest.py /path/to/your/vault --title "My Vault"
open index.html
See examples/web-explorer/ and the Web Explorer guide.
Security
| Layer | Algorithm | Standard | Purpose |
|---|---|---|---|
| Content integrity | SHA3-256 | FIPS 202 | Tamper-evident CIDs and Merkle roots |
| Symmetric encryption | AES-256-GCM | FIPS 197 | Data at rest |
| Key encapsulation | ML-KEM-768 | FIPS 203 | Post-quantum key exchange |
| Digital signatures | ML-DSA-65 | FIPS 204 | Post-quantum provenance signing |
| Audit signatures | Ed25519 | FIPS 186-5 | Via qp-capsule |
| Hybrid encryption | ML-KEM-768 + AES-256-GCM | FIPS 203+197 | Quantum-resistant data encryption |
| Content screening | Membrane pipeline | -- | Prompt injection, jailbreak, XSS detection |
| Access control | RBAC | -- | Reader / Writer / Admin roles |
| Input validation | Pydantic + custom | -- | Enum checks, name/tag/metadata/properties limits |
| Graph sanitization | Membrane pipeline | -- | NFKC normalization, HTML escaping, XML isolation for LLM extraction |
| Plugin verification | SHA3-256 manifest | -- | Hash-verified plugin loading |
| Key management | ctypes memset | -- | Secure key zeroization |
| Self-testing | FIPS KAT | -- | SHA3-256 + AES-256-GCM known answer tests |
No deprecated cryptography. No runtime network dependencies. Air-gapped operation supported. Full threat model in docs/security.md.
Part of the Quantum Pipes Stack
| Package | Purpose | Install |
|---|---|---|
| qp-capsule | Cryptographic audit protocol | pip install qp-capsule |
| qp-vault | Governed knowledge store | pip install qp-vault |
| qp-conduit | Infrastructure management | Shell toolkit |
| qp-tunnel | Encrypted remote access | Shell toolkit |
Each independently useful. Together, the governed AI platform for autonomous organizations.
Documentation
| Document | Audience |
|---|---|
| Getting Started | Developers |
| Architecture | Developers, Architects |
| API Reference | Developers |
| Knowledge Graph | Developers, Data Engineers |
| Trust Tiers | Developers, Product |
| Knowledge Lifecycle | Developers, Compliance |
| Memory Layers | Developers, Architects |
| Multi-Tenancy | Developers, SaaS |
| Encryption | Developers, Security |
| RBAC | Developers, Compliance |
| Membrane | Developers, Security |
| Streaming & Telemetry | DevOps, Observability |
| Plugin Development | SDK Authors |
| Security Model | CISOs, Security Teams |
| CLI Reference | DevOps, Developers |
| FastAPI Integration | Backend Developers |
| Web Explorer | Anyone browsing a vault |
Contributing
See CONTRIBUTING.md. Bug fixes with tests, new plugins (embedders, parsers, policies), and documentation improvements are welcome.
License
Knowledge that can't be verified can't be trusted.
An open-source governed knowledge store
Documentation · Security Policy · Changelog
Copyright 2026 Quantum Pipes Technologies, LLC
Metadata
Release files for qp-vault 1.8.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| qp_vault-1.8.0.tar.gz | 633.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| qp_vault-1.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 804.5 kB
Release files / qp_vault-1.8.0.tar.gz
| Download URL | qp_vault-1.8.0.tar.gz |
|---|---|
| Size | 633.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7acb6edc1ff926c4c716820798222d936e1bdf0dea4971935b33db4e93627576
|
|
BLAKE2b-256 checksum How to use checksums |
55785e9c7f93dc82c6c646208761148cbac92aba663a3544fbb8b0e3c7f7d95b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency logRelease files / qp_vault-1.8.0-py3-none-any.whl
| Download URL | qp_vault-1.8.0-py3-none-any.whl |
|---|---|
| Size | 171.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
591f245c591e771f029f3957158563abed789f3caa6fe70ac3756e0e0e0739d9
|
|
BLAKE2b-256 checksum How to use checksums |
bff1c55dc2e231d676be09f5985cb74ce1269e53263dde08f235b9f1ad97d07b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 31, 2026.
Transparency log