Ana içeriğe atla

Configuration Reference

~/.openclaw/openclaw.json içinde kullanılabilen her alan. Görev odaklı bir genel bakış için Configuration bölümüne bakın. Yapılandırma biçimi JSON5’tir (yorumlara + sonda virgüllere izin verilir). Tüm alanlar isteğe bağlıdır — OpenClaw, alanlar atlandığında güvenli varsayılanlar kullanır.

Kanallar

Her kanal, yapılandırma bölümü mevcut olduğunda otomatik olarak başlar (enabled: false değilse).

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şleme kodu alır; sahip onaylamalıdır
allowlistYalnızca allowFrom içinde olan gönderenler (veya eşlenmiş izin deposu)
openTüm gelen DM’lere izin ver (allowFrom: ["*"] gerekir)
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 atlar (bahsetme geçidi yine uygulanır)
disabledTüm grup/oda mesajlarını engeller
Bir sağlayıcının groupPolicy alanı ayarlanmamışsa, varsayılanı channels.defaults.groupPolicy belirler. Eşleme kodlarının süresi 1 saat sonra dolar. Bekleyen DM eşleme istekleri kanal başına 3 ile sınırlıdır. Bir sağlayıcı bloğu tamamen yoksa (channels.<provider> hiç yoksa), çalışma zamanı grup ilkesi başlangıç uyarısıyla allowlist değerine geri döner (kapalı başarısız olur).

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 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 ayarlı değilse geri dönüş grup ilkesi.
  • channels.defaults.contextVisibility: tüm kanallar için varsayılan ek bağlam görünürlüğü kipi. Değerler: all (varsayılan, alıntılanan/iş parçacığı/geçmiş bağlamının tümünü dahil et), allowlist (yalnızca izin verilen gönderenlerden gelen bağlamı dahil et), 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: heartbeat çıktısında sağlıklı kanal durumlarını dahil et.
  • channels.defaults.heartbeat.showAlerts: heartbeat çıktısında bozulmuş/hatalı durumları dahil et.
  • channels.defaults.heartbeat.useIndicator: kompakt gösterge tarzı heartbeat çıktısı oluştur.

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 kipinde 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, mevcutsa varsayılan olarak default hesabını kullanır; yoksa yapılandırılmış ilk hesap kimliğini (sıralanmış) kullanır.
  • İsteğe bağlı channels.whatsapp.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleşiyorsa bu geri dönüş 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
      linkPreview: true,
      streaming: "partial", // off | partial | block | progress (varsayılan: off; önizleme-düzenleme hız sınırlarından kaçınmak için açıkça katılım gerekir)
      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 TELEGRAM_BOT_TOKEN geri dönüşüyle birlikte.
  • İsteğe bağlı channels.telegram.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleşiyorsa varsayılan hesap seçimini geçersiz kılar.
  • Çok hesaplı kurulumlarda (2+ hesap kimliği), geri dönüş yönlendirmesini önlemek 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ır.
  • configWrites: false, Telegram tarafından başlatılan yapılandırma yazımlarını engeller (supergroup kimlik taşıma işlemleri, /config set|unset).
  • type: "acp" içeren üst düzey bindings[] girdileri forum başlıkları için kalıcı ACP bağlamalarını yapılandırır (match.peer.id içinde kanonik chatId:topic:topicId kullanın). Alan semantiği ACP Agents bölümünde paylaşılır.
  • Telegram akış önizlemeleri sendMessage + editMessageText kullanır (doğrudan ve grup sohbetlerinde çalışır).
  • Yeniden deneme ilkesi: bkz. Retry policy.

Discord

{
  channels: {
    discord: {
      enabled: true,
      token: "your-bot-token",
      mediaMaxMb: 8,
      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
      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 üzerinde 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 katılımlı
      },
      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 DISCORD_BOT_TOKEN geri dönüşüyle birlikte.
  • Açık bir Discord token sağlayan doğrudan giden çağrılar, bu token’ı çağrı için kullanır; hesap yeniden deneme/ilke ayarları yine 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şiyorsa varsayılan hesap seçimini geçersiz kılar.
  • Teslim hedefleri için user:<id> (DM) veya channel:<id> (guild kanalı) kullanın; yalın sayısal kimlikler reddedilir.
  • Guild slug’ları küçük harftir ve boşluklar - ile değiştirilir; kanal anahtarları slug’lanmış adı kullanır (# yok). Guild kimliklerini tercih edin.
  • Bot tarafından yazılan mesajlar varsayılan olarak yok sayılır. allowBots: true bunları etkinleştirir; yalnızca bottan bahseden bot mesajlarını kabul etmek için allowBots: "mentions" kullanın (kendi mesajları yine filtrelenir).
  • channels.discord.guilds.<id>.ignoreOtherMentions (ve kanal geçersiz kılmaları), bottan bahsetmeyen ama başka bir kullanıcıdan veya rolden bahseden mesajları düşürür (@everyone/@here hariç).
  • maxLinesPerMessage (varsayılan 17), mesaj 2000 karakterin altında olsa bile uzun mesajları böler.
  • channels.discord.threadBindings, Discord iş parçacığına bağlı yönlendirmeyi denetler:
    • 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: saat cinsinden hareketsizlik sonrası otomatik odak kaldırma için Discord geçersiz kılması (0 devre dışı bırakır)
    • maxAgeHours: saat cinsinden kesin maksimum 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 katılımlı anahtar
  • type: "acp" içeren üst düzey bindings[] girdileri kanal ve iş parçacıkları için kalıcı ACP bağlamalarını yapılandırır (match.peer.id içinde kanal/iş parçacığı kimliği kullanın). Alan semantiği ACP Agents bölümünde paylaşılı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 geçirir (varsayılan olarak true ve 24).
  • OpenClaw ayrıca tekrar eden çözme hatalarından sonra bir ses oturumundan ayrılıp yeniden katılarak ses alımını kurtarmaya da çalışır.
  • channels.discord.streaming kanonik akış kipi anahtarıdır. Eski streamMode ve boolean streaming değerleri otomatik 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şebilir ad/etiket eşleştirmesini yeniden etkinleştirir (son çare uyumluluk kipi).
  • channels.discord.execApprovals: Discord-yerel exec onayı teslimi ve onaylayıcı yetkilendirmesi.
    • enabled: true, false veya "auto" (varsayılan). Otomatik kipte, onaylayıcılar approvers veya commands.ownerAllowFrom üzerinden çözümlenebildiğinde exec onayları etkinleşir.
    • approvers: exec isteklerini onaylamasına izin verilen Discord kullanıcı kimlikleri. Atlanırsa commands.ownerAllowFrom alanına geri döner.
    • agentFilter: isteğe bağlı agent kimliği izin listesi. Tüm agent’lar için onayları iletmek için atlayın.
    • sessionFilter: isteğe bağlı oturum anahtarı desenleri (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" ikisine de gönderir. Hedef "channel" içerdiğinde, düğmeler yalnızca çözülmüş onaylayıcılar tarafından kullanılabilir.
    • cleanupAfterResolve: true olduğunda, onay, red veya zaman aşımından sonra onay DM’lerini siler.
Tepki bildirim kipleri: off (yok), own (bot 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 geri dönüşleri: 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şebilir e-posta ana prensip eşleştirmesini yeniden etkinleştirir (son çare uyumluluk kipi).

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
      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: "partial", // off | partial | block | progress (önizleme kipi)
      nativeStreaming: true, // streaming=partial iken Slack yerel streaming 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 appToken gerektirir (varsayılan hesap ortam geri dönüşü için SLACK_BOT_TOKEN + SLACK_APP_TOKEN).
  • HTTP mode botToken artı signingSecret gerektirir (kök düzeyde veya hesap başına).
  • botToken, appToken, signingSecret ve userToken düz metin dizeleri veya SecretRef nesneleri kabul eder.
  • Slack hesap anlık görüntüleri botTokenSource, botTokenStatus, appTokenStatus ve HTTP kipinde signingSecretStatus gibi kimlik bilgisi başına kaynak/durum alanlarını sunar. configured_unavailable, hesabın SecretRef üzerinden yapılandırıldığı ancak geçerli komut/çalışma zamanı yolunun gizli değeri çözemediği anlamına gelir.
  • configWrites: false, Slack tarafından başlatılan yapılandırma yazımlarını engeller.
  • İsteğe bağlı channels.slack.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleşiyorsa varsayılan hesap seçimini geçersiz kılar.
  • channels.slack.streaming kanonik akış kipi anahtarıdır. Eski streamMode ve boolean streaming değerleri otomatik taşınır.
  • Teslim hedefleri için user:<id> (DM) veya channel:<id> kullanın.
Tepki bildirim kipleri: off, own (varsayılan), all, allowlist (reactionAllowlist içinden). İş parçacığı oturum yalıtımı: thread.historyScope iş parçacığı başına (varsayılan) veya kanal genelinde paylaşılır. thread.inheritParent, üst kanal transkriptini yeni iş parçacıklarına kopyalar.
  • typingReaction, bir yanıt çalışırken gelen Slack mesajına geçici bir tepki ekler, ardından tamamlandığında bunu kaldırır. "hourglass_flowing_sand" gibi bir Slack emoji kısa kodu kullanın.
  • channels.slack.execApprovals: Slack-yerel 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/sabiti 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, // katılımlı
        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 kipleri: oncall (@-bahsetmede yanıt ver, varsayılan), onmessage (her mesaj), onchar (tetik önekiyle başlayan mesajlar). Mattermost yerel komutları etkin olduğunda:
  • 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ülmeli ve Mattermost sunucusundan erişilebilir olmalıdır.
  • Yerel slash callback’leri, Mattermost tarafından slash komut kaydı sırasında döndürülen komut başına token’larla kimlik doğrular. Kayıt başarısız olursa veya etkinleştirilen komut yoksa, OpenClaw callback’leri Unauthorized: invalid command token. ile reddeder.
  • Özel/tailnet/iç callback ana makineleri için Mattermost, ServiceSettings.AllowedUntrustedInternalConnections içine callback ana makinesini/alanını eklemenizi isteyebilir. Tam URL değil, ana makine/alan adı değerleri kullanın.
  • channels.mattermost.configWrites: Mattermost tarafından başlatılan yapılandırma yazımlarına izin verir veya reddeder.
  • channels.mattermost.requireMention: kanallarda yanıt vermeden önce @mention gerektir.
  • channels.mattermost.groups.<channelId>.requireMention: kanal başına bahsetme geçidi 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şiyorsa varsayılan hesap seçimini geçersiz kılar.

Signal

{
  channels: {
    signal: {
      enabled: true,
      account: "+15555550123", // isteğe bağlı hesap bağlaması
      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 bildirim kipleri: off, own (varsayılan), all, allowlist (reactionAllowlist içinden).
  • channels.signal.account: kanal başlangıcını belirli bir Signal hesap kimliğine sabitler.
  • channels.signal.configWrites: Signal tarafından başlatılan yapılandırma yazımlarına izin verir veya reddeder.
  • İsteğe bağlı channels.signal.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleşiyorsa varsayılan hesap seçimini geçersiz kılar.

BlueBubbles

BlueBubbles, önerilen iMessage yoludur (eklenti destekli, channels.bluebubbles altında yapılandırılır).
{
  channels: {
    bluebubbles: {
      enabled: true,
      dmPolicy: "pairing",
      // serverUrl, password, webhookPath, grup denetimleri ve gelişmiş eylemler:
      // bkz. /channels/bluebubbles
    },
  },
}
  • Burada kapsanan çekirdek anahtar yolları: channels.bluebubbles, channels.bluebubbles.dmPolicy.
  • İsteğe bağlı channels.bluebubbles.defaultAccount, yapılandırılmış bir hesap kimliğiyle eşleşiyorsa varsayılan hesap seçimini geçersiz kılar.
  • type: "acp" içeren ü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 semantiği: ACP Agents.
  • Tam BlueBubbles kanal yapılandırması BlueBubbles bölümünde belgelenmiştir.

iMessage

OpenClaw imsg rpc 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şiyorsa varsayılan hesap seçimini geçersiz kılar.
  • Messages DB’si için 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ı gösterebilir; SCP ek getirme işlemleri 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 sıkı host-key kontrolü kullanır, bu nedenle relay ana makine 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 yazımlarına izin verir veya reddeder.
  • type: "acp" içeren ü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 bir sohbet hedefi (chat_id:*, chat_guid:*, chat_identifier:*) kullanın. Paylaşılan alan semantiği: ACP Agents.
#!/usr/bin/env bash
exec ssh -T gateway-host imsg "$@"

Matrix

Matrix eklenti 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.allowPrivateNetwork, özel/iç homeserver’lara izin verir. proxy ve allowPrivateNetwork bağımsız denetimlerdir.
  • channels.matrix.defaultAccount, çok hesaplı kurulumlarda tercih edilen hesabı seçer.
  • channels.matrix.execApprovals: Matrix-yerel exec onayı teslimi ve onaylayıcı yetkilendirmesi.
    • enabled: true, false veya "auto" (varsayılan). Otomatik kipte, onaylayıcılar approvers veya commands.ownerAllowFrom üzerinden çözümlenebildiğinde exec onayları etkinleşir.
    • approvers: exec isteklerini onaylamasına izin verilen Matrix kullanıcı kimlikleri (ör. @owner:example.org).
    • agentFilter: isteğe bağlı agent kimliği izin listesi. Tüm agent’lar için onayları iletmek için atlayın.
    • sessionFilter: isteğe bağlı oturum anahtarı desenleri (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.
  • Matrix durum probe’ları 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 bölümünde belgelenmiştir.

Microsoft Teams

Microsoft Teams eklenti desteklidir ve channels.msteams altında yapılandırılır.
{
  channels: {
    msteams: {
      enabled: true,
      configWrites: true,
      // appId, appPassword, tenantId, webhook, takım/kanal ilkeleri:
      // bkz. /channels/msteams
    },
  },
}
  • Burada kapsanan çekirdek 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 bölümünde belgelenmiştir.

IRC

IRC eklenti 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 çekirdek 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şiyorsa varsayılan hesap seçimini geçersiz kılar.
  • Tam IRC kanal yapılandırması (host/port/TLS/kanallar/izin listeleri/bahsetme geçidi) IRC bölümünde belgelenmiştir.

Çok hesaplı (tüm kanallar)

Kanal başına birden fazla hesap çalıştırın (her birinin kendi accountId değeri vardır):
{
  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 token’ları yalnızca default hesap için geçerlidir.
  • Temel kanal ayarları, hesap başına geçersiz kılınmadığı sürece tüm hesaplara uygulanır.
  • Her hesabı farklı bir agent’a yönlendirmek için bindings[].match.accountId kullanın.
  • Tek hesaplı üst düzey kanal yapılandırmasındayken openclaw channels add (veya kanal onboarding) ile varsayılan olmayan bir hesap eklerseniz, 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ğlamalar (accountId olmadan) varsayılan hesapla eşleşmeye devam eder; hesap kapsamlı bağlamalar isteğe bağlı kalır.
  • openclaw doctor --fix, hesap kapsamlı üst düzey tek hesap değerlerini o kanal için seçilen taşınmış 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 eklenti kanalları

Birçok eklenti kanalı channels.<id> olarak yapılandırılır ve kendi özel kanal sayfalarında belgelenir (örneğin Feishu, Matrix, LINE, Nostr, Zalo, Nextcloud Talk, Synology Chat ve Twitch). Tam kanal dizinine bakın: Channels.

Grup sohbeti bahsetme geçidi

Grup mesajları varsayılan olarak bahsetme gerektirir (meta veri bahsetmesi veya güvenli regex desenleri). WhatsApp, Telegram, Discord, Google Chat ve iMessage grup sohbetleri için geçerlidir. Bahsetme türleri:
  • Meta veri bahsetmeleri: Yerel platform @-bahsetmeleri. WhatsApp self-chat kipinde yok sayılır.
  • Metin desenleri: agents.list[].groupChat.mentionPatterns içindeki güvenli regex desenleri. Geçersiz desenler ve güvenli olmayan iç içe tekrarlar yok sayılır.
  • Bahsetme geçidi yalnızca algılama mümkün olduğunda uygulanır (yerel bahsetmeler veya en az bir desen).
{
  messages: {
    groupChat: { historyLimit: 50 },
  },
  agents: {
    list: [{ id: "main", groupChat: { mentionPatterns: ["@openclaw", "openclaw"] } }],
  },
}
messages.groupChat.historyLimit genel varsayılanı belirler. Kanallar bunu channels.<channel>.historyLimit (veya hesap başına) ile geçersiz kılabilir. 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 kipi

Self-chat kipini etkinleştirmek için kendi numaranızı allowFrom içine ekleyin (yerel @-bahsetmeleri yok sayar, yalnızca metin desenlerine 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
    text: true, // sohbet mesajlarında /commands ayrıştır
    bash: false, // ! izin ver (takma ad: /bash)
    bashForegroundMs: 2000,
    config: false, // /config izin ver
    debug: false, // /debug izin ver
    restart: false, // /restart + gateway restart tool izin ver
    allowFrom: {
      "*": ["user1"],
      discord: ["user:123"],
    },
    useAccessGroups: true,
  },
}
  • Metin komutları başında / bulunan bağımsız mesajlar olmalıdır.
  • native: "auto", Discord/Telegram için yerel komutları açar, Slack için kapalı bırakır.
  • Kanal başına geçersiz kılma: channels.discord.commands.native (bool veya "auto"). false, önceden kaydedilmiş komutları temizler.
  • channels.telegram.customCommands, ek Telegram bot menü girdileri ekler.
  • bash: true, ana makine kabuğu için ! <cmd> etkinleştirir. tools.elevated.enabled ve gönderenin tools.elevated.allowFrom.<channel> içinde olması gerekir.
  • config: true, /config etkinleştirir (openclaw.json okur/yazar). Gateway chat.send istemcileri için kalıcı /config set|unset yazımları ayrıca operator.admin gerektirir; salt okunur /config show normal yazma kapsamlı operator istemcilerinde kullanılabilir kalır.
  • 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 yazımları da denetler (örneğin /allowlist --config --account <id> veya /config set channels.<provider>.accounts.<id>...).
  • allowFrom, sağlayıcı başınadır. Ayarlandığında tek yetkilendirme kaynağıdır (kanal izin listeleri/eşleme ve useAccessGroups yok sayılır).
  • useAccessGroups: false, allowFrom ayarlı değilken komutların erişim grubu ilkelerini atlamasına izin verir.

Agent 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 agent’lar için isteğe bağlı varsayılan Skills izin listesi.
{
  agents: {
    defaults: { skills: ["github", "weather"] },
    list: [
      { id: "writer" }, // github, weather devralır
      { id: "docs", skills: ["docs-search"] }, // varsayılanların yerine geçer
      { id: "locked-down", skills: [] }, // hiç Skills yok
    ],
  },
}
  • Varsayılan olarak sınırsız Skills için agents.defaults.skills alanını atlayın.
  • Varsayılanları devralmak için agents.list[].skills alanını atlayın.
  • Hiç Skills olmaması için agents.list[].skills: [] ayarlayın.
  • Boş olmayan bir agents.list[].skills listesi, bu agent için son kümedir; varsayılanlarla birleşmez.

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.bootstrapMaxChars

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

agents.defaults.bootstrapTotalMaxChars

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

agents.defaults.bootstrapPromptTruncationWarning

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

agents.defaults.imageMaxDimensionPx

Sağlayıcı çağrılarından önce transkript/tool görüntü bloklarında en uzun görüntü kenarı için en fazla 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 payload 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ı 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 (OS 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
      pdfMaxBytesMb: 10,
      pdfMaxPages: 20,
      thinkingDefault: "low",
      verboseDefault: "off",
      elevatedDefault: "on",
      timeoutSeconds: 600,
      mediaMaxMb: 5,
      contextTokens: 200000,
      maxConcurrent: 3,
    },
  },
}
  • model: bir dize ("provider/model") veya bir nesne ({ primary, fallbacks }) kabul eder.
    • Dize biçimi yalnızca birincil modeli ayarlar.
    • Nesne biçimi, birincil model artı sıralı failover modelleri ayarlar.
  • imageModel: bir dize ("provider/model") veya bir nesne ({ primary, fallbacks }) kabul eder.
    • image tool yolu tarafından vision-model yapılandırması olarak kullanılır.
    • Ayrıca seçilen/varsayılan model görüntü girdisini kabul edemediğinde geri dönüş yönlendirmesi olarak kullanılır.
  • imageGenerationModel: bir dize ("provider/model") veya bir nesne ({ primary, fallbacks }) kabul eder.
    • Paylaşılan görüntü üretim yeteneği ve görüntü üreten gelecekteki tüm tool/plugin yüzeyleri tarafından kullanılır.
    • Tipik değerler: yerel Gemini görüntü ü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 sağlayıcı kimliği sırasıyla kayıtlı diğer görüntü üretim sağlayıcılarını dener.
  • videoGenerationModel: bir dize ("provider/model") veya bir nesne ({ primary, fallbacks }) kabul eder.
    • Paylaşılan video üretim yeteneği 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.
    • Paylaşılan video üretimini kullanmadan önce bunu açıkça ayarlayın. imageGenerationModel alanından farklı olarak video üretim çalışma zamanı henüz bir sağlayıcı varsayılanı çıkarmaz.
    • 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ı şu anda en fazla 1 çıktı videosu, 1 girdi görüntüsü, 4 girdi videosu, 10 saniye süre ve sağlayıcı düzeyinde size, aspectRatio, resolution, audio ve watermark seçeneklerini destekler.
  • pdfModel: bir dize ("provider/model") veya bir nesne ({ primary, fallbacks }) kabul eder.
    • pdf tool’u tarafından model yönlendirmesi için kullanılır.
    • Atlanırsa PDF tool’u önce imageModel, ardından çözümlenmiş oturum/varsayılan modele geri döner.
  • pdfMaxBytesMb: pdf tool’unda çağrı zamanında maxBytesMb geçirilmediğinde varsayılan PDF boyut sınırı.
  • pdfMaxPages: pdf tool’unda ayıklama geri dönüş kipinin dikkate aldığı varsayılan en fazla sayfa.
  • verboseDefault: agent’lar için varsayılan ayrıntı düzeyi. Değerler: "off", "on", "full". Varsayılan: "off".
  • elevatedDefault: agent’lar 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ı atlayırsanız OpenClaw önce bir takma adı, ardından tam model kimliği için benzersiz yapılandırılmış bir sağlayıcı eşleşmesini dener ve yalnızca bundan sonra yapılandırılmış varsayılan sağlayıcıya geri döner (kullanım dışı uyumluluk davranışı, bu nedenle açık provider/model tercih edilir). Bu sağlayıcı artık yapılandırılmış varsayılan modeli sunmuyorsa, OpenClaw eski kaldırılmış sağlayıcı varsayılanını göstermek 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 agent kimliği) anahtar bazında geçersiz kılar. Ayrıntılar için Prompt Caching bölümüne bakın.
  • Bu alanları değiştiren yapılandırma yazıcıları (örneğin /models set, /models set-image ve fallback ekleme/kaldırma komutları) kanonik nesne biçimini kaydeder ve mümkün olduğunda mevcut fallback listelerini korur.
  • maxConcurrent: oturumlar arasında en fazla paralel agent çalıştırması (her oturum yine seri hale getirilir). Varsayılan: 4.
Yerleşik takma ad kısayolları (agents.defaults.models içinde model bulunduğ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ılanların önüne geçer. Z.AI GLM-4.x modelleri, --thinking off ayarlamadığınız veya agents.defaults.models["zai/<model>"].params.thinking değerini kendiniz tanımlamadığınız sürece düşünme kipini otomatik etkinleştirir. Z.AI modelleri, tool ç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 olarak ayarlayın. Anthropic Claude 4.6 modelleri, açık bir thinking düzeyi ayarlanmamışsa varsayılan olarak adaptive thinking kullanır.

agents.defaults.cliBackends

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

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,
        lightContext: false, // varsayılan: false; true yalnızca çalışma alanı bootstrap dosyalarından HEARTBEAT.md 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,
      },
    },
  },
}
  • 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.
  • suppressToolErrorWarnings: true olduğunda heartbeat çalıştırmalarında tool hata uyarısı payload’larını bastırı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 olmadan yeni bir oturumda çalışır. Cron sessionTarget: "isolated" ile aynı yalıtım deseni. Heartbeat başına token maliyetini ~100K’den ~2-5K tokene düşürür.
  • Agent başına: agents.list[].heartbeat ayarlayın. Herhangi bir agent heartbeat tanımlarsa, heartbeat yalnızca o agent’lar için çalışır.
  • Heartbeat’ler tam agent turları çalıştırır — daha kısa aralıklar daha fazla token harcar.

agents.defaults.compaction

{
  agents: {
    defaults: {
      compaction: {
        mode: "safeguard", // default | safeguard
        timeoutSeconds: 900,
        reserveTokensFloor: 24000,
        identifierPolicy: "strict", // strict | off | custom
        identifierInstructions: "Preserve deployment IDs, ticket IDs, and host:port pairs exactly.", // identifierPolicy=custom iken kullanılır
        postCompactionSections: ["Session Startup", "Red Lines"], // [] yeniden eklemeyi devre dışı bırakır
        model: "openrouter/anthropic/claude-sonnet-4-6", // isteğe bağlı yalnızca compaction modeli geçersiz kılması
        notifyUser: true, // sıkıştırma başladığında kısa 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.
  • timeoutSeconds: OpenClaw’un tek bir sıkıştırma işlemi için iptal etmeden önce izin verdiği en fazla saniye. Varsayılan: 900.
  • identifierPolicy: strict (varsayılan), off veya custom. strict, sıkıştırma özetlemesi sırasında yerleşik opak tanımlayıcı koruma yönlendirmesini başa ekler.
  • identifierInstructions: identifierPolicy=custom iken kullanılan isteğe bağlı özel tanımlayıcı koruma metni.
  • postCompactionSections: sıkıştırma sonrası yeniden enjekte edilecek isteğe bağlı AGENTS.md H2/H3 bölüm adları. Varsayılan: ["Session Startup", "Red Lines"]; devre dışı bırakmak için [] ayarlayın. Ayarlanmamışsa veya açıkça o varsayılan çifte ayarlanmışsa, eski Every Session/Safety başlıkları da eski uyumluluk geri dönüşü olarak kabul edilir.
  • model: yalnızca sıkıştırma özetlemesi için isteğe bağlı provider/model-id geçersiz kılması. Ana oturum bir modeli kullanırken sıkıştırma özetlerinin başka bir modelde çalışmasını istediğinizde bunu kullanın; ayarlanmamışsa sıkıştırma oturumun birincil modelini kullanır.
  • notifyUser: true olduğunda, sıkıştırma başladığında kullanıcıya kısa bir bildirim gönderir (örneğin, “Compacting context…”). Sıkıştırmayı sessiz tutmak için varsayılan olarak kapalıdır.
  • memoryFlush: kalıcı anıları depolamak için otomatik sıkıştırma öncesi sessiz agent turu. Çalışma alanı salt okunursa atlanır.

agents.defaults.contextPruning

LLM’ye 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 tekrar çalışabileceğini denetler (son önbellek dokunuşundan sonra).
  • Budama önce büyük araç sonuçlarını yumuşak biçimde kırpar, ardından gerekirse eski araç sonuçlarını sert biçimde temizler.
Soft-trim, başlangıcı + sonu tutar ve ortaya ... ekler.Hard-clear, tüm araç sonucunu placeholder ile değiştirir.Notlar:
  • Görüntü blokları asla kırpılmaz/temizlenmez.
  • Oranlar token sayısı değil, karakter tabanlıdır (yaklaşık).
  • keepLastAssistants sayısından az asistan mesajı varsa budama atlanır.
Davranış ayrıntıları için Session Pruning bölümüne bakın.

Blok streaming

{
  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)
    },
  },
}
  • Telegram dışındaki kanallar blok yanıtlarını etkinleştirmek için açık *.blockStreaming: true gerektirir.
  • Kanal geçersiz kılmaları: channels.<channel>.blockStreamingCoalesce (ve hesap başına varyantları). Signal/Slack/Discord/Google Chat varsayılanı minChars: 1500.
  • humanDelay: blok yanıtlar arasında rastgele gecikme. natural = 800–2500ms. Agent başına geçersiz kılma: agents.list[].humanDelay.
Davranış + parçalara ayırma ayrıntıları için Streaming bölümüne bakın.

Yazıyor göstergeleri

{
  agents: {
    defaults: {
      typingMode: "instant", // never | instant | thinking | message
      typingIntervalSeconds: 6,
    },
  },
}
  • Varsayılanlar: doğrudan sohbetler/bahsetmeler için instant, bahsedilmeyen 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ü agent için isteğe bağlı sandboxing. Tam kılavuz için Sandboxing bölümüne bakın.
{
  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çerik 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"],
      },
    },
  },
}
Backend:
  • 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 backend 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: OpenClaw’un çalışma zamanında geçici dosyalara dönüştürdüğü satır içi içerik veya SecretRef’ler
  • strictHostKeyChecking / updateHostKeys: OpenSSH host-key ilke düğmeleri
SSH auth önceliği:
  • identityData, identityFile alanının önüne geçer
  • certificateData, certificateFile alanının önüne geçer
  • knownHostsData, knownHostsFile alanının önüne geçer
  • SecretRef destekli *Data değerleri, sandbox oturumu başlamadan önce etkin secrets çalışma zamanı anlık görüntüsünden çözülür
SSH backend davranışı:
  • uzak çalışma alanını oluşturma veya yeniden oluşturmadan sonra bir kez başlatır
  • ardından uzak SSH çalışma alanını kanonik tutar
  • exec, dosya araçları ve medya yollarını SSH üzerinden yönlendirir
  • uzak değişiklikleri otomatik olarak ana makineye geri eşzamanlamaz
  • 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: sandbox çalışma alanı /workspace konumunda, agent çalışma alanı salt okunur biçimde /agent konumuna bağlanır
  • rw: agent çalışma alanı /workspace konumuna okuma/yazma olarak bağlanır
Kapsam:
  • session: oturum başına kapsayıcı + çalışma alanı
  • agent: agent başına tek kapsayıcı + çalışma alanı (varsayılan)
  • shared: paylaşılan kapsayıcı ve çalışma alanı (oturumlar arası yalıtım yok)
OpenShell plugin 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 kipi:
  • mirror: exec öncesinde uzağı yerelden seed et, exec sonrasında geri eşzamanla; yerel çalışma alanı kanonik kalır
  • remote: sandbox oluşturulduğunda uzağı bir kez seed et, ardından uzak çalışma alanını kanonik tut
remote kipinde, OpenClaw dışında yapılan host-yerel düzenlemeleri seed adımından sonra otomatik olarak sandbox’a eşzamanlanmaz. Taşıma SSH ile OpenShell sandbox’ına yapılır, ancak sandbox yaşam döngüsü ve isteğe bağlı mirror sync eklentiye aittir.setupCommand, kapsayıcı oluşturulduktan sonra bir kez çalışır (sh -lc aracılığıyla). Ağ çıkışı, yazılabilir kök ve root kullanıcı gerekir.Kapsayıcılar varsayılan olarak network: "none" kullanır — agent’ın dış erişime ihtiyacı varsa "bridge" (veya özel bir bridge ağı) olarak ayarlayın. "host" engellenir. "container:<id>" varsayılan olarak engellenir; ancak sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true değerini açıkça ayarlarsanız izin verilir (son çare).Gelen ekler, etkin çalışma alanındaki media/inbound/* altına taşınır.docker.binds, ek ana makine dizinlerini bağlar; genel ve agent başına bağlamalar birleştirilir.Sandboxed browser (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 auth kullanır ve OpenClaw paylaşılan URL’de parolayı açığa çıkarmak yerine kısa ömürlü bir token URL’si üretir.
  • allowHostControl: false (varsayılan), sandbox oturumlarını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, CDP girişini kapsayıcı sınırında isteğe bağlı olarak CIDR aralığına kısıtlar (ö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 yerine geçer.
  • 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=<OPENCLAW_BROWSER_CDP_PORT değerinden türetilir>
    • --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ı gerekirse OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0 ile devre dışı bırakılabilir.
    • İş akışınız buna bağlıysa uzantıları yeniden etkinleştirmek için OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0 kullanın.
    • --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 etkin olduğunda --no-sandbox ve --disable-setuid-sandbox.
    • Varsayılanlar kapsayıcı imajı taban çizgisidir; kapsayıcı varsayılanlarını değiştirmek için özel giriş noktası olan özel bir tarayıcı imajı kullanın.
Tarayıcı sandboxing ve sandbox.docker.binds şu anda yalnızca Docker için geçerlidir. İmajları derleyin:
scripts/sandbox-setup.sh           # ana sandbox imajı
scripts/sandbox-browser-setup.sh   # isteğe bağlı tarayıcı imajı

agents.list (agent 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", // agent başına thinking düzeyi geçersiz kılması
        reasoningDefault: "on", // agent başına reasoning görünürlüğü geçersiz kılması
        fastModeDefault: false, // agent başına fast mode geçersiz kılması
        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 alanının 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: kararlı agent kimliği (zorunlu).
  • default: birden çok ayarlandığında ilk kazanan olur (uyarı günlüğe yazılır). Hiçbiri ayarlı değilse, listedeki ilk girdi varsayılan olur.
  • model: dize biçimi yalnızca primary alanını 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 geçersiz kılan cron işleri, fallbacks: [] ayarlamazsanız varsayılan fallback’leri yine devralır.
  • params: seçilen model girdisindeki agents.defaults.models üzerinde birleştirilen agent başına akış parametreleri. Tüm model kataloğunu çoğaltmadan cacheRetention, temperature veya maxTokens gibi agent’a özgü geçersiz kılmalar için bunu kullanın.
  • skills: isteğe bağlı agent başına Skills izin listesi. Atlanırsa, agent ayarlıysa agents.defaults.skills alanını devralır; açık liste varsayılanlarla birleşmek yerine onların yerine geçer ve [] hiç Skills olmadığı anlamına gelir.
  • thinkingDefault: isteğe bağlı agent başına varsayılan thinking düzeyi (off | minimal | low | medium | high | xhigh | adaptive). Bu agent için mesaj başına veya oturum geçersiz kılması ayarlanmamışsa agents.defaults.thinkingDefault alanının önüne geçer.
  • reasoningDefault: isteğe bağlı agent başına varsayılan reasoning görünürlüğü (on | off | stream). Mesaj başına veya oturum reasoning geçersiz kılması ayarlanmamışsa uygulanır.
  • fastModeDefault: isteğe bağlı agent başına fast mode varsayılanı (true | false). Mesaj başına veya oturum fast-mode geçersiz kılması ayarlanmamışsa uygulanır.
  • runtime: isteğe bağlı agent başına çalışma zamanı tanımlayıcısı. Agent’ın varsayılan olarak ACP harness oturumlarını kullanması gerekiyorsa runtime.acp varsayılanları (agent, backend, mode, cwd) ile 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 içinden, mentionPatterns değerini name/emoji içinden.
  • subagents.allowAgents: sessions_spawn için agent kimliği izin listesi (["*"] = herhangi biri; varsayılan: yalnızca aynı agent).
  • Sandbox devralma koruması: istekte bulunan oturum sandbox içindeyse, sessions_spawn sandbox dışında çalışacak hedefleri reddeder.
  • subagents.requireAgentId: true olduğunda agentId içermeyen sessions_spawn çağrılarını engeller (açık profil seçimi zorlar; varsayılan: false).

Çok agent’lı yönlendirme

Tek bir Gateway içinde birden fazla yalıtılmış agent ç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 (type eksikse varsayılan route olur), kalıcı ACP konuşma bağlamaları 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 }
Belirlenimli 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 geneli)
  6. Varsayılan agent
Her katmanda ilk eşleşen 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.

Agent 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 Multi-Agent Sandbox & Tools bölümüne bakın.

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 üzerindeyse üst iş parçacığı fork’unu atla (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ı sert bütçe
      highWaterBytes: "400mb", // isteğe bağlı temizlik hedefi
    },
    threadBindings: {
      enabled: true,
      idleHours: 24, // saat cinsinden varsayılan hareketsizlik otomatik odak kaldırma (`0` devre dışı bırakır)
      maxAgeHours: 0, // saat cinsinden varsayılan kesin maksimum yaş (`0` devre dışı bırakır)
    },
    mainKey: "main", // eski (ç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, 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 gruplanacağını belirler.
    • main: tüm DM’ler ana oturumu paylaşır.
    • per-peer: gönderen kimliğine göre kanallar arasında 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 kanonik kimlikleri sağlayıcı önekli peer’lara 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ıldığında, hangisinin süresi önce dolarsa o kazanır.
  • resetByType: tür başına geçersiz kılmalar (direct, group, thread). Eski dm, direct için takma ad olarak kabul edilir.
  • parentForkMaxTokens: fork edilmiş iş parçacığı oturumu oluştururken izin verilen en yüksek üst oturum totalTokens değeri (varsayılan 100000).
    • Üst totalTokens bu değerin üzerindeyse, OpenClaw üst transkript geçmişini devralmak yerine yeni bir iş parçacığı oturumu başlatır.
    • Bu korumayı devre dışı bırakmak ve üst fork’a her zaman izin vermek için 0 ayarlayın.
  • mainKey: eski alan. Çalışma zamanı artık ana doğrudan sohbet kovası için her zaman "main" kullanır.
  • agentToAgent.maxPingPongTurns: agent’tan agent’a değişimlerde agent’lar arasında izin verilen en fazla geri-yanıtlama turu (tamsayı, aralık: 05). 0, ping-pong zincirini devre dışı bırakır.
  • sendPolicy: channel, chatType (direct|group|channel, eski dm takma adıyla), keyPrefix veya rawKeyPrefix ile eşleştirme yapar. İlk deny kazanır.
  • maintenance: oturum deposu temizliği + saklama denetimleri.
    • mode: warn yalnızca uyarı üretir; enforce temizliği uygular.
    • pruneAfter: eski girişler için yaş kesme noktası (varsayılan 30d).
    • maxEntries: sessions.json içindeki en fazla giriş sayısı (varsayılan 500).
    • rotateBytes: sessions.json bu boyutu aşınca döndürülür (varsayılan 10mb).
    • resetArchiveRetention: *.reset.<timestamp> transkript 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 kipinde uyarılar günlüğe yazılır; enforce kipinde en eski artefaktlar/oturumlar önce kaldırılı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: saat cinsinden varsayılan hareketsizlik otomatik odak kaldırma (0 devre dışı bırakır; sağlayıcılar geçersiz kılabilir)
    • maxAgeHours: saat cinsinden varsayılan kesin maksimum 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 kazanan): hesap → kanal → genel. "" devre dışı bırakır ve zinciri durdurur. "auto" değeri [{identity.name}] tü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}Agent kimlik adı("auto" ile aynı)
Değişkenler büyük/küçük harfe duyarsızdır. {think}, {thinkingLevel} için takma addır.

Ack reaction

  • Varsayılan olarak etkin agent’ın identity.emoji değeri kullanılır, yoksa "👀". 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 geri dönüşü.
  • 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ışsa ack reaction’lar etkinken durum tepkileri etkin kalır. Telegram’da yaşam döngüsü durum tepkilerini etkinleştirmek için bunu açıkça true olarak ayarlayın.

Gelen debounce

Aynı gönderenden hızlı gelen yalnızca metinli mesajları tek bir agent turunda toplar. Medya/ekler hemen flush edilir. Denetim komutları debounce’u atlar.

TTS (text-to-speech)

{
  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, otomatik TTS’yi denetler. /tts off|always|inbound|tagged bunu oturum başına geçersiz kılar.
  • summaryModel, otomatik özet için agents.defaults.model.primary alanını geçersiz kılar.
  • modelOverrides varsayılan olarak etkindir; modelOverrides.allowProvider varsayılanı false’tur (katılımlı).
  • API anahtarları ELEVENLABS_API_KEY/XI_API_KEY ve OPENAI_API_KEY alanlarına geri döner.
  • 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.
  • openai.baseUrl OpenAI dışı bir uç noktayı gösterdiğinde, OpenClaw bunu OpenAI uyumlu bir TTS sunucusu olarak değerlendirir ve model/ses doğrulamasını gevşetir.

Talk

Talk kipi 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 çok 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.
  • Voice kimlikleri ELEVENLABS_VOICE_ID veya SAG_VOICE_ID alanlarına geri döner.
  • providers.*.apiKey düz metin dizeleri veya SecretRef nesneleri kabul eder.
  • ELEVENLABS_API_KEY geri dönüşü yalnızca hiçbir Talk API anahtarı yapılandırılmamışsa uygulanır.
  • providers.*.voiceAliases, Talk yönergelerinin kolay adlar kullanmasına izin verir.
  • silenceTimeoutMs, Talk kipinin transkripti 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’te 900 ms).

Araçlar

Araç profilleri

tools.profile, tools.allow/tools.deny öncesinde temel bir izin listesi ayarlar: Yerel onboarding, ayarlı değilse yeni yerel yapılandırmaları varsayılan olarak tools.profile: "coding" ile başlatı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
messaginggroup:messaging, sessions_list, sessions_history, sessions_send, session_status
fullKısıtlama yok (ayarlanmamış olmakla aynı)

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, tts
group:openclawTüm yerleşik araçlar (sağlayıcı eklentileri hariç)

tools.allow / tools.deny

Genel araç izin/verme ilkesi (deny kazanır). Büyük/küçük harfe duyarsızdır, * joker karakterlerini destekler. Docker sandbox kapalı olsa 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"],
      },
    },
  },
}
  • Agent 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, sandboxing’i atlar ve yapılandırılmış kaçış yolunu kullanır (varsayılan olarak gateway, exec hedefi node 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 denetimleri 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 agent 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 en fazla araç çağrısı geçmişi.
  • warningThreshold: uyarılar için tekrarlayan ilerlemesiz desen eşiği.
  • criticalThreshold: kritik döngüleri engellemek için daha yüksek tekrar eşiği.
  • globalCircuitBreakerThreshold: herhangi bir ilerlemesiz çalışma için sert durdurma eşiği.
  • detectors.genericRepeat: aynı araç/aynı args çağrılarının tekrarı için uyar.
  • detectors.knownPollNoProgress: bilinen yoklama araçlarında (process.poll, command_status vb.) ilerleme yoksa uyar/engelle.
  • detectors.pingPong: dönüşümlü ilerlemesiz çift desenlerinde uyar/engelle.
  • 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 env
        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örüntü/ses/video):
{
  tools: {
    media: {
      concurrency: 2,
      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. destekler)
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ıralamayı izler: auth-profiles.json → env vars → models.providers.*.apiKey.

tools.agentToAgent

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

tools.sessions

Oturum araçlarının (sessions_list, sessions_history, sessions_send) hangi oturumları hedefleyebileceğini denetler. Varsayılan: tree (mevcut oturum + onun tarafından başlatılan oturumlar, örneğin subagent’lar).
{
  tools: {
    sessions: {
      // "self" | "tree" | "agent" | "all"
      visibility: "tree",
    },
  },
}
Notlar:
  • self: yalnızca mevcut oturum anahtarı.
  • tree: mevcut oturum + mevcut oturum tarafından başlatılan oturumlar (subagent’lar).
  • agent: geçerli agent kimliğine ait herhangi bir oturum (aynı agent kimliği altında gönderen başına oturumlar çalıştırıyorsanız diğer kullanıcıları da içerebilir).
  • all: herhangi bir oturum. Agent’lar arası hedefleme yine de tools.agentToAgent gerektirir.
  • Sandbox kısacı: mevcut oturum sandbox içindeyse ve agents.defaults.sandbox.sessionToolsVisibility="spawned" ise, tools.sessions.visibility="all" olsa bile görünürlük tree olarak zorlanır.

tools.sessions_spawn

sessions_spawn için satır içi ek desteğini denetler.
{
  tools: {
    sessions_spawn: {
      attachments: {
        enabled: false, // katılımlı: satır içi dosya eklerine izin vermek için true ayarlayın
        maxTotalBytes: 5242880, // tüm dosyalarda toplam 5 MB
        maxFiles: 50,
        maxFileBytes: 1048576, // dosya başına 1 MB
        retainOnSessionKeep: false, // cleanup="keep" iken ekleri tut
      },
    },
  },
}
Notlar:
  • Ekler yalnızca runtime: "subagent" için desteklenir. ACP çalışma zamanı bunları reddeder.
  • Dosyalar child çalışma alanında .openclaw/attachments/<uuid>/ içine .manifest.json ile dönüştürülür.
  • Ek içeriği transkript kalıcılığından otomatik olarak redakte edilir.
  • Base64 girdileri sıkı alfabe/dolgu denetimleri ve çözme öncesi boyut korumasıyla doğrulanır.
  • Dizin izinleri 0700, dosya izinleri 0600 şeklindedir.
  • Temizlik cleanup ilkesini izler: delete ekleri her zaman kaldırır; keep bunları yalnızca retainOnSessionKeep: true ise tutar.

tools.experimental

Deneysel yerleşik araç bayrakları. Çalışma zamanına özgü otomatik etkinleştirme kuralı uygulanmadıkça varsayılan olarak kapalıdır.
{
  tools: {
    experimental: {
      planTool: true, // deneysel update_plan etkinleştir
    },
  },
}
Notlar:
  • planTool: önemsiz olmayan çok adımlı iş takibi için yapılandırılmış update_plan aracını etkinleştirir.
  • Varsayılan: OpenAI dışındaki sağlayıcılar için false. OpenAI ve OpenAI Codex çalıştırmaları bunu otomatik etkinleştirir.
  • Etkinleştirildiğinde sistem istemi de kullanım yönlendirmesi ekler; böylece model bunu yalnızca önemli işlerde kullanır ve en fazla bir adımı in_progress olarak tutar.

agents.defaults.subagents

{
  agents: {
    defaults: {
      subagents: {
        allowAgents: ["research"],
        model: "minimax/MiniMax-M2.7",
        maxConcurrent: 8,
        runTimeoutSeconds: 900,
        archiveAfterMinutes: 60,
      },
    },
  },
}
  • model: başlatılan sub-agent’lar için varsayılan model. Atlanırsa sub-agent’lar çağıranın modelini devralır.
  • allowAgents: istek yapan agent kendi subagents.allowAgents alanını ayarlamadığında sessions_spawn için varsayılan hedef agent kimliği izin listesi (["*"] = herhangi biri; varsayılan: yalnızca aynı agent).
  • runTimeoutSeconds: araç çağrısı runTimeoutSeconds atladığında sessions_spawn için varsayılan zaman aşımı (saniye). 0 zaman aşımı olmadığı anlamına gelir.
  • Sub-agent 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. Yapılandırmada veya ~/.openclaw/agents/<agentId>/agent/models.json içinde models.providers aracılığıyla ö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 ihtiyaçları için authHeader: true + headers kullanın.
  • Agent 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).
  • Eşleşen sağlayıcı kimlikleri için birleştirme önceliği:
    • Boş olmayan agent models.json baseUrl değerleri kazanır.
    • Boş olmayan agent apiKey değerleri, o sağlayıcı geçerli config/auth-profile bağlamında SecretRef tarafından yönetilmiyorsa kazanır.
    • SecretRef tarafından yönetilen sağlayıcı apiKey değerleri, çözümlenmiş secret’ları kalıcılaştırmak yerine kaynak işaretçileri (ENV_VAR_NAME env ref’leri için, secretref-managed file/exec ref’leri için) üzerinden yenilenir.
    • SecretRef tarafından yönetilen sağlayıcı header değerleri, kaynak işaretçilerinden yenilenir (secretref-env:ENV_VAR_NAME env ref’leri için, secretref-managed file/exec ref’leri için).
    • Boş veya eksik agent apiKey/baseUrl, yapılandırmadaki models.providers alanına geri döner.
    • Eşleşen model contextWindow/maxTokens, açık yapılandırma ve örtük katalog değerleri arasında daha yüksek olanı kullanır.
    • Eşleşen model contextTokens, mevcut olduğunda açık çalışma zamanı sınırını korur; yerel model meta verisini değiştirmeden etkili bağlamı sınırlandırmak için bunu kullanın.
    • Yapılandırmanın models.json dosyasını tamamen yeniden yazmasını istiyorsanız models.mode: "replace" kullanın.
    • İşaretçi kalıcılığı kaynak açısından yetkilidir: işaretçiler, çözümlenmiş çalışma zamanı secret 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ğiyle 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/env substitution tercih edilir).
  • models.providers.*.auth: auth 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 bilgisini Authorization başlığında taşıma zorlaması.
  • models.providers.*.baseUrl: upstream API base URL’si.
  • models.providers.*.headers: proxy/tenant yönlendirmesi için ek statik başlıklar.
  • models.providers.*.request: model-provider HTTP istekleri için taşıma geçersiz kılmaları.
    • request.headers: ek başlıklar (sağlayıcı varsayılanlarıyla birleştirilir). Değerler SecretRef kabul eder.
    • request.auth: auth stratejisi geçersiz kılması. Kipler: "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ı. Kipler: "env-proxy" (HTTP_PROXY/HTTPS_PROXY env değişkenlerini kullan), "explicit-proxy" (url ile). Her iki kip de isteğe bağlı tls alt nesnesi kabul eder.
    • request.tls: doğrudan bağlantılar için TLS geçersiz kılması. Alanlar: ca, cert, key, passphrase (hepsi SecretRef kabul eder), serverName, insecureSkipVerify.
  • models.providers.*.models: açık sağlayıcı model katalog girdileri.
  • models.providers.*.models.*.contextWindow: yerel model bağlam penceresi meta verisi.
  • models.providers.*.models.*.contextTokens: isteğe bağlı çalışma zamanı bağlam sınırı. Modelin yerel contextWindow değerinden daha küçük bir etkili 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 yerel olmayan bir baseUrl ile (api.openai.com dışında bir host), OpenClaw bunu çalışma zamanında false olarak zorlar. Boş/atlanmış baseUrl, varsayılan OpenAI davranışını korur.
  • plugins.entries.amazon-bedrock.config.discovery: Bedrock otomatik discovery ayarları kökü.
  • plugins.entries.amazon-bedrock.config.discovery.enabled: örtük discovery’yi aç/kapat.
  • plugins.entries.amazon-bedrock.config.discovery.region: discovery için AWS bölgesi.
  • plugins.entries.amazon-bedrock.config.discovery.providerFilter: hedefli discovery için isteğe bağlı sağlayıcı kimliği filtresi.
  • plugins.entries.amazon-bedrock.config.discovery.refreshInterval: discovery yenileme yoklama aralığı.
  • plugins.entries.amazon-bedrock.config.discovery.defaultContextWindow: keşfedilen modeller için geri dönüş bağlam penceresi.
  • plugins.entries.amazon-bedrock.config.discovery.defaultMaxTokens: keşfedilen modeller için geri dönüş en fazla çı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/... başvuruları 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ılması olan ö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ında streaming kullanım uyumluluğunu ilan eder ve OpenClaw artık bunu yalnızca yerleşik sağlayıcı kimliğine değil uç nokta yeteneklerine göre anahtarlamaktadır.
{
  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 artık varsayılan olarak yalnızca M2.7 kullanır. Anthropic uyumlu streaming yolunda OpenClaw, siz açıkça thinking ayarlamadığınız sürece MiniMax thinking’i 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: ciddi donanım üzerinde LM Studio Responses API ile büyük bir yerel model çalıştırın; fallback 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 mevcutsa, 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, bir skill’i paketlenmiş/kurulu olsa bile devre dışı bırakır.
  • entries.<skillKey>.apiKey: birincil env değişkeni tanımlayan skill’ler 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.
  • Discovery yerel OpenClaw eklentilerini, uyumlu Codex bundle’larını ve Claude bundle’larını, ayrıca manifest’i olmayan Claude varsayılan düzen bundle’larını kabul eder.
  • Yapılandırma değişiklikleri 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: plugin destekliyorsa eklenti düzeyi API anahtarı kolaylık alanı.
  • plugins.entries.<id>.env: eklenti kapsamlı env değişkeni eşlemesi.
  • plugins.entries.<id>.hooks.allowPromptInjection: false olduğunda çekirdek before_prompt_build kancasını engeller ve eski before_agent_start kancasındaki istem değiştiren alanları yok sayar; eski modelOverride ve providerOverride alanlarını korur. Yerel plugin kancalarına ve desteklenen bundle tarafından sağlanan kanca dizinlerine uygulanır.
  • plugins.entries.<id>.subagent.allowModelOverride: bu eklentiye arka plan subagent çalıştırmaları için çalışma başına provider ve model geçersiz kılmaları isteme güveni verildiğini açıkça belirtir.
  • plugins.entries.<id>.subagent.allowedModels: güvenilen subagent geçersiz kılmaları için isteğe bağlı kanonik provider/model hedef izin listesi. Bilerek herhangi bir modele izin vermek istiyorsanız yalnızca "*" kullanın.
  • plugins.entries.<id>.config: plugin tanımlı yapılandırma nesnesi (mevcutsa yerel OpenClaw plugin şemasıyla doğrulanır).
  • plugins.entries.firecrawl.config.webFetch: Firecrawl web-fetch sağlayıcı ayarları.
    • apiKey: Firecrawl API anahtarı (SecretRef kabul eder). plugins.entries.firecrawl.config.webSearch.apiKey, eski tools.web.fetch.firecrawl.apiKey veya FIRECRAWL_API_KEY env değişkenine geri döner.
    • baseUrl: Firecrawl API base URL’si (varsayılan: https://api.firecrawl.dev).
    • onlyMainContent: sayfalardan yalnızca ana içeriği ayıkla (varsayılan: true).
    • maxAgeMs: milisaniye cinsinden en fazla önbellek yaşı (varsayılan: 172800000 / 2 gün).
    • timeoutSeconds: scrape istek zaman aşımı, saniye cinsinden (varsayılan: 60).
  • plugins.entries.xai.config.xSearch: xAI X Search (Grok web araması) ayarları.
    • enabled: X Search sağlayıcısını etkinleştir.
    • model: arama için kullanılacak Grok modeli (ör. "grok-4-1-fast").
  • plugins.entries.memory-core.config.dreaming: memory dreaming (deneysel) ayarları. Kipler ve eşikler için Dreaming bölümüne bakın.
    • mode: dreaming sıklığı ön ayarı ("off", "core", "rem", "deep"). Varsayılan: "off".
    • cron: dreaming zamanlaması için isteğe bağlı cron ifadesi geçersiz kılması.
    • timezone: zamanlama değerlendirmesi için saat dilimi (agents.defaults.userTimezone alanına geri döner).
    • limit: döngü başına yükseltilecek en fazla aday sayısı.
    • minScore: yükseltme için en düşük ağırlıklı puan eşiği.
    • minRecallCount: en düşük recall count eşiği.
    • minUniqueQueries: en düşük farklı sorgu sayısı eşiği.
  • Etkin Claude bundle eklentileri, settings.json içinden gömülü Pi varsayılanları da katkılayabilir; OpenClaw bunları ham OpenClaw config yamaları olarak değil, temizlenmiş agent 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 verileri.
    • source, spec, sourcePath, installPath, version, resolvedName, resolvedVersion, resolvedSpec, integrity, shasum, resolvedAt, installedAt alanlarını içerir.
    • plugins.installs.* alanını yönetilen durum olarak değerlendirin; elle düzenlemek yerine CLI komutlarını tercih edin.
Bkz. Plugins.

Tarayıcı

{
  browser: {
    enabled: true,
    evaluateEnabled: true,
    defaultProfile: "user",
    ssrfPolicy: {
      dangerouslyAllowPrivateNetwork: true, // varsayılan trusted-network kipi
      // 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 işlevlerini devre dışı bırakır.
  • ssrfPolicy.dangerouslyAllowPrivateNetwork, ayarlanmamışsa varsayılan olarak true olur (trusted-network modeli).
  • Sıkı herkese açık tarayıcı gezinmesi için ssrfPolicy.dangerouslyAllowPrivateNetwork: false ayarlayın.
  • Sıkı kipte uzak CDP profil uç noktaları (profiles.*.cdpUrl) erişilebilirlik/discovery denetimleri sırasında aynı özel ağ engellemesine tabidir.
  • ssrfPolicy.allowPrivateNetwork, eski takma ad olarak desteklenmeye devam eder.
  • Sıkı kipte açık istisnalar için ssrfPolicy.hostnameAllowlist ve ssrfPolicy.allowedHostnames kullanın.
  • Uzak profiller attach-only’dir (start/stop/reset devre dışı).
  • profiles.*.cdpUrl, http://, https://, ws:// ve wss:// kabul eder. OpenClaw’un /json/version keşfetmesini istiyorsanız HTTP(S), sağlayıcınız size doğrudan bir DevTools WebSocket URL’si veriyorsa WS(S) kullanın.
  • existing-session profilleri yalnızca host 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 yol sınırlarını korur: CSS seçici hedefleme yerine snapshot/ref tabanlı eylemler, tek dosya yükleme kancaları, diyalog zaman aşımı geçersiz kılmaları yok, wait --load networkidle, 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’yi açıkça ayarlayın.
  • Otomatik algılama sırası: Chromium tabanlıysa varsayılan tarayıcı → Chrome → Brave → Edge → Chromium → Chrome Canary.
  • Denetim hizmeti: yalnızca loopback (port gateway.port alanından türetilir, varsayılan 18791).
  • extraArgs, yerel Chromium başlatması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örüntü URL’si veya data URI
    },
  },
}
  • seamColor: yerel uygulama UI chrome’u için vurgu rengi (Talk Mode konuşma balonu tonu vb.).
  • assistant: Control UI kimlik geçersiz kılması. Etkin agent kimliğine geri döner.

Gateway

{
  gateway: {
    mode: "local", // local | remote
    port: 18789,
    bind: "loopback",
    auth: {
      mode: "token", // none | token | password | trusted-proxy
      token: