Skip to main content
Every error the CLI can raise carries a stable code, a human message, and — where one exists — a hint that is a runnable command or a code fragment you can paste; a remediation that can only be described in words has no hint and lives in the message instead. Human output is error: <CODE>: <message> on stderr, followed by hint: <command> when a hint is set. --json emits {"error", "hint", "code", "schema_version"} on stderr instead. The exit code is always 1 for these; 0 is success and 2 is a usage error (unknown flag, missing required option). Where a remediation below shows <group>, the binary substitutes the group of the command you ran — blobhub workflow diff -f <path> for a workflow manifest, blobhub scheduler diff -f <path> for a scheduler one. A hint is contractually a command you can paste, and one that named workflow unconditionally would answer MANIFEST_TYPE_MISMATCH when pasted against a scheduler manifest. blobhub completion is the one command exempt from --json: its output is a shell script meant to be piped into a file, and wrapping it in an envelope would make the only use of the command impossible. Advisories are a separate, non-fatal category: printed as warning: <CODE>: <message> on stderr, suppressed under -q and whenever stderr is not a TTY, so piping and CI logs stay quiet unless a real terminal is attached. They never change a command’s exit code, and no flag brings a suppressed one back — see Advisories. This page mirrors the CLI’s own error-code reference, and is checked against the binary’s catalog in both directions: it can neither name a code the CLI cannot raise nor omit one it can. Where that reference has fallen behind the binary, this page states what the binary does and records the difference under Where this page diverges from the CLI reference.

Credentials and authentication

API transport

Manifest

Blob and revision

Definitions

Format

Entry points and imports

Components

Playground

Checks

Sessions and executions

Schedules

Advisories

Non-fatal, printed as warning: <CODE>: <message>, suppressed under -q and when stderr is not a TTY. -v does not bring a suppressed advisory back, and no other flag does either — so an advisory is unobservable from automation: suppressed on a pipe, absent from the --json payload, visible only on a terminal. That bites hardest on DEFINITION_LIST_TRUNCATED and IMPORT_UNVERIFIED, each of which says a run may have acted on incomplete information, so where one would change what you do, reach instead for the flag that turns its condition into a hard failure — workflow build --strict-imports promotes IMPORT_UNVERIFIED to a refusal. See Advisories for why verbosity and advisories are separate channels.

Where this page diverges from the CLI reference

This page is a mirror of docs/reference/error-codes.md in the CLI repository. That file predates two releases of the binary, and a little of what it says never held. Every claim the binary contradicts is stated here as the binary behaves, and listed below so the difference reads as staleness in the source rather than drift in this page. Each is logged for repair upstream.

See also

  • Configuration — the streams, envelopes and exit codes these codes travel on.
  • Concepts — the platform behaviours behind several of them, including the 403 that cannot distinguish absent from inaccessible.
  • Utilitiesdoctor reports several of these codes as rows rather than raising them.