Zum Hauptinhalt springen

Documentation Index

Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt

Use this file to discover all available pages before exploring further.

Der private QA-Stack soll OpenClaw auf eine realistischere, kanalorientierte Weise testen, als es ein einzelner Unit-Test kann. Aktuelle Bestandteile:
  • extensions/qa-channel: synthetischer Nachrichtenkanal mit DM-, Kanal-, Thread-, Reaktions-, Bearbeitungs- und Löschoberflächen.
  • extensions/qa-lab: Debugger-UI und QA-Bus zum Beobachten des Transkripts, Einspeisen eingehender Nachrichten und Exportieren eines Markdown-Berichts.
  • extensions/qa-matrix, zukünftige Runner-Plugins: Live-Transport-Adapter, die einen echten Kanal innerhalb eines untergeordneten QA-Gateway steuern.
  • qa/: repo-gestützte Seed-Assets für die Startaufgabe und grundlegende QA- Szenarien.
  • Mantis: Vorher- und Nachher-Live-Verifizierung für Bugs, die echte Transporte, Browser-Screenshots, VM-Zustand und PR-Nachweise benötigen.

Befehlsoberfläche

Jeder QA-Ablauf läuft unter pnpm openclaw qa <subcommand>. Viele haben pnpm qa:*- Skriptaliasse; beide Formen werden unterstützt.
BefehlZweck
qa runGebündelter QA-Selbsttest; schreibt einen Markdown-Bericht.
qa suiteRepo-gestützte Szenarien gegen die QA-Gateway-Lane ausführen. Aliasse: pnpm openclaw qa suite --runner multipass für eine wegwerfbare Linux-VM.
qa coverageDas Markdown-Inventar zur Szenarioabdeckung ausgeben (--json für maschinenlesbare Ausgabe).
qa parity-reportZwei qa-suite-summary.json-Dateien vergleichen und den agentischen Paritätsbericht schreiben.
qa character-evalDas Character-QA-Szenario über mehrere Live-Modelle mit bewertetem Bericht ausführen. Siehe Berichterstattung.
qa manualEinen einmaligen Prompt gegen die ausgewählte Provider-/Modell-Lane ausführen.
qa uiDie QA-Debugger-UI und den lokalen QA-Bus starten (Alias: pnpm qa:lab:ui).
qa docker-build-imageDas vorgebackene QA-Docker-Image bauen.
qa docker-scaffoldEin docker-compose-Gerüst für das QA-Dashboard und die Gateway-Lane schreiben.
qa upDie QA-Site bauen, den Docker-gestützten Stack starten und die URL ausgeben (Alias: pnpm qa:lab:up; die Variante :fast ergänzt --use-prebuilt-image --bind-ui-dist --skip-ui-build).
qa aimockNur den AIMock-Provider-Server starten.
qa mock-openaiNur den szenariobewussten mock-openai-Provider-Server starten.
qa credentials doctor / add / list / removeDen gemeinsamen Convex-Anmeldedatenpool verwalten.
qa matrixLive-Transport-Lane gegen einen wegwerfbaren Tuwunel-Homeserver. Siehe Matrix-QA.
qa telegramLive-Transport-Lane gegen eine echte private Telegram-Gruppe.
qa discordLive-Transport-Lane gegen einen echten privaten Discord-Guild-Kanal.
qa slackLive-Transport-Lane gegen einen echten privaten Slack-Kanal.
qa mantisVorher- und Nachher-Verifizierungs-Runner für Live-Transport-Bugs, mit Discord-Statusreaktionsnachweisen, Crabbox-Desktop-/Browser-Smoke und Slack-in-VNC-Smoke. Siehe Mantis und Mantis Slack Desktop Runbook.

Operator-Ablauf

Der aktuelle QA-Operator-Ablauf ist eine zweigeteilte QA-Site:
  • Links: Gateway-Dashboard (Control UI) mit dem Agenten.
  • Rechts: QA Lab, das das Slack-ähnliche Transkript und den Szenarioplan zeigt.
Führen Sie ihn aus mit:
pnpm qa:lab:up
Das baut die QA-Site, startet die Docker-gestützte Gateway-Lane und stellt die QA-Lab-Seite bereit, auf der ein Operator oder eine Automatisierungsschleife dem Agenten eine QA-Mission geben, echtes Kanalverhalten beobachten und aufzeichnen kann, was funktioniert hat, fehlgeschlagen ist oder blockiert geblieben ist. Für schnellere Iteration an der QA-Lab-UI, ohne jedes Mal das Docker-Image neu zu bauen, starten Sie den Stack mit einem per Bind-Mount eingebundenen QA-Lab-Bundle:
pnpm openclaw qa docker-build-image
pnpm qa:lab:build
pnpm qa:lab:up:fast
pnpm qa:lab:watch
qa:lab:up:fast hält die Docker-Services auf einem vorgebauten Image und bind-mountet extensions/qa-lab/web/dist in den qa-lab-Container. qa:lab:watch baut dieses Bundle bei Änderungen neu, und der Browser lädt automatisch neu, wenn sich der QA-Lab-Asset-Hash ändert. Für einen lokalen OpenTelemetry-Trace-Smoke führen Sie aus:
pnpm qa:otel:smoke
Dieses Skript startet einen lokalen OTLP/HTTP-Trace-Empfänger, führt das QA-Szenario otel-trace-smoke mit aktiviertem diagnostics-otel-Plugin aus, decodiert dann die exportierten Protobuf-Spans und prüft die releasekritische Form: openclaw.run, openclaw.harness.run, openclaw.model.call, openclaw.context.assembled und openclaw.message.delivery müssen vorhanden sein; Modellaufrufe dürfen bei erfolgreichen Turns kein StreamAbandoned exportieren; rohe Diagnose-IDs und openclaw.content.*-Attribute dürfen nicht im Trace enthalten sein. Es schreibt otel-smoke-summary.json neben die QA-Suite-Artefakte. Observability-QA bleibt ausschließlich für Source-Checkouts. Der npm-Tarball lässt QA Lab absichtlich aus, daher führen Package-Docker-Release-Lanes keine qa-Befehle aus. Verwenden Sie pnpm qa:otel:smoke aus einem gebauten Source-Checkout, wenn Sie die Diagnoseinstrumentierung ändern. Für eine transportechte Matrix-Smoke-Lane führen Sie aus:
pnpm openclaw qa matrix --profile fast --fail-fast
Die vollständige CLI-Referenz, der Profil-/Szenariokatalog, Umgebungsvariablen und das Artefaktlayout für diese Lane befinden sich in Matrix-QA. Kurzüberblick: Sie stellt einen wegwerfbaren Tuwunel-Homeserver in Docker bereit, registriert temporäre Driver-/SUT-/Observer-Benutzer, führt das echte Matrix-Plugin innerhalb eines untergeordneten QA-Gateway aus, das auf diesen Transport beschränkt ist (kein qa-channel), und schreibt dann einen Markdown-Bericht, eine JSON-Zusammenfassung, ein Artefakt mit beobachteten Ereignissen und ein kombiniertes Ausgabelog unter .artifacts/qa-e2e/matrix-<timestamp>/. Die Szenarien decken Transportverhalten ab, das Unit-Tests nicht Ende-zu-Ende nachweisen können: Mention-Gating, Allow-Bot-Richtlinien, Allowlisten, Top-Level- und Thread-Antworten, DM-Routing, Reaktionsverarbeitung, Unterdrückung eingehender Bearbeitungen, Restart-Replay-Deduplizierung, Wiederherstellung nach Homeserver-Unterbrechungen, Zustellung von Genehmigungsmetadaten, Medienverarbeitung sowie Matrix-E2EE-Bootstrap-/Wiederherstellungs-/Verifizierungsabläufe. Das E2EE-CLI-Profil steuert außerdem openclaw matrix encryption setup und Verifizierungsbefehle über denselben wegwerfbaren Homeserver, bevor Gateway-Antworten geprüft werden. Discord hat außerdem Mantis-only-Opt-in-Szenarien für Bug-Reproduktionen. Verwenden Sie --scenario discord-status-reactions-tool-only für die explizite Statusreaktions- Zeitleiste oder --scenario discord-thread-reply-filepath-attachment, um einen echten Discord-Thread zu erstellen und zu verifizieren, dass message.thread-reply einen filePath-Anhang beibehält. Diese Szenarien bleiben außerhalb der standardmäßigen Live-Discord-Lane, weil sie Vorher-/Nachher-Repro-Probes und keine breite Smoke-Abdeckung sind. Der Thread-Anhang-Mantis-Workflow kann auch ein angemeldetes Discord-Web- Zeugenvideo hinzufügen, wenn MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR oder MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64 in der QA- Umgebung konfiguriert ist. Dieses Viewer-Profil dient nur der visuellen Aufzeichnung; die Pass/Fail- Entscheidung kommt weiterhin vom Discord-REST-Orakel. CI verwendet dieselbe Befehlsoberfläche in .github/workflows/qa-live-transports-convex.yml. Geplante und standardmäßige manuelle Läufe führen das schnelle Matrix-Profil mit Live-Frontier-Anmeldedaten, --fast und OPENCLAW_QA_MATRIX_NO_REPLY_WINDOW_MS=3000 aus. Manuelles matrix_profile=all fächert in die fünf Profil-Shards auf, damit der vollständige Katalog parallel laufen kann und zugleich ein Artefaktverzeichnis pro Shard erhalten bleibt. Für transportechte Telegram-, Discord- und Slack-Smoke-Lanes:
pnpm openclaw qa telegram
pnpm openclaw qa discord
pnpm openclaw qa slack
Sie zielen auf einen bereits vorhandenen echten Kanal mit zwei Bots (Driver + SUT). Erforderliche Umgebungsvariablen, Szenariolisten, Ausgabeartefakte und der Convex-Anmeldedatenpool sind unten in der Telegram-, Discord- und Slack-QA-Referenz dokumentiert. Für einen vollständigen Slack-Desktop-VM-Lauf mit VNC-Rettung führen Sie aus:
pnpm openclaw qa mantis slack-desktop-smoke \
  --gateway-setup \
  --scenario slack-canary \
  --keep-lease
Dieser Befehl least eine Crabbox-Desktop/Browser-Maschine, führt die Slack-Live-Lane in der VM aus, öffnet Slack Web im VNC-Browser, erfasst den Desktop und kopiert slack-qa/, slack-desktop-smoke.png und slack-desktop-smoke.mp4, wenn Videoaufzeichnung verfügbar ist, zurück in das Mantis-Artefaktverzeichnis. Crabbox- Desktop/Browser-Leases stellen die Capture-Tools und Browser/Native-Build-Hilfspakete vorab bereit, sodass das Szenario nur auf älteren Leases Fallbacks installieren sollte. Mantis meldet Gesamt- und phasenbezogene Zeitmessungen in mantis-slack-desktop-smoke-report.md, sodass langsame Läufe zeigen, ob Zeit in Lease-Aufwärmung, Abruf von Zugangsdaten, Remote-Einrichtung oder Artefaktkopie geflossen ist. Verwenden Sie --lease-id <cbx_...> erneut, nachdem Sie sich manuell über VNC bei Slack Web angemeldet haben; wiederverwendete Leases halten außerdem den pnpm-Store-Cache von Crabbox warm. Der Standard --hydrate-mode source verifiziert aus einem Source-Checkout und führt Installation/Build in der VM aus. Verwenden Sie --hydrate-mode prehydrated nur, wenn der wiederverwendete Remote-Arbeitsbereich bereits node_modules und ein gebautes dist/ enthält; dieser Modus überspringt den teuren Installations-/Build-Schritt und schlägt geschlossen fehl, wenn der Arbeitsbereich nicht bereit ist. Mit --gateway-setup lässt Mantis einen persistenten OpenClaw-Slack-Gateway in der VM auf Port 38973 laufen; ohne diese Option führt der Befehl die normale Bot-zu-Bot-Slack-QA-Lane aus und beendet sich nach der Artefakterfassung. Die Operator-Checkliste, der GitHub-Workflow-Dispatch-Befehl, der Vertrag für Evidence-Kommentare, die Hydrate-Mode-Entscheidungstabelle, die Timing-Interpretation und die Schritte zur Fehlerbehandlung befinden sich im Mantis-Slack-Desktop-Runbook. Für eine Desktop-Aufgabe im Agent-/CV-Stil führen Sie aus:
pnpm openclaw qa mantis visual-task \
  --browser-url https://example.net \
  --expect-text "Example Domain" \
  --vision-model openai/gpt-5.4
visual-task least oder verwendet eine Crabbox-Desktop/Browser-Maschine erneut, startet crabbox record --while, steuert den sichtbaren Browser über einen verschachtelten visual-driver, erfasst visual-task.png, führt openclaw infer image describe gegen den Screenshot aus, wenn --vision-mode image-describe ausgewählt ist, und schreibt visual-task.mp4, mantis-visual-task-summary.json, mantis-visual-task-driver-result.json und mantis-visual-task-report.md. Wenn --expect-text gesetzt ist, fordert der Vision-Prompt ein strukturiertes JSON- Urteil an und besteht nur, wenn das Modell positive sichtbare Evidenz meldet; eine negative Antwort, die lediglich den Zieltext zitiert, lässt die Assertion fehlschlagen. Verwenden Sie --vision-mode metadata für einen No-Model-Smoke, der Desktop-, Browser-, Screenshot- und Video-Plumbing nachweist, ohne einen Provider für Bildverständnis aufzurufen. Die Aufzeichnung ist ein erforderliches Artefakt für visual-task; wenn Crabbox kein nicht leeres visual-task.mp4 aufzeichnet, schlägt die Aufgabe fehl, auch wenn der visuelle Treiber bestanden hat. Bei einem Fehler behält Mantis den Lease für VNC, sofern die Aufgabe nicht bereits bestanden hatte und --keep-lease nicht gesetzt war. Bevor Sie gepoolte Live-Zugangsdaten verwenden, führen Sie aus:
pnpm openclaw qa credentials doctor
Der Doctor prüft die Convex-Broker-Umgebung, validiert Endpoint-Einstellungen und verifiziert die Erreichbarkeit von Admin/List, wenn das Maintainer-Secret vorhanden ist. Er meldet für Secrets nur den Status gesetzt/fehlend.

Live-Transport-Abdeckung

Live-Transport-Lanes teilen sich einen Vertrag, statt jeweils eine eigene Szenariolistenform zu erfinden. qa-channel ist die breite synthetische Suite für Produktverhalten und ist nicht Teil der Live-Transport-Abdeckungsmatrix.
LaneCanaryMention-GatingBot-zu-BotAllowlist-BlockAntwort auf oberster EbeneNeustart-FortsetzungThread-Follow-upThread-IsolationReaktionsbeobachtungHelp-BefehlNative Befehlsregistrierung
Matrixxxxxxxxxx
Telegramxxxx
Discordxxxx
Slackxxxxxxxx
Dies belässt qa-channel als breite Suite für Produktverhalten, während Matrix, Telegram und zukünftige Live-Transporte eine gemeinsame explizite Checkliste für den Transportvertrag verwenden. Für eine wegwerfbare Linux-VM-Lane, ohne Docker in den QA-Pfad einzubringen, führen Sie aus:
pnpm openclaw qa suite --runner multipass --scenario channel-chat-baseline
Dies startet einen frischen Multipass-Gast, installiert Abhängigkeiten, baut OpenClaw innerhalb des Gasts, führt qa suite aus und kopiert anschließend den normalen QA-Bericht und die Zusammenfassung zurück nach .artifacts/qa-e2e/... auf dem Host. Es verwendet dieselbe Szenarioauswahllogik wie qa suite auf dem Host. Host- und Multipass-Suite-Läufe führen mehrere ausgewählte Szenarien standardmäßig parallel mit isolierten Gateway-Workern aus. qa-channel verwendet standardmäßig eine Parallelität von 4, begrenzt durch die Anzahl der ausgewählten Szenarien. Verwenden Sie --concurrency <count>, um die Worker-Anzahl anzupassen, oder --concurrency 1 für serielle Ausführung. Der Befehl beendet sich mit einem Nicht-Null-Code, wenn ein Szenario fehlschlägt. Verwenden Sie --allow-failures, wenn Sie Artefakte ohne fehlschlagenden Exit-Code wünschen. Live-Läufe leiten die unterstützten QA-Auth-Eingaben weiter, die für den Gast praktikabel sind: umgebungsbasierte Provider-Schlüssel, den QA-Live-Provider-Konfigurationspfad und CODEX_HOME, wenn vorhanden. Belassen Sie --output-dir unterhalb des Repo-Roots, damit der Gast über den gemounteten Arbeitsbereich zurückschreiben kann.

Telegram-, Discord- und Slack-QA-Referenz

Matrix hat wegen der Anzahl seiner Szenarien und der Docker-gestützten Homeserver-Bereitstellung eine eigene Seite. Telegram, Discord und Slack sind kleiner - jeweils eine Handvoll Szenarien, kein Profilsystem, gegen bestehende echte Channels -, daher befindet sich ihre Referenz hier.

Gemeinsame CLI-Flags

Diese Lanes registrieren sich über extensions/qa-lab/src/live-transports/shared/live-transport-cli.ts und akzeptieren dieselben Flags:
FlagStandardBeschreibung
--scenario <id>-Führt nur dieses Szenario aus. Wiederholbar.
--output-dir <path><repo>/.artifacts/qa-e2e/{telegram,discord,slack}-<timestamp>Speicherort für Berichte/Zusammenfassung/beobachtete Nachrichten und das Ausgabeprotokoll. Relative Pfade werden gegen --repo-root aufgelöst.
--repo-root <path>process.cwd()Repository-Root beim Aufruf aus einem neutralen cwd.
--sut-account <id>sutTemporäre Konto-ID innerhalb der QA-Gateway-Konfiguration.
--provider-mode <mode>live-frontiermock-openai oder live-frontier (live-openai aus Legacy-Zeiten funktioniert weiterhin).
--model <ref> / --alt-model <ref>Provider-StandardPrimäre/alternative Modell-Refs.
--fastausSchneller Provider-Modus, wo unterstützt.
--credential-source <env|convex>envSiehe Convex-Zugangsdatenpool.
--credential-role <maintainer|ci>ci in CI, sonst maintainerRolle, die bei --credential-source convex verwendet wird.
Jede Lane beendet sich bei einem fehlgeschlagenen Szenario mit einem Nicht-Null-Code. --allow-failures schreibt Artefakte, ohne einen fehlschlagenden Exit-Code zu setzen.

Telegram-QA

pnpm openclaw qa telegram
Zielt auf eine echte private Telegram-Gruppe mit zwei unterschiedlichen Bots (Treiber + SUT). Der SUT-Bot muss einen Telegram-Benutzernamen haben; Bot-zu-Bot-Beobachtung funktioniert am besten, wenn beide Bots in @BotFather den Bot-to-Bot Communication Mode aktiviert haben. Erforderliche Env bei --credential-source env:
  • OPENCLAW_QA_TELEGRAM_GROUP_ID - numerische Chat-ID (String).
  • OPENCLAW_QA_TELEGRAM_DRIVER_BOT_TOKEN
  • OPENCLAW_QA_TELEGRAM_SUT_BOT_TOKEN
Optional:
  • OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1 behält Nachrichtenkörper in Artefakten für beobachtete Nachrichten bei (standardmäßig redigiert).
Szenarien (extensions/qa-lab/src/live-transports/telegram/telegram-live.runtime.ts):
  • telegram-canary
  • telegram-mention-gating
  • telegram-mentioned-message-reply
  • telegram-help-command
  • telegram-commands-command
  • telegram-tools-compact-command
  • telegram-whoami-command
  • telegram-status-command
  • telegram-repeated-command-authorization
  • telegram-other-bot-command-gating
  • telegram-context-command
  • telegram-current-session-status-tool
  • telegram-reply-chain-exact-marker
  • telegram-stream-final-single-message
  • telegram-long-final-reuses-preview
  • telegram-long-final-three-chunks
Die implizite Standardmenge deckt immer Canary, Mention-Gating, Antworten auf native Befehle, Befehlsadressierung und Bot-zu-Bot-Gruppenantworten ab. mock-openai-Standards enthalten außerdem deterministische Prüfungen für Reply-Chain und Final-Message-Streaming. telegram-current-session-status-tool bleibt opt-in, weil es nur stabil ist, wenn es direkt nach Canary in einem Thread ausgeführt wird, nicht nach beliebigen nativen Befehlsantworten. Verwenden Sie pnpm openclaw qa telegram --list-scenarios --provider-mode mock-openai, um die aktuelle Standard-/Optional-Aufteilung mit Regressions-Refs auszugeben. Ausgabeartefakte:
  • telegram-qa-report.md
  • telegram-qa-summary.json - enthält pro Antwort die RTT (Treibersenden → beobachtete SUT-Antwort), beginnend mit Canary.
  • telegram-qa-observed-messages.json - Körper redigiert, sofern OPENCLAW_QA_TELEGRAM_CAPTURE_CONTENT=1 nicht gesetzt ist.

Discord-QA

pnpm openclaw qa discord
Zielt auf einen echten privaten Discord-Guild-Channel mit zwei Bots: einen vom Harness gesteuerten Treiber-Bot und einen SUT-Bot, der vom untergeordneten OpenClaw-Gateway über das gebündelte Discord-Plugin gestartet wird. Verifiziert Channel-Mention-Handling, dass der SUT-Bot den nativen /help-Befehl bei Discord registriert hat, sowie opt-in Mantis-Evidenzszenarien. Erforderliche Env bei --credential-source env:
  • OPENCLAW_QA_DISCORD_GUILD_ID
  • OPENCLAW_QA_DISCORD_CHANNEL_ID
  • OPENCLAW_QA_DISCORD_DRIVER_BOT_TOKEN
  • OPENCLAW_QA_DISCORD_SUT_BOT_TOKEN
  • OPENCLAW_QA_DISCORD_SUT_APPLICATION_ID - muss der vom Discord zurückgegebenen Bot-Benutzer-ID des SUT entsprechen (andernfalls schlägt die Lane sofort fehl).
Optional:
  • OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1 behält Nachrichteninhalte in Artefakten beobachteter Nachrichten bei.
  • OPENCLAW_QA_DISCORD_VOICE_CHANNEL_ID wählt den Sprach-/Stage-Kanal für discord-voice-autojoin aus; ohne diese Variable wählt das Szenario den ersten sichtbaren Sprach-/Stage-Kanal für den SUT-Bot aus.
Szenarien (extensions/qa-lab/src/live-transports/discord/discord-live.runtime.ts:36):
  • discord-canary
  • discord-mention-gating
  • discord-native-help-command-registration
  • discord-voice-autojoin - Opt-in-Sprachszenario. Läuft eigenständig, aktiviert channels.discord.voice.autoJoin und verifiziert, dass der aktuelle Discord-Sprachstatus des SUT-Bots der Ziel-Sprach-/Stage-Kanal ist. Convex-Discord-Anmeldedaten können optional voiceChannelId enthalten; andernfalls ermittelt der Runner den ersten sichtbaren Sprach-/Stage-Kanal in der Guild.
  • discord-status-reactions-tool-only - Opt-in-Mantis-Szenario. Läuft eigenständig, weil es den SUT auf Always-on-Guild-Antworten nur per Tool mit messages.statusReactions.enabled=true umstellt und anschließend eine REST-Reaktions-Zeitleiste sowie visuelle HTML/PNG-Artefakte erfasst. Mantis-Vorher/Nachher-Berichte bewahren außerdem vom Szenario bereitgestellte MP4-Artefakte als baseline.mp4 und candidate.mp4 auf.
Führen Sie das Discord-Szenario für automatischen Sprachbeitritt explizit aus:
pnpm openclaw qa discord \
  --scenario discord-voice-autojoin \
  --provider-mode mock-openai
Führen Sie das Mantis-Statusreaktionsszenario explizit aus:
pnpm openclaw qa discord \
  --scenario discord-status-reactions-tool-only \
  --provider-mode live-frontier \
  --model openai/gpt-5.4 \
  --alt-model openai/gpt-5.4 \
  --fast
Ausgabeartefakte:
  • discord-qa-report.md
  • discord-qa-summary.json
  • discord-qa-observed-messages.json - Inhalte geschwärzt, außer OPENCLAW_QA_DISCORD_CAPTURE_CONTENT=1 ist gesetzt.
  • discord-qa-reaction-timelines.json und discord-status-reactions-tool-only-timeline.png, wenn das Statusreaktionsszenario ausgeführt wird.

Slack-QA

pnpm openclaw qa slack
Zielt auf einen echten privaten Slack-Kanal mit zwei unterschiedlichen Bots ab: einen vom Harness gesteuerten Driver-Bot und einen SUT-Bot, der vom untergeordneten OpenClaw-Gateway über das gebündelte Slack-Plugin gestartet wird. Erforderliche Umgebungsvariablen bei --credential-source env:
  • OPENCLAW_QA_SLACK_CHANNEL_ID
  • OPENCLAW_QA_SLACK_DRIVER_BOT_TOKEN
  • OPENCLAW_QA_SLACK_SUT_BOT_TOKEN
  • OPENCLAW_QA_SLACK_SUT_APP_TOKEN
Optional:
  • OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1 behält Nachrichteninhalte in Artefakten beobachteter Nachrichten bei.
Szenarien (extensions/qa-lab/src/live-transports/slack/slack-live.runtime.ts:39):
  • slack-canary
  • slack-mention-gating
  • slack-allowlist-block
  • slack-top-level-reply-shape
  • slack-restart-resume
  • slack-thread-follow-up
  • slack-thread-isolation
Ausgabeartefakte:
  • slack-qa-report.md
  • slack-qa-summary.json
  • slack-qa-observed-messages.json - Inhalte geschwärzt, außer OPENCLAW_QA_SLACK_CAPTURE_CONTENT=1 ist gesetzt.

Slack-Workspace einrichten

Die Lane benötigt zwei unterschiedliche Slack-Apps in einem Workspace sowie einen Kanal, in dem beide Bots Mitglieder sind:
  • channelId - die Cxxxxxxxxxx-ID eines Kanals, in den beide Bots eingeladen wurden. Verwenden Sie einen dedizierten Kanal; die Lane postet bei jedem Lauf.
  • driverBotToken - Bot-Token (xoxb-...) der Driver-App.
  • sutBotToken - Bot-Token (xoxb-...) der SUT-App, die eine von der Driver-App getrennte Slack-App sein muss, damit ihre Bot-Benutzer-ID unterschiedlich ist.
  • sutAppToken - App-Level-Token (xapp-...) der SUT-App mit connections:write, das von Socket Mode verwendet wird, damit die SUT-App Ereignisse empfangen kann.
Bevorzugen Sie einen für QA dedizierten Slack-Workspace, statt einen Produktions-Workspace wiederzuverwenden. Das unten stehende SUT-Manifest beschränkt die Produktionsinstallation des gebündelten Slack-Plugins (extensions/slack/src/setup-shared.ts:10) absichtlich auf die Berechtigungen und Ereignisse, die von der Live-Slack-QA-Suite abgedeckt werden. Die Einrichtung des Produktionskanals aus Benutzersicht finden Sie unter Slack-Kanal-Schnelleinrichtung; das QA-Driver/SUT-Paar ist absichtlich getrennt, weil die Lane zwei unterschiedliche Bot-Benutzer-IDs in einem Workspace benötigt. 1. Driver-App erstellen Gehen Sie zu api.slack.com/appsCreate New AppFrom a manifest → wählen Sie den QA-Workspace aus, fügen Sie das folgende Manifest ein und wählen Sie dann Install to Workspace:
{
  "display_information": {
    "name": "OpenClaw QA Driver",
    "description": "Test driver bot for OpenClaw QA Slack live lane"
  },
  "features": {
    "bot_user": {
      "display_name": "OpenClaw QA Driver",
      "always_online": true
    }
  },
  "oauth_config": {
    "scopes": {
      "bot": ["chat:write", "channels:history", "groups:history", "users:read"]
    }
  },
  "settings": {
    "socket_mode_enabled": false
  }
}
Kopieren Sie den Bot User OAuth Token (xoxb-...) - daraus wird driverBotToken. Der Driver muss nur Nachrichten posten und sich selbst identifizieren; keine Ereignisse, kein Socket Mode. 2. SUT-App erstellen Wiederholen Sie Create New App → From a manifest im selben Workspace. Diese QA-App verwendet absichtlich eine schmalere Version des Produktionsmanifests des gebündelten Slack-Plugins (extensions/slack/src/setup-shared.ts:10): Reaktions-Scopes und -Ereignisse werden ausgelassen, weil die Live-Slack-QA-Suite die Reaktionsverarbeitung noch nicht abdeckt.
{
  "display_information": {
    "name": "OpenClaw QA SUT",
    "description": "OpenClaw QA SUT connector for OpenClaw"
  },
  "features": {
    "bot_user": {
      "display_name": "OpenClaw QA SUT",
      "always_online": true
    },
    "app_home": {
      "home_tab_enabled": true,
      "messages_tab_enabled": true,
      "messages_tab_read_only_enabled": false
    }
  },
  "oauth_config": {
    "scopes": {
      "bot": [
        "app_mentions:read",
        "assistant:write",
        "channels:history",
        "channels:read",
        "chat:write",
        "commands",
        "emoji:read",
        "files:read",
        "files:write",
        "groups:history",
        "groups:read",
        "im:history",
        "im:read",
        "im:write",
        "mpim:history",
        "mpim:read",
        "mpim:write",
        "pins:read",
        "pins:write",
        "usergroups:read",
        "users:read"
      ]
    }
  },
  "settings": {
    "socket_mode_enabled": true,
    "event_subscriptions": {
      "bot_events": [
        "app_home_opened",
        "app_mention",
        "channel_rename",
        "member_joined_channel",
        "member_left_channel",
        "message.channels",
        "message.groups",
        "message.im",
        "message.mpim",
        "pin_added",
        "pin_removed"
      ]
    }
  }
}
Nachdem Slack die App erstellt hat, führen Sie auf ihrer Einstellungsseite zwei Schritte aus:
  • Install to Workspace → kopieren Sie den Bot User OAuth Token → daraus wird sutBotToken.
  • Basic Information → App-Level Tokens → Generate Token and Scopes → fügen Sie den Scope connections:write hinzu → speichern → kopieren Sie den Wert xapp-... → daraus wird sutAppToken.
Verifizieren Sie, dass die zwei Bots unterschiedliche Benutzer-IDs haben, indem Sie auth.test mit jedem Token aufrufen. Die Laufzeit unterscheidet Driver und SUT anhand der Benutzer-ID; die Wiederverwendung einer App für beide lässt Mention-Gating sofort fehlschlagen. 3. Kanal erstellen Erstellen Sie im QA-Workspace einen Kanal (z. B. #openclaw-qa) und laden Sie beide Bots aus dem Kanal heraus ein:
/invite @OpenClaw QA Driver
/invite @OpenClaw QA SUT
Kopieren Sie die Cxxxxxxxxxx-ID aus channel info → About → Channel ID - daraus wird channelId. Ein öffentlicher Kanal funktioniert; wenn Sie einen privaten Kanal verwenden, haben beide Apps bereits groups:history, sodass die History-Lesevorgänge des Harness weiterhin erfolgreich sind. 4. Anmeldedaten registrieren Es gibt zwei Optionen. Verwenden Sie Umgebungsvariablen für das Debugging auf einer einzelnen Maschine (setzen Sie die vier Variablen OPENCLAW_QA_SLACK_* und übergeben Sie --credential-source env), oder befüllen Sie den gemeinsamen Convex-Pool, damit CI und andere Maintainer sie leasen können. Schreiben Sie für den Convex-Pool die vier Felder in eine JSON-Datei:
{
  "channelId": "Cxxxxxxxxxx",
  "driverBotToken": "xoxb-...",
  "sutBotToken": "xoxb-...",
  "sutAppToken": "xapp-..."
}
Exportieren Sie OPENCLAW_QA_CONVEX_SITE_URL und OPENCLAW_QA_CONVEX_SECRET_MAINTAINER in Ihrer Shell, registrieren und verifizieren Sie dann:
pnpm openclaw qa credentials add \
  --kind slack \
  --payload-file slack-creds.json \
  --note "QA Slack pool seed"

pnpm openclaw qa credentials list --kind slack --status all --json
Erwarten Sie count: 1, status: "active" und kein Feld lease. 5. End-to-End verifizieren Führen Sie die Lane lokal aus, um zu bestätigen, dass beide Bots über den Broker miteinander kommunizieren können:
pnpm openclaw qa slack \
  --credential-source convex \
  --credential-role maintainer \
  --output-dir .artifacts/qa-e2e/slack-local
Ein erfolgreicher Lauf wird in deutlich unter 30 Sekunden abgeschlossen, und slack-qa-report.md zeigt sowohl slack-canary als auch slack-mention-gating mit Status pass. Wenn die Lane etwa 90 Sekunden hängt und mit Convex credential pool exhausted for kind "slack" beendet wird, ist entweder der Pool leer oder jede Zeile ist geleast - qa credentials list --kind slack --status all --json zeigt Ihnen, was zutrifft.

Convex-Anmeldedatenpool

Telegram-, Discord-, Slack- und WhatsApp-Lanes können Anmeldedaten aus einem gemeinsamen Convex-Pool leasen, statt die oben genannten Umgebungsvariablen zu lesen. Übergeben Sie --credential-source convex (oder setzen Sie OPENCLAW_QA_CREDENTIAL_SOURCE=convex); QA Lab erwirbt eine exklusive Lease, sendet dafür während des Laufs Heartbeats und gibt sie beim Herunterfahren frei. Pool-Arten sind "telegram", "discord", "slack" und "whatsapp". Payload-Formen, die der Broker bei admin/add validiert:
  • Telegram (kind: "telegram"): { groupId: string, driverToken: string, sutToken: string } - groupId muss eine numerische Chat-ID-Zeichenfolge sein.
  • Echter Telegram-Benutzer (kind: "telegram-user"): { groupId: string, sutToken: string, testerUserId: string, testerUsername: string, telegramApiId: string, telegramApiHash: string, tdlibDatabaseEncryptionKey: string, tdlibArchiveBase64: string, tdlibArchiveSha256: string, desktopTdataArchiveBase64: string, desktopTdataArchiveSha256: string } - eine exklusive Burner-Account-Lease, die sowohl vom TDLib-CLI-Driver als auch vom visuellen Telegram-Desktop-Zeugen verwendet wird.
  • Discord (kind: "discord"): { guildId: string, channelId: string, driverBotToken: string, sutBotToken: string, sutApplicationId: string }.
  • WhatsApp (kind: "whatsapp"): { driverPhoneE164: string, sutPhoneE164: string, driverAuthArchiveBase64: string, sutAuthArchiveBase64: string, groupJid?: string } - Telefonnummern müssen unterschiedliche E.164-Zeichenfolgen sein.
Für visuellen Telegram-Nachweis mit echtem Benutzer bevorzugen Sie eine gehaltene Crabbox-Sitzung:
pnpm qa:telegram-user:crabbox -- start --tdlib-url http://artifacts.openclaw.ai/tdlib-v1.8.0-linux-x64.tgz --output-dir .artifacts/qa-e2e/telegram-user-crabbox/pr-review
pnpm qa:telegram-user:crabbox -- send --session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json --text /status
pnpm qa:telegram-user:crabbox -- finish --session .artifacts/qa-e2e/telegram-user-crabbox/pr-review/session.json
start hält eine exklusive Convex-telegram-user-Lease sowohl für den TDLib-CLI-Driver als auch für den Telegram-Desktop-Zeugen, startet die Desktop-Aufzeichnung und lässt die Crabbox für beliebige agentengesteuerte Repro-Schritte aktiv. Agents können send, run, screenshot und status verwenden, bis sie zufrieden sind, danach sammelt finish den Screenshot, das Video, das bewegungsbeschnittene Video/GIF, TDLib-Probe-Ausgaben und Logs, bevor die Anmeldedaten freigegeben werden. publish --session <file> --pr <number> kommentiert standardmäßig nur das Bewegungs-GIF; --full-artifacts ist das explizite Opt-in für Logs und JSON-Ausgabe. Der Standardbefehl probe bleibt eine Ein-Befehl-Kurzform für schnelle /status-Smoke-Checks. Verwenden Sie --mock-response-file <path>, wenn ein PR einen deterministischen visuellen Diff benötigt: Dieselbe Mock-Modellantwort kann auf main und auf dem PR-Head ausgeführt werden, während sich der Telegram-Formatter oder die Zustellschicht ändert. Die Capture-Standardwerte sind auf PR- Kommentare abgestimmt: Standard-Crabbox-Klasse, Desktop-Aufzeichnung mit 24 fps, Bewegungs-GIF mit 24 fps und 1920 px Vorschau-Breite. Vorher-/Nachher-Kommentare sollten ein sauberes Bundle veröffentlichen, das nur die vorgesehenen GIFs enthält. Slack-Lanes können ebenfalls den Pool verwenden. Slack-Payload-Formprüfungen liegen derzeit im Slack-QA-Runner statt im Broker; verwenden Sie { channelId: string, driverBotToken: string, sutBotToken: string, sutAppToken: string }, mit einer Slack-Kanal-ID wie Cxxxxxxxxxx. Siehe Slack-Workspace einrichten für App- und Scope-Bereitstellung. Operative Env Vars und der Convex-Broker-Endpunktvertrag befinden sich in Testing → Gemeinsam genutzte Telegram-Zugangsdaten über Convex (der Abschnittsname stammt aus der Zeit vor dem Multi-Channel-Pool; die Lease-Semantik wird über alle Arten hinweg geteilt).

Repo-gestützte Seeds

Seed-Assets befinden sich in qa/:
  • qa/scenarios/index.md
  • qa/scenarios/<theme>/*.md
Diese liegen absichtlich in Git, damit der QA-Plan sowohl für Menschen als auch für den Agent sichtbar ist. qa-lab sollte ein generischer Markdown-Runner bleiben. Jede Szenario-Markdown-Datei ist die Source of Truth für einen Testlauf und sollte Folgendes definieren:
  • Szenario-Metadaten
  • optionale Kategorie-, Capability-, Lane- und Risiko-Metadaten
  • Dokumentations- und Code-Referenzen
  • optionale Plugin-Anforderungen
  • optionaler Gateway-Konfigurations-Patch
  • der ausführbare qa-flow
Die wiederverwendbare Laufzeitoberfläche, die qa-flow unterstützt, darf generisch und querschnittlich bleiben. Markdown-Szenarien können zum Beispiel transportseitige Helper mit browserseitigen Helpern kombinieren, die die eingebettete Control UI über den Gateway-browser.request-Seam steuern, ohne einen Sonderfall-Runner hinzuzufügen. Szenariodateien sollten nach Produkt-Capability statt nach Source-Tree-Ordner gruppiert werden. Halten Sie Szenario-IDs stabil, wenn Dateien verschoben werden; verwenden Sie docsRefs und codeRefs für Implementierungs-Nachverfolgbarkeit. Die Baseline-Liste sollte breit genug bleiben, um Folgendes abzudecken:
  • DM- und Kanal-Chat
  • Thread-Verhalten
  • Lebenszyklus von Nachrichtenaktionen
  • Cron-Callbacks
  • Memory-Recall
  • Modellwechsel
  • Subagent-Handoff
  • Repo-Lesen und Dokumentations-Lesen
  • eine kleine Build-Aufgabe wie Lobster Invaders

Provider-Mock-Lanes

qa suite hat zwei lokale Provider-Mock-Lanes:
  • mock-openai ist der szenariobewusste OpenClaw-Mock. Er bleibt die standardmäßige deterministische Mock-Lane für repo-gestützte QA und Paritäts-Gates.
  • aimock startet einen AIMock-gestützten Provider-Server für experimentelle Protokoll-, Fixture-, Record/Replay- und Chaos-Abdeckung. Er ist additiv und ersetzt den mock-openai-Szenario-Dispatcher nicht.
Die Provider-Lane-Implementierung befindet sich unter extensions/qa-lab/src/providers/. Jeder Provider besitzt seine Standardwerte, den Start des lokalen Servers, die Gateway-Modellkonfiguration, Staging-Anforderungen für Auth-Profile und Live-/Mock-Capability-Flags. Gemeinsamer Suite- und Gateway-Code sollte über die Provider-Registry routen, statt nach Provider-Namen zu verzweigen.

Transportadapter

qa-lab besitzt einen generischen Transport-Seam für Markdown-QA-Szenarien. qa-channel ist der erste Adapter an diesem Seam, aber das Designziel ist breiter: Zukünftige reale oder synthetische Kanäle sollten sich in denselben Suite-Runner einklinken, statt einen transportspezifischen QA-Runner hinzuzufügen. Auf Architekturebene sieht die Aufteilung so aus:
  • qa-lab besitzt generische Szenarioausführung, Worker-Parallelität, Artefakt-Schreiben und Reporting.
  • Der Transportadapter besitzt Gateway-Konfiguration, Bereitschaft, eingehende und ausgehende Beobachtung, Transportaktionen und normalisierten Transportzustand.
  • Markdown-Szenariodateien unter qa/scenarios/ definieren den Testlauf; qa-lab stellt die wiederverwendbare Laufzeitoberfläche bereit, die sie ausführt.

Einen Kanal hinzufügen

Das Hinzufügen eines Kanals zum Markdown-QA-System erfordert genau zwei Dinge:
  1. Einen Transportadapter für den Kanal.
  2. Ein Szenariopaket, das den Kanalvertrag ausübt.
Fügen Sie keinen neuen Top-Level-QA-Command-Root hinzu, wenn der gemeinsame qa-lab-Host den Flow besitzen kann. qa-lab besitzt die gemeinsamen Host-Mechaniken:
  • den openclaw qa-Command-Root
  • Suite-Start und -Teardown
  • Worker-Parallelität
  • Artefakt-Schreiben
  • Berichtserzeugung
  • Szenarioausführung
  • Kompatibilitätsaliase für ältere qa-channel-Szenarien
Runner-Plugins besitzen den Transportvertrag:
  • wie openclaw qa <runner> unterhalb des gemeinsamen qa-Root gemountet wird
  • wie das Gateway für diesen Transport konfiguriert wird
  • wie Bereitschaft geprüft wird
  • wie eingehende Ereignisse injiziert werden
  • wie ausgehende Nachrichten beobachtet werden
  • wie Transkripte und normalisierter Transportzustand bereitgestellt werden
  • wie transportgestützte Aktionen ausgeführt werden
  • wie transportspezifisches Zurücksetzen oder Bereinigen behandelt wird
Die Mindestanforderungen für die Einführung eines neuen Kanals:
  1. Behalten Sie qa-lab als Eigentümer des gemeinsamen qa-Root bei.
  2. Implementieren Sie den Transport-Runner am gemeinsamen qa-lab-Host-Seam.
  3. Halten Sie transportspezifische Mechaniken innerhalb des Runner-Plugins oder Kanal-Harness.
  4. Mounten Sie den Runner als openclaw qa <runner>, statt einen konkurrierenden Root-Command zu registrieren. Runner-Plugins sollten qaRunners in openclaw.plugin.json deklarieren und ein passendes qaRunnerCliRegistrations-Array aus runtime-api.ts exportieren. Halten Sie runtime-api.ts schlank; lazy CLI- und Runner-Ausführung sollten hinter separaten Entry Points bleiben.
  5. Erstellen oder adaptieren Sie Markdown-Szenarien unter den thematischen qa/scenarios/-Verzeichnissen.
  6. Verwenden Sie die generischen Szenario-Helper für neue Szenarien.
  7. Halten Sie bestehende Kompatibilitätsaliase funktionsfähig, sofern das Repo keine absichtliche Migration durchführt.
Die Entscheidungsregel ist strikt:
  • Wenn Verhalten einmal in qa-lab ausgedrückt werden kann, legen Sie es in qa-lab ab.
  • Wenn Verhalten von einem Kanaltransport abhängt, behalten Sie es in diesem Runner-Plugin oder Plugin-Harness.
  • Wenn ein Szenario eine neue Capability benötigt, die mehr als ein Kanal verwenden kann, fügen Sie einen generischen Helper hinzu statt einer kanalspezifischen Verzweigung in suite.ts.
  • Wenn ein Verhalten nur für einen Transport sinnvoll ist, halten Sie das Szenario transportspezifisch und machen Sie dies im Szenariovertrag explizit.

Namen von Szenario-Helpern

Bevorzugte generische Helper für neue Szenarien:
  • waitForTransportReady
  • waitForChannelReady
  • injectInboundMessage
  • injectOutboundMessage
  • waitForTransportOutboundMessage
  • waitForChannelOutboundMessage
  • waitForNoTransportOutbound
  • getTransportSnapshot
  • readTransportMessage
  • readTransportTranscript
  • formatTransportTranscript
  • resetTransport
Kompatibilitätsaliase bleiben für bestehende Szenarien verfügbar - waitForQaChannelReady, waitForOutboundMessage, waitForNoOutbound, formatConversationTranscript, resetBus -, aber neue Szenarioerstellung sollte die generischen Namen verwenden. Die Aliase existieren, um eine Flag-Day-Migration zu vermeiden, nicht als künftiges Modell.

Reporting

qa-lab exportiert einen Markdown-Protokollbericht aus der beobachteten Bus-Timeline. Der Bericht sollte beantworten:
  • Was funktioniert hat
  • Was fehlgeschlagen ist
  • Was blockiert geblieben ist
  • Welche Folgeszenarien sich lohnen
Für das Inventar verfügbarer Szenarien - nützlich beim Abschätzen von Folgearbeit oder beim Verdrahten eines neuen Transports - führen Sie pnpm openclaw qa coverage aus (fügen Sie --json für maschinenlesbare Ausgabe hinzu). Für Zeichen- und Stilprüfungen führen Sie dasselbe Szenario über mehrere Live-Modell- Refs aus und schreiben einen bewerteten Markdown-Bericht:
pnpm openclaw qa character-eval \
  --model openai/gpt-5.5,thinking=medium,fast \
  --model openai/gpt-5.2,thinking=xhigh \
  --model openai/gpt-5,thinking=xhigh \
  --model anthropic/claude-opus-4-6,thinking=high \
  --model anthropic/claude-sonnet-4-6,thinking=high \
  --model zai/glm-5.1,thinking=high \
  --model moonshot/kimi-k2.5,thinking=high \
  --model google/gemini-3.1-pro-preview,thinking=high \
  --judge-model openai/gpt-5.5,thinking=xhigh,fast \
  --judge-model anthropic/claude-opus-4-6,thinking=high \
  --blind-judge-models \
  --concurrency 16 \
  --judge-concurrency 16
Der Befehl führt lokale QA-Gateway-Kindprozesse aus, nicht Docker. Character-Eval- Szenarien sollten die Persona über SOUL.md festlegen und dann normale Benutzer-Turns wie Chat, Workspace-Hilfe und kleine Datei-Aufgaben ausführen. Dem Kandidatenmodell sollte nicht mitgeteilt werden, dass es evaluiert wird. Der Befehl bewahrt jedes vollständige Transkript auf, zeichnet grundlegende Laufstatistiken auf und bittet dann die Judge-Modelle im Fast Mode mit xhigh-Reasoning, wo unterstützt, die Läufe nach Natürlichkeit, Vibe und Humor zu ranken. Verwenden Sie --blind-judge-models, wenn Sie Provider vergleichen: Der Judge-Prompt erhält weiterhin jedes Transkript und jeden Laufstatus, aber Kandidaten-Refs werden durch neutrale Labels wie candidate-01 ersetzt; der Bericht ordnet Rankings nach dem Parsing wieder echten Refs zu. Kandidatenläufe verwenden standardmäßig high Thinking, mit medium für GPT-5.5 und xhigh für ältere OpenAI-Eval-Refs, die es unterstützen. Überschreiben Sie einen bestimmten Kandidaten inline mit --model provider/model,thinking=<level>. --thinking <level> setzt weiterhin einen globalen Fallback, und die ältere Form --model-thinking <provider/model=level> wird aus Kompatibilitätsgründen beibehalten. OpenAI-Kandidaten-Refs verwenden standardmäßig Fast Mode, damit Priority Processing dort genutzt wird, wo der Provider es unterstützt. Fügen Sie inline ,fast, ,no-fast oder ,fast=false hinzu, wenn ein einzelner Kandidat oder Judge eine Überschreibung benötigt. Übergeben Sie --fast nur, wenn Sie Fast Mode für jedes Kandidatenmodell erzwingen möchten. Kandidaten- und Judge-Dauern werden für Benchmark-Analysen im Bericht aufgezeichnet, aber Judge-Prompts sagen ausdrücklich, nicht nach Geschwindigkeit zu ranken. Kandidaten- und Judge-Modellläufe verwenden beide standardmäßig Parallelität 16. Senken Sie --concurrency oder --judge-concurrency, wenn Provider-Limits oder lokaler Gateway- Druck einen Lauf zu verrauscht machen. Wenn kein Kandidaten---model übergeben wird, verwendet Character Eval standardmäßig openai/gpt-5.5, openai/gpt-5.2, openai/gpt-5, anthropic/claude-opus-4-6, anthropic/claude-sonnet-4-6, zai/glm-5.1, moonshot/kimi-k2.5 und google/gemini-3.1-pro-preview, wenn kein --model übergeben wird. Wenn kein --judge-model übergeben wird, verwenden die Judges standardmäßig openai/gpt-5.5,thinking=xhigh,fast und anthropic/claude-opus-4-6,thinking=high.

Zugehörige Dokumentation