Transport
- WebSocket, tekstframes met JSON-payloads.
- Het eerste frame moet een
connect-verzoek 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 diagnostiek ingeschakeld zenden te grote inkomende frames en trage uitgaande bufferspayload.large-events uit voordat de Gateway het betrokken frame sluit of laat vallen. Deze events bewaren groottes, limieten, oppervlakken en veilige redencodes. Ze bewaren niet de berichttekst, inhoud van bijlagen, ruwe framebody, tokens, cookies of geheime waarden.
Handshake (connect)
Gateway → Client (pre-connect-challenge):connect-verzoek
een opnieuw te proberen UNAVAILABLE-fout retourneren met details.reason ingesteld op
"startup-sidecars" en retryAfterMs. Clients moeten die respons opnieuw proberen
binnen hun totale verbindingsbudget in plaats van deze als terminale
handshakefout te tonen.
server, features, snapshot en policy zijn allemaal vereist door het schema
(packages/gateway-protocol/src/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 URL’s voor Plugin-oppervlakken kunnen verlopen. Nodes kunnen
node.pluginSurface.refresh aanroepen met { "surface": "canvas" } om een verse
vermelding in pluginSurfaceUrls te ontvangen. De experimentele refactor van de Canvas-Plugin
ondersteunt het verouderde compatibiliteitspad canvasHostUrl, canvasCapability of
node.canvas.capability.refresh niet; huidige native clients en
gateways moeten Plugin-oppervlakken gebruiken.
Wanneer er geen devicetoken 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 RPC’s van het besturingsvlak en voorkomt dat verouderde CLI/device-koppelingsbaselines
lokaal backendwerk blokkeren, zoals updates van subagentsessies. Externe clients,
clients met browser-origin, nodeclients en expliciete device-token/device-identity-
clients gebruiken nog steeds de normale koppelings- en scope-upgradecontroles.
Wanneer een devicetoken wordt uitgegeven, bevat hello-ok ook:
operator.admin te verlenen. Het omvat operator.talk.secrets zodat de
native client de Talk-configuratie kan lezen die na bootstrap nodig is. Bredere
koppeling en admintoegang vereisen een aparte goedgekeurde operatorkoppeling of tokenflow.
Clients moeten hello-ok.auth.deviceTokens alleen bewaren
wanneer de connect bootstrap-auth gebruikte op vertrouwd transport zoals wss:// of
loopback/lokale koppeling.
Nodevoorbeeld
Framing
- Verzoek:
{type:"req", id, method, params} - Respons:
{type:"res", id, ok, payload|error} - Event:
{type:"event", event, payload, seq?, stateVersion?}
Rollen + scopes
Voor het volledige operator-scope-model, controles tijdens goedkeuring en semantiek voor gedeelde geheimen, zie Operator-scopes.Rollen
operator= client van het besturingsvlak (CLI/UI/automatisering).node= capability-host (camera/screen/canvas/system.run).
Scopes (operator)
Veelgebruikte scopes:operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
talk.config met includeSecrets: true vereist operator.talk.secrets
(of operator.admin).
Wanneer geheimen zijn opgenomen, moeten clients de actieve Talk-providercredential lezen
uit talk.resolved.config.apiKey; talk.providers.<id>.apiKey
blijft bronvormig en kan een SecretRef-object of een geredigeerde tekenreeks zijn.
Door Plugins geregistreerde Gateway RPC-methoden kunnen hun eigen operator-scope aanvragen, maar
gereserveerde core-adminprefixen (config.*, exec.approvals.*, wizard.*,
update.*) worden altijd opgelost naar operator.admin.
Methodescope is alleen de eerste poort. Sommige slashcommando’s die via
chat.send worden bereikt, passen daarbovenop strengere controles op commandoniveau toe. Persistente
schrijfbewerkingen met /config set en /config unset vereisen bijvoorbeeld operator.admin.
node.pair.approve heeft ook een extra scopecontrole tijdens goedkeuring bovenop de
basisscope van de methode:
- verzoeken zonder commando:
operator.pairing - verzoeken met niet-exec-nodecommando’s:
operator.pairing+operator.write - verzoeken die
system.run,system.run.prepareofsystem.whichbevatten:operator.pairing+operator.admin
Caps/commands/permissions (node)
Nodes declareren capability-claims tijdens het verbinden:caps: capability-categorieën op hoog niveau zoalscamera,canvas,screen,location,voiceentalk.commands: allowlist met commando’s voor invoke.permissions: granulaire schakelaars (bijv.screen.record,camera.capture).
Aanwezigheid
system-presenceretourneert vermeldingen met device-identiteit als sleutel.- Aanwezigheidsvermeldingen bevatten
deviceId,rolesenscopeszodat UI’s één rij per device kunnen tonen, zelfs wanneer het verbindt als zowel operator als node. node.listbevat optionele veldenlastSeenAtMsenlastSeenReason. Verbonden nodes rapporteren hun huidige verbindingstijd alslastSeenAtMsmet redenconnect; gekoppelde nodes kunnen ook duurzame achtergrondaanwezigheid rapporteren wanneer een vertrouwd node-event hun koppelingsmetadata bijwerkt.
Achtergrond-alive-event voor nodes
Nodes mogennode.event aanroepen met event: "node.presence.alive" om vast te leggen dat een gekoppelde node
actief was tijdens een achtergrondwake zonder deze als verbonden te markeren.
trigger is een gesloten enum: background, silent_push, bg_app_refresh,
significant_location, manual of connect. Onbekende triggertekenreeksen worden door de Gateway
genormaliseerd naar background vóór persistentie. Het event is alleen duurzaam voor geauthenticeerde node-
devicesessies; sessies zonder device of zonder koppeling retourneren handled: false.
Geslaagde gateways retourneren een gestructureerd resultaat:
{ "ok": true } retourneren voor node.event; clients moeten dit behandelen als een
bevestigde RPC, niet als duurzame persistentie van aanwezigheid.
Scoping van broadcastevents
Door de server gepushte WebSocket-broadcastevents zijn scope-gated zodat sessies met alleen koppelingsscope of alleen node-sessies niet passief sessie-inhoud ontvangen.- Chat-, agent- en tool-result-frames (inclusief gestreamde
agent-events en resultaten van toolcalls) vereisen minimaaloperator.read. Sessies zonderoperator.readslaan deze frames volledig over. - Door Plugins gedefinieerde
plugin.*-broadcasts zijn beperkt totoperator.writeofoperator.admin, afhankelijk van hoe de Plugin ze heeft geregistreerd. - Status- en transportevents (
heartbeat,presence,tick, connect/disconnect-levenscyclus, enz.) blijven onbeperkt zodat transportstatus zichtbaar blijft voor elke geauthenticeerde sessie. - Onbekende broadcasteventfamilies zijn standaard scope-gated (fail-closed), tenzij een geregistreerde handler ze expliciet versoepelt.
Veelgebruikte RPC-methodefamilies
Het openbare WS-oppervlak is breder dan de handshake-/auth-voorbeelden hierboven. Dit is geen gegenereerde dump —hello-ok.features.methods is een conservatieve
discoverlijst die is opgebouwd uit src/gateway/server-methods-list.ts plus geladen
methode-exports van Plugins/kanalen. Behandel het als featurediscovery, niet als een volledige
opsomming van src/gateway/server-methods/*.ts.
Systeem en identiteit
Systeem en identiteit
healthretourneert de gecachte of zojuist gepeilde gateway-gezondheidssnapshot.diagnostics.stabilityretourneert de recente begrensde recorder voor diagnostische stabiliteit. Deze bewaart operationele metadata zoals gebeurtenisnamen, aantallen, bytegroottes, geheugenmetingen, wachtrij-/sessiestatus, kanaal-/pluginnamen en sessie-id’s. Deze bewaart geen chattekst, webhook-bodies, tooluitvoer, ruwe request- of response-bodies, tokens, cookies of geheime waarden. Leesbereik voor operators is vereist.statusretourneert de Gateway-samenvatting in/status-stijl; gevoelige velden worden alleen opgenomen voor operatorclients met admin-bereik.gateway.identity.getretourneert de Gateway-apparaatidentiteit die wordt gebruikt door relay- en koppelingsflows.system-presenceretourneert de huidige aanwezigheidssnapshot voor verbonden operator-/Node-apparaten.system-eventvoegt een systeemgebeurtenis toe en kan aanwezigheidscontext bijwerken/uitzenden.last-heartbeatretourneert de laatst bewaarde heartbeat-gebeurtenis.set-heartbeatsschakelt Heartbeat-verwerking op de Gateway in of uit.
Modellen en gebruik
Modellen en gebruik
models.listretourneert de modelcatalogus die tijdens runtime is toegestaan. Geef{ "view": "configured" }door voor geconfigureerde modellen op picker-formaat (agents.defaults.modelseerst, daarnamodels.providers.*.models), of{ "view": "all" }voor de volledige catalogus.usage.statusretourneert gebruiksvensters/resterende-quotumsamenvattingen per provider.usage.costretourneert geaggregeerde kostengebruikssamenvattingen voor een datumbereik. GeefagentIddoor voor één agent, ofagentScope: "all"om geconfigureerde agents te aggregeren.doctor.memory.statusretourneert gereedheid van vectorgeheugen / gecachte embeddings voor de actieve standaard-agentwerkruimte. Geef{ "probe": true }of{ "deep": true }alleen door wanneer de caller expliciet een live ping naar de embeddingprovider wil. Dreaming-bewuste clients kunnen ook{ "agentId": "agent-id" }doorgeven om statistieken van de Dreaming-store te beperken tot een geselecteerde agentwerkruimte; alsagentIdwordt weggelaten, blijft de fallback naar de standaardagent behouden en worden geconfigureerde Dreaming-werkruimten geaggregeerd.doctor.memory.dreamDiary,doctor.memory.backfillDreamDiary,doctor.memory.resetDreamDiary,doctor.memory.resetGroundedShortTerm,doctor.memory.repairDreamingArtifactsendoctor.memory.dedupeDreamDiaryaccepteren optionele parameters{ "agentId": "agent-id" }voor Dreaming-weergaven/acties van een geselecteerde agent. WanneeragentIdwordt weggelaten, werken ze op de geconfigureerde standaard-agentwerkruimte.doctor.memory.remHarnessretourneert een begrensde, alleen-lezen REM-harnesspreview voor externe control-plane-clients. Deze kan werkruimtepaden, geheugenfragmenten, gerenderde grounded markdown en kandidaten voor diepe promotie bevatten, dus callers hebbenoperator.readnodig.sessions.usageretourneert gebruikssamenvattingen per sessie. GeefagentIddoor voor één agent, ofagentScope: "all"om geconfigureerde agents samen te tonen.sessions.usage.timeseriesretourneert tijdreeksgebruik voor één sessie.sessions.usage.logsretourneert gebruikslogitems voor één sessie.
Kanalen en loginhelpers
Kanalen en loginhelpers
channels.statusretourneert statusoverzichten voor ingebouwde + gebundelde kanalen/Plugins.channels.logoutlogt een specifiek kanaal/account uit wanneer het kanaal uitloggen ondersteunt.web.login.startstart een QR-/webloginflow voor de huidige webkanaalprovider die QR ondersteunt.web.login.waitwacht tot die QR-/webloginflow is voltooid en start het kanaal bij succes.push.testverstuurt een test-APNs-push naar een geregistreerde iOS-node.voicewake.getretourneert de opgeslagen wake-word-triggers.voicewake.setwerkt wake-word-triggers bij en zendt de wijziging uit.
Berichten en logs
Berichten en logs
sendis de directe RPC voor uitgaande aflevering voor kanaal-/account-/threadgerichte verzendingen buiten de chatrunner.logs.tailretourneert de geconfigureerde Gateway-bestandslogtail met cursor-/limiet- en max-byte-instellingen.
Talk en TTS
Talk en TTS
talk.catalogretourneert de alleen-lezen Talk-providercatalogus voor spraak, streamingtranscriptie en realtime spraak. Deze bevat canonieke provider-id’s, registry-aliassen, labels, geconfigureerde status, een optioneelready-resultaat op groepsniveau, blootgestelde model-/spraak-id’s, canonieke modi, transports, brain-strategieën en realtime audio-/capability-vlaggen zonder providergeheimen te retourneren of globale config te wijzigen. Huidige Gateways zettenreadynadat runtimeproviderselectie is toegepast; clients moeten afwezigheid ervan behandelen als niet-geverifieerd voor compatibiliteit met oudere Gateways.talk.configretourneert de effectieve Talk-configpayload;includeSecretsvereistoperator.talk.secrets(ofoperator.admin).talk.session.createmaakt een Talk-sessie die eigendom is van de Gateway voorrealtime/gateway-relay,transcription/gateway-relayofstt-tts/managed-room. Voorstt-tts/managed-roommoeten callers metoperator.writediesessionKeydoorgeven ookspawnedBydoorgeven voor zichtbaarheid van sessiesleutels binnen het bereik; het maken van eensessionKeyzonder bereik enbrain: "direct-tools"vereisenoperator.admin.talk.session.joinvalideert een managed-room-sessietoken, emitsession.ready- ofsession.replaced-gebeurtenissen waar nodig, en retourneert room-/sessiemetadata plus recente Talk-gebeurtenissen zonder het plaintext-token of de opgeslagen tokenhash.talk.session.appendAudiovoegt base64 PCM-invoeraudio toe aan realtime relay- en transcriptiesessies die eigendom zijn van de Gateway.talk.session.startTurn,talk.session.endTurnentalk.session.cancelTurnsturen de turn-levenscyclus van managed-room aan met afwijzing van verouderde turns voordat de status wordt gewist.talk.session.cancelOutputstopt audio-uitvoer van de assistant, primair voor VAD-gated barge-in in Gateway-relaysessies.talk.session.submitToolResultvoltooit een provider-toolcall die is geëmit door een realtime relaysessie die eigendom is van de Gateway. Geefoptions: { willContinue: true }door voor tussentijdse tooluitvoer wanneer er nog een definitief resultaat volgt, ofoptions: { suppressResponse: true }wanneer het toolresultaat de providercall moet afhandelen zonder nog een realtime assistant-response te starten.talk.session.steerstuurt actieve-run-spraakbesturing naar een agent-ondersteunde Talk-sessie die eigendom is van de Gateway. Deze accepteert{ sessionId, text, mode? }, waarbijmodestatus,steer,canceloffollowupis; een weggelaten modus wordt geclassificeerd op basis van de gesproken tekst.talk.session.closesluit een relay-, transcriptie- of managed-room-sessie die eigendom is van de Gateway en emit terminale Talk-gebeurtenissen.talk.modestelt de huidige Talk-modusstatus in voor WebChat-/Control UI-clients en zendt deze uit.talk.client.createmaakt een realtime providersessie die eigendom is van de client metwebrtcofprovider-websocket, terwijl de Gateway eigenaar blijft van config, credentials, instructies en toolbeleid.talk.client.toolCalllaat realtime transports die eigendom zijn van clients provider-toolcalls doorsturen naar Gateway-beleid. De eerste ondersteunde tool isopenclaw_agent_consult; clients ontvangen een run-id en wachten op normale chatlevenscyclusgebeurtenissen voordat ze het provider-specifieke toolresultaat indienen.talk.client.steerverstuurt actieve-run-spraakbesturing voor realtime transports die eigendom zijn van clients. De Gateway herleidt de actieve embedded run uitsessionKeyen retourneert een gestructureerd geaccepteerd/afgewezen resultaat in plaats van sturing stilzwijgend te laten vallen.talk.eventis het enkele Talk-gebeurteniskanaal voor realtime, transcriptie, STT/TTS, managed-room, telefonie en meetingadapters.talk.speaksynthetiseert spraak via de actieve Talk-spraakprovider.tts.statusretourneert de ingeschakelde TTS-status, actieve provider, fallbackproviders en providerconfigstatus.tts.providersretourneert de zichtbare TTS-providerinventaris.tts.enableentts.disableschakelen de TTS-voorkeursstatus in of uit.tts.setProviderwerkt de voorkeurs-TTS-provider bij.tts.convertvoert een eenmalige tekst-naar-spraakconversie uit.
Geheimen, config, update en wizard
Geheimen, config, update en wizard
secrets.reloadlost actieve SecretRefs opnieuw op en wisselt runtimegeheimstatus alleen bij volledig succes.secrets.resolvelost geheime toewijzingen voor commandotargets op voor een specifieke commando-/targetset.config.getretourneert de huidige configsnapshot en hash.config.setschrijft een gevalideerde configpayload.config.patchvoegt een gedeeltelijke configupdate samen. Destructieve array- vervanging vereist het betrokken pad inreplacePaths; geneste arrays onder array-items gebruiken[]-paden zoalsagents.list[].skills.config.applyvalideert + vervangt de volledige configpayload.config.schemaretourneert de live configschemapayload die wordt gebruikt door Control UI en CLI-tooling: schema,uiHints, versie en generatiemetadata, inclusief Plugin- + kanaalschemametadata wanneer de runtime deze kan laden. Het schema bevat veldmetadatatitle/descriptiondie is afgeleid van dezelfde labels en helptekst die door de UI worden gebruikt, inclusief geneste object-, wildcard-, array-item- enanyOf/oneOf/allOf-compositietakken wanneer overeenkomende velddocumentatie bestaat.config.schema.lookupretourneert een padgerichte lookup-payload voor één configpad: genormaliseerd pad, een oppervlakkig schemaknooppunt, overeenkomende hint +hintPath, optionelereloadKinden directe child-samenvattingen voor UI-/CLI-drilldown.reloadKindis een vanrestart,hotofnoneen weerspiegelt de Gateway-configherlaadplanner voor het gevraagde pad. Lookup-schemaknooppunten behouden de gebruikersgerichte docs en algemene validatievelden (title,description,type,enum,const,format,pattern, numerieke/string-/array-/objectgrenzen en vlaggen zoalsadditionalProperties,deprecated,readOnly,writeOnly). Child-samenvattingen tonenkey, genormaliseerdpath,type,required,hasChildren, optionelereloadKind, plus de overeenkomendehint/hintPath.update.runvoert de Gateway-updateflow uit en plant alleen een herstart wanneer de update zelf is geslaagd; callers met een sessie kunnencontinuationMessageopnemen zodat startup één vervolgturn van de agent hervat via de herstart-continuation-wachtrij. Package-manager-updates en supervised git-checkout-updates vanuit de control plane gebruiken een losgekoppelde managed-service-handoff in plaats van de package tree te vervangen of checkout-/builduitvoer binnen de live Gateway te wijzigen. Een gestarte handoff retourneertok: truemetresult.reason: "managed-service-handoff-started"enhandoff.status: "started"; niet-beschikbare of mislukte handoffs retournerenok: falsemetmanaged-service-handoff-unavailableofmanaged-service-handoff-failed, plushandoff.commandwanneer een handmatige shell-update vereist is. Een niet-beschikbare handoff betekent dat OpenClaw geen veilige supervisorgrens of duurzame service-identiteit heeft, zoalsOPENCLAW_SYSTEMD_UNITvoor systemd. Tijdens een gestarte handoff kan de herstartsentinel kortstats.reason: "restart-health-pending"rapporteren; de continuation wordt uitgesteld totdat de CLI de herstarte Gateway verifieert en de definitieveok-sentinel schrijft.update.statusververst en retourneert de nieuwste update-herstartsentinel, inclusief de draaiende versie na de herstart wanneer beschikbaar.wizard.start,wizard.next,wizard.statusenwizard.cancelstellen de onboardingwizard beschikbaar via WS RPC.
Agent- en werkruimtehelpers
Agent- en werkruimtehelpers
agents.listretourneert geconfigureerde agentvermeldingen, inclusief effectief model en runtimemetadata.agents.create,agents.updateenagents.deletebeheren agentrecords en werkruimtekoppeling.agents.files.list,agents.files.getenagents.files.setbeheren de bootstrap-werkruimtebestanden die voor een agent beschikbaar worden gemaakt.tasks.list,tasks.getentasks.cancelstellen het Gateway-taakregister beschikbaar aan SDK- en operatorclients.artifacts.list,artifacts.getenartifacts.downloadstellen uit transcripties afgeleide artifactsamenvattingen en downloads beschikbaar voor een expliciet bereik vansessionKey,runIdoftaskId. Run- en taakquery’s lossen de bijbehorende sessie aan serverzijde op en retourneren alleen transcriptiemedia met overeenkomende herkomst; onveilige of lokale URL-bronnen retourneren niet-ondersteunde downloads in plaats van ze aan serverzijde op te halen.environments.listenenvironments.statusstellen alleen-lezen Gateway-lokale en Node-omgevingsdetectie beschikbaar aan 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 agent-runtimebackend is geconfigureerd.sessions.subscribeensessions.unsubscribeschakelen abonnementen op sessiewijzigingsgebeurtenissen in of uit voor de huidige WS-client.sessions.messages.subscribeensessions.messages.unsubscribeschakelen abonnementen op transcriptie-/berichtgebeurtenissen in of uit voor één sessie.sessions.previewretourneert begrensde transcriptievoorbeelden voor specifieke sessiesleutels.sessions.describeretourneert één Gateway-sessierij voor een exacte sessiesleutel.sessions.resolvelost een sessiedoel op of canoniseert het.sessions.createmaakt een nieuwe sessievermelding.sessions.sendverzendt een bericht naar een bestaande sessie.sessions.steeris de variant voor onderbreken-en-bijsturen voor een actieve sessie.sessions.abortbreekt actief werk voor een sessie af. Een aanroeper kankeyplus optioneelrunIddoorgeven, of alleenrunIddoorgeven 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 richtlijntags worden uit zichtbare tekst verwijderd, plattetekst-XML-payloads voor tool-calls (inclusief<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>en afgekorte tool-callblokken) en gelekte ASCII-/full-width-modelbesturingstokens worden verwijderd, zuivere stille-tokenassistentrijen zoals exactNO_REPLY/no_replyworden weggelaten, en te grote rijen kunnen worden vervangen door placeholders. chat.message.getis de additieve begrensde lezer voor volledige berichten voor één zichtbare transcriptievermelding. Clients gevensessionKey, optioneelagentIdwanneer de sessieselectie agent-scoped is, plus een transcriptie-messageIddat eerder viachat.historyis getoond door, en de Gateway retourneert dezelfde weergavegenormaliseerde projectie zonder de lichte afkaplimiet van de geschiedenis wanneer de opgeslagen vermelding nog beschikbaar is en niet te groot is.chat.sendaccepteert voor één beurtfastMode: "auto"om snelle modus te gebruiken voor modelaanroepen die vóór de automatische afkapgrens zijn gestart, en daarna latere retry-, fallback-, tool-resultaat- of vervolgaanroepen zonder snelle modus te starten. De afkapgrens is standaard 60 seconden en kan per model worden geconfigureerd metagents.defaults.models["<provider>/<model>"].params.fastAutoOnSeconds. Eenchat.send-aanroeper kan voor één beurtfastAutoOnSecondsdoorgeven om de afkapgrens voor die aanvraag te overschrijven.
Apparaatkoppeling en apparaattokens
Apparaatkoppeling en apparaattokens
device.pair.listretourneert wachtende en goedgekeurde gekoppelde apparaten.device.pair.setupCodemaakt een mobiele setupcode en standaard een PNG-QR-data-URL. Dit vereistoperator.adminen wordt bewust weggelaten uit geadverteerde detectie. Het resultaat bevatsetupCode, optioneelqrDataUrl,gatewayUrl, het niet-geheimeauth-label enurlSource.device.pair.approve,device.pair.rejectendevice.pair.removebeheren records voor apparaatkoppeling.device.token.rotateroteert een gekoppeld apparaattoken binnen de grenzen van de goedgekeurde rol en het aanroepersbereik.device.token.revoketrekt een gekoppeld apparaattoken in binnen de grenzen van de goedgekeurde rol en het aanroepersbereik.
Node-koppeling, aanroepen en wachtend werk
Node-koppeling, aanroepen en wachtend werk
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 Node-status.node.renamewerkt een gekoppeld Node-label bij.node.invokestuurt een opdracht door naar een verbonden Node.node.invoke.resultretourneert het resultaat voor een aanroepaanvraag.node.eventdraagt door Nodes afkomstige gebeurtenissen terug naar de gateway.node.pending.pullennode.pending.ackzijn de wachtrij-API’s voor verbonden Nodes.node.pending.enqueueennode.pending.drainbeheren duurzaam wachtend werk voor offline/losgekoppelde Nodes.
Goedkeuringsfamilies
Goedkeuringsfamilies
exec.approval.request,exec.approval.get,exec.approval.listenexec.approval.resolvedekken eenmalige exec-goedkeuringsaanvragen plus opzoeken/herhalen van wachtende goedkeuringen.exec.approval.waitDecisionwacht op één wachtende exec-goedkeuring en retourneert de definitieve beslissing (ofnullbij time-out).exec.approvals.getenexec.approvals.setbeheren snapshots van het Gateway-beleid voor exec-goedkeuring.exec.approvals.node.getenexec.approvals.node.setbeheren Node-lokaal beleid voor exec-goedkeuring via Node-relayopdrachten.plugin.approval.request,plugin.approval.list,plugin.approval.waitDecisionenplugin.approval.resolvedekken door plugins gedefinieerde goedkeuringsflows.
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. cron.runblijft een enqueue-achtige RPC voor handmatige runs. Clients die voltooiingssemantiek nodig hebben, moeten de geretourneerderunIdlezen encron.runspollen.cron.runsaccepteert een optioneel niet-leegrunId-filter, zodat clients één in de wachtrij geplaatste handmatige run kunnen volgen zonder te racen met andere geschiedenisvermeldingen voor dezelfde taak.- Skills en tools:
commands.list,skills.*,tools.catalog,tools.effective,tools.invoke.
Veelvoorkomende gebeurtenisfamilies
chat: UI-chatupdates zoalschat.injecten andere uitsluitend-transcriptiechat- gebeurtenissen. In protocol v4 dragen deltapayloadsdeltaText;messageblijft de cumulatieve assistentsnapshot. Niet-prefixvervangingen zettenreplace=trueen gebruikendeltaTextals vervangende tekst.session.message,session.operationensession.tool: transcriptie, lopende sessiebewerking en event-streamupdates voor een geabonneerde sessie.sessions.changed: sessie-index of metadata gewijzigd.presence: updates van systeempresentiesnapshots.tick: periodieke keepalive-/livenessgebeurtenis.health: update van gateway-gezondheidssnapshot.heartbeat: update van Heartbeat-gebeurtenisstroom.cron: wijzigingsgebeurtenis voor Cron-run/taak.shutdown: gateway-afsluitmelding.node.pair.requested/node.pair.resolved: levenscyclus van Node-koppeling.node.invoke.request: broadcast van Node-aanroepaanvraag.device.pair.requested/device.pair.resolved: levenscyclus van gekoppeld apparaat.voicewake.changed: wake-word-triggerconfiguratie gewijzigd.exec.approval.requested/exec.approval.resolved: levenscyclus van exec-goedkeuring.plugin.approval.requested/plugin.approval.resolved: levenscyclus van plugin-goedkeuring.
Node-helpermethoden
- Nodes kunnen
skills.binsaanroepen om de huidige lijst met uitvoerbare Skill-bestanden op te halen voor auto-allow-controles.
RPC’s voor taakregister
Operatorclients kunnen Gateway-achtergrondtaakrecords inspecteren en annuleren via de RPC’s voor het taakregister. Deze methoden retourneren opgeschoonde taaksamenvattingen, geen ruwe runtimestatus.tasks.listvereistoperator.read.- Params: optioneel
status("queued","running","completed","failed","cancelled"of"timed_out") of een array van die statussen, optioneelagentId, optioneelsessionKey, optioneellimitvan1tot500, en optionele stringcursor. - Resultaat:
{ "tasks": TaskSummary[], "nextCursor"?: string }.
- Params: optioneel
tasks.getvereistoperator.read.- Params:
{ "taskId": string }. - Resultaat:
{ "task": TaskSummary }. - Ontbrekende taak-id’s retourneren de Gateway-foutvorm voor niet gevonden.
- Params:
tasks.cancelvereistoperator.write.- Params:
{ "taskId": string, "reason"?: string }. - Resultaat:
{ "found": boolean, "cancelled": boolean, "reason"?: string, "task"?: TaskSummary }. foundrapporteert of het register een overeenkomende taak had.cancelledrapporteert of de runtime annulering heeft geaccepteerd of vastgelegd.
- Params:
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. agentId identificeert de agent
die de taak uitvoert; sessionKey en ownerKey behouden aanvrager- en besturings-
context.
Operator-helpermethoden
- Operators kunnen
commands.list(operator.read) aanroepen om de runtime opdrachteninventaris voor een agent op te halen.agentIdis optioneel; laat dit weg om de standaard agentwerkruimte te lezen.scopebepaalt welk oppervlak de primairenameaanstuurt:textretourneert het primaire tekstopdrachttoken zonder de voorafgaande/nativeen het standaardpadbothretourneren providerbewuste native namen wanneer beschikbaar
textAliasesbevat exacte slash-aliassen zoals/modelen/m.nativeNamebevat de providerbewuste native opdrachtnaam wanneer die bestaat.provideris optioneel en beïnvloedt alleen native naamgeving plus beschikbaarheid van native Plugin-opdrachten.includeArgs=falselaat geserialiseerde argumentmetadata weg uit de respons.
- Operators kunnen
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 kunnen
tools.effective(operator.read) aanroepen om de runtime-effectieve toolinventaris voor een sessie op te halen.sessionKeyis verplicht.- De Gateway leidt vertrouwde runtimecontext server-side af uit de sessie in plaats van door de aanroeper aangeleverde auth- of aflevercontext te accepteren.
- De respons is een sessiegebonden, server-afgeleide projectie van de actieve inventaris, inclusief core-, Plugin-, kanaal- en al ontdekte MCP-servertools.
tools.effectiveis alleen-lezen voor MCP: het kan een warme MCP-catalogus van een sessie projecteren via het uiteindelijke toolbeleid, maar het maakt geen MCP-runtimes aan, verbindt geen transporten en geeft geentools/listuit. Als er geen overeenkomende warme catalogus bestaat, kan de respons een melding bevatten zoalsmcp-not-yet-connected,mcp-not-yet-listedofmcp-stale-catalog.- Effectieve toolvermeldingen gebruiken
source="core",source="plugin",source="channel"ofsource="mcp".
- Operators kunnen
tools.invoke(operator.write) aanroepen om één beschikbare tool uit te voeren via hetzelfde Gateway-beleidspad als/tools/invoke.nameis verplicht.args,sessionKey,agentId,confirmenidempotencyKeyzijn optioneel.- Als zowel
sessionKeyalsagentIdaanwezig zijn, moet de opgeloste sessieagent overeenkomen metagentId. - Core-wrappers die alleen voor eigenaren zijn, zoals
cron,gatewayennodes, vereisen eigenaar-/adminidentiteit (operator.admin), ook al is de methodetools.invokezelfoperator.write. - De respons is een SDK-gerichte envelope met
ok,toolName, optioneeloutputen getypeerdeerror-velden. Goedkeurings- of beleidsweigeringen retournerenok:falsein de payload in plaats van de Gateway-toolbeleidspijplijn te omzeilen.
- Operators kunnen
skills.status(operator.read) aanroepen om de zichtbare Skills-inventaris voor een agent op te halen.agentIdis optioneel; laat dit weg om de standaard agentwerkruimte te lezen.- De respons bevat geschiktheid, ontbrekende vereisten, configcontroles en opgeschoonde installatieopties zonder ruwe geheime waarden bloot te leggen.
- Operators kunnen
skills.searchenskills.detail(operator.read) aanroepen voor ClawHub-ontdekkingsmetadata. - Operators kunnen
skills.upload.begin,skills.upload.chunkenskills.upload.commit(operator.admin) aanroepen om een privé-Skill-archief te stagen voordat het wordt geïnstalleerd. Dit is een afzonderlijk admin-uploadpad voor vertrouwde clients, niet de normale ClawHub-Skill-installatiestroom, en is standaard uitgeschakeld tenzijskills.install.allowUploadedArchivesis ingeschakeld.skills.upload.begin({ kind: "skill-archive", slug, sizeBytes, sha256?, force?, idempotencyKey? })maakt een upload aan die aan die slug en force-waarde is gekoppeld.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 rondt alleen de upload af; het installeert de Skill niet.- Geüploade Skill-archieven zijn ziparchieven met een
SKILL.md-root. De interne mapnaam van het archief selecteert nooit het installatiedoel.
- Operators kunnen
skills.install(operator.admin) in drie modi aanroepen:- ClawHub-modus:
{ source: "clawhub", slug, version?, force? }installeert een Skill-map in de standaardskills/-directory van de agentwerkruimte. - Uploadmodus:
{ source: "upload", uploadId, slug, force?, sha256?, timeoutMs? }installeert een gecommitte upload in de directoryskills/<slug>van de standaard agentwerkruimte. De slug en force-waarde moeten overeenkomen met de oorspronkelijkeskills.upload.begin-aanvraag. Deze modus wordt geweigerd tenzijskills.install.allowUploadedArchivesis ingeschakeld. De instelling heeft geen invloed op ClawHub-installaties. - Gateway-installatiemodus:
{ name, installId, timeoutMs? }voert een gedeclareerdemetadata.openclaw.install-actie uit op de Gateway-host. Oudere clients kunnen nog steedsdangerouslyForceUnsafeInstallsturen; dit veld is verouderd, wordt alleen geaccepteerd voor protocolcompatibiliteit en wordt genegeerd. Gebruiksecurity.installPolicyvoor installatiebeslissingen die door de operator worden beheerd.
- ClawHub-modus:
- Operators kunnen
skills.update(operator.admin) in twee modi aanroepen:- ClawHub-modus werkt één gevolgde slug bij of alle gevolgde ClawHub-installaties in de standaard agentwerkruimte.
- Configmodus patcht waarden van
skills.entries.<skillKey>, zoalsenabled,apiKeyenenv.
models.list-weergaven
models.list accepteert een optionele parameter view:
- Weggelaten of
"default": huidig runtimegedrag. Alsagents.defaults.modelsis geconfigureerd, is de respons de toegestane catalogus, inclusief dynamisch ontdekte modellen voorprovider/*-vermeldingen. Anders is de respons de volledige Gateway-catalogus. "configured": gedrag met picker-grootte. Alsagents.defaults.modelsis geconfigureerd, heeft dat nog steeds voorrang, inclusief providergebonden ontdekking voorprovider/*-vermeldingen. Zonder allowlist gebruikt de respons explicietemodels.providers.*.models-vermeldingen, 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-aanvraag goedkeuring nodig heeft, broadcast de Gateway
exec.approval.requested. - Operatorclients lossen dit op door
exec.approval.resolveaan te roepen (vereist scopeoperator.approvals). - Voor
host=nodemoetexec.approval.requestsystemRunPlanbevatten (canoniekeargv/cwd/rawCommand/sessiemetadata). Aanvragen zondersystemRunPlanworden geweigerd. - Na goedkeuring gebruiken doorgestuurde
node.invoke system.run-aanroepen dat canoniekesystemRunPlanopnieuw als de gezaghebbende opdracht-/cwd-/sessiecontext. - Als een aanroeper
command,rawCommand,cwd,agentIdofsessionKeywijzigt tussen voorbereiding en de uiteindelijke goedgekeurdesystem.run-doorsturing, weigert de Gateway de run in plaats van de gewijzigde payload te vertrouwen.
Fallback voor agentaflevering
agent-aanvragen kunnendeliver=truebevatten om uitgaande aflevering aan te vragen.bestEffortDeliver=falsebehoudt strikt gedrag: onopgeloste of alleen-interne afleverdoelen retournerenINVALID_REQUEST.bestEffortDeliver=truestaat fallback naar uitvoering alleen binnen de sessie toe wanneer geen extern afleverbare route kan worden opgelost (bijvoorbeeld interne/webchat-sessies of dubbelzinnige multi-channel-configuraties).- Uiteindelijke
agent-resultaten kunnenresult.deliveryStatusbevatten wanneer aflevering is aangevraagd, met dezelfde statussensent,suppressed,partial_failedenfaileddie zijn gedocumenteerd vooropenclaw agent --json --deliver.
Versiebeheer
PROTOCOL_VERSIONstaat inpackages/gateway-protocol/src/version.ts.- Clients sturen
minProtocol+maxProtocol; de server weigert bereiken die het huidige protocol niet bevatten. Huidige clients en servers vereisen protocol v4. - 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 baseline voor clients van derden.
| Constante | Standaard | Bron |
|---|---|---|
PROTOCOL_VERSION | 4 | packages/gateway-protocol/src/version.ts |
MIN_CLIENT_PROTOCOL_VERSION | 4 | packages/gateway-protocol/src/version.ts |
| Aanvraag-time-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) |
| Fast-retry-klem na device-token-close | 250 ms | src/gateway/client.ts |
Graceperiode voor force-stop vóór terminate() | 250 ms | FORCE_STOP_TERMINATE_GRACE_MS |
Standaard-time-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 |
| Sluiting bij tick-time-out | code 4000 wanneer stilte langer is 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.
Auth
- Gedeelde-geheim Gateway-authenticatie gebruikt
connect.params.auth.tokenofconnect.params.auth.password, afhankelijk van de geconfigureerde authenticatiemodus. - Modi met identiteit, zoals Tailscale Serve
(
gateway.auth.allowTailscale: true) of niet-loopbackgateway.auth.mode: "trusted-proxy"voldoen aan de connect-authenticatiecontrole via requestheaders in plaats vanconnect.params.auth.*. - Private-ingress
gateway.auth.mode: "none"slaat gedeelde-geheim connect-authenticatie volledig over; stel die modus niet bloot via publieke/niet-vertrouwde ingress. - Na het koppelen geeft de Gateway een apparaat-token uit dat is beperkt tot de verbindingsrol
- scopes. Het wordt geretourneerd in
hello-ok.auth.deviceTokenen moet door de client worden bewaard voor toekomstige verbindingen.
- scopes. Het wordt geretourneerd in
- Clients moeten de 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-/status-toegang die al was verleend en voorkomt dat reconnects stilzwijgend worden teruggebracht tot een smallere 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 een expliciet gedeeld token, daarna een explicietedeviceToken, daarna een opgeslagen per-apparaat-token (gesleuteld opdeviceId+role).auth.bootstrapTokenwordt alleen verzonden wanneer geen van bovenstaande eenauth.tokenheeft opgeleverd. 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 endpoints: loopback, ofwss://met een vastgezettetlsFingerprint. Publiekewss://zonder pinning komt niet in aanmerking.
- Ingebouwde bootstrap met installatiecode retourneert het primaire node
hello-ok.auth.deviceTokenplus een begrensd operator-token inhello-ok.auth.deviceTokensvoor vertrouwde mobiele overdracht. Het operator-token bevatoperator.talk.secretsvoor native leesacties van Talk-configuratie, maar sluit scopes voor koppelingsmutaties enoperator.adminuit. - Terwijl een niet-baseline bootstrap met installatiecode wacht op goedkeuring, bevatten
PAIRING_REQUIRED-detailsrecommendedNextStep: "wait_then_retry",retryable: true, enpauseReconnect: false. Clients moeten met hetzelfde bootstrap-token blijven reconnecten totdat het verzoek is goedgekeurd of het token ongeldig wordt. - Bewaar
hello-ok.auth.deviceTokensalleen wanneer de verbinding bootstrap-authenticatie gebruikte via een vertrouwd transport zoalswss://of loopback/lokale koppeling. - Als een client een expliciete
deviceTokenof explicietescopesopgeeft, blijft die door de aanroeper gevraagde scopeset gezaghebbend; gecachte scopes worden alleen hergebruikt wanneer de client het opgeslagen per-apparaat-token hergebruikt. - Apparaat-tokens kunnen worden geroteerd/ingetrokken via
device.token.rotateendevice.token.revoke(vereist de scopeoperator.pairing). Het roteren of intrekken van een node- of andere niet-operatorrol vereist ookoperator.admin. 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. Gedeelde/admin-rotaties echoën het bearer-token niet.- Tokenuitgifte, rotatie en intrekking blijven begrensd tot de goedgekeurde rollenset die in de koppelingsvermelding van dat apparaat is vastgelegd; tokenmutatie kan geen apparaatrol uitbreiden of targeten die nooit door koppelingsgoedkeuring is verleend.
- Voor token-sessies van gekoppelde apparaten is apparaatbeheer self-scoped tenzij de
aanroeper ook
operator.adminheeft: niet-admin aanroepers kunnen alleen het operator-token voor hun eigen apparaatvermelding beheren. Node- en ander niet-operator-tokenbeheer is admin-only, zelfs voor het eigen apparaat van de aanroeper. device.token.rotateendevice.token.revokecontroleren ook de doel-operator token-scopeset tegen de huidige sessiescopes van de aanroeper. Niet-admin aanroepers kunnen geen breder operator-token roteren of intrekken dan ze zelf 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-apparaat-token.
- Als die retry mislukt, moeten clients automatische reconnect-lussen stoppen en guidance voor operatoractie tonen.
AUTH_SCOPE_MISMATCHbetekent dat het apparaat-token is herkend maar niet dekt wat voor de gevraagde rol/scopes nodig is. Clients moeten dit niet presenteren als een verkeerd token; vraag de operator om opnieuw te koppelen of het smallere/bredere scopecontract goed te keuren.
Apparaatidentiteit + koppeling
- Nodes moeten een stabiele apparaatidentiteit (
device.id) opnemen die is afgeleid van een keypair-vingerafdruk. - Gateways geven tokens uit per apparaat + rol.
- Koppelingsgoedkeuringen zijn vereist voor nieuwe apparaat-ID’s, tenzij lokale automatische goedkeuring is ingeschakeld.
- Automatische koppelingsgoedkeuring is gericht op directe local loopback-verbindingen.
- OpenClaw heeft ook een smal backend/container-local self-connect-pad voor vertrouwde helperflows met gedeeld geheim.
- Same-host tailnet- of LAN-verbindingen worden nog steeds als remote behandeld voor koppeling en vereisen goedkeuring.
- WS-clients nemen normaal gesproken
device-identiteit op tijdensconnect(operator + node). De enige operatoruitzonderingen 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 beveiligingsverlaging).- direct-loopback
gateway-clientbackend-RPC’s op het gereserveerde interne helperpad.
- Het weglaten van apparaatidentiteit heeft scopegevolgen. Wanneer een apparaatloze operatorverbinding
via een expliciet vertrouwenspad wordt toegestaan, wist OpenClaw nog steeds
zelfverklaarde scopes naar een lege set, tenzij dat pad een benoemde
uitzondering voor scopebehoud heeft. Scope-gated methoden falen dan met
missing scope. gateway.controlUi.dangerouslyDisableDeviceAuth=trueis een Control UI break-glass-pad voor scopebehoud. Het kent geen scopes toe aan willekeurige aangepaste backend- of CLI-vormige WebSocket-clients.- Het gereserveerde direct-loopback
gateway-clientbackend-helperpad behoudt scopes alleen voor interne lokale control-plane RPC’s; aangepaste backend-ID’s krijgen deze uitzondering niet. - Alle verbindingen moeten de door de server verstrekte
connect.challenge-nonce ondertekenen.
Diagnostiek voor apparaat-authenticatiemigratie
Voor legacy clients die nog pre-challenge ondertekeningsgedrag 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 | Ondertekeningspayload komt niet overeen met v2-payload. |
device signature expired | DEVICE_AUTH_SIGNATURE_EXPIRED | device-signature-stale | Ondertekende tijdstempel valt buiten toegestane skew. |
device identity mismatch | DEVICE_AUTH_DEVICE_ID_MISMATCH | device-id-mismatch | device.id komt niet overeen met vingerafdruk van publieke sleutel. |
device public key invalid | DEVICE_AUTH_PUBLIC_KEY_INVALID | device-public-key | Indeling/canonicalisatie van publieke sleutel mislukt. |
- Wacht altijd op
connect.challenge. - Onderteken de v2-payload die de server-nonce bevat.
- Stuur dezelfde nonce in
connect.params.device.nonce. - De voorkeurs-ondertekeningspayload is
v3, dieplatformendeviceFamilybindt naast de velden voor apparaat/client/rol/scopes/token/nonce. - Legacy
v2-handtekeningen blijven geaccepteerd voor compatibiliteit, maar metadata-pinning van gekoppelde apparaten blijft commandobeleid bij reconnects bepalen.
TLS + pinning
- TLS wordt ondersteund voor WS-verbindingen.
- Clients kunnen optioneel de cert-vingerafdruk van de gateway pinnen (zie
gateway.tlsconfig plusgateway.remote.tlsFingerprintof CLI--tls-fingerprint).
Scope
Dit protocol stelt de volledige gateway-API beschikbaar (status, kanalen, modellen, chat, agent, sessies, nodes, goedkeuringen, enz.). Het exacte oppervlak wordt gedefinieerd door de TypeBox-schema’s inpackages/gateway-protocol/src/schema.ts.