open-standards/wai/wai-quantum-cli
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Transaction Science 4d4c6dd147
All checks were successful
standards workspaces build + test / which workspaces this change touches (pull_request) Successful in 13s
wai-quantum command line / does this change touch it (pull_request) Successful in 16s
wai-quantum studio and desktop / does this change touch it (pull_request) Successful in 32s
wai-quantum command line / command line · linux (pull_request) Successful in 1m9s
repository checks / lockfiles, tests in CI, workflow hygiene, spec and section references, public text (pull_request) Successful in 2m4s
wai-quantum studio and desktop / studio · browser (pull_request) Successful in 2m41s
standards workspaces build + test / joule-code-rs (joule-code/joule-code-rs, joule-code-rs, linux-arm64, true) (pull_request) Successful in 10m11s
standards workspaces build + test / macOS energy backends (pull_request) Successful in 13m29s
wai-quantum command line / command line · macos (pull_request) Successful in 39s
wai-quantum studio and desktop / desktop app · macos (pull_request) Successful in 2m21s
wai-quantum-cli release: read the SHA-256 files over the private network
The formulae job of the first full release run (wai-quantum-cli-v0.1.0) failed with a
403: it read each archive's .sha256 through its public download URL, and the public
address refuses the Python library's default user agent. formulae.py now reads them
at the forge's own address, the API's (over the private network, as the uploads go),
with a user agent of its own. The formula and the manifest still point users at the
public URLs. Run by hand against that release, it wrote both, which are attached there.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-20 22:40:03 -04:00
..
release wai-quantum-cli release: read the SHA-256 files over the private network 2026-10-20 22:40:03 -04:00
src Quantum Studio: one interface for the browser and the desktop app, on the job service's engine 2026-10-20 17:34:16 -04:00
Cargo.lock wai-quantum 0.6.12: cheaper contraction trees, from V-cycles and tree annealing 2026-10-20 17:34:17 -04:00
Cargo.toml wai-quantum-cli and the desktop app require wai-quantum 0.6.12 2026-10-20 17:34:52 -04:00
README.md wai-quantum-cli: release builds for macOS, Linux and Windows, with a Homebrew formula and a Scoop manifest 2026-10-20 17:34:17 -04:00
smoke.sh wai-quantum-cli: the command line on the job service's engine, installable 2026-10-20 17:34:16 -04:00

wai-quantum

The command line of the WAI quantum stack. It runs OpenQASM programs on this machine, planned and run by the same engine as the quantum job service (wai_quantum::engine), so a job gives the same result here as there. It also sends programs to the service, checks and draws them, verifies receipts, and serves its tools to agents over MCP.

Installing it

Where How
Any platform with Rust cargo install wai-quantum-cli (installs the wai-quantum binary)
macOS or Linux, with Homebrew brew tap transaction-science/tap https://git.transaction.science/Transaction-Science/homebrew-tap then brew install wai-quantum
Windows, with Scoop scoop bucket add transaction-science https://git.transaction.science/Transaction-Science/scoop-bucket then scoop install wai-quantum
Anywhere a prebuilt archive from the releases tagged wai-quantum-cli-v…

The prebuilt archives are:

  • macOS for Apple silicon and for Intel, with the GPU state vector;
  • Linux for x86_64 and arm64, linked statically, so any distribution runs them;
  • Windows for x86_64.

Each archive has a .sha256 file beside it (shasum -a 256 -c). A tag wai-quantum-cli-v<version> builds them on the project's own runners (release/, .github/workflows/wai-quantum-cli-release.yml), and writes the Homebrew formula and the Scoop manifest for them.

Running a program

wai-quantum run bell.qasm --shots 1000
wai-quantum run prog.qasm -o "Z0 Z1" -o "0.5 X2" -a 000 -a 111
wai-quantum run prog.qasm --noise depolarizing_2q=0.01 --noise readout=0.02
wai-quantum run prog.qasm --method mps --option max_bond=128
cat prog.qasm | wai-quantum run --json > job.json

A program is OpenQASM 3, or the OpenQASM 2 forms in common use. The reader accepts:

  • registers, and a gate applied to a whole register;
  • the standard gates;
  • ctrl and negctrl modifiers;
  • gate definitions;
  • measurement and reset anywhere, and if on measured bits.

It refuses loops, inv and pow, giving the line of each.

--method auto (the default) picks the strongest method the program admits:

Method Takes
exact dyadic angles; the state vector, the same bits on every machine
statevector any angle
stabilizer Clifford circuits, to tens of thousands of qubits
mps matrix product states
pauli Pauli dynamics, for expectation values
tensor_network amplitudes
cutrank a Clifford circuit with a layer of rotations
density_matrix, trajectories noise

wai-quantum methods lists each method's reach in a job's memory here (--memory-gb, default 16).

Each result names:

  • its method, and why that method was chosen;
  • its accuracy class;
  • the counts, expectation values or amplitudes asked for;
  • its receipt.

Receipts

Every result is signed over the request and the result in their canonical JSON. The service signs with its key; this tool signs with this user's key:

  • --key FILE, or $WAI_QUANTUM_KEY, names a file holding the key;
  • otherwise the key is $XDG_CONFIG_HOME/wai/quantum-key, or ~/.config/wai/quantum-key. It is made from the system's random source on first use and is readable by its owner only.

wai-quantum key prints the key's did:key. --demo-key signs with the published demo key. Its receipts show only that a result is unaltered, not who signed it.

wai-quantum run prog.qasm --json > job.json
wai-quantum verify job.json              # VALID, and the signer's did:key
wai-quantum submit prog.qasm --json > svc.json
wai-quantum verify svc.json              # the same check on the service's receipt

A receipt shows that this key signed this request and this result, and anyone can rerun the request to compare. It does not say who holds the key.

Checking and drawing

wai-quantum lint prog.qasm               # ok, with its shape, or the line of the first problem
wai-quantum plan prog.qasm               # the method and why, the memory and work, without running
wai-quantum draw prog.qasm --width 80
q0: ─────H─────●──M0──────
               │
q1: ───────────⊕──●───M1──
                  │
q2: ──Rz(π/4)─────⊕───M2──

The service

wai-quantum submit sends a job to https://wai.transaction.science/quantum-jobs, or to --service URL (also read from $WAI_QUANTUM_SERVICE). It waits for a long job to finish, then prints the result just as run does.

For agents

wai-quantum mcp is a Model Context Protocol server on standard input and output. Its tools are:

  • run_quantum_circuit
  • plan_quantum_circuit
  • lint_qasm
  • draw_circuit
  • verify_quantum_result
  • list_methods

Runs happen on this machine and are signed with this user's key; nothing is sent anywhere. In an MCP client's configuration:

{ "mcpServers": { "wai-quantum": { "command": "wai-quantum", "args": ["mcp"] } } }

The research tools

wai-quantum lab … holds the research tools:

  • algorithms from the catalogue, OpenQASM and QIR export, and receipts over them;
  • error correction at circuit level;
  • qLDPC memory;
  • fault-tolerant resource estimates and architectures;
  • DMRG, TDVP and molecules;
  • neural quantum states;
  • Gaussian boson sampling;
  • optimisation;
  • the compute fabric;
  • information and transport.

wai-quantum lab help lists them. wai-quantum verify also checks the receipts they sign.

Builds

  • Default: submit, over HTTPS.
  • --features metal: the single-precision state vector on the GPU (--method statevector_single), on macOS.
  • --no-default-features --target wasm32-wasip2: a WASI component without submit. It gives the same output under any WASI runtime.

wai-quantum completions zsh (or bash, fish, elvish, PowerShell) prints shell completion.