CLI
@cubster/cli
is built on @cubster/assets. Log in with a pasted API key, upload files, and list/delete assets — from a terminal or from an agent, with
clean --json output and predictable exit codes. It isn't published to npm yet — see the repo for local usage during development.
Credentials resolve highest-precedence first: the --key/--base flags, then CUBSTER_API_KEY/CUBSTER_BASE_URL, then the config file (~/.config/cubster/config.json), then the SDK default base URL. cubster login writes that config file owner-only (0600). The full key is never printed, logged, or included in --json output — only its csk_xxxxxxxx… prefix is ever shown.
A command run with a key that lacks the route's service
exits 1 with the API's own message printed as-is, e.g.
This API key is not enabled for the 'transcription' service (enabled: assets). Create a key with
that service at app.cubster.dev/account/keys.. With --json, the outcome also includes service and enabled fields.
Prompts for a key (or takes --key non-interactively, for CI/agents), verifies it against /me, and stores it. Key management (create/list/revoke) isn't available here on purpose — manage keys at
app.cubster.dev.
Prints the profile email, the credential's bound workspace, and the base URL in use. Signed in with an
API key, it also prints a Services: line — the key's own service scope (a session credential has none to show).
A local file path (no stdin in this version). Flags: --name, --tags a,b, --workspace <id|slug>.
ls
— a table by default, a JSON array with --json; filter with --type, --search, --tags, --limit. rm <id>
prompts for confirmation unless --yes is passed — and defaults to "no" (never deletes) when stdin isn't a TTY and --yes wasn't passed.
Upload a local audio file and transcribe it (Deepgram Nova-3). Flags: --name, --language <tag>, --no-diarize, --workspace <id|slug>. A file over the 4 MB cap is rejected locally,
before anything is uploaded. A failed transcription still keeps the audio — the output includes a
retry hint with the transcript id.
ls
— a table by default, filter with --status/--limit.
get <id>
prints the same header + speaker-turn rendering as transcribe's success output. rm <id> deletes the transcript and its audio asset (confirmation prompt unless --yes). retry <id> re-runs a pending/failed transcript, reusing the stored audio — a completed transcript responds 409.
| 0 | Success |
| 1 | Runtime error (network/API failure, missing file, no key configured) |
| 2 | Usage error (bad flags, missing argument, unknown command) |