alterlab-qiskit — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited alterlab-qiskit (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Qiskit is an open-source quantum computing framework. Build quantum circuits, optimize for hardware, execute on simulators or real quantum computers, and analyze results. Supports IBM Quantum (100+ qubit Heron and Nighthawk systems), IonQ, Amazon Braket, and other providers.
Version note: Examples target Qiskit SDK 2.x (qiskit>=2,<3, Python 3.10+; current 2.5.x as of 2026-09) and qiskit-ibm-runtime ≥ 0.40 (current 0.49). Older tutorials break on these changes, so check any snippet you adapt against them:
execute(), BasicAer, qiskit.tools (incl. tools.jupyter, job_monitor) and bind_parameters — use primitives, qiskit.providers.basic_provider.BasicSimulator, and assign_parameters.qiskit.pulse, BackendV1, the V1 reference primitives (qiskit.primitives.Sampler/Estimator) and Instruction.c_if (use with qc.if_test(...)).RealAmplitudes, EfficientSU2, TwoLocal, ZZFeatureMap, QFT, …; removal in 3.0) — use real_amplitudes(), efficient_su2(), n_local(), zz_feature_map(), QFTGate.mode= (a backend, Session, or Batch); the old session=/backend= keywords raise TypeError. The Options class and channel="ibm_quantum" are gone — the platform is now quantum.cloud.ibm.com (API key + instance CRN, channel "ibm_quantum_platform").Use this skill when the user wants to:
| Scenario | Use Instead |
|---|---|
| Google Quantum AI processors, Cirq-native circuits, or XEB/RB characterization in Cirq | alterlab-cirq |
| Gradient-trained hybrid quantum-classical models with PyTorch/JAX autodiff | alterlab-pennylane |
| Open-system dynamics — Lindblad master equations, decoherence, cavity QED | alterlab-qutip |
| Classical quantum-chemistry (DFT, conformers, pKa) with no quantum circuits | alterlab-rowan |
Key Features:
uv pip install "qiskit>=2,<3"
uv pip install "qiskit[visualization]" matplotlib # circuit/result plotting
uv pip install qiskit-ibm-runtime # IBM hardware + Runtime primitivesfrom qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
# Create Bell state (entangled qubits)
qc = QuantumCircuit(2)
qc.h(0) # Hadamard on qubit 0
qc.cx(0, 1) # CNOT from qubit 0 to 1
qc.measure_all() # Measure both qubits
# Run locally
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()
print(counts) # {'00': ~512, '11': ~512}from qiskit.visualization import plot_histogram
qc.draw('mpl') # Circuit diagram
plot_histogram(counts) # Results histogramFor detailed installation, authentication, and IBM Quantum account setup:
Topics covered:
For constructing quantum circuits with gates, measurements, and composition:
Topics covered:
For executing quantum circuits and computing results:
Topics covered:
For optimizing circuits and preparing for hardware execution:
Topics covered:
For displaying circuits, results, and quantum states:
Topics covered:
For running on simulators and real quantum computers:
Topics covered:
For implementing the four-step quantum computing workflow:
Topics covered:
For implementing specific quantum algorithms:
Topics covered:
If you need to:
references/setup.mdreferences/circuits.mdreferences/circuits.mdreferences/primitives.mdreferences/primitives.mdreferences/transpilation.mdreferences/visualization.mdreferences/backends.mdreferences/backends.mdreferences/patterns.mdreferences/algorithms.mdreferences/algorithms.md from qiskit.primitives import StatevectorSampler
sampler = StatevectorSampler() from qiskit import transpile
qc_optimized = transpile(qc, backend=backend, optimization_level=3)least_busy() or list service.backends() rather than hard-coding a QPU name — QPUs are retired over time (all 127-qubit Eagle systems, e.g. ibm_brisbane, are gone)resilience_level on the Estimator (Sampler has no resilience_level; use twirling / dynamical_decoupling)from qiskit import QuantumCircuit, transpile
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit.transpiler import generate_preset_pass_manager
service = QiskitRuntimeService()
backend = service.least_busy(operational=True, simulator=False)
# Hardware only accepts ISA circuits (native gates + connectivity)
pm = generate_preset_pass_manager(backend=backend, optimization_level=3)
qc_isa = pm.run(qc)
sampler = Sampler(mode=backend) # job mode; pass a Session/Batch for other modes
job = sampler.run([qc_isa], shots=1024)
counts = job.result()[0].data.meas.get_counts()from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator
from scipy.optimize import minimize
# Transpile once, then lay the observable out on the same physical qubits —
# an un-mapped observable does not match the ISA circuit's width.
ansatz_isa = pm.run(ansatz)
hamiltonian_isa = hamiltonian.apply_layout(ansatz_isa.layout)
with Session(backend=backend) as session: # paid plans; use Batch on the Open Plan
estimator = Estimator(mode=session)
def cost_function(params):
# parameter values travel in the PUB — no re-transpiling per iteration
result = estimator.run([(ansatz_isa, hamiltonian_isa, params)]).result()
return float(result[0].data.evs)
result = minimize(cost_function, initial_params, method='COBYLA')Part of the AlterLab Academic Skills suite.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.