chore(i18n): refresh de translations

This commit is contained in:
openclaw-docs-i18n[bot] 2026-05-04 09:39:44 +00:00
parent 8777dca9ba
commit 20d10b5774
9 changed files with 966 additions and 934 deletions

View File

@ -1,43 +1,43 @@
---
read_when:
- DM-Zugriffskontrolle einrichten
- Einen neuen iOS-/Android-Node koppeln
- Koppeln eines neuen iOS-/Android-Node
- Überprüfung der Sicherheitslage von OpenClaw
summary: 'Kopplungsübersicht: Genehmigen Sie, wer Ihnen Direktnachrichten senden darf + welche Nodes beitreten dürfen'
summary: 'Pairing-Übersicht: Genehmigen Sie, wer Ihnen Direktnachrichten senden darf + welche Nodes beitreten dürfen'
title: Kopplung
x-i18n:
generated_at: "2026-05-04T02:21:38Z"
generated_at: "2026-05-04T09:37:07Z"
model: gpt-5.5
provider: openai
source_hash: 4fb27840f7c9ef55e7270cc29f813e6db90b240aa2180f30952eb9485f0f8874
source_hash: f2bce4cfba7708b0003f2ffeacada8bc1849cc301f28178b499a9a67bddcf36d
source_path: channels/pairing.md
workflow: 16
---
Pairing“ ist der ausdrückliche Schritt zur Zugriffsfreigabe in OpenClaw.
Es wird an zwei Stellen verwendet:
Kopplung“ ist der explizite Schritt zur Zugriffsfreigabe in OpenClaw.
Sie wird an zwei Stellen verwendet:
1. **DM-Pairing** (wer mit dem Bot sprechen darf)
2. **Node-Pairing** (welche Geräte/Nodes dem Gateway-Netzwerk beitreten dürfen)
1. **DM-Kopplung** (wer mit dem Bot sprechen darf)
2. **Node-Kopplung** (welche Geräte/Nodes dem Gateway-Netzwerk beitreten dürfen)
Sicherheitskontext: [Sicherheit](/de/gateway/security)
## 1) DM-Pairing (eingehender Chat-Zugriff)
## 1) DM-Kopplung (eingehender Chat-Zugriff)
Wenn ein Kanal mit der DM-Richtlinie `pairing` konfiguriert ist, erhalten unbekannte Absender einen kurzen Code, und ihre Nachricht wird **nicht verarbeitet**, bis Sie sie genehmigen.
Wenn ein Kanal mit der DM-Richtlinie `pairing` konfiguriert ist, erhalten unbekannte Absender einen kurzen Code und ihre Nachricht wird **nicht verarbeitet**, bis Sie sie genehmigen.
Die Standard-DM-Richtlinien sind dokumentiert unter: [Sicherheit](/de/gateway/security)
Standard-DM-Richtlinien sind hier dokumentiert: [Sicherheit](/de/gateway/security)
`dmPolicy: "open"` ist nur dann öffentlich, wenn die effektive DM-Allowlist `"*"` enthält.
Einrichtung und Validierung erfordern diesen Platzhalter für öffentlich offene Konfigurationen. Wenn ein vorhandener
`dmPolicy: "open"` ist nur dann öffentlich, wenn die wirksame DM-Zulassungsliste `"*"` enthält.
Einrichtung und Validierung erfordern diesen Platzhalter für öffentlich offene Konfigurationen. Wenn der vorhandene
Zustand `open` mit konkreten `allowFrom`-Einträgen enthält, lässt die Laufzeit weiterhin
nur diese Absender zu, und Genehmigungen im Pairing-Speicher erweitern den Zugriff für `open` nicht.
nur diese Absender zu, und Genehmigungen aus dem Kopplungsspeicher erweitern den `open`-Zugriff nicht.
Pairing-Codes:
Kopplungscodes:
- 8 Zeichen, Großbuchstaben, keine mehrdeutigen Zeichen (`0O1I`).
- **Laufen nach 1 Stunde ab**. Der Bot sendet die Pairing-Nachricht nur, wenn eine neue Anfrage erstellt wird (ungefähr einmal pro Stunde und Absender).
- Ausstehende DM-Pairing-Anfragen sind standardmäßig auf **3 pro Kanal** begrenzt; zusätzliche Anfragen werden ignoriert, bis eine abläuft oder genehmigt wird.
- **Laufen nach 1 Stunde ab**. Der Bot sendet die Kopplungsnachricht nur, wenn eine neue Anfrage erstellt wird (ungefähr einmal pro Stunde und Absender).
- Ausstehende DM-Kopplungsanfragen sind standardmäßig auf **3 pro Kanal** begrenzt; zusätzliche Anfragen werden ignoriert, bis eine abläuft oder genehmigt wird.
### Einen Absender genehmigen
@ -46,21 +46,21 @@ openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
```
Wenn noch kein Befehls-Owner konfiguriert ist, initialisiert das Genehmigen eines DM-Pairing-Codes auch
Wenn noch kein Befehls-Owner konfiguriert ist, initialisiert das Genehmigen eines DM-Kopplungscodes außerdem
`commands.ownerAllowFrom` mit dem genehmigten Absender, zum Beispiel `telegram:123456789`.
Dadurch erhalten erstmalige Einrichtungen einen expliziten Owner für privilegierte Befehle und
Genehmigungsaufforderungen für Ausführungen. Nachdem ein Owner vorhanden ist, gewähren spätere Pairing-Genehmigungen nur DM-
Dadurch erhalten erstmalige Einrichtungen einen expliziten Owner für privilegierte Befehle und Ausführungs-
Genehmigungsaufforderungen. Nachdem ein Owner existiert, gewähren spätere Kopplungsgenehmigungen nur DM-
Zugriff; sie fügen keine weiteren Owner hinzu.
Unterstützte Kanäle: `bluebubbles`, `discord`, `feishu`, `googlechat`, `imessage`, `irc`, `line`, `matrix`, `mattermost`, `msteams`, `nextcloud-talk`, `nostr`, `openclaw-weixin`, `signal`, `slack`, `synology-chat`, `telegram`, `twitch`, `whatsapp`, `zalo`, `zalouser`.
### Wiederverwendbare Absendergruppen
Verwenden Sie `accessGroups` auf oberster Ebene, wenn dieselbe vertrauenswürdige Absendermenge für
mehrere Nachrichtenkanäle oder sowohl für DM- als auch für Gruppen-Allowlists gelten soll.
Verwenden Sie `accessGroups` auf oberster Ebene, wenn dieselbe vertrauenswürdige Absendermenge auf
mehrere Nachrichtenkanäle oder sowohl auf DM- als auch auf Gruppenzulassungslisten angewendet werden soll.
Statische Gruppen verwenden `type: "message.senders"` und werden mit
`accessGroup:<name>` aus Kanal-Allowlists referenziert:
`accessGroup:<name>` aus Kanal-Zulassungslisten referenziert:
```json5
{
@ -83,64 +83,71 @@ Statische Gruppen verwenden `type: "message.senders"` und werden mit
Zugriffsgruppen sind hier ausführlich dokumentiert: [Zugriffsgruppen](/de/channels/access-groups)
### Wo der Zustand gespeichert wird
### Speicherort des Zustands
Gespeichert unter `~/.openclaw/credentials/`:
- Ausstehende Anfragen: `<channel>-pairing.json`
- Genehmigter Allowlist-Speicher:
- Genehmigter Zulassungslistenspeicher:
- Standardkonto: `<channel>-allowFrom.json`
- Nicht standardmäßiges Konto: `<channel>-<accountId>-allowFrom.json`
- Nicht-Standardkonto: `<channel>-<accountId>-allowFrom.json`
Verhalten bei Kontenabgrenzung:
Verhalten der Kontoeingrenzung:
- Nicht standardmäßige Konten lesen/schreiben nur ihre abgegrenzte Allowlist-Datei.
- Das Standardkonto verwendet die kanalbezogene, nicht abgegrenzte Allowlist-Datei.
- Nicht-Standardkonten lesen/schreiben nur ihre eingegrenzte Zulassungslistendatei.
- Das Standardkonto verwendet die kanalbezogene, nicht eingegrenzte Zulassungslistendatei.
Behandeln Sie diese Daten als vertraulich (sie kontrollieren den Zugriff auf Ihren Assistenten).
Behandeln Sie diese Daten als vertraulich (sie steuern den Zugriff auf Ihren Assistenten).
<Note>
Der Pairing-Allowlist-Speicher ist für DM-Zugriff vorgesehen. Gruppenautorisierung ist separat.
Das Genehmigen eines DM-Pairing-Codes erlaubt diesem Absender nicht automatisch, Gruppen-
befehle auszuführen oder den Bot in Gruppen zu steuern. Die Initialisierung des ersten Owners ist ein separater Konfigurations-
Der Kopplungs-Zulassungslistenspeicher ist für DM-Zugriff bestimmt. Gruppenautorisierung ist separat.
Das Genehmigen eines DM-Kopplungscodes erlaubt diesem Absender nicht automatisch, Gruppen-
Befehle auszuführen oder den Bot in Gruppen zu steuern. Die Initialisierung des ersten Owners ist ein separater Konfigurations-
zustand in `commands.ownerAllowFrom`, und die Zustellung in Gruppenchats folgt weiterhin den
Gruppen-Allowlists des Kanals (zum Beispiel `groupAllowFrom`, `groups` oder gruppenbezogenen
oder themenbezogenen Überschreibungen, je nach Kanal).
Gruppen-Zulassungslisten des Kanals (zum Beispiel `groupAllowFrom`, `groups` oder kanalabhängigen
Überschreibungen pro Gruppe oder Thema).
</Note>
## 2) Node-Geräte-Pairing (iOS/Android/macOS/headless Nodes)
## 2) Node-Gerätekopplung (iOS/Android/macOS/headless Nodes)
Nodes verbinden sich mit dem Gateway als **Geräte** mit `role: node`. Das Gateway
erstellt eine Geräte-Pairing-Anfrage, die genehmigt werden muss.
erstellt eine Gerätekopplungsanfrage, die genehmigt werden muss.
### Pairing über Telegram (für iOS empfohlen)
### Kopplung über Telegram (für iOS empfohlen)
Wenn Sie das `device-pair`-Plugin verwenden, können Sie das erstmalige Geräte-Pairing vollständig über Telegram durchführen:
Wenn Sie das `device-pair`-Plugin verwenden, können Sie die erstmalige Gerätekopplung vollständig über Telegram durchführen:
1. Senden Sie Ihrem Bot in Telegram: `/pair`
2. Der Bot antwortet mit zwei Nachrichten: einer Anleitungsnachricht und einer separaten Nachricht mit dem **Einrichtungscode** (in Telegram leicht zu kopieren/einzufügen).
1. Senden Sie Ihrem Bot in Telegram eine Nachricht: `/pair`
2. Der Bot antwortet mit zwei Nachrichten: einer Anweisungsnachricht und einer separaten Nachricht mit dem **Einrichtungscode** (in Telegram einfach zu kopieren/einzufügen).
3. Öffnen Sie auf Ihrem Telefon die OpenClaw-iOS-App → Einstellungen → Gateway.
4. Fügen Sie den Einrichtungscode ein und verbinden Sie sich.
4. Scannen Sie den QR-Code oder fügen Sie den Einrichtungscode ein und verbinden Sie sich.
5. Zurück in Telegram: `/pair pending` (Anfrage-IDs, Rolle und Scopes prüfen), dann genehmigen.
Der Einrichtungscode ist eine base64-codierte JSON-Nutzlast, die Folgendes enthält:
- `url`: die Gateway-WebSocket-URL (`ws://...` oder `wss://...`)
- `bootstrapToken`: ein kurzlebiges Bootstrap-Token für ein einzelnes Gerät, das für den ersten Pairing-Handshake verwendet wird
- `bootstrapToken`: ein kurzlebiges Bootstrap-Token für ein einzelnes Gerät, das für den initialen Kopplungs-Handshake verwendet wird
Dieses Bootstrap-Token enthält das integrierte Pairing-Bootstrap-Profil:
Dieses Bootstrap-Token trägt das integrierte Bootstrap-Profil für die Kopplung:
- das primär übergebene `node`-Token bleibt bei `scopes: []`
- jedes übergebene `operator`-Token bleibt auf die Bootstrap-Allowlist begrenzt:
- jedes übergebene `operator`-Token bleibt auf die Bootstrap-Zulassungsliste begrenzt:
`operator.approvals`, `operator.read`, `operator.talk.secrets`, `operator.write`
- Bootstrap-Scope-Prüfungen sind rollenpräfixiert und kein einzelner flacher Scope-Pool:
- Bootstrap-Scope-Prüfungen sind rollenpräfixiert, nicht ein einzelner flacher Scope-Pool:
Operator-Scope-Einträge erfüllen nur Operator-Anfragen, und Nicht-Operator-Rollen
müssen Scopes weiterhin unter ihrem eigenen Rollenpräfix anfordern
- spätere Token-Rotation/-Sperrung bleibt sowohl durch den genehmigten Rollenvertrag des Geräts
als auch durch die Operator-Scopes der aufrufenden Sitzung begrenzt
müssen weiterhin Scopes unter ihrem eigenen Rollenpräfix anfordern
- spätere Token-Rotation/-Widerruf bleibt sowohl durch den genehmigten
Rollenvertrag des Geräts als auch durch die Operator-Scopes der aufrufenden Sitzung begrenzt
Behandeln Sie den Einrichtungscode wie ein Passwort, solange er gültig ist.
Für Tailscale, öffentliche oder andere mobile Kopplung außerhalb von local loopback verwenden Sie Tailscale
Serve/Funnel oder eine andere `wss://`-Gateway-URL. Direkte `ws://`-Einrichtungs-
URLs außerhalb von local loopback werden vor der QR-/Einrichtungscode-Ausgabe abgelehnt. Klartext-`ws://`-Einrichtungscodes
sind auf local loopback-URLs beschränkt; `ws://`-Clients in privaten Netzwerken erfordern weiterhin die ausdrückliche
`OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1`-Notfallfreigabe, die im Remote-
Gateway-Leitfaden beschrieben ist.
### Ein Node-Gerät genehmigen
```bash
@ -149,10 +156,10 @@ openclaw devices approve <requestId>
openclaw devices reject <requestId>
```
Wenn eine ausdrückliche Genehmigung verweigert wird, weil die genehmigende Sitzung des gepaarten Geräts
mit Pairing-only-Scope geöffnet wurde, versucht die CLI dieselbe Anfrage erneut mit
`operator.admin`. Dadurch kann ein vorhandenes adminfähiges gepaartes Gerät ein neues
Control-UI-/Browser-Pairing wiederherstellen, ohne `devices/paired.json` manuell zu bearbeiten. Das
Wenn eine explizite Genehmigung verweigert wird, weil die genehmigende Sitzung eines gekoppelten Geräts
nur mit Kopplungs-Scope geöffnet wurde, wiederholt die CLI dieselbe Anfrage mit
`operator.admin`. Dadurch kann ein vorhandenes, adminfähiges gekoppeltes Gerät eine neue
Control-UI-/Browser-Kopplung wiederherstellen, ohne `devices/paired.json` manuell zu bearbeiten. Das
Gateway validiert die erneut versuchte Verbindung weiterhin; Tokens, die sich nicht
mit `operator.admin` authentifizieren können, bleiben blockiert.
@ -161,13 +168,13 @@ Rolle/Scopes/öffentlicher Schlüssel), wird die vorherige ausstehende Anfrage e
`requestId` erstellt.
<Note>
Ein bereits gepaartes Gerät erhält nicht stillschweigend breiteren Zugriff. Wenn es sich erneut verbindet und mehr Scopes oder eine breitere Rolle anfordert, lässt OpenClaw die vorhandene Genehmigung unverändert und erstellt eine neue ausstehende Upgrade-Anfrage. Verwenden Sie `openclaw devices list`, um den aktuell genehmigten Zugriff mit dem neu angeforderten Zugriff zu vergleichen, bevor Sie genehmigen.
Ein bereits gekoppeltes Gerät erhält nicht stillschweigend umfassenderen Zugriff. Wenn es erneut verbindet und mehr Scopes oder eine umfassendere Rolle anfordert, behält OpenClaw die vorhandene Genehmigung unverändert bei und erstellt eine neue ausstehende Upgrade-Anfrage. Verwenden Sie `openclaw devices list`, um den aktuell genehmigten Zugriff mit dem neu angeforderten Zugriff zu vergleichen, bevor Sie genehmigen.
</Note>
### Optionales automatisches Genehmigen von Nodes über vertrauenswürdige CIDRs
### Optionale automatische Genehmigung von Nodes für vertrauenswürdige CIDRs
Geräte-Pairing bleibt standardmäßig manuell. Für streng kontrollierte Node-Netzwerke
können Sie die automatische erstmalige Node-Genehmigung mit expliziten CIDRs oder exakten IPs aktivieren:
Gerätekopplung bleibt standardmäßig manuell. Für streng kontrollierte Node-Netzwerke
können Sie die automatische Erstgenehmigung von Nodes mit expliziten CIDRs oder genauen IPs aktivieren:
```json5
{
@ -181,35 +188,35 @@ können Sie die automatische erstmalige Node-Genehmigung mit expliziten CIDRs od
}
```
Dies gilt nur für neue `role: node`-Pairing-Anfragen ohne angeforderte
Dies gilt nur für neue `role: node`-Kopplungsanfragen ohne angeforderte
Scopes. Operator-, Browser-, Control-UI- und WebChat-Clients erfordern weiterhin manuelle
Genehmigung. Rollen-, Scope-, Metadaten- und Public-Key-Änderungen erfordern weiterhin manuelle
Genehmigung. Änderungen an Rolle, Scope, Metadaten und öffentlichem Schlüssel erfordern weiterhin manuelle
Genehmigung.
### Speicherung des Node-Pairing-Zustands
### Zustandsspeicherung der Node-Kopplung
Gespeichert unter `~/.openclaw/devices/`:
- `pending.json` (kurzlebig; ausstehende Anfragen laufen ab)
- `paired.json` (gepaarte Geräte + Tokens)
- `paired.json` (gekoppelte Geräte + Tokens)
### Hinweise
- Die ältere `node.pair.*`-API (CLI: `openclaw nodes pending|approve|reject|remove|rename`) ist ein
separater, vom Gateway verwalteter Pairing-Speicher. WS-Nodes erfordern weiterhin Geräte-Pairing.
- Der Pairing-Datensatz ist die dauerhafte Quelle der Wahrheit für genehmigte Rollen. Aktive
Geräte-Tokens bleiben auf diese genehmigte Rollengruppe begrenzt; ein verirrter Token-Eintrag
außerhalb der genehmigten Rollen erzeugt keinen neuen Zugriff.
- Die alte `node.pair.*`-API (CLI: `openclaw nodes pending|approve|reject|remove|rename`) ist ein
separater Gateway-eigener Kopplungsspeicher. WS-Nodes erfordern weiterhin Gerätekopplung.
- Der Kopplungsdatensatz ist die dauerhafte Quelle der Wahrheit für genehmigte Rollen. Aktive
Gerätetokens bleiben auf diese genehmigte Rollenmenge begrenzt; ein verwaister Token-Eintrag
außerhalb der genehmigten Rollen erstellt keinen neuen Zugriff.
## Verwandte Dokumentation
## Zugehörige Dokumentation
- Sicherheitsmodell + Prompt-Injection: [Sicherheit](/de/gateway/security)
- Sicher aktualisieren (Doctor ausführen): [Aktualisieren](/de/install/updating)
- Sichere Aktualisierung (doctor ausführen): [Aktualisierung](/de/install/updating)
- Kanalkonfigurationen:
- Telegram: [Telegram](/de/channels/telegram)
- WhatsApp: [WhatsApp](/de/channels/whatsapp)
- Signal: [Signal](/de/channels/signal)
- BlueBubbles (iMessage): [BlueBubbles](/de/channels/bluebubbles)
- iMessage (Legacy): [iMessage](/de/channels/imessage)
- iMessage (alt): [iMessage](/de/channels/imessage)
- Discord: [Discord](/de/channels/discord)
- Slack: [Slack](/de/channels/slack)

View File

@ -1,42 +1,42 @@
---
read_when:
- Arbeiten an Telegram-Funktionen oder Webhooks
summary: Supportstatus, Funktionen und Konfiguration des Telegram-Bots
summary: Status, Funktionen und Konfiguration der Telegram-Bot-Unterstützung
title: Telegram
x-i18n:
generated_at: "2026-05-04T07:02:48Z"
generated_at: "2026-05-04T09:36:56Z"
model: gpt-5.5
provider: openai
source_hash: 6ef1b019a6a0e261b33972b5edffaedd29310b1333d112bade2e79e9d56887c6
source_hash: 5711d53cf908a14024bc5a94f7d590bb4bcb6963a1d78049d7782871f4eae932
source_path: channels/telegram.md
workflow: 16
---
Produktionsbereit für Bot-DMs und Gruppen über grammY. Long Polling ist der Standardmodus; Webhook-Modus ist optional.
Produktionsreif für Bot-Direktnachrichten und Gruppen über grammY. Long Polling ist der Standardmodus; Webhook-Modus ist optional.
<CardGroup cols={3}>
<Card title="Kopplung" icon="link" href="/de/channels/pairing">
Die Standard-DM-Richtlinie für Telegram ist Kopplung.
Die Standardrichtlinie für Telegram-Direktnachrichten ist Kopplung.
</Card>
<Card title="Kanal-Fehlerbehebung" icon="wrench" href="/de/channels/troubleshooting">
Kanalübergreifende Diagnosen und Reparatur-Playbooks.
</Card>
<Card title="Gateway-Konfiguration" icon="settings" href="/de/gateway/configuration">
Vollständige Kanalkonfigurationsmuster und Beispiele.
Vollständige Muster und Beispiele für die Kanalkonfiguration.
</Card>
</CardGroup>
## Schnelle Einrichtung
## Schnellkonfiguration
<Steps>
<Step title="Bot-Token in BotFather erstellen">
Öffnen Sie Telegram und chatten Sie mit **@BotFather** (bestätigen Sie, dass der Handle genau `@BotFather` lautet).
Öffnen Sie Telegram und chatten Sie mit **@BotFather** (bestätigen Sie, dass der Handle genau `@BotFather` ist).
Führen Sie `/newbot` aus, folgen Sie den Aufforderungen und speichern Sie das Token.
Führen Sie `/newbot` aus, folgen Sie den Eingabeaufforderungen und speichern Sie das Token.
</Step>
<Step title="Token und DM-Richtlinie konfigurieren">
<Step title="Token und Richtlinie für Direktnachrichten konfigurieren">
```json5
{
@ -52,11 +52,11 @@ Produktionsbereit für Bot-DMs und Gruppen über grammY. Long Polling ist der St
```
Env-Fallback: `TELEGRAM_BOT_TOKEN=...` (nur Standardkonto).
Telegram verwendet **nicht** `openclaw channels login telegram`; konfigurieren Sie das Token in config/env und starten Sie dann das Gateway.
Telegram verwendet **nicht** `openclaw channels login telegram`; konfigurieren Sie das Token in der Konfiguration/Env und starten Sie dann den Gateway.
</Step>
<Step title="Gateway starten und erste DM genehmigen">
<Step title="Gateway starten und erste Direktnachricht genehmigen">
```bash
openclaw gateway
@ -69,7 +69,7 @@ openclaw pairing approve telegram <CODE>
</Step>
<Step title="Bot zu einer Gruppe hinzufügen">
Fügen Sie den Bot zu Ihrer Gruppe hinzu und legen Sie dann `channels.telegram.groups` und `groupPolicy` passend zu Ihrem Zugriffsmodell fest.
Fügen Sie den Bot Ihrer Gruppe hinzu und legen Sie dann `channels.telegram.groups` und `groupPolicy` passend zu Ihrem Zugriffsmodell fest.
</Step>
</Steps>
@ -80,22 +80,22 @@ Die Reihenfolge der Token-Auflösung ist kontobewusst. In der Praxis haben Konfi
## Telegram-seitige Einstellungen
<AccordionGroup>
<Accordion title="Privatsphäremodus und Gruppensichtbarkeit">
Telegram-Bots verwenden standardmäßig den **Privatsphäremodus**, der einschränkt, welche Gruppennachrichten sie empfangen.
<Accordion title="Privatsphäre-Modus und Gruppensichtbarkeit">
Telegram-Bots verwenden standardmäßig den **Privatsphäre-Modus**, der begrenzt, welche Gruppennachrichten sie empfangen.
Wenn der Bot alle Gruppennachrichten sehen muss, entweder:
Wenn der Bot alle Gruppennachrichten sehen muss, können Sie entweder:
- deaktivieren Sie den Privatsphäremodus über `/setprivacy`, oder
- machen Sie den Bot zum Gruppenadministrator.
- den Privatsphäre-Modus über `/setprivacy` deaktivieren oder
- den Bot zum Gruppenadmin machen.
Wenn Sie den Privatsphäremodus umschalten, entfernen Sie den Bot aus jeder Gruppe und fügen Sie ihn erneut hinzu, damit Telegram die Änderung anwendet.
Wenn Sie den Privatsphäre-Modus umschalten, entfernen Sie den Bot in jeder Gruppe und fügen ihn erneut hinzu, damit Telegram die Änderung anwendet.
</Accordion>
<Accordion title="Gruppenberechtigungen">
Der Administratorstatus wird in den Telegram-Gruppeneinstellungen gesteuert.
Der Adminstatus wird in den Telegram-Gruppeneinstellungen gesteuert.
Administrator-Bots empfangen alle Gruppennachrichten, was für immer aktive Gruppenfunktionen nützlich ist.
Admin-Bots empfangen alle Gruppennachrichten, was für dauerhaft aktives Gruppenverhalten nützlich ist.
</Accordion>
@ -110,35 +110,35 @@ Die Reihenfolge der Token-Auflösung ist kontobewusst. In der Praxis haben Konfi
## Zugriffskontrolle und Aktivierung
<Tabs>
<Tab title="DM-Richtlinie">
`channels.telegram.dmPolicy` steuert den Direktnachrichtenzugriff:
<Tab title="Richtlinie für Direktnachrichten">
`channels.telegram.dmPolicy` steuert den Zugriff auf Direktnachrichten:
- `pairing` (Standard)
- `allowlist` (erfordert mindestens eine Absender-ID in `allowFrom`)
- `open` (erfordert, dass `allowFrom` `"*"` enthält)
- `disabled`
`dmPolicy: "open"` mit `allowFrom: ["*"]` erlaubt jedem Telegram-Konto, das den Bot-Benutzernamen findet oder errät, dem Bot Befehle zu geben. Verwenden Sie dies nur für bewusst öffentliche Bots mit stark eingeschränkten Tools; Bots mit einem einzelnen Owner sollten `allowlist` mit numerischen Benutzer-IDs verwenden.
`dmPolicy: "open"` mit `allowFrom: ["*"]` erlaubt jedem Telegram-Konto, das den Bot-Benutzernamen findet oder errät, dem Bot Befehle zu geben. Verwenden Sie dies nur für bewusst öffentliche Bots mit stark eingeschränkten Tools; Bots mit einem Besitzer sollten `allowlist` mit numerischen Benutzer-IDs verwenden.
`channels.telegram.allowFrom` akzeptiert numerische Telegram-Benutzer-IDs. Präfixe `telegram:` / `tg:` werden akzeptiert und normalisiert.
In Mehrkontokonfigurationen wird ein restriktives `channels.telegram.allowFrom` auf oberster Ebene als Sicherheitsgrenze behandelt: Kontospezifische `allowFrom: ["*"]`-Einträge machen dieses Konto nicht öffentlich, es sei denn, die effektive Allowlist des Kontos enthält nach dem Zusammenführen weiterhin einen expliziten Platzhalter.
`dmPolicy: "allowlist"` mit leerem `allowFrom` blockiert alle DMs und wird von der Konfigurationsvalidierung abgelehnt.
In Konfigurationen mit mehreren Konten wird ein restriktives `channels.telegram.allowFrom` auf oberster Ebene als Sicherheitsgrenze behandelt: Kontospezifische Einträge `allowFrom: ["*"]` machen dieses Konto nicht öffentlich, es sei denn, die effektive Allowlist des Kontos enthält nach dem Zusammenführen weiterhin einen expliziten Platzhalter.
`dmPolicy: "allowlist"` mit leerem `allowFrom` blockiert alle Direktnachrichten und wird von der Konfigurationsvalidierung abgelehnt.
Die Einrichtung fragt nur nach numerischen Benutzer-IDs.
Wenn Sie ein Upgrade durchgeführt haben und Ihre Konfiguration `@username`-Allowlist-Einträge enthält, führen Sie `openclaw doctor --fix` aus, um sie aufzulösen (nach bestem Bemühen; erfordert ein Telegram-Bot-Token).
Wenn Sie zuvor Allowlist-Dateien des Kopplungsspeichers verwendet haben, kann `openclaw doctor --fix` Einträge in Allowlist-Flows in `channels.telegram.allowFrom` wiederherstellen (zum Beispiel, wenn `dmPolicy: "allowlist"` noch keine expliziten IDs hat).
Wenn Sie aktualisiert haben und Ihre Konfiguration `@username`-Allowlist-Einträge enthält, führen Sie `openclaw doctor --fix` aus, um sie aufzulösen (Best Effort; erfordert ein Telegram-Bot-Token).
Wenn Sie sich zuvor auf Allowlist-Dateien im Kopplungsspeicher verlassen haben, kann `openclaw doctor --fix` Einträge in Allowlist-Abläufen in `channels.telegram.allowFrom` wiederherstellen (zum Beispiel, wenn `dmPolicy: "allowlist"` noch keine expliziten IDs hat).
Für Bots mit einem einzelnen Owner bevorzugen Sie `dmPolicy: "allowlist"` mit expliziten numerischen `allowFrom`-IDs, damit die Zugriffsrichtlinie dauerhaft in der Konfiguration liegt (statt von früheren Kopplungsgenehmigungen abzuhängen).
Für Bots mit einem Besitzer bevorzugen Sie `dmPolicy: "allowlist"` mit expliziten numerischen `allowFrom`-IDs, damit die Zugriffsrichtlinie dauerhaft in der Konfiguration bleibt (statt von früheren Kopplungsgenehmigungen abzuhängen).
Häufige Verwirrung: Die Genehmigung einer DM-Kopplung bedeutet nicht „dieser Absender ist überall autorisiert“.
Kopplung gewährt DM-Zugriff. Wenn noch kein Befehls-Owner existiert, setzt die erste genehmigte Kopplung auch `commands.ownerAllowFrom`, sodass Owner-only-Befehle und Exec-Genehmigungen ein explizites Betreiberkonto haben.
Die Autorisierung von Gruppenabsendern stammt weiterhin aus expliziten Konfigurations-Allowlists.
Wenn Sie möchten „Ich bin einmal autorisiert und sowohl DMs als auch Gruppenbefehle funktionieren“, setzen Sie Ihre numerische Telegram-Benutzer-ID in `channels.telegram.allowFrom`; stellen Sie für Owner-only-Befehle sicher, dass `commands.ownerAllowFrom` `telegram:<your user id>` enthält.
Häufige Verwechslung: Die Genehmigung der Direktnachrichten-Kopplung bedeutet nicht „dieser Absender ist überall autorisiert“.
Die Kopplung gewährt Zugriff auf Direktnachrichten. Wenn noch kein Befehlsbesitzer existiert, setzt die erste genehmigte Kopplung außerdem `commands.ownerAllowFrom`, sodass Besitzerbefehle und Exec-Genehmigungen ein explizites Bedienerkonto haben.
Die Autorisierung von Gruppenabsendern kommt weiterhin aus expliziten Konfigurations-Allowlists.
Wenn Sie möchten, dass „ich einmal autorisiert bin und sowohl Direktnachrichten als auch Gruppenbefehle funktionieren“, legen Sie Ihre numerische Telegram-Benutzer-ID in `channels.telegram.allowFrom` ab; stellen Sie für Besitzerbefehle sicher, dass `commands.ownerAllowFrom` `telegram:<your user id>` enthält.
### Ihre Telegram-Benutzer-ID finden
Sicherer (kein Drittanbieter-Bot):
1. Senden Sie Ihrem Bot eine DM.
1. Senden Sie Ihrem Bot eine Direktnachricht.
2. Führen Sie `openclaw logs --follow` aus.
3. Lesen Sie `from.id`.
@ -148,7 +148,7 @@ Die Reihenfolge der Token-Auflösung ist kontobewusst. In der Praxis haben Konfi
curl "https://api.telegram.org/bot<bot_token>/getUpdates"
```
Drittanbietermethode (weniger privat): `@userinfobot` oder `@getidsbot`.
Drittanbieter-Methode (weniger privat): `@userinfobot` oder `@getidsbot`.
</Tab>
@ -167,16 +167,16 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `disabled`
`groupAllowFrom` wird für die Filterung von Gruppenabsendern verwendet. Wenn nicht gesetzt, fällt Telegram auf `allowFrom` zurück.
`groupAllowFrom`-Einträge sollten numerische Telegram-Benutzer-IDs sein (Präfixe `telegram:` / `tg:` werden normalisiert).
Tragen Sie keine Telegram-Gruppen- oder Supergruppen-Chat-IDs in `groupAllowFrom` ein. Negative Chat-IDs gehören unter `channels.telegram.groups`.
`groupAllowFrom`-Einträge sollten numerische Telegram-Benutzer-IDs sein (`telegram:`- / `tg:`-Präfixe werden normalisiert).
Legen Sie keine Telegram-Gruppen- oder Supergruppen-Chat-IDs in `groupAllowFrom` ab. Negative Chat-IDs gehören unter `channels.telegram.groups`.
Nicht numerische Einträge werden für die Absenderautorisierung ignoriert.
Sicherheitsgrenze (`2026.2.25+`): Die Authentifizierung von Gruppenabsendern erbt **keine** Genehmigungen aus dem DM-Kopplungsspeicher.
Kopplung bleibt nur für DMs. Legen Sie für Gruppen `groupAllowFrom` oder `allowFrom` pro Gruppe/pro Topic fest.
Sicherheitsgrenze (`2026.2.25+`): Die Gruppenabsender-Authentifizierung erbt **keine** Genehmigungen aus dem Direktnachrichten-Kopplungsspeicher.
Kopplung bleibt nur für Direktnachrichten. Legen Sie für Gruppen `groupAllowFrom` oder gruppen-/themenspezifisches `allowFrom` fest.
Wenn `groupAllowFrom` nicht gesetzt ist, fällt Telegram auf die Konfiguration `allowFrom` zurück, nicht auf den Kopplungsspeicher.
Praktisches Muster für Bots mit einem einzelnen Owner: Setzen Sie Ihre Benutzer-ID in `channels.telegram.allowFrom`, lassen Sie `groupAllowFrom` unset und erlauben Sie die Zielgruppen unter `channels.telegram.groups`.
Laufzeithinweis: Wenn `channels.telegram` vollständig fehlt, verwendet die Laufzeit standardmäßig fail-closed `groupPolicy="allowlist"`, es sei denn, `channels.defaults.groupPolicy` ist explizit gesetzt.
Praktisches Muster für Bots mit einem Besitzer: Legen Sie Ihre Benutzer-ID in `channels.telegram.allowFrom` fest, lassen Sie `groupAllowFrom` unset und erlauben Sie die Zielgruppen unter `channels.telegram.groups`.
Laufzeithinweis: Wenn `channels.telegram` vollständig fehlt, verwendet die Laufzeit standardmäßig ein ausfallsicher geschlossenes `groupPolicy="allowlist"`, sofern `channels.defaults.groupPolicy` nicht explizit gesetzt ist.
Beispiel: Beliebiges Mitglied in einer bestimmten Gruppe erlauben:
Beispiel: Beliebige Mitglieder in einer bestimmten Gruppe erlauben:
```json5
{
@ -211,10 +211,10 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
```
<Warning>
Häufiger Fehler: `groupAllowFrom` ist keine Telegram-Gruppen-Allowlist.
Häufiger Fehler: `groupAllowFrom` ist keine Allowlist für Telegram-Gruppen.
- Setzen Sie negative Telegram-Gruppen- oder Supergruppen-Chat-IDs wie `-1001234567890` unter `channels.telegram.groups`.
- Setzen Sie Telegram-Benutzer-IDs wie `8734062810` unter `groupAllowFrom`, wenn Sie begrenzen möchten, welche Personen innerhalb einer erlaubten Gruppe den Bot auslösen können.
- Legen Sie negative Telegram-Gruppen- oder Supergruppen-Chat-IDs wie `-1001234567890` unter `channels.telegram.groups` ab.
- Legen Sie Telegram-Benutzer-IDs wie `8734062810` unter `groupAllowFrom` ab, wenn Sie einschränken möchten, welche Personen innerhalb einer erlaubten Gruppe den Bot auslösen können.
- Verwenden Sie `groupAllowFrom: ["*"]` nur, wenn jedes Mitglied einer erlaubten Gruppe mit dem Bot sprechen können soll.
</Warning>
@ -224,19 +224,19 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Tab title="Erwähnungsverhalten">
Gruppenantworten erfordern standardmäßig eine Erwähnung.
Die Erwähnung kann kommen von:
Die Erwähnung kann stammen von:
- nativer `@botusername`-Erwähnung, oder
- nativer `@botusername`-Erwähnung oder
- Erwähnungsmustern in:
- `agents.list[].groupChat.mentionPatterns`
- `messages.groupChat.mentionPatterns`
Sitzungsbezogene Befehlsumschalter:
Befehlsumschalter auf Sitzungsebene:
- `/activation always`
- `/activation mention`
Diese aktualisieren nur den Sitzungszustand. Verwenden Sie Konfiguration für Persistenz.
Diese aktualisieren nur den Sitzungszustand. Verwenden Sie die Konfiguration für Persistenz.
Beispiel für persistente Konfiguration:
@ -254,24 +254,24 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Gruppen-Chat-ID erhalten:
- leiten Sie eine Gruppennachricht an `@userinfobot` / `@getidsbot` weiter
- oder lesen Sie `chat.id` aus `openclaw logs --follow`
- oder prüfen Sie Bot API `getUpdates`
- eine Gruppennachricht an `@userinfobot` / `@getidsbot` weiterleiten
- oder `chat.id` aus `openclaw logs --follow` lesen
- oder Bot-API `getUpdates` inspizieren
</Tab>
</Tabs>
## Laufzeitverhalten
- Telegram gehört zum Gateway-Prozess.
- Telegram gehört dem Gateway-Prozess.
- Das Routing ist deterministisch: Eingehende Telegram-Nachrichten werden an Telegram beantwortet (das Modell wählt keine Kanäle aus).
- Eingehende Nachrichten werden in den gemeinsamen Kanalumschlag mit Antwortmetadaten und Medienplatzhaltern normalisiert.
- Gruppensitzungen werden nach Gruppen-ID isoliert. Forum-Topics hängen `:topic:<threadId>` an, um Topics isoliert zu halten.
- DM-Nachrichten können `message_thread_id` enthalten; OpenClaw erhält die Thread-ID für Antworten, hält DMs aber standardmäßig in der flachen Sitzung. Konfigurieren Sie `channels.telegram.dm.threadReplies: "inbound"`, `channels.telegram.direct.<chatId>.threadReplies: "inbound"`, `requireTopic: true` oder eine passende Topic-Konfiguration, wenn Sie bewusst DM-Topic-Sitzungsisolation wünschen.
- Long Polling verwendet grammY Runner mit Sequenzierung pro Chat/pro Thread. Die gesamte Runner-Sink-Parallelität verwendet `agents.defaults.maxConcurrent`.
- Long Polling wird innerhalb jedes Gateway-Prozesses geschützt, sodass immer nur ein aktiver Poller ein Bot-Token gleichzeitig verwenden kann. Wenn Sie weiterhin `getUpdates`-409-Konflikte sehen, verwendet wahrscheinlich ein anderes OpenClaw-Gateway, Skript oder externer Poller dasselbe Token.
- Neustarts des Long-Polling-Watchdogs werden standardmäßig nach 120 Sekunden ohne abgeschlossene `getUpdates`-Liveness ausgelöst. Erhöhen Sie `channels.telegram.pollingStallThresholdMs` nur, wenn Ihre Bereitstellung bei lang laufenden Arbeiten weiterhin falsche Polling-Stall-Neustarts sieht. Der Wert ist in Millisekunden angegeben und von `30000` bis `600000` zulässig; kontospezifische Überschreibungen werden unterstützt.
- Die Telegram Bot API bietet keine Unterstützung für Lesebestätigungen (`sendReadReceipts` gilt nicht).
- Eingehende Nachrichten werden in die gemeinsame Kanalhülle mit Antwortmetadaten und Medienplatzhaltern normalisiert.
- Gruppensitzungen werden nach Gruppen-ID isoliert. Forenthemen hängen `:topic:<threadId>` an, um Themen isoliert zu halten.
- Direktnachrichten können `message_thread_id` enthalten; OpenClaw erhält die Thread-ID für Antworten, hält Direktnachrichten standardmäßig aber in der flachen Sitzung. Konfigurieren Sie `channels.telegram.dm.threadReplies: "inbound"`, `channels.telegram.direct.<chatId>.threadReplies: "inbound"`, `requireTopic: true` oder eine passende Themenkonfiguration, wenn Sie bewusst Themensitzungsisolierung für Direktnachrichten wünschen.
- Long Polling verwendet den grammY-Runner mit Sequenzierung pro Chat/pro Thread. Die gesamte Runner-Sink-Parallelität verwendet `agents.defaults.maxConcurrent`.
- Long Polling wird innerhalb jedes Gateway-Prozesses geschützt, sodass jeweils nur ein aktiver Poller ein Bot-Token verwenden kann. Wenn Sie weiterhin `getUpdates`-409-Konflikte sehen, verwendet wahrscheinlich ein anderer OpenClaw-Gateway, ein Skript oder ein externer Poller dasselbe Token.
- Neustarts durch den Long-Polling-Watchdog werden standardmäßig nach 120 Sekunden ohne abgeschlossene `getUpdates`-Lebendigkeit ausgelöst. Erhöhen Sie `channels.telegram.pollingStallThresholdMs` nur, wenn Ihre Bereitstellung während langlaufender Arbeit weiterhin fälschliche Polling-Stall-Neustarts sieht. Der Wert ist in Millisekunden und von `30000` bis `600000` erlaubt; Überschreibungen pro Konto werden unterstützt.
- Die Telegram Bot API unterstützt keine Lesebestätigungen (`sendReadReceipts` gilt nicht).
## Funktionsreferenz
@ -280,17 +280,17 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
OpenClaw kann Teilantworten in Echtzeit streamen:
- direkte Chats: Vorschaunachricht + `editMessageText`
- Gruppen/Topics: Vorschaunachricht + `editMessageText`
- Gruppen/Themen: Vorschaunachricht + `editMessageText`
Anforderung:
- `channels.telegram.streaming` ist `off | partial | block | progress` (Standard: `partial`)
- `progress` hält einen bearbeitbaren Statusentwurf und aktualisiert ihn mit Tool-Fortschritt bis zur finalen Zustellung
- `progress` hält einen bearbeitbaren Statusentwurf vor und aktualisiert ihn bis zur endgültigen Zustellung mit Tool-Fortschritt
- `streaming.preview.toolProgress` steuert, ob Tool-/Fortschrittsaktualisierungen dieselbe bearbeitete Vorschaunachricht wiederverwenden (Standard: `true`, wenn Vorschau-Streaming aktiv ist)
- `streaming.preview.commandText` steuert Befehls-/Exec-Details innerhalb dieser Tool-Fortschrittszeilen: `raw` (Standard, erhält veröffentlichtes Verhalten) oder `status` (nur Tool-Label)
- veraltete `channels.telegram.streamMode`- und boolesche `streaming`-Werte werden erkannt; führen Sie `openclaw doctor --fix` aus, um sie nach `channels.telegram.streaming.mode` zu migrieren
- `streaming.preview.commandText` steuert Befehls-/Exec-Details in diesen Tool-Fortschrittszeilen: `raw` (Standard, bewahrt veröffentlichtes Verhalten) oder `status` (nur Tool-Label)
- ältere Werte für `channels.telegram.streamMode` und boolesche `streaming`-Werte werden erkannt; führen Sie `openclaw doctor --fix` aus, um sie nach `channels.telegram.streaming.mode` zu migrieren
Tool-Fortschrittsvorschau-Aktualisierungen sind die kurzen Statuszeilen, die angezeigt werden, während Tools laufen, zum Beispiel Befehlsausführung, Dateilesevorgänge, Planungsaktualisierungen oder Patch-Zusammenfassungen. Telegram lässt diese standardmäßig aktiviert, um dem veröffentlichten OpenClaw-Verhalten ab `v2026.4.22` und später zu entsprechen. Um die bearbeitete Vorschau für Antworttext beizubehalten, aber Tool-Fortschrittszeilen auszublenden, setzen Sie:
Tool-Fortschrittsvorschau-Updates sind die kurzen Statuszeilen, die angezeigt werden, während Tools laufen, zum Beispiel Befehlsausführung, Dateilesen, Planungsupdates oder Patch-Zusammenfassungen. Telegram hält diese standardmäßig aktiviert, um dem veröffentlichten OpenClaw-Verhalten ab `v2026.4.22` und später zu entsprechen. Um die bearbeitete Vorschau für Antworttext beizubehalten, aber Tool-Fortschrittszeilen auszublenden, legen Sie fest:
```json
{
@ -307,7 +307,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Um Tool-Fortschritt sichtbar zu halten, aber Befehls-/Exec-Text auszublenden, setzen Sie:
Um Tool-Fortschritt sichtbar zu lassen, aber Befehls-/Exec-Text auszublenden, legen Sie fest:
```json
{
@ -342,26 +342,26 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Verwenden Sie `streaming.mode: "off"` nur, wenn Sie ausschließlich finale Zustellung wünschen: Telegram-Vorschau-Bearbeitungen sind deaktiviert, und generisches Tool-/Fortschrittsrauschen wird unterdrückt, statt als eigenständige Statusmeldungen gesendet zu werden. Genehmigungsabfragen, Mediennutzlasten und Fehler laufen weiterhin über die normale finale Zustellung. Verwenden Sie `streaming.preview.toolProgress: false`, wenn Sie nur Antwortvorschau-Bearbeitungen beibehalten möchten, während Sie die Statuszeilen zum Tool-Fortschritt ausblenden.
Verwenden Sie `streaming.mode: "off"` nur, wenn Sie ausschließlich die finale Zustellung wünschen: Telegram-Vorschauänderungen sind deaktiviert und allgemeines Tool-/Fortschrittsrauschen wird unterdrückt, statt als eigenständige Statusmeldungen gesendet zu werden. Genehmigungsaufforderungen, Medien-Payloads und Fehler laufen weiterhin über die normale finale Zustellung. Verwenden Sie `streaming.preview.toolProgress: false`, wenn Sie nur Antwortvorschauänderungen beibehalten möchten, während die Tool-Fortschrittsstatuszeilen ausgeblendet werden.
<Note>
Ausgewählte Telegram-Zitatantworten sind die Ausnahme. Wenn `replyToMode` `"first"`, `"all"` oder `"batched"` ist und die eingehende Nachricht ausgewählten Zitattext enthält, sendet OpenClaw die finale Antwort über Telegrams nativen Zitatantwort-Pfad, statt die Antwortvorschau zu bearbeiten. Deshalb kann `streaming.preview.toolProgress` für diesen Durchlauf die kurzen Statuszeilen nicht anzeigen. Antworten auf die aktuelle Nachricht ohne ausgewählten Zitattext behalten weiterhin Vorschau-Streaming bei. Setzen Sie `replyToMode: "off"`, wenn Sichtbarkeit des Tool-Fortschritts wichtiger ist als native Zitatantworten, oder setzen Sie `streaming.preview.toolProgress: false`, um den Kompromiss anzuerkennen.
Ausgewählte Telegram-Zitatantworten sind die Ausnahme. Wenn `replyToMode` `"first"`, `"all"` oder `"batched"` ist und die eingehende Nachricht ausgewählten Zitattext enthält, sendet OpenClaw die finale Antwort über Telegrams nativen Zitatantwortpfad, statt die Antwortvorschau zu bearbeiten. Deshalb kann `streaming.preview.toolProgress` die kurzen Statuszeilen für diesen Durchlauf nicht anzeigen. Antworten auf die aktuelle Nachricht ohne ausgewählten Zitattext behalten weiterhin Vorschau-Streaming. Setzen Sie `replyToMode: "off"`, wenn Tool-Fortschrittssichtbarkeit wichtiger ist als native Zitatantworten, oder setzen Sie `streaming.preview.toolProgress: false`, um den Zielkonflikt anzuerkennen.
</Note>
Für reine Textantworten:
- kurze DM-/Gruppen-/Themenvorschauen: OpenClaw behält dieselbe Vorschaunachricht bei und führt eine finale Bearbeitung direkt dort aus, sofern nach dem Erscheinen der Vorschau keine sichtbare Nicht-Vorschaunachricht gesendet wurde
- Vorschauen, denen sichtbare Nicht-Vorschauausgabe folgt: OpenClaw sendet die abgeschlossene Antwort als neue finale Nachricht und räumt die ältere Vorschau auf, sodass die finale Antwort nach der Zwischenausgabe erscheint
- Vorschauen, die älter als etwa eine Minute sind: OpenClaw sendet die abgeschlossene Antwort als neue finale Nachricht und räumt danach die Vorschau auf, sodass Telegrams sichtbarer Zeitstempel die Abschlusszeit statt der Erstellungszeit der Vorschau widerspiegelt
- kurze DM-/Gruppen-/Themenvorschauen: OpenClaw behält dieselbe Vorschaunachricht bei und führt eine finale Bearbeitung an Ort und Stelle aus, außer nachdem die Vorschau erschienen ist, wurde eine sichtbare Nicht-Vorschau-Nachricht gesendet
- Vorschauen, gefolgt von sichtbarer Nicht-Vorschau-Ausgabe: OpenClaw sendet die vollständige Antwort als neue finale Nachricht und räumt die ältere Vorschau auf, sodass die finale Antwort nach der Zwischenausgabe erscheint
- Vorschauen, die älter als etwa eine Minute sind: OpenClaw sendet die vollständige Antwort als neue finale Nachricht und räumt danach die Vorschau auf, sodass Telegrams sichtbarer Zeitstempel die Abschlusszeit statt der Erstellungszeit der Vorschau widerspiegelt
Bei komplexen Antworten (zum Beispiel Mediennutzlasten) fällt OpenClaw auf die normale finale Zustellung zurück und räumt anschließend die Vorschaunachricht auf.
Bei komplexen Antworten (zum Beispiel Medien-Payloads) fällt OpenClaw auf die normale finale Zustellung zurück und räumt anschließend die Vorschaunachricht auf.
Vorschau-Streaming ist getrennt von Block-Streaming. Wenn Block-Streaming für Telegram explizit aktiviert ist, überspringt OpenClaw den Vorschaustream, um doppeltes Streaming zu vermeiden.
Vorschau-Streaming ist getrennt von Block-Streaming. Wenn Block-Streaming für Telegram ausdrücklich aktiviert ist, überspringt OpenClaw den Vorschau-Stream, um doppeltes Streaming zu vermeiden.
Reiner Telegram-Reasoning-Stream:
Nur-Telegram-Reasoning-Stream:
- `/reasoning stream` sendet Reasoning während der Generierung an die Live-Vorschau
- die Reasoning-Vorschau wird nach finaler Zustellung gelöscht; verwenden Sie `/reasoning on`, wenn Reasoning sichtbar bleiben soll
- die Reasoning-Vorschau wird nach der finalen Zustellung gelöscht; verwenden Sie `/reasoning on`, wenn Reasoning sichtbar bleiben soll
- die finale Antwort wird ohne Reasoning-Text gesendet
</Accordion>
@ -369,8 +369,8 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
<Accordion title="Formatierung und HTML-Fallback">
Ausgehender Text verwendet Telegram `parse_mode: "HTML"`.
- Markdown-ähnlicher Text wird in Telegram-sicheres HTML gerendert.
- Rohes Modell-HTML wird escaped, um Telegram-Parse-Fehler zu reduzieren.
- Markdown-ähnlicher Text wird zu Telegram-sicherem HTML gerendert.
- Rohes Modell-HTML wird escaped, um Telegram-Parsingfehler zu reduzieren.
- Wenn Telegram geparstes HTML ablehnt, versucht OpenClaw es erneut als Klartext.
Linkvorschauen sind standardmäßig aktiviert und können mit `channels.telegram.linkPreview: false` deaktiviert werden.
@ -401,7 +401,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Regeln:
- Namen werden normalisiert (führendes `/` entfernen, Kleinbuchstaben)
- Namen werden normalisiert (führendes `/` entfernen, Kleinschreibung)
- gültiges Muster: `a-z`, `0-9`, `_`, Länge `1..32`
- benutzerdefinierte Befehle können native Befehle nicht überschreiben
- Konflikte/Duplikate werden übersprungen und protokolliert
@ -409,39 +409,39 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Hinweise:
- benutzerdefinierte Befehle sind nur Menüeinträge; sie implementieren kein Verhalten automatisch
- Plugin-/Skill-Befehle können bei Eingabe weiterhin funktionieren, auch wenn sie im Telegram-Menü nicht angezeigt werden
- Plugin-/Skill-Befehle können weiterhin funktionieren, wenn sie eingegeben werden, auch wenn sie nicht im Telegram-Menü angezeigt werden
Wenn native Befehle deaktiviert sind, werden integrierte Befehle entfernt. Benutzerdefinierte/Plugin-Befehle können sich weiterhin registrieren, wenn sie konfiguriert sind.
Häufige Einrichtungsfehler:
- `setMyCommands failed` mit `BOT_COMMANDS_TOO_MUCH` bedeutet, dass das Telegram-Menü nach dem Kürzen weiterhin überfüllt war; reduzieren Sie Plugin-/Skill-/benutzerdefinierte Befehle oder deaktivieren Sie `channels.telegram.commands.native`.
- Wenn `deleteWebhook`, `deleteMyCommands` oder `setMyCommands` mit `404: Not Found` fehlschlagen, während direkte Bot-API-curl-Befehle funktionieren, kann das bedeuten, dass `channels.telegram.apiRoot` auf den vollständigen `/bot<TOKEN>`-Endpunkt gesetzt wurde. `apiRoot` darf nur der Bot-API-Root sein, und `openclaw doctor --fix` entfernt ein versehentliches abschließendes `/bot<TOKEN>`.
- `getMe returned 401` bedeutet, dass Telegram das konfigurierte Bot-Token abgelehnt hat. Aktualisieren Sie `botToken`, `tokenFile` oder `TELEGRAM_BOT_TOKEN` mit dem aktuellen BotFather-Token; OpenClaw stoppt vor dem Polling, daher wird dies nicht als Webhook-Bereinigungsfehler gemeldet.
- `setMyCommands failed` mit `BOT_COMMANDS_TOO_MUCH` bedeutet, dass das Telegram-Menü nach dem Kürzen weiterhin übergelaufen ist; reduzieren Sie Plugin-/Skill-/benutzerdefinierte Befehle oder deaktivieren Sie `channels.telegram.commands.native`.
- Wenn `deleteWebhook`, `deleteMyCommands` oder `setMyCommands` mit `404: Not Found` fehlschlägt, während direkte Bot-API-curl-Befehle funktionieren, kann das bedeuten, dass `channels.telegram.apiRoot` auf den vollständigen `/bot<TOKEN>`-Endpunkt gesetzt wurde. `apiRoot` darf nur der Bot-API-Root sein, und `openclaw doctor --fix` entfernt ein versehentlich angehängtes `/bot<TOKEN>`.
- `getMe returned 401` bedeutet, dass Telegram das konfigurierte Bot-Token abgelehnt hat. Aktualisieren Sie `botToken`, `tokenFile` oder `TELEGRAM_BOT_TOKEN` mit dem aktuellen BotFather-Token; OpenClaw stoppt vor dem Polling, sodass dies nicht als Webhook-Bereinigungsfehler gemeldet wird.
- `setMyCommands failed` mit Netzwerk-/Fetch-Fehlern bedeutet normalerweise, dass ausgehendes DNS/HTTPS zu `api.telegram.org` blockiert ist.
### Befehle zur Gerätekopplung (`device-pair`-Plugin)
### Gerätekopplungsbefehle (`device-pair`-Plugin)
Wenn das `device-pair`-Plugin installiert ist:
1. `/pair` erzeugt Einrichtungscode
2. Code in die iOS-App einfügen
1. `/pair` generiert Einrichtungscode
2. Code in iOS-App einfügen
3. `/pair pending` listet ausstehende Anfragen auf (einschließlich Rolle/Scopes)
4. die Anfrage genehmigen:
- `/pair approve <requestId>` für explizite Genehmigung
- `/pair approve`, wenn nur eine ausstehende Anfrage vorhanden ist
- `/pair approve latest` für die aktuellste Anfrage
4. Anfrage genehmigen:
- `/pair approve <requestId>` für ausdrückliche Genehmigung
- `/pair approve`, wenn es nur eine ausstehende Anfrage gibt
- `/pair approve latest` für die neueste
Der Einrichtungscode trägt ein kurzlebiges Bootstrap-Token. Die integrierte Bootstrap-Übergabe belässt das primäre Node-Token bei `scopes: []`; jedes übergebene Operator-Token bleibt auf `operator.approvals`, `operator.read`, `operator.talk.secrets` und `operator.write` begrenzt. Bootstrap-Scope-Prüfungen sind rollenpräfixiert, daher erfüllt diese Operator-Allowlist nur Operator-Anfragen; Nicht-Operator-Rollen benötigen weiterhin Scopes unter ihrem eigenen Rollenpräfix.
Der Einrichtungscode enthält ein kurzlebiges Bootstrap-Token. Die integrierte Bootstrap-Übergabe belt das primäre Node-Token bei `scopes: []`; jedes übergebene Operator-Token bleibt auf `operator.approvals`, `operator.read`, `operator.talk.secrets` und `operator.write` begrenzt. Bootstrap-Scope-Prüfungen sind rollenpräfixiert, sodass diese Operator-Allowlist nur Operator-Anfragen erfüllt; Nicht-Operator-Rollen benötigen weiterhin Scopes unter ihrem eigenen Rollenpräfix.
Wenn ein Gerät mit geänderten Authentifizierungsdetails erneut versucht (zum Beispiel Rolle/Scopes/öffentlicher Schlüssel), wird die vorherige ausstehende Anfrage ersetzt und die neue Anfrage verwendet eine andere `requestId`. Führen Sie `/pair pending` erneut aus, bevor Sie genehmigen.
Wenn ein Gerät es mit geänderten Authentifizierungsdetails erneut versucht (zum Beispiel Rolle/Scopes/öffentlicher Schlüssel), wird die vorherige ausstehende Anfrage ersetzt und die neue Anfrage verwendet eine andere `requestId`. Führen Sie `/pair pending` erneut aus, bevor Sie genehmigen.
Weitere Details: [Kopplung](/de/channels/pairing#pair-via-telegram-recommended-for-ios).
</Accordion>
<Accordion title="Inline-Buttons">
Inline-Tastatur-Scope konfigurieren:
Inline-Keyboard-Scope konfigurieren:
```json5
{
@ -481,7 +481,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `all`
- `allowlist` (Standard)
Veraltetes `capabilities: ["inlineButtons"]` wird `inlineButtons: "all"` zugeordnet.
Veraltetes `capabilities: ["inlineButtons"]` wird auf `inlineButtons: "all"` abgebildet.
Beispiel für Nachrichtenaktion:
@ -501,13 +501,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
}
```
Callback-Klicks werden als Text an den Agent übergeben:
Callback-Klicks werden als Text an den Agenten übergeben:
`callback_data: <value>`
</Accordion>
<Accordion title="Telegram-Nachrichtenaktionen für Agents und Automatisierung">
Telegram-Tool-Aktionen enthalten:
<Accordion title="Telegram-Nachrichtenaktionen für Agenten und Automatisierung">
Telegram-Tool-Aktionen umfassen:
- `sendMessage` (`to`, `content`, optional `mediaUrl`, `replyToMessageId`, `messageThreadId`)
- `react` (`chatId`, `messageId`, `emoji`)
@ -515,9 +515,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `editMessage` (`chatId`, `messageId`, `content`)
- `createForumTopic` (`chatId`, `name`, optional `iconColor`, `iconCustomEmojiId`)
Channel-Nachrichtenaktionen stellen ergonomische Aliasse bereit (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
Kanal-Nachrichtenaktionen stellen ergonomische Aliase bereit (`send`, `react`, `delete`, `edit`, `sticker`, `sticker-search`, `topic-create`).
Gating-Steuerelemente:
Gate-Steuerungen:
- `channels.telegram.actions.sendMessage`
- `channels.telegram.actions.deleteMessage`
@ -525,9 +525,9 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `channels.telegram.actions.sticker` (Standard: deaktiviert)
Hinweis: `edit` und `topic-create` sind derzeit standardmäßig aktiviert und haben keine separaten `channels.telegram.actions.*`-Schalter.
Laufzeit-Sends verwenden den aktiven Config-/Secrets-Snapshot (Start/Reload), daher führen Aktionspfade keine Ad-hoc-Neuauflösung von SecretRef pro Send aus.
Runtime-Sendungen verwenden den aktiven Konfigurations-/Secrets-Snapshot (Start/Reload), sodass Aktionspfade keine Ad-hoc-Neuauflösung von SecretRef pro Sendung durchführen.
Semantik zum Entfernen von Reactions: [/tools/reactions](/de/tools/reactions)
Semantik zum Entfernen von Reaktionen: [/tools/reactions](/de/tools/reactions)
</Accordion>
@ -543,29 +543,29 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `first`
- `all`
Wenn Antwort-Threading aktiviert ist und der ursprüngliche Telegram-Text oder die Beschriftung verfügbar ist, fügt OpenClaw automatisch einen nativen Telegram-Zitatauszug ein. Telegram begrenzt nativen Zitattext auf 1024 UTF-16-Codeeinheiten, daher werden längere Nachrichten vom Anfang an zitiert und fallen auf eine einfache Antwort zurück, wenn Telegram das Zitat ablehnt.
Wenn Antwort-Threading aktiviert ist und der ursprüngliche Telegram-Text oder die Beschriftung verfügbar ist, fügt OpenClaw automatisch einen nativen Telegram-Zitatauszug ein. Telegram begrenzt nativen Zitattext auf 1024 UTF-16-Codeeinheiten, sodass längere Nachrichten vom Anfang an zitiert werden und auf eine einfache Antwort zurückfallen, wenn Telegram das Zitat ablehnt.
Hinweis: `off` deaktiviert implizites Antwort-Threading. Explizite `[[reply_to_*]]`-Tags werden weiterhin berücksichtigt.
Hinweis: `off` deaktiviert implizites Antwort-Threading. Explizite `[[reply_to_*]]`-Tags werden weiterhin beachtet.
</Accordion>
<Accordion title="Forumthemen und Thread-Verhalten">
<Accordion title="Forenthemen und Thread-Verhalten">
Forum-Supergruppen:
- Themen-Sitzungsschlüssel hängen `:topic:<threadId>` an
- Antworten und Tippanzeige zielen auf den Themen-Thread
- Themen-Config-Pfad:
- Antworten und Tippanzeigen zielen auf den Themen-Thread
- Themen-Konfigurationspfad:
`channels.telegram.groups.<chatId>.topics.<threadId>`
Spezialfall allgemeines Thema (`threadId=1`):
Sonderfall allgemeines Thema (`threadId=1`):
- Nachrichten-Sends lassen `message_thread_id` aus (Telegram lehnt `sendMessage(...thread_id=1)` ab)
- Nachrichtensendungen lassen `message_thread_id` weg (Telegram lehnt `sendMessage(...thread_id=1)` ab)
- Tippaktionen enthalten weiterhin `message_thread_id`
Themenvererbung: Themeneinträge erben Gruppeneinstellungen, sofern sie nicht überschrieben werden (`requireMention`, `allowFrom`, `skills`, `systemPrompt`, `enabled`, `groupPolicy`).
`agentId` ist nur themenspezifisch und wird nicht von Gruppenstandardwerten geerbt.
`agentId` ist nur themenspezifisch und erbt nicht von Gruppenvorgaben.
**Agent-Routing pro Thema**: Jedes Thema kann zu einem anderen Agent routen, indem `agentId` in der Themen-Config gesetzt wird. Dadurch erhält jedes Thema seinen eigenen isolierten Workspace, Speicher und seine eigene Sitzung. Beispiel:
**Agenten-Routing pro Thema**: Jedes Thema kann zu einem anderen Agenten routen, indem `agentId` in der Themenkonfiguration gesetzt wird. Dadurch erhält jedes Thema seinen eigenen isolierten Arbeitsbereich, Speicher und seine eigene Sitzung. Beispiel:
```json5
{
@ -587,22 +587,22 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Jedes Thema hat dann seinen eigenen Sitzungsschlüssel: `agent:zu:telegram:group:-1001234567890:topic:3`
**Persistente ACP-Themenbindung**: Forumthemen können ACP-Harness-Sitzungen über typisierte ACP-Bindings der obersten Ebene anpinnen (`bindings[]` mit `type: "acp"` und `match.channel: "telegram"`, `peer.kind: "group"` sowie einer themenqualifizierten ID wie `-1001234567890:topic:42`). Derzeit auf Forumthemen in Gruppen/Supergruppen beschränkt. Siehe [ACP Agents](/de/tools/acp-agents).
**Persistente ACP-Themenbindung**: Forenthemen können ACP-Harness-Sitzungen über typisierte ACP-Bindings auf oberster Ebene fixieren (`bindings[]` mit `type: "acp"` und `match.channel: "telegram"`, `peer.kind: "group"` sowie einer themenqualifizierten ID wie `-1001234567890:topic:42`). Derzeit auf Forenthemen in Gruppen/Supergruppen beschränkt. Siehe [ACP-Agenten](/de/tools/acp-agents).
**Thread-gebundener ACP-Spawn aus dem Chat**: `/acp spawn <agent> --thread here|auto` bindet das aktuelle Thema an eine neue ACP-Sitzung; Folgebeiträge werden direkt dorthin geroutet. OpenClaw pinnt die Spawn-Bestätigung im Thema an. Erfordert, dass `channels.telegram.threadBindings.spawnSessions` aktiviert bleibt (Standard: `true`).
**Thread-gebundener ACP-Spawn aus dem Chat**: `/acp spawn <agent> --thread here|auto` bindet das aktuelle Thema an eine neue ACP-Sitzung; Folgebeiträge werden direkt dorthin geroutet. OpenClaw fixiert die Spawn-Bestätigung im Thema. Erfordert, dass `channels.telegram.threadBindings.spawnSessions` aktiviert bleibt (Standard: `true`).
Der Template-Kontext stellt `MessageThreadId` und `IsForum` bereit. DM-Chats mit `message_thread_id` behalten standardmäßig DM-Routing und Antwortmetadaten in flachen Sitzungen bei; thread-aware Sitzungsschlüssel werden nur verwendet, wenn `threadReplies: "inbound"`, `threadReplies: "always"`, `requireTopic: true` oder eine passende Themenkonfiguration konfiguriert ist. Verwenden Sie `channels.telegram.dm.threadReplies` auf oberster Ebene für den Kontostandard oder `direct.<chatId>.threadReplies` für eine einzelne DM.
Vorlagenkontext stellt `MessageThreadId` und `IsForum` bereit. DM-Chats mit `message_thread_id` behalten standardmäßig DM-Routing und Antwortmetadaten in flachen Sitzungen bei; sie verwenden Thread-bewusste Sitzungsschlüssel nur, wenn sie mit `threadReplies: "inbound"`, `threadReplies: "always"`, `requireTopic: true` oder einer passenden Themenkonfiguration konfiguriert sind. Verwenden Sie `channels.telegram.dm.threadReplies` auf oberster Ebene für den Account-Standard oder `direct.<chatId>.threadReplies` für eine einzelne DM.
</Accordion>
<Accordion title="Audio, Video und Sticker">
### Audionachrichten
Telegram unterscheidet Sprachnachrichten von Audiodateien.
Telegram unterscheidet Sprachnotizen von Audiodateien.
- Standard: Audiodateiverhalten
- Tag `[[audio_as_voice]]` in der Agent-Antwort, um das Senden als Sprachnachricht zu erzwingen
- Eingehende Transkripte von Sprachnachrichten werden im Agent-Kontext als maschinell erzeugter,
- Tag `[[audio_as_voice]]` in der Agent-Antwort, um das Senden als Sprachnotiz zu erzwingen
- Eingehende Transkripte von Sprachnotizen werden im Agent-Kontext als maschinell generierter,
nicht vertrauenswürdiger Text gerahmt; die Erwähnungserkennung verwendet weiterhin das rohe
Transkript, sodass erwähnungsgesteuerte Sprachnachrichten weiter funktionieren.
@ -697,7 +697,7 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Reaktionsbenachrichtigungen">
Telegram-Reaktionen treffen als `message_reaction`-Updates ein (getrennt von Nachrichten-Payloads).
Telegram-Reaktionen kommen als `message_reaction`-Updates an (getrennt von Nachrichten-Payloads).
Wenn aktiviert, stellt OpenClaw Systemereignisse wie diese in die Warteschlange:
@ -710,13 +710,13 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
Hinweise:
- `own` bedeutet nur Benutzerreaktionen auf vom Bot gesendete Nachrichten (Best-Effort über Cache gesendeter Nachrichten).
- `own` bedeutet nur Benutzerreaktionen auf vom Bot gesendete Nachrichten (Best Effort über den Cache gesendeter Nachrichten).
- Reaktionsereignisse beachten weiterhin Telegram-Zugriffskontrollen (`dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`); nicht autorisierte Absender werden verworfen.
- Telegram stellt in Reaktions-Updates keine Thread-IDs bereit.
- Nicht-Forum-Gruppen routen zur Gruppenchat-Sitzung
- Forum-Gruppen routen zur Sitzung des allgemeinen Themas der Gruppe (`:topic:1`), nicht zum genauen ursprünglichen Thema
- Telegram stellt in Reaktionsupdates keine Thread-IDs bereit.
- Nicht-Forumgruppen werden an die Gruppenchat-Sitzung geroutet
- Forumgruppen werden an die Sitzung des allgemeinen Gruppenthemas (`:topic:1`) geroutet, nicht an das genaue Ursprungsthema
`allowed_updates` für Polling/Webhook enthält `message_reaction` automatisch.
`allowed_updates` für Polling/Webhook enthält automatisch `message_reaction`.
</Accordion>
@ -728,17 +728,17 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
- `channels.telegram.accounts.<accountId>.ackReaction`
- `channels.telegram.ackReaction`
- `messages.ackReaction`
- Fallback auf Emoji der Agent-Identität (`agents.list[].identity.emoji`, sonst "👀")
- Fallback auf Agent-Identitäts-Emoji (`agents.list[].identity.emoji`, sonst "👀")
Hinweise:
- Telegram erwartet Unicode-Emoji (zum Beispiel "👀").
- Verwenden Sie `""`, um die Reaktion für einen Channel oder ein Konto zu deaktivieren.
- Verwenden Sie `""`, um die Reaktion für einen Kanal oder Account zu deaktivieren.
</Accordion>
<Accordion title="Konfigurationsschreibvorgänge aus Telegram-Ereignissen und -Befehlen">
Channel-Konfigurationsschreibvorgänge sind standardmäßig aktiviert (`configWrites !== false`).
Schreibvorgänge für die Kanalkonfiguration sind standardmäßig aktiviert (`configWrites !== false`).
Durch Telegram ausgelöste Schreibvorgänge umfassen:
@ -760,38 +760,39 @@ curl "https://api.telegram.org/bot<bot_token>/getUpdates"
</Accordion>
<Accordion title="Long Polling vs. Webhook">
Standard ist Long Polling. Für den Webhook-Modus setzen Sie `channels.telegram.webhookUrl` und `channels.telegram.webhookSecret`; optional `webhookPath`, `webhookHost`, `webhookPort` (Standardwerte `/telegram-webhook`, `127.0.0.1`, `8787`).
Standard ist Long Polling. Für den Webhook-Modus legen Sie `channels.telegram.webhookUrl` und `channels.telegram.webhookSecret` fest; optional `webhookPath`, `webhookHost`, `webhookPort` (Standardwerte `/telegram-webhook`, `127.0.0.1`, `8787`).
Der lokale Listener bindet an `127.0.0.1:8787`. Für öffentlichen Eingang setzen Sie entweder einen Reverse Proxy vor den lokalen Port oder setzen Sie bewusst `webhookHost: "0.0.0.0"`.
Der lokale Listener bindet an `127.0.0.1:8787`. Für öffentlichen Ingress schalten Sie entweder einen Reverse Proxy vor den lokalen Port oder setzen Sie bewusst `webhookHost: "0.0.0.0"`.
Der Webhook-Modus validiert Request Guards, das Telegram-Secret-Token und den JSON-Body, bevor `200` an Telegram zurückgegeben wird.
OpenClaw verarbeitet das Update anschließend asynchron über dieselben Bot-Lanes pro Chat/pro Thema wie beim Long Polling, sodass langsame Agent-Durchläufe das Zustellungs-ACK von Telegram nicht blockieren.
Der Webhook-Modus validiert Request-Guards, das geheime Telegram-Token und den JSON-Body, bevor `200` an Telegram zurückgegeben wird.
OpenClaw verarbeitet das Update anschließend asynchron über dieselben Bot-Lanes pro Chat/pro Thema, die auch Long Polling verwendet, sodass langsame Agent-Runden den Zustellungs-ACK von Telegram nicht blockieren.
</Accordion>
<Accordion title="Limits, Wiederholung und CLI-Ziele">
- `channels.telegram.textChunkLimit` ist standardmäßig 4000.
- `channels.telegram.chunkMode="newline"` bevorzugt Absatzgrenzen (Leerzeilen) vor der Längenaufteilung.
- Der Standardwert von `channels.telegram.textChunkLimit` ist 4000.
- `channels.telegram.chunkMode="newline"` bevorzugt Absatzgrenzen (Leerzeilen), bevor nach Länge aufgeteilt wird.
- `channels.telegram.mediaMaxMb` (Standard 100) begrenzt die Größe eingehender und ausgehender Telegram-Medien.
- `channels.telegram.mediaGroupFlushMs` (Standard 500) steuert, wie lange Telegram-Alben/Mediengruppen gepuffert werden, bevor OpenClaw sie als eine eingehende Nachricht ausliefert. Erhöhen Sie den Wert, wenn Albenteile verspätet eintreffen; verringern Sie ihn, um die Antwortlatenz für Alben zu reduzieren.
- `channels.telegram.timeoutSeconds` überschreibt das Timeout des Telegram-API-Clients (wenn nicht gesetzt, gilt der grammY-Standard). Bot-Clients begrenzen konfigurierte Werte unterhalb des 60-Sekunden-Guards für ausgehende Text-/Typing-Requests, damit grammY die sichtbare Antwortzustellung nicht abbricht, bevor OpenClaws Transport-Guard und Fallback ausgeführt werden können. Long Polling verwendet weiterhin einen 45-Sekunden-Request-Guard für `getUpdates`, damit inaktive Polls nicht unbegrenzt aufgegeben werden.
- `channels.telegram.pollingStallThresholdMs` ist standardmäßig `120000`; passen Sie den Wert nur bei falsch-positiven Polling-Stall-Neustarts zwischen `30000` und `600000` an.
- Gruppen-Kontexthistorie verwendet `channels.telegram.historyLimit` oder `messages.groupChat.historyLimit` (Standard 50); `0` deaktiviert sie.
- Ergänzender Kontext für Antworten/Zitate/Weiterleitungen wird derzeit unverändert weitergegeben.
- Telegram-Allowlists steuern hauptsächlich, wer den Agent auslösen kann, nicht eine vollständige Schwelle zur Schwärzung ergänzender Kontexte.
- DM-Historiensteuerung:
- `channels.telegram.mediaGroupFlushMs` (Standard 500) steuert, wie lange Telegram-Alben/Mediengruppen gepuffert werden, bevor OpenClaw sie als eine eingehende Nachricht weiterleitet. Erhöhen Sie den Wert, wenn Albumteile spät ankommen; verringern Sie ihn, um die Antwortlatenz für Alben zu reduzieren.
- `channels.telegram.timeoutSeconds` überschreibt das Timeout des Telegram-API-Clients (wenn nicht gesetzt, gilt der grammY-Standard). Bot-Clients begrenzen konfigurierte Werte unterhalb des 60-Sekunden-Request-Guards für ausgehenden Text/Typing, damit grammY die sichtbare Antwortzustellung nicht abbricht, bevor OpenClaws Transport-Guard und Fallback laufen können. Long Polling verwendet weiterhin einen 45-Sekunden-`getUpdates`-Request-Guard, damit inaktive Polls nicht unbegrenzt aufgegeben werden.
- `channels.telegram.pollingStallThresholdMs` ist standardmäßig `120000`; passen Sie den Wert nur bei falsch positiven Neustarts wegen Polling-Stalls zwischen `30000` und `600000` an.
- Der Gruppen-Kontextverlauf verwendet `channels.telegram.historyLimit` oder `messages.groupChat.historyLimit` (Standard 50); `0` deaktiviert ihn.
- Zusätzlicher Kontext aus Antworten/Zitaten/Weiterleitungen wird derzeit unverändert übergeben.
- Telegram-Allowlists steuern primär, wer den Agent auslösen kann, und sind keine vollständige Grenze für die Schwärzung von Zusatzkontext.
- Steuerelemente für den DM-Verlauf:
- `channels.telegram.dmHistoryLimit`
- `channels.telegram.dms["<user_id>"].historyLimit`
- Die Konfiguration `channels.telegram.retry` gilt für Telegram-Sendehelfer (CLI/Tools/Aktionen) bei wiederherstellbaren ausgehenden API-Fehlern. Die Zustellung der endgültigen eingehenden Antwort verwendet ebenfalls eine begrenzte Safe-Send-Wiederholung bei Telegram-Fehlern vor der Verbindung, wiederholt aber keine mehrdeutigen Netzwerkumschläge nach dem Senden, die sichtbare Nachrichten duplizieren könnten.
- Die Konfiguration `channels.telegram.retry` gilt für Telegram-Sendehilfen (CLI/Tools/Aktionen) bei behebbaren ausgehenden API-Fehlern. Die Zustellung der finalen eingehenden Antwort verwendet ebenfalls eine begrenzte Safe-Send-Wiederholung bei Telegram-Pre-Connect-Fehlern, wiederholt jedoch keine mehrdeutigen Netzwerkumschläge nach dem Senden, die sichtbare Nachrichten duplizieren könnten.
CLI-Sendeziel kann eine numerische Chat-ID oder ein Benutzername sein:
CLI- und Message-Tool-Sendeziele können eine numerische Chat-ID, ein Benutzername oder ein Forum-Themenziel sein:
```bash
openclaw message send --channel telegram --target 123456789 --message "hi"
openclaw message send --channel telegram --target @name --message "hi"
openclaw message send --channel telegram --target -1001234567890:topic:42 --message "hi topic"
```
Telegram-Polls verwenden `openclaw message poll` und unterstützen Forum-Themen:
Telegram-Polls verwenden `openclaw message poll` und unterstützen Forumthemen:
```bash
openclaw message poll --channel telegram --target 123456789 \
@ -801,57 +802,57 @@ openclaw message poll --channel telegram --target -1001234567890:topic:42 \
--poll-duration-seconds 300 --poll-public
```
Nur für Telegram verfügbare Poll-Flags:
Nur Telegram betreffende Poll-Flags:
- `--poll-duration-seconds` (5-600)
- `--poll-anonymous`
- `--poll-public`
- `--thread-id` für Forum-Themen (oder verwenden Sie ein `:topic:`-Ziel)
- `--thread-id` für Forumthemen (oder verwenden Sie ein `:topic:`-Ziel)
Telegram-Senden unterstützt außerdem:
- `--presentation` mit `buttons`-Blöcken für Inline-Tastaturen, wenn `channels.telegram.capabilities.inlineButtons` dies erlaubt
- `--presentation` mit `buttons`-Blöcken für Inline-Keyboards, wenn `channels.telegram.capabilities.inlineButtons` dies erlaubt
- `--pin` oder `--delivery '{"pin":true}'`, um angeheftete Zustellung anzufordern, wenn der Bot in diesem Chat anheften kann
- `--force-document`, um ausgehende Bilder und GIFs als Dokumente statt als komprimierte Foto- oder Animated-Media-Uploads zu senden
- `--force-document`, um ausgehende Bilder und GIFs als Dokumente statt als komprimierte Foto- oder animierte Medien-Uploads zu senden
Aktionssteuerung:
- `channels.telegram.actions.sendMessage=false` deaktiviert ausgehende Telegram-Nachrichten, einschließlich Polls
- `channels.telegram.actions.sendMessage=false` deaktiviert ausgehende Telegram-Nachrichten einschließlich Polls
- `channels.telegram.actions.poll=false` deaktiviert die Erstellung von Telegram-Polls, während reguläres Senden aktiviert bleibt
</Accordion>
<Accordion title="Exec-Freigaben in Telegram">
Telegram unterstützt Exec-Freigaben in Freigabe-DMs und kann optional Prompts im ursprünglichen Chat oder Thema posten. Freigebende Personen müssen numerische Telegram-Benutzer-IDs sein.
<Accordion title="Exec-Genehmigungen in Telegram">
Telegram unterstützt Exec-Genehmigungen in Genehmiger-DMs und kann Prompts optional im ursprünglichen Chat oder Thema posten. Genehmiger müssen numerische Telegram-Benutzer-IDs sein.
Konfigurationspfad:
- `channels.telegram.execApprovals.enabled` (wird automatisch aktiviert, wenn mindestens eine freigebende Person auflösbar ist)
- `channels.telegram.execApprovals.enabled` (aktiviert sich automatisch, wenn mindestens ein Genehmiger auflösbar ist)
- `channels.telegram.execApprovals.approvers` (fällt auf numerische Besitzer-IDs aus `commands.ownerAllowFrom` zurück)
- `channels.telegram.execApprovals.target`: `dm` (Standard) | `channel` | `both`
- `agentFilter`, `sessionFilter`
`channels.telegram.allowFrom`, `groupAllowFrom` und `defaultTo` steuern, wer mit dem Bot sprechen kann und wohin er normale Antworten sendet. Sie machen niemanden zur exec-freigebenden Person. Die erste genehmigte DM-Kopplung initialisiert `commands.ownerAllowFrom`, wenn noch kein Befehlsbesitzer vorhanden ist, sodass die Einrichtung mit einem Besitzer weiterhin funktioniert, ohne IDs unter `execApprovals.approvers` zu duplizieren.
`channels.telegram.allowFrom`, `groupAllowFrom` und `defaultTo` steuern, wer mit dem Bot sprechen kann und wohin er normale Antworten sendet. Sie machen niemanden zu einem Exec-Genehmiger. Die erste genehmigte DM-Kopplung initialisiert `commands.ownerAllowFrom`, wenn noch kein Befehlsbesitzer existiert, sodass die Ein-Besitzer-Einrichtung weiterhin funktioniert, ohne IDs unter `execApprovals.approvers` zu duplizieren.
Die Channel-Zustellung zeigt den Befehlstext im Chat; aktivieren Sie `channel` oder `both` nur in vertrauenswürdigen Gruppen/Themen. Wenn der Prompt in einem Forum-Thema landet, behält OpenClaw das Thema für den Freigabe-Prompt und die Folgeaktion bei. Exec-Freigaben laufen standardmäßig nach 30 Minuten ab.
Kanalzustellung zeigt den Befehlstext im Chat; aktivieren Sie `channel` oder `both` nur in vertrauenswürdigen Gruppen/Themen. Wenn der Prompt in einem Forumthema landet, behält OpenClaw das Thema für den Genehmigungsprompt und die Folgeaktion bei. Exec-Genehmigungen laufen standardmäßig nach 30 Minuten ab.
Inline-Freigabeschaltflächen erfordern außerdem, dass `channels.telegram.capabilities.inlineButtons` die Zieloberfläche (`dm`, `group` oder `all`) erlaubt. Freigabe-IDs mit Präfix `plugin:` werden über Plugin-Freigaben aufgelöst; andere werden zuerst über Exec-Freigaben aufgelöst.
Inline-Genehmigungsbuttons erfordern außerdem, dass `channels.telegram.capabilities.inlineButtons` die Zieloberfläche (`dm`, `group` oder `all`) erlaubt. Genehmigungs-IDs mit Präfix `plugin:` werden über Plugin-Genehmigungen aufgelöst; andere werden zuerst über Exec-Genehmigungen aufgelöst.
Siehe [Exec-Freigaben](/de/tools/exec-approvals).
Siehe [Exec-Genehmigungen](/de/tools/exec-approvals).
</Accordion>
</AccordionGroup>
## Steuerung von Fehlerantworten
## Steuerelemente für Fehlerantworten
Wenn der Agent auf einen Zustellungs- oder Provider-Fehler trifft, kann Telegram entweder mit dem Fehlertext antworten oder ihn unterdrücken. Zwei Konfigurationsschlüssel steuern dieses Verhalten:
Wenn der Agent auf einen Zustellungs- oder Provider-Fehler stößt, kann Telegram entweder mit dem Fehlertext antworten oder ihn unterdrücken. Zwei Konfigurationsschlüssel steuern dieses Verhalten:
| Schlüssel | Werte | Standard | Beschreibung |
| ----------------------------------- | ----------------- | -------- | ---------------------------------------------------------------------------------------------------- |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` sendet eine freundliche Fehlermeldung an den Chat. `silent` unterdrückt Fehlerantworten vollständig. |
| `channels.telegram.errorCooldownMs` | Zahl (ms) | `60000` | Mindestzeit zwischen Fehlerantworten an denselben Chat. Verhindert Fehler-Spam während Ausfällen. |
| Schlüssel | Werte | Standard | Beschreibung |
| ----------------------------------- | ----------------- | -------- | ----------------------------------------------------------------------------------------------------- |
| `channels.telegram.errorPolicy` | `reply`, `silent` | `reply` | `reply` sendet eine freundliche Fehlermeldung an den Chat. `silent` unterdrückt Fehlerantworten ganz. |
| `channels.telegram.errorCooldownMs` | Zahl (ms) | `60000` | Mindestzeit zwischen Fehlerantworten an denselben Chat. Verhindert Fehlerspam während Ausfällen. |
Überschreibungen pro Konto, pro Gruppe und pro Thema werden unterstützt (dieselbe Vererbung wie bei anderen Telegram-Konfigurationsschlüsseln).
Überschreibungen pro Account, pro Gruppe und pro Thema werden unterstützt (gleiche Vererbung wie bei anderen Telegram-Konfigurationsschlüsseln).
```json5
{
@ -872,31 +873,31 @@ Wenn der Agent auf einen Zustellungs- oder Provider-Fehler trifft, kann Telegram
## Fehlerbehebung
<AccordionGroup>
<Accordion title="Bot reagiert nicht auf Gruppennachrichten ohne Erwähnung">
<Accordion title="Bot reagiert nicht auf Gruppenmeldungen ohne Erwähnung">
- Wenn `requireMention=false`, muss der Telegram-Privatsphärenmodus vollständige Sichtbarkeit erlauben.
- Wenn `requireMention=false` gilt, muss der Telegram-Datenschutzmodus vollständige Sichtbarkeit erlauben.
- BotFather: `/setprivacy` -> Deaktivieren
- entfernen Sie den Bot anschließend aus der Gruppe und fügen Sie ihn erneut hinzu
- entfernen Sie dann den Bot und fügen Sie ihn der Gruppe erneut hinzu
- `openclaw channels status` warnt, wenn die Konfiguration nicht erwähnte Gruppennachrichten erwartet.
- `openclaw channels status --probe` kann explizite numerische Gruppen-IDs prüfen; Wildcard `"*"` kann nicht auf Mitgliedschaft geprüft werden.
- Schneller Sitzungstest: `/activation always`.
- `openclaw channels status --probe` kann explizite numerische Gruppen-IDs prüfen; die Wildcard `"*"` kann nicht per Mitgliedschaftsprüfung geprüft werden.
- schneller Sitzungstest: `/activation always`.
</Accordion>
<Accordion title="Bot sieht überhaupt keine Gruppennachrichten">
- wenn `channels.telegram.groups` vorhanden ist, muss die Gruppe aufgeführt sein (oder `"*"` enthalten)
- Bot-Mitgliedschaft in der Gruppe prüfen
- Logs prüfen: `openclaw logs --follow` für Gründe für das Überspringen
- wenn `channels.telegram.groups` vorhanden ist, muss die Gruppe aufgelistet sein (oder `"*"` enthalten)
- prüfen Sie die Bot-Mitgliedschaft in der Gruppe
- prüfen Sie die Logs: `openclaw logs --follow` für Gründe für das Überspringen
</Accordion>
<Accordion title="Befehle funktionieren teilweise oder gar nicht">
- autorisieren Sie Ihre Absenderidentität (Pairing und/oder numerisches `allowFrom`)
- autorisieren Sie Ihre Senderidentität (Pairing und/oder numerisches `allowFrom`)
- Befehlsautorisierung gilt weiterhin, auch wenn die Gruppenrichtlinie `open` ist
- `setMyCommands failed` mit `BOT_COMMANDS_TOO_MUCH` bedeutet, dass das native Menü zu viele Einträge hat; reduzieren Sie Plugin-/Skill-/benutzerdefinierte Befehle oder deaktivieren Sie native Menüs
- `deleteMyCommands`- / `setMyCommands`-Startaufrufe und `sendChatAction`-Tippaufrufe sind begrenzt und werden bei einem Anfrage-Timeout einmal über Telegrams Transport-Fallback erneut versucht. Anhaltende Netzwerk-/Fetch-Fehler weisen üblicherweise auf DNS-/HTTPS-Erreichbarkeitsprobleme zu `api.telegram.org` hin
- `deleteMyCommands`- / `setMyCommands`-Startaufrufe und `sendChatAction`-Typing-Aufrufe sind begrenzt und werden bei Request-Timeout einmal über Telegrams Transport-Fallback wiederholt. Anhaltende Netzwerk-/Fetch-Fehler weisen normalerweise auf DNS-/HTTPS-Erreichbarkeitsprobleme zu `api.telegram.org` hin
</Accordion>
@ -904,23 +905,23 @@ Wenn der Agent auf einen Zustellungs- oder Provider-Fehler trifft, kann Telegram
- `getMe returned 401` ist ein Telegram-Authentifizierungsfehler für das konfigurierte Bot-Token.
- Kopieren oder generieren Sie das Bot-Token in BotFather erneut und aktualisieren Sie dann `channels.telegram.botToken`, `channels.telegram.tokenFile`, `channels.telegram.accounts.<id>.botToken` oder `TELEGRAM_BOT_TOKEN` für das Standardkonto.
- `deleteWebhook 401 Unauthorized` während des Starts ist ebenfalls ein Authentifizierungsfehler; es als „kein Webhook vorhanden“ zu behandeln, würde denselben Fehler durch ein ungültiges Token nur auf spätere API-Aufrufe verschieben.
- `deleteWebhook 401 Unauthorized` während des Starts ist ebenfalls ein Authentifizierungsfehler; dies als „kein Webhook vorhanden“ zu behandeln, würde denselben Fehler durch ein ungültiges Token nur auf spätere API-Aufrufe verschieben.
</Accordion>
<Accordion title="Polling- oder Netzwerkinstabilität">
- Node 22+ mit benutzerdefiniertem Fetch/Proxy kann sofortiges Abbruchverhalten auslösen, wenn AbortSignal-Typen nicht übereinstimmen.
- Einige Hosts lösen `api.telegram.org` zuerst nach IPv6 auf; fehlerhafter IPv6-Egress kann zeitweilige Telegram-API-Fehler verursachen.
- Wenn Logs `TypeError: fetch failed` oder `Network request for 'getUpdates' failed!` enthalten, versucht OpenClaw diese jetzt als wiederherstellbare Netzwerkfehler erneut.
- Beim Polling-Start verwendet OpenClaw die erfolgreiche `getMe`-Startprüfung für grammY erneut, sodass der Runner vor dem ersten `getUpdates` kein zweites `getMe` benötigt.
- Wenn `deleteWebhook` beim Polling-Start mit einem vorübergehenden Netzwerkfehler fehlschlägt, fährt OpenClaw mit Long Polling fort, statt einen weiteren Control-Plane-Aufruf vor dem Polling auszuführen. Ein weiterhin aktiver Webhook zeigt sich als `getUpdates`-Konflikt; OpenClaw baut dann den Telegram-Transport neu auf und versucht die Webhook-Bereinigung erneut.
- Wenn Telegram-Sockets in einem kurzen festen Takt wiederverwendet werden, prüfen Sie auf einen niedrigen Wert für `channels.telegram.timeoutSeconds`; Bot-Clients begrenzen konfigurierte Werte unterhalb der Guards für ausgehende Anfragen und `getUpdates`, aber ältere Releases konnten jeden Poll oder jede Antwort abbrechen, wenn dieser Wert unter diesen Guards lag.
- Wenn Logs `Polling stall detected` enthalten, startet OpenClaw das Polling neu und baut den Telegram-Transport nach standardmäßig 120 Sekunden ohne abgeschlossene Long-Poll-Liveness neu auf.
- `openclaw channels status --probe` und `openclaw doctor` warnen, wenn ein laufendes Polling-Konto nach der Start-Kulanzzeit `getUpdates` nicht abgeschlossen hat, wenn ein laufendes Webhook-Konto nach der Start-Kulanzzeit `setWebhook` nicht abgeschlossen hat oder wenn die letzte erfolgreiche Polling-Transportaktivität veraltet ist.
- Erhöhen Sie `channels.telegram.pollingStallThresholdMs` nur, wenn lang laufende `getUpdates`-Aufrufe fehlerfrei sind, Ihr Host aber weiterhin fälschliche Polling-Stall-Neustarts meldet. Anhaltende Stalls weisen üblicherweise auf Proxy-, DNS-, IPv6- oder TLS-Egress-Probleme zwischen dem Host und `api.telegram.org` hin.
- Telegram berücksichtigt außerdem Prozess-Proxy-Umgebungsvariablen für den Bot-API-Transport, einschließlich `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` und deren kleingeschriebene Varianten. `NO_PROXY` / `no_proxy` kann `api.telegram.org` weiterhin umgehen.
- Wenn der von OpenClaw verwaltete Proxy über `OPENCLAW_PROXY_URL` für eine Service-Umgebung konfiguriert ist und keine Standard-Proxy-Umgebungsvariable vorhanden ist, verwendet Telegram diese URL ebenfalls für den Bot-API-Transport.
- Node 22+ und benutzerdefinierte Fetch-/Proxy-Konfigurationen können sofortiges Abbruchverhalten auslösen, wenn AbortSignal-Typen nicht übereinstimmen.
- Manche Hosts lösen `api.telegram.org` zuerst zu IPv6 auf; defekter IPv6-Egress kann intermittierende Telegram-API-Fehler verursachen.
- Wenn Logs `TypeError: fetch failed` oder `Network request for 'getUpdates' failed!` enthalten, wiederholt OpenClaw diese nun als behebbare Netzwerkfehler.
- Beim Polling-Start verwendet OpenClaw den erfolgreichen `getMe`-Starttest für grammY erneut, sodass der Runner kein zweites `getMe` vor dem ersten `getUpdates` benötigt.
- Wenn `deleteWebhook` beim Polling-Start mit einem vorübergehenden Netzwerkfehler fehlschlägt, fährt OpenClaw mit Long Polling fort, statt einen weiteren Control-Plane-Aufruf vor dem Polling auszuführen. Ein weiterhin aktiver Webhook wird als `getUpdates`-Konflikt sichtbar; OpenClaw baut dann den Telegram-Transport neu auf und versucht die Webhook-Bereinigung erneut.
- Wenn Telegram-Sockets in einem kurzen festen Rhythmus erneuert werden, prüfen Sie, ob `channels.telegram.timeoutSeconds` niedrig ist; Bot-Clients begrenzen konfigurierte Werte unterhalb der Guards für ausgehende Requests und `getUpdates`, ältere Releases konnten jedoch jede Abfrage oder Antwort abbrechen, wenn dies unterhalb dieser Guards gesetzt war.
- Wenn Logs `Polling stall detected` enthalten, startet OpenClaw Polling neu und baut den Telegram-Transport standardmäßig nach 120 Sekunden ohne abgeschlossene Long-Poll-Liveness neu auf.
- `openclaw channels status --probe` und `openclaw doctor` warnen, wenn ein laufendes Polling-Konto nach der Start-Toleranz kein `getUpdates` abgeschlossen hat, wenn ein laufendes Webhook-Konto nach der Start-Toleranz kein `setWebhook` abgeschlossen hat oder wenn die letzte erfolgreiche Polling-Transportaktivität veraltet ist.
- Erhöhen Sie `channels.telegram.pollingStallThresholdMs` nur, wenn lang laufende `getUpdates`-Aufrufe gesund sind, Ihr Host aber weiterhin falsche Polling-Stall-Neustarts meldet. Anhaltende Stalls deuten normalerweise auf Proxy-, DNS-, IPv6- oder TLS-Egress-Probleme zwischen Host und `api.telegram.org` hin.
- Telegram berücksichtigt außerdem Prozess-Proxy-Env für den Bot-API-Transport, einschließlich `HTTP_PROXY`, `HTTPS_PROXY`, `ALL_PROXY` und deren Kleinschreibungsvarianten. `NO_PROXY` / `no_proxy` kann `api.telegram.org` weiterhin umgehen.
- Wenn der von OpenClaw verwaltete Proxy für eine Service-Umgebung über `OPENCLAW_PROXY_URL` konfiguriert ist und keine standardmäßige Proxy-Env vorhanden ist, verwendet Telegram diese URL ebenfalls für den Bot-API-Transport.
- Leiten Sie auf VPS-Hosts mit instabilem direktem Egress/TLS Telegram-API-Aufrufe über `channels.telegram.proxy`:
```yaml
@ -929,8 +930,8 @@ channels:
proxy: socks5://<user>:<password>@proxy-host:1080
```
- Node 22+ verwendet standardmäßig `autoSelectFamily=true` (außer WSL2). Die Reihenfolge der Telegram-DNS-Ergebnisse berücksichtigt zuerst `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER`, dann `channels.telegram.network.dnsResultOrder`, dann die Prozessvorgabe wie `NODE_OPTIONS=--dns-result-order=ipv4first`; wenn nichts davon zutrifft, fällt Node 22+ auf `ipv4first` zurück.
- Wenn Ihr Host WSL2 ist oder ausdrücklich mit reinem IPv4-Verhalten besser funktioniert, erzwingen Sie die Family-Auswahl:
- Node 22+ setzt standardmäßig `autoSelectFamily=true` (außer WSL2). Die Telegram-DNS-Ergebnisreihenfolge berücksichtigt `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER`, dann `channels.telegram.network.dnsResultOrder`, dann den Prozessstandard wie `NODE_OPTIONS=--dns-result-order=ipv4first`; wenn nichts davon gilt, fällt Node 22+ auf `ipv4first` zurück.
- Wenn Ihr Host WSL2 ist oder ausdrücklich besser mit reinem IPv4-Verhalten funktioniert, erzwingen Sie die Family-Auswahl:
```yaml
channels:
@ -939,7 +940,7 @@ channels:
autoSelectFamily: false
```
- Antworten aus dem RFC-2544-Benchmark-Bereich (`198.18.0.0/15`) sind für Telegram-Mediendownloads standardmäßig bereits erlaubt. Wenn ein vertrauenswürdiger Fake-IP- oder transparenter Proxy `api.telegram.org` während Mediendownloads auf eine andere private/interne/Special-Use-Adresse umschreibt, können Sie den nur für Telegram geltenden Bypass aktivieren:
- Antworten aus dem RFC-2544-Benchmark-Bereich (`198.18.0.0/15`) sind für Telegram-Mediendownloads bereits standardmäßig erlaubt. Wenn ein vertrauenswürdiger Fake-IP- oder transparenter Proxy `api.telegram.org` während Mediendownloads auf eine andere private/interne/Special-Use-Adresse umschreibt, können Sie den nur für Telegram geltenden Bypass aktivieren:
```yaml
channels:
@ -950,24 +951,17 @@ channels:
- Dieselbe Opt-in-Option ist pro Konto unter
`channels.telegram.accounts.<accountId>.network.dangerouslyAllowPrivateNetwork` verfügbar.
- Wenn Ihr Proxy Telegram-Medienhosts in `198.18.x.x` auflöst, lassen Sie das
gefährliche Flag zunächst deaktiviert. Telegram-Medien erlauben den RFC-2544-
Benchmark-Bereich bereits standardmäßig.
- Wenn Ihr Proxy Telegram-Medienhosts zu `198.18.x.x` auflöst, lassen Sie das gefährliche Flag zunächst deaktiviert. Telegram-Medien erlauben den RFC-2544-Benchmark-Bereich bereits standardmäßig.
<Warning>
`channels.telegram.network.dangerouslyAllowPrivateNetwork` schwächt Telegram-
Medien-SSRF-Schutzmechanismen. Verwenden Sie es nur für vertrauenswürdige,
operatorgesteuerte Proxy-Umgebungen wie Clash-, Mihomo- oder Surge-Fake-IP-
Routing, wenn diese private oder Special-Use-Antworten außerhalb des RFC-2544-
Benchmark-Bereichs erzeugen. Lassen Sie es für normalen öffentlichen
Telegram-Zugriff über das Internet deaktiviert.
`channels.telegram.network.dangerouslyAllowPrivateNetwork` schwächt Telegram-Medien-SSRF-Schutzmaßnahmen. Verwenden Sie es nur für vertrauenswürdige, betreiberkontrollierte Proxy-Umgebungen wie Clash, Mihomo oder Surge-Fake-IP-Routing, wenn diese private oder Special-Use-Antworten außerhalb des RFC-2544-Benchmark-Bereichs synthetisieren. Lassen Sie es für normalen öffentlichen Internetzugriff auf Telegram deaktiviert.
</Warning>
- Umgebungs-Overrides (temporär):
- `OPENCLAW_TELEGRAM_DISABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_ENABLE_AUTO_SELECT_FAMILY=1`
- `OPENCLAW_TELEGRAM_DNS_RESULT_ORDER=ipv4first`
- DNS-Antworten prüfen:
- DNS-Antworten validieren:
```bash
dig +short api.telegram.org A
@ -977,23 +971,23 @@ dig +short api.telegram.org AAAA
</Accordion>
</AccordionGroup>
Weitere Hilfe: [Kanal-Fehlerbehebung](/de/channels/troubleshooting).
Weitere Hilfe: [Channel-Fehlerbehebung](/de/channels/troubleshooting).
## Konfigurationsreferenz
Primäre Referenz: [Konfigurationsreferenz - Telegram](/de/gateway/config-channels#telegram).
<Accordion title="Aussagekräftige Telegram-Felder">
<Accordion title="Telegram-Felder mit hoher Aussagekraft">
- Start/Authentifizierung: `enabled`, `botToken`, `tokenFile`, `accounts.*` (`tokenFile` muss auf eine reguläre Datei verweisen; Symlinks werden abgelehnt)
- Zugriffskontrolle: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, Top-Level-`bindings[]` (`type: "acp"`)
- Zugriffskontrolle: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`, `groups.*.topics.*`, `bindings[]` auf oberster Ebene (`type: "acp"`)
- Ausführungsgenehmigungen: `execApprovals`, `accounts.*.execApprovals`
- Befehl/Menü: `commands.native`, `commands.nativeSkills`, `customCommands`
- Threading/Antworten: `replyToMode`, `dm.threadReplies`, `direct.*.threadReplies`
- Threads/Antworten: `replyToMode`, `dm.threadReplies`, `direct.*.threadReplies`
- Streaming: `streaming` (Vorschau), `streaming.preview.toolProgress`, `blockStreaming`
- Formatierung/Zustellung: `textChunkLimit`, `chunkMode`, `linkPreview`, `responsePrefix`
- Medien/Netzwerk: `mediaMaxMb`, `mediaGroupFlushMs`, `timeoutSeconds`, `pollingStallThresholdMs`, `retry`, `network.autoSelectFamily`, `network.dangerouslyAllowPrivateNetwork`, `proxy`
- Benutzerdefinierte API-Root: `apiRoot` (nur Bot-API-Root; `/bot<TOKEN>` nicht einschließen)
- benutzerdefinierter API-Root: `apiRoot` (nur Bot-API-Root; schließen Sie `/bot<TOKEN>` nicht ein)
- Webhook: `webhookUrl`, `webhookSecret`, `webhookPath`, `webhookHost`
- Aktionen/Fähigkeiten: `capabilities.inlineButtons`, `actions.sendMessage|editMessage|deleteMessage|reactions|sticker`
- Reaktionen: `reactionNotifications`, `reactionLevel`
@ -1003,7 +997,7 @@ Primäre Referenz: [Konfigurationsreferenz - Telegram](/de/gateway/config-channe
</Accordion>
<Note>
Priorität bei mehreren Konten: Wenn zwei oder mehr Konto-IDs konfiguriert sind, legen Sie `channels.telegram.defaultAccount` fest (oder fügen Sie `channels.telegram.accounts.default` hinzu), um das Standard-Routing explizit zu machen. Andernfalls fällt OpenClaw auf die erste normalisierte Konto-ID zurück und `openclaw doctor` warnt. Benannte Konten erben `channels.telegram.allowFrom` / `groupAllowFrom`, aber keine `accounts.default.*`-Werte.
Multi-Account-Priorität: Wenn zwei oder mehr Konto-IDs konfiguriert sind, setzen Sie `channels.telegram.defaultAccount` (oder schließen Sie `channels.telegram.accounts.default` ein), um das Standard-Routing explizit zu machen. Andernfalls fällt OpenClaw auf die erste normalisierte Konto-ID zurück und `openclaw doctor` warnt. Benannte Konten erben `channels.telegram.allowFrom` / `groupAllowFrom`, aber keine Werte aus `accounts.default.*`.
</Note>
## Verwandt
@ -1015,16 +1009,16 @@ Priorität bei mehreren Konten: Wenn zwei oder mehr Konto-IDs konfiguriert sind,
<Card title="Gruppen" icon="users" href="/de/channels/groups">
Allowlist-Verhalten für Gruppen und Themen.
</Card>
<Card title="Kanal-Routing" icon="route" href="/de/channels/channel-routing">
Eingehende Nachrichten an Agenten weiterleiten.
<Card title="Channel-Routing" icon="route" href="/de/channels/channel-routing">
Leiten Sie eingehende Nachrichten an Agenten weiter.
</Card>
<Card title="Sicherheit" icon="shield" href="/de/gateway/security">
Bedrohungsmodell und Härtung.
</Card>
<Card title="Multi-Agent-Routing" icon="sitemap" href="/de/concepts/multi-agent">
Gruppen und Themen Agenten zuordnen.
Ordnen Sie Gruppen und Themen Agenten zu.
</Card>
<Card title="Fehlerbehebung" icon="wrench" href="/de/channels/troubleshooting">
Kanalübergreifende Diagnose.
Channel-übergreifende Diagnose.
</Card>
</CardGroup>

View File

@ -5,17 +5,17 @@ read_when:
summary: CLI-Referenz für `openclaw message` (Senden + Kanalaktionen)
title: Nachricht
x-i18n:
generated_at: "2026-05-02T20:44:15Z"
generated_at: "2026-05-04T09:37:01Z"
model: gpt-5.5
provider: openai
source_hash: 6b73a50da34838f80ad5d0d266f5c66f95436f8535e6312296ae022918b1ab55
source_hash: 9ef57d33c93206a61a6d044667de4faf6340f7d8cc324300f235e838ee3b7ff1
source_path: cli/message.md
workflow: 16
---
# `openclaw message`
Einzelner ausgehender Befehl zum Senden von Nachrichten und Kanalaktionen
Ein einzelner ausgehender Befehl zum Senden von Nachrichten und Kanalaktionen
(Discord/Google Chat/iMessage/Matrix/Mattermost (Plugin)/Microsoft Teams/Signal/Slack/Telegram/WhatsApp).
## Verwendung
@ -29,16 +29,16 @@ Kanalauswahl:
- `--channel` ist erforderlich, wenn mehr als ein Kanal konfiguriert ist.
- Wenn genau ein Kanal konfiguriert ist, wird er zum Standard.
- Werte: `discord|googlechat|imessage|matrix|mattermost|msteams|signal|slack|telegram|whatsapp` (Mattermost erfordert ein Plugin)
- `openclaw message` löst den ausgewählten Kanal zu seinem besitzenden Plugin auf, wenn `--channel` oder ein kanalpräfixiertes Ziel vorhanden ist; andernfalls lädt es konfigurierte Kanal-Plugins, um den Standardkanal abzuleiten.
- `openclaw message` löst den ausgewählten Kanal zum zugehörigen Plugin auf, wenn `--channel` oder ein Ziel mit Kanalpräfix vorhanden ist; andernfalls lädt es konfigurierte Kanal-Plugins für die Ableitung des Standardkanals.
Zielformate (`--target`):
- WhatsApp: E.164, Gruppen-JID oder WhatsApp Channel-/Newsletter-JID (`...@newsletter`)
- Telegram: Chat-ID oder `@username`
- WhatsApp: E.164, Gruppen-JID oder WhatsApp-Kanal-/Newsletter-JID (`...@newsletter`)
- Telegram: Chat-ID, `@username` oder Forum-Themenziel (`-1001234567890:topic:42` oder `--thread-id 42`)
- Discord: `channel:<id>` oder `user:<id>` (oder `<@id>`-Erwähnung; rohe numerische IDs werden als Kanäle behandelt)
- Google Chat: `spaces/<spaceId>` oder `users/<userId>`
- Slack: `channel:<id>` oder `user:<id>` (rohe Kanal-ID wird akzeptiert)
- Mattermost (Plugin): `channel:<id>`, `user:<id>` oder `@username` (bloße IDs werden als Kanäle behandelt)
- Mattermost (Plugin): `channel:<id>`, `user:<id>` oder `@username` (IDs ohne Präfix werden als Kanäle behandelt)
- Signal: `+E.164`, `group:<id>`, `signal:+E.164`, `signal:group:<id>` oder `username:<name>`/`u:<name>`
- iMessage: Handle, `chat_id:<id>`, `chat_guid:<guid>` oder `chat_identifier:<id>`
- Matrix: `@user:server`, `!room:server` oder `#alias:server`
@ -47,13 +47,13 @@ Zielformate (`--target`):
Namenssuche:
- Für unterstützte Provider (Discord/Slack/usw.) werden Kanalnamen wie `Help` oder `#help` über den Verzeichnis-Cache aufgelöst.
- Bei einem Cache-Fehltreffer versucht OpenClaw eine Live-Verzeichnissuche, wenn der Provider dies unterstützt.
- Bei einem Cache-Fehltreffer versucht OpenClaw eine Live-Verzeichnissuche, wenn der Provider sie unterstützt.
## Häufige Flags
## Häufig verwendete Flags
- `--channel <name>`
- `--account <id>`
- `--target <dest>` (Zielkanal oder Benutzer für send/poll/read/usw.)
- `--target <dest>` (Zielkanal oder -benutzer für Senden/Abfragen/Lesen/usw.)
- `--targets <name>` (wiederholbar; nur Broadcast)
- `--json`
- `--dry-run`
@ -62,12 +62,12 @@ Namenssuche:
## SecretRef-Verhalten
- `openclaw message` löst unterstützte Kanal-SecretRefs auf, bevor die ausgewählte Aktion ausgeführt wird.
- Die Auflösung ist, wenn möglich, auf das aktive Aktionsziel beschränkt:
- kanalbezogen, wenn `--channel` gesetzt ist (oder aus präfixierten Zielen wie `discord:...` abgeleitet)
- kontobezogen, wenn `--account` gesetzt ist (globale Kanalwerte + ausgewählte Kontooberflächen)
- wenn `--account` ausgelassen wird, erzwingt OpenClaw keinen `default`-Konto-SecretRef-Scope
- Nicht aufgelöste SecretRefs in nicht zusammenhängenden Kanälen blockieren keine gezielte Nachrichtenaktion.
- Wenn der ausgewählte Kanal-/Konto-SecretRef nicht aufgelöst ist, schlägt der Befehl für diese Aktion geschlossen fehl.
- Die Auflösung ist nach Möglichkeit auf das aktive Aktionsziel beschränkt:
- kanalbezogen, wenn `--channel` gesetzt ist (oder aus Zielen mit Präfix wie `discord:...` abgeleitet wird)
- kontobezogen, wenn `--account` gesetzt ist (kanalweite Globals + ausgewählte Kontooberflächen)
- wenn `--account` weggelassen wird, erzwingt OpenClaw keinen SecretRef-Scope für ein `default`-Konto
- Nicht aufgelöste SecretRefs in nicht verwandten Kanälen blockieren eine zielgerichtete Nachrichtenaktion nicht.
- Wenn die SecretRef des ausgewählten Kanals/Kontos nicht aufgelöst ist, schlägt der Befehl für diese Aktion geschlossen fehl.
## Aktionen
@ -75,15 +75,15 @@ Namenssuche:
- `send`
- Kanäle: WhatsApp/Telegram/Discord/Google Chat/Slack/Mattermost (Plugin)/Signal/iMessage/Matrix/Microsoft Teams
- Erforderlich: `--target` sowie `--message`, `--media` oder `--presentation`
- Erforderlich: `--target` plus `--message`, `--media` oder `--presentation`
- Optional: `--media`, `--presentation`, `--delivery`, `--pin`, `--reply-to`, `--thread-id`, `--gif-playback`, `--force-document`, `--silent`
- Gemeinsame Präsentations-Payloads: `--presentation` sendet semantische Blöcke (`text`, `context`, `divider`, `buttons`, `select`), die der Kern über die deklarierten Fähigkeiten des ausgewählten Kanals rendert. Siehe [Nachrichtenpräsentation](/de/plugins/message-presentation).
- Generische Zustellpräferenzen: `--delivery` akzeptiert Zustellhinweise wie `{ "pin": true }`; `--pin` ist eine Kurzform für angeheftete Zustellung, wenn der Kanal dies unterstützt.
- Geteilte Präsentations-Payloads: `--presentation` sendet semantische Blöcke (`text`, `context`, `divider`, `buttons`, `select`), die der Kern über die deklarierten Fähigkeiten des ausgewählten Kanals rendert. Siehe [Nachrichtenpräsentation](/de/plugins/message-presentation).
- Allgemeine Zustellpräferenzen: `--delivery` akzeptiert Zustellhinweise wie `{ "pin": true }`; `--pin` ist eine Kurzform für angeheftete Zustellung, wenn der Kanal sie unterstützt.
- Nur Telegram: `--force-document` (Bilder und GIFs als Dokumente senden, um Telegram-Komprimierung zu vermeiden)
- Nur Telegram: `--thread-id` (Forum-Themen-ID)
- Nur Slack: `--thread-id` (Thread-Zeitstempel; `--reply-to` verwendet dasselbe Feld)
- Telegram + Discord: `--silent`
- Nur WhatsApp: `--gif-playback`; WhatsApp Channels/Newsletter werden mit ihrer nativen `@newsletter`-JID adressiert.
- Nur WhatsApp: `--gif-playback`; WhatsApp-Kanäle/-Newsletter werden mit ihrer nativen `@newsletter`-JID adressiert.
- `poll`
- Kanäle: WhatsApp/Telegram/Discord/Matrix/Microsoft Teams
@ -96,7 +96,7 @@ Namenssuche:
- Kanäle: Discord/Google Chat/Slack/Telegram/WhatsApp/Signal/Matrix
- Erforderlich: `--message-id`, `--target`
- Optional: `--emoji`, `--remove`, `--participant`, `--from-me`, `--target-author`, `--target-author-uuid`
- Hinweis: `--remove` erfordert `--emoji` (`--emoji` weglassen, um eigene Reaktionen zu löschen, sofern unterstützt; siehe /tools/reactions)
- Hinweis: `--remove` erfordert `--emoji` (`--emoji` weglassen, um eigene Reaktionen zu entfernen, sofern unterstützt; siehe /tools/reactions)
- Nur WhatsApp: `--participant`, `--from-me`
- Signal-Gruppenreaktionen: `--target-author` oder `--target-author-uuid` erforderlich
@ -109,7 +109,7 @@ Namenssuche:
- Kanäle: Discord/Slack/Matrix
- Erforderlich: `--target`
- Optional: `--limit`, `--message-id`, `--before`, `--after`
- Nur Slack: `--message-id` liest einen bestimmten Slack-Nachrichtenzeitstempel; kombinieren Sie dies mit `--thread-id`, um eine exakte Thread-Antwort zu lesen.
- Nur Slack: `--message-id` liest einen bestimmten Slack-Nachrichtenzeitstempel; mit `--thread-id` kombinieren, um eine exakte Thread-Antwort zu lesen.
- Nur Discord: `--around`
- `edit`
@ -177,7 +177,7 @@ Namenssuche:
- Kanäle: Discord
- Erforderlich: `--guild-id`, `--sticker-name`, `--sticker-desc`, `--sticker-tags`, `--media`
### Rollen / Kanäle / Mitglieder / Voice
### Rollen / Kanäle / Mitglieder / Sprache
- `role info` (Discord): `--guild-id`
- `role add` / `role remove` (Discord): `--guild-id`, `--user-id`, `--role-id`
@ -194,7 +194,7 @@ Namenssuche:
### Moderation (Discord)
- `timeout`: `--guild-id`, `--user-id` (optional `--duration-min` oder `--until`; lassen Sie beide weg, um das Timeout zu löschen)
- `timeout`: `--guild-id`, `--user-id` (optional `--duration-min` oder `--until`; beides weglassen, um Timeout zu entfernen)
- `kick`: `--guild-id`, `--user-id` (+ `--reason`)
- `ban`: `--guild-id`, `--user-id` (+ `--delete-days`, `--reason`)
- `timeout` unterstützt auch `--reason`
@ -223,7 +223,7 @@ openclaw message send --channel discord \
--presentation '{"blocks":[{"type":"buttons","buttons":[{"label":"Approve","value":"approve","style":"success"},{"label":"Decline","value":"decline","style":"danger"}]}]}'
```
Der Kern rendert dieselbe `presentation`-Payload je nach Kanalfähigkeit in Discord-Komponenten, Slack-Blöcke, Telegram-Inline-Buttons, Mattermost-Props oder Teams-/Feishu-Karten. Siehe [Nachrichtenpräsentation](/de/plugins/message-presentation) für den vollständigen Vertrag und die Fallback-Regeln.
Der Kern rendert dieselbe `presentation`-Payload je nach Kanalfähigkeit in Discord-Komponenten, Slack-Blöcke, Telegram-Inline-Buttons, Mattermost-Props oder Teams-/Feishu-Karten. Siehe [Nachrichtenpräsentation](/de/plugins/message-presentation) für den vollständigen Vertrag und Fallback-Regeln.
Eine reichhaltigere Präsentations-Payload senden:
@ -243,7 +243,7 @@ openclaw message poll --channel discord \
--poll-multi --poll-duration-hours 48
```
Eine Telegram-Umfrage erstellen (automatisch nach 2 Minuten schließen):
Eine Telegram-Umfrage erstellen (automatisch in 2 Minuten schließen):
```
openclaw message poll --channel telegram \
@ -309,4 +309,4 @@ openclaw message send --channel telegram --target @mychat \
## Verwandt
- [CLI-Referenz](/de/cli)
- [Agent send](/de/tools/agent-send)
- [Agent senden](/de/tools/agent-send)

View File

@ -6,31 +6,31 @@ sidebarTitle: Plugins
summary: CLI-Referenz für `openclaw plugins` (list, install, marketplace, uninstall, enable/disable, doctor)
title: Plugins
x-i18n:
generated_at: "2026-05-04T06:41:24Z"
generated_at: "2026-05-04T09:37:07Z"
model: gpt-5.5
provider: openai
source_hash: 36ae7edb12986ead7e126f25e0761bf312b2644b35017181b674082105886776
source_hash: f561ce098181b07f25db3520b1726162863469ac05fb4a3e786915257d97c9a4
source_path: cli/plugins.md
workflow: 16
---
Verwalten Sie Gateway-Plugins, Hook-Packs und kompatible Bundles.
Verwalten Sie Gateway-Plugins, Hook-Pakete und kompatible Bundles.
<CardGroup cols={2}>
<Card title="Plugin-System" href="/de/tools/plugin">
Leitfaden für Endbenutzer zum Installieren, Aktivieren und Beheben von Problemen mit Plugins.
<Card title="Plugin system" href="/de/tools/plugin">
Endbenutzerleitfaden zum Installieren, Aktivieren und Beheben von Problemen mit Plugins.
</Card>
<Card title="Plugins verwalten" href="/de/plugins/manage-plugins">
<Card title="Manage plugins" href="/de/plugins/manage-plugins">
Kurze Beispiele für Installation, Auflisten, Aktualisierung, Deinstallation und Veröffentlichung.
</Card>
<Card title="Plugin-Bundles" href="/de/plugins/bundles">
<Card title="Plugin bundles" href="/de/plugins/bundles">
Bundle-Kompatibilitätsmodell.
</Card>
<Card title="Plugin-Manifest" href="/de/plugins/manifest">
Manifest-Felder und Konfigurationsschema.
<Card title="Plugin manifest" href="/de/plugins/manifest">
Manifestfelder und Konfigurationsschema.
</Card>
<Card title="Sicherheit" href="/de/gateway/security">
Sicherheits-Härtung für Plugin-Installationen.
<Card title="Security" href="/de/gateway/security">
Sicherheitshärtung für Plugin-Installationen.
</Card>
</CardGroup>
@ -62,14 +62,16 @@ openclaw plugins marketplace list <marketplace>
openclaw plugins marketplace list <marketplace> --json
```
Führen Sie zur Untersuchung langsamer Installations-, Inspektions-, Deinstallations- oder Registry-Aktualisierungsvorgänge den Befehl mit `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1` aus. Der Trace schreibt Phasen-Timings nach stderr und hält die JSON-Ausgabe parsebar. Siehe [Debugging](/de/help/debugging#plugin-lifecycle-trace).
Führen Sie zur Untersuchung langsamer Installations-, Prüf-, Deinstallations- oder Registry-Aktualisierungsvorgänge den
Befehl mit `OPENCLAW_PLUGIN_LIFECYCLE_TRACE=1` aus. Der Trace schreibt Phasen-Timings
nach stderr und hält die JSON-Ausgabe parsebar. Siehe [Debugging](/de/help/debugging#plugin-lifecycle-trace).
<Note>
Gebündelte Plugins werden mit OpenClaw ausgeliefert. Einige sind standardmäßig aktiviert (zum Beispiel gebündelte Modell-Provider, gebündelte Sprach-Provider und das gebündelte Browser-Plugin); andere erfordern `plugins enable`.
Native OpenClaw-Plugins müssen `openclaw.plugin.json` mit einem Inline-JSON-Schema (`configSchema`, auch wenn leer) ausliefern. Kompatible Bundles verwenden stattdessen ihre eigenen Bundle-Manifeste.
`plugins list` zeigt `Format: openclaw` oder `Format: bundle`. Die ausführliche Listen-/Info-Ausgabe zeigt außerdem den Bundle-Untertyp (`codex`, `claude` oder `cursor`) sowie erkannte Bundle-Fähigkeiten.
`plugins list` zeigt `Format: openclaw` oder `Format: bundle`. Ausführliche list/info-Ausgaben zeigen außerdem den Bundle-Subtyp (`codex`, `claude` oder `cursor`) sowie erkannte Bundle-Funktionen.
</Note>
### Installieren
@ -91,60 +93,68 @@ openclaw plugins install <plugin> --marketplace https://github.com/<owner>/<repo
```
<Warning>
Bloße Paketnamen installieren während der Launch-Umstellung standardmäßig aus npm. Verwenden Sie `clawhub:<package>` für ClawHub. Behandeln Sie Plugin-Installationen wie das Ausführen von Code. Bevorzugen Sie angeheftete Versionen.
Reine Paketnamen werden während der Launch-Umstellung standardmäßig von npm installiert. Verwenden Sie `clawhub:<package>` für ClawHub. Behandeln Sie Plugin-Installationen wie das Ausführen von Code. Bevorzugen Sie gepinnte Versionen.
</Warning>
`plugins search` fragt ClawHub nach installierbaren Plugin-Paketen ab und gibt installierbare Paketnamen aus. Es sucht Code-Plugin- und Bundle-Plugin-Pakete, keine Skills. Verwenden Sie `openclaw skills search` für ClawHub-Skills.
`plugins search` fragt ClawHub nach installierbaren Plugin-Paketen ab und gibt
installationsbereite Paketnamen aus. Es sucht Code-Plugin- und Bundle-Plugin-Pakete,
keine Skills. Verwenden Sie `openclaw skills search` für ClawHub-Skills.
<Note>
ClawHub ist die primäre Distributions- und Discovery-Oberfläche für die meisten Plugins. Npm bleibt ein unterstützter Fallback und Direktinstallationspfad. OpenClaw-eigene `@openclaw/*`-Plugin-Pakete werden wieder auf npm veröffentlicht; die aktuelle Liste finden Sie auf [npmjs.com/org/openclaw](https://www.npmjs.com/org/openclaw) oder im [Plugin-Inventar](/de/plugins/plugin-inventory). Stabile Installationen verwenden `latest`. Installationen und Aktualisierungen im Beta-Kanal bevorzugen das npm-`beta`-Dist-Tag, wenn dieses Tag verfügbar ist, und fallen anschließend auf `latest` zurück.
ClawHub ist die primäre Distributions- und Discovery-Oberfläche für die meisten Plugins. Npm
bleibt ein unterstützter Fallback- und Direktinstallationspfad. OpenClaw-eigene
`@openclaw/*`-Plugin-Pakete werden wieder auf npm veröffentlicht; die aktuelle Liste finden Sie
auf [npmjs.com/org/openclaw](https://www.npmjs.com/org/openclaw) oder im
[Plugin-Inventar](/de/plugins/plugin-inventory). Stabile Installationen verwenden `latest`.
Beta-Channel-Installationen und -Updates bevorzugen den npm-`beta`-Dist-Tag, wenn dieses Tag
verfügbar ist, und fallen dann auf `latest` zurück.
</Note>
<AccordionGroup>
<Accordion title="Konfigurations-Includes und Reparatur ungültiger Konfiguration">
Wenn Ihr Abschnitt `plugins` durch ein einzeldateibasiertes `$include` gestützt wird, schreiben `plugins install/update/enable/disable/uninstall` in diese eingebundene Datei durch und lassen `openclaw.json` unverändert. Root-Includes, Include-Arrays und Includes mit benachbarten Overrides schlagen geschlossen fehl, statt flach zusammengeführt zu werden. Siehe [Konfigurations-Includes](/de/gateway/configuration) für die unterstützten Formen.
<Accordion title="Config includes and invalid-config repair">
Wenn Ihr Abschnitt `plugins` durch ein einzelnes Datei-`$include` gestützt wird, schreiben `plugins install/update/enable/disable/uninstall` in diese eingebundene Datei durch und lassen `openclaw.json` unverändert. Root-Includes, Include-Arrays und Includes mit danebenliegenden Überschreibungen scheitern geschlossen, statt abgeflacht zu werden. Siehe [Config-Includes](/de/gateway/configuration) für die unterstützten Formen.
Wenn die Konfiguration während der Installation ungültig ist, schlägt `plugins install` normalerweise geschlossen fehl und weist Sie an, zuerst `openclaw doctor --fix` auszuführen. Beim Gateway-Start und Hot Reload schlägt ungültige Plugin-Konfiguration wie jede andere ungültige Konfiguration geschlossen fehl; `openclaw doctor --fix` kann den ungültigen Plugin-Eintrag quarantänisieren. Die einzige dokumentierte Ausnahme zur Installationszeit ist ein enger Wiederherstellungspfad für gebündelte Plugins, die sich ausdrücklich für `openclaw.install.allowInvalidConfigRecovery` entscheiden.
Wenn die Konfiguration während der Installation ungültig ist, scheitert `plugins install` normalerweise geschlossen und fordert Sie auf, zuerst `openclaw doctor --fix` auszuführen. Beim Gateway-Start und Hot Reload scheitert ungültige Plugin-Konfiguration geschlossen wie jede andere ungültige Konfiguration; `openclaw doctor --fix` kann den ungültigen Plugin-Eintrag isolieren. Die einzige dokumentierte Ausnahme zur Installationszeit ist ein enger Wiederherstellungspfad für gebündelte Plugins, die sich explizit für `openclaw.install.allowInvalidConfigRecovery` entscheiden.
</Accordion>
<Accordion title="--force und Neuinstallation gegenüber Aktualisierung">
`--force` verwendet das vorhandene Installationsziel wieder und überschreibt ein bereits installiertes Plugin oder Hook-Pack direkt. Verwenden Sie es, wenn Sie absichtlich dieselbe ID aus einem neuen lokalen Pfad, Archiv, ClawHub-Paket oder npm-Artefakt neu installieren. Für routinemäßige Upgrades eines bereits nachverfolgten npm-Plugins bevorzugen Sie `openclaw plugins update <id-or-npm-spec>`.
<Accordion title="--force and reinstall vs update">
`--force` verwendet das vorhandene Installationsziel wieder und überschreibt ein bereits installiertes Plugin oder Hook-Paket direkt. Verwenden Sie es, wenn Sie dieselbe ID bewusst von einem neuen lokalen Pfad, Archiv, ClawHub-Paket oder npm-Artefakt neu installieren. Für routinemäßige Upgrades eines bereits verfolgten npm-Plugins bevorzugen Sie `openclaw plugins update <id-or-npm-spec>`.
Wenn Sie `plugins install` für eine Plugin-ID ausführen, die bereits installiert ist, stoppt OpenClaw und verweist Sie für ein normales Upgrade auf `plugins update <id-or-npm-spec>` oder auf `plugins install <package> --force`, wenn Sie die aktuelle Installation wirklich aus einer anderen Quelle überschreiben möchten.
</Accordion>
<Accordion title="--pin-Geltungsbereich">
`--pin` gilt nur für npm-Installationen. Es wird bei `git:`-Installationen nicht unterstützt; verwenden Sie eine explizite Git-Referenz wie `git:github.com/acme/plugin@v1.2.3`, wenn Sie eine angeheftete Quelle möchten. Es wird bei `--marketplace` nicht unterstützt, weil Marketplace-Installationen Marketplace-Quellmetadaten statt einer npm-Spezifikation speichern.
<Accordion title="--pin scope">
`--pin` gilt nur für npm-Installationen. Es wird mit `git:`-Installationen nicht unterstützt; verwenden Sie eine explizite Git-Referenz wie `git:github.com/acme/plugin@v1.2.3`, wenn Sie eine gepinnte Quelle möchten. Es wird mit `--marketplace` nicht unterstützt, weil Marketplace-Installationen Marketplace-Quellmetadaten statt einer npm-Spezifikation speichern.
</Accordion>
<Accordion title="--dangerously-force-unsafe-install">
`--dangerously-force-unsafe-install` ist eine Break-Glass-Option für False Positives im integrierten Dangerous-Code-Scanner. Sie lässt die Installation fortfahren, auch wenn der integrierte Scanner `critical`-Funde meldet, umgeht aber **nicht** Richtlinienblöcke von Plugin-`before_install`-Hooks und umgeht **nicht** Scan-Fehler.
`--dangerously-force-unsafe-install` ist eine Notfalloption für falsch positive Treffer im integrierten Scanner für gefährlichen Code. Sie erlaubt, dass die Installation fortgesetzt wird, auch wenn der integrierte Scanner `critical`-Befunde meldet, umgeht aber **keine** Plugin-`before_install`-Hook-Richtlinienblöcke und umgeht **keine** Scanfehler.
Dieses CLI-Flag gilt für Plugin-Installations-/Aktualisierungsabläufe. Gateway-gestützte Skill-Abhängigkeitsinstallationen verwenden den passenden Request-Override `dangerouslyForceUnsafeInstall`, während `openclaw skills install` ein separater ClawHub-Skill-Download-/Installationsablauf bleibt.
Dieses CLI-Flag gilt für Plugin-Installations-/Update-Abläufe. Gateway-gestützte Installationen von Skill-Abhängigkeiten verwenden die entsprechende `dangerouslyForceUnsafeInstall`-Request-Überschreibung, während `openclaw skills install` ein separater ClawHub-Skill-Download-/Installationsablauf bleibt.
Wenn ein von Ihnen auf ClawHub veröffentlichtes Plugin durch einen Registry-Scan blockiert wird, verwenden Sie die Publisher-Schritte unter [ClawHub](/de/tools/clawhub).
Wenn ein von Ihnen auf ClawHub veröffentlichtes Plugin durch einen Registry-Scan blockiert wird, verwenden Sie die Publisher-Schritte in [ClawHub](/de/tools/clawhub).
</Accordion>
<Accordion title="Hook-Packs und npm-Spezifikationen">
`plugins install` ist auch die Installationsoberfläche für Hook-Packs, die `openclaw.hooks` in `package.json` bereitstellen. Verwenden Sie `openclaw hooks` für gefilterte Hook-Sichtbarkeit und Aktivierung pro Hook, nicht für die Paketinstallation.
<Accordion title="Hook packs and npm specs">
`plugins install` ist auch die Installationsoberfläche für Hook-Pakete, die `openclaw.hooks` in `package.json` bereitstellen. Verwenden Sie `openclaw hooks` für gefilterte Hook-Sichtbarkeit und Aktivierung einzelner Hooks, nicht für die Paketinstallation.
Npm-Spezifikationen sind **nur Registry** (Paketname + optionale **exakte Version** oder **Dist-Tag**). Git-/URL-/Datei-Spezifikationen und Semver-Bereiche werden abgelehnt. Abhängigkeitsinstallationen laufen aus Sicherheitsgründen projektlokal mit `--ignore-scripts`, selbst wenn Ihre Shell globale npm-Installationseinstellungen hat.
Npm-Spezifikationen sind **nur Registry** (Paketname + optionale **exakte Version** oder **Dist-Tag**). Git-/URL-/Dateispezifikationen und Semver-Bereiche werden abgelehnt. Abhängigkeitsinstallationen laufen aus Sicherheitsgründen projektlokal mit `--ignore-scripts`, selbst wenn Ihre Shell globale npm-Installationseinstellungen hat.
Verwenden Sie `npm:<package>`, wenn Sie die npm-Auflösung explizit machen möchten. Bloße Paketspezifikationen installieren während der Launch-Umstellung ebenfalls direkt aus npm.
Verwenden Sie `npm:<package>`, wenn Sie die npm-Auflösung explizit machen möchten. Reine Paketspezifikationen werden während der Launch-Umstellung ebenfalls direkt von npm installiert.
Bloße Spezifikationen und `@latest` bleiben auf dem stabilen Track. OpenClaw-datumsstempelte Korrekturversionen wie `2026.5.3-1` sind für diese Prüfung stabile Releases. Wenn npm eine davon zu einem Prerelease auflöst, stoppt OpenClaw und fordert Sie auf, sich ausdrücklich mit einem Prerelease-Tag wie `@beta`/`@rc` oder einer exakten Prerelease-Version wie `@1.2.3-beta.4` dafür zu entscheiden.
Reine Spezifikationen und `@latest` bleiben auf dem stabilen Track. Datumsstempel-Korrekturversionen von OpenClaw wie `2026.5.3-1` sind für diese Prüfung stabile Releases. Wenn npm eine davon zu einem Prerelease auflöst, stoppt OpenClaw und fordert Sie auf, sich explizit mit einem Prerelease-Tag wie `@beta`/`@rc` oder einer exakten Prerelease-Version wie `@1.2.3-beta.4` zu entscheiden.
Wenn eine bloße Installationsspezifikation mit einer offiziellen Plugin-ID übereinstimmt (zum Beispiel `diffs`), installiert OpenClaw den Katalogeintrag direkt. Um ein npm-Paket mit demselben Namen zu installieren, verwenden Sie eine explizite scoped Spezifikation (zum Beispiel `@scope/diffs`).
Wenn eine reine Installationsspezifikation mit einer offiziellen Plugin-ID übereinstimmt (zum Beispiel `diffs`), installiert OpenClaw den Katalogeintrag direkt. Um ein npm-Paket mit demselben Namen zu installieren, verwenden Sie eine explizite scoped Spezifikation (zum Beispiel `@scope/diffs`).
</Accordion>
<Accordion title="Git-Repositorys">
<Accordion title="Git repositories">
Verwenden Sie `git:<repo>`, um direkt aus einem Git-Repository zu installieren. Unterstützte Formen umfassen `git:github.com/owner/repo`, `git:owner/repo`, vollständige `https://`-, `ssh://`-, `git://`-, `file://`- und `git@host:owner/repo.git`-Clone-URLs. Fügen Sie `@<ref>` oder `#<ref>` hinzu, um vor der Installation einen Branch, ein Tag oder einen Commit auszuchecken.
Git-Installationen klonen in ein temporäres Verzeichnis, checken die angeforderte Referenz aus, wenn vorhanden, und verwenden dann den normalen Plugin-Verzeichnis-Installer. Das bedeutet, dass Manifest-Validierung, Dangerous-Code-Scanning, Paketmanager-Installationsarbeit und Installationsdatensätze sich wie bei npm-Installationen verhalten. Aufgezeichnete Git-Installationen enthalten die Quell-URL/-Referenz sowie den aufgelösten Commit, damit `openclaw plugins update` die Quelle später erneut auflösen kann.
Git-Installationen klonen in ein temporäres Verzeichnis, checken die angeforderte Referenz aus, wenn vorhanden, und verwenden dann den normalen Plugin-Verzeichnisinstaller. Das bedeutet, dass Manifestvalidierung, Scan auf gefährlichen Code, Paketmanager-Installationsarbeit und Installationsdatensätze sich wie bei npm-Installationen verhalten. Aufgezeichnete Git-Installationen enthalten die Quell-URL/Referenz sowie den aufgelösten Commit, damit `openclaw plugins update` die Quelle später erneut auflösen kann.
Verwenden Sie nach der Installation aus Git `openclaw plugins inspect <id> --runtime --json`, um Runtime-Registrierungen wie Gateway-Methoden und CLI-Befehle zu prüfen. Wenn das Plugin mit `api.registerCli` einen CLI-Root registriert hat, führen Sie diesen Befehl direkt über die OpenClaw-Root-CLI aus, zum Beispiel `openclaw demo-plugin ping`.
Verwenden Sie nach der Installation aus Git `openclaw plugins inspect <id> --runtime --json`, um Laufzeitregistrierungen wie Gateway-Methoden und CLI-Befehle zu prüfen. Wenn das Plugin eine CLI-Root mit `api.registerCli` registriert hat, führen Sie diesen Befehl direkt über die OpenClaw-Root-CLI aus, zum Beispiel `openclaw demo-plugin ping`.
</Accordion>
<Accordion title="Archive">
<Accordion title="Archives">
Unterstützte Archive: `.zip`, `.tgz`, `.tar.gz`, `.tar`. Native OpenClaw-Plugin-Archive müssen ein gültiges `openclaw.plugin.json` im extrahierten Plugin-Root enthalten; Archive, die nur `package.json` enthalten, werden abgelehnt, bevor OpenClaw Installationsdatensätze schreibt.
Claude-Marketplace-Installationen werden ebenfalls unterstützt.
@ -159,25 +169,25 @@ openclaw plugins install clawhub:openclaw-codex-app-server
openclaw plugins install clawhub:openclaw-codex-app-server@1.2.3
```
Bloße npm-sichere Plugin-Spezifikationen installieren während der Launch-Umstellung standardmäßig aus npm:
Reine npm-sichere Plugin-Spezifikationen werden während der Launch-Umstellung standardmäßig von npm installiert:
```bash
openclaw plugins install openclaw-codex-app-server
```
Verwenden Sie `npm:`, um die reine npm-Auflösung explizit zu machen:
Verwenden Sie `npm:`, um die npm-only-Auflösung explizit zu machen:
```bash
openclaw plugins install npm:openclaw-codex-app-server
openclaw plugins install npm:@scope/plugin-name@1.0.1
```
OpenClaw prüft vor der Installation die beworbene Plugin-API-/Mindest-Gateway-Kompatibilität. Wenn die ausgewählte ClawHub-Version ein ClawPack-Artefakt veröffentlicht, lädt OpenClaw das versionierte npm-Pack-`.tgz` herunter, verifiziert den ClawHub-Digest-Header und den Artefakt-Digest und installiert es dann über den normalen Archivpfad. Ältere ClawHub-Versionen ohne ClawPack-Metadaten installieren weiterhin über den Legacy-Paketarchiv-Verifizierungspfad. Aufgezeichnete Installationen behalten ihre ClawHub-Quellmetadaten, Artefaktart, npm-Integrität, npm-Shasum, Tarball-Namen und ClawPack-Digest-Fakten für spätere Aktualisierungen.
Unversionierte ClawHub-Installationen behalten eine unversionierte aufgezeichnete Spezifikation, damit `openclaw plugins update` neueren ClawHub-Releases folgen kann; explizite Versions- oder Tag-Selektoren wie `clawhub:pkg@1.2.3` und `clawhub:pkg@beta` bleiben an diesen Selektor angeheftet.
OpenClaw prüft vor der Installation die angekündigte Plugin-API-/Mindest-Gateway-Kompatibilität. Wenn die ausgewählte ClawHub-Version ein ClawPack-Artefakt veröffentlicht, lädt OpenClaw das versionierte npm-Pack-`.tgz` herunter, verifiziert den ClawHub-Digest-Header und den Artefakt-Digest und installiert es dann über den normalen Archivpfad. Ältere ClawHub-Versionen ohne ClawPack-Metadaten werden weiterhin über den Legacy-Paketarchiv-Verifizierungspfad installiert. Aufgezeichnete Installationen behalten ihre ClawHub-Quellmetadaten, Artefaktart, npm-Integrität, npm-shasum, Tarball-Namen und ClawPack-Digest-Fakten für spätere Updates.
Unversionierte ClawHub-Installationen behalten eine unversionierte aufgezeichnete Spezifikation, damit `openclaw plugins update` neueren ClawHub-Releases folgen kann; explizite Versions- oder Tag-Selektoren wie `clawhub:pkg@1.2.3` und `clawhub:pkg@beta` bleiben an diesen Selektor gepinnt.
#### Marketplace-Kurzform
Verwenden Sie die Kurzform `plugin@marketplace`, wenn der Marketplace-Name in Claudes lokalem Registry-Cache unter `~/.claude/plugins/known_marketplaces.json` existiert:
Verwenden Sie die Kurzform `plugin@marketplace`, wenn der Marketplace-Name in Claudes lokalem Registry-Cache unter `~/.claude/plugins/known_marketplaces.json` vorhanden ist:
```bash
openclaw plugins marketplace list <marketplace-name>
@ -195,15 +205,15 @@ openclaw plugins install <plugin-name> --marketplace ./my-marketplace
<Tabs>
<Tab title="Marketplace-Quellen">
- ein Claude-bekannter Marketplace-Name aus `~/.claude/plugins/known_marketplaces.json`
- ein lokaler Marketplace-Root oder `marketplace.json`-Pfad
- eine GitHub-Repo-Kurzform wie `owner/repo`
- ein Claude-Name eines bekannten Marketplace aus `~/.claude/plugins/known_marketplaces.json`
- ein lokaler Marketplace-Stamm oder ein `marketplace.json`-Pfad
- eine GitHub-Repo-Kurzschreibweise wie `owner/repo`
- eine GitHub-Repo-URL wie `https://github.com/owner/repo`
- eine Git-URL
</Tab>
<Tab title="Regeln für Remote-Marketplaces">
Für Remote-Marketplaces, die von GitHub oder Git geladen werden, müssen Plugin-Einträge innerhalb des geklonten Marketplace-Repos bleiben. OpenClaw akzeptiert relative Pfadquellen aus diesem Repo und lehnt HTTP(S)-, absolute Pfad-, Git-, GitHub- und andere Nicht-Pfad-Plugin-Quellen aus Remote-Manifesten ab.
Bei Remote-Marketplaces, die aus GitHub oder Git geladen werden, müssen Plugin-Einträge innerhalb des geklonten Marketplace-Repos bleiben. OpenClaw akzeptiert relative Pfadquellen aus diesem Repo und weist HTTP(S)-, absolute Pfad-, Git-, GitHub- und andere Nicht-Pfad-Plugin-Quellen aus Remote-Manifesten zurück.
</Tab>
</Tabs>
@ -215,7 +225,7 @@ Für lokale Pfade und Archive erkennt OpenClaw automatisch:
- Cursor-kompatible Bundles (`.cursor-plugin/plugin.json`)
<Note>
Kompatible Bundles werden im normalen Plugin-Root installiert und nehmen am selben Ablauf für Auflisten/Info/Aktivieren/Deaktivieren teil. Derzeit werden Bundle-Skills, Claude-Befehl-Skills, Claude-`settings.json`-Standards, Claude-`.lsp.json`- / manifestdeklarierte `lspServers`-Standards, Cursor-Befehl-Skills und kompatible Codex-Hook-Verzeichnisse unterstützt; andere erkannte Bundle-Fähigkeiten werden in Diagnose/Info angezeigt, sind aber noch nicht in die Runtime-Ausführung eingebunden.
Kompatible Bundles werden im normalen Plugin-Stamm installiert und nehmen am selben Ablauf für Auflisten/Info/Aktivieren/Deaktivieren teil. Heute werden Bundle-Skills, Claude-Command-Skills, Standardwerte aus Claude-`settings.json`, Standardwerte aus Claude-`.lsp.json` / per Manifest deklarierte `lspServers`, Cursor-Command-Skills und kompatible Codex-Hook-Verzeichnisse unterstützt; andere erkannte Bundle-Fähigkeiten werden in Diagnose/Info angezeigt, sind aber noch nicht in die Laufzeitausführung eingebunden.
</Note>
### Auflisten
@ -234,57 +244,52 @@ openclaw plugins search <query> --json
Nur aktivierte Plugins anzeigen.
</ParamField>
<ParamField path="--verbose" type="boolean">
Von der Tabellenansicht zu Detailzeilen pro Plugin mit Quellen-/Ursprungs-/Versions-/Aktivierungsmetadaten wechseln.
Von der Tabellenansicht zu Detailzeilen pro Plugin mit Metadaten zu Quelle/Ursprung/Version/Aktivierung wechseln.
</ParamField>
<ParamField path="--json" type="boolean">
Maschinenlesbares Inventar plus Registry-Diagnosen und Installationsstatus der Paketabhängigkeiten.
Maschinenlesbares Inventar plus Registry-Diagnosen und Installationsstatus von Paketabhängigkeiten.
</ParamField>
<Note>
`plugins list` liest zuerst die persistierte lokale Plugin-Registry, mit einem nur aus Manifesten abgeleiteten Fallback, wenn die Registry fehlt oder ungültig ist. Das ist nützlich, um zu prüfen, ob ein Plugin installiert, aktiviert und für die Kaltstartplanung sichtbar ist, aber es ist kein Live-Runtime-Test eines bereits laufenden Gateway-Prozesses. Nachdem Sie Plugin-Code, Aktivierung, Hook-Richtlinie oder `plugins.load.paths` geändert haben, starten Sie das Gateway neu, das den Kanal bedient, bevor Sie erwarten, dass neuer `register(api)`-Code oder Hooks ausgeführt werden. Prüfen Sie bei Remote-/Container-Deployments, dass Sie den tatsächlichen `openclaw gateway run`-Kindprozess neu starten, nicht nur einen Wrapper-Prozess.
`plugins list` liest zuerst die dauerhaft gespeicherte lokale Plugin-Registry, mit einem nur aus Manifesten abgeleiteten Fallback, wenn die Registry fehlt oder ungültig ist. Das ist nützlich, um zu prüfen, ob ein Plugin installiert, aktiviert und für die Kaltstartplanung sichtbar ist, ist aber keine Live-Laufzeitprüfung eines bereits laufenden Gateway-Prozesses. Starten Sie nach Änderungen an Plugin-Code, Aktivierung, Hook-Richtlinie oder `plugins.load.paths` das Gateway neu, das den Kanal bereitstellt, bevor Sie erwarten, dass neuer `register(api)`-Code oder Hooks ausgeführt werden. Stellen Sie bei Remote-/Container-Bereitstellungen sicher, dass Sie den tatsächlichen untergeordneten `openclaw gateway run`-Prozess neu starten, nicht nur einen Wrapper-Prozess.
`plugins list --json` enthält für jedes Plugin den `dependencyStatus` aus den `package.json`-
`dependencies` und `optionalDependencies`. OpenClaw prüft, ob diese Paketnamen
entlang des normalen Node-`node_modules`-Suchpfads des Plugins vorhanden sind; es
importiert keinen Plugin-Runtime-Code, führt keinen Paketmanager aus und repariert
keine fehlenden Abhängigkeiten.
`plugins list --json` enthält für jedes Plugin dessen `dependencyStatus` aus `package.json`
`dependencies` und `optionalDependencies`. OpenClaw prüft, ob diese Paketnamen entlang des normalen Node-`node_modules`-Suchpfads des Plugins vorhanden sind; es importiert keinen Plugin-Laufzeitcode, führt keinen Paketmanager aus und repariert keine fehlenden Abhängigkeiten.
</Note>
`plugins search` ist eine Remote-ClawHub-Katalogsuche. Sie prüft keinen lokalen
Status, verändert keine Konfiguration, installiert keine Pakete und lädt keinen
Plugin-Runtime-Code. Suchergebnisse enthalten den ClawHub-Paketnamen, die Familie,
den Kanal, die Version, Zusammenfassung und einen Installationshinweis wie
`openclaw plugins install clawhub:<package>`.
`plugins search` ist eine Remote-ClawHub-Katalogsuche. Es prüft keinen lokalen
Status, verändert keine Konfiguration, installiert keine Pakete und lädt keinen Plugin-Laufzeitcode. Suchergebnisse enthalten den ClawHub-Paketnamen, die Familie, den Kanal, die Version, eine Zusammenfassung und
einen Installationshinweis wie `openclaw plugins install clawhub:<package>`.
Für die Arbeit an gebündelten Plugins innerhalb eines paketierten Docker-Images mounten Sie das Plugin-
Quellverzeichnis per Bind-Mount über den passenden paketierten Quellpfad, zum Beispiel
`/app/extensions/synology-chat`. OpenClaw erkennt dieses gemountete Quell-
Overlay vor `/app/dist/extensions/synology-chat`; ein einfach kopiertes Quell-
verzeichnis bleibt inaktiv, sodass normale paketierte Installationen weiterhin die kompilierte Dist verwenden.
Für Arbeiten an gebündelten Plugins innerhalb eines paketierten Docker-Images binden Sie das Plugin-Quellverzeichnis
über den passenden paketierten Quellpfad ein, z. B.
`/app/extensions/synology-chat`. OpenClaw erkennt dieses eingehängte Quell-Overlay
vor `/app/dist/extensions/synology-chat`; ein einfach kopiertes Quellverzeichnis
bleibt inaktiv, sodass normale paketierte Installationen weiterhin das kompilierte Dist verwenden.
Für Runtime-Hook-Debugging:
Für das Debugging von Laufzeit-Hooks:
- `openclaw plugins inspect <id> --runtime --json` zeigt registrierte Hooks und Diagnosen aus einem Inspektionsdurchlauf mit geladenem Modul. Runtime-Inspektion installiert niemals Abhängigkeiten; verwenden Sie `openclaw doctor --fix`, um Legacy-Abhängigkeitsstatus zu bereinigen oder fehlende konfigurierte herunterladbare Plugins zu installieren.
- `openclaw gateway status --deep --require-rpc` bestätigt das erreichbare Gateway, Dienst-/Prozesshinweise, Konfigurationspfad und RPC-Zustand.
- `openclaw plugins inspect <id> --runtime --json` zeigt registrierte Hooks und Diagnosen aus einem Inspektionsdurchlauf mit geladenem Modul. Die Laufzeitinspektion installiert niemals Abhängigkeiten; verwenden Sie `openclaw doctor --fix`, um veralteten Abhängigkeitszustand zu bereinigen oder fehlende konfigurierte herunterladbare Plugins zu installieren.
- `openclaw gateway status --deep --require-rpc` bestätigt das erreichbare Gateway, Dienst-/Prozesshinweise, den Konfigurationspfad und die RPC-Funktionsfähigkeit.
- Nicht gebündelte Konversations-Hooks (`llm_input`, `llm_output`, `before_agent_finalize`, `agent_end`) erfordern `plugins.entries.<id>.hooks.allowConversationAccess=true`.
Verwenden Sie `--link`, um das Kopieren eines lokalen Verzeichnisses zu vermeiden (fügt zu `plugins.load.paths` hinzu):
Verwenden Sie `--link`, um das Kopieren eines lokalen Verzeichnisses zu vermeiden (fügt es `plugins.load.paths` hinzu):
```bash
openclaw plugins install -l ./my-plugin
```
<Note>
`--force` wird mit `--link` nicht unterstützt, weil verlinkte Installationen den Quellpfad wiederverwenden, statt über ein verwaltetes Installationsziel zu kopieren.
`--force` wird mit `--link` nicht unterstützt, weil verknüpfte Installationen den Quellpfad wiederverwenden, anstatt über ein verwaltetes Installationsziel zu kopieren.
Verwenden Sie `--pin` bei npm-Installationen, um die aufgelöste exakte Spezifikation (`name@version`) im verwalteten Plugin-Index zu speichern, während das Standardverhalten ungepinnt bleibt.
</Note>
### Plugin-Index
Plugin-Installationsmetadaten sind maschinenverwalteter Status, keine Benutzerkonfiguration. Installationen und Updates schreiben sie nach `plugins/installs.json` unterhalb des aktiven OpenClaw-State-Verzeichnisses. Die oberste `installRecords`-Map ist die dauerhafte Quelle für Installationsmetadaten, einschließlich Einträgen für beschädigte oder fehlende Plugin-Manifeste. Das `plugins`-Array ist der aus Manifesten abgeleitete Kalt-Registry-Cache. Die Datei enthält eine Nicht-bearbeiten-Warnung und wird von `openclaw plugins update`, Deinstallation, Diagnosen und der Kalt-Plugin-Registry verwendet.
Plugin-Installationsmetadaten sind maschinell verwalteter Zustand, keine Benutzerkonfiguration. Installationen und Aktualisierungen schreiben sie in `plugins/installs.json` unter dem aktiven OpenClaw-Zustandsverzeichnis. Die oberste `installRecords`-Map ist die dauerhafte Quelle der Installationsmetadaten, einschließlich Einträgen für defekte oder fehlende Plugin-Manifeste. Das `plugins`-Array ist der aus Manifesten abgeleitete Kalt-Registry-Cache. Die Datei enthält eine Warnung, sie nicht zu bearbeiten, und wird von `openclaw plugins update`, Deinstallation, Diagnosen und der Kalt-Plugin-Registry verwendet.
Wenn OpenClaw ausgelieferte Legacy-`plugins.installs`-Einträge in der Konfiguration sieht, verschiebt es sie in den Plugin-Index und entfernt den Konfigurationsschlüssel; wenn einer der Schreibvorgänge fehlschlägt, bleiben die Konfigurationseinträge erhalten, damit die Installationsmetadaten nicht verloren gehen.
Wenn OpenClaw ausgelieferte veraltete `plugins.installs`-Einträge in der Konfiguration sieht, verschiebt es sie in den Plugin-Index und entfernt den Konfigurationsschlüssel; wenn einer der Schreibvorgänge fehlschlägt, bleiben die Konfigurationseinträge erhalten, damit die Installationsmetadaten nicht verloren gehen.
### Deinstallieren
@ -294,7 +299,7 @@ openclaw plugins uninstall <id> --dry-run
openclaw plugins uninstall <id> --keep-files
```
`uninstall` entfernt Plugin-Einträge aus `plugins.entries`, dem persistierten Plugin-Index, Plugin-Allow-/Deny-List-Einträgen und verlinkten `plugins.load.paths`-Einträgen, sofern zutreffend. Sofern `--keep-files` nicht gesetzt ist, entfernt die Deinstallation auch das nachverfolgte verwaltete Installationsverzeichnis, wenn es sich innerhalb des OpenClaw-Plugin-Erweiterungsroots befindet. Bei Active-Memory-Plugins wird der Memory-Slot auf `memory-core` zurückgesetzt.
`uninstall` entfernt Plugin-Einträge aus `plugins.entries`, dem dauerhaft gespeicherten Plugin-Index, den Allow-/Deny-List-Einträgen für Plugins und, falls zutreffend, verknüpften `plugins.load.paths`-Einträgen. Sofern `--keep-files` nicht gesetzt ist, entfernt die Deinstallation außerdem das nachverfolgte verwaltete Installationsverzeichnis, wenn es sich innerhalb des Plugin-Erweiterungsstamms von OpenClaw befindet. Bei Active-Memory-Plugins wird der Speicher-Slot auf `memory-core` zurückgesetzt.
<Note>
`--keep-config` wird als veralteter Alias für `--keep-files` unterstützt.
@ -310,29 +315,29 @@ openclaw plugins update @openclaw/voice-call
openclaw plugins update openclaw-codex-app-server --dangerously-force-unsafe-install
```
Updates gelten für nachverfolgte Plugin-Installationen im verwalteten Plugin-Index und nachverfolgte Hook-Pack-Installationen in `hooks.internal.installs`.
Aktualisierungen gelten für nachverfolgte Plugin-Installationen im verwalteten Plugin-Index und nachverfolgte Hook-Pack-Installationen in `hooks.internal.installs`.
<AccordionGroup>
<Accordion title="Plugin-ID vs. npm-Spezifikation auflösen">
Wenn Sie eine Plugin-ID übergeben, verwendet OpenClaw die aufgezeichnete Installationsspezifikation für dieses Plugin erneut. Das bedeutet, dass zuvor gespeicherte Dist-Tags wie `@beta` und exakt gepinnte Versionen bei späteren `update <id>`-Läufen weiterhin verwendet werden.
<Accordion title="Plugin-ID gegenüber npm-Spezifikation auflösen">
Wenn Sie eine Plugin-ID übergeben, verwendet OpenClaw die für dieses Plugin aufgezeichnete Installationsspezifikation wieder. Das bedeutet, dass zuvor gespeicherte Dist-Tags wie `@beta` und exakt gepinnte Versionen auch bei späteren `update <id>`-Läufen weiter verwendet werden.
Für npm-Installationen können Sie auch eine explizite npm-Paketspezifikation mit Dist-Tag oder exakter Version übergeben. OpenClaw löst diesen Paketnamen zurück auf den nachverfolgten Plugin-Eintrag auf, aktualisiert dieses installierte Plugin und zeichnet die neue npm-Spezifikation für zukünftige ID-basierte Updates auf.
Für npm-Installationen können Sie auch eine explizite npm-Paketspezifikation mit einem Dist-Tag oder einer exakten Version übergeben. OpenClaw löst diesen Paketnamen wieder auf den nachverfolgten Plugin-Eintrag auf, aktualisiert dieses installierte Plugin und zeichnet die neue npm-Spezifikation für zukünftige ID-basierte Aktualisierungen auf.
Das Übergeben des npm-Paketnamens ohne Version oder Tag wird ebenfalls zurück auf den nachverfolgten Plugin-Eintrag aufgelöst. Verwenden Sie dies, wenn ein Plugin auf eine exakte Version gepinnt war und Sie es zurück auf die Standard-Release-Linie der Registry verschieben möchten.
Wenn Sie den npm-Paketnamen ohne Version oder Tag übergeben, wird er ebenfalls wieder auf den nachverfolgten Plugin-Eintrag aufgelöst. Verwenden Sie dies, wenn ein Plugin auf eine exakte Version gepinnt war und Sie es zurück auf die Standard-Release-Linie der Registry verschieben möchten.
</Accordion>
<Accordion title="Updates im Beta-Kanal">
`openclaw plugins update` verwendet die nachverfolgte Plugin-Spezifikation erneut, sofern Sie keine neue Spezifikation übergeben. `openclaw update` kennt zusätzlich den aktiven OpenClaw-Update-Kanal: Im Beta-Kanal versuchen npm- und ClawHub-Plugin-Einträge der Standardlinie zuerst `@beta` und fallen dann auf die aufgezeichnete Standard-/Latest-Spezifikation zurück, wenn kein Plugin-Beta-Release existiert. Exakte Versionen und explizite Tags bleiben an diesen Selektor gepinnt.
<Accordion title="Beta-Kanal-Aktualisierungen">
`openclaw plugins update` verwendet die nachverfolgte Plugin-Spezifikation wieder, sofern Sie keine neue Spezifikation übergeben. `openclaw update` kennt zusätzlich den aktiven OpenClaw-Aktualisierungskanal: Auf dem Beta-Kanal versuchen npm- und ClawHub-Plugin-Einträge der Standardlinie zuerst `@beta` und fallen dann auf die aufgezeichnete Standard-/Latest-Spezifikation zurück, wenn kein Plugin-Beta-Release existiert. Exakte Versionen und explizite Tags bleiben an diesen Selektor gepinnt.
</Accordion>
<Accordion title="Versionsprüfungen und Integritätsdrift">
Vor einem Live-npm-Update prüft OpenClaw die installierte Paketversion gegen die npm-Registry-Metadaten. Wenn die installierte Version und die aufgezeichnete Artefaktidentität bereits mit dem aufgelösten Ziel übereinstimmen, wird das Update ohne Herunterladen, Neuinstallieren oder Neuschreiben von `openclaw.json` übersprungen.
<Accordion title="Versionsprüfungen und Integritätsabweichungen">
Vor einer Live-npm-Aktualisierung prüft OpenClaw die installierte Paketversion anhand der npm-Registry-Metadaten. Wenn die installierte Version und die aufgezeichnete Artefaktidentität bereits mit dem aufgelösten Ziel übereinstimmen, wird die Aktualisierung übersprungen, ohne etwas herunterzuladen, neu zu installieren oder `openclaw.json` neu zu schreiben.
Wenn ein gespeicherter Integritäts-Hash existiert und sich der Hash des abgerufenen Artefakts ändert, behandelt OpenClaw dies als npm-Artefaktdrift. Der interaktive Befehl `openclaw plugins update` gibt die erwarteten und tatsächlichen Hashes aus und fragt vor dem Fortfahren nach Bestätigung. Nicht interaktive Update-Helfer schlagen geschlossen fehl, sofern der Aufrufer keine explizite Fortsetzungsrichtlinie bereitstellt.
Wenn ein gespeicherter Integritäts-Hash vorhanden ist und sich der Hash des abgerufenen Artefakts ändert, behandelt OpenClaw dies als npm-Artefaktabweichung. Der interaktive Befehl `openclaw plugins update` gibt die erwarteten und tatsächlichen Hashes aus und fragt vor dem Fortfahren nach Bestätigung. Nicht interaktive Aktualisierungshelfer schlagen geschlossen fehl, sofern der Aufrufer keine explizite Fortsetzungsrichtlinie bereitstellt.
</Accordion>
<Accordion title="--dangerously-force-unsafe-install bei Update">
`--dangerously-force-unsafe-install` ist auch bei `plugins update` als Break-Glass-Override für False Positives des integrierten Dangerous-Code-Scans während Plugin-Updates verfügbar. Es umgeht weiterhin keine Plugin-`before_install`-Richtlinienblöcke oder Blockierungen durch Scan-Fehler, und es gilt nur für Plugin-Updates, nicht für Hook-Pack-Updates.
<Accordion title="--dangerously-force-unsafe-install bei update">
`--dangerously-force-unsafe-install` ist auch bei `plugins update` als Notfall-Override für falsch positive Treffer des integrierten Dangerous-Code-Scans während Plugin-Aktualisierungen verfügbar. Es umgeht weiterhin keine Plugin-`before_install`-Richtliniensperren oder Sperren aufgrund von Scan-Fehlern und gilt nur für Plugin-Aktualisierungen, nicht für Hook-Pack-Aktualisierungen.
</Accordion>
</AccordionGroup>
@ -344,11 +349,11 @@ openclaw plugins inspect <id> --runtime
openclaw plugins inspect <id> --json
```
Inspect zeigt Identität, Ladestatus, Quelle, Manifest-Fähigkeiten, Richtlinien-Flags, Diagnosen, Installationsmetadaten, Bundle-Fähigkeiten und jegliche erkannte MCP- oder LSP-Server-Unterstützung, ohne standardmäßig Plugin-Runtime zu importieren. Fügen Sie `--runtime` hinzu, um das Plugin-Modul zu laden und registrierte Hooks, Tools, Befehle, Dienste, Gateway-Methoden und HTTP-Routen einzubeziehen. Runtime-Inspektion meldet fehlende Plugin-Abhängigkeiten direkt; Installationen und Reparaturen bleiben in `openclaw plugins install`, `openclaw plugins update` und `openclaw doctor --fix`.
Inspect zeigt Identität, Ladestatus, Quelle, Manifest-Fähigkeiten, Richtlinien-Flags, Diagnosen, Installationsmetadaten, Bundle-Fähigkeiten und jede erkannte MCP- oder LSP-Serverunterstützung an, ohne standardmäßig Plugin-Laufzeit zu importieren. Fügen Sie `--runtime` hinzu, um das Plugin-Modul zu laden und registrierte Hooks, Tools, Befehle, Dienste, Gateway-Methoden und HTTP-Routen einzubeziehen. Die Laufzeitinspektion meldet fehlende Plugin-Abhängigkeiten direkt; Installationen und Reparaturen bleiben in `openclaw plugins install`, `openclaw plugins update` und `openclaw doctor --fix`.
Plugin-eigene CLI-Befehle werden als Root-`openclaw`-Befehlsgruppen installiert. Nachdem `inspect --runtime` einen Befehl unter `cliCommands` anzeigt, führen Sie ihn als `openclaw <command> ...` aus; zum Beispiel kann ein Plugin, das `demo-git` registriert, mit `openclaw demo-git ping` geprüft werden.
Plugin-eigene CLI-Befehle werden als Root-`openclaw`-Befehlsgruppen installiert. Nachdem `inspect --runtime` einen Befehl unter `cliCommands` anzeigt, führen Sie ihn als `openclaw <command> ...` aus; zum Beispiel kann ein Plugin, das `demo-git` registriert, mit `openclaw demo-git ping` verifiziert werden.
Jedes Plugin wird danach klassifiziert, was es zur Runtime tatsächlich registriert:
Jedes Plugin wird danach klassifiziert, was es zur Laufzeit tatsächlich registriert:
- **plain-capability** — ein Fähigkeitstyp (z. B. ein reines Provider-Plugin)
- **hybrid-capability** — mehrere Fähigkeitstypen (z. B. Text + Sprache + Bilder)
@ -358,7 +363,7 @@ Jedes Plugin wird danach klassifiziert, was es zur Runtime tatsächlich registri
Weitere Informationen zum Fähigkeitsmodell finden Sie unter [Plugin-Formen](/de/plugins/architecture#plugin-shapes).
<Note>
Das Flag `--json` gibt einen maschinenlesbaren Bericht aus, der für Skripting und Auditing geeignet ist. `inspect --all` rendert eine flotteweite Tabelle mit Spalten für Form, Fähigkeitstypen, Kompatibilitätshinweise, Bundle-Fähigkeiten und Hook-Zusammenfassung. `info` ist ein Alias für `inspect`.
Das Flag `--json` gibt einen maschinenlesbaren Bericht aus, der sich für Skripting und Audits eignet. `inspect --all` rendert eine flottenweite Tabelle mit Spalten für Form, Fähigkeitsarten, Kompatibilitätshinweise, Bundle-Fähigkeiten und Hook-Zusammenfassung. `info` ist ein Alias für `inspect`.
</Note>
### Doctor
@ -369,9 +374,9 @@ openclaw plugins doctor
`doctor` meldet Plugin-Ladefehler, Manifest-/Discovery-Diagnosen und Kompatibilitätshinweise. Wenn alles sauber ist, gibt es `No plugin issues detected.` aus.
Wenn ein konfiguriertes Plugin auf dem Datenträger vorhanden ist, aber durch die Pfadsicherheitsprüfungen des Loaders blockiert wird, behält die Konfigurationsvalidierung den Plugin-Eintrag bei und meldet ihn als `present but blocked`. Beheben Sie die vorangehende Diagnose zum blockierten Plugin, etwa Pfadeigentum oder world-writable-Berechtigungen, statt die Konfiguration `plugins.entries.<id>` oder `plugins.allow` zu entfernen.
Wenn ein konfiguriertes Plugin auf der Festplatte vorhanden ist, aber durch die Pfadsicherheitsprüfungen des Loaders blockiert wird, behält die Konfigurationsvalidierung den Plugin-Eintrag bei und meldet ihn als `present but blocked`. Beheben Sie die vorangehende Diagnose zum blockierten Plugin, etwa Pfadbesitz oder weltweit schreibbare Berechtigungen, statt die Konfiguration `plugins.entries.<id>` oder `plugins.allow` zu entfernen.
Bei Modulform-Fehlern wie fehlenden `register`-/`activate`-Exports führen Sie erneut mit `OPENCLAW_PLUGIN_LOAD_DEBUG=1` aus, um eine kompakte Exportform-Zusammenfassung in die Diagnoseausgabe aufzunehmen.
Bei Modulform-Fehlern wie fehlenden `register`-/`activate`-Exporten führen Sie den Befehl mit `OPENCLAW_PLUGIN_LOAD_DEBUG=1` erneut aus, um eine kompakte Zusammenfassung der Exportform in die Diagnoseausgabe aufzunehmen.
### Registry
@ -381,12 +386,14 @@ openclaw plugins registry --refresh
openclaw plugins registry --json
```
Die lokale Plugin-Registry ist OpenClaws persistiertes Kalt-Lesemodell für installierte Plugin-Identität, Aktivierung, Quellenmetadaten und Beitrags-Eigentümerschaft. Normaler Start, Provider-Owner-Lookup, Klassifizierung der Kanal-Einrichtung und Plugin-Inventar können sie lesen, ohne Plugin-Runtime-Module zu importieren.
Die lokale Plugin-Registry ist OpenClaws dauerhaft gespeichertes Kalt-Lesemodell für installierte Plugin-Identität, Aktivierung, Quellenmetadaten und Verantwortlichkeit für Beiträge. Normaler Start, Provider-Owner-Lookup, Klassifizierung des Kanal-Setups und Plugin-Inventar können sie lesen, ohne Plugin-Laufzeitmodule zu importieren.
Verwenden Sie `plugins registry`, um zu prüfen, ob die persistierte Registry vorhanden, aktuell oder veraltet ist. Verwenden Sie `--refresh`, um sie aus dem persistierten Plugin-Index, der Konfigurationsrichtlinie und Manifest-/Paketmetadaten neu aufzubauen. Dies ist ein Reparaturpfad, kein Pfad zur Laufzeitaktivierung.
Verwenden Sie `plugins registry`, um zu prüfen, ob die persistierte Registry vorhanden, aktuell oder veraltet ist. Verwenden Sie `--refresh`, um sie aus dem persistierten Plugin-Index, der Konfigurationsrichtlinie und den Manifest-/Paketmetadaten neu aufzubauen. Dies ist ein Reparaturpfad, kein Pfad zur Laufzeitaktivierung.
`openclaw doctor --fix` repariert außerdem Registry-nahe Abweichungen bei verwaltetem npm: Wenn ein verwaistes oder wiederhergestelltes `@openclaw/*`-Paket unter dem verwalteten Plugin-npm-Root ein gebündeltes Plugin überschattet, entfernt doctor dieses veraltete Paket und baut die Registry neu auf, damit der Start gegen das gebündelte Manifest validiert.
<Warning>
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` ist ein veralteter Notfall-Kompatibilitätsschalter für Registry-Lesefehler. Bevorzugen Sie `plugins registry --refresh` oder `openclaw doctor --fix`; der Env-Fallback ist nur für die Wiederherstellung des Starts im Notfall gedacht, während die Migration ausgerollt wird.
`OPENCLAW_DISABLE_PERSISTED_PLUGIN_REGISTRY=1` ist ein veralteter Notfall-Kompatibilitätsschalter für Registry-Lesefehler. Bevorzugen Sie `plugins registry --refresh` oder `openclaw doctor --fix`; der Env-Fallback ist nur für die Notfall-Wiederherstellung beim Start vorgesehen, während die Migration ausgerollt wird.
</Warning>
### Marktplatz
@ -396,7 +403,7 @@ openclaw plugins marketplace list <source>
openclaw plugins marketplace list <source> --json
```
Die Marktplatzliste akzeptiert einen lokalen Marktplatzpfad, einen `marketplace.json`-Pfad, eine GitHub-Kurzform wie `owner/repo`, eine GitHub-Repo-URL oder eine Git-URL. `--json` gibt die aufgelöste Quellbezeichnung sowie das geparste Marktplatz-Manifest und die Plugin-Einträge aus.
Die Marktplatzliste akzeptiert einen lokalen Marktplatzpfad, einen `marketplace.json`-Pfad, eine GitHub-Kurzform wie `owner/repo`, eine GitHub-Repo-URL oder eine Git-URL. `--json` gibt das aufgelöste Quelllabel sowie das geparste Marktplatzmanifest und die Plugin-Einträge aus.
## Verwandte Themen

View File

@ -1,20 +1,20 @@
---
read_when:
- doctor-Migrationen hinzufügen oder ändern
- Breaking Changes an der Konfiguration einführen
- Doctor-Migrationen hinzufügen oder ändern
- Einführen nicht abwärtskompatibler Konfigurationsänderungen
sidebarTitle: Doctor
summary: 'Doctor-Befehl: Zustandsprüfungen, Konfigurationsmigrationen und Reparaturschritte'
summary: 'Doctor-Befehl: Integritätsprüfungen, Konfigurationsmigrationen und Reparaturschritte'
title: Diagnose
x-i18n:
generated_at: "2026-05-03T21:32:39Z"
generated_at: "2026-05-04T09:37:05Z"
model: gpt-5.5
provider: openai
source_hash: 20b2cb3c3cd88e01050cb285a08a020603642439bd35668b7414360801fc03ff
source_hash: 1bc8615f5e49e8c20785a9dc9779c447fd0d5794c80663d2396b0a20b4187798
source_path: gateway/doctor.md
workflow: 16
---
`openclaw doctor` ist das Reparatur- und Migrationstool für OpenClaw. Es behebt veraltete Konfigurationen/Zustände, prüft die Integrität und stellt umsetzbare Reparaturschritte bereit.
`openclaw doctor` ist das Reparatur- und Migrationstool für OpenClaw. Es behebt veraltete Konfigurationen und Zustände, prüft den Zustand und bietet umsetzbare Reparaturschritte.
## Schnellstart
@ -30,7 +30,7 @@ openclaw doctor
openclaw doctor --yes
```
Standardwerte ohne Nachfrage akzeptieren (einschließlich Neustart-/Dienst-/Sandbox-Reparaturschritten, sofern zutreffend).
Standardwerte ohne Nachfrage akzeptieren (einschließlich Neustart-, Dienst- und Sandbox-Reparaturschritten, sofern zutreffend).
</Tab>
<Tab title="--repair">
@ -38,7 +38,7 @@ openclaw doctor
openclaw doctor --repair
```
Empfohlene Reparaturen ohne Nachfrage anwenden (Reparaturen + Neustarts, sofern sicher).
Empfohlene Reparaturen ohne Nachfrage anwenden (Reparaturen und Neustarts, wenn sicher).
</Tab>
<Tab title="--repair --force">
@ -54,7 +54,7 @@ openclaw doctor
openclaw doctor --non-interactive
```
Ohne Eingabeaufforderungen ausführen und nur sichere Migrationen anwenden (Konfigurationsnormalisierung + Zustandsverschiebungen auf dem Datenträger). Überspringt Neustart-/Dienst-/Sandbox-Aktionen, die eine menschliche Bestätigung erfordern. Legacy-Zustandsmigrationen werden automatisch ausgeführt, wenn sie erkannt werden.
Ohne Eingabeaufforderungen ausführen und nur sichere Migrationen anwenden (Konfigurationsnormalisierung und Verschiebungen des Zustands auf dem Datenträger). Überspringt Neustart-, Dienst- und Sandbox-Aktionen, die eine menschliche Bestätigung erfordern. Legacy-Zustandsmigrationen werden automatisch ausgeführt, wenn sie erkannt werden.
</Tab>
<Tab title="--deep">
@ -62,7 +62,7 @@ openclaw doctor
openclaw doctor --deep
```
Systemdienste auf zusätzliche Gateway-Installationen prüfen (launchd/systemd/schtasks).
Systemdienste nach zusätzlichen Gateway-Installationen durchsuchen (launchd/systemd/schtasks).
</Tab>
</Tabs>
@ -76,35 +76,35 @@ cat ~/.openclaw/openclaw.json
## Was es tut (Zusammenfassung)
<AccordionGroup>
<Accordion title="Integrität, UI und Updates">
- Optionales Update vorab für Git-Installationen (nur interaktiv).
- UI-Protokoll-Aktualitätsprüfung (baut die Control UI neu, wenn das Protokollschema neuer ist).
- Integritätsprüfung + Neustartabfrage.
- Skills-Statuszusammenfassung (berechtigt/fehlend/blockiert) und Plugin-Status.
<Accordion title="Zustand, UI und Updates">
- Optionales Preflight-Update für Git-Installationen (nur interaktiv).
- UI-Protokoll-Aktualitätsprüfung (erstellt die Control UI neu, wenn das Protokollschema neuer ist).
- Zustandsprüfung und Neustartabfrage.
- Skills-Statuszusammenfassung (geeignet/fehlend/blockiert) und Plugin-Status.
</Accordion>
<Accordion title="Konfiguration und Migrationen">
- Konfigurationsnormalisierung für Legacy-Werte.
- Talk-Konfigurationsmigration von Legacy-Flat-`talk.*`-Feldern nach `talk.provider` + `talk.providers.<provider>`.
- Browser-Migrationsprüfungen für Legacy-Chrome-Erweiterungskonfigurationen und Chrome-MCP-Bereitschaft.
- OpenCode-Provider-Override-Warnungen (`models.providers.opencode` / `models.providers.opencode-go`).
- Codex-OAuth-Shadowing-Warnungen (`models.providers.openai-codex`).
- Migration der Talk-Konfiguration von Legacy-Flachfeldern `talk.*` zu `talk.provider` + `talk.providers.<provider>`.
- Browser-Migrationsprüfungen für Legacy-Konfigurationen der Chrome-Erweiterung und Chrome-MCP-Bereitschaft.
- Warnungen zu OpenCode-Provider-Overrides (`models.providers.opencode` / `models.providers.opencode-go`).
- Warnungen zu Codex-OAuth-Shadowing (`models.providers.openai-codex`).
- Prüfung der OAuth-TLS-Voraussetzungen für OpenAI-Codex-OAuth-Profile.
- Plugin-/Tool-Allowlist-Warnungen, wenn `plugins.allow` restriktiv ist, die Tool-Richtlinie aber weiterhin Wildcard- oder Plugin-eigene Tools anfordert.
- Legacy-Zustandsmigration auf dem Datenträger (Sitzungen/Agent-Verzeichnis/WhatsApp-Auth).
- Migration von Legacy-Plugin-Manifestvertrags-Schlüsseln (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders``contracts`).
- Migration des Legacy-Cron-Speichers (`jobId`, `schedule.cron`, Top-Level-Delivery-/Payload-Felder, Payload-`provider`, einfache `notify: true`-Webhook-Fallback-Jobs).
- Migration der Legacy-Agent-Laufzeitrichtlinie zu `agents.defaults.agentRuntime` und `agents.list[].agentRuntime`.
- Warnungen zur Plugin-/Tool-Zulassungsliste, wenn `plugins.allow` restriktiv ist, die Tool-Richtlinie aber weiterhin Wildcard- oder Plugin-eigene Tools anfordert.
- Legacy-Zustandsmigration auf dem Datenträger (Sitzungen/Agentenverzeichnis/WhatsApp-Authentifizierung).
- Migration von Legacy-Plugin-Manifestvertragsschlüsseln (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders``contracts`).
- Migration des Legacy-Cron-Speichers (`jobId`, `schedule.cron`, Felder für Zustellung/Payload auf oberster Ebene, Payload-`provider`, einfache `notify: true`-Webhook-Fallback-Jobs).
- Migration der Legacy-Agentenlaufzeitrichtlinie zu `agents.defaults.agentRuntime` und `agents.list[].agentRuntime`.
- Bereinigung veralteter Plugin-Konfigurationen, wenn Plugins aktiviert sind; wenn `plugins.enabled=false`, werden veraltete Plugin-Referenzen als inerte Containment-Konfiguration behandelt und beibehalten.
</Accordion>
<Accordion title="Zustand und Integrität">
- Prüfung von Sitzungs-Sperrdateien und Bereinigung veralteter Sperren.
- Reparatur von Sitzungstranskripten für duplizierte Prompt-Rewrite-Branches, die von betroffenen Builds vom 2026.4.24 erstellt wurden.
- Erkennung von Tombstones für die Neustartwiederherstellung blockierter Subagents, mit `--fix`-Unterstützung zum Löschen veralteter abgebrochener Wiederherstellungs-Flags, damit der Start das Child nicht weiterhin als durch Neustart abgebrochen behandelt.
- Zustandsintegritäts- und Berechtigungsprüfungen (Sitzungen, Transkripte, Zustandsverzeichnis).
- Prüfung der Berechtigungen der Konfigurationsdatei (chmod 600) bei lokaler Ausführung.
- Model-Auth-Integrität: prüft OAuth-Ablauf, kann bald ablaufende Tokens aktualisieren und meldet Cooldown-/Deaktivierungszustände von Auth-Profilen.
- Reparatur von Sitzungstranskripten für duplizierte Prompt-Rewrite-Branches, die von betroffenen Builds vom 2026-04-24 erstellt wurden.
- Erkennung von Tombstones zur Neustart-Wiederherstellung festhängender Subagents, mit `--fix`-Unterstützung zum Löschen veralteter abgebrochener Wiederherstellungs-Flags, damit der Start den Child nicht weiterhin als neustartabgebrochen behandelt.
- Integritäts- und Berechtigungsprüfungen für den Zustand (Sitzungen, Transkripte, Zustandsverzeichnis).
- Berechtigungsprüfungen für Konfigurationsdateien (chmod 600) bei lokaler Ausführung.
- Zustand der Modellauthentifizierung: prüft OAuth-Ablauf, kann bald ablaufende Tokens aktualisieren und meldet Cooldown-/Deaktivierungszustände von Authentifizierungsprofilen.
- Erkennung zusätzlicher Workspace-Verzeichnisse (`~/openclaw`).
</Accordion>
@ -112,74 +112,74 @@ cat ~/.openclaw/openclaw.json
- Reparatur des Sandbox-Images, wenn Sandboxing aktiviert ist.
- Legacy-Dienstmigration und Erkennung zusätzlicher Gateways.
- Migration des Legacy-Zustands des Matrix-Kanals (im Modus `--fix` / `--repair`).
- Gateway-Laufzeitprüfungen (Dienst installiert, aber nicht ausgeführt; zwischengespeichertes launchd-Label).
- Gateway-Laufzeitprüfungen (Dienst installiert, aber nicht aktiv; zwischengespeichertes launchd-Label).
- Kanalstatuswarnungen (vom laufenden Gateway abgefragt).
- Prüfung der Supervisor-Konfiguration (launchd/systemd/schtasks) mit optionaler Reparatur.
- Bereinigung der eingebetteten Proxy-Umgebung für Gateway-Dienste, die während der Installation oder Aktualisierung Shell-Werte für `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` erfasst haben.
- Best-Practice-Prüfungen für die Gateway-Laufzeit (Node vs. Bun, Pfade von Versionsmanagern).
- Bereinigung der eingebetteten Proxy-Umgebung für Gateway-Dienste, die während Installation oder Update Shell-Werte für `HTTP_PROXY` / `HTTPS_PROXY` / `NO_PROXY` erfasst haben.
- Gateway-Laufzeitprüfungen für bewährte Verfahren (Node vs. Bun, Pfade von Versionsmanagern).
- Diagnose von Gateway-Portkonflikten (Standard `18789`).
</Accordion>
<Accordion title="Auth, Sicherheit und Pairing">
<Accordion title="Authentifizierung, Sicherheit und Kopplung">
- Sicherheitswarnungen für offene DM-Richtlinien.
- Gateway-Auth-Prüfungen für den lokalen Tokenmodus (bietet Tokengenerierung an, wenn keine Tokenquelle vorhanden ist; überschreibt keine Token-SecretRef-Konfigurationen).
- Erkennung von Problemen beim Device Pairing (ausstehende erstmalige Pairing-Anfragen, ausstehende Rollen-/Scope-Upgrades, veraltete Drift des lokalen Device-Token-Caches und Auth-Drift gekoppelter Einträge).
- Gateway-Authentifizierungsprüfungen für lokalen Token-Modus (bietet Token-Erzeugung an, wenn keine Token-Quelle vorhanden ist; überschreibt keine Token-SecretRef-Konfigurationen).
- Erkennung von Problemen bei der Gerätekopplung (ausstehende erstmalige Kopplungsanfragen, ausstehende Rollen-/Scope-Upgrades, Drift veralteter lokaler Geräte-Token-Caches und Authentifizierungsdrift gekoppelter Datensätze).
</Accordion>
<Accordion title="Workspace und Shell">
- Prüfung von systemd-linger unter Linux.
- Größenprüfung der Workspace-Bootstrap-Datei (Warnungen zu Kürzung/nahe am Limit für Kontextdateien).
- Skills-Bereitschaftsprüfung für den Standardagenten; meldet zulässige Skills mit fehlenden Binaries, Umgebungs-, Konfigurations- oder Betriebssystemanforderungen, und `--fix` kann nicht verfügbare Skills in `skills.entries` deaktivieren.
- systemd-Linger-Prüfung unter Linux.
- Größenprüfung der Workspace-Bootstrap-Datei (Warnungen zu Kürzung/nahe Grenzwerten für Kontextdateien).
- Skills-Bereitschaftsprüfung für den Standardagenten; meldet erlaubte Skills mit fehlenden Binaries, Umgebungsvariablen, Konfigurationen oder Betriebssystemanforderungen, und `--fix` kann nicht verfügbare Skills in `skills.entries` deaktivieren.
- Statusprüfung und automatische Installation/Aktualisierung der Shell-Vervollständigung.
- Bereitschaftsprüfung des Embedding-Providers für die Speichersuche (lokales Modell, Remote-API-Schlüssel oder QMD-Binary).
- Prüfungen der Quellinstallation (pnpm-Workspace-Abweichung, fehlende UI-Assets, fehlendes tsx-Binary).
- Schreibt aktualisierte Konfiguration + Wizard-Metadaten.
- Prüfungen für Quellinstallationen (pnpm-Workspace-Abweichung, fehlende UI-Assets, fehlendes tsx-Binary).
- Schreibt aktualisierte Konfiguration und Assistentenmetadaten.
</Accordion>
</AccordionGroup>
## Dreams-UI-Backfill und Reset
## Dreams-UI-Backfill und Zurücksetzen
Die Dreams-Szene der Control UI enthält die Aktionen **Backfill**, **Reset** und **Clear Grounded** für den Grounded-Dreaming-Workflow. Diese Aktionen verwenden RPC-Methoden im Gateway-doctor-Stil, sind aber **nicht** Teil der Reparatur/Migration der `openclaw doctor` CLI.
Die Dreams-Szene der Control UI enthält die Aktionen **Backfill**, **Reset** und **Clear Grounded** für den geerdeten Dreaming-Workflow. Diese Aktionen verwenden Gateway-RPC-Methoden im Stil von doctor, sind aber **nicht** Teil der CLI-Reparatur/-Migration von `openclaw doctor`.
Was sie tun:
- **Backfill** durchsucht historische `memory/YYYY-MM-DD.md`-Dateien im aktiven Workspace, führt den Grounded-REM-Tagebuchdurchlauf aus und schreibt reversible Backfill-Einträge in `DREAMS.md`.
- **Backfill** durchsucht historische `memory/YYYY-MM-DD.md`-Dateien im aktiven Workspace, führt den geerdeten REM-Tagebuchdurchlauf aus und schreibt reversible Backfill-Einträge in `DREAMS.md`.
- **Reset** entfernt nur diese markierten Backfill-Tagebucheinträge aus `DREAMS.md`.
- **Clear Grounded** entfernt nur bereitgestellte, ausschließlich grounded Kurzzeiteinträge, die aus historischer Wiedergabe stammen und noch keine Live-Recall- oder Tagesunterstützung angesammelt haben.
- **Clear Grounded** entfernt nur bereitgestellte, rein geerdete Kurzzeiteinträge, die aus historischer Wiedergabe stammen und noch keinen Live-Recall oder tägliche Unterstützung angesammelt haben.
Was sie eigenständig **nicht** tun:
Was sie allein **nicht** tun:
- sie bearbeiten `MEMORY.md` nicht
- sie führen keine vollständigen doctor-Migrationen aus
- sie stellen Grounded-Kandidaten nicht automatisch in den Live-Kurzzeit-Promotion-Speicher, es sei denn, Sie führen zuerst explizit den gestuften CLI-Pfad aus
- Sie bearbeiten `MEMORY.md` nicht
- Sie führen keine vollständigen doctor-Migrationen aus
- Sie stellen geerdete Kandidaten nicht automatisch im Live-Kurzzeit-Promotion-Speicher bereit, sofern Sie nicht zuerst explizit den bereitgestellten CLI-Pfad ausführen
Wenn Sie möchten, dass die Grounded-Wiedergabe historischer Daten die normale Deep-Promotion-Lane beeinflusst, verwenden Sie stattdessen den CLI-Ablauf:
Wenn Sie möchten, dass geerdete historische Wiedergabe die normale Deep-Promotion-Lane beeinflusst, verwenden Sie stattdessen den CLI-Ablauf:
```bash
openclaw memory rem-backfill --path ./memory --stage-short-term
```
Dadurch werden Grounded-Durable-Kandidaten in den Kurzzeit-Dreaming-Speicher gestellt, während `DREAMS.md` als Review-Oberfläche erhalten bleibt.
Das stellt geerdete dauerhafte Kandidaten im Kurzzeit-Dreaming-Speicher bereit, während `DREAMS.md` die Prüfoberfläche bleibt.
## Detailliertes Verhalten und Begründung
<AccordionGroup>
<Accordion title="0. Optionales Update (Git-Installationen)">
Wenn dies ein Git-Checkout ist und doctor interaktiv ausgeführt wird, bietet es vor dem doctor-Lauf ein Update an (fetch/rebase/build).
Wenn dies ein Git-Checkout ist und doctor interaktiv ausgeführt wird, bietet es vor dem Ausführen von doctor ein Update (fetch/rebase/build) an.
</Accordion>
<Accordion title="1. Konfigurationsnormalisierung">
Wenn die Konfiguration Legacy-Wertformen enthält (zum Beispiel `messages.ackReaction` ohne kanalspezifischen Override), normalisiert doctor sie in das aktuelle Schema.
Dazu gehören Legacy-Flat-Felder von Talk. Die aktuelle öffentliche Talk-Konfiguration ist `talk.provider` + `talk.providers.<provider>`. Doctor schreibt alte Formen von `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` in die Provider-Map um.
Dazu gehören Legacy-Flachfelder von Talk. Die aktuelle öffentliche Talk-Konfiguration ist `talk.provider` + `talk.providers.<provider>`. Doctor schreibt alte Formen von `talk.voiceId` / `talk.voiceAliases` / `talk.modelId` / `talk.outputFormat` / `talk.apiKey` in die Provider-Map um.
Doctor warnt außerdem, wenn `plugins.allow` nicht leer ist und die Tool-Richtlinie
Wildcard- oder Plugin-eigene Tooleinträge verwendet. `tools.allow: ["*"]` entspricht nur Tools
aus Plugins, die tatsächlich geladen werden; es umgeht die exklusive Plugin-
Allowlist nicht.
Wildcard- oder Plugin-eigene Tool-Einträge verwendet. `tools.allow: ["*"]` entspricht nur Tools
aus Plugins, die tatsächlich geladen werden; es umgeht nicht die exklusive Plugin-
Zulassungsliste.
</Accordion>
<Accordion title="2. Migrationen von Legacy-Konfigurationsschlüsseln">
<Accordion title="2. Legacy-Konfigurationsschlüssel-Migrationen">
Wenn die Konfiguration veraltete Schlüssel enthält, verweigern andere Befehle die Ausführung und fordern Sie auf, `openclaw doctor` auszuführen.
Doctor wird:
@ -188,7 +188,7 @@ Dadurch werden Grounded-Durable-Kandidaten in den Kurzzeit-Dreaming-Speicher ges
- Die angewendete Migration anzeigen.
- `~/.openclaw/openclaw.json` mit dem aktualisierten Schema neu schreiben.
Das Gateway führt doctor-Migrationen beim Start außerdem automatisch aus, wenn es ein Legacy-Konfigurationsformat erkennt, sodass veraltete Konfigurationen ohne manuellen Eingriff repariert werden. Cron-Jobspeicher-Migrationen werden von `openclaw doctor --fix` verarbeitet.
Das Gateway führt doctor-Migrationen beim Start außerdem automatisch aus, wenn es ein Legacy-Konfigurationsformat erkennt, sodass veraltete Konfigurationen ohne manuelles Eingreifen repariert werden. Cron-Job-Speichermigrationen werden von `openclaw doctor --fix` verarbeitet.
Aktuelle Migrationen:
@ -196,11 +196,11 @@ Dadurch werden Grounded-Durable-Kandidaten in den Kurzzeit-Dreaming-Speicher ges
- `routing.groupChat.requireMention``channels.whatsapp/telegram/imessage.groups."*".requireMention`
- `routing.groupChat.historyLimit``messages.groupChat.historyLimit`
- `routing.groupChat.mentionPatterns``messages.groupChat.mentionPatterns`
- Konfigurationen konfigurierter Kanäle ohne sichtbare Antwortrichtlinie → `messages.groupChat.visibleReplies: "message_tool"`
- Configs konfigurierter Channels ohne sichtbare Antwortrichtlinie → `messages.groupChat.visibleReplies: "message_tool"`
- `routing.queue``messages.queue`
- `routing.bindings` → oberste Ebene `bindings`
- `routing.bindings``bindings` auf oberster Ebene
- `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default`
- veraltete `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` → `talk.provider` + `talk.providers.<provider>`
- veraltetes `talk.voiceId`/`talk.voiceAliases`/`talk.modelId`/`talk.outputFormat`/`talk.apiKey` → `talk.provider` + `talk.providers.<provider>`
- `routing.agentToAgent``tools.agentToAgent`
- `routing.transcribeAudio``tools.media.audio.models`
- `messages.tts.<provider>` (`openai`/`elevenlabs`/`microsoft`/`edge`) → `messages.tts.providers.<provider>`
@ -214,84 +214,84 @@ Dadurch werden Grounded-Durable-Kandidaten in den Kurzzeit-Dreaming-Speicher ges
- `plugins.entries.voice-call.config.streaming.sttProvider``plugins.entries.voice-call.config.streaming.provider`
- `plugins.entries.voice-call.config.streaming.openaiApiKey|sttModel|silenceDurationMs|vadThreshold``plugins.entries.voice-call.config.streaming.providers.openai.*`
- `bindings[].match.accountID``bindings[].match.accountId`
- Für Kanäle mit benannten `accounts`, aber verbleibenden Einzelkonto-Werten auf oberster Kanalebene, verschieben Sie diese kontobezogenen Werte in das für diesen Kanal hochgestufte Konto (`accounts.default` für die meisten Kanäle; Matrix kann ein vorhandenes passendes benanntes/Standard-Ziel beibehalten)
- Bei Channels mit benannten `accounts`, aber verbleibenden Top-Level-Channel-Werten für ein einzelnes Konto, verschieben Sie diese kontospezifischen Werte in das für diesen Channel ausgewählte hochgestufte Konto (`accounts.default` für die meisten Channels; Matrix kann ein vorhandenes passendes benanntes/Standard-Ziel beibehalten)
- `identity``agents.list[].identity`
- `agent.*``agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents)
- `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks` → `agents.defaults.models` + `agents.defaults.model.primary/fallbacks` + `agents.defaults.imageModel.primary/fallbacks`
- entfernen Sie `agents.defaults.llm`; verwenden Sie `models.providers.<id>.timeoutSeconds` für Timeouts langsamer Provider/Modelle
- `agents.defaults.llm` entfernen; verwenden Sie `models.providers.<id>.timeoutSeconds` für Timeouts langsamer Provider/Modelle
- `browser.ssrfPolicy.allowPrivateNetwork``browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
- `browser.profiles.*.driver: "extension"``"existing-session"`
- entfernen Sie `browser.relayBindHost` (veraltete Relay-Einstellung der Extension)
- veraltetes `models.providers.*.api: "openai"``"openai-completions"` (der Gateway-Start überspringt außerdem Provider, deren `api` auf einen zukünftigen oder unbekannten Enum-Wert gesetzt ist, statt geschlossen fehlzuschlagen)
- `browser.relayBindHost` entfernen (veraltete Relay-Einstellung der Erweiterung)
- veraltetes `models.providers.*.api: "openai"``"openai-completions"` (der Gateway-Start überspringt auch Provider, deren `api` auf einen zukünftigen oder unbekannten Enum-Wert gesetzt ist, statt geschlossen fehlzuschlagen)
Doctor-Warnungen enthalten außerdem Hinweise zu Standardkonten für Mehrkonten-Kanäle:
Doctor-Warnungen enthalten auch Hinweise zu Standardkonten für Multi-Account-Channels:
- Wenn zwei oder mehr `channels.<channel>.accounts`-Einträge ohne `channels.<channel>.defaultAccount` oder `accounts.default` konfiguriert sind, warnt Doctor, dass Fallback-Routing ein unerwartetes Konto auswählen kann.
- Wenn `channels.<channel>.defaultAccount` auf eine unbekannte Konto-ID gesetzt ist, warnt Doctor und listet konfigurierte Konto-IDs auf.
- Wenn `channels.<channel>.defaultAccount` auf eine unbekannte Konto-ID gesetzt ist, warnt Doctor und listet die konfigurierten Konto-IDs auf.
</Accordion>
<Accordion title="2b. OpenCode-Provider-Overrides">
Wenn Sie `models.providers.opencode`, `opencode-zen` oder `opencode-go` manuell hinzugefügt haben, überschreibt dies den integrierten OpenCode-Katalog aus `@mariozechner/pi-ai`. Dadurch können Modelle auf die falsche API gezwungen oder Kosten auf null gesetzt werden. Doctor warnt, damit Sie das Override entfernen und API-Routing + Kosten pro Modell wiederherstellen können.
</Accordion>
<Accordion title="2c. Browser-Migration und Chrome-MCP-Bereitschaft">
Wenn Ihre Browser-Konfiguration noch auf den entfernten Chrome-Extension-Pfad zeigt, normalisiert Doctor sie auf das aktuelle hostlokale Chrome-MCP-Anfügemodell:
Wenn Ihre Browser-Konfiguration noch auf den entfernten Chrome-Erweiterungspfad verweist, normalisiert Doctor sie auf das aktuelle host-lokale Chrome-MCP-Attach-Modell:
- `browser.profiles.*.driver: "extension"` wird zu `"existing-session"`
- `browser.relayBindHost` wird entfernt
Doctor prüft außerdem den hostlokalen Chrome-MCP-Pfad, wenn Sie `defaultProfile: "user"` oder ein konfiguriertes `existing-session`-Profil verwenden:
Doctor prüft außerdem den host-lokalen Chrome-MCP-Pfad, wenn Sie `defaultProfile: "user"` oder ein konfiguriertes `existing-session`-Profil verwenden:
- prüft, ob Google Chrome für Standardprofile mit automatischer Verbindung auf demselben Host installiert ist
- prüft, ob Google Chrome auf demselben Host für Standardprofile mit automatischer Verbindung installiert ist
- prüft die erkannte Chrome-Version und warnt, wenn sie unter Chrome 144 liegt
- erinnert Sie daran, Remote-Debugging auf der Inspect-Seite des Browsers zu aktivieren (zum Beispiel `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging` oder `edge://inspect/#remote-debugging`)
- erinnert Sie daran, Remote-Debugging auf der Browser-Inspect-Seite zu aktivieren (zum Beispiel `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging` oder `edge://inspect/#remote-debugging`)
Doctor kann die Chrome-seitige Einstellung nicht für Sie aktivieren. Hostlokales Chrome MCP erfordert weiterhin:
Doctor kann die Chrome-seitige Einstellung nicht für Sie aktivieren. Host-lokales Chrome MCP erfordert weiterhin:
- einen Chromium-basierten Browser ab Version 144 auf dem Gateway/Node-Host
- einen Chromium-basierten Browser 144+ auf dem Gateway/Node-Host
- den lokal laufenden Browser
- aktiviertes Remote-Debugging in diesem Browser
- Bestätigung der ersten Zustimmungsaufforderung zum Anfügen im Browser
- in diesem Browser aktiviertes Remote-Debugging
- das Bestätigen der ersten Attach-Zustimmungsaufforderung im Browser
Die Bereitschaft bezieht sich hier nur auf lokale Voraussetzungen zum Anfügen. Existing-session behält die aktuellen Chrome-MCP-Routenlimits bei; erweiterte Routen wie `responsebody`, PDF-Export, Download-Abfangung und Batch-Aktionen erfordern weiterhin einen verwalteten Browser oder ein Raw-CDP-Profil.
Die Bereitschaft hier bezieht sich nur auf Voraussetzungen für lokales Attach. Existing-session behält die aktuellen Chrome-MCP-Routenlimits bei; erweiterte Routen wie `responsebody`, PDF-Export, Download-Interception und Batch-Aktionen erfordern weiterhin einen verwalteten Browser oder ein Raw-CDP-Profil.
Diese Prüfung gilt **nicht** für Docker-, Sandbox-, Remote-Browser- oder andere Headless-Flows. Diese verwenden weiterhin Raw CDP.
</Accordion>
<Accordion title="2d. OAuth-TLS-Voraussetzungen">
Wenn ein OpenAI-Codex-OAuth-Profil konfiguriert ist, prüft Doctor den OpenAI-Autorisierungsendpunkt, um sicherzustellen, dass der lokale Node/OpenSSL-TLS-Stack die Zertifikatskette validieren kann. Wenn die Prüfung mit einem Zertifikatsfehler fehlschlägt (zum Beispiel `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`, abgelaufenes Zertifikat oder selbstsigniertes Zertifikat), gibt Doctor plattformspezifische Hinweise zur Behebung aus. Unter macOS mit einem Homebrew-Node ist die Behebung normalerweise `brew postinstall ca-certificates`. Mit `--deep` wird die Prüfung auch ausgeführt, wenn das Gateway fehlerfrei ist.
Wenn ein OpenAI-Codex-OAuth-Profil konfiguriert ist, prüft Doctor den OpenAI-Autorisierungsendpunkt, um zu verifizieren, dass der lokale Node/OpenSSL-TLS-Stack die Zertifikatskette validieren kann. Wenn die Prüfung mit einem Zertifikatsfehler fehlschlägt (zum Beispiel `UNABLE_TO_GET_ISSUER_CERT_LOCALLY`, abgelaufenes Zertifikat oder selbstsigniertes Zertifikat), gibt Doctor plattformspezifische Hinweise zur Behebung aus. Unter macOS mit einem Homebrew-Node ist die Behebung üblicherweise `brew postinstall ca-certificates`. Mit `--deep` läuft die Prüfung auch dann, wenn der Gateway gesund ist.
</Accordion>
<Accordion title="2e. Codex-OAuth-Provider-Overrides">
Wenn Sie früher veraltete OpenAI-Transporteinstellungen unter `models.providers.openai-codex` hinzugefügt haben, können diese den integrierten Codex-OAuth-Provider-Pfad überdecken, den neuere Releases automatisch verwenden. Doctor warnt, wenn es diese alten Transporteinstellungen zusammen mit Codex OAuth erkennt, damit Sie das veraltete Transport-Override entfernen oder umschreiben und das integrierte Routing-/Fallback-Verhalten zurückerhalten können. Benutzerdefinierte Proxys und reine Header-Overrides werden weiterhin unterstützt und lösen diese Warnung nicht aus.
Wenn Sie zuvor veraltete OpenAI-Transporteinstellungen unter `models.providers.openai-codex` hinzugefügt haben, können diese den integrierten Codex-OAuth-Provider-Pfad überdecken, den neuere Releases automatisch verwenden. Doctor warnt, wenn diese alten Transporteinstellungen zusammen mit Codex OAuth gefunden werden, damit Sie das veraltete Transport-Override entfernen oder neu schreiben und das integrierte Routing-/Fallback-Verhalten wiederherstellen können. Benutzerdefinierte Proxys und reine Header-Overrides werden weiterhin unterstützt und lösen diese Warnung nicht aus.
</Accordion>
<Accordion title="2f. Codex-Plugin-Routenwarnungen">
Wenn das gebündelte Codex-Plugin aktiviert ist, prüft Doctor außerdem, ob `openai-codex/*`-Primärmodellreferenzen weiterhin über den Standard-PI-Runner aufgelöst werden. Diese Kombination ist gültig, wenn Sie Codex-OAuth-/Abonnementauthentifizierung über PI verwenden möchten, kann aber leicht mit dem nativen Codex-App-Server-Harness verwechselt werden. Doctor warnt und verweist auf die explizite App-Server-Form: `openai/*` plus `agentRuntime.id: "codex"` oder `OPENCLAW_AGENT_RUNTIME=codex`.
Wenn das gebündelte Codex-Plugin aktiviert ist, prüft Doctor außerdem, ob primäre Modellreferenzen für `openai-codex/*` noch über den Standard-PI-Runner aufgelöst werden. Diese Kombination ist gültig, wenn Sie Codex-OAuth-/Abonnement-Auth über PI verwenden möchten, kann aber leicht mit dem nativen Codex-App-Server-Harness verwechselt werden. Doctor warnt und verweist auf die explizite App-Server-Form: `openai/*` plus `agentRuntime.id: "codex"` oder `OPENCLAW_AGENT_RUNTIME=codex`.
Doctor repariert dies nicht automatisch, weil beide Routen gültig sind:
Doctor repariert dies nicht automatisch, da beide Routen gültig sind:
- `openai-codex/*` + PI bedeutet: „Codex-OAuth-/Abonnementauthentifizierung über den normalen OpenClaw-Runner verwenden.“
- `openai/*` + `agentRuntime.id: "codex"` bedeutet: „Den eingebetteten Turn über den nativen Codex-App-Server ausführen.“
- `/codex ...` bedeutet: „Eine native Codex-Konversation aus dem Chat steuern oder binden.“
- `/acp ...` oder `runtime: "acp"` bedeutet: „Den externen ACP/acpx-Adapter verwenden.“
- `openai-codex/*` + PI bedeutet „Codex-OAuth-/Abonnement-Auth über den normalen OpenClaw-Runner verwenden.“
- `openai/*` + `agentRuntime.id: "codex"` bedeutet „den eingebetteten Turn über den nativen Codex-App-Server ausführen.“
- `/codex ...` bedeutet „eine native Codex-Konversation aus dem Chat steuern oder binden.“
- `/acp ...` oder `runtime: "acp"` bedeutet „den externen ACP/acpx-Adapter verwenden.“
Wenn die Warnung erscheint, wählen Sie die beabsichtigte Route und bearbeiten Sie die Konfiguration manuell. Behalten Sie die Warnung unverändert bei, wenn PI Codex OAuth beabsichtigt ist.
Wenn die Warnung angezeigt wird, wählen Sie die beabsichtigte Route und bearbeiten Sie die Konfiguration manuell. Lassen Sie die Warnung unverändert, wenn PI-Codex-OAuth beabsichtigt ist.
</Accordion>
<Accordion title="3. Veraltete Statusmigrationen (Datenträgerlayout)">
Doctor kann ältere Layouts auf dem Datenträger in die aktuelle Struktur migrieren:
<Accordion title="3. Migrationen veralteter Zustände (Festplattenlayout)">
Doctor kann ältere On-Disk-Layouts in die aktuelle Struktur migrieren:
- Sitzungsspeicher + Transkripte:
- von `~/.openclaw/sessions/` nach `~/.openclaw/agents/<agentId>/sessions/`
- Agent-Verzeichnis:
- von `~/.openclaw/agent/` nach `~/.openclaw/agents/<agentId>/agent/`
- WhatsApp-Authentifizierungsstatus (Baileys):
- WhatsApp-Auth-Status (Baileys):
- von veraltetem `~/.openclaw/credentials/*.json` (außer `oauth.json`)
- nach `~/.openclaw/credentials/whatsapp/<accountId>/...` (Standardkonto-ID: `default`)
Diese Migrationen erfolgen nach bestem Aufwand und sind idempotent; Doctor gibt Warnungen aus, wenn veraltete Ordner als Backups zurückbleiben. Das Gateway/die CLI migriert außerdem beim Start automatisch die veralteten Sitzungen + das Agent-Verzeichnis, sodass Verlauf/Authentifizierung/Modelle ohne manuellen Doctor-Lauf im agentenspezifischen Pfad landen. WhatsApp-Authentifizierung wird absichtlich nur über `openclaw doctor` migriert. Die Normalisierung von Talk-Provider/Provider-Map vergleicht jetzt nach struktureller Gleichheit, sodass reine Schlüsselreihenfolge-Diffs keine wiederholten No-op-Änderungen durch `doctor --fix` mehr auslösen.
Diese Migrationen erfolgen nach bestem Aufwand und sind idempotent; Doctor gibt Warnungen aus, wenn veraltete Ordner als Backups zurückbleiben. Gateway/CLI migrieren außerdem automatisch den veralteten Sitzungsspeicher + das Agent-Verzeichnis beim Start, sodass Verlauf/Auth/Modelle ohne manuellen Doctor-Lauf im agentenspezifischen Pfad landen. WhatsApp-Auth wird absichtlich nur über `openclaw doctor` migriert. Die Normalisierung von Talk-Provider/Provider-Map vergleicht jetzt nach struktureller Gleichheit, sodass reine Key-Order-Diffs keine wiederholten No-Op-Änderungen durch `doctor --fix` mehr auslösen.
</Accordion>
<Accordion title="3a. Migrationen veralteter Plugin-Manifeste">
Doctor scannt alle installierten Plugin-Manifeste auf veraltete Capability-Schlüssel auf oberster Ebene (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Wenn sie gefunden werden, bietet es an, sie in das `contracts`-Objekt zu verschieben und die Manifestdatei direkt umzuschreiben. Diese Migration ist idempotent; wenn der Schlüssel `contracts` bereits dieselben Werte enthält, wird der veraltete Schlüssel entfernt, ohne die Daten zu duplizieren.
Doctor scannt alle installierten Plugin-Manifeste nach veralteten Capability-Schlüsseln auf oberster Ebene (`speechProviders`, `realtimeTranscriptionProviders`, `realtimeVoiceProviders`, `mediaUnderstandingProviders`, `imageGenerationProviders`, `videoGenerationProviders`, `webFetchProviders`, `webSearchProviders`). Wenn sie gefunden werden, bietet Doctor an, sie in das `contracts`-Objekt zu verschieben und die Manifestdatei direkt zu überschreiben. Diese Migration ist idempotent; wenn der Schlüssel `contracts` bereits dieselben Werte enthält, wird der veraltete Schlüssel entfernt, ohne die Daten zu duplizieren.
</Accordion>
<Accordion title="3b. Migrationen veralteter Cron-Speicher">
Doctor prüft außerdem den Cron-Job-Speicher (standardmäßig `~/.openclaw/cron/jobs.json` oder `cron.store`, wenn überschrieben) auf alte Job-Formen, die der Scheduler aus Kompatibilitätsgründen weiterhin akzeptiert.
@ -301,197 +301,197 @@ Dadurch werden Grounded-Durable-Kandidaten in den Kurzzeit-Dreaming-Speicher ges
- `jobId``id`
- `schedule.cron``schedule.expr`
- Payload-Felder auf oberster Ebene (`message`, `model`, `thinking`, ...) → `payload`
- Zustellungsfelder auf oberster Ebene (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
- Payload-`provider`-Zustellungsaliasse → explizites `delivery.channel`
- Zustellfelder auf oberster Ebene (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
- Payload-`provider`-Zustellaliasse → explizites `delivery.channel`
- einfache veraltete `notify: true`-Webhook-Fallback-Jobs → explizites `delivery.mode="webhook"` mit `delivery.to=cron.webhook`
Doctor migriert `notify: true`-Jobs nur dann automatisch, wenn dies ohne Verhaltensänderung möglich ist. Wenn ein Job veralteten Notify-Fallback mit einem vorhandenen Nicht-Webhook-Zustellungsmodus kombiniert, warnt Doctor und belässt diesen Job zur manuellen Prüfung.
Doctor migriert `notify: true`-Jobs nur dann automatisch, wenn dies ohne Verhaltensänderung möglich ist. Wenn ein Job den veralteten Notify-Fallback mit einem vorhandenen Nicht-Webhook-Zustellmodus kombiniert, warnt Doctor und lässt diesen Job zur manuellen Prüfung unverändert.
Unter Linux warnt Doctor außerdem, wenn die Crontab des Benutzers weiterhin das veraltete `~/.openclaw/bin/ensure-whatsapp.sh` aufruft. Dieses hostlokale Skript wird von aktuellem OpenClaw nicht gepflegt und kann falsche `Gateway inactive`-Meldungen nach `~/.openclaw/logs/whatsapp-health.log` schreiben, wenn Cron den systemd-User-Bus nicht erreichen kann. Entfernen Sie den veralteten Crontab-Eintrag mit `crontab -e`; verwenden Sie `openclaw channels status --probe`, `openclaw doctor` und `openclaw gateway status` für aktuelle Integritätsprüfungen.
Unter Linux warnt Doctor außerdem, wenn die Crontab des Benutzers noch das veraltete `~/.openclaw/bin/ensure-whatsapp.sh` aufruft. Dieses host-lokale Skript wird vom aktuellen OpenClaw nicht gepflegt und kann falsche `Gateway inactive`-Meldungen nach `~/.openclaw/logs/whatsapp-health.log` schreiben, wenn Cron den systemd-User-Bus nicht erreichen kann. Entfernen Sie den veralteten Crontab-Eintrag mit `crontab -e`; verwenden Sie `openclaw channels status --probe`, `openclaw doctor` und `openclaw gateway status` für aktuelle Health Checks.
</Accordion>
<Accordion title="3c. Bereinigung von Sitzungssperren">
Doctor durchsucht jedes Agent-Sitzungsverzeichnis nach veralteten Schreibsperrdateien, also Dateien, die zurückbleiben, wenn eine Sitzung ungewöhnlich beendet wurde. Für jede gefundene Sperrdatei meldet er: den Pfad, die PID, ob die PID noch aktiv ist, das Alter der Sperre und ob sie als veraltet gilt (tote PID oder älter als 30 Minuten). Im Modus `--fix` / `--repair` entfernt er veraltete Sperrdateien automatisch; andernfalls gibt er einen Hinweis aus und weist Sie an, den Befehl erneut mit `--fix` auszuführen.
Doctor durchsucht jedes Agent-Sitzungsverzeichnis nach veralteten Schreibsperrdateien Dateien, die zurückbleiben, wenn eine Sitzung abnormal beendet wurde. Für jede gefundene Sperrdatei meldet es: den Pfad, die PID, ob die PID noch aktiv ist, das Alter der Sperre und ob sie als veraltet gilt (tote PID oder älter als 30 Minuten). Im Modus `--fix` / `--repair` entfernt es veraltete Sperrdateien automatisch; andernfalls gibt es einen Hinweis aus und weist Sie an, den Befehl erneut mit `--fix` auszuführen.
</Accordion>
<Accordion title="3d. Reparatur von Sitzungs-Transkript-Branches">
Doctor durchsucht Agent-Sitzungs-JSONL-Dateien nach der duplizierten Branch-Struktur, die durch den Fehler beim Umschreiben des Prompt-Transkripts vom 2026.4.24 erzeugt wurde: ein aufgegebener Benutzer-Turn mit internem OpenClaw-Laufzeitkontext plus ein aktiver Geschwister-Turn mit demselben sichtbaren Benutzer-Prompt. Im Modus `--fix` / `--repair` sichert Doctor jede betroffene Datei neben dem Original und schreibt das Transkript auf den aktiven Branch um, sodass Gateway-Verlauf und Memory-Reader keine doppelten Turns mehr sehen.
<Accordion title="3d. Reparatur des Sitzungstranskript-Branches">
Doctor durchsucht Agent-Sitzungsdateien im JSONL-Format nach der duplizierten Branch-Form, die durch den Fehler beim Prompt-Transkript-Rewrite vom 24.4.2026 erzeugt wurde: ein aufgegebener Benutzer-Turn mit internem OpenClaw-Laufzeitkontext sowie ein aktiver Geschwister-Branch mit demselben sichtbaren Benutzer-Prompt. Im Modus `--fix` / `--repair` sichert Doctor jede betroffene Datei neben dem Original und schreibt das Transkript auf den aktiven Branch um, sodass Gateway-Verlauf und Memory-Leser keine doppelten Turns mehr sehen.
</Accordion>
<Accordion title="4. Integritätsprüfungen des Zustands (Sitzungspersistenz, Routing und Sicherheit)">
Das Zustandsverzeichnis ist der operative Hirnstamm. Wenn es verschwindet, verlieren Sie Sitzungen, Zugangsdaten, Protokolle und Konfiguration (sofern Sie keine Backups an anderer Stelle haben).
<Accordion title="4. Integritätsprüfungen für den Zustand (Sitzungspersistenz, Routing und Sicherheit)">
Das Zustandsverzeichnis ist der operative Hirnstamm. Wenn es verschwindet, verlieren Sie Sitzungen, Anmeldedaten, Protokolle und Konfiguration (sofern Sie keine Sicherungen an anderer Stelle haben).
Doctor prüft:
- **Zustandsverzeichnis fehlt**: warnt vor katastrophalem Zustandsverlust, fordert zum Neuerstellen des Verzeichnisses auf und erinnert Sie daran, dass fehlende Daten nicht wiederhergestellt werden können.
- **Berechtigungen des Zustandsverzeichnisses**: prüft Schreibbarkeit; bietet an, Berechtigungen zu reparieren (und gibt einen `chown`-Hinweis aus, wenn eine Abweichung bei Besitzer/Gruppe erkannt wird).
- **macOS-Zustandsverzeichnis mit Cloud-Synchronisierung**: warnt, wenn der Zustand unter iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) oder `~/Library/CloudStorage/...` aufgelöst wird, weil synchronisationsgestützte Pfade langsamere I/O und Sperr-/Synchronisationsrennen verursachen können.
- **Linux-Zustandsverzeichnis auf SD oder eMMC**: warnt, wenn der Zustand auf eine `mmcblk*`-Mount-Quelle aufgelöst wird, weil zufällige I/O auf SD- oder eMMC-Speicher unter Sitzungs- und Zugangsdaten-Schreibvorgängen langsamer sein und schneller verschleißen kann.
- **Sitzungsverzeichnisse fehlen**: `sessions/` und das Sitzungs-Store-Verzeichnis sind erforderlich, um Verlauf zu persistieren und `ENOENT`-Abstürze zu vermeiden.
- **Transkript-Abweichung**: warnt, wenn neuere Sitzungseinträge fehlende Transkriptdateien haben.
- **Hauptsitzung „1-Zeilen-JSONL“**: kennzeichnet, wenn das Haupttranskript nur eine Zeile hat (der Verlauf wächst nicht an).
- **Mehrere Zustandsverzeichnisse**: warnt, wenn mehrere `~/.openclaw`-Ordner über Home-Verzeichnisse hinweg existieren oder wenn `OPENCLAW_STATE_DIR` auf einen anderen Ort zeigt (der Verlauf kann sich zwischen Installationen aufteilen).
- **Erinnerung für Remote-Modus**: wenn `gateway.mode=remote`, erinnert Doctor Sie daran, ihn auf dem Remote-Host auszuführen (der Zustand liegt dort).
- **Berechtigungen der Konfigurationsdatei**: warnt, wenn `~/.openclaw/openclaw.json` für Gruppe/Welt lesbar ist, und bietet an, die Berechtigungen auf `600` zu verschärfen.
- **Zustandsverzeichnis fehlt**: warnt vor katastrophalem Zustandsverlust, fordert dazu auf, das Verzeichnis neu zu erstellen, und erinnert Sie daran, dass fehlende Daten nicht wiederhergestellt werden können.
- **Berechtigungen des Zustandsverzeichnisses**: verifiziert die Schreibbarkeit; bietet an, Berechtigungen zu reparieren (und gibt einen `chown`-Hinweis aus, wenn eine Abweichung bei Besitzer/Gruppe erkannt wird).
- **macOS-Zustandsverzeichnis mit Cloud-Synchronisierung**: warnt, wenn der Zustand unter iCloud Drive (`~/Library/Mobile Documents/com~apple~CloudDocs/...`) oder `~/Library/CloudStorage/...` aufgelöst wird, da synchronisationsgestützte Pfade langsamere E/A sowie Sperr-/Synchronisationsrennen verursachen können.
- **Linux-Zustandsverzeichnis auf SD oder eMMC**: warnt, wenn der Zustand auf eine `mmcblk*`-Mount-Quelle aufgelöst wird, da zufällige E/A auf SD- oder eMMC-Speicher unter Sitzungs- und Anmeldedaten-Schreibvorgängen langsamer sein und schneller verschleißen kann.
- **Sitzungsverzeichnisse fehlen**: `sessions/` und das Sitzungsspeicherverzeichnis sind erforderlich, um Verlauf zu persistieren und `ENOENT`-Abstürze zu vermeiden.
- **Transkriptabweichung**: warnt, wenn bei aktuellen Sitzungseinträgen Transkriptdateien fehlen.
- **Hauptsitzung „1-line JSONL“**: markiert, wenn das Haupttranskript nur eine Zeile hat (Verlauf sammelt sich nicht an).
- **Mehrere Zustandsverzeichnisse**: warnt, wenn mehrere `~/.openclaw`-Ordner über Home-Verzeichnisse hinweg existieren oder wenn `OPENCLAW_STATE_DIR` an einen anderen Ort zeigt (Verlauf kann sich zwischen Installationen aufteilen).
- **Hinweis zum Remote-Modus**: wenn `gateway.mode=remote`, erinnert Doctor Sie daran, es auf dem Remote-Host auszuführen (der Zustand liegt dort).
- **Berechtigungen der Konfigurationsdatei**: warnt, wenn `~/.openclaw/openclaw.json` für Gruppe/Welt lesbar ist, und bietet an, auf `600` zu verschärfen.
</Accordion>
<Accordion title="5. Zustand der Modellauthentifizierung (OAuth-Ablauf)">
Doctor prüft OAuth-Profile im Auth-Store, warnt, wenn Tokens bald ablaufen oder abgelaufen sind, und kann sie aktualisieren, wenn dies sicher ist. Wenn das Anthropic-OAuth-/Token-Profil veraltet ist, schlägt er einen Anthropic-API-Schlüssel oder den Anthropic-Setup-Token-Pfad vor. Aktualisierungsaufforderungen erscheinen nur bei interaktiver Ausführung (TTY); `--non-interactive` überspringt Aktualisierungsversuche.
Doctor prüft OAuth-Profile im Authentifizierungsspeicher, warnt, wenn Tokens bald ablaufen/abgelaufen sind, und kann sie aktualisieren, wenn dies sicher ist. Wenn das Anthropic-OAuth-/Tokenprofil veraltet ist, schlägt es einen Anthropic-API-Schlüssel oder den Anthropic-Setup-Token-Pfad vor. Aktualisierungsaufforderungen erscheinen nur bei interaktiver Ausführung (TTY); `--non-interactive` überspringt Aktualisierungsversuche.
Wenn eine OAuth-Aktualisierung dauerhaft fehlschlägt (zum Beispiel `refresh_token_reused`, `invalid_grant` oder ein Provider Sie auffordert, sich erneut anzumelden), meldet Doctor, dass eine erneute Authentifizierung erforderlich ist, und gibt den exakt auszuführenden Befehl `openclaw models auth login --provider ...` aus.
Doctor meldet außerdem Auth-Profile, die vorübergehend nicht nutzbar sind wegen:
Doctor meldet außerdem Authentifizierungsprofile, die vorübergehend nicht nutzbar sind aufgrund von:
- kurzen Cooldowns (Rate-Limits/Timeouts/Auth-Fehler)
- längeren Deaktivierungen (Abrechnungs-/Guthabenfehler)
- kurzen Abklingzeiten (Rate Limits/Zeitüberschreitungen/Authentifizierungsfehlern)
- längeren Deaktivierungen (Abrechnungs-/Guthabenfehlern)
</Accordion>
<Accordion title="6. Modellvalidierung für Hooks">
Wenn `hooks.gmail.model` gesetzt ist, validiert Doctor die Modellreferenz gegen den Katalog und die Allowlist und warnt, wenn sie nicht aufgelöst werden kann oder nicht erlaubt ist.
Wenn `hooks.gmail.model` gesetzt ist, validiert Doctor die Modellreferenz gegen den Katalog und die Allowlist und warnt, wenn sie nicht aufgelöst wird oder nicht erlaubt ist.
</Accordion>
<Accordion title="7. Reparatur von Sandbox-Images">
Wenn Sandboxing aktiviert ist, prüft Doctor Docker-Images und bietet an, sie zu bauen oder auf Legacy-Namen zu wechseln, falls das aktuelle Image fehlt.
</Accordion>
<Accordion title="7b. Bereinigung von Plugin-Installationen">
Doctor entfernt veralteten von OpenClaw generierten Staging-Zustand für Plugin-Abhängigkeiten im Modus `openclaw doctor --fix` / `openclaw doctor --repair`. Dies umfasst veraltete generierte Abhängigkeits-Roots, alte Installations-Staging-Verzeichnisse und paketlokale Rückstände aus früherem Reparaturcode für Abhängigkeiten gebündelter Plugins.
<Accordion title="7b. Bereinigung der Plugin-Installation">
Doctor entfernt im Modus `openclaw doctor --fix` / `openclaw doctor --repair` von OpenClaw erzeugten Legacy-Staging-Zustand für Plugin-Abhängigkeiten. Dies umfasst veraltete generierte Abhängigkeitswurzeln, alte Installations-Staging-Verzeichnisse, paketlokale Rückstände aus früherem Reparaturcode für Abhängigkeiten gebündelter Plugins sowie verwaiste oder wiederhergestellte verwaltete npm-Kopien gebündelter `@openclaw/*`-Plugins, die das aktuelle gebündelte Manifest überdecken können.
Doctor kann auch konfigurierte herunterladbare Plugins erneut installieren, wenn die Konfiguration auf sie verweist, die lokale Plugin-Registry sie aber nicht findet. Für die Externalisierung gebündelter Plugins vom 2026.5.2 installiert Doctor automatisch herunterladbare Plugins, die die vorhandene Konfiguration bereits verwendet, und verlässt sich dann auf `meta.lastTouchedVersion`, damit dieser Release-Durchlauf nur einmal ausgeführt wird. Gateway-Start und Konfigurationsneuladen führen keine Paketmanager aus; Plugin-Installationen bleiben explizite Doctor-/Installations-/Update-Arbeit.
Doctor kann außerdem konfigurierte herunterladbare Plugins neu installieren, wenn die Konfiguration auf sie verweist, die lokale Plugin-Registry sie aber nicht finden kann. Für die Externalisierung gebündelter Plugins am 2.5.2026 installiert Doctor automatisch herunterladbare Plugins, die von der bestehenden Konfiguration bereits verwendet werden, und verlässt sich dann auf `meta.lastTouchedVersion`, damit dieser Release-Durchlauf nur einmal ausgeführt wird. Gateway-Start und Neuladen der Konfiguration führen keine Paketmanager aus; Plugin-Installationen bleiben explizite Doctor-/Installations-/Aktualisierungsarbeit.
</Accordion>
<Accordion title="8. Migrationen von Gateway-Diensten und Bereinigungshinweise">
Doctor erkennt Legacy-Gateway-Dienste (launchd/systemd/schtasks) und bietet an, sie zu entfernen und den OpenClaw-Dienst mit dem aktuellen Gateway-Port zu installieren. Er kann außerdem nach zusätzlichen Gateway-ähnlichen Diensten suchen und Bereinigungshinweise ausgeben. Profilbenannte OpenClaw-Gateway-Dienste gelten als vollwertig und werden nicht als „extra“ markiert.
<Accordion title="8. Gateway-Dienstmigrationen und Bereinigungshinweise">
Doctor erkennt Legacy-Gateway-Dienste (launchd/systemd/schtasks) und bietet an, sie zu entfernen und den OpenClaw-Dienst mit dem aktuellen Gateway-Port zu installieren. Es kann außerdem nach zusätzlichen Gateway-ähnlichen Diensten suchen und Bereinigungshinweise ausgeben. Profilbenannte OpenClaw-Gateway-Dienste gelten als erstklassig und werden nicht als „zusätzlich“ markiert.
Unter Linux installiert Doctor nicht automatisch einen zweiten Dienst auf Benutzerebene, wenn der Gateway-Dienst auf Benutzerebene fehlt, aber ein OpenClaw-Gateway-Dienst auf Systemebene existiert. Prüfen Sie dies mit `openclaw gateway status --deep` oder `openclaw doctor --deep`, entfernen Sie dann das Duplikat oder setzen Sie `OPENCLAW_SERVICE_REPAIR_POLICY=external`, wenn ein System-Supervisor den Gateway-Lebenszyklus verwaltet.
Unter Linux installiert Doctor keinen zweiten Dienst auf Benutzerebene automatisch, wenn der Gateway-Dienst auf Benutzerebene fehlt, aber ein OpenClaw-Gateway-Dienst auf Systemebene existiert. Prüfen Sie dies mit `openclaw gateway status --deep` oder `openclaw doctor --deep`, entfernen Sie dann das Duplikat oder setzen Sie `OPENCLAW_SERVICE_REPAIR_POLICY=external`, wenn ein System-Supervisor den Gateway-Lebenszyklus verwaltet.
</Accordion>
<Accordion title="8b. Startup-Matrix-Migration">
Wenn ein Matrix-Kanal-Konto eine ausstehende oder umsetzbare Legacy-Zustandsmigration hat, erstellt Doctor (im Modus `--fix` / `--repair`) einen Snapshot vor der Migration und führt dann die Best-Effort-Migrationsschritte aus: Legacy-Matrix-Zustandsmigration und Vorbereitung des verschlüsselten Legacy-Zustands. Beide Schritte sind nicht fatal; Fehler werden protokolliert und der Start wird fortgesetzt. Im schreibgeschützten Modus (`openclaw doctor` ohne `--fix`) wird diese Prüfung vollständig übersprungen.
Wenn ein Matrix-Kanalkonto eine ausstehende oder handlungsrelevante Legacy-Zustandsmigration hat, erstellt Doctor (im Modus `--fix` / `--repair`) einen Snapshot vor der Migration und führt dann die Best-Effort-Migrationsschritte aus: Legacy-Matrix-Zustandsmigration und Vorbereitung des verschlüsselten Legacy-Zustands. Beide Schritte sind nicht fatal; Fehler werden protokolliert und der Start wird fortgesetzt. Im schreibgeschützten Modus (`openclaw doctor` ohne `--fix`) wird diese Prüfung vollständig übersprungen.
</Accordion>
<Accordion title="8c. Gerätekopplung und Auth-Abweichung">
Doctor prüft jetzt den Zustand der Gerätekopplung als Teil des normalen Gesundheitsdurchlaufs.
<Accordion title="8c. Gerätekopplung und Authentifizierungsabweichung">
Doctor prüft jetzt den Gerätekopplungszustand als Teil des normalen Zustandsdurchlaufs.
Was gemeldet wird:
Was es meldet:
- ausstehende erstmalige Kopplungsanfragen
- ausstehende Rollen-Upgrades für bereits gekoppelte Geräte
- ausstehende Scope-Upgrades für bereits gekoppelte Geräte
- Reparaturen von Public-Key-Abweichungen, bei denen die Geräte-ID noch übereinstimmt, die Geräteidentität aber nicht mehr mit dem genehmigten Datensatz übereinstimmt
- gekoppelte Datensätze ohne aktives Token für eine genehmigte Rolle
- gekoppelte Tokens, deren Scopes von der genehmigten Kopplungsbaseline abweichen
- lokal zwischengespeicherte Gerätetoken-Einträge für den aktuellen Rechner, die älter sind als eine Gateway-seitige Token-Rotation oder veraltete Scope-Metadaten tragen
- Reparaturen bei Public-Key-Abweichungen, bei denen die Geräte-ID noch übereinstimmt, die Geräteidentität aber nicht mehr dem genehmigten Datensatz entspricht
- gekoppelte Datensätze, denen ein aktives Token für eine genehmigte Rolle fehlt
- gekoppelte Tokens, deren Scopes von der genehmigten Kopplungsbasis abweichen
- lokale zwischengespeicherte Geräte-Token-Einträge für den aktuellen Rechner, die älter sind als eine Gateway-seitige Token-Rotation oder veraltete Scope-Metadaten enthalten
Doctor genehmigt Kopplungsanfragen nicht automatisch und rotiert Gerätetokens nicht automatisch. Stattdessen gibt er die exakten nächsten Schritte aus:
Doctor genehmigt Kopplungsanfragen nicht automatisch und rotiert Geräte-Tokens nicht automatisch. Stattdessen gibt es die exakten nächsten Schritte aus:
- ausstehende Anfragen mit `openclaw devices list` prüfen
- die exakte Anfrage mit `openclaw devices approve <requestId>` genehmigen
- ein frisches Token mit `openclaw devices rotate --device <deviceId> --role <role>` rotieren
- einen veralteten Datensatz mit `openclaw devices remove <deviceId>` entfernen und erneut genehmigen
Damit wird die häufige Lücke „bereits gekoppelt, aber weiterhin Kopplung erforderlich“ geschlossen: Doctor unterscheidet jetzt erstmalige Kopplung von ausstehenden Rollen-/Scope-Upgrades und von veralteter Token-/Geräteidentitäts-Abweichung.
Dies schließt die häufige Lücke „bereits gekoppelt, aber Kopplung weiterhin erforderlich“: Doctor unterscheidet nun erstmalige Kopplung von ausstehenden Rollen-/Scope-Upgrades und von veralteten Token-/Geräteidentitätsabweichungen.
</Accordion>
<Accordion title="9. Sicherheitswarnungen">
Doctor gibt Warnungen aus, wenn ein Provider ohne Allowlist für DMs offen ist oder wenn eine Richtlinie gefährlich konfiguriert ist.
Doctor gibt Warnungen aus, wenn ein Provider für DMs ohne Allowlist geöffnet ist oder wenn eine Richtlinie auf gefährliche Weise konfiguriert ist.
</Accordion>
<Accordion title="10. systemd linger (Linux)">
Wenn OpenClaw als systemd-Benutzerdienst ausgeführt wird, stellt Doctor sicher, dass Lingering aktiviert ist, damit das Gateway nach der Abmeldung aktiv bleibt.
<Accordion title="10. systemd-Linger (Linux)">
Wenn die Ausführung als systemd-Benutzerdienst erfolgt, stellt Doctor sicher, dass Linger aktiviert ist, damit das Gateway nach der Abmeldung aktiv bleibt.
</Accordion>
<Accordion title="11. Workspace-Status (Skills, Plugins und Legacy-Verzeichnisse)">
Doctor gibt eine Zusammenfassung des Workspace-Zustands für den Standard-Agent aus:
- **Skills-Status**: zählt geeignete Skills, Skills mit fehlenden Anforderungen und durch Allowlist blockierte Skills.
- **Skills-Status**: zählt zulässige Skills, Skills mit fehlenden Anforderungen und durch die Allowlist blockierte Skills.
- **Legacy-Workspace-Verzeichnisse**: warnt, wenn `~/openclaw` oder andere Legacy-Workspace-Verzeichnisse neben dem aktuellen Workspace existieren.
- **Plugin-Status**: zählt aktivierte/deaktivierte/fehlerhafte Plugins; listet Plugin-IDs für alle Fehler auf; meldet Fähigkeiten von Bundle-Plugins.
- **Plugin-Kompatibilitätswarnungen**: markiert Plugins, die Kompatibilitätsprobleme mit der aktuellen Runtime haben.
- **Plugin-Diagnosen**: zeigt alle Ladezeit-Warnungen oder -Fehler an, die von der Plugin-Registry ausgegeben wurden.
- **Plugin-Status**: zählt aktivierte/deaktivierte/fehlerhafte Plugins; listet Plugin-IDs für alle Fehler auf; meldet Funktionen von Bundle-Plugins.
- **Plugin-Kompatibilitätswarnungen**: markiert Plugins, die Kompatibilitätsprobleme mit der aktuellen Laufzeit haben.
- **Plugin-Diagnose**: zeigt alle Ladezeitwarnungen oder -fehler an, die von der Plugin-Registry ausgegeben wurden.
</Accordion>
<Accordion title="11b. Größe der Bootstrap-Datei">
Doctor prüft, ob Workspace-Bootstrap-Dateien (zum Beispiel `AGENTS.md`, `CLAUDE.md` oder andere injizierte Kontextdateien) nahe am konfigurierten Zeichenbudget liegen oder es überschreiten. Er meldet pro Datei rohe gegenüber injizierten Zeichenzahlen, Kürzungsprozentsatz, Kürzungsursache (`max/file` oder `max/total`) und die gesamten injizierten Zeichen als Anteil am Gesamtbudget. Wenn Dateien gekürzt werden oder nahe am Limit liegen, gibt Doctor Tipps zur Abstimmung von `agents.defaults.bootstrapMaxChars` und `agents.defaults.bootstrapTotalMaxChars` aus.
Doctor prüft, ob Workspace-Bootstrap-Dateien (zum Beispiel `AGENTS.md`, `CLAUDE.md` oder andere injizierte Kontextdateien) nahe am oder über dem konfigurierten Zeichenbudget liegen. Es meldet pro Datei rohe vs. injizierte Zeichenzahlen, Kürzungsprozentsatz, Kürzungsursache (`max/file` oder `max/total`) und die gesamten injizierten Zeichen als Anteil am Gesamtbudget. Wenn Dateien gekürzt werden oder nahe am Limit liegen, gibt Doctor Tipps zur Anpassung von `agents.defaults.bootstrapMaxChars` und `agents.defaults.bootstrapTotalMaxChars` aus.
</Accordion>
<Accordion title="11d. Bereinigung veralteter Kanal-Plugins">
Wenn `openclaw doctor --fix` ein fehlendes Kanal-Plugin entfernt, entfernt er auch die verwaiste kanalspezifische Konfiguration, die auf dieses Plugin verwies: `channels.<id>`-Einträge, Heartbeat-Ziele, die den Kanal benannten, und `agents.*.models["<channel>/*"]`-Overrides. Dies verhindert Gateway-Boot-Schleifen, bei denen die Kanal-Runtime entfernt wurde, die Konfiguration das Gateway aber weiterhin auffordert, sich daran zu binden.
Wenn `openclaw doctor --fix` ein fehlendes Kanal-Plugin entfernt, entfernt es auch die verwaiste kanalspezifische Konfiguration, die auf dieses Plugin verwiesen hat: `channels.<id>`-Einträge, Heartbeat-Ziele, die den Kanal benannt haben, und `agents.*.models["<channel>/*"]`-Overrides. Dies verhindert Gateway-Boot-Loops, bei denen die Kanallaufzeit verschwunden ist, die Konfiguration das Gateway aber weiterhin auffordert, daran zu binden.
</Accordion>
<Accordion title="11c. Shell-Vervollständigung">
Doctor prüft, ob die Tab-Vervollständigung für die aktuelle Shell installiert ist (zsh, bash, fish oder PowerShell):
Doctor prüft, ob Tab-Vervollständigung für die aktuelle Shell installiert ist (zsh, bash, fish oder PowerShell):
- Wenn das Shell-Profil ein langsames dynamisches Vervollständigungsmuster verwendet (`source <(openclaw completion ...)`), aktualisiert Doctor es auf die schnellere Variante mit zwischengespeicherter Datei.
- Wenn Vervollständigung im Profil konfiguriert ist, aber die Cache-Datei fehlt, regeneriert Doctor den Cache automatisch.
- Wenn überhaupt keine Vervollständigung konfiguriert ist, fordert Doctor zur Installation auf (nur im interaktiven Modus; wird mit `--non-interactive` übersprungen).
- Wenn Vervollständigung im Profil konfiguriert ist, aber die Cache-Datei fehlt, generiert Doctor den Cache automatisch neu.
- Wenn überhaupt keine Vervollständigung konfiguriert ist, fordert Doctor zur Installation auf (nur interaktiver Modus; wird mit `--non-interactive` übersprungen).
Führen Sie `openclaw completion --write-state` aus, um den Cache manuell neu zu generieren.
</Accordion>
<Accordion title="12. Gateway-Auth-Prüfungen (lokales Token)">
<Accordion title="12. Gateway-Authentifizierungsprüfungen (lokales Token)">
Doctor prüft die Bereitschaft der lokalen Gateway-Token-Authentifizierung.
- Wenn der Token-Modus ein Token benötigt und keine Token-Quelle existiert, bietet Doctor an, eines zu generieren.
- Wenn `gateway.auth.token` über SecretRef verwaltet wird, aber nicht verfügbar ist, warnt Doctor und überschreibt es nicht mit Klartext.
- `openclaw doctor --generate-gateway-token` erzwingt die Generierung nur, wenn kein Token-SecretRef konfiguriert ist.
- Wenn der Token-Modus ein Token benötigt und keine Token-Quelle vorhanden ist, bietet Doctor an, eines zu generieren.
- Wenn `gateway.auth.token` SecretRef-verwaltet, aber nicht verfügbar ist, warnt Doctor und überschreibt es nicht mit Klartext.
- `openclaw doctor --generate-gateway-token` erzwingt die Generierung nur, wenn keine Token-SecretRef konfiguriert ist.
</Accordion>
<Accordion title="12b. Schreibgeschützte SecretRef-bewusste Reparaturen">
Einige Reparaturabläufe müssen konfigurierte Zugangsdaten prüfen, ohne das Fail-Fast-Verhalten der Runtime abzuschwächen.
Einige Reparaturabläufe müssen konfigurierte Anmeldedaten prüfen, ohne das Fail-Fast-Verhalten der Laufzeit abzuschwächen.
- `openclaw doctor --fix` verwendet jetzt dasselbe schreibgeschützte SecretRef-Zusammenfassungsmodell wie Status-Familienbefehle für gezielte Konfigurationsreparaturen.
- Beispiel: Die Reparatur von Telegram `allowFrom` / `groupAllowFrom` `@username` versucht, konfigurierte Bot-Zugangsdaten zu verwenden, wenn sie verfügbar sind.
- Wenn das Telegram-Bot-Token über SecretRef konfiguriert, aber im aktuellen Befehlspfad nicht verfügbar ist, meldet Doctor, dass die Zugangsdaten konfiguriert, aber nicht verfügbar sind, und überspringt die automatische Auflösung, statt abzustürzen oder das Token fälschlich als fehlend zu melden.
- `openclaw doctor --fix` verwendet jetzt dasselbe schreibgeschützte SecretRef-Zusammenfassungsmodell wie Status-Family-Befehle für gezielte Konfigurationsreparaturen.
- Beispiel: Die Telegram-Reparatur von `allowFrom` / `groupAllowFrom` `@username` versucht, konfigurierte Bot-Anmeldedaten zu verwenden, wenn sie verfügbar sind.
- Wenn das Telegram-Bot-Token über SecretRef konfiguriert, aber im aktuellen Befehlspfad nicht verfügbar ist, meldet Doctor, dass die Anmeldedaten konfiguriert, aber nicht verfügbar sind, und überspringt die automatische Auflösung, statt abzustürzen oder das Token fälschlich als fehlend zu melden.
</Accordion>
<Accordion title="13. Gateway-Zustandsprüfung + Neustart">
Doctor führt eine Zustandsprüfung aus und bietet an, den Gateway neu zu starten, wenn er fehlerhaft wirkt.
<Accordion title="13. Gateway-Integritätsprüfung + Neustart">
Doctor führt eine Integritätsprüfung aus und bietet an, das Gateway neu zu starten, wenn es fehlerhaft wirkt.
</Accordion>
<Accordion title="13b. Bereitschaft der Speichersuche">
Doctor prüft, ob der konfigurierte Embedding-Provider der Speichersuche für den Standard-Agent bereit ist. Das Verhalten hängt vom konfigurierten Backend und Provider ab:
Doctor prüft, ob der konfigurierte Embedding-Provider für die Speichersuche für den Standardagenten bereit ist. Das Verhalten hängt vom konfigurierten Backend und Provider ab:
- **QMD-Backend**: Prüft, ob das `qmd`-Binary verfügbar und startbar ist. Falls nicht, gibt es Reparaturhinweise aus, einschließlich des npm-Pakets und einer Option für einen manuellen Binary-Pfad.
- **Expliziter lokaler Provider**: Prüft auf eine lokale Modelldatei oder eine erkannte Remote-/herunterladbare Modell-URL. Wenn sie fehlt, wird der Wechsel zu einem Remote-Provider vorgeschlagen.
- **Expliziter Remote-Provider** (`openai`, `voyage` usw.): Verifiziert, dass ein API-Schlüssel in der Umgebung oder im Auth-Speicher vorhanden ist. Gibt umsetzbare Reparaturhinweise aus, wenn er fehlt.
- **QMD-Backend**: Prüft, ob die Binärdatei `qmd` verfügbar und startbar ist. Falls nicht, werden Hinweise zur Behebung ausgegeben, einschließlich des npm-Pakets und einer Option für einen manuellen Binärpfad.
- **Expliziter lokaler Provider**: Prüft auf eine lokale Modelldatei oder eine erkannte Remote-/herunterladbare Modell-URL. Falls sie fehlt, wird vorgeschlagen, zu einem Remote-Provider zu wechseln.
- **Expliziter Remote-Provider** (`openai`, `voyage` usw.): Prüft, ob ein API-Schlüssel in der Umgebung oder im Auth-Speicher vorhanden ist. Gibt umsetzbare Hinweise zur Behebung aus, falls er fehlt.
- **Auto-Provider**: Prüft zuerst die Verfügbarkeit des lokalen Modells und versucht dann jeden Remote-Provider in der Reihenfolge der automatischen Auswahl.
Wenn ein zwischengespeichertes Gateway-Prüfergebnis verfügbar ist (der Gateway war zum Zeitpunkt der Prüfung fehlerfrei), gleicht Doctor dessen Ergebnis mit der für die CLI sichtbaren Konfiguration ab und weist auf Abweichungen hin. Doctor startet im Standardpfad keinen frischen Embedding-Ping; verwenden Sie den Deep-Memory-Statusbefehl, wenn Sie eine Live-Prüfung des Providers wünschen.
Wenn ein zwischengespeichertes Ergebnis einer Gateway-Prüfung verfügbar ist (das Gateway war zum Zeitpunkt der Prüfung fehlerfrei), gleicht Doctor dessen Ergebnis mit der für die CLI sichtbaren Konfiguration ab und weist auf Abweichungen hin. Doctor startet im Standardpfad keinen neuen Embedding-Ping; verwenden Sie den tiefgehenden Speicherstatusbefehl, wenn Sie eine Live-Prüfung des Providers wünschen.
Verwenden Sie `openclaw memory status --deep`, um die Embedding-Bereitschaft zur Laufzeit zu verifizieren.
Verwenden Sie `openclaw memory status --deep`, um die Embedding-Bereitschaft zur Laufzeit zu prüfen.
</Accordion>
<Accordion title="14. Kanalstatuswarnungen">
Wenn der Gateway fehlerfrei ist, führt Doctor eine Kanalstatusprüfung aus und meldet Warnungen mit vorgeschlagenen Korrekturen.
<Accordion title="14. Kanalstatus-Warnungen">
Wenn das Gateway fehlerfrei ist, führt Doctor eine Kanalstatusprüfung aus und meldet Warnungen mit vorgeschlagenen Behebungen.
</Accordion>
<Accordion title="15. Supervisor-Konfigurationsprüfung + Reparatur">
Doctor prüft die installierte Supervisor-Konfiguration (launchd/systemd/schtasks) auf fehlende oder veraltete Standardwerte (z. B. systemd-Abhängigkeiten von network-online und Neustartverzögerung). Wenn eine Abweichung gefunden wird, empfiehlt Doctor eine Aktualisierung und kann die Servicedatei/Aufgabe auf die aktuellen Standardwerte umschreiben.
<Accordion title="15. Supervisor-Konfigurationsaudit + Reparatur">
Doctor prüft die installierte Supervisor-Konfiguration (launchd/systemd/schtasks) auf fehlende oder veraltete Standards (z. B. systemd-Abhängigkeiten von network-online und Neustartverzögerung). Wenn eine Abweichung gefunden wird, empfiehlt Doctor eine Aktualisierung und kann die Servicedatei/Aufgabe auf die aktuellen Standards umschreiben.
Hinweise:
- `openclaw doctor` fragt nach, bevor die Supervisor-Konfiguration umgeschrieben wird.
- `openclaw doctor` fragt vor dem Umschreiben der Supervisor-Konfiguration nach.
- `openclaw doctor --yes` akzeptiert die Standard-Reparaturabfragen.
- `openclaw doctor --repair` wendet empfohlene Korrekturen ohne Rückfragen an.
- `openclaw doctor --repair --force` überschreibt benutzerdefinierte Supervisor-Konfigurationen.
- `OPENCLAW_SERVICE_REPAIR_POLICY=external` hält Doctor für den Lebenszyklus des Gateway-Dienstes schreibgeschützt. Doctor meldet weiterhin den Dienstzustand und führt Reparaturen aus, die keine Dienste betreffen, überspringt aber Dienstinstallation/-start/-neustart/-bootstrap, Umschreibungen der Supervisor-Konfiguration und die Bereinigung veralteter Dienste, weil ein externer Supervisor diesen Lebenszyklus besitzt.
- Unter Linux schreibt Doctor keine Befehls-/Entrypoint-Metadaten um, während die zugehörige systemd-Gateway-Unit aktiv ist. Außerdem ignoriert Doctor inaktive, nicht veraltete zusätzliche gatewayähnliche Units während der Suche nach doppelten Diensten, damit begleitende Servicedateien keinen Bereinigungsrausch erzeugen.
- Wenn Token-Authentifizierung ein Token erfordert und `gateway.auth.token` per SecretRef verwaltet wird, validiert die Doctor-Dienstinstallation/-reparatur die SecretRef, persistiert aber keine aufgelösten Klartext-Tokenwerte in den Umgebungsmetadaten des Supervisor-Dienstes.
- Doctor erkennt verwaltete `.env`-/SecretRef-gestützte Dienstumgebungswerte, die ältere LaunchAgent-, systemd- oder Windows-Scheduled-Task-Installationen inline eingebettet haben, und schreibt die Dienstmetadaten so um, dass diese Werte aus der Laufzeitquelle statt aus der Supervisor-Definition geladen werden.
- Doctor erkennt, wenn der Dienstbefehl nach Änderungen an `gateway.port` weiterhin einen alten `--port` festpinnt, und schreibt die Dienstmetadaten auf den aktuellen Port um.
- Wenn Token-Authentifizierung ein Token erfordert und die konfigurierte Token-SecretRef nicht aufgelöst werden kann, blockiert Doctor den Installations-/Reparaturpfad mit umsetzbarer Anleitung.
- Wenn sowohl `gateway.auth.token` als auch `gateway.auth.password` konfiguriert sind und `gateway.auth.mode` nicht gesetzt ist, blockiert Doctor Installation/Reparatur, bis der Modus explizit gesetzt ist.
- Für Linux-Benutzer-systemd-Units berücksichtigen Doctor-Token-Drift-Prüfungen jetzt sowohl `Environment=`- als auch `EnvironmentFile=`-Quellen beim Vergleich der Dienst-Auth-Metadaten.
- Doctor-Dienstreparaturen verweigern das Umschreiben, Stoppen oder Neustarten eines Gateway-Dienstes von einem älteren OpenClaw-Binary, wenn die Konfiguration zuletzt von einer neueren Version geschrieben wurde. Siehe [Gateway-Fehlerbehebung](/de/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- Sie können jederzeit über `openclaw gateway install --force` ein vollständiges Umschreiben erzwingen.
- `openclaw doctor --repair` wendet empfohlene Behebungen ohne Nachfragen an.
- `openclaw doctor --repair --force` überschreibt angepasste Supervisor-Konfigurationen.
- `OPENCLAW_SERVICE_REPAIR_POLICY=external` hält Doctor für den Gateway-Service-Lebenszyklus schreibgeschützt. Servicezustand wird weiterhin gemeldet und Nicht-Service-Reparaturen werden ausgeführt, aber Serviceinstallation/-start/-neustart/-bootstrap, Umschreiben der Supervisor-Konfiguration und Bereinigung veralteter Services werden übersprungen, da ein externer Supervisor diesen Lebenszyklus besitzt.
- Unter Linux schreibt Doctor Befehls-/Einstiegspunkt-Metadaten nicht um, während die passende systemd-Gateway-Unit aktiv ist. Außerdem ignoriert Doctor inaktive zusätzliche nicht-veraltete Gateway-ähnliche Units während der Suche nach doppelten Services, damit begleitende Servicedateien keinen Bereinigungsrauschen erzeugen.
- Wenn Token-Auth ein Token erfordert und `gateway.auth.token` von SecretRef verwaltet wird, validiert die Doctor-Serviceinstallation/-reparatur die SecretRef, speichert aber keine aufgelösten Klartext-Tokenwerte in den Umgebungsmetadaten des Supervisor-Service.
- Doctor erkennt verwaltete `.env`-/SecretRef-gestützte Service-Umgebungswerte, die ältere LaunchAgent-, systemd- oder Windows-Scheduled-Task-Installationen inline eingebettet haben, und schreibt die Servicemetadaten so um, dass diese Werte aus der Laufzeitquelle statt aus der Supervisor-Definition geladen werden.
- Doctor erkennt, wenn der Servicebefehl nach Änderungen an `gateway.port` weiterhin einen alten `--port` festlegt, und schreibt die Servicemetadaten auf den aktuellen Port um.
- Wenn Token-Auth ein Token erfordert und die konfigurierte Token-SecretRef nicht aufgelöst werden kann, blockiert Doctor den Installations-/Reparaturpfad mit umsetzbaren Hinweisen.
- Wenn sowohl `gateway.auth.token` als auch `gateway.auth.password` konfiguriert sind und `gateway.auth.mode` nicht gesetzt ist, blockiert Doctor Installation/Reparatur, bis der Modus ausdrücklich gesetzt ist.
- Für Linux-user-systemd-Units berücksichtigen die Token-Drift-Prüfungen von Doctor jetzt sowohl `Environment=`- als auch `EnvironmentFile=`-Quellen beim Vergleich der Service-Auth-Metadaten.
- Doctor-Service-Reparaturen verweigern das Umschreiben, Stoppen oder Neustarten eines Gateway-Service aus einer älteren OpenClaw-Binärdatei, wenn die Konfiguration zuletzt von einer neueren Version geschrieben wurde. Siehe [Gateway-Fehlerbehebung](/de/gateway/troubleshooting#split-brain-installs-and-newer-config-guard).
- Sie können jederzeit ein vollständiges Umschreiben über `openclaw gateway install --force` erzwingen.
</Accordion>
<Accordion title="16. Gateway-Laufzeit + Portdiagnose">
Doctor prüft die Dienstlaufzeit (PID, letzter Exit-Status) und warnt, wenn der Dienst installiert ist, aber nicht tatsächlich läuft. Außerdem prüft Doctor auf Portkollisionen am Gateway-Port (Standard `18789`) und meldet wahrscheinliche Ursachen (Gateway läuft bereits, SSH-Tunnel).
Doctor prüft die Service-Laufzeit (PID, letzter Exit-Status) und warnt, wenn der Service installiert ist, aber nicht tatsächlich läuft. Außerdem wird auf Portkonflikte am Gateway-Port (Standard `18789`) geprüft und wahrscheinliche Ursachen werden gemeldet (Gateway läuft bereits, SSH-Tunnel).
</Accordion>
<Accordion title="17. Best Practices für die Gateway-Laufzeit">
Doctor warnt, wenn der Gateway-Dienst auf Bun oder einem versionsverwalteten Node-Pfad (`nvm`, `fnm`, `volta`, `asdf` usw.) läuft. WhatsApp- und Telegram-Kanäle benötigen Node, und Pfade von Versionsmanagern können nach Upgrades brechen, weil der Dienst Ihre Shell-Initialisierung nicht lädt. Doctor bietet an, zu einer System-Node-Installation zu migrieren, wenn eine verfügbar ist (Homebrew/apt/choco).
<Accordion title="17. Bewährte Verfahren für die Gateway-Laufzeit">
Doctor warnt, wenn der Gateway-Service auf Bun oder einem versionsverwalteten Node-Pfad (`nvm`, `fnm`, `volta`, `asdf` usw.) läuft. WhatsApp- und Telegram-Kanäle erfordern Node, und Pfade von Versionsmanagern können nach Upgrades brechen, da der Service Ihre Shell-Initialisierung nicht lädt. Doctor bietet an, zu einer System-Node-Installation zu migrieren, sofern verfügbar (Homebrew/apt/choco).
Neu installierte oder reparierte macOS-LaunchAgents verwenden einen kanonischen System-PATH (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`), statt den interaktiven Shell-PATH zu kopieren. Dadurch ändern Volta, asdf, fnm, pnpm und andere Versionsmanager-Verzeichnisse nicht, welche Node-Kindprozesse aufgelöst werden. Linux-Dienste behalten weiterhin explizite Umgebungswurzeln (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) und stabile Benutzer-bin-Verzeichnisse, aber erratene Fallback-Verzeichnisse von Versionsmanagern werden nur dann in den Dienst-PATH geschrieben, wenn diese Verzeichnisse auf dem Datenträger existieren.
Neu installierte oder reparierte macOS-LaunchAgents verwenden einen kanonischen System-PATH (`/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin`), statt den interaktiven Shell-PATH zu kopieren. Dadurch ändern Volta, asdf, fnm, pnpm und andere Versionsmanager-Verzeichnisse nicht, welche Node-Kindprozesse aufgelöst werden. Linux-Services behalten weiterhin explizite Umgebungswurzeln (`NVM_DIR`, `FNM_DIR`, `VOLTA_HOME`, `ASDF_DATA_DIR`, `BUN_INSTALL`, `PNPM_HOME`) und stabile Benutzer-bin-Verzeichnisse bei, aber vermutete Fallback-Verzeichnisse von Versionsmanagern werden nur dann in den Service-PATH geschrieben, wenn diese Verzeichnisse auf dem Datenträger existieren.
</Accordion>
<Accordion title="18. Konfiguration schreiben + Wizard-Metadaten">
Doctor persistiert alle Konfigurationsänderungen und versieht Wizard-Metadaten mit einem Stempel, um den Doctor-Lauf aufzuzeichnen.
<Accordion title="18. Schreiben der Konfiguration + Wizard-Metadaten">
Doctor speichert alle Konfigurationsänderungen und versieht die Wizard-Metadaten mit einem Eintrag, um den Doctor-Lauf zu protokollieren.
</Accordion>
<Accordion title="19. Workspace-Tipps (Backup + Speichersystem)">
Doctor schlägt ein Workspace-Speichersystem vor, wenn es fehlt, und gibt einen Backup-Tipp aus, wenn der Workspace noch nicht unter git steht.
Siehe [/concepts/agent-workspace](/de/concepts/agent-workspace) für eine vollständige Anleitung zur Workspace-Struktur und zu git-Backups (empfohlen: privates GitHub oder GitLab).
Siehe [/concepts/agent-workspace](/de/concepts/agent-workspace) für eine vollständige Anleitung zur Workspace-Struktur und zum git-Backup (empfohlen: privates GitHub oder GitLab).
</Accordion>
</AccordionGroup>

View File

@ -1,23 +1,23 @@
---
read_when:
- Sie entscheiden, ob ein Plugin im Kern-npm-Paket ausgeliefert oder separat installiert wird
- Sie aktualisieren Metadaten gebündelter Plugin-Pakete oder die Release-Automatisierung
- Sie entscheiden, ob ein Plugin im Core-npm-Paket ausgeliefert oder separat installiert wird.
- Sie aktualisieren die Metadaten gebündelter Plugin-Pakete oder die Release-Automatisierung
- Sie benötigen die kanonische Liste interner und externer Plugins
summary: Generiertes Inventar der OpenClaw-Plugins, die im Core ausgeliefert, extern veröffentlicht oder nur als Quellcode vorgehalten werden
summary: Generiertes Inventar der OpenClaw-Plugins, die im Kern ausgeliefert, extern veröffentlicht oder nur als Quellcode geführt werden
title: Plugin-Inventar
x-i18n:
generated_at: "2026-05-03T06:39:44Z"
generated_at: "2026-05-04T09:37:08Z"
model: gpt-5.5
provider: openai
source_hash: 2099d8a67847f54040db332287708a1f79aa6c08e6e33125425389fe962865cb
source_hash: 64f3d27ae65faacf89deeaad1b456318fa72993fdcf16262f30fb3f48b898024
source_path: plugins/plugin-inventory.md
workflow: 16
---
# Plugin-Inventar
Diese Seite wird aus `extensions/*/package.json`, `openclaw.plugin.json`,
und den `files`-Ausschlüssen des Root-npm-Pakets generiert. Erzeugen Sie sie neu mit:
Diese Seite wird aus `extensions/*/package.json`, `openclaw.plugin.json`
und den `files`-Ausschlüssen des npm-Root-Pakets generiert. Generieren Sie sie neu mit:
```bash
pnpm plugins:inventory:gen
@ -25,101 +25,121 @@ pnpm plugins:inventory:gen
## Definitionen
- **Kern-npm-Paket:** ist in das npm-Paket `openclaw` integriert und ohne separate Plugin-Installation verfügbar.
- **Offizielles externes Paket:** von OpenClaw gepflegtes Plugin, das aus dem Kern-npm-Paket ausgelassen wird, in diesem offiziellen Inventar geführt wird und bei Bedarf über ClawHub und/oder npm installiert wird.
- **Nur Source-Checkout:** repo-lokales Plugin, das aus veröffentlichten npm-Artefakten ausgelassen und nicht als installierbares Paket beworben wird.
- **Kern-npm-Paket:** in das npm-Paket `openclaw` eingebaut und ohne separate Plugin-Installation verfügbar.
- **Offizielles externes Paket:** von OpenClaw gepflegtes Plugin, das nicht im Kern-npm-Paket enthalten ist, in diesem offiziellen Inventar geführt wird und bei Bedarf über ClawHub und/oder npm installiert wird.
- **Nur Source-Checkout:** repo-lokales Plugin, das nicht in veröffentlichten npm-Artefakten enthalten ist und nicht als installierbares Paket beworben wird.
Source-Checkouts unterscheiden sich von npm-Installationen: Nach `pnpm install` werden gebündelte
Plugins aus `extensions/<id>` geladen, sodass lokale Änderungen und paketlokale Workspace-Abhängigkeiten
verfügbar sind.
## Plugin installieren
Verwenden Sie die Spalte **Distribution**, um zu entscheiden, ob eine Installation erforderlich ist. Plugins, bei denen
`included in OpenClaw` steht, sind bereits im Kernpaket enthalten. Offizielle
externe Pakete benötigen eine Installation und anschließend einen Neustart des Gateway.
Discord ist zum Beispiel ein offizielles externes Paket:
```bash
openclaw plugins install @openclaw/discord
openclaw gateway restart
openclaw plugins inspect discord --runtime --json
```
Unqualifizierte Paketspezifikationen versuchen zuerst ClawHub und fallen dann auf npm zurück. Um eine Quelle zu erzwingen, verwenden Sie
`clawhub:@openclaw/discord` oder `npm:@openclaw/discord`. Folgen Sie nach der Installation
der Einrichtungsdokumentation des Plugins, zum Beispiel [Discord](/de/channels/discord), um Zugangsdaten
und Kanal-Konfiguration hinzuzufügen. Siehe [Plugins verwalten](/de/plugins/manage-plugins) für Befehle zum Aktualisieren,
Deinstallieren und Veröffentlichen.
## Kern-npm-Paket
| Plugin | Beschreibung | Distribution | Schnittstelle |
| ----------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [alibaba](/de/plugins/reference/alibaba) | Fügt Unterstützung für Videoerzeugungs-Provider hinzu. | `@openclaw/alibaba-provider`<br />in OpenClaw enthalten | contracts: videoGenerationProviders |
| [amazon-bedrock](/de/plugins/reference/amazon-bedrock) | Fügt OpenClaw Unterstützung für den Amazon Bedrock-Modell-Provider hinzu. | `@openclaw/amazon-bedrock-provider`<br />in OpenClaw enthalten | providers: amazon-bedrock; contracts: memoryEmbeddingProviders |
| [amazon-bedrock-mantle](/de/plugins/reference/amazon-bedrock-mantle) | Fügt OpenClaw Unterstützung für den Amazon Bedrock Mantle-Modell-Provider hinzu. | `@openclaw/amazon-bedrock-mantle-provider`<br />in OpenClaw enthalten | providers: amazon-bedrock-mantle |
| [anthropic](/de/plugins/reference/anthropic) | Fügt OpenClaw Unterstützung für den Anthropic-Modell-Provider hinzu. | `@openclaw/anthropic-provider`<br />in OpenClaw enthalten | providers: anthropic; contracts: mediaUnderstandingProviders |
| [anthropic-vertex](/de/plugins/reference/anthropic-vertex) | Fügt OpenClaw Unterstützung für den Anthropic Vertex-Modell-Provider hinzu. | `@openclaw/anthropic-vertex-provider`<br />in OpenClaw enthalten | providers: anthropic-vertex |
| [arcee](/de/plugins/reference/arcee) | Fügt OpenClaw Unterstützung für den Arcee-Modell-Provider hinzu. | `@openclaw/arcee-provider`<br />in OpenClaw enthalten | providers: arcee |
| [azure-speech](/de/plugins/reference/azure-speech) | Azure AI Speech Text-zu-Sprache (MP3, native Ogg/Opus-Sprachnachrichten, PCM-Telefonie). | `@openclaw/azure-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [bonjour](/de/plugins/reference/bonjour) | Veröffentlicht das lokale OpenClaw-Gateway über Bonjour/mDNS. | `@openclaw/bonjour`<br />in OpenClaw enthalten | plugin |
| [browser](/de/plugins/reference/browser) | Fügt durch Agents aufrufbare Tools hinzu. | `@openclaw/browser-plugin`<br />in OpenClaw enthalten | contracts: tools; skills |
| [byteplus](/de/plugins/reference/byteplus) | Fügt OpenClaw Unterstützung für die Modell-Provider BytePlus und BytePlus Plan hinzu. | `@openclaw/byteplus-provider`<br />in OpenClaw enthalten | providers: byteplus, byteplus-plan; contracts: videoGenerationProviders |
| [cerebras](/de/plugins/reference/cerebras) | Fügt OpenClaw Unterstützung für den Cerebras-Modell-Provider hinzu. | `@openclaw/cerebras-provider`<br />in OpenClaw enthalten | providers: cerebras |
| [chutes](/de/plugins/reference/chutes) | Fügt OpenClaw Unterstützung für den Chutes-Modell-Provider hinzu. | `@openclaw/chutes-provider`<br />in OpenClaw enthalten | providers: chutes |
| [cloudflare-ai-gateway](/de/plugins/reference/cloudflare-ai-gateway) | Fügt OpenClaw Unterstützung für den Cloudflare AI Gateway-Modell-Provider hinzu. | `@openclaw/cloudflare-ai-gateway-provider`<br />in OpenClaw enthalten | providers: cloudflare-ai-gateway |
| [comfy](/de/plugins/reference/comfy) | Fügt OpenClaw Unterstützung für den ComfyUI-Modell-Provider hinzu. | `@openclaw/comfy-provider`<br />in OpenClaw enthalten | providers: comfy; contracts: imageGenerationProviders, musicGenerationProviders, videoGenerationProviders |
| [copilot-proxy](/de/plugins/reference/copilot-proxy) | Fügt OpenClaw Unterstützung für den Copilot Proxy-Modell-Provider hinzu. | `@openclaw/copilot-proxy`<br />in OpenClaw enthalten | providers: copilot-proxy |
| [deepgram](/de/plugins/reference/deepgram) | Fügt Unterstützung für Medienverständnis-Provider hinzu. Fügt Unterstützung für Echtzeit-Transkriptions-Provider hinzu. | `@openclaw/deepgram-provider`<br />in OpenClaw enthalten | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders |
| [deepinfra](/de/plugins/reference/deepinfra) | Fügt OpenClaw Unterstützung für den DeepInfra-Modell-Provider hinzu. | `@openclaw/deepinfra-provider`<br />in OpenClaw enthalten | providers: deepinfra; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, speechProviders, videoGenerationProviders |
| [deepseek](/de/plugins/reference/deepseek) | Fügt OpenClaw Unterstützung für den DeepSeek-Modell-Provider hinzu. | `@openclaw/deepseek-provider`<br />in OpenClaw enthalten | providers: deepseek |
| [document-extract](/de/plugins/reference/document-extract) | Extrahiert Text und Fallback-Seitenbilder aus lokalen Dokumentanhängen. | `@openclaw/document-extract-plugin`<br />in OpenClaw enthalten | contracts: documentExtractors |
| [duckduckgo](/de/plugins/reference/duckduckgo) | Fügt Unterstützung für Provider für die Websuche hinzu. | `@openclaw/duckduckgo-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [elevenlabs](/de/plugins/reference/elevenlabs) | Fügt Unterstützung für Provider für Medienverständnis hinzu. Fügt Unterstützung für Provider für Echtzeittranskription hinzu. Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/elevenlabs-speech`<br />in OpenClaw enthalten | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders |
| [exa](/de/plugins/reference/exa) | Fügt Unterstützung für Provider für die Websuche hinzu. | `@openclaw/exa-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [fal](/de/plugins/reference/fal) | Fügt OpenClaw Unterstützung für den fal-Modell-Provider hinzu. | `@openclaw/fal-provider`<br />in OpenClaw enthalten | providers: fal; contracts: imageGenerationProviders, videoGenerationProviders |
| [file-transfer](/de/plugins/reference/file-transfer) | Dateien auf gekoppelten Nodes über dedizierte Node-Befehle abrufen, auflisten und schreiben. Umgeht die Kürzung von bash-stdout, indem base64 über node.invoke für Binärdateien bis zu 16 MB verwendet wird. | `@openclaw/file-transfer`<br />in OpenClaw enthalten | contracts: tools |
| [firecrawl](/de/plugins/reference/firecrawl) | Fügt von Agenten aufrufbare Tools hinzu. Fügt Unterstützung für Provider für Webabrufe hinzu. Fügt Unterstützung für Provider für die Websuche hinzu. | `@openclaw/firecrawl-plugin`<br />in OpenClaw enthalten | contracts: tools, webFetchProviders, webSearchProviders |
| [fireworks](/de/plugins/reference/fireworks) | Fügt OpenClaw Unterstützung für den Fireworks-Modell-Provider hinzu. | `@openclaw/fireworks-provider`<br />in OpenClaw enthalten | providers: fireworks |
| [github-copilot](/de/plugins/reference/github-copilot) | Fügt OpenClaw Unterstützung für den GitHub Copilot-Modell-Provider hinzu. | `@openclaw/github-copilot-provider`<br />in OpenClaw enthalten | providers: github-copilot; contracts: memoryEmbeddingProviders |
| [google](/de/plugins/reference/google) | Fügt OpenClaw Unterstützung für die Modell-Provider Google, Google Gemini CLI und Google Vertex hinzu. | `@openclaw/google-plugin`<br />in OpenClaw enthalten | providers: google, google-gemini-cli, google-vertex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, musicGenerationProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [gradium](/de/plugins/reference/gradium) | Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/gradium-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [groq](/de/plugins/reference/groq) | Fügt OpenClaw Unterstützung für den Groq-Modell-Provider hinzu. | `@openclaw/groq-provider`<br />in OpenClaw enthalten | providers: groq; contracts: mediaUnderstandingProviders |
| [huggingface](/de/plugins/reference/huggingface) | Fügt OpenClaw Unterstützung für den Hugging Face-Modell-Provider hinzu. | `@openclaw/huggingface-provider`<br />in OpenClaw enthalten | providers: huggingface |
| [imessage](/de/plugins/reference/imessage) | Fügt die iMessage-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/imessage`<br />in OpenClaw enthalten | channels: imessage |
| [inworld](/de/plugins/reference/inworld) | Inworld Streaming-Text-to-Speech (MP3, OGG_OPUS, PCM-Telefonie). | `@openclaw/inworld-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [irc](/de/plugins/reference/irc) | Fügt die IRC-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/irc`<br />in OpenClaw enthalten | channels: irc |
| [kilocode](/de/plugins/reference/kilocode) | Fügt OpenClaw Unterstützung für den Kilocode-Modell-Provider hinzu. | `@openclaw/kilocode-provider`<br />in OpenClaw enthalten | providers: kilocode |
| [kimi](/de/plugins/reference/kimi) | Fügt OpenClaw Unterstützung für die Modell-Provider Kimi und Kimi Coding hinzu. | `@openclaw/kimi-provider`<br />in OpenClaw enthalten | providers: kimi, kimi-coding |
| [litellm](/de/plugins/reference/litellm) | Fügt OpenClaw Unterstützung für den LiteLLM-Modell-Provider hinzu. | `@openclaw/litellm-provider`<br />in OpenClaw enthalten | providers: litellm; contracts: imageGenerationProviders |
| [llm-task](/de/plugins/reference/llm-task) | Generisches reines JSON-LLM-Tool für strukturierte Aufgaben, das aus Workflows aufgerufen werden kann. | `@openclaw/llm-task`<br />in OpenClaw enthalten | contracts: tools |
| [lmstudio](/de/plugins/reference/lmstudio) | Fügt OpenClaw Unterstützung für den LM Studio-Modell-Provider hinzu. | `@openclaw/lmstudio-provider`<br />in OpenClaw enthalten | providers: lmstudio; contracts: memoryEmbeddingProviders |
| [matrix](/de/plugins/reference/matrix) | Fügt die Matrix-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/matrix`<br />in OpenClaw enthalten | channels: matrix |
| Plugin | Beschreibung | Distribution | Schnittstelle |
| ----------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [alibaba](/de/plugins/reference/alibaba) | Fügt Unterstützung für Provider zur Videogenerierung hinzu. | `@openclaw/alibaba-provider`<br />in OpenClaw enthalten | contracts: videoGenerationProviders |
| [amazon-bedrock](/de/plugins/reference/amazon-bedrock) | Fügt OpenClaw Unterstützung für den Amazon Bedrock-Modell-Provider hinzu. | `@openclaw/amazon-bedrock-provider`<br />in OpenClaw enthalten | providers: amazon-bedrock; contracts: memoryEmbeddingProviders |
| [amazon-bedrock-mantle](/de/plugins/reference/amazon-bedrock-mantle) | Fügt OpenClaw Unterstützung für den Amazon Bedrock Mantle-Modell-Provider hinzu. | `@openclaw/amazon-bedrock-mantle-provider`<br />in OpenClaw enthalten | providers: amazon-bedrock-mantle |
| [anthropic](/de/plugins/reference/anthropic) | Fügt OpenClaw Unterstützung für den Anthropic-Modell-Provider hinzu. | `@openclaw/anthropic-provider`<br />in OpenClaw enthalten | providers: anthropic; contracts: mediaUnderstandingProviders |
| [anthropic-vertex](/de/plugins/reference/anthropic-vertex) | Fügt OpenClaw Unterstützung für den Anthropic Vertex-Modell-Provider hinzu. | `@openclaw/anthropic-vertex-provider`<br />in OpenClaw enthalten | providers: anthropic-vertex |
| [arcee](/de/plugins/reference/arcee) | Fügt OpenClaw Unterstützung für den Arcee-Modell-Provider hinzu. | `@openclaw/arcee-provider`<br />in OpenClaw enthalten | providers: arcee |
| [azure-speech](/de/plugins/reference/azure-speech) | Azure AI Speech-Text-to-Speech (MP3, native Ogg/Opus-Sprachnachrichten, PCM-Telefonie). | `@openclaw/azure-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [bonjour](/de/plugins/reference/bonjour) | Kündigt den lokalen OpenClaw-Gateway über Bonjour/mDNS an. | `@openclaw/bonjour`<br />in OpenClaw enthalten | plugin |
| [browser](/de/plugins/reference/browser) | Fügt Tools hinzu, die von Agenten aufgerufen werden können. | `@openclaw/browser-plugin`<br />in OpenClaw enthalten | contracts: tools; skills |
| [byteplus](/de/plugins/reference/byteplus) | Fügt OpenClaw Unterstützung für die Modell-Provider BytePlus und BytePlus Plan hinzu. | `@openclaw/byteplus-provider`<br />in OpenClaw enthalten | providers: byteplus, byteplus-plan; contracts: videoGenerationProviders |
| [cerebras](/de/plugins/reference/cerebras) | Fügt OpenClaw Unterstützung für den Cerebras-Modell-Provider hinzu. | `@openclaw/cerebras-provider`<br />in OpenClaw enthalten | providers: cerebras |
| [chutes](/de/plugins/reference/chutes) | Fügt OpenClaw Unterstützung für den Chutes-Modell-Provider hinzu. | `@openclaw/chutes-provider`<br />in OpenClaw enthalten | providers: chutes |
| [cloudflare-ai-gateway](/de/plugins/reference/cloudflare-ai-gateway) | Fügt OpenClaw Unterstützung für den Cloudflare AI Gateway-Modell-Provider hinzu. | `@openclaw/cloudflare-ai-gateway-provider`<br />in OpenClaw enthalten | providers: cloudflare-ai-gateway |
| [comfy](/de/plugins/reference/comfy) | Fügt OpenClaw Unterstützung für den ComfyUI-Modell-Provider hinzu. | `@openclaw/comfy-provider`<br />in OpenClaw enthalten | providers: comfy; contracts: imageGenerationProviders, musicGenerationProviders, videoGenerationProviders |
| [copilot-proxy](/de/plugins/reference/copilot-proxy) | Fügt OpenClaw Unterstützung für den Copilot Proxy-Modell-Provider hinzu. | `@openclaw/copilot-proxy`<br />in OpenClaw enthalten | providers: copilot-proxy |
| [deepgram](/de/plugins/reference/deepgram) | Fügt Unterstützung für Provider zum Medienverständnis hinzu. Fügt Unterstützung für Provider zur Echtzeittranskription hinzu. | `@openclaw/deepgram-provider`<br />in OpenClaw enthalten | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders |
| [deepinfra](/de/plugins/reference/deepinfra) | Fügt OpenClaw Unterstützung für den DeepInfra-Modell-Provider hinzu. | `@openclaw/deepinfra-provider`<br />in OpenClaw enthalten | providers: deepinfra; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, speechProviders, videoGenerationProviders |
| [deepseek](/de/plugins/reference/deepseek) | Fügt OpenClaw Unterstützung für den DeepSeek-Modell-Provider hinzu. | `@openclaw/deepseek-provider`<br />in OpenClaw enthalten | providers: deepseek |
| [document-extract](/de/plugins/reference/document-extract) | Extrahiert Text und Fallback-Seitenbilder aus lokalen Dokumentanhängen. | `@openclaw/document-extract-plugin`<br />in OpenClaw enthalten | contracts: documentExtractors |
| [duckduckgo](/de/plugins/reference/duckduckgo) | Fügt Unterstützung für Websuche-Provider hinzu. | `@openclaw/duckduckgo-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [elevenlabs](/de/plugins/reference/elevenlabs) | Fügt Unterstützung für Medienverständnis-Provider hinzu. Fügt Unterstützung für Echtzeit-Transkriptions-Provider hinzu. Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/elevenlabs-speech`<br />in OpenClaw enthalten | contracts: mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders |
| [exa](/de/plugins/reference/exa) | Fügt Unterstützung für Websuche-Provider hinzu. | `@openclaw/exa-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [fal](/de/plugins/reference/fal) | Fügt OpenClaw Unterstützung für den fal-Modell-Provider hinzu. | `@openclaw/fal-provider`<br />in OpenClaw enthalten | providers: fal; contracts: imageGenerationProviders, videoGenerationProviders |
| [file-transfer](/de/plugins/reference/file-transfer) | Dateien auf gekoppelten Nodes über dedizierte Node-Befehle abrufen, auflisten und schreiben. Umgeht die Abschneidung von bash-stdout, indem base64 über node.invoke für Binärdateien bis zu 16 MB verwendet wird. | `@openclaw/file-transfer`<br />in OpenClaw enthalten | contracts: tools |
| [firecrawl](/de/plugins/reference/firecrawl) | Fügt durch Agenten aufrufbare Tools hinzu. Fügt Unterstützung für Webabruf-Provider hinzu. Fügt Unterstützung für Websuche-Provider hinzu. | `@openclaw/firecrawl-plugin`<br />in OpenClaw enthalten | contracts: tools, webFetchProviders, webSearchProviders |
| [fireworks](/de/plugins/reference/fireworks) | Fügt OpenClaw Unterstützung für den Fireworks-Modell-Provider hinzu. | `@openclaw/fireworks-provider`<br />in OpenClaw enthalten | providers: fireworks |
| [github-copilot](/de/plugins/reference/github-copilot) | Fügt OpenClaw Unterstützung für den GitHub Copilot-Modell-Provider hinzu. | `@openclaw/github-copilot-provider`<br />in OpenClaw enthalten | providers: github-copilot; contracts: memoryEmbeddingProviders |
| [google](/de/plugins/reference/google) | Fügt OpenClaw Unterstützung für die Modell-Provider Google, Google Gemini CLI und Google Vertex hinzu. | `@openclaw/google-plugin`<br />in OpenClaw enthalten | providers: google, google-gemini-cli, google-vertex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, musicGenerationProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [gradium](/de/plugins/reference/gradium) | Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/gradium-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [groq](/de/plugins/reference/groq) | Fügt OpenClaw Unterstützung für den Groq-Modell-Provider hinzu. | `@openclaw/groq-provider`<br />in OpenClaw enthalten | providers: groq; contracts: mediaUnderstandingProviders |
| [huggingface](/de/plugins/reference/huggingface) | Fügt OpenClaw Unterstützung für den Hugging Face-Modell-Provider hinzu. | `@openclaw/huggingface-provider`<br />in OpenClaw enthalten | providers: huggingface |
| [imessage](/de/plugins/reference/imessage) | Fügt die iMessage-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/imessage`<br />in OpenClaw enthalten | channels: imessage |
| [inworld](/de/plugins/reference/inworld) | Inworld-Streaming-Text-to-Speech (MP3, OGG_OPUS, PCM-Telefonie). | `@openclaw/inworld-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [irc](/de/plugins/reference/irc) | Fügt die IRC-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/irc`<br />in OpenClaw enthalten | channels: irc |
| [kilocode](/de/plugins/reference/kilocode) | Fügt OpenClaw Unterstützung für den Kilocode-Modell-Provider hinzu. | `@openclaw/kilocode-provider`<br />in OpenClaw enthalten | providers: kilocode |
| [kimi](/de/plugins/reference/kimi) | Fügt OpenClaw Unterstützung für die Modell-Provider Kimi und Kimi Coding hinzu. | `@openclaw/kimi-provider`<br />in OpenClaw enthalten | providers: kimi, kimi-coding |
| [litellm](/de/plugins/reference/litellm) | Fügt OpenClaw Unterstützung für den LiteLLM-Modell-Provider hinzu. | `@openclaw/litellm-provider`<br />in OpenClaw enthalten | providers: litellm; contracts: imageGenerationProviders |
| [llm-task](/de/plugins/reference/llm-task) | Generisches, ausschließlich JSON-basiertes LLM-Tool für strukturierte Aufgaben, das aus Workflows aufgerufen werden kann. | `@openclaw/llm-task`<br />in OpenClaw enthalten | contracts: tools |
| [lmstudio](/de/plugins/reference/lmstudio) | Fügt OpenClaw Unterstützung für den LM Studio-Modell-Provider hinzu. | `@openclaw/lmstudio-provider`<br />in OpenClaw enthalten | providers: lmstudio; contracts: memoryEmbeddingProviders |
| [matrix](/de/plugins/reference/matrix) | Fügt die Matrix-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/matrix`<br />in OpenClaw enthalten | channels: matrix |
| [mattermost](/de/plugins/reference/mattermost) | Fügt die Mattermost-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/mattermost`<br />in OpenClaw enthalten | channels: mattermost |
| [memory-core](/de/plugins/reference/memory-core) | Fügt Unterstützung für Memory-Embedding-Provider hinzu. Fügt von Agenten aufrufbare Werkzeuge hinzu. | `@openclaw/memory-core`<br />in OpenClaw enthalten | contracts: memoryEmbeddingProviders, tools |
| [memory-core](/de/plugins/reference/memory-core) | Fügt Unterstützung für Memory-Embedding-Provider hinzu. Fügt vom Agenten aufrufbare Tools hinzu. | `@openclaw/memory-core`<br />in OpenClaw enthalten | contracts: memoryEmbeddingProviders, tools |
| [memory-wiki](/de/plugins/reference/memory-wiki) | Persistenter Wiki-Compiler und Obsidian-freundlicher Wissensspeicher für OpenClaw. | `@openclaw/memory-wiki`<br />in OpenClaw enthalten | contracts: tools; skills |
| [microsoft](/de/plugins/reference/microsoft) | Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/microsoft-speech`<br />in OpenClaw enthalten | contracts: speechProviders |
| [microsoft-foundry](/de/plugins/reference/microsoft-foundry) | Fügt OpenClaw Unterstützung für Microsoft Foundry-Modell-Provider hinzu. | `@openclaw/microsoft-foundry`<br />in OpenClaw enthalten | providers: microsoft-foundry |
| [microsoft-foundry](/de/plugins/reference/microsoft-foundry) | Fügt Unterstützung für Microsoft Foundry-Modell-Provider zu OpenClaw hinzu. | `@openclaw/microsoft-foundry`<br />in OpenClaw enthalten | providers: microsoft-foundry |
| [migrate-claude](/de/plugins/reference/migrate-claude) | Importiert Claude Code- und Claude Desktop-Anweisungen, MCP-Server, Skills und sichere Konfiguration in OpenClaw. | `@openclaw/migrate-claude`<br />in OpenClaw enthalten | contracts: migrationProviders |
| [migrate-hermes](/de/plugins/reference/migrate-hermes) | Importiert Hermes-Konfiguration, Speicherinhalte, Skills und unterstützte Anmeldedaten in OpenClaw. | `@openclaw/migrate-hermes`<br />in OpenClaw enthalten | contracts: migrationProviders |
| [minimax](/de/plugins/reference/minimax) | Fügt OpenClaw Unterstützung für MiniMax- und MiniMax Portal-Modell-Provider hinzu. | `@openclaw/minimax-provider`<br />in OpenClaw enthalten | providers: minimax, minimax-portal; contracts: imageGenerationProviders, mediaUnderstandingProviders, musicGenerationProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [mistral](/de/plugins/reference/mistral) | Fügt OpenClaw Unterstützung für Mistral-Modell-Provider hinzu. | `@openclaw/mistral-provider`<br />in OpenClaw enthalten | providers: mistral; contracts: mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders |
| [moonshot](/de/plugins/reference/moonshot) | Fügt OpenClaw Unterstützung für Moonshot-Modell-Provider hinzu. | `@openclaw/moonshot-provider`<br />in OpenClaw enthalten | providers: moonshot; contracts: mediaUnderstandingProviders, webSearchProviders |
| [nvidia](/de/plugins/reference/nvidia) | Fügt OpenClaw Unterstützung für NVIDIA-Modell-Provider hinzu. | `@openclaw/nvidia-provider`<br />in OpenClaw enthalten | providers: nvidia |
| [ollama](/de/plugins/reference/ollama) | Fügt OpenClaw Unterstützung für Ollama-Modell-Provider hinzu. | `@openclaw/ollama-provider`<br />in OpenClaw enthalten | providers: ollama; contracts: memoryEmbeddingProviders, webSearchProviders |
| [migrate-hermes](/de/plugins/reference/migrate-hermes) | Importiert Hermes-Konfiguration, Speicher, Skills und unterstützte Zugangsdaten in OpenClaw. | `@openclaw/migrate-hermes`<br />in OpenClaw enthalten | contracts: migrationProviders |
| [minimax](/de/plugins/reference/minimax) | Fügt Unterstützung für MiniMax- und MiniMax Portal-Modell-Provider zu OpenClaw hinzu. | `@openclaw/minimax-provider`<br />in OpenClaw enthalten | providers: minimax, minimax-portal; contracts: imageGenerationProviders, mediaUnderstandingProviders, musicGenerationProviders, speechProviders, videoGenerationProviders, webSearchProviders |
| [mistral](/de/plugins/reference/mistral) | Fügt Unterstützung für Mistral-Modell-Provider zu OpenClaw hinzu. | `@openclaw/mistral-provider`<br />in OpenClaw enthalten | providers: mistral; contracts: mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders |
| [moonshot](/de/plugins/reference/moonshot) | Fügt Unterstützung für Moonshot-Modell-Provider zu OpenClaw hinzu. | `@openclaw/moonshot-provider`<br />in OpenClaw enthalten | providers: moonshot; contracts: mediaUnderstandingProviders, webSearchProviders |
| [nvidia](/de/plugins/reference/nvidia) | Fügt Unterstützung für NVIDIA-Modell-Provider zu OpenClaw hinzu. | `@openclaw/nvidia-provider`<br />in OpenClaw enthalten | providers: nvidia |
| [ollama](/de/plugins/reference/ollama) | Fügt Unterstützung für Ollama-Modell-Provider zu OpenClaw hinzu. | `@openclaw/ollama-provider`<br />in OpenClaw enthalten | providers: ollama; contracts: memoryEmbeddingProviders, webSearchProviders |
| [open-prose](/de/plugins/reference/open-prose) | OpenProse-VM-Skill-Paket mit einem /prose-Slash-Befehl. | `@openclaw/open-prose`<br />in OpenClaw enthalten | skills |
| [openai](/de/plugins/reference/openai) | Fügt OpenClaw Unterstützung für OpenAI- und OpenAI Codex-Modell-Provider hinzu. | `@openclaw/openai-provider`<br />in OpenClaw enthalten | providers: openai, openai-codex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [opencode](/de/plugins/reference/opencode) | Fügt OpenClaw Unterstützung für OpenCode-Modell-Provider hinzu. | `@openclaw/opencode-provider`<br />in OpenClaw enthalten | providers: opencode; contracts: mediaUnderstandingProviders |
| [opencode-go](/de/plugins/reference/opencode-go) | Fügt OpenClaw Unterstützung für OpenCode Go-Modell-Provider hinzu. | `@openclaw/opencode-go-provider`<br />in OpenClaw enthalten | providers: opencode-go; contracts: mediaUnderstandingProviders |
| [openrouter](/de/plugins/reference/openrouter) | Fügt OpenClaw Unterstützung für OpenRouter-Modell-Provider hinzu. | `@openclaw/openrouter-provider`<br />in OpenClaw enthalten | providers: openrouter; contracts: imageGenerationProviders, mediaUnderstandingProviders, speechProviders, videoGenerationProviders |
| [openai](/de/plugins/reference/openai) | Fügt Unterstützung für OpenAI- und OpenAI Codex-Modell-Provider zu OpenClaw hinzu. | `@openclaw/openai-provider`<br />in OpenClaw enthalten | providers: openai, openai-codex; contracts: imageGenerationProviders, mediaUnderstandingProviders, memoryEmbeddingProviders, realtimeTranscriptionProviders, realtimeVoiceProviders, speechProviders, videoGenerationProviders |
| [opencode](/de/plugins/reference/opencode) | Fügt Unterstützung für OpenCode-Modell-Provider zu OpenClaw hinzu. | `@openclaw/opencode-provider`<br />in OpenClaw enthalten | providers: opencode; contracts: mediaUnderstandingProviders |
| [opencode-go](/de/plugins/reference/opencode-go) | Fügt Unterstützung für OpenCode Go-Modell-Provider zu OpenClaw hinzu. | `@openclaw/opencode-go-provider`<br />in OpenClaw enthalten | providers: opencode-go; contracts: mediaUnderstandingProviders |
| [openrouter](/de/plugins/reference/openrouter) | Fügt Unterstützung für OpenRouter-Modell-Provider zu OpenClaw hinzu. | `@openclaw/openrouter-provider`<br />in OpenClaw enthalten | providers: openrouter; contracts: imageGenerationProviders, mediaUnderstandingProviders, speechProviders, videoGenerationProviders |
| [openshell](/de/plugins/reference/openshell) | Sandbox-Backend auf Basis von OpenShell mit gespiegelten lokalen Arbeitsbereichen und SSH-basierter Befehlsausführung. | `@openclaw/openshell-sandbox`<br />in OpenClaw enthalten | plugin |
| [perplexity](/de/plugins/reference/perplexity) | Fügt Unterstützung für Websuche-Provider hinzu. | `@openclaw/perplexity-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [qianfan](/de/plugins/reference/qianfan) | Fügt OpenClaw Unterstützung für Qianfan-Modell-Provider hinzu. | `@openclaw/qianfan-provider`<br />in OpenClaw enthalten | providers: qianfan |
| [qwen](/de/plugins/reference/qwen) | Fügt OpenClaw Unterstützung für Qwen-, Qwen Cloud-, Model Studio- und DashScope-Modell-Provider hinzu. | `@openclaw/qwen-provider`<br />in OpenClaw enthalten | providers: qwen, qwencloud, modelstudio, dashscope; contracts: mediaUnderstandingProviders, videoGenerationProviders |
| [runway](/de/plugins/reference/runway) | Fügt Unterstützung für Video-Generierungs-Provider hinzu. | `@openclaw/runway-provider`<br />in OpenClaw enthalten | contracts: videoGenerationProviders |
| [searxng](/de/plugins/reference/searxng) | Fügt Unterstützung für Websuche-Provider hinzu. | `@openclaw/searxng-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [senseaudio](/de/plugins/reference/senseaudio) | Fügt Unterstützung für Medienverständnis-Provider hinzu. | `@openclaw/senseaudio-provider`<br />in OpenClaw enthalten | contracts: mediaUnderstandingProviders |
| [sglang](/de/plugins/reference/sglang) | Fügt OpenClaw Unterstützung für den SGLang-Modell-Provider hinzu. | `@openclaw/sglang-provider`<br />in OpenClaw enthalten | providers: sglang |
| [signal](/de/plugins/reference/signal) | Fügt die Signal-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/signal`<br />in OpenClaw enthalten | channels: signal |
| [skill-workshop](/de/plugins/reference/skill-workshop) | Erfasst wiederholbare Workflows als Workspace-Skills, mit ausstehender Überprüfung, sicheren Schreibvorgängen und Aktualisierung von Skill-Prompts. | `@openclaw/skill-workshop`<br />in OpenClaw enthalten | contracts: tools |
| [slack](/de/plugins/reference/slack) | Fügt die Slack-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/slack`<br />in OpenClaw enthalten | channels: slack |
| [stepfun](/de/plugins/reference/stepfun) | Fügt OpenClaw Unterstützung für die Modell-Provider StepFun und StepFun Plan hinzu. | `@openclaw/stepfun-provider`<br />in OpenClaw enthalten | providers: stepfun, stepfun-plan |
| [synthetic](/de/plugins/reference/synthetic) | Fügt OpenClaw Unterstützung für den Synthetic-Modell-Provider hinzu. | `@openclaw/synthetic-provider`<br />in OpenClaw enthalten | providers: synthetic |
| [tavily](/de/plugins/reference/tavily) | Fügt durch Agents aufrufbare Tools hinzu. Fügt Unterstützung für Websuche-Provider hinzu. | `@openclaw/tavily-plugin`<br />in OpenClaw enthalten | contracts: tools, webSearchProviders; skills |
| [telegram](/de/plugins/reference/telegram) | Fügt die Telegram-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/telegram`<br />in OpenClaw enthalten | channels: telegram |
| [tencent](/de/plugins/reference/tencent) | Fügt OpenClaw Unterstützung für den Tencent TokenHub-Modell-Provider hinzu. | `@openclaw/tencent-provider`<br />in OpenClaw enthalten | providers: tencent-tokenhub |
| [together](/de/plugins/reference/together) | Fügt OpenClaw Unterstützung für den Together-Modell-Provider hinzu. | `@openclaw/together-provider`<br />in OpenClaw enthalten | providers: together; contracts: videoGenerationProviders |
| [tokenjuice](/de/plugins/reference/tokenjuice) | Komprimiert Ergebnisse von Exec- und Bash-Tools mit tokenjuice-Reducern. | `@openclaw/tokenjuice`<br />in OpenClaw enthalten | contracts: agentToolResultMiddleware |
| [tts-local-cli](/de/plugins/reference/tts-local-cli) | Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/tts-local-cli`<br />in OpenClaw enthalten | contracts: speechProviders |
| [venice](/de/plugins/reference/venice) | Fügt OpenClaw Unterstützung für den Venice-Modell-Provider hinzu. | `@openclaw/venice-provider`<br />in OpenClaw enthalten | providers: venice |
| [vercel-ai-gateway](/de/plugins/reference/vercel-ai-gateway) | Fügt OpenClaw Unterstützung für den Vercel AI Gateway-Modell-Provider hinzu. | `@openclaw/vercel-ai-gateway-provider`<br />in OpenClaw enthalten | providers: vercel-ai-gateway |
| [vllm](/de/plugins/reference/vllm) | Fügt OpenClaw Unterstützung für den vLLM-Modell-Provider hinzu. | `@openclaw/vllm-provider`<br />in OpenClaw enthalten | providers: vllm |
| [volcengine](/de/plugins/reference/volcengine) | Fügt OpenClaw Unterstützung für die Modell-Provider Volcengine und Volcengine Plan hinzu. | `@openclaw/volcengine-provider`<br />in OpenClaw enthalten | providers: volcengine, volcengine-plan; contracts: speechProviders |
| [voyage](/de/plugins/reference/voyage) | Fügt Unterstützung für Provider für Memory-Embeddings hinzu. | `@openclaw/voyage-provider`<br />in OpenClaw enthalten | contracts: memoryEmbeddingProviders |
| [vydra](/de/plugins/reference/vydra) | Fügt OpenClaw Unterstützung für den Vydra-Modell-Provider hinzu. | `@openclaw/vydra-provider`<br />in OpenClaw enthalten | providers: vydra; contracts: imageGenerationProviders, speechProviders, videoGenerationProviders |
| [web-readability](/de/plugins/reference/web-readability) | Extrahiert lesbaren Artikelinhalt aus lokalen HTML-Web-Fetch-Antworten. | `@openclaw/web-readability-plugin`<br />in OpenClaw enthalten | contracts: webContentExtractors |
| [qianfan](/de/plugins/reference/qianfan) | Fügt Unterstützung für Qianfan-Modell-Provider zu OpenClaw hinzu. | `@openclaw/qianfan-provider`<br />in OpenClaw enthalten | providers: qianfan |
| [qwen](/de/plugins/reference/qwen) | Fügt Unterstützung für Qwen-, Qwen Cloud-, Model Studio- und DashScope-Modell-Provider zu OpenClaw hinzu. | `@openclaw/qwen-provider`<br />in OpenClaw enthalten | providers: qwen, qwencloud, modelstudio, dashscope; contracts: mediaUnderstandingProviders, videoGenerationProviders |
| [runway](/de/plugins/reference/runway) | Fügt Unterstützung für Videogenerierungs-Provider hinzu. | `@openclaw/runway-provider`<br />in OpenClaw enthalten | contracts: videoGenerationProviders |
| [searxng](/de/plugins/reference/searxng) | Fügt Unterstützung für Websuch-Provider hinzu. | `@openclaw/searxng-plugin`<br />in OpenClaw enthalten | contracts: webSearchProviders |
| [senseaudio](/de/plugins/reference/senseaudio) | Fügt Unterstützung für Medienverständnis-Provider hinzu. | `@openclaw/senseaudio-provider`<br />in OpenClaw enthalten | contracts: mediaUnderstandingProviders |
| [sglang](/de/plugins/reference/sglang) | Fügt OpenClaw Unterstützung für SGLang-Modell-Provider hinzu. | `@openclaw/sglang-provider`<br />in OpenClaw enthalten | providers: sglang |
| [signal](/de/plugins/reference/signal) | Fügt die Signal-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/signal`<br />in OpenClaw enthalten | channels: signal |
| [skill-workshop](/de/plugins/reference/skill-workshop) | Erfasst wiederholbare Workflows als Workspace-Skills, mit ausstehender Prüfung, sicheren Schreibvorgängen und Aktualisierung des Skill-Prompts. | `@openclaw/skill-workshop`<br />in OpenClaw enthalten | contracts: tools |
| [slack](/de/plugins/reference/slack) | Fügt die Slack-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/slack`<br />in OpenClaw enthalten | channels: slack |
| [stepfun](/de/plugins/reference/stepfun) | Fügt OpenClaw Unterstützung für StepFun- und StepFun Plan-Modell-Provider hinzu. | `@openclaw/stepfun-provider`<br />in OpenClaw enthalten | providers: stepfun, stepfun-plan |
| [synthetic](/de/plugins/reference/synthetic) | Fügt OpenClaw Unterstützung für Synthetic-Modell-Provider hinzu. | `@openclaw/synthetic-provider`<br />in OpenClaw enthalten | providers: synthetic |
| [tavily](/de/plugins/reference/tavily) | Fügt durch Agenten aufrufbare Werkzeuge hinzu. Fügt Unterstützung für Websuch-Provider hinzu. | `@openclaw/tavily-plugin`<br />in OpenClaw enthalten | contracts: tools, webSearchProviders; skills |
| [telegram](/de/plugins/reference/telegram) | Fügt die Telegram-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/telegram`<br />in OpenClaw enthalten | channels: telegram |
| [tencent](/de/plugins/reference/tencent) | Fügt OpenClaw Unterstützung für Tencent TokenHub-Modell-Provider hinzu. | `@openclaw/tencent-provider`<br />in OpenClaw enthalten | providers: tencent-tokenhub |
| [together](/de/plugins/reference/together) | Fügt OpenClaw Unterstützung für Together-Modell-Provider hinzu. | `@openclaw/together-provider`<br />in OpenClaw enthalten | providers: together; contracts: videoGenerationProviders |
| [tokenjuice](/de/plugins/reference/tokenjuice) | Komprimiert Ergebnisse von exec- und bash-Werkzeugen mit tokenjuice-Reducern. | `@openclaw/tokenjuice`<br />in OpenClaw enthalten | contracts: agentToolResultMiddleware |
| [tts-local-cli](/de/plugins/reference/tts-local-cli) | Fügt Unterstützung für Text-to-Speech-Provider hinzu. | `@openclaw/tts-local-cli`<br />in OpenClaw enthalten | contracts: speechProviders |
| [venice](/de/plugins/reference/venice) | Fügt OpenClaw Unterstützung für Venice-Modell-Provider hinzu. | `@openclaw/venice-provider`<br />in OpenClaw enthalten | providers: venice |
| [vercel-ai-gateway](/de/plugins/reference/vercel-ai-gateway) | Fügt OpenClaw Unterstützung für Vercel AI Gateway-Modell-Provider hinzu. | `@openclaw/vercel-ai-gateway-provider`<br />in OpenClaw enthalten | providers: vercel-ai-gateway |
| [vllm](/de/plugins/reference/vllm) | Fügt OpenClaw Unterstützung für vLLM-Modell-Provider hinzu. | `@openclaw/vllm-provider`<br />in OpenClaw enthalten | providers: vllm |
| [volcengine](/de/plugins/reference/volcengine) | Fügt OpenClaw Unterstützung für Volcengine- und Volcengine Plan-Modell-Provider hinzu. | `@openclaw/volcengine-provider`<br />in OpenClaw enthalten | providers: volcengine, volcengine-plan; contracts: speechProviders |
| [voyage](/de/plugins/reference/voyage) | Fügt Unterstützung für Memory-Embedding-Provider hinzu. | `@openclaw/voyage-provider`<br />in OpenClaw enthalten | contracts: memoryEmbeddingProviders |
| [vydra](/de/plugins/reference/vydra) | Fügt OpenClaw Unterstützung für Vydra-Modell-Provider hinzu. | `@openclaw/vydra-provider`<br />in OpenClaw enthalten | providers: vydra; contracts: imageGenerationProviders, speechProviders, videoGenerationProviders |
| [web-readability](/de/plugins/reference/web-readability) | Extrahiert lesbaren Artikelinhalt aus lokalen HTML-Webabruf-Antworten. | `@openclaw/web-readability-plugin`<br />in OpenClaw enthalten | contracts: webContentExtractors |
| [webhooks](/de/plugins/reference/webhooks) | Authentifizierte eingehende Webhooks, die externe Automatisierung an OpenClaw TaskFlows binden. | `@openclaw/webhooks`<br />in OpenClaw enthalten | plugin |
| [xai](/de/plugins/reference/xai) | Fügt OpenClaw Unterstützung für den xAI-Modell-Provider hinzu. | `@openclaw/xai-plugin`<br />in OpenClaw enthalten | providers: xai; contracts: imageGenerationProviders, mediaUnderstandingProviders, realtimeTranscriptionProviders, speechProviders, tools, videoGenerationProviders, webSearchProviders |
| [xiaomi](/de/plugins/reference/xiaomi) | Fügt OpenClaw Unterstützung für den Xiaomi-Modell-Provider hinzu. | `@openclaw/xiaomi-provider`<br />in OpenClaw enthalten | providers: xiaomi; contracts: speechProviders |
@ -130,35 +150,35 @@ verfügbar sind.
| Plugin | Beschreibung | Distribution | Oberfläche |
| ------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| [acpx](/de/plugins/reference/acpx) | Eingebettetes ACP-Runtime-Backend mit Plugin-eigener Sitzungs- und Transportverwaltung. | `@openclaw/acpx`<br />npm; ClawHub | skills |
| [bluebubbles](/de/plugins/reference/bluebubbles) | Fügt die BlueBubbles-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/bluebubbles`<br />npm; ClawHub | channels: bluebubbles |
| [bluebubbles](/de/plugins/reference/bluebubbles) | Fügt die BlueBubbles-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/bluebubbles`<br />npm; ClawHub | channels: bluebubbles |
| [brave](/de/plugins/reference/brave) | Fügt Unterstützung für Websuch-Provider hinzu. | `@openclaw/brave-plugin`<br />npm; ClawHub | contracts: webSearchProviders |
| [codex](/de/plugins/reference/codex) | Codex-App-Server-Harness und von Codex verwalteter GPT-Modellkatalog. | `@openclaw/codex`<br />npm; ClawHub | providers: codex; contracts: mediaUnderstandingProviders, migrationProviders |
| [diagnostics-otel](/de/plugins/reference/diagnostics-otel) | OpenClaw-Diagnose-OpenTelemetry-Exporter. | `@openclaw/diagnostics-otel`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-otel` | plugin |
| [diagnostics-prometheus](/de/plugins/reference/diagnostics-prometheus) | OpenClaw-Diagnose-Prometheus-Exporter. | `@openclaw/diagnostics-prometheus`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-prometheus` | plugin |
| [diffs](/de/plugins/reference/diffs) | Schreibgeschützter Diff-Viewer und Datei-Renderer für Agenten. | `@openclaw/diffs`<br />npm; ClawHub | contracts: tools; skills |
| [discord](/de/plugins/reference/discord) | Fügt die Discord-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/discord`<br />npm; ClawHub | channels: discord |
| [feishu](/de/plugins/reference/feishu) | Fügt die Feishu-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/feishu`<br />npm; ClawHub | channels: feishu; contracts: tools; skills |
| [google-meet](/de/plugins/reference/google-meet) | Nehmen Sie über Chrome- oder Twilio-Transporte an Google Meet-Anrufen teil. | `@openclaw/google-meet`<br />npm; ClawHub | contracts: tools |
| [googlechat](/de/plugins/reference/googlechat) | Fügt die Google Chat-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/googlechat`<br />npm; ClawHub | channels: googlechat |
| [line](/de/plugins/reference/line) | Fügt die LINE-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/line`<br />npm; ClawHub | channels: line |
| [lobster](/de/plugins/reference/lobster) | Typisiertes Workflow-Tool mit fortsetzbaren Genehmigungen. | `@openclaw/lobster`<br />npm; ClawHub | contracts: tools |
| [codex](/de/plugins/reference/codex) | Codex-App-Server-Harness und von Codex verwalteter GPT-Modellkatalog. | `@openclaw/codex`<br />npm; ClawHub | providers: codex; contracts: mediaUnderstandingProviders, migrationProviders |
| [diagnostics-otel](/de/plugins/reference/diagnostics-otel) | OpenClaw-Diagnose-Exporter für OpenTelemetry. | `@openclaw/diagnostics-otel`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-otel` | plugin |
| [diagnostics-prometheus](/de/plugins/reference/diagnostics-prometheus) | OpenClaw-Diagnose-Exporter für Prometheus. | `@openclaw/diagnostics-prometheus`<br />npm; ClawHub: `clawhub:@openclaw/diagnostics-prometheus` | plugin |
| [diffs](/de/plugins/reference/diffs) | Schreibgeschützter Diff-Viewer und Datei-Renderer für Agenten. | `@openclaw/diffs`<br />npm; ClawHub | contracts: tools; skills |
| [discord](/de/plugins/reference/discord) | Fügt die Discord-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/discord`<br />npm; ClawHub | channels: discord |
| [feishu](/de/plugins/reference/feishu) | Fügt die Feishu-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/feishu`<br />npm; ClawHub | channels: feishu; contracts: tools; skills |
| [google-meet](/de/plugins/reference/google-meet) | An Google Meet-Anrufen über Chrome- oder Twilio-Transporte teilnehmen. | `@openclaw/google-meet`<br />npm; ClawHub | contracts: tools |
| [googlechat](/de/plugins/reference/googlechat) | Fügt die Google Chat-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/googlechat`<br />npm; ClawHub | channels: googlechat |
| [line](/de/plugins/reference/line) | Fügt die LINE-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/line`<br />npm; ClawHub | channels: line |
| [lobster](/de/plugins/reference/lobster) | Typisiertes Workflow-Tool mit fortsetzbaren Genehmigungen. | `@openclaw/lobster`<br />npm; ClawHub | contracts: tools |
| [memory-lancedb](/de/plugins/reference/memory-lancedb) | Fügt von Agenten aufrufbare Tools hinzu. | `@openclaw/memory-lancedb`<br />npm; ClawHub | contracts: tools |
| [msteams](/de/plugins/reference/msteams) | Fügt die Microsoft Teams-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/msteams`<br />npm; ClawHub | channels: msteams |
| [nextcloud-talk](/de/plugins/reference/nextcloud-talk) | Fügt die Nextcloud Talk-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/nextcloud-talk`<br />npm; ClawHub | channels: nextcloud-talk |
| [nostr](/de/plugins/reference/nostr) | Fügt die Nostr-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/nostr`<br />npm; ClawHub | channels: nostr |
| [qqbot](/de/plugins/reference/qqbot) | Fügt die QQ Bot-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/qqbot`<br />npm; ClawHub | channels: qqbot; contracts: tools; skills |
| [synology-chat](/de/plugins/reference/synology-chat) | Fügt die Synology Chat-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/synology-chat`<br />npm; ClawHub | channels: synology-chat |
| [tlon](/de/plugins/reference/tlon) | Fügt die Tlon-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/tlon`<br />npm; ClawHub | channels: tlon; contracts: tools; skills |
| [twitch](/de/plugins/reference/twitch) | Fügt die Twitch-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/twitch`<br />npm; ClawHub | channels: twitch |
| [msteams](/de/plugins/reference/msteams) | Fügt die Microsoft Teams-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/msteams`<br />npm; ClawHub | channels: msteams |
| [nextcloud-talk](/de/plugins/reference/nextcloud-talk) | Fügt die Nextcloud Talk-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/nextcloud-talk`<br />npm; ClawHub | channels: nextcloud-talk |
| [nostr](/de/plugins/reference/nostr) | Fügt die Nostr-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/nostr`<br />npm; ClawHub | channels: nostr |
| [qqbot](/de/plugins/reference/qqbot) | Fügt die QQ-Bot-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/qqbot`<br />npm; ClawHub | channels: qqbot; contracts: tools; skills |
| [synology-chat](/de/plugins/reference/synology-chat) | Fügt die Synology Chat-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/synology-chat`<br />npm; ClawHub | channels: synology-chat |
| [tlon](/de/plugins/reference/tlon) | Fügt die Tlon-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/tlon`<br />npm; ClawHub | channels: tlon; contracts: tools; skills |
| [twitch](/de/plugins/reference/twitch) | Fügt die Twitch-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/twitch`<br />npm; ClawHub | channels: twitch |
| [voice-call](/de/plugins/reference/voice-call) | Fügt von Agenten aufrufbare Tools hinzu. | `@openclaw/voice-call`<br />npm; ClawHub | contracts: tools |
| [whatsapp](/de/plugins/reference/whatsapp) | Fügt die WhatsApp-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/whatsapp`<br />npm; ClawHub | channels: whatsapp |
| [zalo](/de/plugins/reference/zalo) | Fügt die Zalo-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/zalo`<br />npm; ClawHub | channels: zalo |
| [zalouser](/de/plugins/reference/zalouser) | Fügt die Zalo Personal-Kanaloberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/zalouser`<br />npm; ClawHub | channels: zalouser; contracts: tools |
| [whatsapp](/de/plugins/reference/whatsapp) | Fügt die WhatsApp-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/whatsapp`<br />npm; ClawHub | channels: whatsapp |
| [zalo](/de/plugins/reference/zalo) | Fügt die Zalo-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/zalo`<br />npm; ClawHub | channels: zalo |
| [zalouser](/de/plugins/reference/zalouser) | Fügt die Zalo Personal-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/zalouser`<br />npm; ClawHub | channels: zalouser; contracts: tools |
## Nur Source-Checkout
| Plugin | Beschreibung | Distribution | Oberfläche |
| ------------------------------------------- | ---------------------------------------------------------------------- | ------------------------------------------------ | -------------------- |
| [qa-channel](/de/plugins/reference/qa-channel) | Fügt die QA Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/qa-channel`<br />nur Source-Checkout | channels: qa-channel |
| [qa-lab](/de/plugins/reference/qa-lab) | OpenClaw-QA-Lab-Plugin mit privater Debugger-UI und Szenario-Runner. | `@openclaw/qa-lab`<br />nur Source-Checkout | plugin |
| [qa-matrix](/de/plugins/reference/qa-matrix) | Matrix-QA-Transport-Runner und Substrat. | `@openclaw/qa-matrix`<br />nur Source-Checkout | plugin |
| Plugin | Beschreibung | Distribution | Oberfläche |
| ------------------------------------------- | ----------------------------------------------------------------------------------- | ------------------------------------------------ | -------------------- |
| [qa-channel](/de/plugins/reference/qa-channel) | Fügt die QA-Channel-Oberfläche zum Senden und Empfangen von OpenClaw-Nachrichten hinzu. | `@openclaw/qa-channel`<br />nur Source-Checkout | channels: qa-channel |
| [qa-lab](/de/plugins/reference/qa-lab) | OpenClaw-QA-Lab-Plugin mit privater Debugger-UI und Szenario-Runner. | `@openclaw/qa-lab`<br />nur Source-Checkout | plugin |
| [qa-matrix](/de/plugins/reference/qa-matrix) | Matrix-QA-Transport-Runner und Substrat. | `@openclaw/qa-matrix`<br />nur Source-Checkout | plugin |

View File

@ -1,16 +1,16 @@
---
read_when:
- Sie müssen Core-Hilfsfunktionen aus einem Plugin aufrufen (TTS, STT, Bildgenerierung, Websuche, Subagent, Nodes)
- Sie müssen zentrale Hilfsfunktionen aus einem Plugin heraus aufrufen (TTS, STT, Bildgenerierung, Websuche, Subagent, Nodes)
- Sie möchten verstehen, was api.runtime bereitstellt
- Sie greifen aus Plugin-Code auf Konfigurations-, Agent- oder Medien-Hilfsfunktionen zu
- Sie greifen aus Plugin-Code auf Konfigurations-, Agenten- oder Medien-Hilfsfunktionen zu
sidebarTitle: Runtime helpers
summary: api.runtime -- die für Plugins verfügbaren injizierten Laufzeit-Hilfsfunktionen
summary: api.runtime -- die injizierten Runtime-Hilfsfunktionen, die Plugins zur Verfügung stehen
title: Plugin-Runtime-Hilfsfunktionen
x-i18n:
generated_at: "2026-05-02T21:01:31Z"
generated_at: "2026-05-04T09:37:10Z"
model: gpt-5.5
provider: openai
source_hash: 26df37a2ad0dcd29648e382eb579b6892068af4dea1c47460cfd379458a8081c
source_hash: c968f30052ecba4359bdaa9b1c640c1220268933ce01ccef06bcade225b50b7d
source_path: plugins/sdk-runtime.md
workflow: 16
---
@ -34,19 +34,19 @@ register(api) {
## Laden und Schreiben von Konfiguration
Bevorzugen Sie Konfiguration, die bereits in den aktiven Aufrufpfad übergeben wurde, zum Beispiel `api.config` während der Registrierung oder ein `cfg`-Argument in Kanal-/Provider-Callbacks. Dadurch fließt ein Prozess-Snapshot durch die Arbeit, statt Konfiguration auf Hot Paths erneut zu parsen.
Bevorzugen Sie Konfiguration, die bereits an den aktiven Aufrufpfad übergeben wurde, zum Beispiel `api.config` während der Registrierung oder ein `cfg`-Argument in Kanal-/Provider-Callbacks. Dadurch fließt ein Prozess-Snapshot durch die Arbeit, statt Konfiguration auf heißen Pfaden erneut zu parsen.
Verwenden Sie `api.runtime.config.current()` nur, wenn ein langlebiger Handler den aktuellen Prozess-Snapshot benötigt und keine Konfiguration an diese Funktion übergeben wurde. Der zurückgegebene Wert ist schreibgeschützt; klonen Sie ihn oder verwenden Sie vor dem Bearbeiten eine Mutations-Hilfsfunktion.
Tool-Factories erhalten `ctx.runtimeConfig` plus `ctx.getRuntimeConfig()`. Verwenden Sie den Getter innerhalb des `execute`-Callbacks eines langlebigen Tools, wenn sich die Konfiguration ändern kann, nachdem die Tool-Definition erstellt wurde.
Persistieren Sie Änderungen mit `api.runtime.config.mutateConfigFile(...)` oder `api.runtime.config.replaceConfigFile(...)`. Jeder Schreibvorgang muss eine explizite `afterWrite`-Policy wählen:
Persistieren Sie Änderungen mit `api.runtime.config.mutateConfigFile(...)` oder `api.runtime.config.replaceConfigFile(...)`. Jeder Schreibvorgang muss eine explizite `afterWrite`-Richtlinie wählen:
- `afterWrite: { mode: "auto" }` überlässt die Entscheidung dem Reload-Planer des Gateway.
- `afterWrite: { mode: "auto" }` überlässt die Entscheidung dem Gateway-Reload-Planer.
- `afterWrite: { mode: "restart", reason: "..." }` erzwingt einen sauberen Neustart, wenn der Schreiber weiß, dass Hot Reload unsicher ist.
- `afterWrite: { mode: "none", reason: "..." }` unterdrückt automatisches Reload/Neustart nur, wenn der Aufrufer die Nacharbeit selbst übernimmt.
- `afterWrite: { mode: "none", reason: "..." }` unterdrückt automatisches Reload/Neustart nur, wenn der Aufrufer die Nachbearbeitung übernimmt.
Die Mutations-Hilfsfunktionen geben `afterWrite` plus eine typisierte `followUp`-Zusammenfassung zurück, sodass Aufrufer protokollieren oder testen können, ob sie einen Neustart angefordert haben. Das Gateway entscheidet weiterhin, wann dieser Neustart tatsächlich erfolgt.
Die Mutations-Hilfsfunktionen geben `afterWrite` plus eine typisierte `followUp`-Zusammenfassung zurück, damit Aufrufer protokollieren oder testen können, ob sie einen Neustart angefordert haben. Das Gateway bleibt weiterhin dafür zuständig, wann dieser Neustart tatsächlich erfolgt.
`api.runtime.config.loadConfig()` und `api.runtime.config.writeConfigFile(...)` sind veraltete Kompatibilitäts-Hilfsfunktionen unter `runtime-config-load-write`. Sie warnen einmal zur Laufzeit und bleiben während des Migrationsfensters für alte externe Plugins verfügbar. Gebündelte Plugins dürfen sie nicht verwenden; die Konfigurationsgrenzen-Prüfungen schlagen fehl, wenn Plugin-Code sie aufruft oder diese Hilfsfunktionen aus Plugin-SDK-Unterpfaden importiert.
@ -57,11 +57,11 @@ Entry-Lookup, `runtime-config-snapshot` für aktuelle Prozess-Snapshots und
`config-mutation` für Schreibvorgänge. Tests gebündelter Plugins sollten diese fokussierten
Unterpfade direkt mocken, statt das breite Kompatibilitäts-Barrel zu mocken.
Interner OpenClaw-Laufzeitcode folgt derselben Richtung: Konfiguration einmal an der CLI-, Gateway- oder Prozessgrenze laden und diesen Wert dann weiterreichen. Erfolgreiche Mutations-Schreibvorgänge aktualisieren den Prozess-Laufzeit-Snapshot und erhöhen seine interne Revision; langlebige Caches sollten den Gateway-eigenen Cache-Schlüssel verwenden, statt Konfiguration lokal zu serialisieren. Langlebige Laufzeitmodule haben einen Null-Toleranz-Scanner für umgebende `loadConfig()`-Aufrufe; verwenden Sie ein übergebenes `cfg`, ein Request-`context.getRuntimeConfig()` oder `getRuntimeConfig()` an einer expliziten Prozessgrenze.
Interner OpenClaw-Laufzeitcode folgt derselben Richtung: Konfiguration einmal an der CLI-, Gateway- oder Prozessgrenze laden und diesen Wert dann weiterreichen. Erfolgreiche Mutations-Schreibvorgänge aktualisieren den Prozesslaufzeit-Snapshot und erhöhen dessen interne Revision; langlebige Caches sollten den laufzeiteigenen Cache-Schlüssel verwenden, statt Konfiguration lokal zu serialisieren. Langlebige Laufzeitmodule haben einen Scanner mit Nulltoleranz für umgebungsbezogene `loadConfig()`-Aufrufe; verwenden Sie ein übergebenes `cfg`, ein Request-`context.getRuntimeConfig()` oder `getRuntimeConfig()` an einer expliziten Prozessgrenze.
Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfigurations-Snapshot verwenden, nicht einen Datei-Snapshot, der für Konfigurations-Readback oder Bearbeitung zurückgegeben wurde. Datei-Snapshots bewahren Quellwerte wie SecretRef-Marker für UI und Schreibvorgänge; Provider-Callbacks benötigen die aufgelöste Laufzeitansicht. Wenn eine Hilfsfunktion entweder mit dem aktiven Quell-Snapshot oder dem aktiven Laufzeit-Snapshot aufgerufen werden kann, leiten Sie vor dem Lesen von Zugangsdaten über `selectApplicableRuntimeConfig()`.
Provider- und Kanalausführungspfade müssen den aktiven Runtime-Konfigurations-Snapshot verwenden, nicht einen Datei-Snapshot, der für Konfigurationsrücklesen oder Bearbeitung zurückgegeben wurde. Datei-Snapshots bewahren Quellwerte wie SecretRef-Marker für UI und Schreibvorgänge; Provider-Callbacks benötigen die aufgelöste Runtime-Sicht. Wenn eine Hilfsfunktion entweder mit dem aktiven Quell-Snapshot oder dem aktiven Runtime-Snapshot aufgerufen werden kann, routen Sie vor dem Lesen von Zugangsdaten über `selectApplicableRuntimeConfig()`.
## Laufzeit-Namespaces
## Runtime-Namespaces
<AccordionGroup>
<Accordion title="api.runtime.agent">
@ -109,15 +109,15 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
});
```
`runEmbeddedAgent(...)` ist die neutrale Hilfsfunktion, um aus Plugin-Code einen normalen OpenClaw-Agenten-Turn zu starten. Sie verwendet dieselbe Provider-/Modellauflösung und Agent-Harness-Auswahl wie kanalgetriggerte Antworten.
`runEmbeddedAgent(...)` ist die neutrale Hilfsfunktion, um aus Plugin-Code heraus einen normalen OpenClaw-Agentendurchlauf zu starten. Sie verwendet dieselbe Provider-/Modellauflösung und Agent-Harness-Auswahl wie kanalgetriggerte Antworten.
`runEmbeddedPiAgent(...)` bleibt als Kompatibilitätsalias erhalten.
`resolveThinkingPolicy(...)` gibt die vom Provider/Modell unterstützten Thinking-Level und einen optionalen Standard zurück. Provider-Plugins besitzen das modellspezifische Profil über ihre Thinking-Hooks, daher sollten Tool-Plugins diese Laufzeit-Hilfsfunktion aufrufen, statt Provider-Listen zu importieren oder zu duplizieren.
`resolveThinkingPolicy(...)` gibt die vom Provider/Modell unterstützten Denkstufen und optionalen Standardwert zurück. Provider-Plugins besitzen das modellspezifische Profil über ihre Thinking-Hooks, daher sollten Tool-Plugins diese Runtime-Hilfsfunktion aufrufen, statt Provider-Listen zu importieren oder zu duplizieren.
`normalizeThinkingLevel(...)` konvertiert Benutzereingaben wie `on`, `x-high` oder `extra high` in den kanonisch gespeicherten Level, bevor er gegen die aufgelöste Policy geprüft wird.
`normalizeThinkingLevel(...)` konvertiert Benutzereingaben wie `on`, `x-high` oder `extra high` in die kanonische gespeicherte Stufe, bevor sie gegen die aufgelöste Richtlinie geprüft wird.
**Session-Store-Hilfsfunktionen** befinden sich unter `api.runtime.agent.session`:
**Hilfsfunktionen für den Session Store** liegen unter `api.runtime.agent.session`:
```typescript
const storePath = api.runtime.agent.session.resolveStorePath(cfg);
@ -129,7 +129,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
const filePath = api.runtime.agent.session.resolveSessionFilePath(cfg, sessionId);
```
Bevorzugen Sie `updateSessionStore(...)` oder `updateSessionStoreEntry(...)` für Laufzeit-Schreibvorgänge. Sie leiten über den Gateway-eigenen Session-Store-Schreiber, bewahren gleichzeitige Updates und verwenden den Hot Cache wieder. `saveSessionStore(...)` bleibt für Kompatibilität und offlineartige Wartungs-Umschreibungen verfügbar.
Bevorzugen Sie `updateSessionStore(...)` oder `updateSessionStoreEntry(...)` für Runtime-Schreibvorgänge. Sie routen über den Gateway-eigenen Session-Store-Writer, bewahren gleichzeitige Aktualisierungen und verwenden den Hot Cache wieder. `saveSessionStore(...)` bleibt für Kompatibilität und Offline-Wartungsumschreibungen verfügbar.
</Accordion>
<Accordion title="api.runtime.agent.defaults">
@ -142,7 +142,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
</Accordion>
<Accordion title="api.runtime.subagent">
Hintergrund-Subagent-Läufe starten und verwalten.
Hintergrundläufe von Subagenten starten und verwalten.
```typescript
// Start a subagent run
@ -170,10 +170,10 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
```
<Warning>
Modell-Overrides (`provider`/`model`) erfordern ein Operator-Opt-in über `plugins.entries.<id>.subagent.allowModelOverride: true` in der Konfiguration. Nicht vertrauenswürdige Plugins können weiterhin Subagenten ausführen, aber Override-Anfragen werden abgelehnt.
Modell-Overrides (`provider`/`model`) erfordern eine Operator-Zustimmung über `plugins.entries.<id>.subagent.allowModelOverride: true` in der Konfiguration. Nicht vertrauenswürdige Plugins können weiterhin Subagenten ausführen, aber Override-Anfragen werden abgelehnt.
</Warning>
`deleteSession(...)` kann Sitzungen löschen, die vom selben Plugin über `api.runtime.subagent.run(...)` erstellt wurden. Das Löschen beliebiger Benutzer- oder Operator-Sitzungen erfordert weiterhin eine admin-skopierte Gateway-Anfrage.
`deleteSession(...)` kann Sitzungen löschen, die vom selben Plugin über `api.runtime.subagent.run(...)` erstellt wurden. Das Löschen beliebiger Benutzer- oder Operator-Sitzungen erfordert weiterhin eine Gateway-Anfrage mit Admin-Scope.
</Accordion>
<Accordion title="api.runtime.nodes">
@ -190,13 +190,13 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
});
```
Innerhalb des Gateway ist diese Laufzeit in-process. In Plugin-CLI-Befehlen ruft sie das konfigurierte Gateway über RPC auf, sodass Befehle wie `openclaw googlemeet recover-tab` gekoppelte Nodes vom Terminal aus prüfen können. Node-Befehle laufen weiterhin über normale Gateway-Node-Kopplung, Befehls-Allowlists, Plugin-Node-Invoke-Policies und node-lokale Befehlsbehandlung.
Innerhalb des Gateway ist diese Runtime im Prozess. In Plugin-CLI-Befehlen ruft sie das konfigurierte Gateway über RPC auf, sodass Befehle wie `openclaw googlemeet recover-tab` gekoppelte Nodes vom Terminal aus prüfen können. Node-Befehle laufen weiterhin über die normale Gateway-Node-Kopplung, Befehls-Allowlists, Plugin-Node-Invoke-Richtlinien und Node-lokale Befehlsbehandlung.
Plugins, die gefährliche Node-Host-Befehle bereitstellen, sollten eine Node-Invoke-Policy mit `api.registerNodeInvokePolicy(...)` registrieren. Die Policy läuft im Gateway nach Befehls-Allowlist-Prüfungen und bevor der Befehl an den Node weitergeleitet wird, sodass direkte `node.invoke`-Aufrufe und höherstufige Plugin-Tools denselben Durchsetzungspfad teilen.
Plugins, die gefährliche Node-Host-Befehle verfügbar machen, sollten mit `api.registerNodeInvokePolicy(...)` eine Node-Invoke-Richtlinie registrieren. Die Richtlinie läuft im Gateway nach den Befehls-Allowlist-Prüfungen und bevor der Befehl an den Node weitergeleitet wird, sodass direkte `node.invoke`-Aufrufe und höherstufige Plugin-Tools denselben Erzwingungspfad teilen.
</Accordion>
<Accordion title="api.runtime.tasks.managedFlows">
Eine TaskFlow-Laufzeit an einen bestehenden OpenClaw-Sitzungsschlüssel oder vertrauenswürdigen Tool-Kontext binden und dann TaskFlows erstellen und verwalten, ohne bei jedem Aufruf einen Owner zu übergeben.
Eine Task-Flow-Runtime an einen vorhandenen OpenClaw-Sitzungsschlüssel oder vertrauenswürdigen Tool-Kontext binden und dann Task Flows erstellen und verwalten, ohne bei jedem Aufruf einen Owner zu übergeben.
```typescript
const taskFlow = api.runtime.tasks.managedFlows.fromToolContext(ctx);
@ -223,7 +223,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
});
```
Verwenden Sie `bindSession({ sessionKey, requesterOrigin })`, wenn Sie bereits einen vertrauenswürdigen OpenClaw-Sitzungsschlüssel aus Ihrer eigenen Binding-Schicht haben. Binden Sie nicht aus roher Benutzereingabe.
Verwenden Sie `bindSession({ sessionKey, requesterOrigin })`, wenn Sie bereits einen vertrauenswürdigen OpenClaw-Sitzungsschlüssel aus Ihrer eigenen Bindungsschicht haben. Binden Sie nicht aus roher Benutzereingabe.
</Accordion>
<Accordion title="api.runtime.tts">
@ -249,7 +249,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
});
```
Verwendet die Kernkonfiguration `messages.tts` und die Provider-Auswahl. Gibt PCM-Audiopuffer + Abtastrate zurück.
Verwendet die zentrale `messages.tts`-Konfiguration und Provider-Auswahl. Gibt PCM-Audiopuffer plus Abtastrate zurück.
</Accordion>
<Accordion title="api.runtime.mediaUnderstanding">
@ -286,7 +286,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
Gibt `{ text: undefined }` zurück, wenn keine Ausgabe erzeugt wird (z. B. bei übersprungener Eingabe).
<Info>
`api.runtime.stt.transcribeAudioFile(...)` bleibt als Kompatibilitätsalias für `api.runtime.mediaUnderstanding.transcribeAudioFile(...)` erhalten.
`api.runtime.stt.transcribeAudioFile(...)` bleibt ein Kompatibilitätsalias für `api.runtime.mediaUnderstanding.transcribeAudioFile(...)`.
</Info>
</Accordion>
@ -317,7 +317,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
</Accordion>
<Accordion title="api.runtime.media">
Low-Level-Medienhilfsprogramme.
Low-Level-Medienwerkzeuge.
```typescript
const webMedia = await api.runtime.media.loadWebMedia(url);
@ -342,8 +342,8 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
</Accordion>
<Accordion title="api.runtime.config">
Aktueller Runtime-Konfigurations-Snapshot und transaktionale Konfigurationsschreibvorgänge. Bevorzugen Sie
eine Konfiguration, die bereits an den aktiven Aufrufpfad übergeben wurde; verwenden Sie
Aktueller Snapshot der Laufzeitkonfiguration und transaktionale Schreibvorgänge für die Konfiguration. Bevorzugen Sie
die Konfiguration, die bereits an den aktiven Aufrufpfad übergeben wurde; verwenden Sie
`current()` nur, wenn der Handler den Prozess-Snapshot direkt benötigt.
```typescript
@ -359,11 +359,11 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
`mutateConfigFile(...)` und `replaceConfigFile(...)` geben einen `followUp`-
Wert zurück, zum Beispiel `{ mode: "restart", requiresRestart: true, reason }`,
der die Absicht des Schreibers festhält, ohne dem
Gateway die Neustartsteuerung zu entziehen.
Gateway die Kontrolle über Neustarts zu entziehen.
</Accordion>
<Accordion title="api.runtime.system">
Hilfsprogramme auf Systemebene.
Dienstprogramme auf Systemebene.
```typescript
await api.runtime.system.enqueueSystemEvent(event);
@ -401,7 +401,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
</Accordion>
<Accordion title="api.runtime.modelAuth">
Auflösung von Modell- und Provider-Authentifizierung.
Auflösung der Modell- und Provider-Authentifizierung.
```typescript
const auth = await api.runtime.modelAuth.getApiKeyForModel({ model, cfg });
@ -413,7 +413,7 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
</Accordion>
<Accordion title="api.runtime.state">
Auflösung des Statusverzeichnisses und SQLite-gestützter schlüsselbasierter Speicher.
Auflösung des Zustandsverzeichnisses und SQLite-gestützter Schlüsselwertspeicher.
```typescript
const stateDir = api.runtime.state.resolveStateDir(process.env);
@ -424,20 +424,21 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
});
await store.register("key-1", { value: "hello" });
const claimed = await store.registerIfAbsent("dedupe-key", { value: "first" });
const value = await store.lookup("key-1");
await store.consume("key-1");
await store.clear();
```
Schlüsselbasierte Speicher überstehen Neustarts und sind durch die Runtime-gebundene Plugin-ID isoliert. Grenzen: `maxEntries` pro Namespace, 1.000 aktive Zeilen pro Plugin, JSON-Werte unter 64 KB und optionaler TTL-Ablauf.
Schlüsselwertspeicher überstehen Neustarts und sind durch die zur Laufzeit gebundene Plugin-ID isoliert. Verwenden Sie `registerIfAbsent(...)` für atomare Deduplizierungsansprüche: Es gibt `true` zurück, wenn der Schlüssel fehlte oder abgelaufen war und registriert wurde, oder `false`, wenn bereits ein aktiver Wert existiert, ohne dessen Wert, Erstellungszeit oder TTL zu überschreiben. Grenzen: `maxEntries` pro Namespace, 1.000 aktive Zeilen pro Plugin, JSON-Werte unter 64 KB und optionaler TTL-Ablauf.
<Warning>
Nur gebündelte Plugins in dieser Version.
In dieser Version nur gebündelte Plugins.
</Warning>
</Accordion>
<Accordion title="api.runtime.tools">
Factorys für Memory-Tools und CLI.
Factories für Speicher-Tools und CLI.
```typescript
const getTool = api.runtime.tools.createMemoryGetTool(/* ... */);
@ -447,9 +448,9 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
</Accordion>
<Accordion title="api.runtime.channel">
Kanalspezifische Runtime-Helfer (verfügbar, wenn ein Kanal-Plugin geladen ist).
Kanalspezifische Laufzeit-Helfer (verfügbar, wenn ein Kanal-Plugin geladen ist).
`api.runtime.channel.mentions` ist die gemeinsame Oberfläche für Richtlinien zu eingehenden Erwähnungen für gebündelte Kanal-Plugins, die Runtime-Injection verwenden:
`api.runtime.channel.mentions` ist die gemeinsame Oberfläche für Richtlinien zu eingehenden Erwähnungen für gebündelte Kanal-Plugins, die Laufzeit-Injektion verwenden:
```typescript
const mentionMatch = api.runtime.channel.mentions.matchesMentionWithExplicit(text, {
@ -484,14 +485,14 @@ Provider- und Kanal-Ausführungspfade müssen den aktiven Laufzeit-Konfiguration
- `implicitMentionKindWhen`
- `resolveInboundMentionDecision`
`api.runtime.channel.mentions` legt die älteren Kompatibilitätshelfer `resolveMentionGating*` absichtlich nicht offen. Bevorzugen Sie den normalisierten `{ facts, policy }`-Pfad.
`api.runtime.channel.mentions` stellt die älteren Kompatibilitäts-Helfer `resolveMentionGating*` absichtlich nicht bereit. Bevorzugen Sie den normalisierten Pfad `{ facts, policy }`.
</Accordion>
</AccordionGroup>
## Runtime-Referenzen speichern
## Speichern von Laufzeitreferenzen
Verwenden Sie `createPluginRuntimeStore`, um die Runtime-Referenz zur Verwendung außerhalb des `register`-Callbacks zu speichern:
Verwenden Sie `createPluginRuntimeStore`, um die Laufzeitreferenz für die Verwendung außerhalb des `register`-Callbacks zu speichern:
<Steps>
<Step title="Create the store">
@ -532,10 +533,10 @@ Verwenden Sie `createPluginRuntimeStore`, um die Runtime-Referenz zur Verwendung
</Steps>
<Note>
Bevorzugen Sie `pluginId` für die Runtime-Store-Identität. Die Low-Level-Form `key` ist für seltene Fälle gedacht, in denen ein Plugin absichtlich mehr als einen Runtime-Slot benötigt.
Bevorzugen Sie `pluginId` für die Identität des Laufzeitspeichers. Die Low-Level-Form `key` ist für seltene Fälle gedacht, in denen ein Plugin absichtlich mehr als einen Laufzeit-Slot benötigt.
</Note>
## Weitere Top-Level-Felder von `api`
## Weitere Felder auf oberster Ebene von `api`
Neben `api.runtime` stellt das API-Objekt außerdem Folgendes bereit:
@ -546,7 +547,7 @@ Neben `api.runtime` stellt das API-Objekt außerdem Folgendes bereit:
Anzeigename des Plugins.
</ParamField>
<ParamField path="api.config" type="OpenClawConfig">
Aktueller Konfigurations-Snapshot (aktiver In-Memory-Runtime-Snapshot, sofern verfügbar).
Aktueller Konfigurations-Snapshot (aktiver In-Memory-Laufzeit-Snapshot, sofern verfügbar).
</ParamField>
<ParamField path="api.pluginConfig" type="Record<string, unknown>">
Plugin-spezifische Konfiguration aus `plugins.entries.<id>.config`.
@ -555,14 +556,14 @@ Neben `api.runtime` stellt das API-Objekt außerdem Folgendes bereit:
Bereichsbezogener Logger (`debug`, `info`, `warn`, `error`).
</ParamField>
<ParamField path="api.registrationMode" type="PluginRegistrationMode">
Aktueller Lademodus; `"setup-runtime"` ist das leichtgewichtige Start-/Einrichtungsfenster vor dem vollständigen Entry.
Aktueller Lademodus; `"setup-runtime"` ist das leichtgewichtige Start-/Einrichtungsfenster vor dem vollständigen Einstieg.
</ParamField>
<ParamField path="api.resolvePath(input)" type="(string) => string">
Löst einen Pfad relativ zum Plugin-Stammverzeichnis auf.
</ParamField>
## Verwandt
## Verwandte Themen
- [Plugin-Interna](/de/plugins/architecture) — Fähigkeitsmodell und Registry
- [SDK-Entry-Points](/de/plugins/sdk-entrypoints) — Optionen für `definePluginEntry`
- [SDK-Überblick](/de/plugins/sdk-overview) — Subpfad-Referenz
- [Plugin-Interna](/de/plugins/architecture) — Capability-Modell und Registry
- [SDK-Einstiegspunkte](/de/plugins/sdk-entrypoints) — Optionen für `definePluginEntry`
- [SDK-Übersicht](/de/plugins/sdk-overview) — Subpfadreferenz

View File

@ -1,38 +1,37 @@
---
read_when:
- Fehlersuche dazu, warum ein Agent auf eine bestimmte Weise geantwortet hat, fehlgeschlagen ist oder Werkzeuge aufgerufen hat
- Fehlersuche dazu, warum ein Agent geantwortet hat, fehlgeschlagen ist oder Werkzeuge auf eine bestimmte Weise aufgerufen hat
- Exportieren eines Support-Bundles für eine OpenClaw-Sitzung
- Untersuchen von Prompt-Kontext, Tool-Aufrufen, Laufzeitfehlern oder Nutzungsmetadaten
- Trajektorienaufzeichnung deaktivieren oder verlagern
summary: Geschwärzte Trajektorien-Bundles zum Debuggen einer OpenClaw-Agentensitzung exportieren
title: Trajektorienpakete
- Deaktivieren oder Verlagern der Trajektorienerfassung
summary: Geschwärzte Trajektorienpakete zur Fehlerbehebung einer OpenClaw-Agentensitzung exportieren
title: Trajektorienbündel
x-i18n:
generated_at: "2026-04-30T07:20:16Z"
generated_at: "2026-05-04T09:37:15Z"
model: gpt-5.5
provider: openai
source_hash: 8dad01b3662d5e75b7626eb7ed3c3ac2dce4e3a7db2ba5952d7086c721151d1f
source_hash: b8b1256e52d27185a48ceddaf7937b4f37ad6d57d075fea0d0b6d3abb871f1d8
source_path: tools/trajectory.md
workflow: 16
---
Trajectory-Erfassung ist OpenClaws sitzungsbezogener Flugschreiber. Sie zeichnet eine
strukturierte Zeitleiste für jeden Agentenlauf auf, anschließend verpackt `/export-trajectory` die
aktuelle Sitzung in ein redigiertes Support-Paket.
Trajectory Capture ist der sitzungsbezogene Flugschreiber von OpenClaw. Sie zeichnet eine
strukturierte Zeitleiste für jeden Agentenlauf auf, anschließend paketiert `/export-trajectory` die
aktuelle Sitzung in ein redigiertes Support-Bundle.
Verwenden Sie sie, wenn Sie Fragen wie diese beantworten müssen:
- Welcher Prompt, System-Prompt und welche Tools wurden an das Modell gesendet?
- Welche Transkript-Nachrichten und Tool-Aufrufe führten zu dieser Antwort?
- Ist der Lauf abgelaufen, abgebrochen, komprimiert worden oder auf einen Provider-Fehler gestoßen?
- Welche Transkriptnachrichten und Tool-Aufrufe führten zu dieser Antwort?
- Hat der Lauf ein Timeout erreicht, wurde er abgebrochen, kompaktifiziert oder ist ein Provider-Fehler aufgetreten?
- Welches Modell, welche Plugins, Skills und Laufzeiteinstellungen waren aktiv?
- Welche Nutzungs- und Prompt-Cache-Metadaten hat der Provider zurückgegeben?
Wenn Sie einen breiten Support-Bericht für ein Live-Gateway-Problem einreichen, beginnen Sie mit
Wenn Sie einen umfassenden Support-Bericht für ein Live-Gateway-Problem einreichen, beginnen Sie mit
[`/diagnostics`](/de/gateway/diagnostics#chat-command). Diagnostics sammelt das
bereinigte Gateway-Paket und kann bei OpenAI Codex Harness-Sitzungen nach
bereinigte Gateway-Bundle und kann bei OpenAI-Codex-Harness-Sitzungen nach
Genehmigung auch Codex-Feedback an OpenAI-Server senden. Verwenden Sie `/export-trajectory`, wenn
Sie ausdrücklich die detaillierte sitzungsbezogene Zeitleiste für Prompts, Tools und Transkript
benötigen.
Sie speziell die detaillierte sitzungsbezogene Zeitleiste für Prompts, Tools und Transkript benötigen.
## Schnellstart
@ -48,7 +47,7 @@ Alias:
/trajectory
```
OpenClaw schreibt das Paket unterhalb des Arbeitsbereichs:
OpenClaw schreibt das Bundle unterhalb des Arbeitsbereichs:
```text
.openclaw/trajectory-exports/openclaw-trajectory-<session>-<timestamp>/
@ -63,11 +62,11 @@ Sie können einen relativen Namen für das Ausgabeverzeichnis wählen:
Der benutzerdefinierte Pfad wird innerhalb von `.openclaw/trajectory-exports/` aufgelöst. Absolute
Pfade und `~`-Pfade werden abgelehnt.
Trajectory-Pakete können Prompts, Modellnachrichten, Tool-Schemata, Tool-Ergebnisse,
Trajectory-Bundles können Prompts, Modellnachrichten, Tool-Schemata, Tool-Ergebnisse,
Laufzeitereignisse und lokale Pfade enthalten. Der Chat-Slash-Befehl läuft daher
jedes Mal über die Exec-Genehmigung. Genehmigen Sie den Export einmal, wenn Sie
das Paket erstellen möchten; verwenden Sie nicht allow-all. In Gruppenchats sendet OpenClaw die
Genehmigungsaufforderung und das Exportergebnis privat an den Owner, statt die
jedes Mal über die Exec-Genehmigung. Genehmigen Sie den Export einmal, wenn Sie das
Bundle erstellen möchten; verwenden Sie nicht „allow-all“. In Gruppenchats sendet OpenClaw die
Genehmigungsabfrage und das Exportergebnis privat an den Besitzer, statt die
Trajectory-Details zurück in den gemeinsamen Raum zu posten.
Für lokale Prüfung oder Support-Workflows können Sie den genehmigten Befehlspfad
@ -79,12 +78,12 @@ openclaw sessions export-trajectory --session-key "agent:main:telegram:direct:12
## Zugriff
Trajectory-Export ist ein Owner-Befehl. Der Absender muss die normalen
Befehlsautorisierungsprüfungen und Owner-Prüfungen für den Channel bestehen.
Trajectory-Export ist ein Besitzerbefehl. Der Absender muss die normalen
Autorisierungsprüfungen für Befehle und die Besitzerprüfungen für den Kanal bestehen.
## Was aufgezeichnet wird
Trajectory-Erfassung ist für OpenClaw-Agentenläufe standardmäßig aktiviert.
Trajectory Capture ist für OpenClaw-Agentenläufe standardmäßig aktiviert.
Laufzeitereignisse umfassen:
@ -92,7 +91,7 @@ Laufzeitereignisse umfassen:
- `trace.metadata`
- `context.compiled`
- `prompt.submitted`
- `model.fallback_step`, einschließlich Quellmodell, nächstem Modell, Fehlergrund/-detail, Position in der Kette und ob der Fallback die Kette weitergeschaltet, erfolgreich abgeschlossen oder erschöpft hat
- `model.fallback_step`, einschließlich Quellmodell, nächstem Modell, Fehlergrund/-details, Kettenposition und ob der Fallback die Kette fortgesetzt, erfolgreich abgeschlossen oder erschöpft hat
- `model.completed`
- `trace.artifacts`
- `session.ended`
@ -104,10 +103,10 @@ Transkriptereignisse werden außerdem aus dem aktiven Sitzungszweig rekonstruier
- Tool-Aufrufe
- Tool-Ergebnisse
- Compactions
- Modelländerungen
- Modellwechsel
- Labels und benutzerdefinierte Sitzungseinträge
Ereignisse werden als JSON Lines mit diesem Schema-Marker geschrieben:
Ereignisse werden als JSON Lines mit dieser Schemamarkierung geschrieben:
```json
{
@ -116,25 +115,25 @@ Ereignisse werden als JSON Lines mit diesem Schema-Marker geschrieben:
}
```
## Paketdateien
## Bundle-Dateien
Ein exportiertes Paket kann enthalten:
Ein exportiertes Bundle kann Folgendes enthalten:
| Datei | Inhalte |
| --------------------- | ---------------------------------------------------------------------------------------------------- |
| `manifest.json` | Paketschema, Quelldateien, Ereigniszahlen und Liste generierter Dateien |
| `events.jsonl` | Geordnete Laufzeit- und Transkript-Zeitleiste |
| `session-branch.json` | Redigierter aktiver Transkriptzweig und Sitzungsheader |
| `metadata.json` | OpenClaw-Version, OS/Laufzeit, Modell, Konfigurations-Snapshot, Plugins, Skills und Prompt-Metadaten |
| `artifacts.json` | Endstatus, Fehler, Nutzung, Prompt-Cache, Compaction-Anzahl, Assistententext und Tool-Metadaten |
| `prompts.json` | Eingereichte Prompts und ausgewählte Details zum Aufbau von Prompts |
| `system-prompt.txt` | Zuletzt kompilierter System-Prompt, sofern erfasst |
| `tools.json` | An das Modell gesendete Tool-Definitionen, sofern erfasst |
| Datei | Inhalte |
| --------------------- | ------------------------------------------------------------------------------------------------ |
| `manifest.json` | Bundle-Schema, Quelldateien, Ereigniszahlen und Liste generierter Dateien |
| `events.jsonl` | Geordnete Laufzeit- und Transkriptzeitleiste |
| `session-branch.json` | Redigierter aktiver Transkriptzweig und Sitzungsheader |
| `metadata.json` | OpenClaw-Version, Betriebssystem/Laufzeit, Modell, Konfigurations-Snapshot, Plugins, Skills und Prompt-Metadaten |
| `artifacts.json` | Endstatus, Fehler, Nutzung, Prompt-Cache, Compaction-Anzahl, Assistententext und Tool-Metadaten |
| `prompts.json` | Eingereichte Prompts und ausgewählte Details zum Prompt-Aufbau |
| `system-prompt.txt` | Zuletzt kompilierter System-Prompt, sofern erfasst |
| `tools.json` | An das Modell gesendete Tool-Definitionen, sofern erfasst |
`manifest.json` listet die in diesem Paket vorhandenen Dateien auf. Einige Dateien werden ausgelassen,
`manifest.json` listet die in diesem Bundle vorhandenen Dateien auf. Einige Dateien werden ausgelassen,
wenn die Sitzung die entsprechenden Laufzeitdaten nicht erfasst hat.
## Erfassungsort
## Speicherort der Erfassung
Standardmäßig werden Laufzeit-Trajectory-Ereignisse neben die Sitzungsdatei geschrieben:
@ -142,7 +141,7 @@ Standardmäßig werden Laufzeit-Trajectory-Ereignisse neben die Sitzungsdatei ge
<session>.trajectory.jsonl
```
OpenClaw schreibt außerdem eine Best-Effort-Zeigerdatei neben die Sitzung:
OpenClaw schreibt außerdem nach bestem Aufwand eine Pointer-Datei neben die Sitzung:
```text
<session>.trajectory-path.json
@ -155,12 +154,12 @@ dedizierten Verzeichnis zu speichern:
export OPENCLAW_TRAJECTORY_DIR=/var/lib/openclaw/trajectories
```
Wenn diese Variable gesetzt ist, schreibt OpenClaw pro Sitzungs-ID eine JSONL-Datei in dieses
Wenn diese Variable gesetzt ist, schreibt OpenClaw eine JSONL-Datei pro Sitzungs-ID in dieses
Verzeichnis.
Die Sitzungswartung entfernt Trajectory-Sidecars, wenn der zugehörige Sitzungseintrag
bereinigt, begrenzt oder durch das Festplattenbudget für Sitzungen verdrängt wird. Laufzeitdateien außerhalb
des Sitzungsverzeichnisses werden nur entfernt, wenn das Ziel des Zeigers weiterhin nachweist, dass es
Die Sitzungswartung entfernt Trajectory-Sidecars, wenn ihr zugehöriger Sitzungseintrag
durch das Festplattenbudget für Sitzungen bereinigt, begrenzt oder verdrängt wird. Laufzeitdateien außerhalb
des Sitzungsverzeichnisses werden nur entfernt, wenn das Pointer-Ziel weiterhin nachweist, dass es
zu dieser Sitzung gehört.
## Erfassung deaktivieren
@ -171,38 +170,38 @@ Setzen Sie `OPENCLAW_TRAJECTORY=0`, bevor Sie OpenClaw starten:
export OPENCLAW_TRAJECTORY=0
```
Dadurch wird die Laufzeit-Trajectory-Erfassung deaktiviert. `/export-trajectory` kann weiterhin
Dies deaktiviert die Laufzeit-Trajectory-Erfassung. `/export-trajectory` kann weiterhin
den Transkriptzweig exportieren, aber reine Laufzeitdateien wie kompilierter Kontext,
Provider-Artefakte und Prompt-Metadaten können fehlen.
## Datenschutz und Grenzen
Trajectory-Pakete sind für Support und Debugging vorgesehen, nicht für öffentliche Veröffentlichung.
Trajectory-Bundles sind für Support und Debugging konzipiert, nicht für öffentliche Veröffentlichung.
OpenClaw redigiert sensible Werte, bevor Exportdateien geschrieben werden:
- Anmeldedaten und bekannte secret-ähnliche Payload-Felder
- Zugangsdaten und bekannte geheimnisähnliche Payload-Felder
- Bilddaten
- lokale Zustandspfade
- lokale Statuspfade
- Arbeitsbereichspfade, ersetzt durch `$WORKSPACE_DIR`
- Home-Verzeichnispfade, sofern erkannt
Der Exporter begrenzt außerdem die Eingabegröße:
- Laufzeit-Sidecar-Dateien: 50 MiB
- Laufzeit-Sidecar-Dateien: Live-Erfassung stoppt bei 10 MiB und zeichnet ein Kürzungsereignis auf, wenn Speicherplatz verbleibt; der Export akzeptiert vorhandene Laufzeit-Sidecars bis 50 MiB
- Sitzungsdateien: 50 MiB
- Laufzeitereignisse: 200.000
- insgesamt exportierte Ereignisse: 250.000
- einzelne Laufzeitereigniszeilen werden oberhalb von 256 KiB gekürzt
Prüfen Sie Pakete, bevor Sie sie außerhalb Ihres Teams teilen. Redigierung erfolgt nach Best-Effort
und kann nicht jedes anwendungsspezifische Secret kennen.
Prüfen Sie Bundles, bevor Sie sie außerhalb Ihres Teams teilen. Redigierung erfolgt nach bestem Aufwand
und kann nicht jedes anwendungsspezifische Geheimnis kennen.
## Fehlerbehebung
Wenn der Export keine Laufzeitereignisse enthält:
- bestätigen Sie, dass OpenClaw ohne `OPENCLAW_TRAJECTORY=0` gestartet wurde
- prüfen Sie, ob `OPENCLAW_TRAJECTORY_DIR` auf ein beschreibbares Verzeichnis zeigt
- prüfen Sie, ob `OPENCLAW_TRAJECTORY_DIR` auf ein beschreibbares Verzeichnis verweist
- führen Sie eine weitere Nachricht in der Sitzung aus und exportieren Sie dann erneut
- prüfen Sie `manifest.json` auf `runtimeEventCount`
@ -215,7 +214,7 @@ Wenn der Befehl den Ausgabepfad ablehnt:
Wenn der Export mit einem Größenfehler fehlschlägt, hat die Sitzung oder das Sidecar die
Sicherheitsgrenzen für den Export überschritten. Starten Sie eine neue Sitzung oder exportieren Sie eine kleinere Reproduktion.
## Verwandte Themen
## Verwandt
- [Diffs](/de/tools/diffs)
- [Sitzungsverwaltung](/de/concepts/session)

View File

@ -3,23 +3,23 @@ read_when:
- Sie möchten das Gateway über einen Browser bedienen
- Sie möchten Tailnet-Zugriff ohne SSH-Tunnel
sidebarTitle: Control UI
summary: Browserbasierte Steuerungs-UI für den Gateway (Chat, Nodes, Konfiguration)
summary: Browserbasierte Steuerungs-UI für das Gateway (Chat, Nodes, Konfiguration)
title: Steuerungsoberfläche
x-i18n:
generated_at: "2026-05-04T06:44:37Z"
generated_at: "2026-05-04T09:37:56Z"
model: gpt-5.5
provider: openai
source_hash: 07fbbe1c7fec5f67a04a231e02bdf0f7d16be9c5fe188915674d71fcd69002a5
source_hash: 4b68b5203b369de6a3354a7e7442ee38ee790875b2d7054b0c8ec997098fd9de
source_path: web/control-ui.md
workflow: 16
---
The Control UI ist eine kleine **Vite + Lit**-Single-Page-App, die vom Gateway bereitgestellt wird:
Die Control UI ist eine kleine **Vite + Lit** Single-Page-App, die vom Gateway bereitgestellt wird:
- Standard: `http://<host>:18789/`
- optionales Präfix: `gateway.controlUi.basePath` festlegen (z. B. `/openclaw`)
- optionales Präfix: Legen Sie `gateway.controlUi.basePath` fest (z. B. `/openclaw`)
Sie kommuniziert **direkt mit dem Gateway WebSocket** auf demselben Port.
Sie kommuniziert **direkt mit dem Gateway-WebSocket** auf demselben Port.
## Schnell öffnen (lokal)
@ -29,20 +29,20 @@ Wenn das Gateway auf demselben Computer läuft, öffnen Sie:
Wenn die Seite nicht geladen wird, starten Sie zuerst das Gateway: `openclaw gateway`.
Die Authentifizierung wird während des WebSocket-Handshakes bereitgestellt über:
Auth wird während des WebSocket-Handshakes bereitgestellt über:
- `connect.params.auth.token`
- `connect.params.auth.password`
- Tailscale Serve-Identitätsheader, wenn `gateway.auth.allowTailscale: true`
- Tailscale-Serve-Identitätsheader, wenn `gateway.auth.allowTailscale: true`
- Trusted-Proxy-Identitätsheader, wenn `gateway.auth.mode: "trusted-proxy"`
Das Einstellungspanel des Dashboards speichert ein Token für die aktuelle Browser-Tab-Sitzung und die ausgewählte Gateway-URL; Passwörter werden nicht persistiert. Das Onboarding erzeugt normalerweise beim ersten Verbindungsaufbau ein Gateway-Token für die Shared-Secret-Authentifizierung, aber Passwortauthentifizierung funktioniert ebenfalls, wenn `gateway.auth.mode` `"password"` ist.
Das Dashboard-Einstellungsfenster speichert ein Token für die aktuelle Browser-Tab-Sitzung und die ausgewählte Gateway-URL; Passwörter werden nicht persistent gespeichert. Das Onboarding erzeugt beim ersten Verbindungsaufbau normalerweise ein Gateway-Token für Shared-Secret-Auth, aber Passwort-Auth funktioniert ebenfalls, wenn `gateway.auth.mode` `"password"` ist.
## Gerätekopplung (erste Verbindung)
Wenn Sie sich von einem neuen Browser oder Gerät mit der Control UI verbinden, verlangt das Gateway normalerweise eine **einmalige Kopplungsgenehmigung**. Dies ist eine Sicherheitsmaßnahme, um unbefugten Zugriff zu verhindern.
Wenn Sie von einem neuen Browser oder Gerät aus eine Verbindung zur Control UI herstellen, verlangt das Gateway normalerweise eine **einmalige Kopplungsfreigabe**. Dies ist eine Sicherheitsmaßnahme, um unbefugten Zugriff zu verhindern.
**Was Sie sehen:** „disconnected (1008): pairing required“
**Was Sie sehen werden:** „disconnected (1008): pairing required“
<Steps>
<Step title="Ausstehende Anfragen auflisten">
@ -50,103 +50,104 @@ Wenn Sie sich von einem neuen Browser oder Gerät mit der Control UI verbinden,
openclaw devices list
```
</Step>
<Step title="Nach Anfrage-ID genehmigen">
<Step title="Per Anfrage-ID genehmigen">
```bash
openclaw devices approve <requestId>
```
</Step>
</Steps>
Wenn der Browser die Kopplung mit geänderten Authentifizierungsdetails (Rolle/Scopes/öffentlicher Schlüssel) erneut versucht, wird die vorherige ausstehende Anfrage ersetzt und eine neue `requestId` erstellt. Führen Sie vor der Genehmigung erneut `openclaw devices list` aus.
Wenn der Browser die Kopplung mit geänderten Auth-Details (Rolle/Scopes/öffentlicher Schlüssel) erneut versucht, wird die vorherige ausstehende Anfrage ersetzt und eine neue `requestId` erstellt. Führen Sie vor der Genehmigung erneut `openclaw devices list` aus.
Wenn der Browser bereits gekoppelt ist und Sie ihn von Lesezugriff auf Schreib-/Adminzugriff ändern, wird dies als Genehmigungsupgrade behandelt, nicht als stiller erneuter Verbindungsaufbau. OpenClaw hält die alte Genehmigung aktiv, blockiert die umfassendere erneute Verbindung und fordert Sie auf, den neuen Scope-Satz ausdrücklich zu genehmigen.
Wenn der Browser bereits gekoppelt ist und Sie ihn von Lesezugriff auf Schreib-/Admin-Zugriff ändern, wird dies als Genehmigungs-Upgrade behandelt, nicht als stille erneute Verbindung. OpenClaw hält die alte Genehmigung aktiv, blockiert die weitergehende erneute Verbindung und fordert Sie auf, den neuen Scope-Satz ausdrücklich zu genehmigen.
Nach der Genehmigung wird das Gerät gespeichert und erfordert keine erneute Genehmigung, es sei denn, Sie widerrufen es mit `openclaw devices revoke --device <id> --role <role>`. Siehe [Devices CLI](/de/cli/devices) für Token-Rotation und Widerruf.
Nach der Genehmigung wird das Gerät gespeichert und erfordert keine erneute Genehmigung, sofern Sie es nicht mit `openclaw devices revoke --device <id> --role <role>` widerrufen. Siehe [Devices CLI](/de/cli/devices) für Token-Rotation und Widerruf.
<Note>
- Direkte local loopback-Browserverbindungen (`127.0.0.1` / `localhost`) werden automatisch genehmigt.
- Tailscale Serve kann den Kopplungs-Roundtrip für Control-UI-Operatorsitzungen überspringen, wenn `gateway.auth.allowTailscale: true` gilt, die Tailscale-Identität verifiziert wird und der Browser seine Geräteidentität vorlegt.
- Direkte Tailnet-Bindings, LAN-Browserverbindungen und Browserprofile ohne Geräteidentität erfordern weiterhin eine ausdrückliche Genehmigung.
- Jedes Browserprofil erzeugt eine eindeutige Geräte-ID, daher erfordert ein Browserwechsel oder das Löschen von Browserdaten eine erneute Kopplung.
- Tailscale Serve kann die Kopplungsrunde für Operator-Sitzungen der Control UI überspringen, wenn `gateway.auth.allowTailscale: true`, die Tailscale-Identität verifiziert wird und der Browser seine Geräteidentität bereitstellt.
- Direkte Tailnet-Bindungen, LAN-Browserverbindungen und Browserprofile ohne Geräteidentität erfordern weiterhin eine ausdrückliche Genehmigung.
- Jedes Browserprofil erzeugt eine eindeutige Geräte-ID. Wenn Sie also den Browser wechseln oder Browserdaten löschen, ist eine erneute Kopplung erforderlich.
</Note>
## Persönliche Identität (browserlokal)
Die Control UI unterstützt eine persönliche Identität pro Browser (Anzeigename und Avatar), die ausgehenden Nachrichten zur Zuordnung in gemeinsam genutzten Sitzungen angehängt wird. Sie liegt im Browserspeicher, ist auf das aktuelle Browserprofil beschränkt und wird weder mit anderen Geräten synchronisiert noch serverseitig über die normalen Autorenschaftsmetadaten des Transkripts für Nachrichten hinaus persistiert, die Sie tatsächlich senden. Das Löschen von Websitedaten oder ein Browserwechsel setzt sie auf leer zurück.
Die Control UI unterstützt eine browserbezogene persönliche Identität (Anzeigename und Avatar), die ausgehenden Nachrichten zur Zuordnung in gemeinsamen Sitzungen angehängt wird. Sie liegt im Browserspeicher, ist auf das aktuelle Browserprofil beschränkt und wird weder mit anderen Geräten synchronisiert noch serverseitig über die normalen Metadaten zur Autorenschaft im Transcript der tatsächlich gesendeten Nachrichten hinaus gespeichert. Das Löschen von Websitedaten oder der Wechsel des Browsers setzt sie auf leer zurück.
Dasselbe browserlokale Muster gilt für die Avatar-Überschreibung des Assistenten. Hochgeladene Assistenten-Avatare überlagern die vom Gateway aufgelöste Identität nur im lokalen Browser und durchlaufen niemals `config.patch`. Das gemeinsame Konfigurationsfeld `ui.assistant.avatar` bleibt für Nicht-UI-Clients verfügbar, die das Feld direkt schreiben (z. B. skriptgesteuerte Gateways oder benutzerdefinierte Dashboards).
Dasselbe browserlokale Muster gilt für die Überschreibung des Assistenten-Avatars. Hochgeladene Assistenten-Avatare überlagern die vom Gateway aufgelöste Identität nur im lokalen Browser und werden niemals über `config.patch` zurückgesendet. Das gemeinsame Konfigurationsfeld `ui.assistant.avatar` bleibt für Nicht-UI-Clients verfügbar, die das Feld direkt schreiben (z. B. geskriptete Gateways oder benutzerdefinierte Dashboards).
## Laufzeit-Konfigurationsendpunkt
Die Control UI ruft ihre Laufzeiteinstellungen von `/__openclaw/control-ui-config.json` ab. Dieser Endpunkt ist durch dieselbe Gateway-Authentifizierung geschützt wie der restliche HTTP-Bereich: Nicht authentifizierte Browser können ihn nicht abrufen, und ein erfolgreicher Abruf erfordert entweder ein bereits gültiges Gateway-Token/-Passwort, eine Tailscale Serve-Identität oder eine Trusted-Proxy-Identität.
Die Control UI ruft ihre Laufzeiteinstellungen von `/__openclaw/control-ui-config.json` ab. Dieser Endpunkt wird durch dieselbe Gateway-Auth geschützt wie der Rest der HTTP-Oberfläche: Nicht authentifizierte Browser können ihn nicht abrufen, und ein erfolgreicher Abruf erfordert entweder ein bereits gültiges Gateway-Token/Passwort, eine Tailscale-Serve-Identität oder eine Trusted-Proxy-Identität.
## Sprachunterstützung
Die Control UI kann sich beim ersten Laden anhand Ihrer Browser-Locale lokalisieren. Um dies später zu überschreiben, öffnen Sie **Übersicht -> Gateway-Zugriff -> Sprache**. Die Locale-Auswahl befindet sich in der Gateway-Zugriff-Karte, nicht unter Darstellung.
Die Control UI kann sich beim ersten Laden anhand Ihrer Browser-Locale lokalisieren. Um dies später zu überschreiben, öffnen Sie **Übersicht -> Gateway-Zugriff -> Sprache**. Die Locale-Auswahl befindet sich in der Karte „Gateway-Zugriff“, nicht unter „Darstellung“.
- Unterstützte Locales: `en`, `zh-CN`, `zh-TW`, `pt-BR`, `de`, `es`, `ja-JP`, `ko`, `fr`, `ar`, `it`, `tr`, `uk`, `id`, `pl`, `th`, `vi`, `nl`, `fa`
- Nicht-englische Übersetzungen werden im Browser lazy-loaded.
- Nicht englische Übersetzungen werden im Browser lazy-loaded.
- Die ausgewählte Locale wird im Browserspeicher gespeichert und bei zukünftigen Besuchen wiederverwendet.
- Fehlende Übersetzungsschlüssel fallen auf Englisch zurück.
Dokumentationsübersetzungen werden für denselben nicht-englischen Locale-Satz generiert, aber die integrierte Mintlify-Sprachauswahl der Dokumentationswebsite ist auf die Locale-Codes beschränkt, die Mintlify akzeptiert. Thailändische (`th`) und persische (`fa`) Dokumentation wird weiterhin im Publish-Repo generiert; sie erscheint möglicherweise erst in dieser Auswahl, wenn Mintlify diese Codes unterstützt.
Docs-Übersetzungen werden für denselben nicht englischen Locale-Satz generiert, aber die integrierte Mintlify-Sprachauswahl der Docs-Site ist auf die Locale-Codes beschränkt, die Mintlify akzeptiert. Thailändische (`th`) und persische (`fa`) Docs werden weiterhin im Publish-Repo generiert; sie werden in dieser Auswahl möglicherweise erst angezeigt, wenn Mintlify diese Codes unterstützt.
## Darstellungsthemes
Das Darstellungspanel enthält die integrierten Themes Claw, Knot und Dash sowie einen browserlokalen tweakcn-Importslot. Um ein Theme zu importieren, öffnen Sie den [tweakcn editor](https://tweakcn.com/editor/theme), wählen oder erstellen Sie ein Theme, klicken Sie auf **Teilen** und fügen Sie den kopierten Theme-Link in Darstellung ein. Der Importer akzeptiert außerdem `https://tweakcn.com/r/themes/<id>`-Registry-URLs, Editor-URLs wie `https://tweakcn.com/editor/theme?theme=amethyst-haze`, relative `/themes/<id>`-Pfade, rohe Theme-IDs und Standard-Theme-Namen wie `amethyst-haze`.
Das Darstellungsfenster behält die integrierten Themes Claw, Knot und Dash sowie einen browserlokalen tweakcn-Import-Slot bei. Um ein Theme zu importieren, öffnen Sie den [tweakcn editor](https://tweakcn.com/editor/theme), wählen oder erstellen Sie ein Theme, klicken Sie auf **Teilen** und fügen Sie den kopierten Theme-Link in Darstellung ein. Der Importer akzeptiert außerdem `https://tweakcn.com/r/themes/<id>`-Registry-URLs, Editor-URLs wie `https://tweakcn.com/editor/theme?theme=amethyst-haze`, relative `/themes/<id>`-Pfade, rohe Theme-IDs und Standard-Theme-Namen wie `amethyst-haze`.
Importierte Themes werden nur im aktuellen Browserprofil gespeichert. Sie werden nicht in die Gateway-Konfiguration geschrieben und nicht zwischen Geräten synchronisiert. Das Ersetzen des importierten Themes aktualisiert den einen lokalen Slot; das Löschen wechselt das aktive Theme zurück zu Claw, wenn das importierte Theme ausgewählt war.
## Was sie kann (heute)
## Was sie tun kann (heute)
<AccordionGroup>
<Accordion title="Chat und Talk">
<Accordion title="Chat und Sprechen">
- Chatten Sie mit dem Modell über Gateway WS (`chat.history`, `chat.send`, `chat.abort`, `chat.inject`).
- Sprechen Sie über Browser-Echtzeitsitzungen. OpenAI verwendet direktes WebRTC, Google Live verwendet ein eingeschränktes einmalig nutzbares Browser-Token über WebSocket, und rein backendseitige Echtzeit-Sprach-Plugins verwenden den Gateway-Relay-Transport. Das Relay hält Provider-Anmeldedaten auf dem Gateway, während der Browser Mikrofon-PCM über `talk.realtime.relay*`-RPCs streamt und `openclaw_agent_consult`-Toolaufrufe über `chat.send` für das größere konfigurierte OpenClaw-Modell zurücksendet.
- Streamen Sie Toolaufrufe und Live-Tool-Ausgabekarten im Chat (Agentenereignisse).
- Sprechen Sie über Browser-Echtzeitsitzungen. OpenAI verwendet direktes WebRTC, Google Live verwendet ein eingeschränktes einmaliges Browser-Token über WebSocket, und rein backendseitige Echtzeit-Sprach-Plugins verwenden den Gateway-Relay-Transport. Das Relay hält Provider-Anmeldedaten auf dem Gateway, während der Browser Mikrofon-PCM über `talk.realtime.relay*`-RPCs streamt und `openclaw_agent_consult`-Toolaufrufe über `chat.send` an das größere konfigurierte OpenClaw-Modell zurücksendet.
- Streamen Sie Toolaufrufe und Live-Tool-Ausgabekarten im Chat (Agent-Ereignisse).
</Accordion>
<Accordion title="Kanäle, Instanzen, Sitzungen, Dreams">
- Kanäle: Status integrierter sowie gebündelter/externer Plugin-Kanäle, QR-Anmeldung und kanalbezogene Konfiguration (`channels.status`, `web.login.*`, `config.patch`).
<Accordion title="Kanäle, Instanzen, Sitzungen, Träume">
- Kanäle: integrierte sowie gebündelte/externe Plugin-Kanäle mit Status, QR-Anmeldung und kanalbezogener Konfiguration (`channels.status`, `web.login.*`, `config.patch`).
- Instanzen: Präsenzliste und Aktualisierung (`system-presence`).
- Sitzungen: Liste und sitzungsbezogene Überschreibungen für Modell/Thinking/Fast/Verbose/Trace/Reasoning (`sessions.list`, `sessions.patch`).
- Dreams: Dreaming-Status, Aktivieren-/Deaktivieren-Schalter und Dream-Diary-Leser (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`).
- Sitzungen: Liste sowie sitzungsbezogene Überschreibungen für Modell/Thinking/Fast/Verbose/Trace/Reasoning (`sessions.list`, `sessions.patch`).
- Träume: Dreaming-Status, Schalter zum Aktivieren/Deaktivieren und Dream-Diary-Reader (`doctor.memory.status`, `doctor.memory.dreamDiary`, `config.patch`).
</Accordion>
<Accordion title="Cron, Skills, Nodes, Exec-Genehmigungen">
- Cron-Jobs: Auflisten/Hinzufügen/Bearbeiten/Ausführen/Aktivieren/Deaktivieren und Ausführungshistorie (`cron.*`).
- Skills: Status, Aktivieren/Deaktivieren, Installieren, API-Schlüsselaktualisierungen (`skills.*`).
- Cron-Jobs: auflisten/hinzufügen/bearbeiten/ausführen/aktivieren/deaktivieren und Ausführungsverlauf (`cron.*`).
- Skills: Status, aktivieren/deaktivieren, installieren, API-Schlüssel aktualisieren (`skills.*`).
- Nodes: Liste und Caps (`node.list`).
- Exec-Genehmigungen: Gateway- oder Node-Allowlists und Ask-Policy für `exec host=gateway/node` bearbeiten (`exec.approvals.*`).
- Exec-Genehmigungen: Gateway- oder Node-Allowlisten sowie Ask-Policy für `exec host=gateway/node` bearbeiten (`exec.approvals.*`).
</Accordion>
<Accordion title="Konfiguration">
- `~/.openclaw/openclaw.json` anzeigen/bearbeiten (`config.get`, `config.set`).
- Anwenden und mit Validierung neu starten (`config.apply`) sowie die zuletzt aktive Sitzung aufwecken.
- Mit Validierung anwenden und neu starten (`config.apply`) und die zuletzt aktive Sitzung aufwecken.
- Schreibvorgänge enthalten einen Base-Hash-Schutz, um das Überschreiben gleichzeitiger Bearbeitungen zu verhindern.
- Schreibvorgänge (`config.set`/`config.apply`/`config.patch`) prüfen vorab die aktive SecretRef-Auflösung für Refs in der übermittelten Konfigurations-Payload; nicht auflösbare aktive übermittelte Refs werden vor dem Schreiben abgelehnt.
- Schema- und Formular-Rendering (`config.schema` / `config.schema.lookup`, einschließlich Feld-`title` / `description`, passender UI-Hinweise, unmittelbarer Kindzusammenfassungen, Dokumentationsmetadaten auf verschachtelten Objekt-/Wildcard-/Array-/Kompositions-Nodes sowie Plugin- und Kanalschemas, sofern verfügbar); der Raw-JSON-Editor ist nur verfügbar, wenn der Snapshot einen sicheren Raw-Roundtrip besitzt.
- Wenn ein Snapshot Raw-Text nicht sicher per Roundtrip verarbeiten kann, erzwingt die Control UI den Formularmodus und deaktiviert den Raw-Modus für diesen Snapshot.
- „Reset to saved“ im Raw-JSON-Editor bewahrt die raw-verfasste Form (Formatierung, Kommentare, `$include`-Layout), anstatt einen abgeflachten Snapshot neu zu rendern, sodass externe Bearbeitungen einen Reset überstehen, wenn der Snapshot sicher per Roundtrip verarbeitet werden kann.
- Strukturierte SecretRef-Objektwerte werden in Formular-Texteingaben schreibgeschützt gerendert, um versehentliche Objekt-zu-String-Beschädigung zu verhindern.
- Schreibvorgänge (`config.set`/`config.apply`/`config.patch`) prüfen vorab die Auflösung aktiver SecretRef-Einträge für Referenzen in der übermittelten Konfigurationsnutzlast; nicht aufgelöste aktive übermittelte Referenzen werden vor dem Schreiben abgelehnt.
- Schema- und Formular-Rendering (`config.schema` / `config.schema.lookup`, einschließlich Feld-`title` / `description`, passender UI-Hinweise, unmittelbarer Kindzusammenfassungen, Docs-Metadaten auf verschachtelten Objekt-/Wildcard-/Array-/Kompositionsknoten sowie Plugin- und Kanal-Schemas, sofern verfügbar); der Raw-JSON-Editor ist nur verfügbar, wenn der Snapshot einen sicheren Raw-Roundtrip hat.
- Wenn ein Snapshot Raw-Text nicht sicher im Roundtrip verarbeiten kann, erzwingt die Control UI den Formularmodus und deaktiviert den Raw-Modus für diesen Snapshot.
- „Auf gespeichert zurücksetzen“ im Raw-JSON-Editor bewahrt die roh verfasste Struktur (Formatierung, Kommentare, `$include`-Layout), statt einen abgeflachten Snapshot neu zu rendern, sodass externe Bearbeitungen einen Reset überstehen, wenn der Snapshot sicher im Roundtrip verarbeitet werden kann.
- Strukturierte SecretRef-Objektwerte werden in Formular-Texteingaben schreibgeschützt gerendert, um eine versehentliche Beschädigung von Objekt zu String zu verhindern.
</Accordion>
<Accordion title="Debug, Logs, Update">
- Debug: Status-/Health-/Modell-Snapshots, Ereignislog und manuelle RPC-Aufrufe (`status`, `health`, `models.list`).
- Debug: Status-/Health-/Modell-Snapshots, Ereignisprotokoll und manuelle RPC-Aufrufe (`status`, `health`, `models.list`).
- Das Ereignisprotokoll enthält Aktualisierungs-/RPC-Zeiten der Control UI sowie Einträge zur Browser-Reaktionsfähigkeit für lange Animationsframes oder lange Tasks, wenn der Browser diese PerformanceObserver-Eintragstypen bereitstellt.
- Logs: Live-Tail der Gateway-Dateilogs mit Filter/Export (`logs.tail`).
- Update: Paket-/Git-Update ausführen und neu starten (`update.run`) mit einem Neustartbericht; anschließend nach der erneuten Verbindung `update.status` pollen, um die laufende Gateway-Version zu verifizieren.
- Update: Paket-/Git-Update und Neustart ausführen (`update.run`) mit Neustartbericht, dann nach dem erneuten Verbinden `update.status` abfragen, um die laufende Gateway-Version zu verifizieren.
</Accordion>
<Accordion title="Hinweise zum Cron-Jobs-Panel">
- Für isolierte Jobs ist die Zustellung standardmäßig auf Zusammenfassung ankündigen gesetzt. Sie können auf keine umschalten, wenn Sie rein interne Ausführungen möchten.
<Accordion title="Hinweise zum Cron-Jobs-Fenster">
- Für isolierte Jobs ist die Zustellung standardmäßig auf Zusammenfassung ankündigen gesetzt. Sie können auf keine umstellen, wenn Sie rein interne Ausführungen wünschen.
- Kanal-/Zielfelder erscheinen, wenn Ankündigen ausgewählt ist.
- Der Webhook-Modus verwendet `delivery.mode = "webhook"` mit `delivery.to`, das auf eine gültige HTTP(S)-Webhook-URL gesetzt ist.
- Der Webhook-Modus verwendet `delivery.mode = "webhook"` mit `delivery.to`, gesetzt auf eine gültige HTTP(S)-Webhook-URL.
- Für Jobs in der Hauptsitzung sind die Zustellmodi Webhook und keine verfügbar.
- Erweiterte Bearbeitungssteuerungen umfassen Nach-Ausführung-löschen, Agentenüberschreibung löschen, exakte/gestaffelte Cron-Optionen, Agentenmodell-/Thinking-Überschreibungen und Best-Effort-Zustellungsschalter.
- Die Formularvalidierung erfolgt inline mit Fehlern auf Feldebene; ungültige Werte deaktivieren die Speichern-Schaltfläche, bis sie korrigiert sind.
- Setzen Sie `cron.webhookToken`, um ein dediziertes Bearer-Token zu senden; wenn es ausgelassen wird, wird der Webhook ohne Auth-Header gesendet.
- Veralteter Fallback: Gespeicherte Legacy-Jobs mit `notify: true` können weiterhin `cron.webhook` verwenden, bis sie migriert werden.
- Erweiterte Bearbeitungssteuerungen enthalten „nach Ausführung löschen“, Agent-Überschreibung löschen, Cron-Exact-/Stagger-Optionen, Agent-Modell-/Thinking-Überschreibungen und Best-Effort-Zustellungsschalter.
- Die Formularvalidierung erfolgt inline mit feldbezogenen Fehlern; ungültige Werte deaktivieren die Speichern-Schaltfläche, bis sie korrigiert sind.
- Setzen Sie `cron.webhookToken`, um ein dediziertes Bearer-Token zu senden; wenn es weggelassen wird, wird der Webhook ohne Auth-Header gesendet.
- Veralteter Fallback: Gespeicherte Legacy-Jobs mit `notify: true` können bis zur Migration weiterhin `cron.webhook` verwenden.
</Accordion>
</AccordionGroup>
@ -154,86 +155,89 @@ Importierte Themes werden nur im aktuellen Browserprofil gespeichert. Sie werden
## Chat-Verhalten
<AccordionGroup>
<Accordion title="Sende- und Verlaufssemantik">
- `chat.send` ist **nicht blockierend**: Es bestätigt sofort mit `{ runId, status: "started" }`, und die Antwort wird über `chat`-Ereignisse gestreamt.
- Chat-Uploads akzeptieren Bilder sowie Nicht-Video-Dateien. Bilder behalten den nativen Bildpfad; andere Dateien werden als verwaltete Medien gespeichert und im Verlauf als Anhangslinks angezeigt.
- Erneutes Senden mit demselben `idempotencyKey` gibt während der Ausführung `{ status: "in_flight" }` und nach Abschluss `{ status: "ok" }` zurück.
- `chat.history`-Antworten sind zur UI-Sicherheit größenbegrenzt. Wenn Transkripteinträge zu groß sind, kann das Gateway lange Textfelder kürzen, umfangreiche Metadatenblöcke auslassen und übergroße Nachrichten durch einen Platzhalter (`[chat.history omitted: message too large]`) ersetzen.
- Vom Assistenten generierte Bilder werden als verwaltete Medienreferenzen persistiert und über authentifizierte Gateway-Medien-URLs zurückgegeben, sodass erneutes Laden nicht davon abhängt, dass rohe Base64-Bild-Payloads in der Chat-Verlaufsantwort verbleiben.
- `chat.history` entfernt außerdem nur zur Anzeige gedachte Inline-Direktiv-Tags aus sichtbarem Assistententext (zum Beispiel `[[reply_to_*]]` und `[[audio_as_voice]]`), Nur-Text-XML-Payloads von Tool-Aufrufen (einschließlich `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` und gekürzte Tool-Aufrufblöcke) sowie durchgesickerte ASCII-/Vollbreiten-Modellsteuerungstoken und lässt Assistenteneinträge aus, deren gesamter sichtbarer Text nur aus dem exakten stummen Token `NO_REPLY` / `no_reply` besteht.
<Accordion title="Sende- und Verlaufsemantik">
- `chat.send` ist **nicht blockierend**: Es bestätigt sofort mit `{ runId, status: "started" }`, und die Antwort wird über `chat`-Events gestreamt.
- Chat-Uploads akzeptieren Bilder sowie Nicht-Video-Dateien. Bilder behalten den nativen Bildpfad; andere Dateien werden als verwaltete Medien gespeichert und im Verlauf als Anhanglinks angezeigt.
- Erneutes Senden mit demselben `idempotencyKey` gibt während der Ausführung `{ status: "in_flight" }` zurück und nach Abschluss `{ status: "ok" }`.
- `chat.history`-Antworten sind aus Gründen der UI-Sicherheit größenbegrenzt. Wenn Transkripteinträge zu groß sind, kann das Gateway lange Textfelder kürzen, umfangreiche Metadatenblöcke auslassen und übergroße Nachrichten durch einen Platzhalter ersetzen (`[chat.history omitted: message too large]`).
- Vom Assistenten generierte Bilder werden als verwaltete Medienreferenzen persistiert und über authentifizierte Gateway-Medien-URLs wieder bereitgestellt, sodass Reloads nicht davon abhängen, dass rohe base64-Bild-Payloads in der Chat-Verlaufsantwort verbleiben.
- `chat.history` entfernt außerdem nur zur Anzeige dienende Inline-Direktiv-Tags aus sichtbarem Assistententext (zum Beispiel `[[reply_to_*]]` und `[[audio_as_voice]]`), Klartext-XML-Payloads für Tool-Aufrufe (einschließlich `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>` und gekürzter Tool-Aufrufblöcke) sowie durchgesickerte ASCII-/Vollbreiten-Modellsteuerungstokens und lässt Assistenteneinträge aus, deren gesamter sichtbarer Text nur das exakte stille Token `NO_REPLY` / `no_reply` ist.
- Während eines aktiven Sendevorgangs und der abschließenden Verlaufsaktualisierung hält die Chat-Ansicht lokale optimistische Benutzer-/Assistentennachrichten sichtbar, wenn `chat.history` kurzzeitig einen älteren Snapshot zurückgibt; das kanonische Transkript ersetzt diese lokalen Nachrichten, sobald der Gateway-Verlauf aufgeholt hat.
- Live-`chat`-Ereignisse bilden den Zustellungsstatus ab, während `chat.history` aus dem dauerhaften Sitzungstranskript neu aufgebaut wird. Nach Tool-Final-Ereignissen lädt die Control UI den Verlauf neu und führt nur ein kleines optimistisches Ende zusammen; die Transkriptgrenze ist in [WebChat](/de/web/webchat) dokumentiert.
- `chat.inject` hängt eine Assistentennotiz an das Sitzungstranskript an und sendet ein `chat`-Ereignis für reine UI-Aktualisierungen (kein Agentenlauf, keine Kanalzustellung).
- Die Modell- und Denkmodus-Auswahlen im Chat-Header patchen die aktive Sitzung sofort über `sessions.patch`; sie sind persistente Sitzungsüberschreibungen, keine nur für einen Durchgang geltenden Sendeoptionen.
- Wenn Sie `/new` in der Control UI eingeben, wird dieselbe frische Dashboard-Sitzung wie bei Neuer Chat erstellt und aktiviert. Bei Eingabe von `/reset` bleibt die explizite In-Place-Zurücksetzung des Gateways für die aktuelle Sitzung erhalten.
- Die Chat-Modellauswahl fragt die konfigurierte Modellansicht des Gateways an. Wenn `agents.defaults.models` vorhanden ist, steuert diese Allowlist die Auswahl. Andernfalls zeigt die Auswahl explizite `models.providers.*.models`-Einträge sowie Provider mit nutzbarer Authentifizierung. Der vollständige Katalog bleibt über den Debug-`models.list`-RPC mit `view: "all"` verfügbar.
- Wenn aktuelle Gateway-Berichte zur Sitzungsnutzung hohen Kontextdruck anzeigen, zeigt der Chat-Composer-Bereich einen Kontext-Hinweis und bei empfohlenen Compaction-Stufen eine Compaction-Schaltfläche, die den normalen Pfad für Session-Compaction ausführt. Veraltete Token-Snapshots werden ausgeblendet, bis das Gateway wieder aktuelle Nutzung meldet.
- Live-`chat`-Events sind Zustellstatus, während `chat.history` aus dem dauerhaften Sitzungstranskript neu aufgebaut wird. Nach finalen Tool-Events lädt die Control UI den Verlauf neu und führt nur einen kleinen optimistischen Nachlauf zusammen; die Transkriptgrenze ist in [WebChat](/de/web/webchat) dokumentiert.
- `chat.inject` hängt eine Assistentennotiz an das Sitzungstranskript an und sendet ein `chat`-Event für reine UI-Aktualisierungen (kein Agent-Lauf, keine Kanalzustellung).
- Der Chat-Header zeigt den Agentenfilter vor der Sitzungsauswahl, und die Sitzungsauswahl ist auf den ausgewählten Agenten begrenzt. Beim Wechseln von Agenten werden nur Sitzungen angezeigt, die mit diesem Agenten verknüpft sind, und es wird auf die Hauptsitzung dieses Agenten zurückgegriffen, wenn er noch keine gespeicherten Dashboard-Sitzungen hat.
- Auf Desktop-Breiten bleiben Chat-Steuerelemente in einer kompakten Zeile und werden beim Herunterscrollen im Transkript eingeklappt; Heraufscrollen, Rückkehr zum Anfang oder Erreichen des Endes stellt die Steuerelemente wieder her.
- Aufeinanderfolgende doppelte reine Textnachrichten werden als eine Sprechblase mit Zähler-Badge dargestellt. Nachrichten mit Bildern, Anhängen, Tool-Ausgaben oder Canvas-Vorschauen bleiben nicht zusammengeklappt.
- Die Modell- und Denkmodusauswahlen im Chat-Header patchen die aktive Sitzung sofort über `sessions.patch`; sie sind persistente Sitzungsüberschreibungen, keine nur für einen Turn geltenden Sendeoptionen.
- Die Eingabe von `/new` in der Control UI erstellt dieselbe neue Dashboard-Sitzung wie Neuer Chat und wechselt dorthin. Die Eingabe von `/reset` behält den expliziten In-Place-Reset des Gateways für die aktuelle Sitzung bei.
- Die Chat-Modellauswahl fordert die konfigurierte Modellansicht des Gateways an. Wenn `agents.defaults.models` vorhanden ist, steuert diese Allowlist die Auswahl. Andernfalls zeigt die Auswahl explizite `models.providers.*.models`-Einträge plus Provider mit nutzbarer Authentifizierung. Der vollständige Katalog bleibt über den Debug-`models.list`-RPC mit `view: "all"` verfügbar.
- Wenn frische Gateway-Sitzungsnutzungsberichte hohen Kontextdruck anzeigen, zeigt der Chat-Composer-Bereich einen Kontexthinweis und bei empfohlenen Compaction-Stufen eine kompakte Schaltfläche, die den normalen Sitzungspfad für Compaction ausführt. Veraltete Token-Snapshots werden ausgeblendet, bis das Gateway wieder frische Nutzung meldet.
</Accordion>
<Accordion title="Talk-Modus (Browser-Echtzeit)">
Der Talk-Modus verwendet einen registrierten Echtzeit-Sprach-Provider. Konfigurieren Sie OpenAI mit `talk.provider: "openai"` plus `talk.providers.openai.apiKey`, oder konfigurieren Sie Google mit `talk.provider: "google"` plus `talk.providers.google.apiKey`; die Echtzeit-Provider-Konfiguration von Voice Call kann weiterhin als Fallback wiederverwendet werden. Der Browser erhält niemals einen normalen Provider-API-Schlüssel. OpenAI erhält ein flüchtiges Realtime-Client-Secret für WebRTC. Google Live erhält ein einmalig verwendbares, eingeschränktes Live API-Authentifizierungstoken für eine Browser-WebSocket-Sitzung, wobei Anweisungen und Tool-Deklarationen durch das Gateway im Token gesperrt werden. Provider, die nur eine Backend-Echtzeit-Bridge bereitstellen, laufen über den Gateway-Relay-Transport, sodass Anmeldedaten und Vendor-Sockets serverseitig bleiben, während Browser-Audio über authentifizierte Gateway-RPCs läuft. Der Realtime-Sitzungsprompt wird vom Gateway zusammengesetzt; `talk.realtime.session` akzeptiert keine vom Aufrufer bereitgestellten Anweisungsüberschreibungen.
<Accordion title="Sprechmodus (Browser-Echtzeit)">
Der Sprechmodus verwendet einen registrierten Echtzeit-Voice-Provider. Konfigurieren Sie OpenAI mit `talk.provider: "openai"` plus `talk.providers.openai.apiKey`, oder konfigurieren Sie Google mit `talk.provider: "google"` plus `talk.providers.google.apiKey`; die Echtzeit-Provider-Konfiguration für Voice Call kann weiterhin als Fallback wiederverwendet werden. Der Browser erhält niemals einen standardmäßigen Provider-API-Schlüssel. OpenAI erhält ein kurzlebiges Realtime-Client-Secret für WebRTC. Google Live erhält ein einmalig verwendbares, eingeschränktes Live-API-Auth-Token für eine Browser-WebSocket-Sitzung, wobei Anweisungen und Tool-Deklarationen vom Gateway im Token gesperrt werden. Provider, die nur eine Backend-Echtzeit-Bridge bereitstellen, laufen über den Gateway-Relay-Transport, sodass Anmeldedaten und Vendor-Sockets serverseitig bleiben, während Browser-Audio über authentifizierte Gateway-RPCs übertragen wird. Der Realtime-Sitzungsprompt wird vom Gateway zusammengesetzt; `talk.realtime.session` akzeptiert keine vom Aufrufer bereitgestellten Anweisungsüberschreibungen.
Im Chat-Composer ist die Talk-Steuerung die Wellen-Schaltfläche neben der Mikrofon-Diktat-Schaltfläche. Wenn Talk startet, zeigt die Statuszeile des Composers `Connecting Talk...`, dann `Talk live`, während Audio verbunden ist, oder `Asking OpenClaw...`, während ein Echtzeit-Tool-Aufruf das konfigurierte größere Modell über `chat.send` konsultiert.
Im Chat-Composer ist die Sprechsteuerung die Wellen-Schaltfläche neben der Mikrofon-Diktat-Schaltfläche. Wenn Talk startet, zeigt die Composer-Statuszeile `Connecting Talk...`, danach `Talk live`, während Audio verbunden ist, oder `Asking OpenClaw...`, während ein Echtzeit-Tool-Aufruf das konfigurierte größere Modell über `chat.send` konsultiert.
Maintainer-Live-Smoke: `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` verifiziert den OpenAI-Browser-WebRTC-SDP-Austausch, die Google Live-Browser-WebSocket-Einrichtung mit eingeschränktem Token und den Gateway-Relay-Browseradapter mit gefälschten Mikrofonmedien. Der Befehl gibt nur den Provider-Status aus und protokolliert keine Secrets.
Maintainer-Live-Smoke: `OPENAI_API_KEY=... GEMINI_API_KEY=... node --import tsx scripts/dev/realtime-talk-live-smoke.ts` verifiziert den OpenAI-Browser-WebRTC-SDP-Austausch, die Einrichtung des eingeschränkten Google Live-Token-Browser-WebSocket und den Gateway-Relay-Browseradapter mit gefälschten Mikrofonmedien. Der Befehl gibt nur den Provider-Status aus und protokolliert keine Geheimnisse.
</Accordion>
<Accordion title="Stoppen und Abbrechen">
- Klicken Sie auf **Stoppen** (ruft `chat.abort` auf).
- Während ein Lauf aktiv ist, werden normale Folgefragen in die Warteschlange gestellt. Klicken Sie bei einer eingereihten Nachricht auf **Steuern**, um diese Folgefrage in den laufenden Durchgang einzuspeisen.
- Geben Sie `/stop` ein (oder eigenständige Abbruchformulierungen wie `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), um out-of-band abzubrechen.
- `chat.abort` unterstützt `{ sessionKey }` (ohne `runId`), um alle aktiven Läufe für diese Sitzung abzubrechen.
<Accordion title="Stoppen und abbrechen">
- Klicken Sie auf **Stop** (ruft `chat.abort` auf).
- Während ein Lauf aktiv ist, werden normale Folgeanfragen eingereiht. Klicken Sie bei einer eingereihten Nachricht auf **Steer**, um diese Folgeanfrage in den laufenden Turn einzuspeisen.
- Geben Sie `/stop` ein (oder eigenständige Abbruchphrasen wie `stop`, `stop action`, `stop run`, `stop openclaw`, `please stop`), um out-of-band abzubrechen.
- `chat.abort` unterstützt `{ sessionKey }` (kein `runId`), um alle aktiven Läufe für diese Sitzung abzubrechen.
</Accordion>
<Accordion title="Aufbewahrung von Abbruch-Teilergebnissen">
- Wenn ein Lauf abgebrochen wird, kann teilweiser Assistententext weiterhin in der UI angezeigt werden.
- Das Gateway persistiert abgebrochenen teilweisen Assistententext im Transkriptverlauf, wenn gepufferte Ausgabe vorhanden ist.
- Persistierte Einträge enthalten Abbruchmetadaten, damit Transkriptkonsumenten Abbruch-Teilergebnisse von normaler Abschlussausgabe unterscheiden können.
<Accordion title="Beibehaltung partieller Abbruchausgaben">
- Wenn ein Lauf abgebrochen wird, kann partieller Assistententext weiterhin in der UI angezeigt werden.
- Das Gateway persistiert abgebrochenen partiellen Assistententext im Transkriptverlauf, wenn gepufferte Ausgabe vorhanden ist.
- Persistierte Einträge enthalten Abbruchmetadaten, damit Transkriptkonsumenten partielle Abbruchausgaben von normaler Abschlussausgabe unterscheiden können.
</Accordion>
</AccordionGroup>
## PWA-Installation und Web Push
Die Control UI liefert ein `manifest.webmanifest` und einen Service Worker aus, sodass moderne Browser sie als eigenständige PWA installieren können. Mit Web Push kann das Gateway die installierte PWA mit Benachrichtigungen wecken, auch wenn der Tab oder das Browserfenster nicht geöffnet ist.
Die Control UI liefert ein `manifest.webmanifest` und einen Service Worker aus, sodass moderne Browser sie als eigenständige PWA installieren können. Web Push ermöglicht es dem Gateway, die installierte PWA mit Benachrichtigungen zu wecken, auch wenn der Tab oder das Browserfenster nicht geöffnet ist.
| Oberfläche | Was sie tut |
| ---------------------------------------------------- | ------------------------------------------------------------------ |
| `ui/public/manifest.webmanifest` | PWA-Manifest. Browser bieten "App installieren" an, sobald es erreichbar ist. |
| `ui/public/sw.js` | Service Worker, der `push`-Ereignisse und Benachrichtigungsklicks verarbeitet. |
| `push/vapid-keys.json` (im OpenClaw-Zustandsverzeichnis) | Automatisch generiertes VAPID-Schlüsselpaar, das zum Signieren von Web Push-Payloads verwendet wird. |
| `push/web-push-subscriptions.json` | Persistierte Browser-Abonnement-Endpunkte. |
| Oberfläche | Funktion |
| ----------------------------------------------------- | ------------------------------------------------------------------ |
| `ui/public/manifest.webmanifest` | PWA-Manifest. Browser bieten „App installieren“ an, sobald es erreichbar ist. |
| `ui/public/sw.js` | Service Worker, der `push`-Events und Benachrichtigungsklicks verarbeitet. |
| `push/vapid-keys.json` (unterhalb des OpenClaw-State-Verzeichnisses) | Automatisch generiertes VAPID-Schlüsselpaar zum Signieren von Web-Push-Payloads. |
| `push/web-push-subscriptions.json` | Persistierte Browser-Subscription-Endpunkte. |
Überschreiben Sie das VAPID-Schlüsselpaar über Umgebungsvariablen im Gateway-Prozess, wenn Sie Schlüssel fest vorgeben möchten (für Multi-Host-Deployments, Secrets-Rotation oder Tests):
Überschreiben Sie das VAPID-Schlüsselpaar über Env-Vars im Gateway-Prozess, wenn Sie Schlüssel festlegen möchten (für Multi-Host-Deployments, Geheimnisrotation oder Tests):
- `OPENCLAW_VAPID_PUBLIC_KEY`
- `OPENCLAW_VAPID_PRIVATE_KEY`
- `OPENCLAW_VAPID_SUBJECT` (standardmäßig `mailto:openclaw@localhost`)
Die Control UI verwendet diese bereichsbeschränkten Gateway-Methoden, um Browser-Abonnements zu registrieren und zu testen:
Die Control UI verwendet diese scope-gesteuerten Gateway-Methoden, um Browser-Subscriptions zu registrieren und zu testen:
- `push.web.vapidPublicKey` — ruft den aktiven öffentlichen VAPID-Schlüssel ab.
- `push.web.subscribe` — registriert einen `endpoint` plus `keys.p256dh`/`keys.auth`.
- `push.web.unsubscribe` — entfernt einen registrierten Endpunkt.
- `push.web.test` — sendet eine Testbenachrichtigung an das Abonnement des Aufrufers.
- `push.web.test` — sendet eine Testbenachrichtigung an die Subscription des Aufrufers.
<Note>
Web Push ist unabhängig vom iOS-APNS-Relay-Pfad (siehe [Konfiguration](/de/gateway/configuration) für relaygestützten Push) und von der bestehenden Methode `push.test`, die auf native mobile Kopplung abzielen.
Web Push ist unabhängig vom iOS-APNS-Relay-Pfad (siehe [Konfiguration](/de/gateway/configuration) für relay-gestützte Push-Benachrichtigungen) und von der bestehenden Methode `push.test`, die auf natives Mobile-Pairing abzielen.
</Note>
## Gehostete Einbettungen
Assistentennachrichten können gehostete Webinhalte inline mit dem Shortcode `[embed ...]` rendern. Die Iframe-Sandbox-Richtlinie wird durch `gateway.controlUi.embedSandbox` gesteuert:
Assistentennachrichten können gehostete Webinhalte inline mit dem Shortcode `[embed ...]` rendern. Die iframe-Sandbox-Richtlinie wird über `gateway.controlUi.embedSandbox` gesteuert:
<Tabs>
<Tab title="strict">
Deaktiviert die Skriptausführung in gehosteten Einbettungen.
Deaktiviert die Skriptausführung innerhalb gehosteter Einbettungen.
</Tab>
<Tab title="scripts (Standard)">
Erlaubt interaktive Einbettungen, während die Origin-Isolierung erhalten bleibt; dies ist die Standardeinstellung und reicht normalerweise für eigenständige Browser-Spiele/-Widgets aus.
Erlaubt interaktive Einbettungen bei beibehaltener Origin-Isolation; dies ist der Standard und reicht normalerweise für eigenständige Browserspiele/-Widgets aus.
</Tab>
<Tab title="trusted">
Fügt `allow-same-origin` zusätzlich zu `allow-scripts` für Same-Site-Dokumente hinzu, die bewusst stärkere Berechtigungen benötigen.
Fügt zusätzlich zu `allow-scripts` `allow-same-origin` für Same-Site-Dokumente hinzu, die absichtlich stärkere Berechtigungen benötigen.
</Tab>
</Tabs>
@ -250,14 +254,14 @@ Beispiel:
```
<Warning>
Verwenden Sie `trusted` nur, wenn das eingebettete Dokument tatsächlich Same-Origin-Verhalten benötigt. Für die meisten von Agenten generierten Spiele und interaktiven Canvases ist `scripts` die sicherere Wahl.
Verwenden Sie `trusted` nur, wenn das eingebettete Dokument wirklich Same-Origin-Verhalten benötigt. Für die meisten agentengenerierten Spiele und interaktiven Canvases ist `scripts` die sicherere Wahl.
</Warning>
Absolute externe `http(s)`-Einbettungs-URLs bleiben standardmäßig blockiert. Wenn Sie bewusst möchten, dass `[embed url="https://..."]` Drittanbieter-Seiten lädt, setzen Sie `gateway.controlUi.allowExternalEmbedUrls: true`.
Absolute externe `http(s)`-Einbettungs-URLs bleiben standardmäßig blockiert. Wenn Sie absichtlich möchten, dass `[embed url="https://..."]` Drittanbieter-Seiten lädt, setzen Sie `gateway.controlUi.allowExternalEmbedUrls: true`.
## Chat-Nachrichtenbreite
Gruppierte Chat-Nachrichten verwenden eine gut lesbare standardmäßige Maximalbreite. Bereitstellungen auf breiten Monitoren können sie überschreiben, ohne gebündeltes CSS zu patchen, indem `gateway.controlUi.chatMessageMaxWidth` gesetzt wird:
Gruppierte Chat-Nachrichten verwenden standardmäßig eine gut lesbare maximale Breite. Deployments mit breiten Monitoren können sie überschreiben, ohne gebündeltes CSS zu patchen, indem `gateway.controlUi.chatMessageMaxWidth` gesetzt wird:
```json5
{
@ -269,13 +273,13 @@ Gruppierte Chat-Nachrichten verwenden eine gut lesbare standardmäßige Maximalb
}
```
Der Wert wird validiert, bevor er den Browser erreicht. Unterstützte Werte umfassen einfache Längen und Prozentangaben wie `960px` oder `82%` sowie eingeschränkte `min(...)`-, `max(...)`-, `clamp(...)`-, `calc(...)`- und `fit-content(...)`-Breitenausdrücke.
Der Wert wird validiert, bevor er den Browser erreicht. Unterstützte Werte umfassen einfache Längen und Prozentsätze wie `960px` oder `82%` sowie eingeschränkte Breiten-Ausdrücke mit `min(...)`, `max(...)`, `clamp(...)`, `calc(...)` und `fit-content(...)`.
## Tailnet-Zugriff (empfohlen)
<Tabs>
<Tab title="Integriertes Tailscale Serve (bevorzugt)">
Belassen Sie das Gateway auf Loopback und lassen Sie Tailscale Serve es per HTTPS als Proxy bereitstellen:
Belassen Sie das Gateway auf local loopback und lassen Sie Tailscale Serve es mit HTTPS proxyen:
```bash
openclaw gateway --tailscale serve
@ -283,40 +287,40 @@ Der Wert wird validiert, bevor er den Browser erreicht. Unterstützte Werte umfa
Öffnen Sie:
- `https://<magicdns>/` (oder Ihren konfigurierten `gateway.controlUi.basePath`)
- `https://<magicdns>/` (oder Ihr konfiguriertes `gateway.controlUi.basePath`)
Standardmäßig können Control UI- und WebSocket-Serve-Anfragen sich über Tailscale-Identitätsheader (`tailscale-user-login`) authentifizieren, wenn `gateway.auth.allowTailscale` `true` ist. OpenClaw verifiziert die Identität, indem es die `x-forwarded-for`-Adresse mit `tailscale whois` auflöst und sie mit dem Header abgleicht, und akzeptiert diese nur, wenn die Anfrage über Loopback mit Tailscales `x-forwarded-*`-Headern eintrifft. Bei Control UI-Operator-Sitzungen mit Browser-Geräteidentität überspringt dieser verifizierte Serve-Pfad außerdem den Device-Pairing-Roundtrip; gerätelose Browser und Verbindungen mit Node-Rolle folgen weiterhin den normalen Geräteprüfungen. Setzen Sie `gateway.auth.allowTailscale: false`, wenn Sie auch für Serve-Traffic explizite Shared-Secret-Anmeldedaten verlangen möchten. Verwenden Sie dann `gateway.auth.mode: "token"` oder `"password"`.
Standardmäßig können sich Control-UI-/WebSocket-Serve-Anfragen über Tailscale-Identitätsheader (`tailscale-user-login`) authentifizieren, wenn `gateway.auth.allowTailscale` `true` ist. OpenClaw verifiziert die Identität, indem die Adresse `x-forwarded-for` mit `tailscale whois` aufgelöst und mit dem Header abgeglichen wird, und akzeptiert diese nur, wenn die Anfrage local loopback mit den `x-forwarded-*`-Headern von Tailscale erreicht. Für Control-UI-Operator-Sitzungen mit Browser-Geräteidentität überspringt dieser verifizierte Serve-Pfad außerdem den Geräte-Pairing-Roundtrip; gerätelose Browser und Node-Rollen-Verbindungen folgen weiterhin den normalen Geräteprüfungen. Setzen Sie `gateway.auth.allowTailscale: false`, wenn Sie auch für Serve-Datenverkehr explizite Shared-Secret-Anmeldedaten erzwingen möchten. Verwenden Sie dann `gateway.auth.mode: "token"` oder `"password"`.
Für diesen asynchronen Serve-Identitätspfad werden fehlgeschlagene Authentifizierungsversuche für dieselbe Client-IP und denselben Auth-Scope vor Rate-Limit-Schreibvorgängen serialisiert. Gleichzeitige fehlerhafte Wiederholungen aus demselben Browser können daher bei der zweiten Anfrage `retry later` anzeigen, statt dass zwei einfache Nichtübereinstimmungen parallel konkurrieren.
<Warning>
Tokenlose Serve-Authentifizierung setzt voraus, dass der Gateway-Host vertrauenswürdig ist. Wenn auf diesem Host nicht vertrauenswürdiger lokaler Code laufen könnte, verlangen Sie Token-/Passwortauthentifizierung.
Tokenlose Serve-Authentifizierung setzt voraus, dass der Gateway-Host vertrauenswürdig ist. Wenn nicht vertrauenswürdiger lokaler Code auf diesem Host ausgeführt werden kann, erzwingen Sie Token-/Passwort-Authentifizierung.
</Warning>
</Tab>
<Tab title="An Tailnet + Token binden">
<Tab title="An Tailnet binden + Token">
```bash
openclaw gateway --bind tailnet --token "$(openssl rand -hex 32)"
```
Öffnen Sie dann:
- `http://<tailscale-ip>:18789/` (oder Ihren konfigurierten `gateway.controlUi.basePath`)
- `http://<tailscale-ip>:18789/` (oder Ihr konfiguriertes `gateway.controlUi.basePath`)
Fügen Sie den passenden gemeinsamen geheimen Schlüssel in die UI-Einstellungen ein (gesendet als `connect.params.auth.token` oder `connect.params.auth.password`).
Fügen Sie das passende gemeinsame Geheimnis in die UI-Einstellungen ein (gesendet als `connect.params.auth.token` oder `connect.params.auth.password`).
</Tab>
</Tabs>
## Unsicheres HTTP
Wenn Sie das Dashboard über einfaches HTTP (`http://<lan-ip>` oder `http://<tailscale-ip>`) öffnen, läuft der Browser in einem **nicht sicheren Kontext** und blockiert WebCrypto. Standardmäßig **blockiert** OpenClaw Control UI-Verbindungen ohne Geräteidentität.
Wenn Sie das Dashboard über einfaches HTTP öffnen (`http://<lan-ip>` oder `http://<tailscale-ip>`), läuft der Browser in einem **nicht sicheren Kontext** und blockiert WebCrypto. Standardmäßig **blockiert** OpenClaw Control UI-Verbindungen ohne Geräteidentität.
Dokumentierte Ausnahmen:
- nur für localhost geltende Kompatibilität für unsicheres HTTP mit `gateway.controlUi.allowInsecureAuth=true`
- erfolgreiche Control UI-Operatorauthentifizierung über `gateway.auth.mode: "trusted-proxy"`
- Notfalloption `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
- Nur-Localhost-Kompatibilität für unsicheres HTTP mit `gateway.controlUi.allowInsecureAuth=true`
- erfolgreiche Operator-Control UI-Authentifizierung über `gateway.auth.mode: "trusted-proxy"`
- Break-Glass-Option `gateway.controlUi.dangerouslyDisableDeviceAuth=true`
**Empfohlene Lösung:** Verwenden Sie HTTPS (Tailscale Serve) oder öffnen Sie die UI lokal:
@ -324,7 +328,7 @@ Dokumentierte Ausnahmen:
- `http://127.0.0.1:18789/` (auf dem Gateway-Host)
<AccordionGroup>
<Accordion title="Verhalten des Insecure-auth-Schalters">
<Accordion title="Verhalten des Schalters für unsichere Authentifizierung">
```json5
{
gateway: {
@ -337,12 +341,12 @@ Dokumentierte Ausnahmen:
`allowInsecureAuth` ist nur ein lokaler Kompatibilitätsschalter:
- Er erlaubt localhost-Control UI-Sitzungen, in nicht sicheren HTTP-Kontexten ohne Geräteidentität fortzufahren.
- Er erlaubt Localhost-Control UI-Sitzungen, in nicht sicheren HTTP-Kontexten ohne Geräteidentität fortzufahren.
- Er umgeht keine Pairing-Prüfungen.
- Er lockert keine Anforderungen an die Geräteidentität für entfernte (nicht-localhost) Geräte.
- Er lockert keine Anforderungen an die Geräteidentität für entfernte (Nicht-Localhost-)Verbindungen.
</Accordion>
<Accordion title="Nur für den Notfallzugriff">
<Accordion title="Nur Break-Glass">
```json5
{
gateway: {
@ -354,30 +358,30 @@ Dokumentierte Ausnahmen:
```
<Warning>
`dangerouslyDisableDeviceAuth` deaktiviert die Geräteidentitätsprüfungen der Control UI und stellt eine schwerwiegende Sicherheitsverschlechterung dar. Machen Sie dies nach einer Notfallnutzung schnell rückgängig.
`dangerouslyDisableDeviceAuth` deaktiviert Geräteidentitätsprüfungen der Control UI und ist eine erhebliche Sicherheitsverschlechterung. Machen Sie dies nach der Notfallnutzung schnell rückgängig.
</Warning>
</Accordion>
<Accordion title="Hinweis zu Trusted Proxy">
- Erfolgreiche Trusted-Proxy-Authentifizierung kann **Operator**-Control UI-Sitzungen ohne Geräteidentität zulassen.
- Dies gilt **nicht** für Control UI-Sitzungen mit Node-Rolle.
- local loopback-Reverse-Proxys auf demselben Host erfüllen Trusted-Proxy-Authentifizierung weiterhin nicht; siehe [Trusted Proxy Auth](/de/gateway/trusted-proxy-auth).
- Same-Host-Loopback-Reverse-Proxys erfüllen die Trusted-Proxy-Authentifizierung weiterhin nicht; siehe [Trusted-Proxy-Authentifizierung](/de/gateway/trusted-proxy-auth).
</Accordion>
</AccordionGroup>
Siehe [Tailscale](/de/gateway/tailscale) für Hinweise zur HTTPS-Einrichtung.
## Content Security Policy
## Content-Security-Policy
Die Control UI wird mit einer strikten `img-src`-Policy ausgeliefert: Nur Assets mit **gleichem Ursprung**, `data:`-URLs und lokal erzeugte `blob:`-URLs sind erlaubt. Entfernte `http(s)`- und protokollrelative Bild-URLs werden vom Browser abgelehnt und lösen keine Netzwerkabrufe aus.
Die Control UI wird mit einer strengen `img-src`-Policy ausgeliefert: Nur Assets mit **same-origin**, `data:`-URLs und lokal erzeugte `blob:`-URLs sind erlaubt. Entfernte `http(s)`- und protokollrelative Bild-URLs werden vom Browser abgelehnt und lösen keine Netzwerkanfragen aus.
Was das in der Praxis bedeutet:
Was das praktisch bedeutet:
- Avatare und Bilder, die unter relativen Pfaden bereitgestellt werden (zum Beispiel `/avatars/<id>`), werden weiterhin gerendert, einschließlich authentifizierter Avatar-Routen, die die UI abruft und in lokale `blob:`-URLs umwandelt.
- Inline-`data:image/...`-URLs werden weiterhin gerendert (nützlich für Payloads innerhalb des Protokolls).
- Inline-`data:image/...`-URLs werden weiterhin gerendert (nützlich für In-Protocol-Payloads).
- Lokale `blob:`-URLs, die von der Control UI erstellt werden, werden weiterhin gerendert.
- Entfernte Avatar-URLs, die von Channel-Metadaten ausgegeben werden, werden in den Avatar-Helfern der Control UI entfernt und durch das integrierte Logo/Badge ersetzt, sodass ein kompromittierter oder bösartiger Channel keine beliebigen entfernten Bildabrufe aus dem Browser eines Operators erzwingen kann.
- Entfernte Avatar-URLs, die von Kanalmetadaten ausgegeben werden, werden in den Avatar-Hilfsfunktionen der Control UI entfernt und durch das integrierte Logo/Badge ersetzt, sodass ein kompromittierter oder bösartiger Kanal keine beliebigen entfernten Bildabrufe aus dem Browser eines Operators erzwingen kann.
Sie müssen nichts ändern, um dieses Verhalten zu erhalten — es ist immer aktiviert und nicht konfigurierbar.
@ -386,36 +390,36 @@ Sie müssen nichts ändern, um dieses Verhalten zu erhalten — es ist immer akt
Wenn Gateway-Authentifizierung konfiguriert ist, erfordert der Avatar-Endpunkt der Control UI dasselbe Gateway-Token wie der Rest der API:
- `GET /avatar/<agentId>` gibt das Avatar-Bild nur an authentifizierte Aufrufer zurück. `GET /avatar/<agentId>?meta=1` gibt die Avatar-Metadaten nach derselben Regel zurück.
- Nicht authentifizierte Anfragen an beide Routen werden abgelehnt (entsprechend der benachbarten Assistant-Media-Route). Dadurch wird verhindert, dass die Avatar-Route die Agentenidentität auf Hosts preisgibt, die ansonsten geschützt sind.
- Die Control UI leitet beim Abrufen von Avataren das Gateway-Token als Bearer-Header weiter und verwendet authentifizierte Blob-URLs, sodass das Bild weiterhin in Dashboards gerendert wird.
- Nicht authentifizierte Anfragen an eine der beiden Routen werden abgelehnt (entsprechend der benachbarten Assistant-Media-Route). Dadurch wird verhindert, dass die Avatar-Route die Agentenidentität auf Hosts preisgibt, die ansonsten geschützt sind.
- Die Control UI selbst leitet beim Abrufen von Avataren das Gateway-Token als Bearer-Header weiter und verwendet authentifizierte Blob-URLs, damit das Bild weiterhin in Dashboards gerendert wird.
Wenn Sie die Gateway-Authentifizierung deaktivieren (auf gemeinsam genutzten Hosts nicht empfohlen), wird auch die Avatar-Route nicht authentifiziert, entsprechend dem Rest des Gateways.
Wenn Sie Gateway-Authentifizierung deaktivieren (auf gemeinsam genutzten Hosts nicht empfohlen), wird die Avatar-Route ebenfalls nicht authentifiziert, im Einklang mit dem Rest des Gateways.
## Authentifizierung der Assistant-Media-Route
Wenn Gateway-Authentifizierung konfiguriert ist, verwenden lokale Medienvorschauen des Assistenten eine zweistufige Route:
Wenn Gateway-Authentifizierung konfiguriert ist, verwenden lokale Medienvorschauen des Assistant eine zweistufige Route:
- `GET /__openclaw__/assistant-media?meta=1&source=<path>` erfordert die normale Operator-Authentifizierung der Control UI. Der Browser sendet beim Prüfen der Verfügbarkeit das Gateway-Token als Bearer-Header.
- `GET /__openclaw__/assistant-media?meta=1&source=<path>` erfordert die normale Operator-Authentifizierung der Control UI. Der Browser sendet das Gateway-Token beim Prüfen der Verfügbarkeit als Bearer-Header.
- Erfolgreiche Metadatenantworten enthalten ein kurzlebiges `mediaTicket`, das auf genau diesen Quellpfad beschränkt ist.
- Vom Browser gerenderte Bild-, Audio-, Video- und Dokument-URLs verwenden `mediaTicket=<ticket>` anstelle des aktiven Gateway-Tokens oder Passworts. Das Ticket läuft schnell ab und kann keine andere Quelle autorisieren.
- Vom Browser gerenderte Bild-, Audio-, Video- und Dokument-URLs verwenden `mediaTicket=<ticket>` statt des aktiven Gateway-Tokens oder Passworts. Das Ticket läuft schnell ab und kann keine andere Quelle autorisieren.
Dadurch bleibt das normale Medien-Rendering mit browsernativen Medienelementen kompatibel, ohne wiederverwendbare Gateway-Anmeldedaten in sichtbare Medien-URLs aufzunehmen.
So bleibt normales Medien-Rendering mit browsernativen Medienelementen kompatibel, ohne wiederverwendbare Gateway-Zugangsdaten in sichtbaren Medien-URLs abzulegen.
## UI erstellen
## UI bauen
Das Gateway stellt statische Dateien aus `dist/control-ui` bereit. Erstellen Sie sie mit:
Das Gateway stellt statische Dateien aus `dist/control-ui` bereit. Bauen Sie sie mit:
```bash
pnpm ui:build
```
Optionale absolute Basis (wenn Sie feste Asset-URLs möchten):
Optionale absolute Basis (wenn Sie feste Asset-URLs verwenden möchten):
```bash
OPENCLAW_CONTROL_UI_BASE_PATH=/openclaw/ pnpm ui:build
```
Für die lokale Entwicklung (separater Dev-Server):
Für die lokale Entwicklung (separater Entwicklungsserver):
```bash
pnpm ui:dev
@ -423,12 +427,12 @@ pnpm ui:dev
Richten Sie die UI dann auf Ihre Gateway-WS-URL aus (z. B. `ws://127.0.0.1:18789`).
## Debugging/Tests: Dev-Server + entferntes Gateway
## Debugging/Testing: Entwicklungsserver + entferntes Gateway
Die Control UI besteht aus statischen Dateien; das WebSocket-Ziel ist konfigurierbar und kann sich vom HTTP-Ursprung unterscheiden. Das ist praktisch, wenn Sie den Vite-Dev-Server lokal verwenden möchten, das Gateway aber an anderer Stelle läuft.
Die Control UI besteht aus statischen Dateien; das WebSocket-Ziel ist konfigurierbar und kann sich vom HTTP-Origin unterscheiden. Das ist praktisch, wenn Sie den Vite-Entwicklungsserver lokal verwenden möchten, das Gateway aber anderswo läuft.
<Steps>
<Step title="UI-Dev-Server starten">
<Step title="UI-Entwicklungsserver starten">
```bash
pnpm ui:dev
```
@ -450,16 +454,16 @@ Die Control UI besteht aus statischen Dateien; das WebSocket-Ziel ist konfigurie
<AccordionGroup>
<Accordion title="Hinweise">
- `gatewayUrl` wird nach dem Laden in localStorage gespeichert und aus der URL entfernt.
- Wenn Sie einen vollständigen `ws://`- oder `wss://`-Endpunkt über `gatewayUrl` übergeben, URL-codieren Sie den Wert von `gatewayUrl`, damit der Browser die Query-Zeichenfolge korrekt parst.
- `token` sollte nach Möglichkeit über das URL-Fragment (`#token=...`) übergeben werden. Fragmente werden nicht an den Server gesendet, wodurch Lecks in Anfrageprotokollen und über Referer vermieden werden. Ältere `?token=`-Query-Parameter werden aus Kompatibilitätsgründen weiterhin einmal importiert, aber nur als Fallback, und direkt nach dem Bootstrap entfernt.
- Wenn Sie über `gatewayUrl` einen vollständigen `ws://`- oder `wss://`-Endpunkt übergeben, URL-kodieren Sie den Wert `gatewayUrl`, damit der Browser den Query-String korrekt parst.
- `token` sollte nach Möglichkeit über das URL-Fragment (`#token=...`) übergeben werden. Fragmente werden nicht an den Server gesendet, wodurch Lecks in Anfrage-Logs und Referern vermieden werden. Legacy-Query-Parameter `?token=` werden aus Kompatibilitätsgründen weiterhin einmal importiert, jedoch nur als Fallback, und direkt nach dem Bootstrap entfernt.
- `password` wird nur im Arbeitsspeicher gehalten.
- Wenn `gatewayUrl` gesetzt ist, greift die UI nicht auf Konfigurations- oder Umgebungsanmeldedaten zurück. Geben Sie `token` (oder `password`) explizit an. Fehlende explizite Anmeldedaten sind ein Fehler.
- Wenn `gatewayUrl` gesetzt ist, fällt die UI nicht auf Konfigurations- oder Umgebungs-Zugangsdaten zurück. Geben Sie `token` (oder `password`) explizit an. Fehlende explizite Zugangsdaten sind ein Fehler.
- Verwenden Sie `wss://`, wenn sich das Gateway hinter TLS befindet (Tailscale Serve, HTTPS-Proxy usw.).
- `gatewayUrl` wird nur in einem Fenster der obersten Ebene akzeptiert (nicht eingebettet), um Clickjacking zu verhindern.
- Nicht-loopback-Control-UI-Bereitstellungen müssen `gateway.controlUi.allowedOrigins` explizit festlegen (vollständige Ursprünge). Dazu gehören auch entfernte Dev-Setups.
- Beim Start des Gateway können lokale Ursprünge wie `http://localhost:<port>` und `http://127.0.0.1:<port>` aus dem effektiven Runtime-Bind und -Port übernommen werden, entfernte Browser-Ursprünge benötigen jedoch weiterhin explizite Einträge.
- Verwenden Sie `gateway.controlUi.allowedOrigins: ["*"]` nur für streng kontrollierte lokale Tests. Es bedeutet, jeden Browser-Ursprung zuzulassen, nicht „den Host abzugleichen, den ich gerade verwende“.
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` aktiviert den Host-Header-Origin-Fallback-Modus, ist jedoch ein gefährlicher Sicherheitsmodus.
- `gatewayUrl` wird nur in einem Top-Level-Fenster akzeptiert (nicht eingebettet), um Clickjacking zu verhindern.
- Nicht-Loopback-Bereitstellungen der Control UI müssen `gateway.controlUi.allowedOrigins` explizit setzen (vollständige Origins). Dies umfasst entfernte Entwicklungsumgebungen.
- Der Gateway-Start kann lokale Origins wie `http://localhost:<port>` und `http://127.0.0.1:<port>` aus dem effektiven Runtime-Bind und Port vorbefüllen, aber entfernte Browser-Origins benötigen weiterhin explizite Einträge.
- Verwenden Sie `gateway.controlUi.allowedOrigins: ["*"]` nicht, außer für streng kontrolliertes lokales Testing. Es bedeutet, beliebige Browser-Origins zuzulassen, nicht „mit dem Host übereinstimmen, den ich gerade verwende“.
- `gateway.controlUi.dangerouslyAllowHostHeaderOriginFallback=true` aktiviert den Fallback-Modus für Host-Header-Origins, ist aber ein gefährlicher Sicherheitsmodus.
</Accordion>
</AccordionGroup>
@ -481,6 +485,6 @@ Details zur Einrichtung des Remote-Zugriffs: [Remote-Zugriff](/de/gateway/remote
## Verwandte Themen
- [Dashboard](/de/web/dashboard) — Gateway-Dashboard
- [Health Checks](/de/gateway/health) — Gateway-Zustandsüberwachung
- [Health Checks](/de/gateway/health) — Gateway-Integritätsüberwachung
- [TUI](/de/web/tui) — Terminal-Benutzeroberfläche
- [WebChat](/de/web/webchat) — browserbasierte Chat-Oberfläche