The jobs that happen at build time, not run time
Not everything is an SDK call from inside your app. Uploading source maps after a production build, sanity-checking your integration before a release, wiring a Crossdeck step into your deploy — these are build-time jobs, and they belong in your terminal and your CI pipeline. The CLI is the single tool that runs them.
Install, authenticate, run
Install it globally (or call it with npx), and authenticate by putting your secret key in the environment — which is exactly how a CI secret store hands it to a job:
npm install -g @cross-deck/cli
export CROSSDECK_SECRET_KEY=cd_sk_live_… # from your CI secret store
crossdeck --version
crossdeck doctor # check your setup and surface problems early
crossdeck upload-sourcemaps --release "$GIT_SHA" --url-prefix https://your.app/assets/ ./dist
Environment-authenticated, CI-shaped
The CLI reads CROSSDECK_SECRET_KEY from the environment — not a flag you'd leave in your shell history, not a value committed to the repo. That's deliberate: it's the exact shape every CI secret store expects, so the same command runs identically on your laptop and in a pipeline. crossdeck doctor validates your configuration and tells you what's off before a release does. And upload-sourcemaps is the build-time half of the Source maps lesson — the step you run after each build.
If you'd rather drive it from a build script than a shell, the same functionality is importable programmatically (import { uploadSourcemaps } from "@cross-deck/cli"), so it composes into whatever your pipeline already looks like.
A clean doctor, maps shipping from CI
Run crossdeck doctor and get a clean bill of health; add upload-sourcemaps to your deploy job and every release ships its maps automatically. The build-time side of Crossdeck is now part of your pipeline, not a manual step you'll forget.
Authenticated from the CI secret store, doctor green and source maps uploaded for release $GIT_SHA — every build, no hands.