Dies ist ein Contributor-Leitfaden für OpenClaw-Kernentwickler. Wenn Sie ein externes Plugin
erstellen, lesen Sie stattdessen Plugins erstellen.
Die ausführliche Architekturreferenz (Capability-Modell, Ownership,
Lade-Pipeline, Runtime-Helfer) finden Sie unter Plugin-Interna.
- Plugin = Ownership-Grenze
- Capability = gemeinsamer Kernvertrag
Wann eine Capability erstellt werden sollte
Erstellen Sie eine neue Capability, wenn alle diese Punkte zutreffen:- Mehr als ein Vendor könnte sie plausibel implementieren.
- Kanäle, Tools oder Feature-Plugins sollten sie nutzen können, ohne den Vendor zu kennen.
- Der Kern muss Fallback, Policy, Konfiguration oder Zustellverhalten besitzen.
Die Standardreihenfolge
- Definieren Sie den typisierten Kernvertrag.
- Fügen Sie die Plugin-Registrierung für diesen Vertrag hinzu.
- Fügen Sie einen gemeinsamen Runtime-Helfer hinzu.
- Binden Sie ein echtes Vendor-Plugin als Nachweis ein.
- Stellen Sie Feature-/Kanal-Consumer auf den Runtime-Helfer um.
- Fügen Sie Vertragstests hinzu.
- Dokumentieren Sie die betreiberseitige Konfiguration und das Ownership-Modell.
Was wohin gehört
Kern:- Request-/Response-Typen.
- Provider-Registry und Auflösung.
- Fallback-Verhalten.
- Konfigurationsschema mit weitergegebenen
title- /description-Docs-Metadaten auf verschachtelten Objekt-, Wildcard-, Array-Item- und Composition-Knoten. - Runtime-Helferoberfläche.
- Vendor-API-Aufrufe.
- Vendor-Auth-Verarbeitung.
- Vendor-spezifische Request-Normalisierung.
- Registrierung der Capability-Implementierung.
- Ruft
api.runtime.*oder den passendenplugin-sdk/*-runtime-Helfer auf. - Ruft niemals direkt eine Vendor-Implementierung auf.
Provider- und Harness-Schnittstellen
Verwenden Sie Provider-Hooks, wenn das Verhalten zum Model-Provider-Vertrag gehört und nicht zum generischen Agent-Loop. Beispiele sind Provider-spezifische Request-Parameter nach der Transportauswahl, Auth-Profil-Präferenz, Prompt-Overlays und Follow-up-Fallback-Routing nach Model-/Profil-Failover. Verwenden Sie Agent-Harness-Hooks, wenn das Verhalten zur Runtime gehört, die einen Turn ausführt. Harnesses können explizite Protokollergebnisse klassifizieren, etwa leere Ausgabe, Reasoning ohne sichtbare Ausgabe oder einen strukturierten Plan ohne abschließende Antwort, damit die äußere Model-Fallback-Policy die Retry-Entscheidung treffen kann. Halten Sie beide Schnittstellen schmal:- Der Kern besitzt die Retry-/Fallback-Policy.
- Provider-Plugins besitzen Provider-spezifische Request-/Auth-/Routing-Hinweise.
- Harness-Plugins besitzen Runtime-spezifische Attempt-Klassifizierung.
- Drittanbieter-Plugins geben Hinweise zurück, keine direkten Änderungen am Kernzustand.
Datei-Checkliste
Für eine neue Capability sollten Sie damit rechnen, diese Bereiche anzupassen:src/<capability>/types.tssrc/<capability>/...registry/runtime.tssrc/plugins/types.tssrc/plugins/registry.tssrc/plugins/captured-registration.tssrc/plugins/contracts/registry.tssrc/plugins/runtime/types-core.tssrc/plugins/runtime/index.tssrc/plugin-sdk/<capability>.tssrc/plugin-sdk/<capability>-runtime.ts- Ein oder mehrere gebündelte Plugin-Pakete.
- Konfiguration, Docs, Tests.
Durchgearbeitetes Beispiel: Bildgenerierung
Bildgenerierung folgt der Standardform:- Der Kern definiert
ImageGenerationProvider. - Der Kern stellt
registerImageGenerationProvider(...)bereit. - Der Kern stellt
runtime.imageGeneration.generate(...)bereit. - Die Plugins
openai,google,falundminimaxregistrieren Vendor-gestützte Implementierungen. - Zukünftige Vendors registrieren denselben Vertrag, ohne Kanäle/Tools zu ändern.
agents.defaults.imageModelanalysiert Bilder.agents.defaults.imageGenerationModelgeneriert Bilder.
Embedding-Provider
Verwenden SieembeddingProviders für wiederverwendbare Vector-Embedding-Provider. Dieser Vertrag
ist bewusst breiter als Memory: Tools, Suche, Retrieval, Importer oder
zukünftige Feature-Plugins können Embeddings nutzen, ohne von der Memory-
Engine abhängig zu sein.
Memory-Suche kann generische embeddingProviders nutzen. Der ältere
Vertrag memoryEmbeddingProviders ist veraltete Kompatibilität, während bestehende
Memory-spezifische Provider migrieren; neue wiederverwendbare Embedding-Provider sollten
embeddingProviders verwenden.
Review-Checkliste
Prüfen Sie vor dem Ausliefern einer neuen Capability:- Kein Kanal/Tool importiert Vendor-Code direkt.
- Der Runtime-Helfer ist der gemeinsame Pfad.
- Mindestens ein Vertragstest bestätigt die gebündelte Ownership.
- Konfigurations-Docs nennen den neuen Model-/Konfigurationsschlüssel.
- Plugin-Docs erklären die Ownership-Grenze.
Verwandte Themen
- Plugin-Interna — Capability-Modell, Ownership, Lade-Pipeline, Runtime-Helfer.
- Plugins erstellen — Tutorial für das erste Plugin.
- SDK-Übersicht — Import-Map und Referenz zur Registrierungs-API.
- Skills erstellen — begleitende Contributor-Oberfläche.