Ana içeriğe atla

Yapılandırma Referansı

~/.openclaw/openclaw.json için temel yapılandırma başvurusu. Görev odaklı genel bakış için bkz. Yapılandırma. Bu sayfa ana OpenClaw yapılandırma yüzeylerini kapsar ve bir alt sistemin kendine ait daha ayrıntılı bir başvurusu olduğunda ona bağlantı verir. Her kanala/eklentiye ait komut kataloğunu veya her ayrıntılı bellek/QMD ayarını tek bir sayfada satır içine almaya çalışmaz. Kod tarafındaki gerçek kaynak:
  • openclaw config schema, doğrulama ve Kontrol Arayüzü için kullanılan canlı JSON Şemasını yazdırır; mevcut olduğunda paketlenmiş/eklenti/kanal meta verileri birleştirilmiş olarak gelir
  • config.schema.lookup, ayrıntı inceleme araçları için tek bir yol kapsamlı şema düğümü döndürür
  • pnpm config:docs:check / pnpm config:docs:gen, yapılandırma-belge temel karma değerini mevcut şema yüzeyine göre doğrular
Özel ayrıntılı başvurular:
  • agents.defaults.memorySearch.*, memory.qmd.*, memory.citations ve plugins.entries.memory-core.config.dreaming altındaki dreaming yapılandırması için Bellek yapılandırma başvurusu
  • Geçerli yerleşik + paketlenmiş komut kataloğu için Slash Commands
  • kanala/eklentiye sahip olan sayfalar, kanala özgü komut yüzeyleri için
Yapılandırma biçimi JSON5’tir (yorumlara + sondaki virgüllere izin verilir). Tüm alanlar isteğe bağlıdır — atlandığında OpenClaw güvenli varsayılanlar kullanır.

Kanallar

Yapılandırma bölümü mevcut olduğunda her kanal otomatik olarak başlar (enabled: false olmadığı sürece).

DM ve grup erişimi

Tüm kanallar DM ilkelerini ve grup ilkelerini destekler:
DM ilkesiDavranış
pairing (varsayılan)Bilinmeyen gönderenler tek kullanımlık bir eşleştirme kodu alır; sahibin onaylaması gerekir
allowlistYalnızca allowFrom içindeki gönderenler (veya eşleştirilmiş izin deposu)
openTüm gelen DM’lere izin ver (şunu gerektirir: allowFrom: ["*"])
disabledTüm gelen DM’leri yok say
Grup ilkesiDavranış
allowlist (varsayılan)Yalnızca yapılandırılmış izin listesiyle eşleşen gruplar
openGrup izin listelerini atla (mention-gating yine de uygulanır)
disabledTüm grup/oda mesajlarını engelle
channels.defaults.groupPolicy, bir sağlayıcının groupPolicy değeri ayarlanmamışsa varsayılanı belirler. Eşleştirme kodları 1 saat sonra sona erer. Bekleyen DM eşleştirme istekleri kanal başına 3 ile sınırlandırılmıştır. Bir sağlayıcı bloğu tamamen eksikse (channels.<provider> yoksa), çalışma zamanındaki grup ilkesi başlatma uyarısıyla birlikte allowlist (fail-closed) değerine geri döner.

Kanal model geçersiz kılmaları

Belirli kanal kimliklerini bir modele sabitlemek için channels.modelByChannel kullanın. Değerler provider/model veya yapılandırılmış model takma adlarını kabul eder. Kanal eşlemesi, bir oturumda zaten bir model geçersiz kılması yoksa uygulanır (örneğin /model ile ayarlanmışsa).
{
  channels: {
    modelByChannel: {
      discord: {
        "123456789012345678": "anthropic/claude-opus-4-6",
      },
      slack: {
        C1234567890: "openai/gpt-4.1",
      },
      telegram: {
        "-1001234567890": "openai/gpt-4.1-mini",
        "-1001234567890:topic:99": "anthropic/claude-sonnet-4-6",
      },
    },
  },
}

Kanal varsayılanları ve heartbeat

Sağlayıcılar arasında paylaşılan grup ilkesi ve heartbeat davranışı için channels.defaults kullanın:
{
  channels: {
    defaults: {
      groupPolicy: "allowlist", // open | allowlist | disabled
      contextVisibility: "all", // all | allowlist | allowlist_quote
      heartbeat: {
        showOk: false,
        showAlerts: true,
        useIndicator: true,
      },
    },
  },
}
  • channels.defaults.groupPolicy: bir sağlayıcı düzeyindeki groupPolicy ayarlanmamışsa kullanılan yedek grup ilkesi.
  • channels.defaults.contextVisibility: tüm kanallar için varsayılan ek bağlam görünürlüğü modu. Değerler: all (varsayılan, alıntılanan/dizi/geçmiş bağlamının tamamını dahil eder), allowlist (yalnızca izin verilen gönderenlerden gelen bağlamı dahil eder), allowlist_quote (allowlist ile aynı, ancak açık alıntı/yanıt bağlamını korur). Kanal başına geçersiz kılma: channels.<channel>.contextVisibility.
  • channels.defaults.heartbeat.showOk: sağlıklı kanal durumlarını heartbeat çıktısına dahil eder.
  • channels.defaults.heartbeat.showAlerts: bozulmuş/hata durumlarını heartbeat çıktısına dahil eder.
  • channels.defaults.heartbeat.useIndicator: kompakt gösterge tarzı heartbeat çıktısı oluşturur.

WhatsApp

WhatsApp, gateway’in web kanalı (Baileys Web) üzerinden çalışır. Bağlı bir oturum mevcut olduğunda otomatik olarak başlar.
{
  channels: {
    whatsapp: {
      dmPolicy: "pairing", // pairing | allowlist | open | disabled
      allowFrom: ["+15555550123", "+447700900123"],
      textChunkLimit: 4000,
      chunkMode: "length", // length | newline
      mediaMaxMb: 50,
      sendReadReceipts: true, // mavi tikler (self-chat modunda false)
      groups: {
        "*": { requireMention: true },
      },
      groupPolicy: "allowlist",
      groupAllowFrom: ["+15551234567"],
    },
  },
  web: {
    enabled: true,
    heartbeatSeconds: 60,
    reconnect: {
      initialMs: 2000,
      maxMs: 120000,
      factor: 1.4,
      jitter: 0.2,
      maxAttempts: 0,
    },
  },
}
{
  channels: {
    whatsapp: {
      accounts: {
        default: {},
        personal: {},
        biz: {
          // authDir: "~/.openclaw/credentials/whatsapp/biz",
        },
      },
    },
  },
}
  • Giden komutlar, varsa varsayılan olarak default hesabını kullanır; aksi halde ilk yapılandırılmış hesap kimliğini (sıralanmış) kullanır.
  • İsteğe bağlı channels.whatsapp.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde bu yedek varsayılan hesap seçimini geçersiz kılar.
  • Eski tek hesaplı Baileys auth dizini, openclaw doctor tarafından whatsapp/default içine taşınır.
  • Hesap başına geçersiz kılmalar: channels.whatsapp.accounts.<id>.sendReadReceipts, channels.whatsapp.accounts.<id>.dmPolicy, channels.whatsapp.accounts.<id>.allowFrom.

Telegram

{
  channels: {
    telegram: {
      enabled: true,
      botToken: "your-bot-token",
      dmPolicy: "pairing",
      allowFrom: ["tg:123456789"],
      groups: {
        "*": { requireMention: true },
        "-1001234567890": {
          allowFrom: ["@admin"],
          systemPrompt: "Keep answers brief.",
          topics: {
            "99": {
              requireMention: false,
              skills: ["search"],
              systemPrompt: "Stay on topic.",
            },
          },
        },
      },
      customCommands: [
        { command: "backup", description: "Git backup" },
        { command: "generate", description: "Create an image" },
      ],
      historyLimit: 50,
      replyToMode: "first", // off | first | all | batched
      linkPreview: true,
      streaming: "partial", // off | partial | block | progress (varsayılan: off; önizleme-düzenleme oran sınırlarından kaçınmak için açıkça etkinleştirin)
      actions: { reactions: true, sendMessage: true },
      reactionNotifications: "own", // off | own | all
      mediaMaxMb: 100,
      retry: {
        attempts: 3,
        minDelayMs: 400,
        maxDelayMs: 30000,
        jitter: 0.1,
      },
      network: {
        autoSelectFamily: true,
        dnsResultOrder: "ipv4first",
      },
      proxy: "socks5://localhost:9050",
      webhookUrl: "https://example.com/telegram-webhook",
      webhookSecret: "secret",
      webhookPath: "/telegram-webhook",
    },
  },
}
  • Bot tokenı: channels.telegram.botToken veya channels.telegram.tokenFile (yalnızca normal dosya; symlink’ler reddedilir), varsayılan hesap için yedek olarak TELEGRAM_BOT_TOKEN kullanılır.
  • İsteğe bağlı channels.telegram.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
  • Çok hesaplı kurulumlarda (2+ hesap kimliği), yedek yönlendirmeden kaçınmak için açık bir varsayılan ayarlayın (channels.telegram.defaultAccount veya channels.telegram.accounts.default); bu eksik veya geçersiz olduğunda openclaw doctor uyarı verir.
  • configWrites: false, Telegram tarafından başlatılan yapılandırma yazmalarını engeller (supergroup ID geçişleri, /config set|unset).
  • type: "acp" olan üst düzey bindings[] girdileri, forum konuları için kalıcı ACP bağlarını yapılandırır (match.peer.id içinde standart chatId:topic:topicId kullanın). Alan anlamları ACP Agents içinde ortaktır.
  • Telegram akış önizlemeleri sendMessage + editMessageText kullanır (doğrudan ve grup sohbetlerinde çalışır).
  • Yeniden deneme ilkesi: bkz. Yeniden deneme ilkesi.

Discord

{
  channels: {
    discord: {
      enabled: true,
      token: "your-bot-token",
      mediaMaxMb: 100,
      allowBots: false,
      actions: {
        reactions: true,
        stickers: true,
        polls: true,
        permissions: true,
        messages: true,
        threads: true,
        pins: true,
        search: true,
        memberInfo: true,
        roleInfo: true,
        roles: false,
        channelInfo: true,
        voiceStatus: true,
        events: true,
        moderation: false,
      },
      replyToMode: "off", // off | first | all | batched
      dmPolicy: "pairing",
      allowFrom: ["1234567890", "123456789012345678"],
      dm: { enabled: true, groupEnabled: false, groupChannels: ["openclaw-dm"] },
      guilds: {
        "123456789012345678": {
          slug: "friends-of-openclaw",
          requireMention: false,
          ignoreOtherMentions: true,
          reactionNotifications: "own",
          users: ["987654321098765432"],
          channels: {
            general: { allow: true },
            help: {
              allow: true,
              requireMention: true,
              users: ["987654321098765432"],
              skills: ["docs"],
              systemPrompt: "Short answers only.",
            },
          },
        },
      },
      historyLimit: 20,
      textChunkLimit: 2000,
      chunkMode: "length", // length | newline
      streaming: "off", // off | partial | block | progress (progress Discord'da partial olarak eşlenir)
      maxLinesPerMessage: 17,
      ui: {
        components: {
          accentColor: "#5865F2",
        },
      },
      threadBindings: {
        enabled: true,
        idleHours: 24,
        maxAgeHours: 0,
        spawnSubagentSessions: false, // sessions_spawn({ thread: true }) için isteğe bağlı etkinleştirme
      },
      voice: {
        enabled: true,
        autoJoin: [
          {
            guildId: "123456789012345678",
            channelId: "234567890123456789",
          },
        ],
        daveEncryption: true,
        decryptionFailureTolerance: 24,
        tts: {
          provider: "openai",
          openai: { voice: "alloy" },
        },
      },
      execApprovals: {
        enabled: "auto", // true | false | "auto"
        approvers: ["987654321098765432"],
        agentFilter: ["default"],
        sessionFilter: ["discord:"],
        target: "dm", // dm | channel | both
        cleanupAfterResolve: false,
      },
      retry: {
        attempts: 3,
        minDelayMs: 500,
        maxDelayMs: 30000,
        jitter: 0.1,
      },
    },
  },
}
  • Token: channels.discord.token, varsayılan hesap için yedek olarak DISCORD_BOT_TOKEN ile birlikte.
  • Açık bir Discord token sağlayan doğrudan giden çağrılar, çağrı için o tokenı kullanır; hesap yeniden deneme/ilke ayarları yine de etkin çalışma zamanı anlık görüntüsünde seçilen hesaptan gelir.
  • İsteğe bağlı channels.discord.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
  • Teslim hedefleri için user:<id> (DM) veya channel:<id> (sunucu kanalı) kullanın; yalın sayısal kimlikler reddedilir.
  • Sunucu slug’ları küçük harflidir ve boşluklar - ile değiştirilir; kanal anahtarları slug biçimindeki adı kullanır (# olmadan). Sunucu kimliklerini tercih edin.
  • Bot tarafından yazılan mesajlar varsayılan olarak yok sayılır. allowBots: true bunları etkinleştirir; yalnızca botu mention eden bot mesajlarını kabul etmek için allowBots: "mentions" kullanın (botun kendi mesajları yine filtrelenir).
  • channels.discord.guilds.<id>.ignoreOtherMentions (ve kanal geçersiz kılmaları), botu değil başka bir kullanıcıyı veya rolü mention eden mesajları düşürür (@everyone/@here hariç).
  • maxLinesPerMessage (varsayılan 17), 2000 karakterin altında olsa bile uzun mesajları böler.
  • channels.discord.threadBindings, Discord iş parçacığına bağlı yönlendirmeyi kontrol eder:
    • enabled: iş parçacığına bağlı oturum özellikleri için Discord geçersiz kılması (/focus, /unfocus, /agents, /session idle, /session max-age ve bağlı teslim/yönlendirme)
    • idleHours: etkinliksizlik nedeniyle otomatik odak kaldırma için saat cinsinden Discord geçersiz kılması (0 devre dışı bırakır)
    • maxAgeHours: saat cinsinden kesin azami yaş için Discord geçersiz kılması (0 devre dışı bırakır)
    • spawnSubagentSessions: sessions_spawn({ thread: true }) otomatik iş parçacığı oluşturma/bağlama için isteğe bağlı anahtar
  • type: "acp" olan üst düzey bindings[] girdileri, kanallar ve iş parçacıkları için kalıcı ACP bağlarını yapılandırır (match.peer.id içinde kanal/iş parçacığı kimliğini kullanın). Alan anlamları ACP Agents içinde ortaktır.
  • channels.discord.ui.components.accentColor, Discord components v2 kapsayıcıları için vurgu rengini ayarlar.
  • channels.discord.voice, Discord ses kanalı konuşmalarını ve isteğe bağlı otomatik katılma + TTS geçersiz kılmalarını etkinleştirir.
  • channels.discord.voice.daveEncryption ve channels.discord.voice.decryptionFailureTolerance, @discordjs/voice DAVE seçeneklerine aynen aktarılır (varsayılan olarak true ve 24).
  • OpenClaw ayrıca, art arda şifre çözme hatalarından sonra bir ses oturumundan ayrılıp yeniden katılarak ses alımı kurtarmayı dener.
  • channels.discord.streaming standart akış modu anahtarıdır. Eski streamMode ve boolean streaming değerleri otomatik olarak taşınır.
  • channels.discord.autoPresence, çalışma zamanı kullanılabilirliğini bot varlığına eşler (sağlıklı => online, bozulmuş => idle, tükenmiş => dnd) ve isteğe bağlı durum metni geçersiz kılmalarına izin verir.
  • channels.discord.dangerouslyAllowNameMatching, değiştirilebilir ad/etiket eşleştirmeyi yeniden etkinleştirir (acil durum uyumluluk modu).
  • channels.discord.execApprovals: Discord’a özgü exec onay teslimi ve onaylayıcı yetkilendirmesi.
    • enabled: true, false veya "auto" (varsayılan). Otomatik modda exec onayları, onaylayıcılar approvers veya commands.ownerAllowFrom üzerinden çözümlenebildiğinde etkinleşir.
    • approvers: exec isteklerini onaylamasına izin verilen Discord kullanıcı kimlikleri. Atlandığında commands.ownerAllowFrom değerine geri döner.
    • agentFilter: isteğe bağlı ajan kimliği izin listesi. Tüm ajanlar için onayları iletmek üzere atlayın.
    • sessionFilter: isteğe bağlı oturum anahtarı kalıpları (alt dize veya regex).
    • target: onay istemlerinin nereye gönderileceği. "dm" (varsayılan) onaylayıcı DM’lerine gönderir, "channel" kaynak kanala gönderir, "both" her ikisine gönderir. Hedef "channel" içerdiğinde, düğmeler yalnızca çözümlenmiş onaylayıcılar tarafından kullanılabilir.
    • cleanupAfterResolve: true olduğunda, onay, ret veya zaman aşımı sonrasında onay DM’lerini siler.
Tepki bildirimi modları: off (yok), own (botun mesajları, varsayılan), all (tüm mesajlar), allowlist (guilds.<id>.users içinden, tüm mesajlarda).

Google Chat

{
  channels: {
    googlechat: {
      enabled: true,
      serviceAccountFile: "/path/to/service-account.json",
      audienceType: "app-url", // app-url | project-number
      audience: "https://gateway.example.com/googlechat",
      webhookPath: "/googlechat",
      botUser: "users/1234567890",
      dm: {
        enabled: true,
        policy: "pairing",
        allowFrom: ["users/1234567890"],
      },
      groupPolicy: "allowlist",
      groups: {
        "spaces/AAAA": { allow: true, requireMention: true },
      },
      actions: { reactions: true },
      typingIndicator: "message",
      mediaMaxMb: 20,
    },
  },
}
  • Hizmet hesabı JSON’u: satır içi (serviceAccount) veya dosya tabanlı (serviceAccountFile).
  • Hizmet hesabı SecretRef de desteklenir (serviceAccountRef).
  • Ortam yedekleri: GOOGLE_CHAT_SERVICE_ACCOUNT veya GOOGLE_CHAT_SERVICE_ACCOUNT_FILE.
  • Teslim hedefleri için spaces/<spaceId> veya users/<userId> kullanın.
  • channels.googlechat.dangerouslyAllowNameMatching, değiştirilebilir e-posta principal eşleştirmeyi yeniden etkinleştirir (acil durum uyumluluk modu).

Slack

{
  channels: {
    slack: {
      enabled: true,
      botToken: "xoxb-...",
      appToken: "xapp-...",
      dmPolicy: "pairing",
      allowFrom: ["U123", "U456", "*"],
      dm: { enabled: true, groupEnabled: false, groupChannels: ["G123"] },
      channels: {
        C123: { allow: true, requireMention: true, allowBots: false },
        "#general": {
          allow: true,
          requireMention: true,
          allowBots: false,
          users: ["U123"],
          skills: ["docs"],
          systemPrompt: "Short answers only.",
        },
      },
      historyLimit: 50,
      allowBots: false,
      reactionNotifications: "own",
      reactionAllowlist: ["U123"],
      replyToMode: "off", // off | first | all | batched
      thread: {
        historyScope: "thread", // thread | channel
        inheritParent: false,
      },
      actions: {
        reactions: true,
        messages: true,
        pins: true,
        memberInfo: true,
        emojiList: true,
      },
      slashCommand: {
        enabled: true,
        name: "openclaw",
        sessionPrefix: "slack:slash",
        ephemeral: true,
      },
      typingReaction: "hourglass_flowing_sand",
      textChunkLimit: 4000,
      chunkMode: "length",
      streaming: {
        mode: "partial", // off | partial | block | progress
        nativeTransport: true, // mode=partial olduğunda Slack yerel akış API'sini kullan
      },
      mediaMaxMb: 20,
      execApprovals: {
        enabled: "auto", // true | false | "auto"
        approvers: ["U123"],
        agentFilter: ["default"],
        sessionFilter: ["slack:"],
        target: "dm", // dm | channel | both
      },
    },
  },
}
  • Socket mode hem botToken hem de appToken gerektirir (varsayılan hesap ortam yedeği için SLACK_BOT_TOKEN + SLACK_APP_TOKEN).
  • HTTP mode botToken ile birlikte signingSecret gerektirir (kökte veya hesap başına).
  • botToken, appToken, signingSecret ve userToken, düz metin dizeleri veya SecretRef nesnelerini kabul eder.
  • Slack hesap anlık görüntüleri, botTokenSource, botTokenStatus, appTokenStatus ve HTTP modunda signingSecretStatus gibi kimlik bilgisi başına kaynak/durum alanlarını gösterir. configured_unavailable, hesabın SecretRef üzerinden yapılandırıldığını ancak mevcut komut/çalışma zamanı yolunun gizli değeri çözemediğini ifade eder.
  • configWrites: false, Slack tarafından başlatılan yapılandırma yazmalarını engeller.
  • İsteğe bağlı channels.slack.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
  • channels.slack.streaming.mode standart Slack akış modu anahtarıdır. channels.slack.streaming.nativeTransport, Slack’in yerel akış aktarımını kontrol eder. Eski streamMode, boolean streaming ve nativeStreaming değerleri otomatik olarak taşınır.
  • Teslim hedefleri için user:<id> (DM) veya channel:<id> kullanın.
Tepki bildirimi modları: off, own (varsayılan), all, allowlist (reactionAllowlist içinden). İş parçacığı oturumu yalıtımı: thread.historyScope iş parçacığı başına (varsayılan) veya kanal genelinde paylaşılır. thread.inheritParent, yeni iş parçacıklarına üst kanal dökümünü kopyalar.
  • Slack yerel akışı ve Slack yardımcı tarzı “is typing…” iş parçacığı durumu, bir yanıt iş parçacığı hedefi gerektirir. Üst düzey DM’ler varsayılan olarak iş parçacığı dışında kalır, bu nedenle iş parçacığı tarzı önizleme yerine typingReaction veya normal teslim kullanırlar.
  • typingReaction, bir yanıt çalışırken gelen Slack mesajına geçici bir tepki ekler, ardından tamamlandığında kaldırır. "hourglass_flowing_sand" gibi bir Slack emoji kısa kodu kullanın.
  • channels.slack.execApprovals: Slack’e özgü exec onay teslimi ve onaylayıcı yetkilendirmesi. Discord ile aynı şema: enabled (true/false/"auto"), approvers (Slack kullanıcı kimlikleri), agentFilter, sessionFilter ve target ("dm", "channel" veya "both").
Eylem grubuVarsayılanNotlar
reactionsetkinTepki ver + tepkileri listele
messagesetkinOku/gönder/düzenle/sil
pinsetkinSabitle/sabitlemeyi kaldır/listele
memberInfoetkinÜye bilgisi
emojiListetkinÖzel emoji listesi

Mattermost

Mattermost bir eklenti olarak gelir: openclaw plugins install @openclaw/mattermost.
{
  channels: {
    mattermost: {
      enabled: true,
      botToken: "mm-token",
      baseUrl: "https://chat.example.com",
      dmPolicy: "pairing",
      chatmode: "oncall", // oncall | onmessage | onchar
      oncharPrefixes: [">", "!"],
      groups: {
        "*": { requireMention: true },
        "team-channel-id": { requireMention: false },
      },
      commands: {
        native: true, // isteğe bağlı etkinleştirme
        nativeSkills: true,
        callbackPath: "/api/channels/mattermost/command",
        // Ters proxy/herkese açık dağıtımlar için isteğe bağlı açık URL
        callbackUrl: "https://gateway.example.com/api/channels/mattermost/command",
      },
      textChunkLimit: 4000,
      chunkMode: "length",
    },
  },
}
Sohbet modları: oncall (@-mention ile yanıt ver, varsayılan), onmessage (her mesaj), onchar (tetikleyici önekle başlayan mesajlar). Mattermost yerel komutları etkinleştirildiğinde:
  • commands.callbackPath tam URL değil, bir yol olmalıdır (örneğin /api/channels/mattermost/command).
  • commands.callbackUrl, OpenClaw gateway uç noktasına çözümlenmeli ve Mattermost sunucusundan erişilebilir olmalıdır.
  • Yerel slash callback’leri, slash komut kaydı sırasında Mattermost tarafından döndürülen komut başına tokenlarla doğrulanır. Kayıt başarısız olursa veya hiçbir komut etkinleştirilmezse, OpenClaw callback’leri şu hata ile reddeder: Unauthorized: invalid command token.
  • Özel/tailnet/dahili callback ana makineleri için Mattermost, ServiceSettings.AllowedUntrustedInternalConnections ayarının callback ana makinesini/alan adını içermesini gerektirebilir. Tam URL değil, ana makine/alan adı değerleri kullanın.
  • channels.mattermost.configWrites: Mattermost tarafından başlatılan yapılandırma yazmalarına izin verin veya engelleyin.
  • channels.mattermost.requireMention: kanallarda yanıt vermeden önce @mention gerektirir.
  • channels.mattermost.groups.<channelId>.requireMention: kanal başına mention-gating geçersiz kılması (varsayılan için "*").
  • İsteğe bağlı channels.mattermost.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.

Signal

{
  channels: {
    signal: {
      enabled: true,
      account: "+15555550123", // isteğe bağlı hesap bağlama
      dmPolicy: "pairing",
      allowFrom: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
      configWrites: true,
      reactionNotifications: "own", // off | own | all | allowlist
      reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
      historyLimit: 50,
    },
  },
}
Tepki bildirimi modları: off, own (varsayılan), all, allowlist (reactionAllowlist içinden).
  • channels.signal.account: kanal başlangıcını belirli bir Signal hesap kimliğine sabitleyin.
  • channels.signal.configWrites: Signal tarafından başlatılan yapılandırma yazmalarına izin verin veya engelleyin.
  • İsteğe bağlı channels.signal.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.

BlueBubbles

BlueBubbles, önerilen iMessage yoludur (eklenti desteklidir, channels.bluebubbles altında yapılandırılır).
{
  channels: {
    bluebubbles: {
      enabled: true,
      dmPolicy: "pairing",
      // serverUrl, password, webhookPath, group controls, and advanced actions:
      // see /channels/bluebubbles
    },
  },
}
  • Burada kapsanan temel anahtar yolları: channels.bluebubbles, channels.bluebubbles.dmPolicy.
  • İsteğe bağlı channels.bluebubbles.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
  • type: "acp" olan üst düzey bindings[] girdileri, BlueBubbles konuşmalarını kalıcı ACP oturumlarına bağlayabilir. match.peer.id içinde bir BlueBubbles handle veya hedef dizesi (chat_id:*, chat_guid:*, chat_identifier:*) kullanın. Paylaşılan alan anlamları: ACP Agents.
  • Tam BlueBubbles kanal yapılandırması BlueBubbles içinde belgelenmiştir.

iMessage

OpenClaw, imsg rpc sürecini başlatır (stdio üzerinden JSON-RPC). Daemon veya port gerekmez.
{
  channels: {
    imessage: {
      enabled: true,
      cliPath: "imsg",
      dbPath: "~/Library/Messages/chat.db",
      remoteHost: "user@gateway-host",
      dmPolicy: "pairing",
      allowFrom: ["+15555550123", "user@example.com", "chat_id:123"],
      historyLimit: 50,
      includeAttachments: false,
      attachmentRoots: ["/Users/*/Library/Messages/Attachments"],
      remoteAttachmentRoots: ["/Users/*/Library/Messages/Attachments"],
      mediaMaxMb: 16,
      service: "auto",
      region: "US",
    },
  },
}
  • İsteğe bağlı channels.imessage.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
  • Messages veritabanına Full Disk Access gerektirir.
  • chat_id:<id> hedeflerini tercih edin. Sohbetleri listelemek için imsg chats --limit 20 kullanın.
  • cliPath, bir SSH sarmalayıcısını işaret edebilir; SCP ek indirmesi için remoteHost (host veya user@host) ayarlayın.
  • attachmentRoots ve remoteAttachmentRoots, gelen ek yollarını sınırlar (varsayılan: /Users/*/Library/Messages/Attachments).
  • SCP katı ana makine anahtarı denetimi kullanır, bu nedenle aktarma ana makinesi anahtarının zaten ~/.ssh/known_hosts içinde bulunduğundan emin olun.
  • channels.imessage.configWrites: iMessage tarafından başlatılan yapılandırma yazmalarına izin verin veya engelleyin.
  • type: "acp" olan üst düzey bindings[] girdileri, iMessage konuşmalarını kalıcı ACP oturumlarına bağlayabilir. match.peer.id içinde normalize edilmiş bir handle veya açık sohbet hedefi (chat_id:*, chat_guid:*, chat_identifier:*) kullanın. Paylaşılan alan anlamları: ACP Agents.
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"

Matrix

Matrix uzantı desteklidir ve channels.matrix altında yapılandırılır.
{
  channels: {
    matrix: {
      enabled: true,
      homeserver: "https://matrix.example.org",
      accessToken: "syt_bot_xxx",
      proxy: "http://127.0.0.1:7890",
      encryption: true,
      initialSyncLimit: 20,
      defaultAccount: "ops",
      accounts: {
        ops: {
          name: "Ops",
          userId: "@ops:example.org",
          accessToken: "syt_ops_xxx",
        },
        alerts: {
          userId: "@alerts:example.org",
          password: "secret",
          proxy: "http://127.0.0.1:7891",
        },
      },
    },
  },
}
  • Token kimlik doğrulaması accessToken kullanır; parola kimlik doğrulaması userId + password kullanır.
  • channels.matrix.proxy, Matrix HTTP trafiğini açık bir HTTP(S) proxy üzerinden yönlendirir. Adlandırılmış hesaplar bunu channels.matrix.accounts.<id>.proxy ile geçersiz kılabilir.
  • channels.matrix.network.dangerouslyAllowPrivateNetwork, özel/dahili homeserver’lara izin verir. proxy ile bu ağ etkinleştirme seçeneği birbirinden bağımsız denetimlerdir.
  • channels.matrix.defaultAccount, çok hesaplı kurulumlarda tercih edilen hesabı seçer.
  • channels.matrix.autoJoin varsayılan olarak off durumundadır; bu nedenle davet edilen odalar ve yeni DM tarzı davetler, autoJoin: "allowlist" ile autoJoinAllowlist ayarlanana veya autoJoin: "always" seçilene kadar yok sayılır.
  • channels.matrix.execApprovals: Matrix’e özgü exec onay teslimi ve onaylayıcı yetkilendirmesi.
    • enabled: true, false veya "auto" (varsayılan). Otomatik modda exec onayları, onaylayıcılar approvers veya commands.ownerAllowFrom üzerinden çözümlenebildiğinde etkinleşir.
    • approvers: exec isteklerini onaylamasına izin verilen Matrix kullanıcı kimlikleri (ör. @owner:example.org).
    • agentFilter: isteğe bağlı ajan kimliği izin listesi. Tüm ajanlar için onayları iletmek üzere atlayın.
    • sessionFilter: isteğe bağlı oturum anahtarı kalıpları (alt dize veya regex).
    • target: onay istemlerinin nereye gönderileceği. "dm" (varsayılan), "channel" (kaynak oda) veya "both".
    • Hesap başına geçersiz kılmalar: channels.matrix.accounts.<id>.execApprovals.
  • channels.matrix.dm.sessionScope, Matrix DM’lerinin oturumlar halinde nasıl gruplanacağını kontrol eder: per-user (varsayılan) yönlendirilen eşe göre paylaşır, per-room ise her DM odasını yalıtır.
  • Matrix durum probları ve canlı dizin aramaları, çalışma zamanı trafiğiyle aynı proxy ilkesini kullanır.
  • Tam Matrix yapılandırması, hedefleme kuralları ve kurulum örnekleri Matrix içinde belgelenmiştir.

Microsoft Teams

Microsoft Teams uzantı desteklidir ve channels.msteams altında yapılandırılır.
{
  channels: {
    msteams: {
      enabled: true,
      configWrites: true,
      // appId, appPassword, tenantId, webhook, team/channel policies:
      // see /channels/msteams
    },
  },
}
  • Burada kapsanan temel anahtar yolları: channels.msteams, channels.msteams.configWrites.
  • Tam Teams yapılandırması (kimlik bilgileri, webhook, DM/grup ilkesi, takım/kanal başına geçersiz kılmalar) Microsoft Teams içinde belgelenmiştir.

IRC

IRC uzantı desteklidir ve channels.irc altında yapılandırılır.
{
  channels: {
    irc: {
      enabled: true,
      dmPolicy: "pairing",
      configWrites: true,
      nickserv: {
        enabled: true,
        service: "NickServ",
        password: "${IRC_NICKSERV_PASSWORD}",
        register: false,
        registerEmail: "bot@example.com",
      },
    },
  },
}
  • Burada kapsanan temel anahtar yolları: channels.irc, channels.irc.dmPolicy, channels.irc.configWrites, channels.irc.nickserv.*.
  • İsteğe bağlı channels.irc.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleştiğinde varsayılan hesap seçimini geçersiz kılar.
  • Tam IRC kanal yapılandırması (host/port/TLS/kanallar/izin listeleri/mention gating) IRC içinde belgelenmiştir.

Çok hesaplı kullanım (tüm kanallar)

Kanal başına birden fazla hesap çalıştırın (her biri kendi accountId değerine sahip olur):
{
  channels: {
    telegram: {
      accounts: {
        default: {
          name: "Primary bot",
          botToken: "123456:ABC...",
        },
        alerts: {
          name: "Alerts bot",
          botToken: "987654:XYZ...",
        },
      },
    },
  },
}
  • accountId atlandığında default kullanılır (CLI + yönlendirme).
  • Ortam tokenları yalnızca default hesap için geçerlidir.
  • Temel kanal ayarları, hesap başına geçersiz kılınmadıkça tüm hesaplara uygulanır.
  • Her hesabı farklı bir ajana yönlendirmek için bindings[].match.accountId kullanın.
  • openclaw channels add (veya kanal onboarding) ile varsayılan olmayan bir hesap eklediğinizde ve hâlâ tek hesaplı üst düzey kanal yapılandırmasındaysanız, OpenClaw önce hesap kapsamlı üst düzey tek hesap değerlerini kanal hesap eşlemesine taşır, böylece özgün hesap çalışmaya devam eder. Çoğu kanal bunları channels.<channel>.accounts.default içine taşır; Matrix bunun yerine mevcut eşleşen adlandırılmış/default hedefi koruyabilir.
  • Mevcut yalnızca kanala ait bağlar (accountId olmadan) varsayılan hesapla eşleşmeye devam eder; hesap kapsamlı bağlar isteğe bağlı olmaya devam eder.
  • openclaw doctor --fix, hesap kapsamlı üst düzey tek hesap değerlerini o kanal için seçilen yükseltilmiş hesaba taşıyarak karışık şekilleri de onarır. Çoğu kanal accounts.default kullanır; Matrix bunun yerine mevcut eşleşen adlandırılmış/default hedefi koruyabilir.

Diğer uzantı kanalları

Birçok uzantı kanalı channels.<id> olarak yapılandırılır ve özel kanal sayfalarında belgelenir (örneğin Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat ve Twitch). Tam kanal dizini için bkz.: Kanallar.

Grup sohbetinde mention gating

Grup mesajlarında varsayılan olarak mention gerekir (meta veri mention’ı veya güvenli regex kalıpları). WhatsApp, Telegram, Discord, Google Chat ve iMessage grup sohbetlerine uygulanır. Mention türleri:
  • Meta veri mention’ları: Yerel platform @-mention’ları. WhatsApp self-chat modunda yok sayılır.
  • Metin kalıpları: agents.list[].groupChat.mentionPatterns içindeki güvenli regex kalıpları. Geçersiz kalıplar ve güvensiz iç içe tekrarlar yok sayılır.
  • Mention gating yalnızca algılama mümkün olduğunda uygulanır (yerel mention’lar veya en az bir kalıp).
{
  messages: {
    groupChat: { historyLimit: 50 },
  },
  agents: {
    list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
  },
}
messages.groupChat.historyLimit, genel varsayılanı ayarlar. Kanallar bunu channels.<channel>.historyLimit ile geçersiz kılabilir (veya hesap başına). Devre dışı bırakmak için 0 ayarlayın.

DM geçmiş sınırları

{
  channels: {
    telegram: {
      dmHistoryLimit: 30,
      dms: {
        "123456789": { historyLimit: 50 },
      },
    },
  },
}
Çözümleme: DM başına geçersiz kılma → sağlayıcı varsayılanı → sınır yok (tümü tutulur). Desteklenenler: telegram, whatsapp, discord, slack, signal, imessage, msteams.

Self-chat modu

Self-chat modunu etkinleştirmek için kendi numaranızı allowFrom içine ekleyin (yerel @-mention’ları yok sayar, yalnızca metin kalıplarına yanıt verir):
{
  channels: {
    whatsapp: {
      allowFrom: ["+15555550123"],
      groups: { "*": { requireMention: true } },
    },
  },
  agents: {
    list: [
      {
        id: "main",
        groupChat: { mentionPatterns: ["reisponde", "@openclaw"] },
      },
    ],
  },
}

Komutlar (sohbet komutu işleme)

{
  commands: {
    native: "auto", // desteklendiğinde yerel komutları kaydet
    nativeSkills: "auto", // desteklendiğinde yerel Skills komutlarını kaydet
    text: true, // sohbet mesajlarında /commands ayrıştır
    bash: false, // ! kullanımına izin ver (takma ad: /bash)
    bashForegroundMs: 2000,
    config: false, // /config izni ver
    mcp: false, // /mcp izni ver
    plugins: false, // /plugins izni ver
    debug: false, // /debug izni ver
    restart: true, // /restart + gateway yeniden başlatma aracına izin ver
    ownerAllowFrom: ["discord:123456789012345678"],
    ownerDisplay: "raw", // raw | hash
    ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
    allowFrom: {
      "*": ["user1"],
      discord: ["user:123"],
    },
    useAccessGroups: true,
  },
}
  • Bu blok komut yüzeylerini yapılandırır. Geçerli yerleşik + paketlenmiş komut kataloğu için bkz. Slash Commands.
  • Bu sayfa yapılandırma anahtarı başvurusudur, tam komut kataloğu değildir. QQ Bot /bot-ping /bot-help /bot-logs, LINE /card, device-pair /pair, memory /dreaming, phone-control /phone ve Talk /voice gibi kanala/eklentiye ait komutlar, kendi kanal/eklenti sayfalarında ve Slash Commands içinde belgelenmiştir.
  • Metin komutları, başında / bulunan bağımsız mesajlar olmalıdır.
  • native: "auto", Discord/Telegram için yerel komutları açar, Slack’i kapalı bırakır.
  • nativeSkills: "auto", Discord/Telegram için yerel Skills komutlarını açar, Slack’i kapalı bırakır.
  • Kanal başına geçersiz kılma: channels.discord.commands.native (bool veya "auto"). false, daha önce kaydedilmiş komutları temizler.
  • Yerel skill kaydını kanal başına channels.<provider>.commands.nativeSkills ile geçersiz kılın.
  • channels.telegram.customCommands, Telegram bot menüsüne ek girdiler ekler.
  • bash: true, ana makine kabuğu için ! <cmd> kullanımını etkinleştirir. tools.elevated.enabled gerekir ve gönderenin tools.elevated.allowFrom.<channel> içinde olması gerekir.
  • config: true, /config komutunu etkinleştirir (openclaw.json okur/yazar). Gateway chat.send istemcileri için kalıcı /config set|unset yazmaları ayrıca operator.admin gerektirir; salt okunur /config show, normal yazma kapsamlı operatör istemcilerine sunulmaya devam eder.
  • mcp: true, mcp.servers altındaki OpenClaw tarafından yönetilen MCP sunucu yapılandırması için /mcp komutunu etkinleştirir.
  • plugins: true, eklenti keşfi, kurulum ve etkinleştirme/devre dışı bırakma denetimleri için /plugins komutunu etkinleştirir.
  • channels.<provider>.configWrites, kanal başına yapılandırma değişikliklerini denetler (varsayılan: true).
  • Çok hesaplı kanallarda channels.<provider>.accounts.<id>.configWrites, o hesabı hedefleyen yazmaları da denetler (örneğin /allowlist --config --account <id> veya /config set channels.<provider>.accounts.<id>...).
  • restart: false, /restart ve gateway yeniden başlatma aracı eylemlerini devre dışı bırakır. Varsayılan: true.
  • ownerAllowFrom, yalnızca sahip için olan komutlar/araçlar için açık sahip izin listesidir. allowFrom değerinden ayrıdır.
  • ownerDisplay: "hash", sistem isteminde sahip kimliklerini hash’ler. Hash’lemeyi denetlemek için ownerDisplaySecret ayarlayın.
  • allowFrom, sağlayıcı başınadır. Ayarlandığında tek yetkilendirme kaynağıdır (kanal izin listeleri/eşleştirme ve useAccessGroups yok sayılır).
  • useAccessGroups: false, allowFrom ayarlanmamışsa komutların erişim grubu ilkelerini atlamasına izin verir.
  • Komut belge eşlemesi:

Ajan varsayılanları

agents.defaults.workspace

Varsayılan: ~/.openclaw/workspace.
{
  agents: { defaults: { workspace: "~/.openclaw/workspace" } },
}

agents.defaults.repoRoot

Sistem isteminin Runtime satırında gösterilen isteğe bağlı depo kökü. Ayarlanmamışsa OpenClaw, çalışma alanından yukarı doğru yürüyerek otomatik algılar.
{
  agents: { defaults: { repoRoot: "~/Projects/openclaw" } },
}

agents.defaults.skills

agents.list[].skills ayarlamayan ajanlar için isteğe bağlı varsayılan skill izin listesi.
{
  agents: {
    defaults: { skills: ["github", "weather"] },
    list: [
      { id: "writer" }, // github, weather değerlerini devralır
      { id: "docs", skills: ["docs-search"] }, // varsayılanların yerine geçer
      { id: "locked-down", skills: [] }, // skill yok
    ],
  },
}
  • Varsayılan olarak sınırsız skill için agents.defaults.skills alanını atlayın.
  • Varsayılanları devralmak için agents.list[].skills alanını atlayın.
  • Skill olmaması için agents.list[].skills: [] ayarlayın.
  • Boş olmayan bir agents.list[].skills listesi, o ajan için son kümedir; varsayılanlarla birleştirilmez.

agents.defaults.skipBootstrap

Çalışma alanı bootstrap dosyalarının (AGENTS.md, SOUL.md, TOOLS.md, IDENTITY.md, USER.md, HEARTBEAT.md, BOOTSTRAP.md) otomatik oluşturulmasını devre dışı bırakır.
{
  agents: { defaults: { skipBootstrap: true } },
}

agents.defaults.contextInjection

Çalışma alanı bootstrap dosyalarının sistem istemine ne zaman enjekte edileceğini denetler. Varsayılan: "always".
  • "continuation-skip": güvenli devam turlarında (tamamlanmış bir asistan yanıtından sonra) çalışma alanı bootstrap yeniden enjeksiyonu atlanır ve istem boyutu azaltılır. Heartbeat çalıştırmaları ve sıkıştırma sonrası yeniden denemeler yine bağlamı yeniden oluşturur.
{
  agents: { defaults: { contextInjection: "continuation-skip" } },
}

agents.defaults.bootstrapMaxChars

Kesmeden önce çalışma alanı bootstrap dosyası başına azami karakter sayısı. Varsayılan: 20000.
{
  agents: { defaults: { bootstrapMaxChars: 20000 } },
}

agents.defaults.bootstrapTotalMaxChars

Tüm çalışma alanı bootstrap dosyalarına enjekte edilen toplam azami karakter sayısı. Varsayılan: 150000.
{
  agents: { defaults: { bootstrapTotalMaxChars: 150000 } },
}

agents.defaults.bootstrapPromptTruncationWarning

Bootstrap bağlamı kesildiğinde ajan tarafından görülebilen uyarı metnini denetler. Varsayılan: "once".
  • "off": sistem istemine hiçbir zaman uyarı metni enjekte etmez.
  • "once": her benzersiz kesilme imzası için bir kez uyarı enjekte eder (önerilir).
  • "always": kesilme olduğunda her çalıştırmada uyarı enjekte eder.
{
  agents: { defaults: { bootstrapPromptTruncationWarning: "once" } }, // off | once | always
}

agents.defaults.imageMaxDimensionPx

Sağlayıcı çağrılarından önce transcript/araç görsel bloklarında görselin en uzun kenarı için azami piksel boyutu. Varsayılan: 1200. Daha düşük değerler genellikle ekran görüntüsü ağırlıklı çalıştırmalarda vision token kullanımını ve istek yükü boyutunu azaltır. Daha yüksek değerler daha fazla görsel ayrıntıyı korur.
{
  agents: { defaults: { imageMaxDimensionPx: 1200 } },
}

agents.defaults.userTimezone

Sistem istemi bağlamı için saat dilimi (mesaj zaman damgaları için değil). Ana makine saat dilimine geri döner.
{
  agents: { defaults: { userTimezone: "America/Chicago" } },
}

agents.defaults.timeFormat

Sistem istemindeki saat biçimi. Varsayılan: auto (işletim sistemi tercihi).
{
  agents: { defaults: { timeFormat: "auto" } }, // auto | 12 | 24
}

agents.defaults.model

{
  agents: {
    defaults: {
      models: {
        "anthropic/claude-opus-4-6": { alias: "opus" },
        "minimax/MiniMax-M2.7": { alias: "minimax" },
      },
      model: {
        primary: "anthropic/claude-opus-4-6",
        fallbacks: ["minimax/MiniMax-M2.7"],
      },
      imageModel: {
        primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
        fallbacks: ["openrouter/google/gemini-2.0-flash-vision:free"],
      },
      imageGenerationModel: {
        primary: "openai/gpt-image-1",
        fallbacks: ["google/gemini-3.1-flash-image-preview"],
      },
      videoGenerationModel: {
        primary: "qwen/wan2.6-t2v",
        fallbacks: ["qwen/wan2.6-i2v"],
      },
      pdfModel: {
        primary: "anthropic/claude-opus-4-6",
        fallbacks: ["openai/gpt-5.4-mini"],
      },
      params: { cacheRetention: "long" }, // genel varsayılan sağlayıcı parametreleri
      embeddedHarness: {
        runtime: "auto", // auto | pi | kayıtlı harness kimliği, ör. codex
        fallback: "pi", // pi | none
      },
      pdfMaxBytesMb: 10,
      pdfMaxPages: 20,
      thinkingDefault: "low",
      verboseDefault: "off",
      elevatedDefault: "on",
      timeoutSeconds: 600,
      mediaMaxMb: 5,
      contextTokens: 200000,
      maxConcurrent: 3,
    },
  },
}
  • model: bir dizeyi ("provider/model") veya bir nesneyi ({ primary, fallbacks }) kabul eder.
    • Dize biçimi yalnızca birincil modeli ayarlar.
    • Nesne biçimi birincil modeli ve sıralı failover modellerini ayarlar.
  • imageModel: bir dizeyi ("provider/model") veya bir nesneyi ({ primary, fallbacks }) kabul eder.
    • image araç yolunda, vision model yapılandırması olarak kullanılır.
    • Ayrıca seçilen/varsayılan model görsel girdiyi kabul edemediğinde yedek yönlendirme için de kullanılır.
  • imageGenerationModel: bir dizeyi ("provider/model") veya bir nesneyi ({ primary, fallbacks }) kabul eder.
    • Paylaşılan görsel üretim yeteneği ve görsel üreten gelecekteki tüm araç/eklenti yüzeyleri tarafından kullanılır.
    • Tipik değerler: yerel Gemini görsel üretimi için google/gemini-3.1-flash-image-preview, fal için fal/fal-ai/flux/dev veya OpenAI Images için openai/gpt-image-1.
    • Bir sağlayıcı/modeli doğrudan seçerseniz, eşleşen sağlayıcı auth/API anahtarını da yapılandırın (örneğin google/* için GEMINI_API_KEY veya GOOGLE_API_KEY, openai/* için OPENAI_API_KEY, fal/* için FAL_KEY).
    • Atlanırsa image_generate yine de auth destekli bir sağlayıcı varsayılanını çıkarabilir. Önce geçerli varsayılan sağlayıcıyı, ardından kalan kayıtlı görsel üretim sağlayıcılarını sağlayıcı kimliği sırasıyla dener.
  • musicGenerationModel: bir dizeyi ("provider/model") veya bir nesneyi ({ primary, fallbacks }) kabul eder.
    • Paylaşılan müzik üretim yeteneği ve yerleşik music_generate aracı tarafından kullanılır.
    • Tipik değerler: google/lyria-3-clip-preview, google/lyria-3-pro-preview veya minimax/music-2.5+.
    • Atlanırsa music_generate yine de auth destekli bir sağlayıcı varsayılanını çıkarabilir. Önce geçerli varsayılan sağlayıcıyı, ardından kalan kayıtlı müzik üretim sağlayıcılarını sağlayıcı kimliği sırasıyla dener.
    • Bir sağlayıcı/modeli doğrudan seçerseniz, eşleşen sağlayıcı auth/API anahtarını da yapılandırın.
  • videoGenerationModel: bir dizeyi ("provider/model") veya bir nesneyi ({ primary, fallbacks }) kabul eder.
    • Paylaşılan video üretim yeteneği ve yerleşik video_generate aracı tarafından kullanılır.
    • Tipik değerler: qwen/wan2.6-t2v, qwen/wan2.6-i2v, qwen/wan2.6-r2v, qwen/wan2.6-r2v-flash veya qwen/wan2.7-r2v.
    • Atlanırsa video_generate yine de auth destekli bir sağlayıcı varsayılanını çıkarabilir. Önce geçerli varsayılan sağlayıcıyı, ardından kalan kayıtlı video üretim sağlayıcılarını sağlayıcı kimliği sırasıyla dener.
    • Bir sağlayıcı/modeli doğrudan seçerseniz, eşleşen sağlayıcı auth/API anahtarını da yapılandırın.
    • Paketlenmiş Qwen video üretim sağlayıcısı en fazla 1 çıktı videosu, 1 girdi görseli, 4 girdi videosu, 10 saniye süre ve sağlayıcı düzeyinde size, aspectRatio, resolution, audio ve watermark seçeneklerini destekler.
  • pdfModel: bir dizeyi ("provider/model") veya bir nesneyi ({ primary, fallbacks }) kabul eder.
    • pdf aracı tarafından model yönlendirmesi için kullanılır.
    • Atlanırsa PDF aracı önce imageModel değerine, ardından çözümlenen oturum/varsayılan modele geri döner.
  • pdfMaxBytesMb: çağrı zamanında maxBytesMb geçirilmediğinde pdf aracı için varsayılan PDF boyut sınırı.
  • pdfMaxPages: pdf aracında çıkarım yedek modunun dikkate aldığı varsayılan azami sayfa sayısı.
  • verboseDefault: ajanlar için varsayılan verbose düzeyi. Değerler: "off", "on", "full". Varsayılan: "off".
  • elevatedDefault: ajanlar için varsayılan elevated-output düzeyi. Değerler: "off", "on", "ask", "full". Varsayılan: "on".
  • model.primary: provider/model biçimi (ör. openai/gpt-5.4). Sağlayıcıyı atlarsanız OpenClaw önce bir takma adı, sonra bu tam model kimliği için benzersiz yapılandırılmış sağlayıcı eşleşmesini dener ve ancak bundan sonra yapılandırılmış varsayılan sağlayıcıya geri döner (eski uyumluluk davranışı, bu yüzden açık provider/model tercih edin). Bu sağlayıcı artık yapılandırılmış varsayılan modeli sunmuyorsa, OpenClaw eski ve kaldırılmış bir sağlayıcı varsayılanını göstermeye devam etmek yerine ilk yapılandırılmış sağlayıcı/modele geri döner.
  • models: /model için yapılandırılmış model kataloğu ve izin listesi. Her girdi alias (kısayol) ve params (sağlayıcıya özgü; örneğin temperature, maxTokens, cacheRetention, context1m) içerebilir.
  • params: tüm modellere uygulanan genel varsayılan sağlayıcı parametreleri. agents.defaults.params altında ayarlanır (ör. { cacheRetention: "long" }).
  • params birleştirme önceliği (yapılandırma): agents.defaults.params (genel taban), agents.defaults.models["provider/model"].params (model başına) tarafından geçersiz kılınır, ardından agents.list[].params (eşleşen ajan kimliği) anahtar bazında geçersiz kılar. Ayrıntılar için bkz. Prompt Caching.
  • embeddedHarness: varsayılan alt düzey gömülü ajan çalışma zamanı ilkesi. Kayıtlı eklenti harness’lerinin desteklenen modelleri sahiplenmesine izin vermek için runtime: "auto", yerleşik PI harness’ini zorlamak için runtime: "pi" veya runtime: "codex" gibi kayıtlı bir harness kimliği kullanın. Otomatik PI yedeğini devre dışı bırakmak için fallback: "none" ayarlayın.
  • Bu alanları değiştiren yapılandırma yazarları (örneğin /models set, /models set-image ve fallback ekle/kaldır komutları), standart nesne biçimini kaydeder ve mümkün olduğunda mevcut fallback listelerini korur.
  • maxConcurrent: oturumlar genelinde azami paralel ajan çalıştırması (her oturum yine de serileştirilir). Varsayılan: 4.

agents.defaults.embeddedHarness

embeddedHarness, gömülü ajan turlarını hangi alt düzey yürütücünün çalıştıracağını denetler. Çoğu dağıtım varsayılan { runtime: "auto", fallback: "pi" } değerini korumalıdır. Paketlenmiş Codex app-server harness’i gibi güvenilir bir eklenti yerel bir harness sağladığında bunu kullanın.
{
  agents: {
    defaults: {
      model: "codex/gpt-5.4",
      embeddedHarness: {
        runtime: "codex",
        fallback: "none",
      },
    },
  },
}
  • runtime: "auto", "pi" veya kayıtlı bir eklenti harness kimliği. Paketlenmiş Codex eklentisi codex değerini kaydeder.
  • fallback: "pi" veya "none". "pi", yerleşik PI harness’ini uyumluluk yedeği olarak korur. "none", eksik veya desteklenmeyen eklenti harness seçiminin PI’yi sessizce kullanmak yerine başarısız olmasını sağlar.
  • Ortam geçersiz kılmaları: OPENCLAW_AGENT_RUNTIME=<id|auto|pi>, runtime değerini geçersiz kılar; OPENCLAW_AGENT_HARNESS_FALLBACK=none, o süreç için PI yedeğini devre dışı bırakır.
  • Yalnızca Codex dağıtımları için model: "codex/gpt-5.4", embeddedHarness.runtime: "codex" ve embeddedHarness.fallback: "none" ayarlayın.
  • Bu yalnızca gömülü sohbet harness’ini denetler. Medya üretimi, vision, PDF, müzik, video ve TTS yine kendi sağlayıcı/model ayarlarını kullanır.
Yerleşik takma ad kısayolları (yalnızca model agents.defaults.models içinde olduğunda uygulanır):
Takma adModel
opusanthropic/claude-opus-4-6
sonnetanthropic/claude-sonnet-4-6
gptopenai/gpt-5.4
gpt-miniopenai/gpt-5.4-mini
gpt-nanoopenai/gpt-5.4-nano
geminigoogle/gemini-3.1-pro-preview
gemini-flashgoogle/gemini-3-flash-preview
gemini-flash-litegoogle/gemini-3.1-flash-lite-preview
Yapılandırdığınız takma adlar her zaman varsayılanlardan önce gelir. Z.AI GLM-4.x modelleri, --thinking off ayarlamazsanız veya agents.defaults.models["zai/<model>"].params.thinking değerini kendiniz tanımlamazsanız otomatik olarak thinking modunu etkinleştirir. Z.AI modelleri, araç çağrısı akışı için varsayılan olarak tool_stream etkinleştirir. Devre dışı bırakmak için agents.defaults.models["zai/<model>"].params.tool_stream değerini false yapın. Anthropic Claude 4.6 modelleri, açık bir thinking düzeyi ayarlanmadığında varsayılan olarak adaptive thinking kullanır.

agents.defaults.cliBackends

Salt metin yedek çalıştırmaları için isteğe bağlı CLI arka uçlarıdır (araç çağrısı yok). API sağlayıcıları başarısız olduğunda yedek olarak kullanışlıdır.
{
  agents: {
    defaults: {
      cliBackends: {
        "codex-cli": {
          command: "/opt/homebrew/bin/codex",
        },
        "my-cli": {
          command: "my-cli",
          args: ["--json"],
          output: "json",
          modelArg: "--model",
          sessionArg: "--session",
          sessionMode: "existing",
          systemPromptArg: "--system",
          systemPromptWhen: "first",
          imageArg: "--image",
          imageMode: "repeat",
        },
      },
    },
  },
}
  • CLI arka uçları öncelikle metin içindir; araçlar her zaman devre dışıdır.
  • sessionArg ayarlandığında oturumlar desteklenir.
  • imageArg dosya yollarını kabul ettiğinde görsel geçişi desteklenir.

agents.defaults.systemPromptOverride

OpenClaw tarafından oluşturulan sistem isteminin tamamını sabit bir dizeyle değiştirin. Varsayılan düzeyde (agents.defaults.systemPromptOverride) veya ajan başına (agents.list[].systemPromptOverride) ayarlanır. Ajan başına değerler önceliklidir; boş veya yalnızca boşluk içeren değer yok sayılır. Kontrollü istem deneyleri için kullanışlıdır.
{
  agents: {
    defaults: {
      systemPromptOverride: "You are a helpful assistant.",
    },
  },
}

agents.defaults.heartbeat

Periyodik heartbeat çalıştırmaları.
{
  agents: {
    defaults: {
      heartbeat: {
        every: "30m", // 0m devre dışı bırakır
        model: "openai/gpt-5.4-mini",
        includeReasoning: false,
        includeSystemPromptSection: true, // varsayılan: true; false, sistem isteminden Heartbeat bölümünü çıkarır
        lightContext: false, // varsayılan: false; true, çalışma alanı bootstrap dosyalarından yalnızca HEARTBEAT.md dosyasını tutar
        isolatedSession: false, // varsayılan: false; true, her heartbeat'i yeni bir oturumda çalıştırır (konuşma geçmişi yok)
        session: "main",
        to: "+15555550123",
        directPolicy: "allow", // allow (varsayılan) | block
        target: "none", // varsayılan: none | seçenekler: last | whatsapp | telegram | discord | ...
        prompt: "Read HEARTBEAT.md if it exists...",
        ackMaxChars: 300,
        suppressToolErrorWarnings: false,
        timeoutSeconds: 45,
      },
    },
  },
}
  • every: süre dizesi (ms/s/m/h). Varsayılan: 30m (API anahtarı auth) veya 1h (OAuth auth). Devre dışı bırakmak için 0m ayarlayın.
  • includeSystemPromptSection: false olduğunda, sistem isteminden Heartbeat bölümünü çıkarır ve HEARTBEAT.md enjeksiyonunu bootstrap bağlamına atlar. Varsayılan: true.
  • suppressToolErrorWarnings: true olduğunda heartbeat çalıştırmaları sırasında araç hata uyarısı yüklerini bastırır.
  • timeoutSeconds: iptal edilmeden önce bir heartbeat ajan turu için izin verilen azami süre (saniye). Ayarlamazsanız agents.defaults.timeoutSeconds kullanılır.
  • directPolicy: doğrudan/DM teslim ilkesi. allow (varsayılan) doğrudan hedef teslimine izin verir. block, doğrudan hedef teslimini bastırır ve reason=dm-blocked üretir.
  • lightContext: true olduğunda heartbeat çalıştırmaları hafif bootstrap bağlamı kullanır ve çalışma alanı bootstrap dosyalarından yalnızca HEARTBEAT.md dosyasını tutar.
  • isolatedSession: true olduğunda her heartbeat, önceki konuşma geçmişi olmayan yeni bir oturumda çalışır. Cron sessionTarget: "isolated" ile aynı yalıtım düzeni. Heartbeat başına token maliyetini yaklaşık 100K’den yaklaşık 2-5K token’a düşürür.
  • Ajan başına: agents.list[].heartbeat ayarlayın. Herhangi bir ajan heartbeat tanımlarsa heartbeat yalnızca o ajanlar için çalışır.
  • Heartbeat’ler tam ajan turları çalıştırır — daha kısa aralıklar daha fazla token harcar.

agents.defaults.compaction

{
  agents: {
    defaults: {
      compaction: {
        mode: "safeguard", // default | safeguard
        provider: "my-provider", // kayıtlı bir compaction sağlayıcı eklentisinin kimliği (isteğe bağlı)
        timeoutSeconds: 900,
        reserveTokensFloor: 24000,
        identifierPolicy: "strict", // strict | off | custom
        identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // identifierPolicy=custom olduğunda kullanılır
        postCompactionSections: ["Session Startup", "Red Lines"], // [] yeniden enjeksiyonu devre dışı bırakır
        model: "openrouter/anthropic/claude-sonnet-4-6", // yalnızca compaction için isteğe bağlı model geçersiz kılması
        notifyUser: true, // compaction başladığında kullanıcıya kısa bir bildirim gönder (varsayılan: false)
        memoryFlush: {
          enabled: true,
          softThresholdTokens: 6000,
          systemPrompt: "Session nearing compaction. Store durable memories now.",
          prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with the exact silent token NO_REPLY if nothing to store.",
        },
      },
    },
  },
}
  • mode: default veya safeguard (uzun geçmişler için parçalı özetleme). Bkz. Compaction.
  • provider: kayıtlı bir compaction sağlayıcı eklentisinin kimliği. Ayarlandığında, yerleşik LLM özetlemesi yerine sağlayıcının summarize() yöntemi çağrılır. Başarısızlıkta yerleşik davranışa geri döner. Bir sağlayıcı ayarlamak mode: "safeguard" değerini zorunlu kılar. Bkz. Compaction.
  • timeoutSeconds: OpenClaw’un iptal etmeden önce tek bir compaction işlemi için izin verdiği azami saniye sayısı. Varsayılan: 900.
  • identifierPolicy: strict (varsayılan), off veya custom. strict, compaction özetlemesi sırasında yerleşik opak tanımlayıcı koruma yönergelerini başa ekler.
  • identifierInstructions: identifierPolicy=custom olduğunda kullanılan isteğe bağlı özel tanımlayıcı koruma metni.
  • postCompactionSections: compaction sonrasında yeniden enjekte edilecek isteğe bağlı AGENTS.md H2/H3 bölüm adları. Varsayılan olarak ["Session Startup", "Red Lines"]; yeniden enjeksiyonu devre dışı bırakmak için [] ayarlayın. Ayarlanmamışsa veya açıkça bu varsayılan çift olarak ayarlanmışsa, eski Every Session/Safety başlıkları da eski uyumluluk için yedek olarak kabul edilir.
  • model: yalnızca compaction özetlemesi için isteğe bağlı provider/model-id geçersiz kılması. Ana oturum bir modeli kullanmaya devam ederken compaction özetleri başka bir modelde çalışsın istiyorsanız bunu kullanın; ayarlanmadığında compaction oturumun birincil modelini kullanır.
  • notifyUser: true olduğunda, compaction başladığında kullanıcıya kısa bir bildirim gönderir (örneğin, “Compacting context…”). Compaction’ın sessiz kalması için varsayılan olarak devre dışıdır.
  • memoryFlush: dayanıklı anıları saklamak için otomatik compaction öncesinde sessiz ajan turu. Çalışma alanı salt okunursa atlanır.

agents.defaults.contextPruning

LLM’e göndermeden önce bellek içi bağlamdan eski araç sonuçlarını budar. Diskteki oturum geçmişini değiştirmez.
{
  agents: {
    defaults: {
      contextPruning: {
        mode: "cache-ttl", // off | cache-ttl
        ttl: "1h", // süre (ms/s/m/h), varsayılan birim: dakika
        keepLastAssistants: 3,
        softTrimRatio: 0.3,
        hardClearRatio: 0.5,
        minPrunableToolChars: 50000,
        softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
        hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
        tools: { deny: ["browser", "canvas"] },
      },
    },
  },
}
  • mode: "cache-ttl" budama geçişlerini etkinleştirir.
  • ttl, budamanın ne sıklıkla yeniden çalışabileceğini denetler (son önbellek dokunuşundan sonra).
  • Budama, önce aşırı büyük araç sonuçlarını yumuşak şekilde kırpar, sonra gerekirse daha eski araç sonuçlarını tamamen temizler.
Soft-trim, başlangıcı + sonu korur ve ortaya ... ekler.Hard-clear, tüm araç sonucunu yer tutucuyla değiştirir.Notlar:
  • Görsel blokları asla kırpılmaz/temizlenmez.
  • Oranlar tam token sayıları değil, karakter tabanlıdır (yaklaşık).
  • keepLastAssistants değerinden daha az asistan mesajı varsa budama atlanır.
Davranış ayrıntıları için bkz. Session Pruning.

Blok akışı

{
  agents: {
    defaults: {
      blockStreamingDefault: "off", // on | off
      blockStreamingBreak: "text_end", // text_end | message_end
      blockStreamingChunk: { minChars: 800, maxChars: 1200 },
      blockStreamingCoalesce: { idleMs: 1000 },
      humanDelay: { mode: "natural" }, // off | natural | custom (minMs/maxMs kullanın)
    },
  },
}
  • Telegram dışındaki kanallarda blok yanıtlarını etkinleştirmek için açık *.blockStreaming: true gerekir.
  • Kanal geçersiz kılmaları: channels.<channel>.blockStreamingCoalesce (ve hesap başına varyantları). Signal/Slack/Discord/Google Chat varsayılanı minChars: 1500 kullanır.
  • humanDelay: blok yanıtları arasında rastgele duraklama. natural = 800–2500 ms. Ajan başına geçersiz kılma: agents.list[].humanDelay.
Davranış + parçalama ayrıntıları için bkz. Streaming.

Yazıyor göstergeleri

{
  agents: {
    defaults: {
      typingMode: "instant", // never | instant | thinking | message
      typingIntervalSeconds: 6,
    },
  },
}
  • Varsayılanlar: doğrudan sohbetler/mention’lar için instant, mention içermeyen grup sohbetleri için message.
  • Oturum başına geçersiz kılmalar: session.typingMode, session.typingIntervalSeconds.
Bkz. Typing Indicators.

agents.defaults.sandbox

Gömülü ajan için isteğe bağlı sandbox kullanımı. Tam kılavuz için bkz. Sandboxing.
{
  agents: {
    defaults: {
      sandbox: {
        mode: "non-main", // off | non-main | all
        backend: "docker", // docker | ssh | openshell
        scope: "agent", // session | agent | shared
        workspaceAccess: "none", // none | ro | rw
        workspaceRoot: "~/.openclaw/sandboxes",
        docker: {
          image: "openclaw-sandbox:bookworm-slim",
          containerPrefix: "openclaw-sbx-",
          workdir: "/workspace",
          readOnlyRoot: true,
          tmpfs: ["/tmp", "/var/tmp", "/run"],
          network: "none",
          user: "1000:1000",
          capDrop: ["ALL"],
          env: { LANG: "C.UTF-8" },
          setupCommand: "apt-get update && apt-get install -y git curl jq",
          pidsLimit: 256,
          memory: "1g",
          memorySwap: "2g",
          cpus: 1,
          ulimits: {
            nofile: { soft: 1024, hard: 2048 },
            nproc: 256,
          },
          seccompProfile: "/path/to/seccomp.json",
          apparmorProfile: "openclaw-sandbox",
          dns: ["1.1.1.1", "8.8.8.8"],
          extraHosts: ["internal.service:10.0.0.5"],
          binds: ["/home/user/source:/source:rw"],
        },
        ssh: {
          target: "user@gateway-host:22",
          command: "ssh",
          workspaceRoot: "/tmp/openclaw-sandboxes",
          strictHostKeyChecking: true,
          updateHostKeys: true,
          identityFile: "~/.ssh/id_ed25519",
          certificateFile: "~/.ssh/id_ed25519-cert.pub",
          knownHostsFile: "~/.ssh/known_hosts",
          // SecretRef / satır içi içerikler de desteklenir:
          // identityData: { source: "env", provider: "default", id: "SSH_IDENTITY" },
          // certificateData: { source: "env", provider: "default", id: "SSH_CERTIFICATE" },
          // knownHostsData: { source: "env", provider: "default", id: "SSH_KNOWN_HOSTS" },
        },
        browser: {
          enabled: false,
          image: "openclaw-sandbox-browser:bookworm-slim",
          network: "openclaw-sandbox-browser",
          cdpPort: 9222,
          cdpSourceRange: "172.21.0.1/32",
          vncPort: 5900,
          noVncPort: 6080,
          headless: false,
          enableNoVnc: true,
          allowHostControl: false,
          autoStart: true,
          autoStartTimeoutMs: 12000,
        },
        prune: {
          idleHours: 24,
          maxAgeDays: 7,
        },
      },
    },
  },
  tools: {
    sandbox: {
      tools: {
        allow: [
          "exec",
          "process",
          "read",
          "write",
          "edit",
          "apply_patch",
          "sessions_list",
          "sessions_history",
          "sessions_send",
          "sessions_spawn",
          "session_status",
        ],
        deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"],
      },
    },
  },
}
Arka uç:
  • docker: yerel Docker çalışma zamanı (varsayılan)
  • ssh: genel SSH destekli uzak çalışma zamanı
  • openshell: OpenShell çalışma zamanı
backend: "openshell" seçildiğinde, çalışma zamanına özgü ayarlar plugins.entries.openshell.config altına taşınır.SSH arka uç yapılandırması:
  • target: user@host[:port] biçiminde SSH hedefi
  • command: SSH istemci komutu (varsayılan: ssh)
  • workspaceRoot: kapsam başına çalışma alanları için kullanılan mutlak uzak kök
  • identityFile / certificateFile / knownHostsFile: OpenSSH’ye geçirilen mevcut yerel dosyalar
  • identityData / certificateData / knownHostsData: çalışma zamanında OpenClaw’un geçici dosyalara dönüştürdüğü satır içi içerikler veya SecretRef’ler
  • strictHostKeyChecking / updateHostKeys: OpenSSH ana makine anahtarı ilkesi ayarları
SSH kimlik doğrulama önceliği:
  • identityData, identityFile değerini geçersiz kılar
  • certificateData, certificateFile değerini geçersiz kılar
  • knownHostsData, knownHostsFile değerini geçersiz kılar
  • SecretRef destekli *Data değerleri, sandbox oturumu başlamadan önce etkin gizli bilgiler çalışma zamanı anlık görüntüsünden çözülür
SSH arka uç davranışı:
  • oluşturma veya yeniden oluşturma sonrasında uzak çalışma alanını bir kez tohumlar
  • ardından uzak SSH çalışma alanını standart kaynak olarak tutar
  • exec, dosya araçları ve medya yollarını SSH üzerinden yönlendirir
  • uzak değişiklikleri otomatik olarak ana makineye geri eşitlemez
  • sandbox tarayıcı kapsayıcılarını desteklemez
Çalışma alanı erişimi:
  • none: ~/.openclaw/sandboxes altında kapsam başına sandbox çalışma alanı
  • ro: /workspace konumunda sandbox çalışma alanı, /agent konumunda salt okunur bağlanmış ajan çalışma alanı
  • rw: ajan çalışma alanı /workspace konumuna okuma/yazma olarak bağlanır
Kapsam:
  • session: oturum başına kapsayıcı + çalışma alanı
  • agent: ajan başına bir kapsayıcı + çalışma alanı (varsayılan)
  • shared: paylaşılan kapsayıcı ve çalışma alanı (oturumlar arası yalıtım yok)
OpenShell eklenti yapılandırması:
{
  plugins: {
    entries: {
      openshell: {
        enabled: true,
        config: {
          mode: "mirror", // mirror | remote
          from: "openclaw",
          remoteWorkspaceDir: "/sandbox",
          remoteAgentWorkspaceDir: "/agent",
          gateway: "lab", // isteğe bağlı
          gatewayEndpoint: "https://lab.example", // isteğe bağlı
          policy: "strict", // isteğe bağlı OpenShell ilke kimliği
          providers: ["openai"], // isteğe bağlı
          autoProviders: true,
          timeoutSeconds: 120,
        },
      },
    },
  },
}
OpenShell modu:
  • mirror: exec öncesinde uzağı yerelden tohumlar, exec sonrasında geri eşitler; yerel çalışma alanı standart kaynak olarak kalır
  • remote: sandbox oluşturulduğunda uzağı bir kez tohumlar, ardından uzak çalışma alanını standart kaynak olarak tutar
remote modunda, OpenClaw dışında ana makinede yapılan yerel düzenlemeler tohumlama adımından sonra otomatik olarak sandbox’a eşitlenmez. Taşıma katmanı OpenShell sandbox’ına SSH’dir, ancak sandbox yaşam döngüsüne ve isteğe bağlı mirror eşitlemeye eklenti sahip olur.setupCommand, kapsayıcı oluşturulduktan sonra bir kez çalışır (sh -lc ile). Ağ çıkışı, yazılabilir kök ve root kullanıcı gerekir.Kapsayıcılar varsayılan olarak network: "none" kullanır — ajanın dış erişime ihtiyacı varsa "bridge" (veya özel bir bridge ağı) olarak ayarlayın. "host" engellenir. "container:<id>" varsayılan olarak engellenir; ancak açıkça sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true ayarlarsanız izin verilir (acil durum).Gelen ekler, etkin çalışma alanındaki media/inbound/* içine hazırlanır.docker.binds, ek ana makine dizinlerini bağlar; genel ve ajan başına bağlar birleştirilir.Sandbox tarayıcısı (sandbox.browser.enabled): kapsayıcı içinde Chromium + CDP. noVNC URL’si sistem istemine enjekte edilir. openclaw.json içinde browser.enabled gerektirmez. noVNC gözlemci erişimi varsayılan olarak VNC kimlik doğrulamasını kullanır ve OpenClaw, paylaşılan URL içinde parolayı açığa çıkarmak yerine kısa ömürlü bir token URL’si üretir.
  • allowHostControl: false (varsayılan), sandbox’lı oturumların ana makine tarayıcısını hedeflemesini engeller.
  • network varsayılan olarak openclaw-sandbox-browser kullanır (özel bridge ağı). Yalnızca açıkça genel bridge bağlantısı istediğinizde bridge olarak ayarlayın.
  • cdpSourceRange, kapsayıcı kenarında CDP girişini isteğe bağlı olarak bir CIDR aralığıyla sınırlar (örneğin 172.21.0.1/32).
  • sandbox.browser.binds, ek ana makine dizinlerini yalnızca sandbox tarayıcı kapsayıcısına bağlar. Ayarlandığında ([] dahil), tarayıcı kapsayıcısı için docker.binds değerinin yerini alır.
  • Başlatma varsayılanları scripts/sandbox-browser-entrypoint.sh içinde tanımlanır ve kapsayıcı ana makineleri için ayarlanmıştır:
    • --remote-debugging-address=127.0.0.1
    • --remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>
    • --user-data-dir=${HOME}/.chrome
    • --no-first-run
    • --no-default-browser-check
    • --disable-3d-apis
    • --disable-gpu
    • --disable-software-rasterizer
    • --disable-dev-shm-usage
    • --disable-background-networking
    • --disable-features=TranslateUI
    • --disable-breakpad
    • --disable-crash-reporter
    • --renderer-process-limit=2
    • --no-zygote
    • --metrics-recording-only
    • --disable-extensions (varsayılan olarak etkin)
    • --disable-3d-apis, --disable-software-rasterizer ve --disable-gpu varsayılan olarak etkindir ve WebGL/3D kullanımı bunu gerektiriyorsa OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0 ile devre dışı bırakılabilir.
    • OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0, iş akışınız bunlara bağlıysa uzantıları yeniden etkinleştirir.
    • --renderer-process-limit=2, OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N> ile değiştirilebilir; Chromium’un varsayılan süreç sınırını kullanmak için 0 ayarlayın.
    • ayrıca noSandbox etkinse --no-sandbox ve --disable-setuid-sandbox.
    • Varsayılanlar kapsayıcı görselinin temel ayarlarıdır; kapsayıcı varsayılanlarını değiştirmek için özel bir entrypoint içeren özel bir tarayıcı görseli kullanın.
Tarayıcı sandbox kullanımı ve sandbox.docker.binds yalnızca Docker içindir. İmajları oluşturun:
scripts/sandbox-setup.sh           # ana sandbox imajı
scripts/sandbox-browser-setup.sh   # isteğe bağlı tarayıcı imajı

agents.list (ajan başına geçersiz kılmalar)

{
  agents: {
    list: [
      {
        id: "main",
        default: true,
        name: "Main Agent",
        workspace: "~/.openclaw/workspace",
        agentDir: "~/.openclaw/agents/main/agent",
        model: "anthropic/claude-opus-4-6", // veya { primary, fallbacks }
        thinkingDefault: "high", // ajan başına thinking düzeyi geçersiz kılması
        reasoningDefault: "on", // ajan başına reasoning görünürlüğü geçersiz kılması
        fastModeDefault: false, // ajan başına fast mode geçersiz kılması
        embeddedHarness: { runtime: "auto", fallback: "pi" },
        params: { cacheRetention: "none" }, // eşleşen defaults.models params değerlerini anahtar bazında geçersiz kılar
        skills: ["docs-search"], // ayarlandığında agents.defaults.skills değerinin yerine geçer
        identity: {
          name: "Samantha",
          theme: "helpful sloth",
          emoji: "🦥",
          avatar: "avatars/samantha.png",
        },
        groupChat: { mentionPatterns: ["@openclaw"] },
        sandbox: { mode: "off" },
        runtime: {
          type: "acp",
          acp: {
            agent: "codex",
            backend: "acpx",
            mode: "persistent",
            cwd: "/workspace/openclaw",
          },
        },
        subagents: { allowAgents: ["*"] },
        tools: {
          profile: "coding",
          allow: ["browser"],
          deny: ["canvas"],
          elevated: { enabled: true },
        },
      },
    ],
  },
}
  • id: sabit ajan kimliği (zorunlu).
  • default: birden fazla ayarlanırsa ilki kazanır (uyarı günlüğe kaydedilir). Hiçbiri ayarlanmazsa listedeki ilk giriş varsayılan olur.
  • model: dize biçimi yalnızca primary değerini geçersiz kılar; nesne biçimi { primary, fallbacks } her ikisini de geçersiz kılar ([], genel fallback’leri devre dışı bırakır). Yalnızca primary değerini geçersiz kılan cron işleri, siz fallbacks: [] ayarlamadığınız sürece varsayılan fallback’leri yine de devralır.
  • params: agents.defaults.models içindeki seçili model girdisinin üzerine birleştirilen ajan başına akış parametreleri. Tüm model kataloğunu çoğaltmadan cacheRetention, temperature veya maxTokens gibi ajana özgü geçersiz kılmalar için bunu kullanın.
  • skills: isteğe bağlı ajan başına skill izin listesi. Atlanırsa ajan, ayarlıysa agents.defaults.skills değerini devralır; açık bir liste varsayılanlarla birleşmek yerine onların yerini alır ve [] skill olmadığı anlamına gelir.
  • thinkingDefault: isteğe bağlı ajan başına varsayılan thinking düzeyi (off | minimal | low | medium | high | xhigh | adaptive). Mesaj başına veya oturum düzeyinde bir geçersiz kılma ayarlanmadığında bu ajan için agents.defaults.thinkingDefault değerini geçersiz kılar.
  • reasoningDefault: isteğe bağlı ajan başına varsayılan reasoning görünürlüğü (on | off | stream). Mesaj başına veya oturum düzeyinde bir reasoning geçersiz kılması ayarlanmadığında uygulanır.
  • fastModeDefault: isteğe bağlı ajan başına fast mode varsayılanı (true | false). Mesaj başına veya oturum düzeyinde bir fast-mode geçersiz kılması ayarlanmadığında uygulanır.
  • embeddedHarness: isteğe bağlı ajan başına alt düzey harness ilkesi geçersiz kılması. Bir ajanı yalnızca Codex yaparken diğer ajanların varsayılan PI fallback’ini koruması için { runtime: "codex", fallback: "none" } kullanın.
  • runtime: isteğe bağlı ajan başına çalışma zamanı tanımlayıcısı. Ajanın varsayılan olarak ACP harness oturumları kullanması gerekiyorsa runtime.acp varsayılanlarıyla (agent, backend, mode, cwd) birlikte type: "acp" kullanın.
  • identity.avatar: çalışma alanına göreli yol, http(s) URL’si veya data: URI’si.
  • identity, varsayılanları türetir: ackReaction değerini emoji üzerinden, mentionPatterns değerini name/emoji üzerinden.
  • subagents.allowAgents: sessions_spawn için ajan kimliği izin listesi (["*"] = herhangi biri; varsayılan: yalnızca aynı ajan).
  • Sandbox devralma koruması: istekte bulunan oturum sandbox’lıysa sessions_spawn, sandbox olmadan çalışacak hedefleri reddeder.
  • subagents.requireAgentId: true olduğunda agentId atlayan sessions_spawn çağrılarını engeller (açık profil seçimini zorunlu kılar; varsayılan: false).

Çoklu ajan yönlendirmesi

Tek bir Gateway içinde birden fazla yalıtılmış ajan çalıştırın. Bkz. Multi-Agent.
{
  agents: {
    list: [
      { id: "home", default: true, workspace: "~/.openclaw/workspace-home" },
      { id: "work", workspace: "~/.openclaw/workspace-work" },
    ],
  },
  bindings: [
    { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
    { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
  ],
}

Bağlama eşleşme alanları

  • type (isteğe bağlı): normal yönlendirme için route (tip eksikse varsayılan route olur), kalıcı ACP konuşma bağları için acp.
  • match.channel (zorunlu)
  • match.accountId (isteğe bağlı; * = herhangi bir hesap; atlanırsa = varsayılan hesap)
  • match.peer (isteğe bağlı; { kind: direct|group|channel, id })
  • match.guildId / match.teamId (isteğe bağlı; kanala özgü)
  • acp (isteğe bağlı; yalnızca type: "acp" için): { mode, label, cwd, backend }
Deterministik eşleşme sırası:
  1. match.peer
  2. match.guildId
  3. match.teamId
  4. match.accountId (tam eşleşme, peer/guild/team olmadan)
  5. match.accountId: "*" (kanal genelinde)
  6. Varsayılan ajan
Her katmanda, eşleşen ilk bindings girdisi kazanır. type: "acp" girdileri için OpenClaw, tam konuşma kimliğine göre çözümler (match.channel + hesap + match.peer.id) ve yukarıdaki route bağlama katman sırasını kullanmaz.

Ajan başına erişim profilleri

{
  agents: {
    list: [
      {
        id: "personal",
        workspace: "~/.openclaw/workspace-personal",
        sandbox: { mode: "off" },
      },
    ],
  },
}
{
  agents: {
    list: [
      {
        id: "family",
        workspace: "~/.openclaw/workspace-family",
        sandbox: { mode: "all", scope: "agent", workspaceAccess: "ro" },
        tools: {
          allow: [
            "read",
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
          ],
          deny: ["write", "edit", "apply_patch", "exec", "process", "browser"],
        },
      },
    ],
  },
}
{
  agents: {
    list: [
      {
        id: "public",
        workspace: "~/.openclaw/workspace-public",
        sandbox: { mode: "all", scope: "agent", workspaceAccess: "none" },
        tools: {
          allow: [
            "sessions_list",
            "sessions_history",
            "sessions_send",
            "sessions_spawn",
            "session_status",
            "whatsapp",
            "telegram",
            "slack",
            "discord",
            "gateway",
          ],
          deny: [
            "read",
            "write",
            "edit",
            "apply_patch",
            "exec",
            "process",
            "browser",
            "canvas",
            "nodes",
            "cron",
            "gateway",
            "image",
          ],
        },
      },
    ],
  },
}
Öncelik ayrıntıları için bkz. Multi-Agent Sandbox & Tools.

Oturum

{
  session: {
    scope: "per-sender",
    dmScope: "main", // main | per-peer | per-channel-peer | per-account-channel-peer
    identityLinks: {
      alice: ["telegram:123456789", "discord:987654321012345678"],
    },
    reset: {
      mode: "daily", // daily | idle
      atHour: 4,
      idleMinutes: 60,
    },
    resetByType: {
      thread: { mode: "daily", atHour: 4 },
      direct: { mode: "idle", idleMinutes: 240 },
      group: { mode: "idle", idleMinutes: 120 },
    },
    resetTriggers: ["/new", "/reset"],
    store: "~/.openclaw/agents/{agentId}/sessions/sessions.json",
    parentForkMaxTokens: 100000, // bu token sayısının üzerinde üst iş parçacığı fork'u atlanır (0 devre dışı bırakır)
    maintenance: {
      mode: "warn", // warn | enforce
      pruneAfter: "30d",
      maxEntries: 500,
      rotateBytes: "10mb",
      resetArchiveRetention: "30d", // süre veya false
      maxDiskBytes: "500mb", // isteğe bağlı kesin bütçe
      highWaterBytes: "400mb", // isteğe bağlı temizleme hedefi
    },
    threadBindings: {
      enabled: true,
      idleHours: 24, // etkinliksizlik nedeniyle varsayılan otomatik odak kaldırma saati (`0` devre dışı bırakır)
      maxAgeHours: 0, // varsayılan kesin azami yaş saati (`0` devre dışı bırakır)
    },
    mainKey: "main", // eski kullanım (çalışma zamanı her zaman "main" kullanır)
    agentToAgent: { maxPingPongTurns: 5 },
    sendPolicy: {
      rules: [{ action: "deny", match: { channel: "discord", chatType: "group" } }],
      default: "allow",
    },
  },
}
  • scope: grup sohbeti bağlamları için temel oturum gruplama stratejisi.
    • per-sender (varsayılan): her gönderen, bir kanal bağlamı içinde yalıtılmış bir oturum alır.
    • global: bir kanal bağlamındaki tüm katılımcılar tek bir oturumu paylaşır (yalnızca paylaşılan bağlam amaçlandığında kullanın).
  • dmScope: DM’lerin nasıl gruplandığı.
    • main: tüm DM’ler ana oturumu paylaşır.
    • per-peer: kanallar arasında gönderen kimliğine göre yalıtır.
    • per-channel-peer: kanal + gönderen başına yalıtır (çok kullanıcılı gelen kutuları için önerilir).
    • per-account-channel-peer: hesap + kanal + gönderen başına yalıtır (çok hesaplı kullanım için önerilir).
  • identityLinks: kanallar arası oturum paylaşımı için standart kimlikleri sağlayıcı önekli eşlere eşler.
  • reset: birincil sıfırlama ilkesi. daily, yerel saatte atHour zamanında sıfırlar; idle, idleMinutes sonrasında sıfırlar. Her ikisi de yapılandırılmışsa önce süresi dolan kazanır.
  • resetByType: türe göre geçersiz kılmalar (direct, group, thread). Eski dm, direct için takma ad olarak kabul edilir.
  • parentForkMaxTokens: çatallı bir iş parçacığı oturumu oluştururken izin verilen azami üst oturum totalTokens değeri (varsayılan 100000).
    • Üst totalTokens bu değerin üzerindeyse OpenClaw, üst transcript geçmişini devralmak yerine yeni bir iş parçacığı oturumu başlatır.
    • Bu korumayı devre dışı bırakmak ve üst çatallamaya her zaman izin vermek için 0 ayarlayın.
  • mainKey: eski alan. Çalışma zamanı, ana doğrudan sohbet bölmesi için her zaman "main" kullanır.
  • agentToAgent.maxPingPongTurns: ajandan ajana değişimlerde ajanlar arasındaki azami geri yanıt turu sayısı (tamsayı, aralık: 05). 0, ping-pong zincirlemeyi devre dışı bırakır.
  • sendPolicy: channel, chatType (direct|group|channel, eski dm takma adıyla birlikte), keyPrefix veya rawKeyPrefix ile eşleştirir. İlk ret kazanır.
  • maintenance: oturum deposu temizleme + saklama denetimleri.
    • mode: warn yalnızca uyarı üretir; enforce temizliği uygular.
    • pruneAfter: eski girdiler için yaş kesme noktası (varsayılan 30d).
    • maxEntries: sessions.json içindeki azami girdi sayısı (varsayılan 500).
    • rotateBytes: sessions.json bu boyutu aştığında döndürür (varsayılan 10mb).
    • resetArchiveRetention: *.reset.<timestamp> transcript arşivleri için saklama süresi. Varsayılan olarak pruneAfter; devre dışı bırakmak için false ayarlayın.
    • maxDiskBytes: oturumlar dizini için isteğe bağlı disk bütçesi. warn modunda uyarı günlüğe kaydeder; enforce modunda önce en eski yapıtları/oturumları kaldırır.
    • highWaterBytes: bütçe temizliğinden sonraki isteğe bağlı hedef. Varsayılan olarak maxDiskBytes değerinin %80’idir.
  • threadBindings: iş parçacığına bağlı oturum özellikleri için genel varsayılanlar.
    • enabled: ana varsayılan anahtar (sağlayıcılar geçersiz kılabilir; Discord channels.discord.threadBindings.enabled kullanır)
    • idleHours: etkinliksizlik nedeniyle otomatik odak kaldırma için saat cinsinden varsayılan süre (0 devre dışı bırakır; sağlayıcılar geçersiz kılabilir)
    • maxAgeHours: saat cinsinden varsayılan kesin azami yaş (0 devre dışı bırakır; sağlayıcılar geçersiz kılabilir)

Mesajlar

{
  messages: {
    responsePrefix: "🦞", // veya "auto"
    ackReaction: "👀",
    ackReactionScope: "group-mentions", // group-mentions | group-all | direct | all
    removeAckAfterReply: false,
    queue: {
      mode: "collect", // steer | followup | collect | steer-backlog | steer+backlog | queue | interrupt
      debounceMs: 1000,
      cap: 20,
      drop: "summarize", // old | new | summarize
      byChannel: {
        whatsapp: "collect",
        telegram: "collect",
      },
    },
    inbound: {
      debounceMs: 2000, // 0 devre dışı bırakır
      byChannel: {
        whatsapp: 5000,
        slack: 1500,
      },
    },
  },
}

Yanıt öneki

Kanal/hesap başına geçersiz kılmalar: channels.<channel>.responsePrefix, channels.<channel>.accounts.<id>.responsePrefix. Çözümleme (en özel olan kazanır): hesap → kanal → genel. "" devre dışı bırakır ve zincirlemeyi durdurur. "auto", [{identity.name}] üretir. Şablon değişkenleri:
DeğişkenAçıklamaÖrnek
{model}Kısa model adıclaude-opus-4-6
{modelFull}Tam model tanımlayıcısıanthropic/claude-opus-4-6
{provider}Sağlayıcı adıanthropic
{thinkingLevel}Geçerli thinking düzeyihigh, low, off
{identity.name}Ajan kimlik adı("auto" ile aynı)
Değişkenler büyük/küçük harfe duyarsızdır. {think}, {thinkingLevel} için bir takma addır.

Ack tepkisi

  • Varsayılan olarak etkin ajanın identity.emoji değerini kullanır, yoksa "👀" kullanılır. Devre dışı bırakmak için "" ayarlayın.
  • Kanal başına geçersiz kılmalar: channels.<channel>.ackReaction, channels.<channel>.accounts.<id>.ackReaction.
  • Çözümleme sırası: hesap → kanal → messages.ackReaction → kimlik yedeği.
  • Kapsam: group-mentions (varsayılan), group-all, direct, all.
  • removeAckAfterReply, Slack, Discord ve Telegram’da yanıttan sonra ack’i kaldırır.
  • messages.statusReactions.enabled, Slack, Discord ve Telegram’da yaşam döngüsü durum tepkilerini etkinleştirir. Slack ve Discord’da ayarlanmamış olması, ack tepkileri etkin olduğunda durum tepkilerini etkin tutar. Telegram’da yaşam döngüsü durum tepkilerini etkinleştirmek için bunu açıkça true yapın.

Gelen debounce

Aynı gönderenden gelen hızlı, yalnızca metin içeren mesajları tek bir ajan turunda toplar. Medya/ekler hemen flush edilir. Kontrol komutları debounce mekanizmasını atlar.

TTS (metinden konuşmaya)

{
  messages: {
    tts: {
      auto: "always", // off | always | inbound | tagged
      mode: "final", // final | all
      provider: "elevenlabs",
      summaryModel: "openai/gpt-4.1-mini",
      modelOverrides: { enabled: true },
      maxTextLength: 4000,
      timeoutMs: 30000,
      prefsPath: "~/.openclaw/settings/tts.json",
      elevenlabs: {
        apiKey: "elevenlabs_api_key",
        baseUrl: "https://api.elevenlabs.io",
        voiceId: "voice_id",
        modelId: "eleven_multilingual_v2",
        seed: 42,
        applyTextNormalization: "auto",
        languageCode: "en",
        voiceSettings: {
          stability: 0.5,
          similarityBoost: 0.75,
          style: 0.0,
          useSpeakerBoost: true,
          speed: 1.0,
        },
      },
      openai: {
        apiKey: "openai_api_key",
        baseUrl: "https://api.openai.com/v1",
        model: "gpt-4o-mini-tts",
        voice: "alloy",
      },
    },
  },
}
  • auto, varsayılan otomatik TTS modunu denetler: off, always, inbound veya tagged. /tts on|off yerel tercihleri geçersiz kılabilir ve /tts status etkin durumu gösterir.
  • summaryModel, otomatik özetleme için agents.defaults.model.primary değerini geçersiz kılar.
  • modelOverrides varsayılan olarak etkindir; modelOverrides.allowProvider varsayılan olarak false değerindedir (isteğe bağlı etkinleştirme gerekir).
  • API anahtarları yedek olarak ELEVENLABS_API_KEY/XI_API_KEY ve OPENAI_API_KEY kullanır.
  • openai.baseUrl, OpenAI TTS uç noktasını geçersiz kılar. Çözümleme sırası yapılandırma, ardından OPENAI_TTS_BASE_URL, ardından https://api.openai.com/v1 şeklindedir.
  • openai.baseUrl, OpenAI dışı bir uç noktayı işaret ettiğinde OpenClaw bunu OpenAI uyumlu bir TTS sunucusu olarak ele alır ve model/ses doğrulamasını gevşetir.

Talk

Talk modu için varsayılanlar (macOS/iOS/Android).
{
  talk: {
    provider: "elevenlabs",
    providers: {
      elevenlabs: {
        voiceId: "elevenlabs_voice_id",
        voiceAliases: {
          Clawd: "EXAVITQu4vr4xnSDxMaL",
          Roger: "CwhRBWXzGAHq8TQ4Fs17",
        },
        modelId: "eleven_v3",
        outputFormat: "mp3_44100_128",
        apiKey: "elevenlabs_api_key",
      },
    },
    silenceTimeoutMs: 1500,
    interruptOnSpeech: true,
  },
}
  • Birden fazla Talk sağlayıcısı yapılandırıldığında talk.provider, talk.providers içindeki bir anahtarla eşleşmelidir.
  • Eski düz Talk anahtarları (talk.voiceId, talk.voiceAliases, talk.modelId, talk.outputFormat, talk.apiKey) yalnızca uyumluluk içindir ve otomatik olarak talk.providers.<provider> içine taşınır.
  • Ses kimlikleri yedek olarak ELEVENLABS_VOICE_ID veya SAG_VOICE_ID kullanır.
  • providers.*.apiKey, düz metin dizeleri veya SecretRef nesnelerini kabul eder.
  • ELEVENLABS_API_KEY yedeği yalnızca hiçbir Talk API anahtarı yapılandırılmadığında uygulanır.
  • providers.*.voiceAliases, Talk yönergelerinin kolay adlar kullanmasına izin verir.
  • silenceTimeoutMs, Talk modunun transcript’i göndermeden önce kullanıcı sessizliğinden sonra ne kadar bekleyeceğini denetler. Ayarlanmamışsa platform varsayılan duraklama penceresi korunur (macOS ve Android'de 700 ms, iOS'ta 900 ms).

Araçlar

Araç profilleri

tools.profile, tools.allow/tools.deny öncesinde temel bir izin listesi ayarlar: Yerel onboarding, ayarlanmamış yeni yerel yapılandırmalarda varsayılan olarak tools.profile: "coding" kullanır (mevcut açık profiller korunur).
Profilİçerir
minimalyalnızca session_status
codinggroup:fs, group:runtime, group:web, group:sessions, group:memory, cron, image, image_generate, video_generate
messaginggroup:messaging, sessions_list, sessions_history, sessions_send, session_status
fullKısıtlama yoktur (ayarlanmamış ile aynıdır)

Araç grupları

GrupAraçlar
group:runtimeexec, process, code_execution (bash, exec için takma ad olarak kabul edilir)
group:fsread, write, edit, apply_patch
group:sessionssessions_list, sessions_history, sessions_send, sessions_spawn, sessions_yield, subagents, session_status
group:memorymemory_search, memory_get
group:webweb_search, x_search, web_fetch
group:uibrowser, canvas
group:automationcron, gateway
group:messagingmessage
group:nodesnodes
group:agentsagents_list
group:mediaimage, image_generate, video_generate, tts
group:openclawTüm yerleşik araçlar (sağlayıcı eklentileri hariç)

tools.allow / tools.deny

Genel araç izin/verme politikası (ret kazanır). Büyük/küçük harfe duyarsızdır, * joker karakterlerini destekler. Docker sandbox kapalı olduğunda bile uygulanır.
{
  tools: { deny: ["browser", "canvas"] },
}

tools.byProvider

Belirli sağlayıcılar veya modeller için araçları daha da kısıtlar. Sıra: temel profil → sağlayıcı profili → allow/deny.
{
  tools: {
    profile: "coding",
    byProvider: {
      "google-antigravity": { profile: "minimal" },
      "openai/gpt-5.4": { allow: ["group:fs", "sessions_list"] },
    },
  },
}

tools.elevated

Sandbox dışındaki elevated exec erişimini denetler:
{
  tools: {
    elevated: {
      enabled: true,
      allowFrom: {
        whatsapp: ["+15555550123"],
        discord: ["1234567890123", "987654321098765432"],
      },
    },
  },
}
  • Ajan başına geçersiz kılma (agents.list[].tools.elevated) yalnızca daha fazla kısıtlama getirebilir.
  • /elevated on|off|ask|full, durumu oturum başına saklar; satır içi yönergeler tek mesaja uygulanır.
  • Elevated exec, sandbox kullanımını atlar ve yapılandırılmış kaçış yolunu kullanır (varsayılan olarak gateway, exec hedefi node olduğunda ise node).

tools.exec

{
  tools: {
    exec: {
      backgroundMs: 10000,
      timeoutSec: 1800,
      cleanupMs: 1800000,
      notifyOnExit: true,
      notifyOnExitEmptySuccess: false,
      applyPatch: {
        enabled: false,
        allowModels: ["gpt-5.4"],
      },
    },
  },
}

tools.loopDetection

Araç döngüsü güvenlik kontrolleri varsayılan olarak devre dışıdır. Algılamayı etkinleştirmek için enabled: true ayarlayın. Ayarlar genel olarak tools.loopDetection altında tanımlanabilir ve ajan başına agents.list[].tools.loopDetection altında geçersiz kılınabilir.
{
  tools: {
    loopDetection: {
      enabled: true,
      historySize: 30,
      warningThreshold: 10,
      criticalThreshold: 20,
      globalCircuitBreakerThreshold: 30,
      detectors: {
        genericRepeat: true,
        knownPollNoProgress: true,
        pingPong: true,
      },
    },
  },
}
  • historySize: döngü analizi için tutulan azami araç çağrısı geçmişi.
  • warningThreshold: uyarılar için tekrarlayan ilerleme yok kalıbı eşiği.
  • criticalThreshold: kritik döngüleri engellemek için daha yüksek tekrar eşiği.
  • globalCircuitBreakerThreshold: ilerleme olmayan herhangi bir çalıştırma için kesin durdurma eşiği.
  • detectors.genericRepeat: aynı araç/aynı argüman çağrılarında uyarır.
  • detectors.knownPollNoProgress: bilinen yoklama araçlarında (process.poll, command_status vb.) uyarır/engeller.
  • detectors.pingPong: dönüşümlü ilerleme olmayan ikili kalıplarda uyarır/engeller.
  • warningThreshold >= criticalThreshold veya criticalThreshold >= globalCircuitBreakerThreshold ise doğrulama başarısız olur.

tools.web

{
  tools: {
    web: {
      search: {
        enabled: true,
        apiKey: "brave_api_key", // veya BRAVE_API_KEY ortam değişkeni
        maxResults: 5,
        timeoutSeconds: 30,
        cacheTtlMinutes: 15,
      },
      fetch: {
        enabled: true,
        provider: "firecrawl", // isteğe bağlı; otomatik algılama için atlayın
        maxChars: 50000,
        maxCharsCap: 50000,
        maxResponseBytes: 2000000,
        timeoutSeconds: 30,
        cacheTtlMinutes: 15,
        maxRedirects: 3,
        readability: true,
        userAgent: "custom-ua",
      },
    },
  },
}

tools.media

Gelen medya anlamayı yapılandırır (görsel/ses/video):
{
  tools: {
    media: {
      concurrency: 2,
      asyncCompletion: {
        directSend: false, // isteğe bağlı etkinleştirme: tamamlanan eşzamansız müzik/videoyu doğrudan kanala gönder
      },
      audio: {
        enabled: true,
        maxBytes: 20971520,
        scope: {
          default: "deny",
          rules: [{ action: "allow", match: { chatType: "direct" } }],
        },
        models: [
          { provider: "openai", model: "gpt-4o-mini-transcribe" },
          { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] },
        ],
      },
      video: {
        enabled: true,
        maxBytes: 52428800,
        models: [{ provider: "google", model: "gemini-3-flash-preview" }],
      },
    },
  },
}
Sağlayıcı girdisi (type: "provider" veya atlanmış):
  • provider: API sağlayıcı kimliği (openai, anthropic, google/gemini, groq vb.)
  • model: model kimliği geçersiz kılması
  • profile / preferredProfile: auth-profiles.json profil seçimi
CLI girdisi (type: "cli"):
  • command: çalıştırılacak yürütülebilir dosya
  • args: şablonlu argümanlar ({{MediaPath}}, {{Prompt}}, {{MaxChars}} vb. desteklenir)
Ortak alanlar:
  • capabilities: isteğe bağlı liste (image, audio, video). Varsayılanlar: openai/anthropic/minimax → image, google → image+audio+video, groq → audio.
  • prompt, maxChars, maxBytes, timeoutSeconds, language: girdi başına geçersiz kılmalar.
  • Hatalar bir sonraki girdiye geri döner.
Sağlayıcı auth, standart sırayı izler: auth-profiles.json → ortam değişkenleri → models.providers.*.apiKey.Eşzamansız tamamlama alanları:
  • asyncCompletion.directSend: true olduğunda, tamamlanan eşzamansız music_generate ve video_generate görevleri önce doğrudan kanal teslimini dener. Varsayılan: false (eski istek yapan oturum uyandırma/model teslim yolu).

tools.agentToAgent

{
  tools: {
    agentToAgent: {
      enabled: false,
      allow: ["home", "work"],
    },
  },
}

tools.sessions

Oturum araçları (sessions_list, sessions_history, sessions_send) tarafından hangi oturumların hedeflenebileceğini denetler. Varsayılan: tree (geçerli oturum + onun tarafından oluşturulan oturumlar, örneğin alt ajanlar).
{
  tools: {
    sessions: {
      // "self" | "tree" | "agent" | "all"
      visibility: "tree",
    },
  },
}
Notlar:
  • self: yalnızca geçerli oturum anahtarı.
  • tree: geçerli oturum + geçerli oturum tarafından oluşturulan oturumlar (alt ajanlar).
  • agent: geçerli ajan kimliğine ait herhangi bir oturum (aynı ajan kimliği altında gönderici başına oturum çalıştırıyorsanız başka kullanıcıları da içerebilir).
  • all: herhangi bir oturum. Ajanlar arası hedefleme yine de tools.agentToAgent gerektirir.
  • Sandbox sıkılaştırması: geçerli oturum sandbox’lıysa ve agents.defaults.sandbox.sessionToolsVisibility="spawned" ise, tools.sessions.visibility="all" olsa bile görünürlük tree olmaya zorlanır.

tools.sessions_spawn

sessions_spawn için satır içi ek desteğini denetler.
{
  tools: {
    sessions_spawn: {
      attachments: {
        enabled: false, // isteğe bağlı etkinleştirme: satır içi dosya eklerine izin vermek için true yapın
        maxTotalBytes: 5242880, // tüm dosyalar toplamı için 5 MB
        maxFiles: 50,
        maxFileBytes: 1048576, // dosya başına 1 MB
        retainOnSessionKeep: false, // cleanup="keep" olduğunda ekleri koru
      },
    },
  },
}
Notlar:
  • Ekler yalnızca runtime: "subagent" için desteklenir. ACP çalışma zamanı bunları reddeder.
  • Dosyalar alt çalışma alanında .openclaw/attachments/<uuid>/ içine bir .manifest.json ile birlikte somutlaştırılır.
  • Ek içeriği, transcript kalıcılığından otomatik olarak sansürlenir.
  • Base64 girdileri, katı alfabe/dolgu denetimleri ve çözme öncesi boyut korumasıyla doğrulanır.
  • Dosya izinleri dizinler için 0700, dosyalar için 0600’dür.
  • Temizleme, cleanup ilkesini izler: delete ekleri her zaman kaldırır; keep, bunları yalnızca retainOnSessionKeep: true olduğunda tutar.

tools.experimental

Deneysel yerleşik araç bayrakları. Sıkı agentic GPT-5 otomatik etkinleştirme kuralı uygulanmadıkça varsayılan olarak kapalıdır.
{
  tools: {
    experimental: {
      planTool: true, // deneysel update_plan etkinleştir
    },
  },
}
Notlar:
  • planTool: trivial olmayan çok adımlı iş takibi için yapılandırılmış update_plan aracını etkinleştirir.
  • Varsayılan: false; ancak agents.defaults.embeddedPi.executionContract (veya ajan başına bir geçersiz kılma) bir OpenAI veya OpenAI Codex GPT-5 ailesi çalıştırması için "strict-agentic" olarak ayarlanmışsa farklıdır. Bu kapsam dışında aracı zorla açmak için true, sıkı agentic GPT-5 çalıştırmalarında bile kapalı tutmak için false ayarlayın.
  • Etkinleştirildiğinde, sistem istemi de kullanım yönergeleri ekler; böylece model bunu yalnızca önemli işler için kullanır ve en fazla bir adımı in_progress durumunda tutar.

agents.defaults.subagents

{
  agents: {
    defaults: {
      subagents: {
        allowAgents: ["research"],
        model: "minimax/MiniMax-M2.7",
        maxConcurrent: 8,
        runTimeoutSeconds: 900,
        archiveAfterMinutes: 60,
      },
    },
  },
}
  • model: oluşturulan alt ajanlar için varsayılan model. Atlanırsa alt ajanlar çağıranın modelini devralır.
  • allowAgents: istek yapan ajan kendi subagents.allowAgents değerini ayarlamadığında sessions_spawn için hedef ajan kimliklerinin varsayılan izin listesi (["*"] = herhangi biri; varsayılan: yalnızca aynı ajan).
  • runTimeoutSeconds: araç çağrısı runTimeoutSeconds değerini atladığında sessions_spawn için varsayılan zaman aşımı (saniye). 0, zaman aşımı olmadığı anlamına gelir.
  • Alt ajan başına araç ilkesi: tools.subagents.tools.allow / tools.subagents.tools.deny.

Özel sağlayıcılar ve base URL’ler

OpenClaw, yerleşik model kataloğunu kullanır. models.providers altında veya ~/.openclaw/agents/<agentId>/agent/models.json içinde özel sağlayıcılar ekleyin.
{
  models: {
    mode: "merge", // merge (varsayılan) | replace
    providers: {
      "custom-proxy": {
        baseUrl: "http://localhost:4000/v1",
        apiKey: "LITELLM_KEY",
        api: "openai-completions", // openai-completions | openai-responses | anthropic-messages | google-generative-ai
        models: [
          {
            id: "llama-3.1-8b",
            name: "Llama 3.1 8B",
            reasoning: false,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 128000,
            contextTokens: 96000,
            maxTokens: 32000,
          },
        ],
      },
    },
  },
}
  • Özel auth gereksinimleri için authHeader: true + headers kullanın.
  • Ajan yapılandırma kökünü OPENCLAW_AGENT_DIR ile geçersiz kılın (veya eski ortam değişkeni takma adı olan PI_CODING_AGENT_DIR ile).
  • Eşleşen sağlayıcı kimlikleri için birleştirme önceliği:
    • Boş olmayan ajan models.json baseUrl değerleri kazanır.
    • Boş olmayan ajan apiKey değerleri, yalnızca sağlayıcı mevcut yapılandırma/auth-profile bağlamında SecretRef yönetimli değilse kazanır.
    • SecretRef yönetimli sağlayıcı apiKey değerleri, çözümlenmiş gizli anahtarları kalıcılaştırmak yerine kaynak işaretçilerden (ENV_VAR_NAME ortam referansları için, secretref-managed dosya/exec referansları için) yenilenir.
    • SecretRef yönetimli sağlayıcı header değerleri, kaynak işaretçilerden (secretref-env:ENV_VAR_NAME ortam referansları için, secretref-managed dosya/exec referansları için) yenilenir.
    • Boş veya eksik ajan apiKey/baseUrl değerleri yapılandırmadaki models.providers değerlerine geri döner.
    • Eşleşen model contextWindow/maxTokens değerleri, açık yapılandırma ile örtük katalog değerleri arasındaki daha yüksek değeri kullanır.
    • Eşleşen model contextTokens, mevcutsa açık çalışma zamanı sınırını korur; doğal model meta verisini değiştirmeden etkili bağlamı sınırlamak için bunu kullanın.
    • Yapılandırmanın models.json dosyasını tamamen yeniden yazmasını istediğinizde models.mode: "replace" kullanın.
    • İşaretçi kalıcılığı kaynak için yetkili olandır: işaretçiler, çözümlenmiş çalışma zamanı gizli değerlerinden değil, etkin kaynak yapılandırma anlık görüntüsünden (çözümleme öncesi) yazılır.

Sağlayıcı alanı ayrıntıları

  • models.mode: sağlayıcı katalog davranışı (merge veya replace).
  • models.providers: sağlayıcı kimliğine göre anahtarlanmış özel sağlayıcı eşlemesi.
  • models.providers.*.api: istek bağdaştırıcısı (openai-completions, openai-responses, anthropic-messages, google-generative-ai vb.).
  • models.providers.*.apiKey: sağlayıcı kimlik bilgisi (SecretRef/ortam değişkeni yerleştirmesi tercih edilir).
  • models.providers.*.auth: kimlik doğrulama stratejisi (api-key, token, oauth, aws-sdk).
  • models.providers.*.injectNumCtxForOpenAICompat: Ollama + openai-completions için isteklere options.num_ctx enjekte eder (varsayılan: true).
  • models.providers.*.authHeader: gerektiğinde kimlik bilgisinin Authorization üstbilgisinde taşınmasını zorlar.
  • models.providers.*.baseUrl: yukarı akış API base URL’si.
  • models.providers.*.headers: proxy/kiracı yönlendirmesi için ek statik üstbilgiler.
  • models.providers.*.request: model-sağlayıcı HTTP istekleri için taşıma geçersiz kılmaları.
    • request.headers: ek üstbilgiler (sağlayıcı varsayılanlarıyla birleştirilir). Değerler SecretRef kabul eder.
    • request.auth: kimlik doğrulama stratejisi geçersiz kılması. Modlar: "provider-default" (sağlayıcının yerleşik auth’unu kullan), "authorization-bearer" (token ile), "header" (headerName, value, isteğe bağlı prefix ile).
    • request.proxy: HTTP proxy geçersiz kılması. Modlar: "env-proxy" (HTTP_PROXY/HTTPS_PROXY ortam değişkenlerini kullan), "explicit-proxy" (url ile). Her iki mod da isteğe bağlı bir tls alt nesnesini kabul eder.
    • request.tls: doğrudan bağlantılar için TLS geçersiz kılması. Alanlar: ca, cert, key, passphrase (tamamı SecretRef kabul eder), serverName, insecureSkipVerify.
    • request.allowPrivateNetwork: true olduğunda, DNS özel, CGNAT veya benzeri aralıklara çözümlendiğinde baseUrl adresine HTTPS erişimine sağlayıcı HTTP fetch koruması üzerinden izin verir (güvenilir, kendi barındırılan OpenAI uyumlu uç noktalar için operatör isteğe bağlı etkinleştirmesi). WebSocket, üstbilgiler/TLS için aynı request ayarını kullanır ancak bu fetch SSRF korumasını kullanmaz. Varsayılan false.
  • models.providers.*.models: açık sağlayıcı model kataloğu girdileri.
  • models.providers.*.models.*.contextWindow: doğal model bağlam penceresi meta verisi.
  • models.providers.*.models.*.contextTokens: isteğe bağlı çalışma zamanı bağlam sınırı. Modelin doğal contextWindow değerinden daha küçük etkin bağlam bütçesi istediğinizde bunu kullanın.
  • models.providers.*.models.*.compat.supportsDeveloperRole: isteğe bağlı uyumluluk ipucu. api: "openai-completions" ve boş olmayan doğal olmayan bir baseUrl için (api.openai.com dışında bir ana makine), OpenClaw bunu çalışma zamanında false olarak zorlar. Boş/atlanmış baseUrl, varsayılan OpenAI davranışını korur.
  • models.providers.*.models.*.compat.requiresStringContent: yalnızca dize kabul eden OpenAI uyumlu sohbet uç noktaları için isteğe bağlı uyumluluk ipucu. true olduğunda OpenClaw, isteği göndermeden önce yalnızca metin içeren messages[].content dizilerini düz dizelere indirger.
  • plugins.entries.amazon-bedrock.config.discovery: Bedrock otomatik keşif ayarlarının kökü.
  • plugins.entries.amazon-bedrock.config.discovery.enabled: örtük keşfi açar/kapatır.
  • plugins.entries.amazon-bedrock.config.discovery.region: keşif için AWS bölgesi.
  • plugins.entries.amazon-bedrock.config.discovery.providerFilter: hedefli keşif için isteğe bağlı sağlayıcı kimliği filtresi.
  • plugins.entries.amazon-bedrock.config.discovery.refreshInterval: keşif yenilemesi için yoklama aralığı.
  • plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: keşfedilen modeller için yedek bağlam penceresi.
  • plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: keşfedilen modeller için yedek azami çıktı tokenı.

Sağlayıcı örnekleri

{
  env: { CEREBRAS_API_KEY: "sk-..." },
  agents: {
    defaults: {
      model: {
        primary: "cerebras/zai-glm-4.7",
        fallbacks: ["cerebras/zai-glm-4.6"],
      },
      models: {
        "cerebras/zai-glm-4.7": { alias: "GLM 4.7 (Cerebras)" },
        "cerebras/zai-glm-4.6": { alias: "GLM 4.6 (Cerebras)" },
      },
    },
  },
  models: {
    mode: "merge",
    providers: {
      cerebras: {
        baseUrl: "https://api.cerebras.ai/v1",
        apiKey: "${CEREBRAS_API_KEY}",
        api: "openai-completions",
        models: [
          { id: "zai-glm-4.7", name: "GLM 4.7 (Cerebras)" },
          { id: "zai-glm-4.6", name: "GLM 4.6 (Cerebras)" },
        ],
      },
    },
  },
}
Cerebras için cerebras/zai-glm-4.7; doğrudan Z.AI için zai/glm-4.7 kullanın.
{
  agents: {
    defaults: {
      model: { primary: "opencode/claude-opus-4-6" },
      models: { "opencode/claude-opus-4-6": { alias: "Opus" } },
    },
  },
}
OPENCODE_API_KEY (veya OPENCODE_ZEN_API_KEY) ayarlayın. Zen kataloğu için opencode/..., Go kataloğu için opencode-go/... referanslarını kullanın. Kısayol: openclaw onboard --auth-choice opencode-zen veya openclaw onboard --auth-choice opencode-go.
{
  agents: {
    defaults: {
      model: { primary: "zai/glm-4.7" },
      models: { "zai/glm-4.7": {} },
    },
  },
}
ZAI_API_KEY ayarlayın. z.ai/* ve z-ai/* kabul edilen takma adlardır. Kısayol: openclaw onboard --auth-choice zai-api-key.
  • Genel uç nokta: https://api.z.ai/api/paas/v4
  • Kodlama uç noktası (varsayılan): https://api.z.ai/api/coding/paas/v4
  • Genel uç nokta için base URL geçersiz kılmalı özel bir sağlayıcı tanımlayın.
{
  env: { MOONSHOT_API_KEY: "sk-..." },
  agents: {
    defaults: {
      model: { primary: "moonshot/kimi-k2.5" },
      models: { "moonshot/kimi-k2.5": { alias: "Kimi K2.5" } },
    },
  },
  models: {
    mode: "merge",
    providers: {
      moonshot: {
        baseUrl: "https://api.moonshot.ai/v1",
        apiKey: "${MOONSHOT_API_KEY}",
        api: "openai-completions",
        models: [
          {
            id: "kimi-k2.5",
            name: "Kimi K2.5",
            reasoning: false,
            input: ["text", "image"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 262144,
            maxTokens: 262144,
          },
        ],
      },
    },
  },
}
Çin uç noktası için: baseUrl: "https://api.moonshot.cn/v1" veya openclaw onboard --auth-choice moonshot-api-key-cn.Yerel Moonshot uç noktaları, paylaşılan openai-completions taşıması üzerinde akış kullanımı uyumluluğunu bildirir ve OpenClaw bunu yalnızca yerleşik sağlayıcı kimliğine değil, uç nokta yeteneklerine göre anahtarlar.
{
  env: { KIMI_API_KEY: "sk-..." },
  agents: {
    defaults: {
      model: { primary: "kimi/kimi-code" },
      models: { "kimi/kimi-code": { alias: "Kimi Code" } },
    },
  },
}
Anthropic uyumlu, yerleşik sağlayıcı. Kısayol: openclaw onboard --auth-choice kimi-code-api-key.
{
  env: { SYNTHETIC_API_KEY: "sk-..." },
  agents: {
    defaults: {
      model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.5" },
      models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.5": { alias: "MiniMax M2.5" } },
    },
  },
  models: {
    mode: "merge",
    providers: {
      synthetic: {
        baseUrl: "https://api.synthetic.new/anthropic",
        apiKey: "${SYNTHETIC_API_KEY}",
        api: "anthropic-messages",
        models: [
          {
            id: "hf:MiniMaxAI/MiniMax-M2.5",
            name: "MiniMax M2.5",
            reasoning: true,
            input: ["text"],
            cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
            contextWindow: 192000,
            maxTokens: 65536,
          },
        ],
      },
    },
  },
}
Base URL, /v1 içermemelidir (Anthropic istemcisi bunu ekler). Kısayol: openclaw onboard --auth-choice synthetic-api-key.
{
  agents: {
    defaults: {
      model: { primary: "minimax/MiniMax-M2.7" },
      models: {
        "minimax/MiniMax-M2.7": { alias: "Minimax" },
      },
    },
  },
  models: {
    mode: "merge",
    providers: {
      minimax: {
        baseUrl: "https://api.minimax.io/anthropic",
        apiKey: "${MINIMAX_API_KEY}",
        api: "anthropic-messages",
        models: [
          {
            id: "MiniMax-M2.7",
            name: "MiniMax M2.7",
            reasoning: true,
            input: ["text", "image"],
            cost: { input: 0.3, output: 1.2, cacheRead: 0.06, cacheWrite: 0.375 },
            contextWindow: 204800,
            maxTokens: 131072,
          },
        ],
      },
    },
  },
}
MINIMAX_API_KEY ayarlayın. Kısayollar: openclaw onboard --auth-choice minimax-global-api veya openclaw onboard --auth-choice minimax-cn-api. Model kataloğu varsayılan olarak yalnızca M2.7 kullanır. Anthropic uyumlu akış yolunda OpenClaw, siz açıkça thinking ayarlamadıkça MiniMax thinking özelliğini varsayılan olarak devre dışı bırakır. /fast on veya params.fastMode: true, MiniMax-M2.7 değerini MiniMax-M2.7-highspeed olarak yeniden yazar.
Bkz. Local Models. Kısaca: güçlü donanım üzerinde LM Studio Responses API ile büyük bir yerel model çalıştırın; yedek için barındırılan modelleri birleştirilmiş halde tutun.

Skills

{
  skills: {
    allowBundled: ["gemini", "peekaboo"],
    load: {
      extraDirs: ["~/Projects/agent-scripts/skills"],
    },
    install: {
      preferBrew: true,
      nodeManager: "npm", // npm | pnpm | yarn | bun
    },
    entries: {
      "image-lab": {
        apiKey: { source: "env", provider: "default", id: "GEMINI_API_KEY" }, // veya düz metin dizesi
        env: { GEMINI_API_KEY: "GEMINI_KEY_HERE" },
      },
      peekaboo: { enabled: true },
      sag: { enabled: false },
    },
  },
}
  • allowBundled: yalnızca paketlenmiş Skills için isteğe bağlı izin listesi (yönetilen/çalışma alanı Skills etkilenmez).
  • load.extraDirs: ek paylaşılan skill kökleri (en düşük öncelik).
  • install.preferBrew: true olduğunda ve brew kullanılabiliyorsa, diğer yükleyici türlerine geri dönmeden önce Homebrew yükleyicilerini tercih eder.
  • install.nodeManager: metadata.openclaw.install özellikleri için node yükleyici tercihi (npm | pnpm | yarn | bun).
  • entries.<skillKey>.enabled: false, paketlenmiş/kurulu olsa bile bir skill’i devre dışı bırakır.
  • entries.<skillKey>.apiKey: birincil ortam değişkeni tanımlayan Skills için kolaylık alanı (düz metin dizesi veya SecretRef nesnesi).

Eklentiler

{
  plugins: {
    enabled: true,
    allow: ["voice-call"],
    deny: [],
    load: {
      paths: ["~/Projects/oss/voice-call-extension"],
    },
    entries: {
      "voice-call": {
        enabled: true,
        hooks: {
          allowPromptInjection: false,
        },
        config: { provider: "twilio" },
      },
    },
  },
}
  • ~/.openclaw/extensions, <workspace>/.openclaw/extensions ve plugins.load.paths içinden yüklenir.
  • Keşif, yerel OpenClaw eklentilerinin yanı sıra uyumlu Codex paketlerini ve Claude paketlerini de kabul eder; buna manifest içermeyen Claude varsayılan düzen paketleri de dahildir.
  • Yapılandırma değişiklikleri bir gateway yeniden başlatması gerektirir.
  • allow: isteğe bağlı izin listesi (yalnızca listelenen eklentiler yüklenir). deny kazanır.
  • plugins.entries.<id>.apiKey: eklenti düzeyinde API anahtarı kolaylık alanı (eklenti destekliyorsa).
  • plugins.entries.<id>.env: eklenti kapsamlı ortam değişkeni eşlemesi.
  • plugins.entries.<id>.hooks.allowPromptInjection: false olduğunda çekirdek, before_prompt_build işlemini engeller ve eski before_agent_start içindeki istem değiştirici alanları yok sayar; eski modelOverride ve providerOverride korunur. Yerel eklenti hook’larına ve desteklenen paket kaynaklı hook dizinlerine uygulanır.
  • plugins.entries.<id>.subagent.allowModelOverride: bu eklentiye arka plan alt ajan çalıştırmaları için çalışma başına provider ve model geçersiz kılmaları isteme konusunda açıkça güvenilir olduğunu belirtir.
  • plugins.entries.<id>.subagent.allowedModels: güvenilen alt ajan geçersiz kılmaları için isteğe bağlı standart provider/model hedefleri izin listesi. Yalnızca bilerek herhangi bir modele izin vermek istediğinizde "*" kullanın.
  • plugins.entries.<id>.config: eklenti tarafından tanımlanan yapılandırma nesnesi (mevcutsa yerel OpenClaw eklenti şemasıyla doğrulanır).
  • plugins.entries.firecrawl.config.webFetch: Firecrawl web-fetch sağlayıcı ayarları.
    • apiKey: Firecrawl API anahtarı (SecretRef kabul eder). Yedek olarak plugins.entries.firecrawl.config.webSearch.apiKey, eski tools.web.fetch.firecrawl.apiKey veya FIRECRAWL_API_KEY ortam değişkenini kullanır.
    • baseUrl: Firecrawl API base URL’si (varsayılan: https://api.firecrawl.dev).
    • onlyMainContent: sayfalardan yalnızca ana içeriği çıkarır (varsayılan: true).
    • maxAgeMs: önbellek için milisaniye cinsinden azami yaş (varsayılan: 172800000 / 2 gün).
    • timeoutSeconds: scrape isteği zaman aşımı süresi (saniye) (varsayılan: 60).
  • plugins.entries.xai.config.xSearch: xAI X Search (Grok web araması) ayarları.
    • enabled: X Search sağlayıcısını etkinleştirir.
    • model: arama için kullanılacak Grok modeli (ör. "grok-4-1-fast").
  • plugins.entries.memory-core.config.dreaming: memory dreaming (deneysel) ayarları. Aşamalar ve eşikler için bkz. Dreaming.
    • enabled: ana dreaming anahtarı (varsayılan false).
    • frequency: her tam dreaming taraması için cron aralığı (varsayılan "0 3 * * *").
    • aşama ilkesi ve eşikler uygulama ayrıntılarıdır (kullanıcıya açık yapılandırma anahtarları değildir).
  • Tam bellek yapılandırması Bellek yapılandırma başvurusu içinde yer alır:
    • agents.defaults.memorySearch.*
    • memory.backend
    • memory.citations
    • memory.qmd.*
    • plugins.entries.memory-core.config.dreaming
  • Etkin Claude paket eklentileri settings.json içinden gömülü Pi varsayılanlarına da katkıda bulunabilir; OpenClaw bunları ham OpenClaw yapılandırma yamaları olarak değil, temizlenmiş ajan ayarları olarak uygular.
  • plugins.slots.memory: etkin bellek eklentisi kimliğini seçin veya bellek eklentilerini devre dışı bırakmak için "none" kullanın.
  • plugins.slots.contextEngine: etkin bağlam motoru eklentisi kimliğini seçin; başka bir motor kurup seçmediğiniz sürece varsayılan "legacy" olur.
  • plugins.installs: openclaw plugins update tarafından kullanılan CLI yönetimli kurulum meta verisi.
    • source, spec, sourcePath, installPath, version, resolvedName, resolvedVersion, resolvedSpec, integrity, shasum, resolvedAt, installedAt içerir.
    • plugins.installs.* alanlarını yönetilen durum olarak ele alın; el ile düzenleme yerine CLI komutlarını tercih edin.
Bkz. Plugins.

Tarayıcı

{
  browser: {
    enabled: true,
    evaluateEnabled: true,
    defaultProfile: "user",
    ssrfPolicy: {
      // dangerouslyAllowPrivateNetwork: true, // yalnızca güvenilen özel ağ erişimi için isteğe bağlı etkinleştirin
      // allowPrivateNetwork: true, // eski takma ad
      // hostnameAllowlist: ["*.example.com", "example.com"],
      // allowedHostnames: ["localhost"],
    },
    profiles: {
      openclaw: { cdpPort: 18800, color: "#FF4500" },
      work: { cdpPort: 18801, color: "#0066CC" },
      user: { driver: "existing-session", attachOnly: true, color: "#00AA00" },
      brave: {
        driver: "existing-session",
        attachOnly: true,
        userDataDir: "~/Library/Application Support/BraveSoftware/Brave-Browser",
        color: "#FB542B",
      },
      remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" },
    },
    color: "#FF4500",
    // headless: false,
    // noSandbox: false,
    // extraArgs: [],
    // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
    // attachOnly: false,
  },
}
  • evaluateEnabled: false, act:evaluate ve wait --fn komutlarını devre dışı bırakır.
  • ssrfPolicy.dangerouslyAllowPrivateNetwork ayarlanmamışsa devre dışıdır; böylece tarayıcı gezinmesi varsayılan olarak sıkı kalır.
  • ssrfPolicy.dangerouslyAllowPrivateNetwork: true değerini yalnızca özel ağ tarayıcı gezinmesine bilerek güvendiğinizde ayarlayın.
  • Sıkı modda uzak CDP profil uç noktaları (profiles.*.cdpUrl), erişilebilirlik/keşif denetimleri sırasında aynı özel ağ engellemesine tabidir.
  • ssrfPolicy.allowPrivateNetwork, eski takma ad olarak desteklenmeye devam eder.
  • Sıkı modda açık istisnalar için ssrfPolicy.hostnameAllowlist ve ssrfPolicy.allowedHostnames kullanın.
  • Uzak profiller yalnızca bağlanmalıdır (başlat/durdur/sıfırla devre dışı).
  • profiles.*.cdpUrl, http://, https://, ws:// ve wss:// kabul eder. OpenClaw’un /json/version keşfi yapmasını istediğinizde HTTP(S) kullanın; sağlayıcınız size doğrudan bir DevTools WebSocket URL’si veriyorsa WS(S) kullanın.
  • existing-session profilleri yalnızca ana makine içindir ve CDP yerine Chrome MCP kullanır.
  • existing-session profilleri, Brave veya Edge gibi belirli bir Chromium tabanlı tarayıcı profilini hedeflemek için userDataDir ayarlayabilir.
  • existing-session profilleri mevcut Chrome MCP rota sınırlarını korur: CSS seçici hedefleme yerine snapshot/ref tabanlı eylemler, tek dosya yükleme hook’ları, iletişim kutusu zaman aşımı geçersiz kılmaları yok, wait --load networkidle yok ve responsebody, PDF dışa aktarma, indirme yakalama veya toplu eylemler yok.
  • Yerel yönetilen openclaw profilleri cdpPort ve cdpUrl değerlerini otomatik atar; yalnızca uzak CDP için cdpUrl değerini açıkça ayarlayın.
  • Otomatik algılama sırası: Chromium tabanlıysa varsayılan tarayıcı → Chrome → Brave → Edge → Chromium → Chrome Canary.
  • Kontrol servisi: yalnızca loopback (port, gateway.port üzerinden türetilir; varsayılan 18791).
  • extraArgs, yerel Chromium başlangıcına ek başlatma bayrakları ekler (örneğin --disable-gpu, pencere boyutu veya hata ayıklama bayrakları).

UI

{
  ui: {
    seamColor: "#FF4500",
    assistant: {
      name: "OpenClaw",
      avatar: "CB", // emoji, kısa metin, görsel URL'si veya data URI
    },
  },
}
  • seamColor: yerel uygulama UI chrome için vurgu rengi (Talk Mode balon tonu vb.).
  • assistant: Control UI kimlik geçersiz kılması. Etkin ajan kimliğine geri döner.

Gateway

{
  gateway: {
    mode: "local", // local | remote
    port: 18789,
    bind: "loopback",
    auth: {
      mode: "token", // none | token | password | trusted-proxy
      token: "your-token",
      // password: "your-password", // veya OPENCLAW_GATEWAY_PASSWORD
      // trustedProxy: { userHeader: "x-forwarded-user" }, // mode=trusted-proxy için; bkz. /gateway/trusted-proxy-auth
      allowTailscale: true,
      rateLimit: {
        maxAttempts: 10,
        windowMs: 60000,
        lockoutMs: 300000,
        exemptLoopback: true,
      },
    },
    tailscale: {
      mode: "off", // off | serve | funnel
      resetOnExit: false,
    },
    controlUi: {
      enabled: true,
      basePath: "/openclaw",
      // root: "dist/control-ui",
      // embedSandbox: "scripts", // strict | scripts | trusted
      // allowExternalEmbedUrls: false, // tehlikeli: mutlak harici http(s) embed URL'lerine izin ver
      // allowedOrigins: ["https://control.example.com"], // loopback olmayan Control UI için zorunlu
      // dangerouslyAllowHostHeaderOriginFallback: false, // tehlikeli Host-header origin fallback modu
      // allowInsecureAuth: false,
      // dangerouslyDisableDeviceAuth: false,
    },
    remote: {
      url: "ws://gateway.tailnet:18789",
      transport: "ssh", // ssh | direct
      token: "your-token",
      // password: "your-password",
    },
    trustedProxies: ["10.0.0.1"],
    // İsteğe bağlı. Varsayılan false.
    allowRealIpFallback: false,
    tools: {
      // Ek /tools/invoke HTTP retleri
      deny: ["browser"],
      // Varsayılan HTTP ret listesinden araçları kaldır
      allow: ["gateway"],
    },
    push: {
      apns: {
        relay: {
          baseUrl: "https://relay.example.com",
          timeoutMs: 10000,
        },
      },
    },
  },
}
  • mode: local (gateway’i çalıştır) veya remote (uzak gateway’e bağlan). Gateway, local olmadığı sürece başlamayı reddeder.
  • port: WS + HTTP için tek çoklanmış port. Öncelik: --port > OPENCLAW_GATEWAY_PORT > gateway.port > 18789.
  • bind: auto, loopback (varsayılan), lan (0.0.0.0), tailnet (yalnızca Tailscale IP’si) veya custom.
  • Eski bind takma adları: gateway.bind içinde ana makine takma adlarını (0.0.0.0, 127.0.0.1, localhost, ::, ::1) değil, bind modu değerlerini (auto, loopback, lan, tailnet, custom) kullanın.
  • Docker notu: varsayılan loopback bind, kapsayıcı içinde 127.0.0.1 üzerinde dinler. Docker bridge ağıyla (-p 18789:18789) trafik eth0 üzerinden gelir, bu yüzden gateway’e erişilemez. --network host kullanın veya tüm arayüzlerde dinlemek için bind: "lan" (veya customBindHost: "0.0.0.0" ile bind: "custom") ayarlayın.
  • Auth: varsayılan olarak zorunludur. Loopback dışı bind’ler gateway auth gerektirir. Pratikte bu, paylaşılan bir token/parola veya gateway.auth.mode: "trusted-proxy" kullanan kimlik farkındalıklı bir reverse proxy anlamına gelir. Onboarding sihirbazı varsayılan olarak bir token üretir.
  • Hem gateway.auth.token hem de gateway.auth.password yapılandırılmışsa (SecretRef’ler dahil), gateway.auth.mode değerini açıkça token veya password olarak ayarlayın. Her ikisi de yapılandırılmış ve mod ayarlanmamışsa başlangıç ile servis kurulum/onarma akışları başarısız olur.
  • gateway.auth.mode: "none": açıkça auth’suz mod. Bunu yalnızca güvenilen yerel loopback kurulumları için kullanın; onboarding istemlerinde kasıtlı olarak sunulmaz.
  • gateway.auth.mode: "trusted-proxy": auth işini kimlik farkındalıklı bir reverse proxy’ye devredin ve kimlik üstbilgileri için gateway.trustedProxies değerine güvenin (bkz. Trusted Proxy Auth). Bu mod loopback olmayan bir proxy kaynağı bekler; aynı ana makinedeki loopback reverse proxy’ler trusted-proxy auth gereksinimini karşılamaz.
  • gateway.auth.allowTailscale: true olduğunda Tailscale Serve kimlik üstbilgileri, Control UI/WebSocket auth gereksinimini karşılayabilir (tailscale whois ile doğrulanır). HTTP API uç noktaları bu Tailscale üstbilgi auth yöntemini kullanmaz; bunun yerine gateway’in normal HTTP auth modunu izler. Bu tokensız akış gateway ana makinesine güvenildiğini varsayar. tailscale.mode = "serve" olduğunda varsayılan true olur.
  • gateway.auth.rateLimit: isteğe bağlı başarısız auth sınırlayıcısı. İstemci IP’si ve auth kapsamı başına uygulanır (paylaşılan gizli anahtar ve cihaz tokenı ayrı ayrı izlenir). Engellenen denemeler 429 + Retry-After döndürür.
    • Eşzamansız Tailscale Serve Control UI yolunda aynı {scope, clientIp} için başarısız denemeler, başarısızlık yazımından önce serileştirilir. Bu nedenle aynı istemciden gelen eşzamanlı kötü denemeler, ikisinin de düz uyuşmazlık olarak geçmesi yerine ikinci istekte sınıra takılabilir.
    • gateway.auth.rateLimit.exemptLoopback varsayılan olarak true değerindedir; localhost trafiğinin de hız sınırına tabi olmasını özellikle istediğinizde (test kurulumları veya sıkı proxy dağıtımları için) false yapın.
  • Tarayıcı kaynaklı WS auth denemeleri, loopback muafiyeti devre dışı bırakılmış şekilde her zaman sınırlanır (tarayıcı tabanlı localhost brute force saldırılarına karşı ek savunma).
  • Loopback üzerinde bu tarayıcı kaynaklı kilitlemeler, normalize edilmiş Origin değeri başına yalıtılır; bu nedenle bir localhost origin’inden gelen tekrarlanan hatalar, farklı bir origin’i otomatik olarak kilitlemez.
  • tailscale.mode: serve (yalnızca tailnet, loopback bind) veya funnel (herkese açık, auth gerekir).
  • controlUi.allowedOrigins: Gateway WebSocket bağlantıları için açık tarayıcı origin izin listesi. Tarayıcı istemcilerinin loopback dışı origin’lerden gelmesi beklendiğinde zorunludur.
  • controlUi.dangerouslyAllowHostHeaderOriginFallback: bilerek Host-header origin ilkesine dayanan dağıtımlar için Host-header origin fallback’ini etkinleştiren tehlikeli mod.
  • remote.transport: ssh (varsayılan) veya direct (ws/wss). direct için remote.url, ws:// veya wss:// olmalıdır.
  • OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1: güvenilen özel ağ IP’lerine düz metin ws:// erişimine izin veren istemci tarafı acil durum geçersiz kılması; varsayılan olarak düz metin için yalnızca loopback’e izin verilir.
  • gateway.remote.token / .password, uzak istemci kimlik bilgisi alanlarıdır. Tek başlarına gateway auth yapılandırmazlar.
  • gateway.push.apns.relay.baseUrl: resmi/TestFlight iOS derlemeleri relay destekli kayıtları gateway’e yayımladıktan sonra kullanılan harici APNs relay için temel HTTPS URL’si. Bu URL, iOS derlemesine derlenmiş relay URL’siyle eşleşmelidir.
  • gateway.push.apns.relay.timeoutMs: gateway’den relay’e gönderim zaman aşımı süresi (milisaniye). Varsayılan: 10000.
  • Relay destekli kayıtlar belirli bir gateway kimliğine devredilir. Eşleştirilmiş iOS uygulaması gateway.identity.get çağrısını alır, bu kimliği relay kaydına dahil eder ve kayıt kapsamlı bir gönderim iznini gateway’e iletir. Başka bir gateway bu saklanan kaydı yeniden kullanamaz.
  • OPENCLAW_APNS_RELAY_BASE_URL / OPENCLAW_APNS_RELAY_TIMEOUT_MS: yukarıdaki relay yapılandırması için geçici ortam değişkeni geçersiz kılmaları.
  • OPENCLAW_APNS_RELAY_ALLOW_HTTP=true: loopback HTTP relay URL’leri için yalnızca geliştirme amaçlı kaçış kapısı. Üretim relay URL’leri HTTPS üzerinde kalmalıdır.
  • gateway.channelHealthCheckMinutes: kanal sağlık izleme aralığı, dakika cinsinden. Sağlık izleme yeniden başlatmalarını genel olarak devre dışı bırakmak için 0 ayarlayın. Varsayılan: 5.
  • gateway.channelStaleEventThresholdMinutes: bayat soket eşiği, dakika cinsinden. Bunu gateway.channelHealthCheckMinutes değerinden büyük veya ona eşit tutun. Varsayılan: 30.
  • gateway.channelMaxRestartsPerHour: kayan bir saat içinde kanal/hesap başına azami sağlık izleme yeniden başlatması. Varsayılan: 10.
  • channels.<provider>.healthMonitor.enabled: genel izleyiciyi etkin tutarken sağlık izleme yeniden başlatmalarından kanal başına çıkış seçeneği.
  • channels.<provider>.accounts.<accountId>.healthMonitor.enabled: çok hesaplı kanallar için hesap başına geçersiz kılma. Ayarlandığında kanal düzeyi geçersiz kılmanın önüne geçer.
  • Yerel gateway çağrı yolları, yalnızca gateway.auth.* ayarlanmamışsa yedek olarak gateway.remote.* kullanabilir.
  • gateway.auth.token / gateway.auth.password, SecretRef ile açıkça yapılandırılmış ancak çözümlenmemişse çözümleme fail-closed olur (uzak yedek bu durumu maskelemez).
  • trustedProxies: TLS sonlandıran veya yönlendirilmiş istemci üstbilgileri ekleyen reverse proxy IP’leri. Yalnızca kontrol ettiğiniz proxy’leri listeleyin. Loopback girdileri, aynı ana makine proxy/yerel algılama kurulumları için yine geçerlidir (örneğin Tailscale Serve veya yerel reverse proxy), ancak loopback isteklerini gateway.auth.mode: "trusted-proxy" için uygun hale getirmezler.
  • allowRealIpFallback: true olduğunda, X-Forwarded-For eksikse gateway X-Real-IP kabul eder. Fail-closed davranış için varsayılan false.
  • gateway.tools.deny: HTTP POST /tools/invoke için engellenen ek araç adlarıdır (varsayılan ret listesini genişletir).
  • gateway.tools.allow: varsayılan HTTP ret listesinden araç adlarını kaldırır.

OpenAI uyumlu uç noktalar

  • Chat Completions: varsayılan olarak devre dışıdır. gateway.http.endpoints.chatCompletions.enabled: true ile etkinleştirin.
  • Responses API: gateway.http.endpoints.responses.enabled.
  • Responses URL girdi sağlamlaştırması:
    • gateway.http.endpoints.responses.maxUrlParts
    • gateway.http.endpoints.responses.files.urlAllowlist
    • gateway.http.endpoints.responses.images.urlAllowlist Boş izin listeleri ayarlanmamış sayılır; URL getirmeyi devre dışı bırakmak için gateway.http.endpoints.responses.files.allowUrl=false ve/veya gateway.http.endpoints.responses.images.allowUrl=false kullanın.
  • İsteğe bağlı yanıt sağlamlaştırma üstbilgisi:
    • gateway.http.securityHeaders.strictTransportSecurity (yalnızca kontrol ettiğiniz HTTPS origin’ler için ayarlayın; bkz. Trusted Proxy Auth)

Çoklu örnek yalıtımı

Benzersiz portlar ve durum dizinleriyle bir ana makinede birden fazla gateway çalıştırın:
OPENCLAW_CONFIG_PATH=~/.openclaw/a.json \
OPENCLAW_STATE_DIR=~/.openclaw-a \
openclaw gateway --port 19001
Kolaylık bayrakları: --dev (~/.openclaw-dev + 19001 portunu kullanır), --profile <name> (~/.openclaw-<name> kullanır). Bkz. Multiple Gateways.

gateway.tls

{
  gateway: {
    tls: {
      enabled: false,
      autoGenerate: false,
      certPath: "/etc/openclaw/tls/server.crt",
      keyPath: "/etc/openclaw/tls/server.key",
      caPath: "/etc/openclaw/tls/ca-bundle.crt",
    },
  },
}
  • enabled: gateway dinleyicisinde TLS sonlandırmayı etkinleştirir (HTTPS/WSS) (varsayılan: false).
  • autoGenerate: açık dosyalar yapılandırılmadığında yerel, self-signed bir sertifika/anahtar çifti otomatik oluşturur; yalnızca yerel/geliştirme kullanımı içindir.
  • certPath: TLS sertifika dosyasının dosya sistemi yolu.
  • keyPath: TLS özel anahtar dosyasının dosya sistemi yolu; izinleri kısıtlı tutun.
  • caPath: istemci doğrulaması veya özel güven zincirleri için isteğe bağlı CA bundle yolu.

gateway.reload

{
  gateway: {
    reload: {
      mode: "hybrid", // off | restart | hot | hybrid
      debounceMs: 500,
      deferralTimeoutMs: 300000,
    },
  },
}
  • mode: yapılandırma düzenlemelerinin çalışma zamanında nasıl uygulanacağını denetler.
    • "off": canlı düzenlemeleri yok sayar; değişiklikler açık bir yeniden başlatma gerektirir.
    • "restart": yapılandırma değişikliğinde gateway sürecini her zaman yeniden başlatır.
    • "hot": yeniden başlatmadan, süreç içinde uygular.
    • "hybrid" (varsayılan): önce hot reload dener; gerekirse yeniden başlatmaya geri döner.
  • debounceMs: yapılandırma değişiklikleri uygulanmadan önce milisaniye cinsinden debounce penceresi (negatif olmayan tamsayı).
  • deferralTimeoutMs: devam eden işlemleri beklerken yeniden başlatmayı zorlamadan önce beklenecek azami süre, milisaniye cinsinden (varsayılan: 300000 = 5 dakika).

Hook’lar

{
  hooks: {
    enabled: true,
    token: "shared-secret",
    path: "/hooks",
    maxBodyBytes: 262144,
    defaultSessionKey: "hook:ingress",
    allowRequestSessionKey: false,
    allowedSessionKeyPrefixes: ["hook:"],
    allowedAgentIds: ["hooks", "main"],
    presets: ["gmail"],
    transformsDir: "~/.openclaw/hooks/transforms",
    mappings: [
      {
        match: { path: "gmail" },
        action: "agent",
        agentId: "hooks",
        wakeMode: "now",
        name: "Gmail",
        sessionKey: "hook:gmail:{{messages[0].id}}",
        messageTemplate: "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
        deliver: true,
        channel: "last",
        model: "openai/gpt-5.4-mini",
      },
    ],
  },
}
Kimlik doğrulama: Authorization: Bearer <token> veya x-openclaw-token: <token>. Sorgu dizesi hook tokenları reddedilir. Doğrulama ve güvenlik notları:
  • hooks.enabled=true, boş olmayan bir hooks.token gerektirir.
  • hooks.token, gateway.auth.token değerinden farklı olmalıdır; Gateway tokenını yeniden kullanmak reddedilir.
  • hooks.path, / olamaz; /hooks gibi özel bir alt yol kullanın.
  • hooks.allowRequestSessionKey=true ise hooks.allowedSessionKeyPrefixes değerini sınırlandırın (örneğin ["hook:"]).
Uç noktalar:
  • POST /hooks/wake{ text, mode?: "now"|"next-heartbeat" }
  • POST /hooks/agent{ message, name?, agentId?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }
    • İstek yükündeki sessionKey, yalnızca hooks.allowRequestSessionKey=true olduğunda kabul edilir (varsayılan: false).
  • POST /hooks/<name>hooks.mappings üzerinden çözülür
  • match.path, /hooks sonrasındaki alt yolu eşleştirir (ör. /hooks/gmailgmail).
  • match.source, genel yollar için bir yük alanını eşleştirir.
  • {{messages[0].subject}} gibi şablonlar yükten okur.
  • transform, bir hook eylemi döndüren JS/TS modülünü işaret edebilir.
    • transform.module göreli bir yol olmalı ve hooks.transformsDir içinde kalmalıdır (mutlak yollar ve yol geçişleri reddedilir).
  • agentId, belirli bir ajana yönlendirir; bilinmeyen kimlikler varsayılan ajana geri döner.
  • allowedAgentIds: açık yönlendirmeyi kısıtlar (* veya atlanmış = tümüne izin ver, [] = tümünü reddet).
  • defaultSessionKey: açık sessionKey olmadan hook ajan çalıştırmaları için isteğe bağlı sabit oturum anahtarı.
  • allowRequestSessionKey: /hooks/agent çağıranlarının sessionKey ayarlamasına izin verir (varsayılan: false).
  • allowedSessionKeyPrefixes: açık sessionKey değerleri için isteğe bağlı önek izin listesi (istek + eşleme), ör. ["hook:"].
  • deliver: true, son yanıtı bir kanala gönderir; channel varsayılan olarak last olur.
  • model, bu hook çalıştırması için LLM’i geçersiz kılar (model kataloğu ayarlıysa izinli olmalıdır).

Gmail entegrasyonu

{
  hooks: {
    gmail: {
      account: "openclaw@gmail.com",
      topic: "projects/<project-id>/topics/gog-gmail-watch",
      subscription: "gog-gmail-watch-push",
      pushToken: "shared-push-token",
      hookUrl: "http://127.0.0.1:18789/hooks/gmail",
      includeBody: true,
      maxBytes: 20000,
      renewEveryMinutes: 720,
      serve: { bind: "127.0.0.1", port: 8788, path: "/" },
      tailscale: { mode: "funnel", path: "/gmail-pubsub" },
      model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
      thinking: "off",
    },
  },
}
  • Gateway yapılandırıldığında önyüklemede gog gmail watch serve işlemini otomatik başlatır. Devre dışı bırakmak için OPENCLAW_SKIP_GMAIL_WATCHER=1 ayarlayın.
  • Gateway ile birlikte ayrı bir gog gmail watch serve çalıştırmayın.

Canvas host

{
  canvasHost: {
    root: "~/.openclaw/workspace/canvas",
    liveReload: true,
    // enabled: false, // veya OPENCLAW_SKIP_CANVAS_HOST=1
  },
}
  • Gateway portu altında HTTP üzerinden ajan tarafından düzenlenebilir HTML/CSS/JS ve A2UI sunar:
    • http://<gateway-host>:<gateway.port>/__openclaw__/canvas/
    • http://<gateway-host>:<gateway.port>/__openclaw__/a2ui/
  • Yalnızca yerel kullanım: gateway.bind: "loopback" (varsayılan) olarak bırakın.
  • Loopback dışı bind’lerde canvas rotaları, diğer Gateway HTTP yüzeyleriyle aynı şekilde Gateway auth (token/password/trusted-proxy) gerektirir.
  • Node WebView’lar genellikle auth üstbilgisi göndermez; bir node eşleştirilip bağlandıktan sonra Gateway, canvas/A2UI erişimi için node kapsamlı yetenek URL’leri duyurur.
  • Yetenek URL’leri etkin node WS oturumuna bağlıdır ve hızlıca sona erer. IP tabanlı yedek kullanılmaz.
  • Sunulan HTML içine live-reload istemcisi enjekte eder.
  • Boş olduğunda başlangıç index.html dosyasını otomatik oluşturur.
  • A2UI’yi ayrıca /__openclaw__/a2ui/ altında sunar.
  • Değişiklikler bir gateway yeniden başlatması gerektirir.
  • Büyük dizinler veya EMFILE hataları için live reload’u devre dışı bırakın.

Keşif

mDNS (Bonjour)

{
  discovery: {
    mdns: {
      mode: "minimal", // minimal | full | off
    },
  },
}
  • minimal (varsayılan): TXT kayıtlarından cliPath + sshPort alanlarını çıkarır.
  • full: cliPath + sshPort alanlarını içerir.
  • Ana makine adı varsayılan olarak openclaw olur. OPENCLAW_MDNS_HOSTNAME ile geçersiz kılın.

Geniş alan (DNS-SD)

{
  discovery: {
    wideArea: { enabled: true },
  },
}
~/.openclaw/dns/ altında bir unicast DNS-SD bölgesi yazar. Ağlar arası keşif için bunu bir DNS sunucusu (CoreDNS önerilir) + Tailscale split DNS ile eşleştirin. Kurulum: openclaw dns setup --apply.

Ortam

env (satır içi ortam değişkenleri)

{
  env: {
    OPENROUTER_API_KEY: "sk-or-...",
    vars: {
      GROQ_API_KEY: "gsk-...",
    },
    shellEnv: {
      enabled: true,
      timeoutMs: 15000,
    },
  },
}
  • Satır içi ortam değişkenleri yalnızca süreç ortamında anahtar eksikse uygulanır.
  • .env dosyaları: geçerli çalışma dizini .env + ~/.openclaw/.env (hiçbiri mevcut değişkenlerin üzerine yazmaz).
  • shellEnv: eksik beklenen anahtarları giriş kabuğu profilinizden içe aktarır.
  • Tam öncelik için bkz. Environment.

Ortam değişkeni yerleştirme

Herhangi bir yapılandırma dizesinde ${VAR_NAME} ile ortam değişkenlerine başvurun:
{
  gateway: {
    auth: { token: "${OPENCLAW_GATEWAY_TOKEN}" },
  },
}
  • Yalnızca büyük harfli adlar eşleşir: [A-Z_][A-Z0-9_]*.
  • Eksik/boş değişkenler yapılandırma yüklemede hata oluşturur.
  • Düz ${VAR} kullanmak için $${VAR} ile kaçış yapın.
  • $include ile çalışır.

Secrets

SecretRef’ler ekleyicidir: düz metin değerler çalışmaya devam eder.

SecretRef

Tek bir nesne biçimi kullanın:
{ source: "env" | "file" | "exec", provider: "default", id: "..." }
Doğrulama:
  • provider deseni: ^[a-z][a-z0-9_-]{0,63}$
  • source: "env" id deseni: ^[A-Z][A-Z0-9_]{0,127}$
  • source: "file" id: mutlak JSON işaretçisi (örneğin "/providers/openai/apiKey")
  • source: "exec" id deseni: ^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$
  • source: "exec" kimlikleri . veya .. eğik çizgiyle ayrılmış yol bölümleri içermemelidir (örneğin a/../b reddedilir)

Desteklenen kimlik bilgisi yüzeyi

  • Kanonik matris: SecretRef Credential Surface
  • secrets apply, desteklenen openclaw.json kimlik bilgisi yollarını hedefler.
  • auth-profiles.json referansları çalışma zamanı çözümlemesine ve denetim kapsamına dahildir.

Secret sağlayıcıları yapılandırması

{
  secrets: {
    providers: {
      default: { source: "env" }, // isteğe bağlı açık env sağlayıcısı
      filemain: {
        source: "file",
        path: "~/.openclaw/secrets.json",
        mode: "json",
        timeoutMs: 5000,
      },
      vault: {
        source: "exec",
        command: "/usr/local/bin/openclaw-vault-resolver",
        passEnv: ["PATH", "VAULT_ADDR"],
      },
    },
    defaults: {
      env: "default",
      file: "filemain",
      exec: "vault",
    },
  },
}
Notlar:
  • file sağlayıcısı mode: "json" ve mode: "singleValue" destekler (singleValue modunda id değeri "value" olmalıdır).
  • exec sağlayıcısı mutlak command yolu gerektirir ve stdin/stdout üzerinde protokol yükleri kullanır.
  • Varsayılan olarak symlink komut yolları reddedilir. Çözümlenen hedef yol doğrulanırken symlink yollarına izin vermek için allowSymlinkCommand: true ayarlayın.
  • trustedDirs yapılandırılmışsa güvenilen dizin denetimi çözümlenen hedef yola uygulanır.
  • exec alt süreç ortamı varsayılan olarak minimaldir; gerekli değişkenleri passEnv ile açıkça geçin.
  • SecretRef’ler etkinleştirme sırasında bellek içi bir anlık görüntüye çözülür; ardından istek yolları yalnızca bu anlık görüntüyü okur.
  • Etkin yüzey filtrelemesi etkinleştirme sırasında uygulanır: etkin yüzeylerde çözümlenmemiş referanslar başlangıç/yeniden yüklemeyi başarısız kılar, etkin olmayan yüzeyler ise tanılamayla atlanır.

Auth depolama

{
  auth: {
    profiles: {
      "anthropic:default": { provider: "anthropic", mode: "api_key" },
      "anthropic:work": { provider: "anthropic", mode: "api_key" },
      "openai-codex:personal": { provider: "openai-codex", mode: "oauth" },
    },
    order: {
      anthropic: ["anthropic:default", "anthropic:work"],
      "openai-codex": ["openai-codex:personal"],
    },
  },
}
  • Ajan başına profiller <agentDir>/auth-profiles.json içinde saklanır.
  • auth-profiles.json, statik kimlik bilgisi modları için değer düzeyinde referansları (api_key için keyRef, token için tokenRef) destekler.
  • OAuth modlu profiller (auth.profiles.<id>.mode = "oauth"), SecretRef destekli auth-profile kimlik bilgilerini desteklemez.
  • Statik çalışma zamanı kimlik bilgileri, çözülmüş bellek içi anlık görüntülerden gelir; eski statik auth.json girdileri bulunduğunda temizlenir.
  • Eski OAuth aktarımları ~/.openclaw/credentials/oauth.json içinden alınır.
  • Bkz. OAuth.
  • Secrets çalışma zamanı davranışı ile audit/configure/apply araçları: Secrets Management.

auth.cooldowns

{
  auth: {
    cooldowns: {
      billingBackoffHours: 5,
      billingBackoffHoursByProvider: { anthropic: 3, openai: 8 },
      billingMaxHours: 24,
      authPermanentBackoffMinutes: 10,
      authPermanentMaxMinutes: 60,
      failureWindowHours: 24,
      overloadedProfileRotations: 1,
      overloadedBackoffMs: 0,
      rateLimitedProfileRotations: 1,
    },
  },
}
  • billingBackoffHours: bir profil gerçek faturalandırma/yetersiz kredi hataları nedeniyle başarısız olduğunda temel geri çekilme süresi, saat cinsinden (varsayılan: 5). Açık faturalandırma metni 401/403 yanıtlarında bile yine bu yola düşebilir, ancak sağlayıcıya özgü metin eşleştiriciler onları sahiplenen sağlayıcıyla sınırlı kalır (örneğin OpenRouter Key limit exceeded). Yeniden denenebilir HTTP 402 kullanım penceresi veya organizasyon/çalışma alanı harcama sınırı mesajları bunun yerine rate_limit yolunda kalır.
  • billingBackoffHoursByProvider: faturalandırma geri çekilme süresi için sağlayıcı başına isteğe bağlı geçersiz kılmalar.
  • billingMaxHours: faturalandırma geri çekilme süresi üstel büyümesi için üst sınır, saat cinsinden (varsayılan: 24).
  • authPermanentBackoffMinutes: yüksek güvenli auth_permanent hataları için temel geri çekilme süresi, dakika cinsinden (varsayılan: 10).
  • authPermanentMaxMinutes: auth_permanent geri çekilme büyümesi için üst sınır, dakika cinsinden (varsayılan: 60).
  • failureWindowHours: geri çekilme sayaçları için kullanılan kayan pencere, saat cinsinden (varsayılan: 24).
  • overloadedProfileRotations: model fallback’ine geçmeden önce aşırı yük hataları için aynı sağlayıcı auth-profile döndürme sayısının üst sınırı (varsayılan: 1). ModelNotReadyException gibi sağlayıcı meşgul şekilleri buraya düşer.
  • overloadedBackoffMs: aşırı yüklü bir sağlayıcı/profil döndürmesini yeniden denemeden önce sabit gecikme, milisaniye cinsinden (varsayılan: 0).
  • rateLimitedProfileRotations: model fallback’ine geçmeden önce rate-limit hataları için aynı sağlayıcı auth-profile döndürme sayısının üst sınırı (varsayılan: 1). Bu rate-limit kovası; Too many concurrent requests, ThrottlingException, concurrency limit reached, workers_ai ... quota limit exceeded ve resource exhausted gibi sağlayıcı biçimli metinleri de içerir.

Günlükleme

{
  logging: {
    level: "info",
    file: "/tmp/openclaw/openclaw.log",
    consoleLevel: "info",
    consoleStyle: "pretty", // pretty | compact | json
    redactSensitive: "tools", // off | tools
    redactPatterns: ["\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1"],
  },
}
  • Varsayılan günlük dosyası: /tmp/openclaw/openclaw-YYYY-MM-DD.log.
  • Kararlı bir yol için logging.file ayarlayın.
  • consoleLevel, --verbose ile debug düzeyine çıkar.
  • maxFileBytes: yazmalar bastırılmadan önce azami günlük dosyası boyutu, bayt cinsinden (pozitif tamsayı; varsayılan: 524288000 = 500 MB). Üretim dağıtımları için harici günlük döndürme kullanın.

Tanılama

{
  diagnostics: {
    enabled: true,
    flags: ["telegram.*"],
    stuckSessionWarnMs: 30000,

    otel: {
      enabled: false,
      endpoint: "https://otel-collector.example.com:4318",
      protocol: "http/protobuf", // http/protobuf | grpc
      headers: { "x-tenant-id": "my-org" },
      serviceName: "openclaw-gateway",
      traces: true,
      metrics: true,
      logs: false,
      sampleRate: 1.0,
      flushIntervalMs: 5000,
    },

    cacheTrace: {
      enabled: false,
      filePath: "~/.openclaw/logs/cache-trace.jsonl",
      includeMessages: true,
      includePrompt: true,
      includeSystem: true,
    },
  },
}
  • enabled: araçsal çıktı için ana anahtar (varsayılan: true).
  • flags: hedefli günlük çıktısını etkinleştiren bayrak dizeleri dizisi ( "telegram.*" veya "*" gibi joker karakterleri destekler).
  • stuckSessionWarnMs: bir oturum işleme durumunda kalırken takılmış oturum uyarıları üretmek için milisaniye cinsinden yaş eşiği.
  • otel.enabled: OpenTelemetry dışa aktarma hattını etkinleştirir (varsayılan: false).
  • otel.endpoint: OTel dışa aktarımı için toplayıcı URL’si.
  • otel.protocol: "http/protobuf" (varsayılan) veya "grpc".
  • otel.headers: OTel dışa aktarma istekleriyle gönderilen ek HTTP/gRPC meta veri üstbilgileri.
  • otel.serviceName: kaynak öznitelikleri için hizmet adı.
  • otel.traces / otel.metrics / otel.logs: iz, metrik veya günlük dışa aktarımını etkinleştirir.
  • otel.sampleRate: 01 aralığında iz örnekleme oranı.
  • otel.flushIntervalMs: milisaniye cinsinden periyodik telemetri flush aralığı.
  • cacheTrace.enabled: gömülü çalıştırmalar için önbellek iz anlık görüntülerini günlüğe kaydeder (varsayılan: false).
  • cacheTrace.filePath: önbellek iz JSONL’si için çıktı yolu (varsayılan: $OPENCLAW_STATE_DIR/logs/cache-trace.jsonl).
  • cacheTrace.includeMessages / includePrompt / includeSystem: önbellek iz çıktısına nelerin dahil edileceğini denetler (tamamının varsayılanı: true).

Güncelleme

{
  update: {
    channel: "stable", // stable | beta | dev
    checkOnStart: true,

    auto: {
      enabled: false,
      stableDelayHours: 6,
      stableJitterHours: 12,
      betaCheckIntervalHours: 1,
    },
  },
}
  • channel: npm/git kurulumları için sürüm kanalı — "stable", "beta" veya "dev".
  • checkOnStart: gateway başladığında npm güncellemelerini denetler (varsayılan: true).
  • auto.enabled: paket kurulumları için arka planda otomatik güncellemeyi etkinleştirir (varsayılan: false).
  • auto.stableDelayHours: stable kanalında otomatik uygulama öncesindeki asgari gecikme, saat cinsinden (varsayılan: 6; azami: 168).
  • auto.stableJitterHours: stable kanalında ek dağıtım yayılım penceresi, saat cinsinden (varsayılan: 12; azami: 168).
  • auto.betaCheckIntervalHours: beta kanalı denetimlerinin kaç saatte bir çalışacağı (varsayılan: 1; azami: 24).

ACP

{
  acp: {
    enabled: false,
    dispatch: { enabled: true },
    backend: "acpx",
    defaultAgent: "main",
    allowedAgents: ["main", "ops"],
    maxConcurrentSessions: 10,

    stream: {
      coalesceIdleMs: 50,
      maxChunkChars: 1000,
      repeatSuppression: true,
      deliveryMode: "live", // live | final_only
      hiddenBoundarySeparator: "paragraph", // none | space | newline | paragraph
      maxOutputChars: 50000,
      maxSessionUpdateChars: 500,
    },

    runtime: {
      ttlMinutes: 30,
    },
  },
}
  • enabled: genel ACP özellik kapısı (varsayılan: false).
  • dispatch.enabled: ACP oturum turu dispatch için bağımsız kapı (varsayılan: true). ACP komutlarını kullanılabilir tutarken yürütmeyi engellemek için false ayarlayın.
  • backend: varsayılan ACP çalışma zamanı arka uç kimliği (kayıtlı bir ACP çalışma zamanı eklentisiyle eşleşmelidir).
  • defaultAgent: oluşturmalarda açık bir hedef belirtilmediğinde kullanılan yedek ACP hedef ajan kimliği.
  • allowedAgents: ACP çalışma zamanı oturumları için izin verilen ajan kimliklerinin izin listesi; boş olması ek kısıtlama olmadığı anlamına gelir.
  • maxConcurrentSessions: eşzamanlı etkin ACP oturumlarının azami sayısı.
  • stream.coalesceIdleMs: akışlı metin için milisaniye cinsinden boşta flush penceresi.
  • stream.maxChunkChars: akışlı blok projeksiyonu bölünmeden önceki azami parça boyutu.
  • stream.repeatSuppression: tur başına tekrar eden durum/araç satırlarını bastırır (varsayılan: true).
  • stream.deliveryMode: "live" artımlı olarak akıtır; "final_only" turun son olaylarına kadar tamponlar.
  • stream.hiddenBoundarySeparator: gizli araç olaylarından sonra görünür metinden önceki ayırıcı (varsayılan: "paragraph").
  • stream.maxOutputChars: ACP turu başına yansıtılan azami asistan çıktı karakteri.
  • stream.maxSessionUpdateChars: yansıtılan ACP durum/güncelleme satırları için azami karakter sayısı.
  • stream.tagVisibility: akışlı olaylar için etiket adlarını boolean görünürlük geçersiz kılmalarına eşleyen kayıt.
  • runtime.ttlMinutes: ACP oturum çalışanlarının temizlenmeye uygun hale gelmeden önceki boşta TTL süresi, dakika cinsinden.
  • runtime.installCommand: ACP çalışma zamanı ortamını bootstrap ederken çalıştırılacak isteğe bağlı kurulum komutu.

CLI

{
  cli: {
    banner: {
      taglineMode: "off", // random | default | off
    },
  },
}
  • cli.banner.taglineMode, banner slogan stilini denetler:
    • "random" (varsayılan): dönen eğlenceli/mevsimsel sloganlar.
    • "default": sabit nötr slogan (All your chats, one OpenClaw.).
    • "off": slogan metni yoktur (banner başlığı/sürümü yine gösterilir).
  • Banner’ın tamamını gizlemek için (yalnızca sloganları değil), OPENCLAW_HIDE_BANNER=1 ortam değişkenini ayarlayın.

Wizard

CLI rehberli kurulum akışları (onboard, configure, doctor) tarafından yazılan meta veriler:
{
  wizard: {
    lastRunAt: "2026-01-01T00:00:00.000Z",
    lastRunVersion: "2026.1.4",
    lastRunCommit: "abc1234",
    lastRunCommand: "configure",
    lastRunMode: "local",
  },
}

Kimlik

Agent defaults altındaki agents.list kimlik alanlarına bakın.

Bridge (eski, kaldırıldı)

Geçerli derlemeler artık TCP bridge içermez. Node’lar Gateway WebSocket üzerinden bağlanır. bridge.* anahtarları artık yapılandırma şemasının parçası değildir (kaldırılana kadar doğrulama başarısız olur; openclaw doctor --fix bilinmeyen anahtarları temizleyebilir).
{
  "bridge": {
    "enabled": true,
    "port": 18790,
    "bind": "tailnet",
    "tls": {
      "enabled": true,
      "autoGenerate": true
    }
  }
}

Cron

{
  cron: {
    enabled: true,
    maxConcurrentRuns: 2,
    webhook: "https://example.invalid/legacy", // saklanan notify:true işler için kullanım dışı yedek
    webhookToken: "replace-with-dedicated-token", // giden webhook auth için isteğe bağlı bearer token
    sessionRetention: "24h", // süre dizesi veya false
    runLog: {
      maxBytes: "2mb", // varsayılan 2_000_000 bayt
      keepLines: 2000, // varsayılan 2000
    },
  },
}
  • sessionRetention: tamamlanan yalıtılmış cron çalıştırma oturumlarının sessions.json içinden budanmadan önce ne kadar süre tutulacağını belirler. Ayrıca arşivlenmiş silinmiş cron transcript’lerinin temizliğini de denetler. Varsayılan: 24h; devre dışı bırakmak için false ayarlayın.
  • runLog.maxBytes: budamadan önce çalıştırma günlük dosyası başına azami boyut (cron/runs/<jobId>.jsonl). Varsayılan: 2_000_000 bayt.
  • runLog.keepLines: çalıştırma günlüğü budaması tetiklendiğinde tutulan en yeni satırlar. Varsayılan: 2000.
  • webhookToken: cron webhook POST teslimi için kullanılan bearer token (delivery.mode = "webhook"); atlanırsa auth üstbilgisi gönderilmez.
  • webhook: yalnızca hâlâ notify: true kullanan saklanmış işler için kullanılan, kullanımdan kalkmış eski yedek webhook URL’si (http/https).

cron.retry

{
  cron: {
    retry: {
      maxAttempts: 3,
      backoffMs: [30000, 60000, 300000],
      retryOn: ["rate_limit", "overloaded", "network", "timeout", "server_error"],
    },
  },
}
  • maxAttempts: geçici hatalarda tek seferlik işler için azami yeniden deneme sayısı (varsayılan: 3; aralık: 010).
  • backoffMs: her yeniden deneme girişimi için milisaniye cinsinden geri çekilme gecikmeleri dizisi (varsayılan: [30000, 60000, 300000]; 1–10 giriş).
  • retryOn: yeniden denemeyi tetikleyen hata türleri — "rate_limit", "overloaded", "network", "timeout", "server_error". Tüm geçici türleri yeniden denemek için atlayın.
Yalnızca tek seferlik cron işlerine uygulanır. Yinelenen işler ayrı hata işleme kullanır.

cron.failureAlert

{
  cron: {
    failureAlert: {
      enabled: false,
      after: 3,
      cooldownMs: 3600000,
      mode: "announce",
      accountId: "main",
    },
  },
}
  • enabled: cron işleri için hata uyarılarını etkinleştirir (varsayılan: false).
  • after: bir uyarı tetiklenmeden önceki ardışık hata sayısı (pozitif tamsayı, min: 1).
  • cooldownMs: aynı iş için yinelenen uyarılar arasındaki asgari milisaniye sayısı (negatif olmayan tamsayı).
  • mode: teslim modu — "announce" bir kanal mesajı üzerinden gönderir; "webhook" yapılandırılmış webhook’a POST eder.
  • accountId: uyarı teslimini kapsamlamak için isteğe bağlı hesap veya kanal kimliği.

cron.failureDestination

{
  cron: {
    failureDestination: {
      mode: "announce",
      channel: "last",
      to: "channel:C1234567890",
      accountId: "main",
    },
  },
}
  • Tüm işler genelinde cron hata bildirimleri için varsayılan hedef.
  • mode: "announce" veya "webhook"; yeterli hedef verisi mevcut olduğunda varsayılan "announce" olur.
  • channel: announce teslimi için kanal geçersiz kılması. "last", bilinen son teslim kanalını yeniden kullanır.
  • to: açık announce hedefi veya webhook URL’si. Webhook modu için zorunludur.
  • accountId: teslim için isteğe bağlı hesap geçersiz kılması.
  • İş başına delivery.failureDestination, bu genel varsayılanı geçersiz kılar.
  • Genel veya iş başına hiçbir hata hedefi ayarlanmamışsa, zaten announce ile teslim eden işler hata durumunda o birincil announce hedefine geri döner.
  • delivery.failureDestination, işin birincil delivery.mode değeri "webhook" olmadığı sürece yalnızca sessionTarget="isolated" işleri için desteklenir.
Bkz. Cron Jobs. Yalıtılmış cron yürütmeleri background tasks olarak izlenir.

Medya model şablon değişkenleri

tools.media.models[].args içinde genişletilen şablon yer tutucuları:
DeğişkenAçıklama
{{Body}}Tam gelen mesaj gövdesi
{{RawBody}}Ham gövde (geçmiş/gönderen sarmalayıcıları yok)
{{BodyStripped}}Grup mention’ları çıkarılmış gövde
{{From}}Gönderen tanımlayıcısı
{{To}}Hedef tanımlayıcısı
{{MessageSid}}Kanal mesaj kimliği
{{SessionId}}Geçerli oturum UUID’si
{{IsNewSession}}Yeni oturum oluşturulduğunda "true"
{{MediaUrl}}Gelen medya pseudo-URL’si
{{MediaPath}}Yerel medya yolu
{{MediaType}}Medya türü (image/audio/document/…)
{{Transcript}}Ses transcript’i
{{Prompt}}CLI girdileri için çözümlenmiş medya istemi
{{MaxChars}}CLI girdileri için çözümlenmiş azami çıktı karakteri
{{ChatType}}"direct" veya "group"
{{GroupSubject}}Grup konusu (best effort)
{{GroupMembers}}Grup üyeleri önizlemesi (best effort)
{{SenderName}}Gönderen görünen adı (best effort)
{{SenderE164}}Gönderen telefon numarası (best effort)
{{Provider}}Sağlayıcı ipucu (whatsapp, telegram, discord, vb.)

Yapılandırma include’ları ($include)

Yapılandırmayı birden çok dosyaya bölün:
// ~/.openclaw/openclaw.json
{
  gateway: { port: 18789 },
  agents: { $include: "./agents.json5" },
  broadcast: {
    $include: ["./clients/mueller.json5", "./clients/schmidt.json5"],
  },
}
Birleştirme davranışı:
  • Tek dosya: içeren nesnenin yerini alır.
  • Dosya dizisi: sırayla derin birleştirilir (sonraki, öncekini geçersiz kılar).
  • Komşu anahtarlar: include’lardan sonra birleştirilir (include edilen değerleri geçersiz kılar).
  • İç içe include’lar: en fazla 10 düzey derinlik.
  • Yollar: include eden dosyaya göre çözülür, ancak üst düzey yapılandırma dizini içinde kalmalıdır (openclaw.json dosyasının dirname değeri). Mutlak/../ biçimlerine yalnızca bu sınır içinde çözülmeye devam ettiklerinde izin verilir.
  • Hatalar: eksik dosyalar, ayrıştırma hataları ve dairesel include’lar için açık iletiler.

İlgili: Yapılandırma · Yapılandırma Örnekleri · Doctor