Plugin SDK reference
Plugins de harnais d’agent
Un harnais d’agent est l’exécuteur de bas niveau pour un tour d’agent OpenClaw préparé. Ce n’est pas un fournisseur de modèle, ni un canal, ni un registre d’outils. Pour le modèle mental destiné aux utilisateurs, consultez Runtimes d’agent.
N’utilisez cette surface que pour des plugins natifs intégrés ou de confiance. Le contrat reste expérimental, car les types de paramètres reflètent intentionnellement le runner intégré actuel.
Quand utiliser un harnais
Enregistrez un harnais d’agent lorsqu’une famille de modèles dispose de son propre runtime de session natif et que le transport de fournisseur OpenClaw normal n’est pas la bonne abstraction.
Exemples :
- un serveur d’agent de codage natif qui possède les fils et la Compaction
- une CLI ou un daemon local qui doit diffuser des événements natifs de plan/raisonnement/outils
- un runtime de modèle qui a besoin de son propre identifiant de reprise en plus de la transcription de session OpenClaw
N’enregistrez pas un harnais uniquement pour ajouter une nouvelle API LLM. Pour les API de modèle HTTP ou WebSocket normales, créez un plugin de fournisseur.
Ce que le cœur possède toujours
Avant qu’un harnais soit sélectionné, OpenClaw a déjà résolu :
- le fournisseur et le modèle
- l’état d’authentification du runtime
- le niveau de réflexion et le budget de contexte
- le fichier de transcription/session OpenClaw
- l’espace de travail, le bac à sable et la politique des outils
- les callbacks de réponse du canal et les callbacks de streaming
- la politique de repli de modèle et de changement de modèle en direct
Cette séparation est intentionnelle. Un harnais exécute une tentative préparée ; il ne choisit pas les fournisseurs, ne remplace pas la livraison par canal et ne change pas silencieusement de modèle.
La tentative préparée inclut aussi params.runtimePlan, un ensemble de politiques appartenant à OpenClaw
pour les décisions de runtime qui doivent rester partagées entre OpenClaw et les harnais
natifs :
runtimePlan.tools.normalize(...)etruntimePlan.tools.logDiagnostics(...)pour la politique de schéma d’outils consciente du fournisseurruntimePlan.transcript.resolvePolicy(...)pour la désinfection de transcription et la politique de réparation des appels d’outilsruntimePlan.delivery.isSilentPayload(...)pour la suppression partagée de livraisonNO_REPLYet de médiasruntimePlan.outcome.classifyRunResult(...)pour la classification de repli de modèleruntimePlan.observabilitypour les métadonnées résolues de fournisseur/modèle/harnais
Les harnais peuvent utiliser le plan pour les décisions qui doivent correspondre au comportement d’OpenClaw, mais doivent tout de même le traiter comme un état de tentative appartenant à l’hôte. Ne le modifiez pas et ne l’utilisez pas pour changer de fournisseur/modèle à l’intérieur d’un tour.
Enregistrer un harnais
Importation : openclaw/plugin-sdk/agent-harness
const myHarness: AgentHarness = { id: "my-harness", label: "My native agent harness", supports(ctx) { return ctx.provider === "my-provider" ? { supported: true, priority: 100 } : { supported: false }; }, async runAttempt(params) { // Start or resume your native thread. // Use params.prompt, params.tools, params.images, params.onPartialReply, // params.onAgentEvent, and the other prepared attempt fields. return await runMyNativeTurn(params); },}; export default definePluginEntry({ id: "my-native-agent", name: "My Native Agent", description: "Runs selected models through a native agent daemon.", register(api) { api.registerAgentHarness(myHarness); },});Politique de sélection
OpenClaw choisit un harnais après la résolution fournisseur/modèle :
- La politique de runtime limitée au modèle l’emporte.
- La politique de runtime limitée au fournisseur vient ensuite.
autodemande aux harnais enregistrés s’ils prennent en charge le fournisseur/modèle résolu.- Si aucun harnais enregistré ne correspond, OpenClaw utilise son runtime intégré.
Les échecs de harnais de plugin apparaissent comme des échecs d’exécution. En mode auto, le repli intégré est
utilisé uniquement lorsqu’aucun harnais de plugin enregistré ne prend en charge le
fournisseur/modèle résolu. Une fois qu’un harnais de plugin a réclamé une exécution, OpenClaw ne
rejoue pas ce même tour via un autre runtime, car cela peut changer
la sémantique d’authentification/runtime ou dupliquer des effets de bord.
Les épinglages de runtime sur toute la session et tout l’agent sont ignorés par la sélection. Cela
inclut les valeurs obsolètes de session agentHarnessId, agents.defaults.agentRuntime,
agents.list[].agentRuntime et OPENCLAW_AGENT_RUNTIME. /status affiche le
runtime effectif sélectionné depuis la route fournisseur/modèle.
Si le harnais sélectionné est surprenant, activez la journalisation de débogage agents/harness et
inspectez l’enregistrement structuré agent harness selected du Gateway. Il inclut
l’identifiant du harnais sélectionné, la raison de sélection, la politique de runtime/repli et, en
mode auto, le résultat de prise en charge de chaque candidat de plugin.
Le plugin Codex intégré enregistre codex comme identifiant de harnais. Le cœur traite cela
comme un identifiant de harnais de plugin ordinaire ; les alias propres à Codex appartiennent au plugin
ou à la configuration opérateur, pas au sélecteur de runtime partagé.
Association fournisseur et harnais
La plupart des harnais doivent aussi enregistrer un fournisseur. Le fournisseur rend les références de modèle,
l’état d’authentification, les métadonnées de modèle et la sélection /model visibles pour le reste
d’OpenClaw. Le harnais réclame ensuite ce fournisseur dans supports(...).
Le plugin Codex intégré suit ce modèle :
- références de modèle utilisateur préférées :
openai/gpt-5.5 - références de compatibilité : les anciennes références
codex/gpt-*restent acceptées, mais les nouvelles configs ne doivent pas les utiliser comme références fournisseur/modèle normales - identifiant de harnais :
codex - authentification : disponibilité de fournisseur synthétique, car le harnais Codex possède la connexion/session Codex native
- requête app-server : OpenClaw envoie l’identifiant de modèle brut à Codex et laisse le harnais parler au protocole app-server natif
Le plugin Codex est additif. Les références d’agent openai/gpt-* simples sur le fournisseur
OpenAI officiel sélectionnent le harnais Codex par défaut. Les anciennes références codex/gpt-*
sélectionnent toujours le fournisseur et le harnais Codex par compatibilité.
Pour la configuration opérateur, les exemples de préfixes de modèle et les configs propres à Codex, consultez Harnais Codex.
OpenClaw exige Codex app-server 0.125.0 ou plus récent. Le plugin Codex vérifie
la négociation d’initialisation de l’app-server et bloque les serveurs plus anciens ou sans version afin
qu’OpenClaw ne s’exécute que sur la surface de protocole avec laquelle il a été testé. Le
plancher 0.125.0 inclut la prise en charge de charge utile du hook MCP natif arrivée dans
Codex 0.124.0, tout en épinglant OpenClaw sur la ligne stable testée plus récente.
Middleware de résultat d’outil
Les plugins intégrés et les plugins installés explicitement activés avec des contrats de manifeste correspondants
peuvent attacher un middleware de résultat d’outil neutre vis-à-vis du runtime via
api.registerAgentToolResultMiddleware(...) lorsque leur manifeste déclare les
identifiants de runtime ciblés dans contracts.agentToolResultMiddleware. Cette surface de confiance
sert aux transformations asynchrones de résultats d’outils qui doivent s’exécuter avant qu’OpenClaw ou Codex
ne renvoie la sortie d’outil au modèle.
Les anciens plugins intégrés peuvent toujours utiliser
api.registerCodexAppServerExtensionFactory(...) pour un middleware réservé à l’app-server Codex,
mais les nouvelles transformations de résultats doivent utiliser l’API neutre vis-à-vis du runtime.
Le hook réservé au runner intégré api.registerEmbeddedExtensionFactory(...) a été supprimé ;
les transformations de résultats d’outils intégrées doivent utiliser le middleware neutre vis-à-vis du runtime.
Classification du résultat terminal
Les harnais natifs qui possèdent leur propre projection de protocole peuvent utiliser
classifyAgentHarnessTerminalOutcome(...) depuis
openclaw/plugin-sdk/agent-harness-runtime lorsqu’un tour terminé n’a produit aucun
texte d’assistant visible. L’aide renvoie empty, reasoning-only ou
planning-only afin que la politique de repli d’OpenClaw puisse décider de réessayer sur un
modèle différent. planning-only exige le champ explicite planText du harnais ;
OpenClaw ne l’infère pas de la prose de l’assistant. L’aide laisse intentionnellement
non classés les erreurs de prompt, les tours en cours et les réponses silencieuses intentionnelles comme
NO_REPLY.
Effets de bord de fin d’agent
Les harnais natifs doivent appeler runAgentEndSideEffects(...) depuis
openclaw/plugin-sdk/agent-harness-runtime après avoir finalisé une tentative. Il
déclenche le hook portable agent_end et la capture de recherche d’OpenClaw sans
retarder les réponses interactives. Utilisez awaitAgentEndSideEffects(...) pour les exécutions locales,
non interactives, où la tentative ne doit pas se résoudre avant la fin de ces effets de bord.
Les deux aides acceptent la même charge utile { event, ctx } que
runAgentHarnessAgentEndHook(...) ; leurs échecs ne modifient pas le résultat de tentative
terminé.
Entrée utilisateur et surfaces d’outils
Les harnais natifs qui exposent une demande d’entrée utilisateur au niveau du runtime doivent utiliser les
aides d’entrée utilisateur depuis openclaw/plugin-sdk/agent-harness-runtime pour formater
le prompt, le livrer via le chemin de réponse bloquant d’OpenClaw et normaliser
les réponses à choix/libres vers la forme de réponse native du runtime. L’aide
garde la présentation canal/TUI cohérente tandis que chaque harnais conserve sa
propre analyse de protocole et son cycle de vie de requête en attente.
Les harnais natifs qui ont besoin d’un routage d’outils compact de type PI doivent utiliser
createAgentHarnessToolSurfaceRuntime(...) depuis
openclaw/plugin-sdk/agent-harness-tool-runtime. Il possède la sélection de contrôle
recherche d’outils/mode code, les valeurs par défaut allégées du modèle local,
le filtrage de schéma compatible runtime, l’exécution de catalogue masqué, l’hydratation
de répertoires et le nettoyage de catalogue. Les harnais possèdent toujours leur conversion d’outils
propre au SDK et leur callback d’exécution natif.
Mode de harnais Codex natif
Le harnais codex intégré est le mode Codex natif pour les tours d’agent OpenClaw
intégrés. Activez d’abord le plugin codex intégré, et incluez codex dans
plugins.allow si votre config utilise une liste d’autorisation restrictive. Les configs d’app-server
natives doivent utiliser openai/gpt-* ; les tours d’agent OpenAI sélectionnent le harnais Codex
par défaut. Les routes d’anciennes références de modèle Codex doivent être réparées avec
openclaw doctor --fix, et les anciennes références de modèle codex/* restent des alias de compatibilité
pour le harnais natif.
Lorsque ce mode s’exécute, Codex possède l’identifiant de fil natif, le comportement de reprise,
la Compaction et l’exécution app-server. OpenClaw possède toujours le canal de discussion,
le miroir de transcription visible, la politique des outils, les approbations, la livraison de médias et la sélection
de session. Utilisez fournisseur/modèle agentRuntime.id: "codex" lorsque vous devez prouver
que seul le chemin app-server Codex peut réclamer l’exécution. Les runtimes de plugin explicites
échouent de manière fermée ; les échecs de sélection app-server Codex et les échecs de runtime ne sont pas
réessayés via un autre runtime.
Rigueur du runtime
Par défaut, OpenClaw utilise la politique de runtime fournisseur/modèle auto : les harnais de
plugin enregistrés peuvent réclamer une paire fournisseur/modèle, et le runtime intégré
gère le tour lorsqu’aucun ne correspond. Les références d’agent OpenAI sur le fournisseur OpenAI officiel utilisent Codex par défaut.
Utilisez un runtime de plugin fournisseur/modèle explicite comme
agentRuntime.id: "codex" lorsque l’absence de sélection de harnais doit échouer au lieu
d’être routée via le runtime intégré. Les échecs du harnais de plugin sélectionné échouent toujours
fermement. Cela ne bloque pas un agentRuntime.id: "openclaw" fournisseur/modèle explicite.
Pour les exécutions intégrées réservées à Codex :
{ "models": { "providers": { "openai": { "agentRuntime": { "id": "codex" } } } }, "agents": { "defaults": { "model": "openai/gpt-5.5" } }}Si vous voulez un backend CLI pour un modèle canonique, placez le runtime sur cette entrée de modèle :
{ "agents": { "defaults": { "model": "anthropic/claude-opus-4-8", "models": { "anthropic/claude-opus-4-8": { "agentRuntime": { "id": "claude-cli" } } } } }}Les remplacements par agent utilisent la même forme limitée au modèle :
{ "agents": { "list": [ { "id": "codex-only", "model": "openai/gpt-5.5", "models": { "openai/gpt-5.5": { "agentRuntime": { "id": "codex" } } } } ] }}Les anciens exemples de runtime sur tout l’agent comme celui-ci sont ignorés :
{ "agents": { "defaults": { "agentRuntime": { "id": "codex" } } }}Avec un runtime de Plugin explicite, une session échoue tôt lorsque le harnais demandé n’est pas enregistré, ne prend pas en charge le fournisseur/modèle résolu, ou échoue avant de produire des effets de bord de tour. C’est intentionnel pour les déploiements exclusivement Codex et pour les tests live qui doivent prouver que le chemin du serveur d’application Codex est réellement utilisé.
Ce paramètre contrôle uniquement le harnais d’agent intégré. Il ne désactive pas le routage des modèles spécifique aux fournisseurs pour les images, la vidéo, la musique, le TTS, les PDF ou autres.
Sessions natives et miroir de transcription
Un harnais peut conserver un identifiant de session natif, un identifiant de fil ou un jeton de reprise côté démon. Gardez cette liaison explicitement associée à la session OpenClaw, et continuez à répliquer la sortie assistant/outil visible par l’utilisateur dans la transcription OpenClaw.
La transcription OpenClaw reste la couche de compatibilité pour :
- l’historique de session visible dans les canaux
- la recherche et l’indexation des transcriptions
- le retour au harnais OpenClaw intégré lors d’un tour ultérieur
- le comportement générique de
/new,/resetet de suppression de session
Si votre harnais stocke une liaison auxiliaire, implémentez reset(...) afin qu’OpenClaw puisse
la supprimer lorsque la session OpenClaw propriétaire est réinitialisée.
Résultats d’outils et de médias
Le cœur construit la liste d’outils OpenClaw et la transmet à la tentative préparée. Lorsqu’un harnais exécute un appel d’outil dynamique, renvoyez le résultat de l’outil via la forme de résultat du harnais au lieu d’envoyer vous-même le média au canal.
Cela maintient les sorties texte, image, vidéo, musique, TTS, approbation et outils de messagerie sur le même chemin de livraison que les exécutions adossées à OpenClaw.
Limitations actuelles
- Le chemin d’import public est générique, mais certains alias de types tentative/résultat portent encore des noms hérités pour la compatibilité.
- L’installation de harnais tiers est expérimentale. Préférez les plugins de fournisseurs jusqu’à ce que vous ayez besoin d’un runtime de session natif.
- Le changement de harnais est pris en charge entre les tours. Ne changez pas de harnais au milieu d’un tour après le démarrage des outils natifs, des approbations, du texte assistant ou des envois de messages.