Het Gateway WS-protocol is het enige control plane + node-transport voor OpenClaw. Alle clients (CLI, web-UI, macOS-app, iOS/Android-nodes, headless nodes) verbinden via WebSocket en declareren hun rol + scope tijdens de handshake.Documentation Index
Fetch the complete documentation index at: https://docs2.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
Transport
- WebSocket, tekstframes met JSON-payloads.
- Het eerste frame moet een
connect-request zijn. - Pre-connect-frames zijn beperkt tot 64 KiB. Na een geslaagde handshake moeten clients
de limieten
hello-ok.policy.maxPayloadenhello-ok.policy.maxBufferedBytesvolgen. Met diagnostics ingeschakeld emitten te grote inkomende frames en trage uitgaande bufferspayload.large-events voordat de Gateway het betreffende frame sluit of laat vallen. Deze events bewaren groottes, limieten, oppervlakken en veilige reden-codes. Ze bewaren niet de berichttekst, bijlage-inhoud, ruwe frame-body, tokens, cookies of geheime waarden.
Handshake (connect)
Gateway → Client (pre-connect-challenge):connect-request
een opnieuw te proberen UNAVAILABLE-fout teruggeven met details.reason
ingesteld op "startup-sidecars" en retryAfterMs. Clients moeten die respons
opnieuw proberen binnen hun totale verbindingsbudget in plaats van deze als een definitieve
handshakefout te tonen.
server, features, snapshot en policy zijn allemaal vereist door het schema
(src/gateway/protocol/schema/frames.ts). auth is ook vereist en rapporteert
de onderhandelde rol/scopes. pluginSurfaceUrls is optioneel en koppelt Plugin-
oppervlaknamen, zoals canvas, aan gescopete gehoste URL’s.
Gescopete Plugin-oppervlak-URL’s kunnen verlopen. Nodes kunnen
node.pluginSurface.refresh aanroepen met { "surface": "canvas" } om een verse
entry in pluginSurfaceUrls te ontvangen. De experimentele Canvas-Plugin-refactor ondersteunt
het verouderde compatibiliteitspad canvasHostUrl, canvasCapability of
node.canvas.capability.refresh niet; huidige native clients en
gateways moeten Plugin-oppervlakken gebruiken.
Wanneer geen device-token wordt uitgegeven, rapporteert hello-ok.auth de onderhandelde
machtigingen zonder tokenvelden:
client.id: "gateway-client",
client.mode: "backend") mogen device weglaten op directe loopback-verbindingen wanneer
ze authenticeren met het gedeelde Gateway-token/wachtwoord. Dit pad is gereserveerd
voor interne control-plane-RPC’s en voorkomt dat verouderde CLI/device-pairingbaselines
lokaal backendwerk blokkeren, zoals updates van subagentsessies. Externe clients,
browser-origin-clients, nodeclients en expliciete device-token/device-identity-
clients gebruiken nog steeds de normale pairing- en scope-upgradecontroles.
Wanneer een device-token wordt uitgegeven, bevat hello-ok ook:
hello-ok.auth ook aanvullende
begrensde role entries in deviceTokens bevatten:
scopes: [] en blijft elk overgedragen operator-token begrensd tot de allowlist voor
bootstrapoperators (operator.approvals, operator.read,
operator.talk.secrets, operator.write). Bootstrap-scopecontroles blijven
role-prefixed: operator entries voldoen alleen aan operator-requests, en niet-operator-
rollen hebben nog steeds scopes nodig onder hun eigen rolprefix.
Node-voorbeeld
Framing
- Request:
{type:"req", id, method, params} - Response:
{type:"res", id, ok, payload|error} - Event:
{type:"event", event, payload, seq?, stateVersion?}
Rollen + scopes
Zie Operator-scopes voor het volledige operator-scope-model, controles tijdens approval en shared-secret-semantiek.Rollen
operator= control-plane-client (CLI/UI/automation).node= capability-host (camera/screen/canvas/system.run).
Scopes (operator)
Veelvoorkomende scopes:operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
talk.config met includeSecrets: true vereist operator.talk.secrets
(of operator.admin).
Door Plugin geregistreerde Gateway-RPC-methoden kunnen hun eigen operator-scope aanvragen, maar
gereserveerde core-admin-prefixen (config.*, exec.approvals.*, wizard.*,
update.*) worden altijd opgelost naar operator.admin.
Method scope is alleen de eerste gate. Sommige slash commands die via
chat.send worden bereikt, passen daarbovenop strengere command-level checks toe.
Bijvoorbeeld: persistente writes met /config set en /config unset vereisen
operator.admin.
node.pair.approve heeft ook een extra scopecontrole tijdens approval boven op de
basis-method-scope:
- requests zonder command:
operator.pairing - requests met niet-exec-nodecommands:
operator.pairing+operator.write - requests die
system.run,system.run.prepareofsystem.whichbevatten:operator.pairing+operator.admin
Caps/commands/permissions (node)
Nodes declareren capability-claims tijdens connect:caps: capability-categorieën op hoog niveau zoalscamera,canvas,screen,location,voiceentalk.commands: command-allowlist voor invoke.permissions: granulaire toggles (bijv.screen.record,camera.capture).
Presence
system-presenceretourneert entries met device identity als key.- Presence entries bevatten
deviceId,rolesenscopeszodat UI’s één rij per device kunnen tonen, zelfs wanneer het zowel als operator als node verbindt. node.listbevat optionele veldenlastSeenAtMsenlastSeenReason. Verbonden nodes rapporteren hun huidige verbindingstijd alslastSeenAtMsmet redenconnect; paired nodes kunnen ook duurzame background presence rapporteren wanneer een vertrouwd node-event hun pairingmetadata bijwerkt.
Node background alive event
Nodes kunnennode.event aanroepen met event: "node.presence.alive" om vast te leggen dat een paired node
tijdens een background wake alive was zonder deze als connected te markeren.
trigger is een gesloten enum: background, silent_push, bg_app_refresh,
significant_location, manual of connect. Onbekende triggerstrings worden door de Gateway
vóór persistence genormaliseerd naar background. Het event is alleen duurzaam voor geauthenticeerde node-
devicesessies; sessies zonder device of zonder pairing retourneren handled: false.
Succesvolle gateways retourneren een gestructureerd resultaat:
{ "ok": true } retourneren voor node.event; clients moeten dat behandelen als een
bevestigde RPC, niet als duurzame presence persistence.
Scoping van broadcast-events
Door de server gepushte WebSocket-broadcast-events zijn scope-gated zodat pairing-scoped of node-only sessies niet passief sessie-inhoud ontvangen.- Chat-, agent- en tool-result-frames (inclusief gestreamde
agent-events en tool call results) vereisen minimaaloperator.read. Sessies zonderoperator.readslaan deze frames volledig over. - Door Plugin gedefinieerde
plugin.*-broadcasts worden gated opoperator.writeofoperator.admin, afhankelijk van hoe de Plugin ze heeft geregistreerd. - Status- en transport-events (
heartbeat,presence,tick, connect/disconnect lifecycle, enz.) blijven onbeperkt zodat transportgezondheid voor elke geauthenticeerde sessie waarneembaar blijft. - Onbekende broadcast-eventfamilies zijn standaard scope-gated (fail-closed), tenzij een geregistreerde handler ze expliciet versoepelt.
Veelvoorkomende RPC-methodfamilies
Het publieke WS-oppervlak is breder dan de handshake-/auth-voorbeelden hierboven. Dit is geen gegenereerde dump —hello-ok.features.methods is een conservatieve
discoverylist gebouwd uit src/gateway/server-methods-list.ts plus geladen
Plugin-/channel-method-exports. Behandel het als feature discovery, niet als een volledige
opsomming van src/gateway/server-methods/*.ts.
Systeem en identiteit
Systeem en identiteit
healthretourneert de gecachete of vers geprobede Gateway-health-snapshot.diagnostics.stabilityretourneert de recente begrensde diagnostic stability recorder. Deze bewaart operationele metadata zoals eventnamen, aantallen, bytegroottes, memory readings, queue-/session state, channel-/Plugin-namen en session ids. Deze bewaart geen chattekst, Webhook-bodies, tool outputs, ruwe request- of response-bodies, tokens, cookies of geheime waarden. Operator read scope is vereist.statusretourneert de Gateway-samenvatting in/status-stijl; gevoelige velden worden alleen opgenomen voor operatorclients met admin-scope.gateway.identity.getretourneert de Gateway-device identity die wordt gebruikt door relay- en pairingflows.system-presenceretourneert de huidige presence-snapshot voor verbonden operator-/node-devices.system-eventvoegt een system event toe en kan presence context bijwerken/broadcasten.last-heartbeatretourneert het laatst persistente Heartbeat-event.set-heartbeatsschakelt Heartbeat-verwerking op de Gateway in of uit.
Modellen en gebruik
Modellen en gebruik
models.listretourneert de door de runtime toegestane modelcatalogus. Geef{ "view": "configured" }mee voor geconfigureerde modellen in picker-formaat (agents.defaults.modelseerst, daarnamodels.providers.*.models), of{ "view": "all" }voor de volledige catalogus.usage.statusretourneert gebruiksvensters van providers en samenvattingen van resterend quotum.usage.costretourneert samengevoegde kostengebruikssamenvattingen voor een datumbereik.doctor.memory.statusretourneert de gereedheid van vectorgeheugen / gecachte embeddings voor de actieve standaardagentwerkruimte. Geef{ "probe": true }of{ "deep": true }alleen mee wanneer de aanroeper expliciet een live ping naar de embeddingprovider wil.doctor.memory.remHarnessretourneert een begrensde, alleen-lezen REM-harnesspreview voor externe control-plane-clients. Deze kan werkruimtepaden, geheugenfragmenten, gerenderde gegronde markdown en kandidaten voor diepe promotie bevatten, dus aanroepers hebbenoperator.readnodig.sessions.usageretourneert gebruikssamenvattingen per sessie.sessions.usage.timeseriesretourneert tijdreeksgebruik voor één sessie.sessions.usage.logsretourneert gebruikslogvermeldingen voor één sessie.
Kanalen en aanmeldhulpen
Kanalen en aanmeldhulpen
channels.statusretourneert statussamenvattingen van ingebouwde + gebundelde kanalen/Plugins.channels.logoutmeldt een specifiek kanaal/account af wanneer het kanaal afmelden ondersteunt.web.login.startstart een QR-/webaanmeldingsflow voor de huidige webkanaalprovider met QR-ondersteuning.web.login.waitwacht tot die QR-/webaanmeldingsflow is voltooid en start het kanaal bij succes.push.testverzendt een test-APNs-push naar een geregistreerde iOS-node.voicewake.getretourneert de opgeslagen wake-wordtriggers.voicewake.setwerkt wake-wordtriggers bij en broadcast de wijziging.
Berichten en logs
Berichten en logs
sendis de directe RPC voor uitgaande aflevering voor verzendingen gericht op kanaal/account/thread buiten de chatrunner.logs.tailretourneert de geconfigureerde Gateway-bestandslogtail met cursor-/limiet- en max-bytebesturing.
Talk en TTS
Talk en TTS
talk.catalogretourneert de alleen-lezen Talk-providercatalogus voor spraak, streamingtranscriptie en realtime spraak. Deze bevat provider-id’s, labels, geconfigureerde status, blootgestelde model-/spraak-id’s, canonieke modi, transports, brain-strategieën en realtime audio-/capabilityvlaggen zonder providergeheimen te retourneren of globale configuratie te wijzigen.talk.configretourneert de effectieve Talk-configuratiepayload;includeSecretsvereistoperator.talk.secrets(ofoperator.admin).talk.session.createmaakt een door de Gateway beheerde Talk-sessie voorrealtime/gateway-relay,transcription/gateway-relayofstt-tts/managed-room.brain: "direct-tools"vereistoperator.admin.talk.session.joinvalideert een managed-room-sessietoken, zendt indien nodigsession.ready- ofsession.replaced-events uit, en retourneert room-/sessiemetadata plus recente Talk-events zonder het platte-teksttoken of de opgeslagen tokenhash.talk.session.appendAudiovoegt base64-PCM-invoeraudio toe aan door de Gateway beheerde realtime relay- en transcriptiesessies.talk.session.startTurn,talk.session.endTurnentalk.session.cancelTurnsturen de managed-room-turnlevenscyclus aan met stale-turn-afwijzing voordat de status wordt gewist.talk.session.cancelOutputstopt audio-uitvoer van de assistent, voornamelijk voor door VAD bewaakte barge-in in Gateway-relaysessies.talk.session.submitToolResultvoltooit een provider-toolaanroep die is uitgezonden door een door de Gateway beheerde realtime relaysessie. Geefoptions: { willContinue: true }mee voor tussentijdse tooluitvoer wanneer er nog een eindresultaat volgt, ofoptions: { suppressResponse: true }wanneer het toolresultaat de provideraanroep moet afhandelen zonder nog een realtime assistentrespons te starten.talk.session.closesluit een door de Gateway beheerde relay-, transcriptie- of managed-room-sessie en zendt terminale Talk-events uit.talk.modestelt de huidige Talk-modusstatus in voor WebChat-/Control UI-clients en broadcast deze.talk.client.createmaakt een door de client beheerde realtime providersessie metwebrtcofprovider-websocket, terwijl de Gateway eigenaar blijft van configuratie, referenties, instructies en toolbeleid.talk.client.toolCalllaat door de client beheerde realtime transports provider-toolaanroepen doorsturen naar Gateway-beleid. De eerste ondersteunde tool isopenclaw_agent_consult; clients ontvangen een run-id en wachten op normale chatlevenscyclus-events voordat ze het providerspecifieke toolresultaat indienen.talk.eventis het enkele Talk-eventkanaal voor realtime, transcriptie, STT/TTS, managed-room, telefonie en vergaderadapters.talk.speaksynthetiseert spraak via de actieve Talk-spraakprovider.tts.statusretourneert de ingeschakelde TTS-status, actieve provider, fallbackproviders en configuratiestatus van providers.tts.providersretourneert de zichtbare TTS-providerinventaris.tts.enableentts.disableschakelen de TTS-voorkeursstatus om.tts.setProviderwerkt de voorkeurs-TTS-provider bij.tts.convertvoert een eenmalige tekst-naar-spraakconversie uit.
Geheimen, configuratie, update en wizard
Geheimen, configuratie, update en wizard
secrets.reloadlost actieve SecretRefs opnieuw op en wisselt runtime-geheimstatus alleen bij volledig succes.secrets.resolvelost geheime toewijzingen met commandodoel op voor een specifieke commando-/doelset.config.getretourneert de huidige configuratiesnapshot en hash.config.setschrijft een gevalideerde configuratiepayload.config.patchvoegt een gedeeltelijke configuratie-update samen.config.applyvalideert + vervangt de volledige configuratiepayload.config.schemaretourneert de live configuratieschemapayload die wordt gebruikt door Control UI en CLI-tooling: schema,uiHints, versie en generatiemetadata, inclusief Plugin- + kanaalschemametadata wanneer de runtime die kan laden. Het schema bevat veldmetadata voortitle/description, afgeleid van dezelfde labels en helptekst die door de UI worden gebruikt, inclusief geneste objecten, jokertekens, array-items en compositiebranches vooranyOf/oneOf/allOfwanneer bijpassende velddocumentatie bestaat.config.schema.lookupretourneert een padgescopeerde lookuppayload voor één configuratiepad: genormaliseerd pad, een oppervlakkige schemanode, bijpassende hint +hintPath, en directe kindsamenvattingen voor UI-/CLI-drilldown. Lookupschemanodes behouden de gebruikersgerichte documentatie en algemene validatievelden (title,description,type,enum,const,format,pattern, numerieke/string-/array-/objectgrenzen en vlaggen zoalsadditionalProperties,deprecated,readOnly,writeOnly). Kindsamenvattingen tonenkey, genormaliseerdepath,type,required,hasChildren, plus de bijpassendehint/hintPath.update.runvoert de Gateway-updateflow uit en plant alleen een herstart wanneer de update zelf is geslaagd; aanroepers met een sessie kunnencontinuationMessageopnemen zodat het opstarten één vervolgturndialoog van de agent hervat via de herstartvervolgwachtrij. Updates via pakketbeheerders forceren na de pakketwisseling een niet-uitgestelde updateherstart zonder cooldown, zodat het oude Gateway-proces niet lazy blijft laden uit een vervangendist-boom.update.statusretourneert de nieuwste gecachte updateherstartsentinel, inclusief de draaiende versie na herstart wanneer beschikbaar.wizard.start,wizard.next,wizard.statusenwizard.cancelstellen de onboardingwizard beschikbaar via WS RPC.
Agent- en werkruimtehulpen
Agent- en werkruimtehulpen
agents.listretourneert geconfigureerde agentvermeldingen, inclusief effectief model en runtimemetadata.agents.create,agents.updateenagents.deletebeheren agentrecords en werkruimtebedrading.agents.files.list,agents.files.getenagents.files.setbeheren de bootstrapwerkruimtebestanden die voor een agent worden blootgesteld.tasks.list,tasks.getentasks.cancelstellen het Gateway-takenregister beschikbaar aan SDK- en operatorclients.artifacts.list,artifacts.getenartifacts.downloadstellen uit transcript afgeleide artifactsamenvattingen en downloads beschikbaar voor een expliciete scopesessionKey,runIdoftaskId. Run- en taakquery’s lossen de eigenaarssessie server-side op en retourneren alleen transcriptmedia met overeenkomende herkomst; onveilige of lokale URL-bronnen retourneren niet-ondersteunde downloads in plaats van server-side op te halen.environments.listenenvironments.statusstellen alleen-lezen Gateway-lokale en node-omgevingsdetectie beschikbaar voor SDK-clients.agent.identity.getretourneert de effectieve assistentidentiteit voor een agent of sessie.agent.waitwacht tot een run is voltooid en retourneert de terminale snapshot wanneer beschikbaar.
Sessiebesturing
Sessiebesturing
sessions.listretourneert de huidige sessie-index, inclusiefagentRuntime-metadata per rij wanneer een agentruntimebackend is geconfigureerd.sessions.subscribeensessions.unsubscribeschakelen sessiewijzigingseventabonnementen in of uit voor de huidige WS-client.sessions.messages.subscribeensessions.messages.unsubscribeschakelen transcript-/berichteneventabonnementen in of uit voor één sessie.sessions.previewretourneert begrensde transcriptpreviews voor specifieke sessiesleutels.sessions.describeretourneert één Gateway-sessierij voor een exacte sessiesleutel.sessions.resolvelost een sessiedoel op of maakt het canoniek.sessions.createmaakt een nieuwe sessievermelding.sessions.sendverzendt een bericht naar een bestaande sessie.sessions.steeris de interrupt-and-steer-variant voor een actieve sessie.sessions.abortbreekt actief werk voor een sessie af. Een aanroeper kankeyplus optioneelrunIdmeegeven, of alleenrunIdmeegeven voor actieve runs die de Gateway naar een sessie kan herleiden.sessions.patchwerkt sessiemetadata/-overrides bij en rapporteert het opgeloste canonieke model plus de effectieveagentRuntime.sessions.reset,sessions.deleteensessions.compactvoeren sessieonderhoud uit.sessions.getretourneert de volledige opgeslagen sessierij.- Chatuitvoering gebruikt nog steeds
chat.history,chat.send,chat.abortenchat.inject.chat.historyis weergavegenormaliseerd voor UI-clients: inline instructietags worden uit zichtbare tekst verwijderd, platte-tekst XML-payloads voor toolaanroepen (inclusief<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>en afgekorte toolaanroepblokken) en gelekte ASCII-/full-width modelbesturingstokens worden verwijderd, zuivere assistentrijen met stille tokens zoals exactNO_REPLY/no_replyworden weggelaten, en te grote rijen kunnen door placeholders worden vervangen.
Apparaatkoppeling en apparaattokens
Apparaatkoppeling en apparaattokens
device.pair.listretourneert in behandeling zijnde en goedgekeurde gekoppelde apparaten.device.pair.approve,device.pair.rejectendevice.pair.removebeheren apparaatkoppelingsrecords.device.token.rotateroteert een gekoppeld apparaattoken binnen de grenzen van de goedgekeurde rol en aanroeperscope.device.token.revoketrekt een gekoppeld apparaattoken in binnen de grenzen van de goedgekeurde rol en aanroeperscope.
Node-koppeling, invoke en werk in behandeling
Node-koppeling, invoke en werk in behandeling
node.pair.request,node.pair.list,node.pair.approve,node.pair.reject,node.pair.removeennode.pair.verifydekken node-koppeling en bootstrapverificatie.node.listennode.describeretourneren bekende/verbonden nodestatus.node.renamewerkt een gekoppeld nodelabel bij.node.invokestuurt een commando door naar een verbonden node.node.invoke.resultretourneert het resultaat voor een invoke-aanvraag.node.eventdraagt events die van een node afkomstig zijn terug naar de gateway.node.pending.pullennode.pending.ackzijn de wachtrij-API’s voor verbonden nodes.node.pending.enqueueennode.pending.drainbeheren duurzaam werk in behandeling voor offline/ontkoppelde nodes.
Goedkeuringsfamilies
Goedkeuringsfamilies
exec.approval.request,exec.approval.get,exec.approval.listenexec.approval.resolvedekken eenmalige exec-goedkeuringsaanvragen plus opzoeken/opnieuw afspelen van wachtende goedkeuringen.exec.approval.waitDecisionwacht op één wachtende exec-goedkeuring en retourneert de definitieve beslissing (ofnullbij timeout).exec.approvals.getenexec.approvals.setbeheren momentopnamen van het Gateway-beleid voor exec-goedkeuringen.exec.approvals.node.getenexec.approvals.node.setbeheren node-lokaal exec-goedkeuringsbeleid via node-relaycommando’s.plugin.approval.request,plugin.approval.list,plugin.approval.waitDecisionenplugin.approval.resolvedekken door Plugins gedefinieerde goedkeuringsstromen.
Automatisering, Skills en tools
Automatisering, Skills en tools
- Automatisering:
wakeplant een onmiddellijke of volgende-Heartbeat wake-tekstinjectie;cron.get,cron.list,cron.status,cron.add,cron.update,cron.remove,cron.run,cron.runsbeheren gepland werk. - Skills en tools:
commands.list,skills.*,tools.catalog,tools.effective,tools.invoke.
Algemene gebeurtenisfamilies
chat: UI-chatupdates zoalschat.injecten andere uitsluitend transcript-chatgebeurtenissen.session.messageensession.tool: transcript-/eventstream-updates voor een geabonneerde sessie.sessions.changed: sessie-index of metadata gewijzigd.presence: updates van momentopnamen van systeempresentie.tick: periodieke keepalive- / liveness-gebeurtenis.health: update van Gateway-gezondheidsmomentopname.heartbeat: update van Heartbeat-eventstream.cron: wijzigingsgebeurtenis voor Cron-run/-taak.shutdown: melding van Gateway-afsluiting.node.pair.requested/node.pair.resolved: levenscyclus van node-koppeling.node.invoke.request: broadcast van node-aanroepverzoek.device.pair.requested/device.pair.resolved: levenscyclus van gekoppeld apparaat.voicewake.changed: configuratie van wake-wordtrigger gewijzigd.exec.approval.requested/exec.approval.resolved: exec-goedkeuringslevenscyclus.plugin.approval.requested/plugin.approval.resolved: Plugin-goedkeuringslevenscyclus.
Node-helpermethoden
- Nodes mogen
skills.binsaanroepen om de huidige lijst met skill-executables voor auto-allow-controles op te halen.
Taakregister-RPC’s
Operatorclients kunnen Gateway-achtergrondtaakrecords inspecteren en annuleren via de taakregister-RPC’s. Deze methoden retourneren opgeschoonde taaksamenvattingen, geen ruwe runtime-status.tasks.listvereistoperator.read.- Parameters: optioneel
status("queued","running","completed","failed","cancelled"of"timed_out") of een array van die statussen, optioneelagentId, optioneelsessionKey, optioneellimitvan1tot500, en optioneel stringcursor. - Resultaat:
{ "tasks": TaskSummary[], "nextCursor"?: string }.
- Parameters: optioneel
tasks.getvereistoperator.read.- Parameters:
{ "taskId": string }. - Resultaat:
{ "task": TaskSummary }. - Ontbrekende taak-id’s retourneren de Gateway not-found-foutvorm.
- Parameters:
tasks.cancelvereistoperator.write.- Parameters:
{ "taskId": string, "reason"?: string }. - Resultaat:
{ "found": boolean, "cancelled": boolean, "reason"?: string, "task"?: TaskSummary }. foundmeldt of het register een overeenkomende taak had.cancelledmeldt of de runtime annulering heeft geaccepteerd of vastgelegd.
- Parameters:
TaskSummary bevat id, status en optionele metadata zoals kind,
runtime, title, agentId, sessionKey, childSessionKey, ownerKey,
runId, taskId, flowId, parentTaskId, sourceId, tijdstempels, voortgang,
terminale samenvatting en opgeschoonde fouttekst.
Operator-helpermethoden
- Operators mogen
commands.list(operator.read) aanroepen om de runtime commando-inventaris voor een agent op te halen.agentIdis optioneel; laat het weg om de standaard agent-werkruimte te lezen.scopebepaalt welk oppervlak de primairenametarget:textretourneert het primaire tekstcommandotoken zonder de voorafgaande/nativeen het standaardpadbothretourneren providerbewuste native namen wanneer beschikbaar
textAliasesbevat exacte slash-aliassen zoals/modelen/m.nativeNamebevat de providerbewuste native commandonaam wanneer die bestaat.provideris optioneel en beïnvloedt alleen native naamgeving plus native beschikbaarheid van Plugin-commando’s.includeArgs=falselaat geserialiseerde argumentmetadata weg uit de respons.
- Operators mogen
tools.catalog(operator.read) aanroepen om de runtime-toolcatalogus voor een agent op te halen. De respons bevat gegroepeerde tools en herkomstmetadata:source:coreofpluginpluginId: Plugin-eigenaar wanneersource="plugin"optional: of een Plugin-tool optioneel is
- Operators mogen
tools.effective(operator.read) aanroepen om de runtime-effectieve tool- inventaris voor een sessie op te halen.sessionKeyis vereist.- De Gateway leidt vertrouwde runtime-context af uit de sessie aan serverzijde in plaats van door de aanroeper geleverde auth- of leveringscontext te accepteren.
- De respons is sessiegebonden en weerspiegelt wat het actieve gesprek nu kan gebruiken, inclusief core-, Plugin- en kanaaltools.
- Operators mogen
tools.invoke(operator.write) aanroepen om één beschikbare tool aan te roepen via hetzelfde Gateway-beleidspad als/tools/invoke.nameis vereist.args,sessionKey,agentId,confirmenidempotencyKeyzijn optioneel.- Als zowel
sessionKeyalsagentIdaanwezig zijn, moet de opgeloste sessieagent overeenkomen metagentId. - De respons is een SDK-gerichte envelop met
ok,toolName, optioneleoutputen getypeerdeerror-velden. Goedkeurings- of beleidsweigeringen retournerenok:falsein de payload in plaats van de Gateway-toolbeleidspijplijn te omzeilen.
- Operators mogen
skills.status(operator.read) aanroepen om de zichtbare skill-inventaris voor een agent op te halen.agentIdis optioneel; laat het weg om de standaard agent-werkruimte te lezen.- De respons bevat geschiktheid, ontbrekende vereisten, configuratiecontroles en opgeschoonde installatieopties zonder ruwe geheime waarden bloot te leggen.
- Operators mogen
skills.searchenskills.detail(operator.read) aanroepen voor ClawHub-ontdekkingsmetadata. - Operators mogen
skills.upload.begin,skills.upload.chunkenskills.upload.commit(operator.admin) aanroepen om een privé-skillarchief klaar te zetten voordat het wordt geïnstalleerd. Dit is een apart admin-uploadpad voor vertrouwde clients, niet de normale ClawHub-skillinstallatiestroom, en is standaard uitgeschakeld tenzijskills.install.allowUploadedArchivesis ingeschakeld.skills.upload.begin({ kind: "skill-archive", slug, sizeBytes, sha256?, force?, idempotencyKey? })maakt een upload aan die is gekoppeld aan die slug en force-waarde.skills.upload.chunk({ uploadId, offset, dataBase64 })voegt bytes toe op de exacte gedecodeerde offset.skills.upload.commit({ uploadId, sha256? })verifieert de uiteindelijke grootte en SHA-256. Commit voltooit alleen de upload; het installeert de skill niet.- Geüploade skillarchieven zijn zip-archieven met een
SKILL.md-root. De interne directorynaam van het archief selecteert nooit het installatiedoel.
- Operators mogen
skills.install(operator.admin) aanroepen in drie modi:- ClawHub-modus:
{ source: "clawhub", slug, version?, force? }installeert een skillmap in deskills/-directory van de standaard agent-werkruimte. - Uploadmodus:
{ source: "upload", uploadId, slug, force?, sha256?, timeoutMs? }installeert een gecommitte upload in de directoryskills/<slug>van de standaard agent-werkruimte. De slug en force-waarde moeten overeenkomen met het oorspronkelijkeskills.upload.begin-verzoek. Deze modus wordt geweigerd tenzijskills.install.allowUploadedArchivesis ingeschakeld. De instelling heeft geen invloed op ClawHub-installaties. - Gateway-installermodus:
{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }voert een gedeclareerdemetadata.openclaw.install-actie uit op de Gateway-host.
- ClawHub-modus:
- Operators mogen
skills.update(operator.admin) aanroepen in twee modi:- ClawHub-modus werkt één bijgehouden slug of alle bijgehouden ClawHub-installaties bij in de standaard agent-werkruimte.
- Configuratiemodus patcht
skills.entries.<skillKey>-waarden zoalsenabled,apiKeyenenv.
models.list-weergaven
models.list accepteert een optionele parameter view:
- Weggelaten of
"default": huidig runtime-gedrag. Alsagents.defaults.modelsis geconfigureerd, is de respons de toegestane catalogus, inclusief dynamisch ontdekte modellen voorprovider/*-items. Anders is de respons de volledige Gateway-catalogus. "configured": picker-formaat gedrag. Alsagents.defaults.modelsis geconfigureerd, heeft dit nog steeds voorrang, inclusief providergebonden ontdekking voorprovider/*-items. Zonder allowlist gebruikt de respons explicietemodels.providers.*.models-items, met terugval naar de volledige catalogus alleen wanneer er geen geconfigureerde modelrijen bestaan."all": volledige Gateway-catalogus, waarbijagents.defaults.modelswordt omzeild. Gebruik dit voor diagnostiek en ontdekkings-UI’s, niet voor normale modelpickers.
Exec-goedkeuringen
- Wanneer een exec-verzoek goedkeuring nodig heeft, broadcast de Gateway
exec.approval.requested. - Operatorclients lossen dit op door
exec.approval.resolveaan te roepen (vereistoperator.approvals-scope). - Voor
host=nodemoetexec.approval.requestsystemRunPlanbevatten (canoniekeargv/cwd/rawCommand/sessiemetadata). Verzoeken zondersystemRunPlanworden geweigerd. - Na goedkeuring hergebruiken doorgestuurde
node.invoke system.run-aanroepen dat canoniekesystemRunPlanals de gezaghebbende opdracht-/cwd-/sessiecontext. - Als een aanroeper
command,rawCommand,cwd,agentIdofsessionKeymuteert tussen voorbereiding en de definitieve goedgekeurdesystem.run-forward, weigert de Gateway de run in plaats van de gemuteerde payload te vertrouwen.
Terugval voor agentlevering
agent-verzoeken kunnendeliver=truebevatten om uitgaande levering aan te vragen.bestEffortDeliver=falsebehoudt strikt gedrag: onopgeloste of alleen interne leveringsdoelen retournerenINVALID_REQUEST.bestEffortDeliver=truestaat terugval naar sessie-only uitvoering toe wanneer geen externe leverbare route kan worden opgelost (bijvoorbeeld interne/webchat-sessies of dubbelzinnige multikanaalconfiguraties).- Definitieve
agent-resultaten kunnenresult.deliveryStatusbevatten wanneer levering is aangevraagd, met dezelfde statussensent,suppressed,partial_failedenfaileddie zijn gedocumenteerd vooropenclaw agent --json --deliver.
Versiebeheer
PROTOCOL_VERSIONstaat insrc/gateway/protocol/version.ts.- Clients sturen
minProtocol+maxProtocol; de server weigert bereiken die het huidige protocol niet bevatten. Native clients gebruiken een v3-ondergrens zodat additieve v4-clients nog steeds v3-Gateways kunnen bereiken. - Schema’s + modellen worden gegenereerd uit TypeBox-definities:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
Clientconstanten
De referentieclient insrc/gateway/client.ts gebruikt deze standaardwaarden. Waarden zijn
stabiel binnen protocol v4 en vormen de verwachte basislijn voor externe clients.
| Constante | Standaardwaarde | Bron |
|---|---|---|
PROTOCOL_VERSION | 4 | src/gateway/protocol/version.ts |
MIN_CLIENT_PROTOCOL_VERSION | 3 | src/gateway/protocol/version.ts |
| Aanvraagtime-out (per RPC) | 30_000 ms | src/gateway/client.ts (requestTimeoutMs) |
| Preauth-/connect-challenge-time-out | 15_000 ms | src/gateway/handshake-timeouts.ts (config/env kan het gekoppelde server-/clientbudget verhogen) |
| Initiële reconnect-backoff | 1_000 ms | src/gateway/client.ts (backoffMs) |
| Maximale reconnect-backoff | 30_000 ms | src/gateway/client.ts (scheduleReconnect) |
| Klem voor snelle nieuwe poging na sluiten door apparaat-token | 250 ms | src/gateway/client.ts |
Respijtperiode voor geforceerd stoppen vóór terminate() | 250 ms | FORCE_STOP_TERMINATE_GRACE_MS |
Standaardtime-out voor stopAndWait() | 1_000 ms | STOP_AND_WAIT_TIMEOUT_MS |
Standaard tick-interval (vóór hello-ok) | 30_000 ms | src/gateway/client.ts |
| Sluiten bij tick-time-out | code 4000 wanneer stilte langer duurt dan tickIntervalMs * 2 | src/gateway/client.ts |
MAX_PAYLOAD_BYTES | 25 * 1024 * 1024 (25 MB) | src/gateway/server-constants.ts |
policy.tickIntervalMs, policy.maxPayload,
en policy.maxBufferedBytes in hello-ok; clients moeten die waarden respecteren
in plaats van de standaardwaarden van vóór de handshake.
Authenticatie
- Shared-secret Gateway-authenticatie gebruikt
connect.params.auth.tokenofconnect.params.auth.password, afhankelijk van de geconfigureerde authenticatiemodus. - Modi die identiteit dragen, zoals Tailscale Serve
(
gateway.auth.allowTailscale: true) of niet-loopbackgateway.auth.mode: "trusted-proxy"voldoen aan de connect-authenticatiecontrole via aanvraagheaders in plaats vanconnect.params.auth.*. - Private-ingress
gateway.auth.mode: "none"slaat shared-secret connect-authenticatie volledig over; stel die modus niet bloot op publieke/niet-vertrouwde ingress. - Na pairing geeft de Gateway een apparaat-token uit dat is beperkt tot de verbindingsrol
- scopes. Het wordt teruggegeven in
hello-ok.auth.deviceTokenen moet door de client worden bewaard voor toekomstige verbindingen.
- scopes. Het wordt teruggegeven in
- Clients moeten het primaire
hello-ok.auth.deviceTokenbewaren na elke geslaagde verbinding. - Opnieuw verbinden met dat opgeslagen apparaat-token moet ook de opgeslagen goedgekeurde scopeset voor dat token hergebruiken. Dit behoudt lees-/probe-/statustoegang die al was verleend en voorkomt dat reconnects stilzwijgend worden teruggebracht tot een beperktere impliciete admin-only scope.
- Client-side samenstelling van connect-authenticatie (
selectConnectAuthinsrc/gateway/client.ts):auth.passwordis orthogonaal en wordt altijd doorgestuurd wanneer ingesteld.auth.tokenwordt gevuld in prioriteitsvolgorde: eerst expliciet gedeeld token, daarna een explicietedeviceToken, daarna een opgeslagen per-device token (gesleuteld opdeviceId+role).auth.bootstrapTokenwordt alleen verzonden wanneer geen van bovenstaande eenauth.tokenheeft opgelost. Een gedeeld token of een opgelost apparaat-token onderdrukt dit.- Automatische promotie van een opgeslagen apparaat-token bij de eenmalige
AUTH_TOKEN_MISMATCH-retry is beperkt tot vertrouwde eindpunten — loopback, ofwss://met een gepindetlsFingerprint. Publiekewss://zonder pinning kwalificeert niet.
- Aanvullende vermeldingen in
hello-ok.auth.deviceTokenszijn bootstrap-handofftokens. Bewaar ze alleen wanneer de verbinding bootstrap-authenticatie gebruikte op een vertrouwd transport zoalswss://of loopback/lokale pairing. - Als een client een expliciete
deviceTokenof explicietescopeslevert, blijft die door de caller aangevraagde scopeset leidend; gecachte scopes worden alleen hergebruikt wanneer de client het opgeslagen per-device token hergebruikt. - Apparaat-tokens kunnen worden geroteerd/ingetrokken via
device.token.rotateendevice.token.revoke(vereist scopeoperator.pairing). device.token.rotateretourneert rotatiemetadata. Het echoot het vervangende bearer-token alleen voor same-device calls die al met dat apparaat-token zijn geauthenticeerd, zodat token-only clients hun vervanging kunnen bewaren voordat ze opnieuw verbinden. Shared/admin-rotaties echoën het bearer-token niet.- Tokenuitgifte, rotatie en intrekking blijven begrensd tot de goedgekeurde rollenset die is vastgelegd in de pairing-vermelding van dat apparaat; tokenmutatie kan geen apparaatrol uitbreiden of targeten die nooit door pairing-goedkeuring is verleend.
- Voor paired-device tokensessies is apparaatbeheer self-scoped, tenzij de
caller ook
operator.adminheeft: niet-admin-callers kunnen alleen hun eigen apparaatvermelding verwijderen/intrekken/roteren. device.token.rotateendevice.token.revokecontroleren ook de scopeset van het target operator-token tegen de huidige sessiescopes van de caller. Niet-admin-callers kunnen geen breder operator-token roteren of intrekken dan ze al hebben.- Authenticatiefouten bevatten
error.details.codeplus herstelhints:error.details.canRetryWithDeviceToken(boolean)error.details.recommendedNextStep(retry_with_device_token,update_auth_configuration,update_auth_credentials,wait_then_retry,review_auth_configuration)
- Clientgedrag voor
AUTH_TOKEN_MISMATCH:- Vertrouwde clients mogen één begrensde retry proberen met een gecacht per-device token.
- Als die retry faalt, moeten clients automatische reconnect-loops stoppen en operator-actieadvies tonen.
AUTH_SCOPE_MISMATCHbetekent dat het apparaat-token werd herkend maar de gevraagde rol/scopes niet dekt. Clients moeten dit niet presenteren als een ongeldig token; vraag de operator om opnieuw te pairen of het smallere/bredere scopecontract goed te keuren.
Apparaatidentiteit + pairing
- Nodes moeten een stabiele apparaatidentiteit (
device.id) opnemen die is afgeleid van een keypair-fingerprint. - Gateways geven tokens uit per apparaat + rol.
- Pairing-goedkeuringen zijn vereist voor nieuwe apparaat-ID’s, tenzij lokale auto-goedkeuring is ingeschakeld.
- Pairing-auto-goedkeuring is gericht op directe local loopback-verbindingen.
- OpenClaw heeft ook een smal backend-/container-lokaal self-connect-pad voor vertrouwde shared-secret helperflows.
- Same-host tailnet- of LAN-verbindingen worden nog steeds als remote behandeld voor pairing en vereisen goedkeuring.
- WS-clients nemen normaal gesproken
device-identiteit op tijdensconnect(operator + node). De enige operator-uitzonderingen zonder apparaat zijn expliciete vertrouwenspaden:gateway.controlUi.allowInsecureAuth=truevoor localhost-only onveilige HTTP-compatibiliteit.- geslaagde
gateway.auth.mode: "trusted-proxy"operator Control UI-authenticatie. gateway.controlUi.dangerouslyDisableDeviceAuth=true(break-glass, ernstige beveiligingsdowngrade).- direct-loopback
gateway-clientbackend-RPC’s geauthenticeerd met het gedeelde gatewaytoken/wachtwoord.
- Alle verbindingen moeten de door de server geleverde nonce
connect.challengeondertekenen.
Diagnostiek voor migratie van apparaatauthenticatie
Voor legacy clients die nog gedrag van vóór challenge-ondertekening gebruiken, retourneertconnect nu
DEVICE_AUTH_*-detailcodes onder error.details.code met een stabiele error.details.reason.
Veelvoorkomende migratiefouten:
| Bericht | details.code | details.reason | Betekenis |
|---|---|---|---|
device nonce required | DEVICE_AUTH_NONCE_REQUIRED | device-nonce-missing | Client liet device.nonce weg (of stuurde leeg). |
device nonce mismatch | DEVICE_AUTH_NONCE_MISMATCH | device-nonce-mismatch | Client ondertekende met een verouderde/verkeerde nonce. |
device signature invalid | DEVICE_AUTH_SIGNATURE_INVALID | device-signature | Signature-payload komt niet overeen met v2-payload. |
device signature expired | DEVICE_AUTH_SIGNATURE_EXPIRED | device-signature-stale | Ondertekende timestamp valt buiten toegestane skew. |
device identity mismatch | DEVICE_AUTH_DEVICE_ID_MISMATCH | device-id-mismatch | device.id komt niet overeen met de public-key-fingerprint. |
device public key invalid | DEVICE_AUTH_PUBLIC_KEY_INVALID | device-public-key | Public-key-formaat/canonicalisatie is mislukt. |
- Wacht altijd op
connect.challenge. - Onderteken de v2-payload die de servernonce bevat.
- Stuur dezelfde nonce in
connect.params.device.nonce. - De voorkeurs-signature-payload is
v3, die naast device/client/role/scopes/token/nonce-velden ookplatformendeviceFamilybindt. - Legacy
v2-handtekeningen blijven geaccepteerd voor compatibiliteit, maar paired-device metadata-pinning blijft commandobeleid bij reconnect bepalen.
TLS + pinning
- TLS wordt ondersteund voor WS-verbindingen.
- Clients kunnen optioneel de gateway-certfingerprint pinnen (zie
gateway.tlsconfiguratie plusgateway.remote.tlsFingerprintof CLI--tls-fingerprint).
Scope
Dit protocol exposeert de volledige gateway-API (status, kanalen, modellen, chat, agent, sessies, nodes, goedkeuringen, enz.). Het exacte oppervlak wordt gedefinieerd door de TypeBox-schema’s insrc/gateway/protocol/schema.ts.