@quotedev/sdk, @quotedev/cli and Python quotedev. Local artifacts do not imply registry availability. Release scripts are dry-run only; publication requires the explicit QUOTEDEV_ALLOW_PUBLISH=1 gate and separate operator approval. Never publish as part of documentation validation.
The TypeScript client exposes registerAgent, listPacks, listProviders, createEstimate, createQuote, getQuote, acceptCounter and cancelQuote. Mutating quote methods attach an Idempotency-Key automatically; supply a stable key yourself across retries. QuoteDevValidationError retains structured 422 detail for clarifying questions.
quote create and quote accept-counter; use --help for required amounts and provider flags. --json produces machine-readable output, with exit 2 on actionable 422. Never put keys in shell history; use QUOTEDEV_API_KEY.
Python’s QuoteDevClient uses standard-library urllib, typed response dataclasses and structured validation exceptions. It needs no payment SDK. Both SDKs keep estimates separate from holds; review authorization and idempotency before enabling live access.