Invisible Provenance Capture for Quantum Computing Experiments
One import. Complete reproducibility. Zero code changes.
Why QBOM • Quick Start • Features • Documentation • Contributing
Quantum computing experiments are notoriously difficult to reproduce. When a paper claims "We achieved 73% fidelity on Grover's algorithm", reviewers and researchers have no way to verify or reproduce the result because critical information is missing:
| What's Reported | What's Actually Needed |
|---|---|
| "Qiskit 1.0" | Exact versions of qiskit, qiskit-aer, numpy, scipy... |
| "IBM Brisbane" | Which of the 127 qubits? What were the error rates? |
| "4096 shots" | What optimization level? What routing algorithm? |
The challenge? You can't reproduce what you can't document.
QBOM solves this by automatically capturing complete experiment provenance—with zero code changes required.
| Capability | QBOM | Manual Logging | Notebooks |
|---|---|---|---|
| Zero code changes | Yes | No | No |
| Automatic capture | Yes | No | No |
| Calibration data (T1, T2, error rates) | Yes | Rarely | Rarely |
| Transpilation details | Yes | Often forgotten | Often forgotten |
| Content verification (hashing) | Yes | No | No |
| SBOM export (CycloneDX/SPDX) | Yes | No | No |
| Reproducibility scoring | Yes | No | No |
| Multi-framework support | Yes | Custom | Custom |
Requires Python 3.10+ (install Python)
Copy and paste this entire block:
git clone https://github.com/csnp/qramm-qbom.git
cd qramm-qbom
pip install -e ".[qiskit]"
qbom --versionFramework options:
pip install -e ".[qiskit]" # Qiskit support
pip install -e ".[cirq]" # Cirq support
pip install -e ".[pennylane]" # PennyLane support
pip install -e ".[all]" # All frameworksimport qbom # Add this single line - that's it!
# Your existing quantum code - unchanged
from qiskit import QuantumCircuit
from qiskit_aer import AerSimulator
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
backend = AerSimulator()
job = backend.run(qc, shots=4096)
result = job.result()
# View what was captured
qbom.show()Output:
╭──────────────────────────── QBOM: qbom_c4b17b13 ─────────────────────────────╮
│ Summary: 2 circuits | on aer_simulator | 4,096 shots │
│ Created: 2025-01-15 14:30:07 UTC │
│ │
│ ENVIRONMENT │
│ Python: 3.11.12 │
│ qiskit: 2.2.3, qiskit-aer: 0.17.2, numpy: 1.26.4 │
│ │
│ CIRCUIT │
│ Name: bell_state | Qubits: 2 | Depth: 3 | Gates: 5 │
│ │
│ HARDWARE │
│ Backend: aer_simulator | Type: Simulator │
│ │
│ EXECUTION │
│ Shots: 4,096 │
│ │
│ RESULTS │
│ |11⟩ ███████████████░░░░░░░░░░░░░░░ 50.8% │
│ |00⟩ ██████████████░░░░░░░░░░░░░░░░ 49.2% │
╰──────────────────────────────────────────────────────────────────────────────╯
# Run the included example
python examples/basic_usage.py
# List captured traces
qbom list
# View a trace
qbom show <trace-id>
# Check reproducibility score
qbom score <trace-id>| Category | What's Captured |
|---|---|
| Environment | Python version, all package versions |
| Circuit | Gates, depth, qubits, content hash |
| Transpilation | Optimization level, qubit mapping, routing |
| Hardware | Backend, calibration (T1, T2, error rates) |
| Execution | Shots, job ID, timestamps |
| Results | Counts, probabilities, result hash |
| Framework | Status |
|---|---|
| Qiskit | Full support |
| Cirq | Supported |
| PennyLane | Supported |
| Braket | Planned |
QBOM calculates a 0-100 score showing how reproducible your experiment is:
| Score | Meaning |
|---|---|
| 90-100 | Excellent - fully reproducible |
| 70-89 | Good - minor details missing |
| 50-69 | Fair - some info missing |
| 25-49 | Poor - major gaps |
| 0-24 | Critical - cannot reproduce |
$ qbom score qbom_c4b17b13
╭─────────────────────────── Reproducibility Score ────────────────────────────╮
│ 71/100 (Good) │
╰──────────────────────────────────────────────────────────────────────────────╯
┏━━━━━━━━━━━━━━━┳━━━━━━━┳━━━━━━━━┓
┃ Component ┃ Score ┃ Status ┃
┡━━━━━━━━━━━━━━━╇━━━━━━━╇━━━━━━━━┩
│ Environment │ 20/20 │ ● │
│ Circuit │ 17/20 │ ◐ │
│ Transpilation │ 7/15 │ ◐ │
│ Hardware │ 9/25 │ ◐ │
│ Execution │ 10/10 │ ● │
│ Results │ 8/10 │ ● │
└───────────────┴───────┴────────┘qbom export <id> trace.json # JSON (default)
qbom export <id> trace.cdx.json -f cyclonedx # CycloneDX SBOM
qbom export <id> trace.spdx.json -f spdx # SPDX SBOM
qbom export <id> trace.yaml -f yaml # YAML| Document | Description |
|---|---|
| Installation | Detailed installation guide |
| Usage Guide | Complete usage examples |
| CLI Reference | All commands and options |
| Python API | Python API reference |
| Adapters | Framework adapter details |
| Use Cases | Real-world scenarios |
| Why QBOM? | Background and motivation |
qbom list List recent traces
qbom show <id> Display trace details
qbom score <id> Calculate reproducibility score
qbom validate <id> Check trace completeness
qbom diff <id1> <id2> Compare two traces
qbom drift <id> Analyze calibration drift
qbom export <id> <file> Export to file
qbom paper <id> Generate paper statement
qbom verify <file> Verify trace integrity
$ qbom list
Recent QBOM Traces
╭───────────────┬──────────────────┬───────────────┬─────────┬───────╮
│ ID │ Created │ Backend │ Circuit │ Shots │
├───────────────┼──────────────────┼───────────────┼─────────┼───────┤
│ qbom_c4b17b13 │ 2025-01-15 14:40 │ aer_simulator │ 2q, d=3 │ 4,096 │
│ qbom_bf522429 │ 2025-01-15 14:45 │ aer_simulator │ 2q, d=3 │ 1,024 │
│ qbom_b8678a13 │ 2025-01-15 14:46 │ aer_simulator │ 2q, d=3 │ 1,024 │
╰───────────────┴──────────────────┴───────────────┴─────────┴───────╯
$ qbom validate qbom_c4b17b13
╭────────────────────────────── Trace Validation ──────────────────────────────╮
│ PASS │
│ Trace is valid with 1 suggestion(s) │
╰─────────────────────────────── qbom_c4b17b13 ────────────────────────────────╯
Circuit:
ℹ No QASM or JSON representation stored
Fix: Consider storing QASM for exact circuit reproduction.
0 errors | 0 warnings | 1 info
$ qbom paper qbom_c4b17b13
Reproducibility Statement
(For Methods section)
Experiments were performed using qiskit==2.2.3 on the aer_simulator simulator.
Circuits were transpiled with optimization level 2. Each experiment used 4,096
shots.
Complete QBOM trace: qbom_c4b17b13
Content hash: a9463e429a524897
import qbom
# View current trace
qbom.show()
# Get trace object
trace = qbom.current()
print(trace.environment.packages)
print(trace.hardware.backend_name)
# Export
qbom.export("experiment.json")
# Scoped experiments
with qbom.experiment(name="VQE optimization"):
# quantum code here
passimport qbom # 1. Import hook installed
from qiskit import ... # 2. Qiskit adapter activates
transpile(circuit, backend) # 3. Transpilation captured
job = backend.run(circuit) # 4. Execution captured
result = job.result() # 5. Results captured, trace savedTraces are stored in ~/.qbom/traces/.
qramm-qbom/
├── src/qbom/
│ ├── core/ # Data models, trace builder, session
│ ├── adapters/ # Qiskit, Cirq, PennyLane hooks
│ ├── analysis/ # Scoring, drift, validation
│ ├── cli/ # Command-line interface
│ └── notebook/ # Jupyter integration
├── docs/ # Documentation
├── examples/ # Example scripts
└── tests/ # Test suite
- Zero-code provenance capture
- Qiskit, Cirq, PennyLane support
- Reproducibility scoring
- CycloneDX/SPDX export
- CLI and Jupyter integration
- AWS Braket adapter
- Enhanced drift analysis
- Remote trace storage
- IonQ and Rigetti adapters
- Web dashboard
- Team collaboration
See CONTRIBUTING.md for guidelines.
# Development setup
git clone https://github.com/csnp/qramm-qbom.git
cd qramm-qbom
pip install -e ".[dev,all]"
# Run tests
pytest
# Type check and lint
mypy src/qbom
ruff check src/qbomQBOM is developed by the CyberSecurity NonProfit (CSNP), a 501(c)(3) organization dedicated to making cybersecurity knowledge accessible to everyone.
QBOM is part of the QRAMM (Quantum Readiness Assurance Maturity Model) toolkit:
| Tool | Purpose |
|---|---|
| QBOM | Quantum experiment reproducibility |
| CryptoScan | Cryptographic vulnerability discovery |
| TLS Analyzer | TLS/SSL configuration analysis |
Apache License 2.0 — see LICENSE for details.
Copyright 2025 CyberSecurity NonProfit (CSNP)
@software{qbom2025,
title = {QBOM: Quantum Bill of Materials},
author = {{CyberSecurity NonProfit (CSNP)}},
year = {2025},
url = {https://github.com/csnp/qramm-qbom}
}