Gateway
Gateway protokolü
Gateway WS protokolü, OpenClaw için tek kontrol düzlemi + node taşımasıdır. Tüm istemciler (CLI, web UI, macOS uygulaması, iOS/Android node'ları, başsız node'lar) WebSocket üzerinden bağlanır ve el sıkışma sırasında rollerini + kapsamlarını bildirir.
Taşıma
- WebSocket, JSON yükleri içeren metin çerçeveleri.
- İlk çerçeve mutlaka bir
connectisteği olmalıdır. - Bağlantı öncesi çerçeveler 64 KiB ile sınırlıdır. Başarılı bir el sıkışmadan sonra istemciler
hello-ok.policy.maxPayloadvehello-ok.policy.maxBufferedBytessınırlarına uymalıdır. Tanılama etkinleştirildiğinde, aşırı büyük gelen çerçeveler ve yavaş giden arabellekler, gateway etkilenen çerçeveyi kapatmadan veya düşürmeden öncepayload.largeolayları yayar. Bu olaylar boyutları, sınırları, yüzeyleri ve güvenli neden kodlarını tutar. İleti gövdesini, ek içeriklerini, ham çerçeve gövdesini, token'ları, çerezleri veya gizli değerleri tutmazlar.
El Sıkışma (connect)
Gateway → İstemci (bağlantı öncesi sorgu):
{
"type": "event",
"event": "connect.challenge",
"payload": { "nonce": "…", "ts": 1737264000000 }
}
İstemci → Gateway:
{
"type": "req",
"id": "…",
"method": "connect",
"params": {
"minProtocol": 4,
"maxProtocol": 4,
"client": {
"id": "cli",
"version": "1.2.3",
"platform": "macos",
"mode": "operator"
},
"role": "operator",
"scopes": ["operator.read", "operator.write"],
"caps": [],
"commands": [],
"permissions": {},
"auth": { "token": "…" },
"locale": "en-US",
"userAgent": "openclaw-cli/1.2.3",
"device": {
"id": "device_fingerprint",
"publicKey": "…",
"signature": "…",
"signedAt": 1737264000000,
"nonce": "…"
}
}
}
Gateway → İstemci:
{
"type": "res",
"id": "…",
"ok": true,
"payload": {
"type": "hello-ok",
"protocol": 4,
"server": { "version": "…", "connId": "…" },
"features": { "methods": ["…"], "events": ["…"] },
"snapshot": { "…": "…" },
"auth": {
"role": "operator",
"scopes": ["operator.read", "operator.write"]
},
"policy": {
"maxPayload": 26214400,
"maxBufferedBytes": 52428800,
"tickIntervalMs": 15000
}
}
}
Gateway hâlâ başlangıç yan bileşenlerini tamamlıyorken, connect isteği details.reason değeri "startup-sidecars" olarak ayarlanmış ve retryAfterMs içeren yeniden denenebilir bir UNAVAILABLE hatası döndürebilir. İstemciler bu yanıtı sonlandırıcı bir el sıkışma hatası olarak göstermek yerine genel bağlantı bütçeleri içinde yeniden denemelidir.
server, features, snapshot ve policy şema tarafından zorunlu tutulur (src/gateway/protocol/schema/frames.ts). auth da zorunludur ve üzerinde anlaşılmış rol/kapsamları bildirir. pluginSurfaceUrls isteğe bağlıdır ve canvas gibi Plugin yüzeyi adlarını kapsamlı barındırılan URL'lere eşler.
Kapsamlı Plugin yüzeyi URL'lerinin süresi dolabilir. Node'lar, pluginSurfaceUrls içinde yeni bir giriş almak için { "surface": "canvas" } ile node.pluginSurface.refresh çağırabilir. Deneysel Canvas Plugin yeniden düzenlemesi, kullanım dışı bırakılmış canvasHostUrl, canvasCapability veya node.canvas.capability.refresh uyumluluk yolunu desteklemez; güncel yerel istemciler ve gateway'ler Plugin yüzeylerini kullanmalıdır.
Cihaz token'ı verilmediğinde, hello-ok.auth token alanları olmadan üzerinde anlaşılmış izinleri bildirir:
{
"auth": {
"role": "operator",
"scopes": ["operator.read", "operator.write"]
}
}
Güvenilir aynı süreç arka uç istemcileri (client.id: "gateway-client", client.mode: "backend"), paylaşılan gateway token'ı/parolasıyla kimlik doğruladıklarında doğrudan loopback bağlantılarında device alanını atlayabilir. Bu yol, dahili kontrol düzlemi RPC'leri için ayrılmıştır ve eski CLI/cihaz eşleştirme temel değerlerinin alt ajan oturum güncellemeleri gibi yerel arka uç işlerini engellemesini önler. Uzak istemciler, tarayıcı kaynaklı istemciler, node istemcileri ve açık cihaz token'ı/cihaz kimliği istemcileri normal eşleştirme ve kapsam yükseltme kontrollerini kullanmaya devam eder.
Bir cihaz token'ı verildiğinde, hello-ok ayrıca şunu içerir:
{
"auth": {
"deviceToken": "…",
"role": "operator",
"scopes": ["operator.read", "operator.write"]
}
}
Güvenilir bootstrap devri sırasında, hello-ok.auth ayrıca deviceTokens içinde ek sınırlı rol girişleri de içerebilir:
{
"auth": {
"deviceToken": "…",
"role": "node",
"scopes": [],
"deviceTokens": [
{
"deviceToken": "…",
"role": "operator",
"scopes": ["operator.approvals", "operator.read", "operator.talk.secrets", "operator.write"]
}
]
}
}
Yerleşik node/operatör bootstrap akışı için birincil node token'ı scopes: [] olarak kalır ve devredilen tüm operatör token'ları bootstrap operatör izin listesiyle (operator.approvals, operator.read, operator.talk.secrets, operator.write) sınırlı kalır. Bootstrap kapsam kontrolleri rol önekli kalır: operatör girişleri yalnızca operatör isteklerini karşılar ve operatör olmayan roller hâlâ kendi rol önekleri altında kapsamlara ihtiyaç duyar.
Node örneği
{
"type": "req",
"id": "…",
"method": "connect",
"params": {
"minProtocol": 4,
"maxProtocol": 4,
"client": {
"id": "ios-node",
"version": "1.2.3",
"platform": "ios",
"mode": "node"
},
"role": "node",
"scopes": [],
"caps": ["camera", "canvas", "screen", "location", "voice"],
"commands": ["camera.snap", "canvas.navigate", "screen.record", "location.get"],
"permissions": { "camera.capture": true, "screen.record": false },
"auth": { "token": "…" },
"locale": "en-US",
"userAgent": "openclaw-ios/1.2.3",
"device": {
"id": "device_fingerprint",
"publicKey": "…",
"signature": "…",
"signedAt": 1737264000000,
"nonce": "…"
}
}
}
Çerçeveleme
- İstek:
{type:"req", id, method, params} - Yanıt:
{type:"res", id, ok, payload|error} - Olay:
{type:"event", event, payload, seq?, stateVersion?}
Yan etki oluşturan yöntemler idempotency anahtarları gerektirir (şemaya bakın).
Roller + kapsamlar
Tam operatör kapsam modeli, onay zamanı kontrolleri ve paylaşılan gizli anahtar semantiği için Operatör kapsamları bölümüne bakın.
Roller
operator= kontrol düzlemi istemcisi (CLI/UI/otomasyon).node= yetenek barındırıcısı (camera/screen/canvas/system.run).
Kapsamlar (operatör)
Yaygın kapsamlar:
operator.readoperator.writeoperator.adminoperator.approvalsoperator.pairingoperator.talk.secrets
includeSecrets: true ile talk.config, operator.talk.secrets (veya operator.admin) gerektirir.
Plugin tarafından kaydedilmiş gateway RPC yöntemleri kendi operatör kapsamlarını isteyebilir, ancak ayrılmış çekirdek yönetici önekleri (config.*, exec.approvals.*, wizard.*, update.*) her zaman operator.admin değerine çözümlenir.
Yöntem kapsamı yalnızca ilk kapıdır. chat.send üzerinden ulaşılan bazı eğik çizgi komutları bunun üzerine daha sıkı komut düzeyi kontroller uygular. Örneğin, kalıcı /config set ve /config unset yazmaları operator.admin gerektirir.
node.pair.approve ayrıca temel yöntem kapsamının üzerine ek bir onay zamanı kapsam kontrolüne sahiptir:
- komutsuz istekler:
operator.pairing - exec olmayan node komutları içeren istekler:
operator.pairing+operator.write system.run,system.run.prepareveyasystem.whichiçeren istekler:operator.pairing+operator.admin
Yetenekler/komutlar/izinler (node)
Node'lar bağlantı sırasında yetenek iddialarını bildirir:
caps:camera,canvas,screen,location,voicevetalkgibi üst düzey yetenek kategorileri.commands: çağırma için komut izin listesi.permissions: ayrıntılı açma/kapama değerleri (örn.screen.record,camera.capture).
Gateway bunları iddia olarak ele alır ve sunucu tarafı izin listelerini uygular.
Varlık
system-presence, cihaz kimliğine göre anahtarlanmış girişler döndürür.- Varlık girişleri
deviceId,rolesvescopesiçerir; böylece UI'lar hem operator hem de node olarak bağlandığında bile cihaz başına tek bir satır gösterebilir. node.list, isteğe bağlılastSeenAtMsvelastSeenReasonalanlarını içerir. Bağlı node'lar geçerli bağlantı zamanlarınıconnectnedeniylelastSeenAtMsolarak bildirir; eşlenmiş node'lar, güvenilir bir node olayı eşleştirme meta verilerini güncellediğinde kalıcı arka plan varlığı da bildirebilir.
Node arka plan canlı olayı
Node'lar, eşlenmiş bir node'un arka plan uyanışı sırasında bağlı olarak işaretlenmeden canlı olduğunu kaydetmek için event: "node.presence.alive" ile node.event çağırabilir.
{
"event": "node.presence.alive",
"payloadJSON": "{\"trigger\":\"silent_push\",\"sentAtMs\":1737264000000,\"displayName\":\"Peter's iPhone\",\"version\":\"2026.4.28\",\"platform\":\"iOS 18.4.0\",\"deviceFamily\":\"iPhone\",\"modelIdentifier\":\"iPhone17,1\",\"pushTransport\":\"relay\"}"
}
trigger kapalı bir enum'dur: background, silent_push, bg_app_refresh, significant_location, manual veya connect. Bilinmeyen trigger dizeleri kalıcılaştırmadan önce gateway tarafından background olarak normalleştirilir. Olay yalnızca kimliği doğrulanmış node cihaz oturumları için kalıcıdır; cihazsız veya eşlenmemiş oturumlar handled: false döndürür.
Başarılı gateway'ler yapılandırılmış bir sonuç döndürür:
{
"ok": true,
"event": "node.presence.alive",
"handled": true,
"reason": "persisted"
}
Eski gateway'ler node.event için hâlâ { "ok": true } döndürebilir; istemciler bunu kalıcı varlık kalıcılaştırması olarak değil, onaylanmış bir RPC olarak ele almalıdır.
Yayın olayı kapsamlandırması
Sunucu tarafından gönderilen WebSocket yayın olayları kapsam kapılıdır; böylece eşleştirme kapsamlı veya yalnızca node oturumları oturum içeriğini pasif olarak almaz.
- Sohbet, ajan ve araç sonucu çerçeveleri (akışlı
agentolayları ve araç çağrısı sonuçları dahil) en azoperator.readgerektirir.operator.readolmayan oturumlar bu çerçeveleri tamamen atlar. - Plugin tanımlı
plugin.*yayınları, Plugin'in bunları nasıl kaydettiğine bağlı olarakoperator.writeveyaoperator.adminile kapılanır. - Durum ve taşıma olayları (
heartbeat,presence,tick, bağlantı/bağlantı kesme yaşam döngüsü vb.) sınırsız kalır; böylece taşıma sağlığı her kimliği doğrulanmış oturum tarafından gözlemlenebilir kalır. - Bilinmeyen yayın olayı aileleri, kayıtlı bir işleyici açıkça gevşetmediği sürece varsayılan olarak kapsam kapılıdır (kapalı hata).
Her istemci bağlantısı kendi istemci başına sıra numarasını tutar; böylece farklı istemciler olay akışının farklı kapsam filtreli alt kümelerini görse bile yayınlar o sokette monoton sıralamayı korur.
Yaygın RPC yöntem aileleri
Genel WS yüzeyi, yukarıdaki el sıkışma/kimlik doğrulama örneklerinden daha geniştir. Bu üretilmiş bir döküm değildir — hello-ok.features.methods, yüklenen Plugin/kanal yöntem dışa aktarımlarına ek olarak src/gateway/server-methods-list.ts üzerinden oluşturulan tutucu bir keşif listesidir. Bunu src/gateway/server-methods/*.ts için tam bir numaralandırma değil, özellik keşfi olarak ele alın.
Sistem ve kimlik
health, önbelleğe alınmış veya yeni yoklanmış gateway sağlık anlık görüntüsünü döndürür.diagnostics.stability, son sınırlı tanılama kararlılığı kaydedicisini döndürür. Olay adları, sayılar, bayt boyutları, bellek okumaları, kuyruk/oturum durumu, kanal/Plugin adları ve oturum kimlikleri gibi operasyonel meta verileri tutar. Sohbet metnini, webhook gövdelerini, araç çıktılarını, ham istek veya yanıt gövdelerini, token'ları, çerezleri veya gizli değerleri tutmaz. Operatör okuma kapsamı gereklidir.status,/statustarzı gateway özetini döndürür; hassas alanlar yalnızca yönetici kapsamlı operatör istemcileri için dahil edilir.gateway.identity.get, relay ve eşleştirme akışları tarafından kullanılan gateway cihaz kimliğini döndürür.system-presence, bağlı operatör/node cihazları için geçerli varlık anlık görüntüsünü döndürür.system-event, bir sistem olayı ekler ve varlık bağlamını güncelleyebilir/yayınlayabilir.last-heartbeat, en son kalıcılaştırılmış Heartbeat olayını döndürür.set-heartbeats, gateway üzerinde Heartbeat işlemeyi açıp kapatır.
Modeller ve kullanım
models.list, çalışma zamanında izin verilen model kataloğunu döndürür. Seçici boyutundaki yapılandırılmış modeller için (agents.defaults.modelsönce, ardındanmodels.providers.*.models){ "view": "configured" }iletin veya tam katalog için{ "view": "all" }iletin.usage.status, sağlayıcı kullanım pencerelerini/kalan kota özetlerini döndürür.usage.cost, bir tarih aralığı için toplu maliyet kullanım özetlerini döndürür.doctor.memory.status, etkin varsayılan ajan çalışma alanı için vektör belleği / önbelleğe alınmış embedding hazırlığını döndürür. Yalnızca çağıran açıkça canlı bir embedding sağlayıcısı ping'i istediğinde{ "probe": true }veya{ "deep": true }iletin.doctor.memory.remHarness, uzaktan kontrol düzlemi istemcileri için sınırlı, salt okunur bir REM harness önizlemesi döndürür. Çalışma alanı yollarını, bellek parçacıklarını, işlenmiş dayanaklı markdown'u ve derin terfi adaylarını içerebilir; bu nedenle çağıranlarınoperator.readiznine ihtiyacı vardır.sessions.usage, oturum başına kullanım özetlerini döndürür.sessions.usage.timeseries, bir oturum için zaman serisi kullanımını döndürür.sessions.usage.logs, bir oturum için kullanım günlüğü girdilerini döndürür.
Kanallar ve oturum açma yardımcıları
channels.status, yerleşik + paketlenmiş kanal/plugin durum özetlerini döndürür.channels.logout, kanalın oturumu kapatmayı desteklediği belirli bir kanal/hesap için oturumu kapatır.web.login.start, geçerli QR destekli web kanalı sağlayıcısı için bir QR/web oturum açma akışı başlatır.web.login.wait, bu QR/web oturum açma akışının tamamlanmasını bekler ve başarı durumunda kanalı başlatır.push.test, kayıtlı bir iOS Node'una test APNs push bildirimi gönderir.voicewake.get, saklanan uyandırma sözcüğü tetikleyicilerini döndürür.voicewake.set, uyandırma sözcüğü tetikleyicilerini günceller ve değişikliği yayınlar.
Mesajlaşma ve günlükler
send, sohbet çalıştırıcısının dışında kanal/hesap/konu hedefli gönderimler için doğrudan giden teslimat RPC'sidir.logs.tail, imleç/sınır ve maksimum bayt denetimleriyle yapılandırılmış gateway dosya günlüğü kuyruğunu döndürür.
Konuşma ve TTS
talk.catalog, konuşma, akışlı transkripsiyon ve gerçek zamanlı ses için salt okunur Talk sağlayıcı kataloğunu döndürür. Sağlayıcı kimliklerini, etiketleri, yapılandırılmış durumu, açığa çıkarılmış model/ses kimliklerini, kanonik modları, aktarımları, beyin stratejilerini ve gerçek zamanlı ses/yetenek bayraklarını içerir; sağlayıcı sırlarını döndürmez veya genel yapılandırmayı değiştirmez.talk.config, etkili Talk yapılandırma yükünü döndürür;includeSecrets,operator.talk.secrets(veyaoperator.admin) gerektirir.talk.session.create,realtime/gateway-relay,transcription/gateway-relayveyastt-tts/managed-roomiçin Gateway'in sahip olduğu bir Talk oturumu oluşturur.brain: "direct-tools"içinoperator.admingerekir.talk.session.join, yönetilen oda oturum belirtecini doğrular, gerektiğindesession.readyveyasession.replacedolaylarını yayar ve düz metin belirteci ya da saklanan belirteç karması olmadan oda/oturum meta verilerini ve son Talk olaylarını döndürür.talk.session.appendAudio, Gateway'in sahip olduğu gerçek zamanlı relay ve transkripsiyon oturumlarına base64 PCM giriş sesi ekler.talk.session.startTurn,talk.session.endTurnvetalk.session.cancelTurn, durum temizlenmeden önce eski tur reddiyle yönetilen oda tur yaşam döngüsünü yürütür.talk.session.cancelOutput, öncelikle Gateway relay oturumlarında VAD kapılı araya girme için asistan ses çıkışını durdurur.talk.session.submitToolResult, Gateway'in sahip olduğu gerçek zamanlı relay oturumu tarafından yayılan bir sağlayıcı araç çağrısını tamamlar.talk.session.close, Gateway'in sahip olduğu relay, transkripsiyon veya yönetilen oda oturumunu kapatır ve son Talk olaylarını yayar.talk.mode, WebChat/Control UI istemcileri için geçerli Talk modu durumunu ayarlar/yayınlar.talk.client.create, Gateway yapılandırma, kimlik bilgileri, talimatlar ve araç politikasına sahipkenwebrtcveyaprovider-websocketkullanarak istemcinin sahip olduğu gerçek zamanlı sağlayıcı oturumu oluşturur.talk.client.toolCall, istemcinin sahip olduğu gerçek zamanlı aktarımların sağlayıcı araç çağrılarını Gateway politikasına iletmesine olanak tanır. Desteklenen ilk araçopenclaw_agent_consultaracıdır; istemciler sağlayıcıya özgü araç sonucunu göndermeden önce bir çalıştırma kimliği alır ve normal sohbet yaşam döngüsü olaylarını bekler.talk.event, gerçek zamanlı, transkripsiyon, STT/TTS, yönetilen oda, telefon ve toplantı bağdaştırıcıları için tek Talk olay kanalıdır.talk.speak, etkin Talk konuşma sağlayıcısı üzerinden konuşma sentezler.tts.status, TTS etkin durumunu, etkin sağlayıcıyı, yedek sağlayıcıları ve sağlayıcı yapılandırma durumunu döndürür.tts.providers, görünür TTS sağlayıcı envanterini döndürür.tts.enablevetts.disable, TTS tercihleri durumunu açıp kapatır.tts.setProvider, tercih edilen TTS sağlayıcısını günceller.tts.convert, tek seferlik metinden konuşmaya dönüştürme çalıştırır.
Sırlar, yapılandırma, güncelleme ve sihirbaz
secrets.reload, etkin SecretRef'leri yeniden çözümler ve çalışma zamanı sır durumunu yalnızca tam başarı durumunda değiştirir.secrets.resolve, belirli bir komut/hedef kümesi için komut hedefli sır atamalarını çözümler.config.get, geçerli yapılandırma anlık görüntüsünü ve karmayı döndürür.config.set, doğrulanmış bir yapılandırma yükü yazar.config.patch, kısmi bir yapılandırma güncellemesini birleştirir.config.apply, tam yapılandırma yükünü doğrular + değiştirir.config.schema, Control UI ve CLI araçlarının kullandığı canlı yapılandırma şeması yükünü döndürür: şema,uiHints, sürüm ve oluşturma meta verileri; çalışma zamanı yükleyebildiğinde plugin + kanal şeması meta verileri dahil. Şema, eşleşen alan dokümantasyonu bulunduğunda iç içe nesne, joker karakter, dizi öğesi veanyOf/oneOf/allOfbileşim dalları dahil olmak üzere UI tarafından kullanılan aynı etiketlerden ve yardım metninden türetilen alantitle/descriptionmeta verilerini içerir.config.schema.lookup, bir yapılandırma yolu için yol kapsamlı bir arama yükü döndürür: normalleştirilmiş yol, sığ bir şema düğümü, eşleşen ipucu +hintPathve UI/CLI ayrıntıya inme için doğrudan alt özetler. Arama şeması düğümleri kullanıcıya dönük dokümanları ve yaygın doğrulama alanlarını (title,description,type,enum,const,format,pattern, sayısal/dize/dizi/nesne sınırları veadditionalProperties,deprecated,readOnly,writeOnlygibi bayraklar) korur. Alt özetlerkey, normalleştirilmişpath,type,required,hasChildrenile eşleşenhint/hintPathdeğerlerini açığa çıkarır.update.run, gateway güncelleme akışını çalıştırır ve yalnızca güncellemenin kendisi başarılı olduğunda yeniden başlatma zamanlar; oturumu olan çağıranlarcontinuationMessageekleyebilir, böylece başlangıç yeniden başlatma devam kuyruğu üzerinden bir takip ajan turunu sürdürür. Paket yöneticisi güncellemeleri, paket değişimi sonrasında eski Gateway sürecinin değiştirilmiş birdistağacından tembel yükleme yapmayı sürdürmemesi için ertelenmeyen, bekleme süresiz bir güncelleme yeniden başlatmasını zorunlu kılar.update.status, kullanılabiliyorsa yeniden başlatma sonrası çalışan sürüm dahil olmak üzere en son önbelleğe alınmış güncelleme yeniden başlatma işaretçisini döndürür.wizard.start,wizard.next,wizard.statusvewizard.cancel, işe alıştırma sihirbazını WS RPC üzerinden açığa çıkarır.
Ajan ve çalışma alanı yardımcıları
agents.list, etkili model ve çalışma zamanı meta verileri dahil olmak üzere yapılandırılmış ajan girdilerini döndürür.agents.create,agents.updateveagents.delete, ajan kayıtlarını ve çalışma alanı bağlantılarını yönetir.agents.files.list,agents.files.getveagents.files.set, bir ajan için açığa çıkarılan önyükleme çalışma alanı dosyalarını yönetir.artifacts.list,artifacts.getveartifacts.download, açık birsessionKey,runIdveyataskIdkapsamı için transkriptten türetilmiş yapıt özetlerini ve indirmeleri açığa çıkarır. Çalıştırma ve görev sorguları, sahip oturumu sunucu tarafında çözümler ve yalnızca eşleşen kökene sahip transkript medyasını döndürür; güvenli olmayan veya yerel URL kaynakları, sunucu tarafında getirilmek yerine desteklenmeyen indirmeler döndürür.environments.listveenvironments.status, SDK istemcileri için salt okunur Gateway yerel ve Node ortam keşfini açığa çıkarır.agent.identity.get, bir ajan veya oturum için etkili asistan kimliğini döndürür.agent.wait, bir çalıştırmanın bitmesini bekler ve kullanılabiliyorsa son anlık görüntüyü döndürür.
Oturum denetimi
sessions.list, bir ajan çalışma zamanı arka ucu yapılandırıldığında satır başınaagentRuntimemeta verileri dahil olmak üzere geçerli oturum dizinini döndürür.sessions.subscribevesessions.unsubscribe, geçerli WS istemcisi için oturum değişikliği olay aboneliklerini açıp kapatır.sessions.messages.subscribevesessions.messages.unsubscribe, bir oturum için transkript/mesaj olay aboneliklerini açıp kapatır.sessions.preview, belirli oturum anahtarları için sınırlı transkript önizlemeleri döndürür.sessions.describe, tam bir oturum anahtarı için bir Gateway oturum satırı döndürür.sessions.resolve, bir oturum hedefini çözümler veya kanonikleştirir.sessions.create, yeni bir oturum girdisi oluşturur.sessions.send, mevcut bir oturuma mesaj gönderir.sessions.steer, etkin bir oturum için kesme ve yönlendirme varyantıdır.sessions.abort, bir oturum için etkin işi iptal eder. Çağıran,keyartı isteğe bağlırunIdiletebilir veya Gateway'in bir oturuma çözümleyebildiği etkin çalıştırmalar için yalnızcarunIdiletebilir.sessions.patch, oturum meta verilerini/geçersiz kılmalarını günceller ve çözümlenen kanonik modeli artı etkiliagentRuntimedeğerini bildirir.sessions.reset,sessions.deletevesessions.compact, oturum bakımını gerçekleştirir.sessions.get, saklanan tam oturum satırını döndürür.- Sohbet yürütmesi hâlâ
chat.history,chat.send,chat.abortvechat.injectkullanır.chat.history, UI istemcileri için görüntü normalleştirmelidir: satır içi yönerge etiketleri görünür metinden kaldırılır, düz metin araç çağrısı XML yükleri (<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>,<function_calls>...</function_calls>ve kesilmiş araç çağrısı blokları dahil) ve sızmış ASCII/tam genişlikli model denetim belirteçleri kaldırılır, tamNO_REPLY/no_replygibi saf sessiz belirteçli asistan satırları atlanır ve aşırı büyük satırlar yer tutucularla değiştirilebilir.
Cihaz eşleştirme ve cihaz belirteçleri
device.pair.list, bekleyen ve onaylanmış eşleştirilmiş cihazları döndürür.device.pair.approve,device.pair.rejectvedevice.pair.remove, cihaz eşleştirme kayıtlarını yönetir.device.token.rotate, eşleştirilmiş bir cihaz belirtecini onaylanmış rolü ve çağıran kapsamı sınırları içinde döndürür.device.token.revoke, eşleştirilmiş bir cihaz belirtecini onaylanmış rolü ve çağıran kapsamı sınırları içinde iptal eder.
Node eşleştirme, çağırma ve bekleyen iş
node.pair.request,node.pair.list,node.pair.approve,node.pair.reject,node.pair.removevenode.pair.verify, Node eşleştirmeyi ve önyükleme doğrulamasını kapsar.node.listvenode.describe, bilinen/bağlı Node durumunu döndürür.node.rename, eşleştirilmiş bir Node etiketini günceller.node.invoke, bağlı bir Node'a komut iletir.node.invoke.result, bir çağırma isteği için sonucu döndürür.node.event, Node kaynaklı olayları gateway'e geri taşır.node.pending.pullvenode.pending.ack, bağlı Node kuyruğu API'leridir.node.pending.enqueuevenode.pending.drain, çevrimdışı/bağlantısı kesilmiş Node'lar için dayanıklı bekleyen işi yönetir.
Onay aileleri
exec.approval.request,exec.approval.get,exec.approval.listveexec.approval.resolve, tek seferlik exec onay isteklerini ve bekleyen onay arama/yeniden oynatmayı kapsar.exec.approval.waitDecision, bekleyen bir exec onayını bekler ve son kararı döndürür (veya zaman aşımındanull).exec.approvals.getveexec.approvals.set, gateway exec onay ilkesi anlık görüntülerini yönetir.exec.approvals.node.getveexec.approvals.node.set, node relay komutları üzerinden node yerel exec onay ilkesini yönetir.plugin.approval.request,plugin.approval.list,plugin.approval.waitDecisionveplugin.approval.resolve, Plugin tarafından tanımlanan onay akışlarını kapsar.
Otomasyon, Skills ve araçlar
- Otomasyon:
wake, anında veya bir sonraki Heartbeat'te wake metin enjeksiyonu zamanlar;cron.list,cron.status,cron.add,cron.update,cron.remove,cron.run,cron.runszamanlanmış işleri yönetir. - Skills ve araçlar:
commands.list,skills.*,tools.catalog,tools.effective,tools.invoke.
Yaygın olay aileleri
chat:chat.injectgibi UI sohbet güncellemeleri ve diğer yalnızca transkript sohbet olayları.session.messagevesession.tool: abone olunan bir oturum için transkript/olay akışı güncellemeleri.sessions.changed: oturum dizini veya meta veriler değişti.presence: sistem varlık anlık görüntüsü güncellemeleri.tick: periyodik keepalive / canlılık olayı.health: gateway sağlık anlık görüntüsü güncellemesi.heartbeat: Heartbeat olay akışı güncellemesi.cron: Cron çalıştırma/iş değişikliği olayı.shutdown: gateway kapatma bildirimi.node.pair.requested/node.pair.resolved: node eşleştirme yaşam döngüsü.node.invoke.request: node çağırma isteği yayını.device.pair.requested/device.pair.resolved: eşleştirilmiş cihaz yaşam döngüsü.voicewake.changed: wake-word tetikleyici yapılandırması değişti.exec.approval.requested/exec.approval.resolved: exec onay yaşam döngüsü.plugin.approval.requested/plugin.approval.resolved: Plugin onayı yaşam döngüsü.
Node yardımcı yöntemleri
- Node'lar, otomatik izin kontrolleri için geçerli skill yürütülebilirleri listesini
almak üzere
skills.binsçağırabilir.
Operatör yardımcı yöntemleri
- Operatörler, bir agent için çalışma zamanı komut envanterini almak üzere
commands.list(operator.read) çağırabilir.agentIdisteğe bağlıdır; varsayılan agent çalışma alanını okumak için atlayın.scope, birincilnamehedefinin hangi yüzeyi hedeflediğini denetler:text, başındaki/olmadan birincil metin komutu belirtecini döndürürnativeve varsayılanbothyolu, mevcut olduğunda sağlayıcıya duyarlı yerel adları döndürür
textAliases,/modelve/mgibi tam slash takma adlarını taşır.nativeName, varsa sağlayıcıya duyarlı yerel komut adını taşır.provideristeğe bağlıdır ve yalnızca yerel adlandırmayı ve yerel Plugin komut kullanılabilirliğini etkiler.includeArgs=false, yanıttan serileştirilmiş argüman meta verilerini çıkarır.
- Operatörler, bir agent için çalışma zamanı araç kataloğunu almak üzere
tools.catalog(operator.read) çağırabilir. Yanıt, gruplanmış araçları ve köken meta verilerini içerir:source:coreveyapluginpluginId:source="plugin"olduğunda Plugin sahibioptional: bir Plugin aracının isteğe bağlı olup olmadığı
- Operatörler, bir oturum için çalışma zamanında etkin araç
envanterini almak üzere
tools.effective(operator.read) çağırabilir.sessionKeyzorunludur.- Gateway, çağıranın sağladığı auth veya teslim bağlamını kabul etmek yerine güvenilir çalışma zamanı bağlamını oturumdan sunucu tarafında türetir.
- Yanıt oturum kapsamlıdır ve etkin konuşmanın şu anda kullanabileceği şeyleri yansıtır; core, Plugin ve kanal araçları dahil.
- Operatörler,
/tools/invokeile aynı gateway ilkesi yolu üzerinden kullanılabilir bir aracı çağırmak içintools.invoke(operator.write) çağırabilir.namezorunludur.args,sessionKey,agentId,confirmveidempotencyKeyisteğe bağlıdır.- Hem
sessionKeyhemagentIdvarsa, çözümlenen oturum agent'ıagentIdile eşleşmelidir. - Yanıt,
ok,toolName, isteğe bağlıoutputve tiplierroralanlarını içeren SDK'ya dönük bir zarftır. Onay veya ilke retleri, gateway araç ilkesi işlem hattını atlamak yerine payload içindeok:falsedöndürür.
- Operatörler, bir agent için görünür
skill envanterini almak üzere
skills.status(operator.read) çağırabilir.agentIdisteğe bağlıdır; varsayılan agent çalışma alanını okumak için atlayın.- Yanıt, ham gizli değerleri açığa çıkarmadan uygunluğu, eksik gereksinimleri, yapılandırma kontrollerini ve temizlenmiş kurulum seçeneklerini içerir.
- Operatörler, ClawHub keşif meta verileri için
skills.searchveskills.detail(operator.read) çağırabilir. - Operatörler,
skills.install(operator.admin) yöntemini iki modda çağırabilir:- ClawHub modu:
{ source: "clawhub", slug, version?, force? }, varsayılan agent çalışma alanındakiskills/dizinine bir skill klasörü kurar. - Gateway kurucu modu:
{ name, installId, dangerouslyForceUnsafeInstall?, timeoutMs? }, gateway ana makinesinde bildirilmiş birmetadata.openclaw.installeylemini çalıştırır.
- ClawHub modu:
- Operatörler,
skills.update(operator.admin) yöntemini iki modda çağırabilir:- ClawHub modu, varsayılan agent çalışma alanında izlenen bir slug'ı veya izlenen tüm ClawHub kurulumlarını günceller.
- Yapılandırma modu,
enabled,apiKeyveenvgibiskills.entries.<skillKey>değerlerini yamalar.
models.list görünümleri
models.list, isteğe bağlı bir view parametresi kabul eder:
- Atlanmış veya
"default": geçerli çalışma zamanı davranışı.agents.defaults.modelsyapılandırılmışsa yanıt izin verilen katalogdur; aksi takdirde yanıt tam Gateway kataloğudur. "configured": seçici boyutunda davranış.agents.defaults.modelsyapılandırılmışsa yine önceliklidir. Aksi takdirde yanıt açıkmodels.providers.*.modelsgirdilerini kullanır ve yalnızca yapılandırılmış model satırları yoksa tam kataloğa geri döner."all":agents.defaults.modelsdeğerini atlayarak tam Gateway kataloğu. Bunu normal model seçiciler için değil, tanılama ve keşif UI'leri için kullanın.
Exec onayları
- Bir exec isteği onay gerektirdiğinde gateway
exec.approval.requestedyayını yapar. - Operatör istemcileri
exec.approval.resolveçağırarak çözümler (operator.approvalskapsamı gerektirir). host=nodeiçinexec.approval.request,systemRunPlaniçermelidir (kanonikargv/cwd/rawCommand/oturum meta verileri).systemRunPlaneksik olan istekler reddedilir.- Onaydan sonra iletilen
node.invoke system.runçağrıları, bu kanoniksystemRunPlandeğerini yetkili komut/cwd/oturum bağlamı olarak yeniden kullanır. - Bir çağıran, hazırlama ile son onaylı
system.runiletimi arasındacommand,rawCommand,cwd,agentIdveyasessionKeydeğerini değiştirirse, gateway değiştirilen payload'a güvenmek yerine çalıştırmayı reddeder.
Agent teslim geri dönüşü
agentistekleri, dışa dönük teslim istemek içindeliver=trueiçerebilir.bestEffortDeliver=falsekatı davranışı korur: çözümlenemeyen veya yalnızca dahili teslim hedefleriINVALID_REQUESTdöndürür.bestEffortDeliver=true, harici teslim edilebilir rota çözümlenemediğinde oturumla sınırlı yürütmeye geri dönüşe izin verir (örneğin dahili/webchat oturumları veya belirsiz çok kanallı yapılandırmalar).
Sürümleme
PROTOCOL_VERSION,src/gateway/protocol/version.tsiçinde bulunur.- İstemciler
minProtocol+maxProtocolgönderir; sunucu uyumsuzlukları reddeder. - Şemalar + modeller TypeBox tanımlarından üretilir:
pnpm protocol:genpnpm protocol:gen:swiftpnpm protocol:check
İstemci sabitleri
src/gateway/client.ts içindeki referans istemci bu varsayılanları kullanır. Değerler
protokol v4 boyunca kararlıdır ve üçüncü taraf istemciler için beklenen taban çizgidir.
| Sabit | Varsayılan | Kaynak |
|---|---|---|
PROTOCOL_VERSION |
4 |
src/gateway/protocol/version.ts |
| İstek zaman aşımı (RPC başına) | 30_000 ms |
src/gateway/client.ts (requestTimeoutMs) |
| Ön kimlik doğrulama / connect-challenge zaman aşımı | 15_000 ms |
src/gateway/handshake-timeouts.ts (config/env eşleştirilmiş sunucu/istemci bütçesini artırabilir) |
| İlk yeniden bağlanma backoff'u | 1_000 ms |
src/gateway/client.ts (backoffMs) |
| Maksimum yeniden bağlanma backoff'u | 30_000 ms |
src/gateway/client.ts (scheduleReconnect) |
| Cihaz token'ı kapanışından sonra hızlı yeniden deneme sınırı | 250 ms |
src/gateway/client.ts |
terminate() öncesi force-stop ek süresi |
250 ms |
FORCE_STOP_TERMINATE_GRACE_MS |
stopAndWait() varsayılan zaman aşımı |
1_000 ms |
STOP_AND_WAIT_TIMEOUT_MS |
Varsayılan tick aralığı (hello-ok öncesi) |
30_000 ms |
src/gateway/client.ts |
| Tick zaman aşımı kapanışı | sessizlik tickIntervalMs * 2 değerini aştığında kod 4000 |
src/gateway/client.ts |
MAX_PAYLOAD_BYTES |
25 * 1024 * 1024 (25 MB) |
src/gateway/server-constants.ts |
Sunucu, etkin policy.tickIntervalMs, policy.maxPayload ve
policy.maxBufferedBytes değerlerini hello-ok içinde duyurur; istemciler el sıkışma öncesi varsayılanlar yerine
bu değerlere uymalıdır.
Auth
- Paylaşılan gizli Gateway kimlik doğrulaması, yapılandırılmış kimlik doğrulama moduna bağlı olarak
connect.params.auth.tokenveyaconnect.params.auth.passwordkullanır. - Tailscale Serve
(
gateway.auth.allowTailscale: true) veya local loopback olmayangateway.auth.mode: "trusted-proxy"gibi kimlik taşıyan modlar, connect kimlik doğrulama denetiminiconnect.params.auth.*yerine istek üstbilgilerinden karşılar. - Özel giriş
gateway.auth.mode: "none", paylaşılan gizli connect kimlik doğrulamasını tamamen atlar; bu modu herkese açık/güvenilmeyen girişlerde açmayın. - Eşleştirmeden sonra Gateway, bağlantı
rolü + kapsamlarıyla sınırlı bir cihaz token'ı verir.
hello-ok.auth.deviceTokeniçinde döndürülür ve istemci tarafından gelecekteki bağlantılar için kalıcı olarak saklanmalıdır. - İstemciler, başarılı her connect işleminden sonra birincil
hello-ok.auth.deviceTokendeğerini kalıcı olarak saklamalıdır. - Bu saklanan cihaz token'ıyla yeniden bağlanmak, o token için saklanan onaylanmış kapsam kümesini de yeniden kullanmalıdır. Bu, daha önce verilmiş olan okuma/yoklama/durum erişimini korur ve yeniden bağlantıların sessizce daha dar, örtük yalnızca-admin kapsamına düşmesini önler.
- İstemci tarafı connect kimlik doğrulaması oluşturma (
selectConnectAuth,src/gateway/client.tsiçinde):auth.passwordbağımsızdır ve ayarlandığında her zaman iletilir.auth.tokenöncelik sırasına göre doldurulur: önce açık paylaşılan token, sonra açık birdeviceToken, ardından saklanan cihaz başına token (deviceId+roleile anahtarlanır).auth.bootstrapTokenyalnızca yukarıdakilerin hiçbiri birauth.tokençözümlemediğinde gönderilir. Paylaşılan token veya çözümlenen herhangi bir cihaz token'ı bunu baskılar.- Tek seferlik
AUTH_TOKEN_MISMATCHyeniden denemesinde saklanan cihaz token'ının otomatik yükseltilmesi yalnızca güvenilir uç noktalarla sınırlıdır — loopback veya sabitlenmiştlsFingerprintbulunanwss://. Sabitleme olmayan herkese açıkwss://uygun sayılmaz.
- Ek
hello-ok.auth.deviceTokensgirdileri bootstrap devretme token'larıdır. Bunları yalnızca connect,wss://veya loopback/yerel eşleştirme gibi güvenilir bir taşıma üzerinde bootstrap kimlik doğrulaması kullandığında kalıcı olarak saklayın. - Bir istemci açık bir
deviceTokenveya açıkscopessağlarsa, bu çağıranın istediği kapsam kümesi yetkili kalır; önbelleğe alınmış kapsamlar yalnızca istemci saklanan cihaz başına token'ı yeniden kullandığında yeniden kullanılır. - Cihaz token'ları
device.token.rotatevedevice.token.revokearacılığıyla döndürülebilir/iptal edilebilir (operator.pairingkapsamı gerektirir). device.token.rotate, döndürme meta verilerini döndürür. Yedek taşıyıcı token'ı yalnızca zaten o cihaz token'ıyla kimliği doğrulanmış aynı cihaz çağrıları için yankılar; böylece yalnızca token kullanan istemciler yeniden bağlanmadan önce yedeklerini kalıcı olarak saklayabilir. Paylaşılan/admin döndürmeleri taşıyıcı token'ı yankılamaz.- Token verme, döndürme ve iptal etme, o cihazın eşleştirme girdisinde kaydedilen onaylanmış rol kümesiyle sınırlı kalır; token mutasyonu, eşleştirme onayının hiç vermediği bir cihaz rolünü genişletemez veya hedefleyemez.
- Eşleştirilmiş cihaz token oturumları için, çağıranda
operator.adminda yoksa cihaz yönetimi kendi kapsamındadır: admin olmayan çağıranlar yalnızca kendi cihaz girdilerini kaldırabilir/iptal edebilir/döndürebilir. device.token.rotatevedevice.token.revoke, hedef operatör token kapsam kümesini çağıranın geçerli oturum kapsamlarına karşı da denetler. Admin olmayan çağıranlar, zaten sahip olduklarından daha geniş bir operatör token'ını döndüremez veya iptal edemez.- Kimlik doğrulama hataları,
error.details.codeile kurtarma ipuçlarını içerir:error.details.canRetryWithDeviceToken(boolean)error.details.recommendedNextStep(retry_with_device_token,update_auth_configuration,update_auth_credentials,wait_then_retry,review_auth_configuration)
AUTH_TOKEN_MISMATCHiçin istemci davranışı:- Güvenilir istemciler, önbelleğe alınmış cihaz başına token ile sınırlı bir yeniden deneme yapmayı deneyebilir.
- Bu yeniden deneme başarısız olursa, istemciler otomatik yeniden bağlanma döngülerini durdurmalı ve operatör eylem kılavuzunu göstermelidir.
Cihaz kimliği + eşleştirme
- Node'lar, bir anahtar çifti parmak izinden türetilmiş kararlı bir cihaz kimliği (
device.id) içermelidir. - Gateway'ler cihaz + rol başına token verir.
- Yerel otomatik onay etkin değilse yeni cihaz kimlikleri için eşleştirme onayları gereklidir.
- Eşleştirme otomatik onayı, doğrudan local loopback bağlantılarına odaklanır.
- OpenClaw ayrıca güvenilir paylaşılan gizli yardımcı akışlar için dar bir backend/konteyner-yerel kendi kendine bağlanma yoluna sahiptir.
- Aynı ana makinedeki tailnet veya LAN bağlantıları eşleştirme açısından hâlâ uzak kabul edilir ve onay gerektirir.
- WS istemcileri normalde
connectsırasındadevicekimliğini içerir (operatör + node). Cihazsız tek operatör istisnaları açık güven yollarıdır:- localhost'a özel güvensiz HTTP uyumluluğu için
gateway.controlUi.allowInsecureAuth=true. - başarılı
gateway.auth.mode: "trusted-proxy"operatör Control UI kimlik doğrulaması. gateway.controlUi.dangerouslyDisableDeviceAuth=true(acil durum, ciddi güvenlik düşürmesi).- paylaşılan
Gateway token'ı/parolasıyla kimliği doğrulanmış doğrudan-loopback
gateway-clientbackend RPC'leri.
- localhost'a özel güvensiz HTTP uyumluluğu için
- Tüm bağlantılar, sunucunun sağladığı
connect.challengenonce değerini imzalamalıdır.
Cihaz kimlik doğrulaması geçiş tanılamaları
Hâlâ challenge öncesi imzalama davranışını kullanan eski istemciler için connect artık
error.details.code altında kararlı bir error.details.reason ile DEVICE_AUTH_* ayrıntı kodları döndürür.
Yaygın geçiş hataları:
| İleti | details.code | details.reason | Anlam |
|---|---|---|---|
device nonce required |
DEVICE_AUTH_NONCE_REQUIRED |
device-nonce-missing |
İstemci device.nonce değerini atladı (veya boş gönderdi). |
device nonce mismatch |
DEVICE_AUTH_NONCE_MISMATCH |
device-nonce-mismatch |
İstemci eski/yanlış nonce ile imzaladı. |
device signature invalid |
DEVICE_AUTH_SIGNATURE_INVALID |
device-signature |
İmza yükü v2 yüküyle eşleşmiyor. |
device signature expired |
DEVICE_AUTH_SIGNATURE_EXPIRED |
device-signature-stale |
İmzalanmış zaman damgası izin verilen sapmanın dışında. |
device identity mismatch |
DEVICE_AUTH_DEVICE_ID_MISMATCH |
device-id-mismatch |
device.id, açık anahtar parmak iziyle eşleşmiyor. |
device public key invalid |
DEVICE_AUTH_PUBLIC_KEY_INVALID |
device-public-key |
Açık anahtar biçimi/kanonikleştirme başarısız oldu. |
Geçiş hedefi:
- Her zaman
connect.challengeiçin bekleyin. - Sunucu nonce'unu içeren v2 yükünü imzalayın.
- Aynı nonce'u
connect.params.device.nonceiçinde gönderin. - Tercih edilen imza yükü
v3'tür; bu, cihaz/istemci/rol/kapsamlar/token/nonce alanlarına ek olarakplatformvedeviceFamilydeğerlerini bağlar. - Eski
v2imzaları uyumluluk için kabul edilmeye devam eder, ancak eşleştirilmiş cihaz meta veri sabitlemesi yeniden bağlantıda komut politikasını hâlâ denetler.
TLS + sabitleme
- WS bağlantıları için TLS desteklenir.
- İstemciler isteğe bağlı olarak Gateway sertifika parmak izini sabitleyebilir (
gateway.tlsyapılandırmasına vegateway.remote.tlsFingerprintveya CLI--tls-fingerprintdeğerine bakın).
Kapsam
Bu protokol tam gateway API'sini açığa çıkarır (durum, kanallar, modeller, sohbet,
ajan, oturumlar, node'lar, onaylar vb.). Kesin yüzey
src/gateway/protocol/schema.ts içindeki TypeBox şemalarıyla tanımlanır.