Zum Inhalt springen

Wenn die CLI abbricht

Unbekannter Befehl, Profil gesperrt, 401 trotz Schlüssel, Antwort widerspricht dem Vertrag, Exit 11 oder 12 — Symptom, Bedeutung, Lösung.

6 Minuten LesezeitCLIStand: 25.10.2026

Auf dieser Seite

Bevor Sie loslegen

Für wen
Wer einen Befehl abgesetzt hat und statt eines Ergebnisses eine Meldung mit ✗ oder ein {"error": …} sieht
Voraussetzung
der Exit-Code des Aufrufs (echo $? direkt nach dem Befehl) — und ein Aufruf über node …/dist/main.js oder szenera, nicht über pnpm run

Die häufigsten Abbrüche der CLI in der Reihenfolge, in der sie auftreten — mit der Meldung, die Sie sehen, dem Exit-Code, seiner Bedeutung und dem Weg zurück. Jede Lösung verweist auf die zuständige Seite.

Symptom Bedeutung Lösung
„Unbekannter Befehl „device lister"." und darunter die ganze Übersicht (Exit 1) Die Wörter treffen keinen Befehl des Registers: Tippfehler, falsche Reihenfolge (list device) oder eine Flagge ohne =, die als Wort gelesen wurde. Den Befehl aus der Übersicht wählen; Flaggen tragen ihren Wert am Gleichheitszeichen (--limit=20). Siehe Befehle für Ihre Organisation.
„„device list" kennt die Flagge „--state" nicht. Bekannt sind: …" (Exit 1) Eine unbekannte Flagge ist ein Fehler, kein stiller Hinweis — die Meldung zählt die gültigen auf. Eine der genannten Flaggen nehmen; szenera <befehl> --help erklärt sie.
„„--limit" braucht einen Wert: --limit=." (Exit 1) Die Flagge stand ohne Gleichheitszeichen; --limit 20 gibt es nicht. --limit=20 schreiben.
„„device get" braucht — …" (Exit 1) Eine Pflicht-Stellung fehlt. Die Kennung anhängen, wie --help es zeigt.
„„scn_01K…" ist keine Kennung für ein Medium: erwartet wird ast_…" (Exit 1) Der Präfix der Kennung passt nicht zum Befehl; es ging kein Aufruf hinaus. Die richtige Kennung nehmen — ast_ Medium, scn_ Szene, pll_ Playlist, sch_ Programm, ply_ Display, dev_ Gerät.
„… wandert in den Papierkorb. Wenn das gewollt ist: --yes anhängen." (Exit 1) Ein unumkehrbarer Eingriff ohne Zustimmung im Aufruf. --yes anhängen, wenn die Folge gewollt ist.
„Keine Konfiguration gefunden — die Kommandozeile weiß nicht, mit welcher Umgebung sie sprechen soll.“ (Exit 2) Weder eine Datei an einem der beiden Orte noch SZENERA_BASE_URL. Profil anlegen oder SZENERA_BASE_URL und SZENERA_API_KEY setzen; siehe Profile und Ausweis.
„Unbekanntes Profil „staging". … führt: dev, prod." (Exit 2) --profile= oder SZENERA_PROFILE nennt einen Namen, den die Datei nicht führt. Einen der genannten Namen wählen.
„„asset delete" ist im Profil „prod" gesperrt — das Profil ist schreibgeschützt." (Exit 2) Ein verändernder Befehl trifft auf ein schreibgeschütztes Profil — oder auf eines ohne die Angabe, denn dann gilt true. Wenn das Profil schreiben darf: readOnly: false setzen; siehe Profile und Ausweis.
„Kein API-Schlüssel: erwartet wird ein Wert mit dem Präfix 'ak_' oder 'opk_' …" (Exit 2) Der Wert im Profil oder in SZENERA_API_KEY ist kein Schlüssel — abgeschnitten, vertauscht, leer. Den Klartext aus dem Portal übernehmen; siehe Profile und Ausweis.
„„whoami" braucht einen Ausweis, das Profil „…" trägt keinen." (Exit 1) Das Profil hat credential: {"kind": "none"} oder gar keinen; nur health und health public laufen so. SZENERA_API_KEY=ak_… mitgeben oder credential im Profil setzen.
HTTP 401 (Exit 3) trotz gesetztem Schlüssel Der Schlüssel gilt nicht: widerrufen, abgelaufen — oder das Profil zeigt auf eine andere Umgebung als die, für die der Schlüssel ausgestellt wurde. szenera whoami --profile=<name> je Profil; neuen Schlüssel erzeugen; siehe Profile und Ausweis.
HTTP 403 Permission.Denied (Exit 4) Der Ausweis gilt, aber das Recht fehlt — oder die Route verlangt ein Recht, das ein Schlüssel nicht tragen darf (etwa identity.device.list). Spalte „Schlüssel" der Befehlsseiten prüfen; Rechte des Schlüssels erweitern oder ein Profil mit Kennwort-Anmeldung nehmen.
„Die Anfrage an „composition.scenes.update" entspricht nicht dem Vertrag:" mit Feldpfaden (Exit 1) Ihre Eingabe — meist eine Datei hinter --document oder --entries — hält das Schema nicht; es ging kein Netzpaket hinaus. Die genannten Felder in der Datei korrigieren; siehe Ausgabe als JSON und Exit-Codes.
„Die Antwort auf „…" widerspricht dem Vertrag, den diese CLI (0.1.0) kennt." (Exit 9) Versatz der Stände: Die Gegenstelle ist älter oder neuer als die CLI — nicht: dort ist etwas kaputt. --raw anhängen; die Rohantwort auf der Standardausgabe zeigt, welches Feld fehlt. CLI aus dem passenden Stand bauen; siehe Ausgabe als JSON und Exit-Codes.
HTTP 409 (Exit 6) bei scene update, playlist update, role update Die erwartete Fassung stimmt nicht mehr — jemand hat dazwischen geändert. Ohne --version erneut aufrufen (der Befehl liest die Fassung dann selbst); scene update --retry wiederholt einmal von allein.
HTTP 422 (Exit 7) mit Scene.PublishValidationFailed Die Live-Prüfung des Dokuments schlug an — ein Medium ist weg, eine Vorlage gelöscht. Ursache beheben; Befunde lassen sich hier nicht übergehen.
HTTP 429 (Exit 8) Zu viele Aufrufe; retryAfterSeconds steht im Fehler. So lange warten, dann erneut; siehe Skripte und CI.
Network.RequestFailed, „fetch failed" (Exit 10) Gar keine HTTP-Antwort: falsche Adresse, kein Netz, kein Name. SZENERA_BASE_URL bzw. services im Profil prüfen; szenera health braucht keinen Ausweis und trennt Netz von Anmeldung.
health endet mit Exit 9 Die Umgebung meldet sich nicht bereit — HTTP 503 auf GET /health/ready. Warten und erneut prüfen; die Tabelle nennt die Prüfung, die rot ist.
Exit 11 nach asset upload, device get-command --wait Der Vorgang kam durch und endete rot: Verarbeitung gescheitert, Befehl failed. Den Befund im Fehler lesen; asset reprocess ist der Weg zurück für ein Medium im Zustand error; siehe Skripte und CI.
Exit 12 „Zeitlimit … erreicht — der Ausgang ist unbekannt." Das Zeitlimit griff; der Vorgang läuft womöglich weiter. Nicht blind wiederholen — erst mit asset get oder device get-command nachsehen, dann mit größerem --timeout erneut; siehe Skripte und CI.
„„abc" ist keine Dauer. Erlaubt sind 500ms, 90s, 20m, 2h — oder eine Zahl in Sekunden." (Exit 1) --timeout oder --interval trägt eine Form, die die CLI nicht kennt. Eine der genannten Formen verwenden.
„„--limit=500" liegt außerhalb von 1…200." (Exit 1) Mehr gibt der Vertrag je Seite nicht her. --limit=200 und --all; siehe Skripte und CI.
„Der Rumpf ist kein gültiges JSON" bei api post (Exit 1) Die Shell hat den Rumpf verändert — Anführungszeichen, Dollarzeichen, Zeilenumbrüche. Größere Rümpfe als Datei übergeben: @rumpf.json.
Jeder Fehler endet mit Exit 1, egal was passiert Der Aufruf läuft über pnpm run; das verschluckt die Codes. node packages/cli/dist/main.js … direkt aufrufen; siehe Ausgabe als JSON und Exit-Codes.
Die Ausgabe ist eine Tabelle, obwohl ein Skript sie liest — oder JSON im Terminal Die Form folgt der Standardausgabe: Terminal heißt Tabelle, Röhre heißt JSON; SZENERA_OUTPUT kann das überschreiben. --json oder --table erzwingen.
Der Befehl endet mit Exit 0, aber ergebnis.json enthält .daten nicht Es gibt keine Hülle: Die Standardausgabe trägt die Nutzlast direkt. .items[] statt .daten.items[] lesen; siehe Ausgabe als JSON und Exit-Codes.

Weiterführendes