Multi-agent

Çoklu ajan yönlendirmesi

Status: active

Tek bir Gateway işleminde, her biri kendi çalışma alanına, durum dizinine (agentDir) ve SQLite destekli oturum geçmişine sahip birden fazla yalıtılmış agent'ın yanı sıra birden fazla kanal hesabı (ör. iki WhatsApp numarası) çalıştırın. Gelen mesajlar bağlamalar aracılığıyla doğru agent'a yönlendirilir.

Bir agent, persona başına kapsamın tamamıdır: çalışma alanı dosyaları, kimlik doğrulama profilleri, model kayıt defteri ve oturum deposu. Bir bağlama, bir kanal hesabını (bir Slack çalışma alanı, bir WhatsApp numarası vb.) bu agent'lardan biriyle eşler.

Bir agent nedir

Her agent'ın kendine ait şunları vardır:

  • Çalışma alanı: dosyalar, AGENTS.md/SOUL.md/USER.md, yerel notlar, persona kuralları.
  • Durum dizini (agentDir): kimlik doğrulama profilleri, model kayıt defteri, agent başına yapılandırma.
  • Oturum deposu: ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite içindeki sohbet geçmişi ve yönlendirme durumu.

Kimlik doğrulama profilleri agent başınadır ve şuradan okunur:

text
~/.openclaw/agents/<agentId>/agent/auth-profiles.json

Skills, her agent çalışma alanından ve ~/.openclaw/skills gibi paylaşılan köklerden yüklenir, ardından geçerli agent becerisi izin listesine göre filtrelenir. Paylaşılan bir temel için agents.defaults.skills, agent başına değiştirme için agents.entries.*.skills kullanın (açık girdiler varsayılanın yerini alır, onunla birleştirilmez). Bkz. Skills: agent başına ve paylaşılan ve Skills: agent izin listeleri.

Plugin'e ait depolama, ilgili Plugin'in yapılandırmasını izler; ikinci bir agent eklemek her genel Plugin deposunu otomatik olarak ayırmaz. Örneğin personaların derlenmiş wiki bilgisini paylaşmaması gerektiğinde agent başına Memory Wiki kasalarını yapılandırın.

Yollar

Ne Varsayılan Geçersiz kılma
Yapılandırma ~/.openclaw/openclaw.json OPENCLAW_CONFIG_PATH
Durum dizini ~/.openclaw OPENCLAW_STATE_DIR
Varsayılan agent'ın çalışma alanı ~/.openclaw/workspace (OPENCLAW_PROFILE ayarlandığında workspace-<profile>) agents.entries.*.workspace, ardından agents.defaults.workspace veya OPENCLAW_WORKSPACE_DIR
Diğer agent'ların çalışma alanı <stateDir>/workspace-<agentId> (ayarlandığında <agents.defaults.workspace>/<agentId>) agents.entries.*.workspace
Agent dizini ~/.openclaw/agents/<agentId>/agent agents.entries.*.agentDir
Oturumlar ve dökümler ~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite
Eski/arşivlenmiş oturum yapıtları ~/.openclaw/agents/<agentId>/sessions

Tek agent modu (varsayılan)

Hiçbir şey yapılandırmazsanız OpenClaw tek bir agent çalıştırır:

  • agentId varsayılan olarak main değerini alır.
  • Oturumlar agent:main:<mainKey> olarak anahtarlanır (varsayılan mainKey, main değeridir).
  • Çalışma alanı varsayılan olarak ~/.openclaw/workspace değerini alır (OPENCLAW_PROFILE, default dışında bir değere ayarlandığında workspace-<profile>).
  • Durum varsayılan olarak ~/.openclaw/agents/main/agent değerini alır.

Agent yardımcısı

Yeni bir yalıtılmış agent ekleyin:

bash
openclaw agents add work

Bayraklar: --workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (tekrarlanabilir), --non-interactive (--workspace gerektirir).

Gelen mesajları yönlendirmek için bindings ekleyin (sihirbaz bunu sizin için yapmayı önerir), ardından doğrulayın:

bash
openclaw agents list --bindings

Hızlı başlangıç

  • Her agent çalışma alanını oluşturun

    bash
    openclaw agents add codingopenclaw agents add social

    Her agent, SOUL.md, AGENTS.md ve isteğe bağlı USER.md içeren kendi çalışma alanının yanı sıra özel bir agentDir ve ~/.openclaw/agents/<agentId> altında bir oturum deposu edinir.

  • Kanal hesaplarını oluşturun

    Tercih ettiğiniz kanallarda her agent için bir hesap oluşturun:

    • Discord: agent başına bir bot oluşturun, Message Content Intent seçeneğini etkinleştirin ve her belirteci kopyalayın.
    • Telegram: BotFather aracılığıyla agent başına bir bot oluşturun ve her belirteci kopyalayın.
    • WhatsApp: her hesap için ilgili telefon numarasını bağlayın.
    bash
    openclaw channels login --channel whatsapp --account work

    Kanal kılavuzlarına bakın: Discord, Telegram, WhatsApp.

  • Agent'ları, hesapları ve bağlamaları ekleyin

    Agent'ları agents.entries altında, kanal hesaplarını channels.<channel>.accounts altında ekleyin ve bunları bindings ile bağlayın (aşağıdaki örneklere bakın).

  • Yeniden başlatın ve doğrulayın

    bash
    openclaw gateway restartopenclaw agents list --bindingsopenclaw channels status --probe
  • Birden fazla agent, birden fazla persona

    Yapılandırılan her agentId, temel agent durumu için ayrı bir persona sınırıdır:

    • Kanal başına farklı hesaplar (accountId başına).
    • Farklı kişilikler (agent başına AGENTS.md/SOUL.md).
    • Agent'lar arası erişimin yalnızca açık özellikler veya Plugin yapılandırması aracılığıyla etkinleştirildiği ayrı kimlik doğrulama ve oturumlar.

    Bu, temel agent durumunu ayrı tutarken birden fazla kişinin tek bir Gateway'i paylaşmasına olanak tanır.

    Agent başına Memory Wiki kasaları

    Memory Wiki varsayılan olarak tek bir genel kasa kullanır. Bir destek agent'ının derlenmiş bilgisini bir pazarlama agent'ının bilgisinden ayrı tutmak için plugins.entries.memory-wiki.config.vault.scope değerini agent olarak ayarlayın:

    json5
    {  plugins: {    entries: {      "memory-wiki": {        enabled: true,        config: {          vault: {            scope: "agent",            path: "~/.openclaw/wiki",          },        },      },    },  },}

    Yapılandırılan yol üst dizindir. OpenClaw normalize edilmiş agent kimliğini ekleyerek ~/.openclaw/wiki/support ve ~/.openclaw/wiki/marketing gibi yollar oluşturur. Birden fazla agent yapılandırıldığında agent kapsamlı CLI ve Gateway işlemleri açıkça bir agent belirtilmesini gerektirir. Köprü filtreleme, geçiş ve güven sınırı ayrıntıları için Agent başına Memory Wiki kasaları bölümüne bakın.

    Agent'lar arası QMD bellek araması

    Bir agent'ın başka bir agent'ın QMD oturum dökümlerinde arama yapmasına izin vermek için agents.entries.*.memory.search.qmd.extraCollections altına ek koleksiyonlar ekleyin. Her agent'ın aynı koleksiyonları paylaşması gerektiğinde memory.search.qmd.extraCollections kullanın.

    json5
    {  agents: {    defaults: {      workspace: "~/workspaces/main",    },    entries: {      main: {        workspace: "~/workspaces/main",        memory: {          search: {            qmd: {              extraCollections: [{ path: "notes" }], // çalışma alanı içinde çözümlenir -> "notes-main" adlı koleksiyon            },          },        },      },      family: { workspace: "~/workspaces/family" },    },  },  memory: {    backend: "qmd",    search: {      qmd: {        extraCollections: [{ path: "~/agents/family/sessions", name: "family-sessions" }],      },    },    qmd: { includeDefaultMemory: false },  },}

    Ek bir koleksiyon yolu agent'lar arasında paylaşılabilir, ancak yol agent çalışma alanının dışındaysa name açıkça belirtilmiş olarak kalır. Çalışma alanının içindeki yollar agent kapsamlı kalır; böylece her agent kendi döküm arama kümesini korur.

    Tek WhatsApp numarası, birden fazla kişi (DM ayrımı)

    Gönderenin E.164 (+15551234567) değerini peer.kind: "direct" ile eşleştirerek tek bir WhatsApp hesabındaki farklı WhatsApp DM'lerini farklı agent'lara yönlendirin. Yanıtlar yine aynı WhatsApp numarasından gelir; agent başına gönderen kimliği yoktur.

    json5
    {  agents: {    list: [      { id: "alex", workspace: "~/.openclaw/workspace-alex" },      { id: "mia", workspace: "~/.openclaw/workspace-mia" },    ],  },  bindings: [    {      agentId: "alex",      match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230001" } },    },    {      agentId: "mia",      match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230002" } },    },  ],  channels: {    whatsapp: {      dmPolicy: "allowlist",      allowFrom: ["+15551230001", "+15551230002"],    },  },}

    DM erişim denetimi (eşleştirme/izin listesi), agent başına değil WhatsApp hesabı başına geneldir. Paylaşılan gruplar için grubu tek bir agent'a bağlayın veya Yayın gruplarını kullanın.

    Yönlendirme kuralları

    Bağlamalar deterministiktir ve en özel eşleşme kazanır. Tam katman sıralaması (tam eş, üst eş, eş joker karakteri, lonca+roller, lonca, ekip, hesap, kanal, varsayılan agent) için Kanal yönlendirme bölümüne bakın. Burada özellikle belirtilmesi gereken birkaç kural:

    • Aynı katmanda birden fazla bağlama eşleşirse yapılandırma sırasındaki ilk bağlama kazanır.
    • Bir bağlama birden fazla eşleşme alanı ayarlarsa (örneğin peer + guildId), belirtilen tüm alanlar eşleşmelidir (AND semantiği).
    • accountId değerini atlayan bir bağlama, tüm hesaplarla değil yalnızca varsayılan hesapla eşleşir. Kanal genelinde geri dönüş için accountId: "*", tek bir hesap için accountId: "<name>" kullanın. Aynı bağlamayı açık bir hesap kimliğiyle yeniden eklemek, mevcut yalnızca kanal bağlamasını çoğaltmak yerine yükseltir.

    Birden fazla hesap / telefon numarası

    Birden fazla hesabı destekleyen kanallar (ör. WhatsApp), her oturum açma işlemini tanımlamak için accountId kullanır. Her accountId kendi agent'ına yönlendirilir; böylece tek bir sunucu, oturumları karıştırmadan birden fazla telefon numarasını barındırabilir.

    accountId belirtilmediğinde kullanılacak hesabı seçmek için channels.<channel>.defaultAccount değerini ayarlayın. Ayarlanmadığında OpenClaw, varsa default değerini; yoksa yapılandırılan ilk hesap kimliğini (sıralanmış olarak) kullanır.

    Birden fazla hesabı destekleyen kanallar: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.

    Kavramlar

    • agentId: tek bir "beyin" (çalışma alanı, aracı başına kimlik doğrulama, aracı başına oturum deposu).
    • accountId: tek bir kanal hesabı örneği (ör. WhatsApp hesabı personal ile biz).
    • binding: gelen mesajları (channel, accountId, peer) ve isteğe bağlı olarak guild/ekip kimliklerine göre bir agentId öğesine yönlendirir.
    • Doğrudan sohbetler agent:<agentId>:<mainKey> altında birleştirilir (aracı başına "ana"; bkz. session.mainKey).

    Platform örnekleri

    Aracı başına Discord botları

    Her Discord bot hesabı benzersiz bir accountId ile eşleşir. Her hesabı bir aracıya bağlayın ve izin listelerini bot başına ayrı tutun.

    json5
    {  agents: {    list: [      { id: "main", workspace: "~/.openclaw/workspace-main" },      { id: "coding", workspace: "~/.openclaw/workspace-coding" },    ],  },  bindings: [    { agentId: "main", match: { channel: "discord", accountId: "default" } },    { agentId: "coding", match: { channel: "discord", accountId: "coding" } },  ],  channels: {    discord: {      groupPolicy: "allowlist",      accounts: {        default: {          token: "DISCORD_BOT_TOKEN_MAIN",          guilds: {            "123456789012345678": {              channels: {                "222222222222222222": { allow: true, requireMention: false },              },            },          },        },        coding: {          token: "DISCORD_BOT_TOKEN_CODING",          guilds: {            "123456789012345678": {              channels: {                "333333333333333333": { allow: true, requireMention: false },              },            },          },        },      },    },  },}
    • Her botu guild'e davet edin ve Message Content Intent seçeneğini etkinleştirin.
    • Tokenlar channels.discord.accounts.<id>.token içinde bulunur (varsayılan hesap DISCORD_BOT_TOKEN kullanabilir).
    Aracı başına Telegram botları
    json5
    {  agents: {    list: [      { id: "main", workspace: "~/.openclaw/workspace-main" },      { id: "alerts", workspace: "~/.openclaw/workspace-alerts" },    ],  },  bindings: [    { agentId: "main", match: { channel: "telegram", accountId: "default" } },    { agentId: "alerts", match: { channel: "telegram", accountId: "alerts" } },  ],  channels: {    telegram: {      accounts: {        default: {          botToken: "123456:ABC...",          dmPolicy: "pairing",        },        alerts: {          botToken: "987654:XYZ...",          dmPolicy: "allowlist",          allowFrom: ["tg:123456789"],        },      },    },  },}
    • BotFather ile her aracı için bir bot oluşturun ve her tokenı kopyalayın.
    • Tokenlar channels.telegram.accounts.<id>.botToken içinde bulunur (varsayılan hesap TELEGRAM_BOT_TOKEN kullanabilir).
    • Aynı Telegram grubunda birden fazla bot için her botu davet edin ve yanıtlaması gereken bottan @bahsedin.
    • Her grup botu için BotFather Privacy Mode'u devre dışı bırakın (/setprivacy -> Disable), ardından Telegram'ın ayarı uygulaması için botu kaldırıp yeniden ekleyin.
    • Gruplara channels.telegram.groups ile izin verin veya yalnızca güvenilen grup dağıtımlarında groupPolicy: "open" kullanın.
    • Gönderen kullanıcı kimliklerini groupAllowFrom içine yerleştirin. Grup ve süper grup kimlikleri groupAllowFrom içine değil, channels.telegram.groups içine konulmalıdır.
    • Her botun kendi aracısına yönlendirilmesi için accountId ile bağlayın.
    Aracı başına WhatsApp numaraları

    Gateway'i başlatmadan önce her hesabı bağlayın:

    bash
    openclaw channels login --channel whatsapp --account personalopenclaw channels login --channel whatsapp --account biz

    ~/.openclaw/openclaw.json (JSON5):

    js
    {  agents: {    list: [      {        id: "home",        default: true,        name: "Home",        workspace: "~/.openclaw/workspace-home",        agentDir: "~/.openclaw/agents/home/agent",      },      {        id: "work",        name: "Work",        workspace: "~/.openclaw/workspace-work",        agentDir: "~/.openclaw/agents/work/agent",      },    ],  },   // Belirlenimci yönlendirme: ilk eşleşme kazanır (önce en özgül olan).  bindings: [    { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },    { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },     // İsteğe bağlı eş düzeyi geçersiz kılma (örnek: belirli bir grubu iş aracısına gönderin).    {      agentId: "work",      match: {        channel: "whatsapp",        accountId: "personal",        peer: { kind: "group", id: "1203630...@g.us" },      },    },  ],   // Varsayılan olarak kapalıdır: aracılar arası mesajlaşma açıkça etkinleştirilmeli ve izin listesine alınmalıdır.  tools: {    agentToAgent: {      enabled: false,      allow: ["home", "work"],    },  },   channels: {    whatsapp: {      accounts: {        personal: {          // İsteğe bağlı geçersiz kılma. Varsayılan: ~/.openclaw/credentials/whatsapp/personal          // authDir: "~/.openclaw/credentials/whatsapp/personal",        },        biz: {          // İsteğe bağlı geçersiz kılma. Varsayılan: ~/.openclaw/credentials/whatsapp/biz          // authDir: "~/.openclaw/credentials/whatsapp/biz",        },      },    },  },}

    Yaygın kalıplar

    Günlük WhatsApp + Telegram'da derin çalışma

    Kanala göre ayırın: WhatsApp'ı hızlı bir gündelik aracıya, Telegram'ı ise bir Opus aracısına yönlendirin.

    json5
    {  agents: {    list: [      {        id: "chat",        name: "Everyday",        workspace: "~/.openclaw/workspace-chat",        model: "anthropic/claude-sonnet-4-6",      },      {        id: "opus",        name: "Deep Work",        workspace: "~/.openclaw/workspace-opus",        model: "anthropic/claude-opus-4-6",      },    ],  },  bindings: [    { agentId: "chat", match: { channel: "whatsapp", accountId: "*" } },    { agentId: "opus", match: { channel: "telegram", accountId: "*" } },  ],}

    Bu örneklerde accountId: "*" kullanıldığından daha sonra hesap ekleseniz bile bağlamalar çalışmayı sürdürür. Geri kalanını sohbet aracısında tutarken tek bir DM/grubu Opus'a yönlendirmek için o eş düzeyi adına bir match.peer bağlaması ekleyin; eş düzeyi eşleşmeleri her zaman kanal genelindeki kurallardan önce gelir.

    Aynı kanal, bir eş düzeyi Opus'a

    WhatsApp'ı hızlı aracıda tutun ancak bir DM'yi Opus'a yönlendirin:

    json5
    {  agents: {    list: [      {        id: "chat",        name: "Everyday",        workspace: "~/.openclaw/workspace-chat",        model: "anthropic/claude-sonnet-4-6",      },      {        id: "opus",        name: "Deep Work",        workspace: "~/.openclaw/workspace-opus",        model: "anthropic/claude-opus-4-6",      },    ],  },  bindings: [    {      agentId: "opus",      match: { channel: "whatsapp", accountId: "*", peer: { kind: "direct", id: "+15551234567" } },    },    { agentId: "chat", match: { channel: "whatsapp", accountId: "*" } },  ],}

    Eş düzeyi bağlamaları her zaman önceliklidir; bu nedenle bunları kanal genelindeki kuralın üzerinde tutun.

    Bir WhatsApp grubuna bağlı aile aracısı

    Özel bir aile aracısını, @bahsetme koşulu ve daha sıkı bir araç politikasıyla tek bir WhatsApp grubuna bağlayın:

    json5
    {  agents: {    list: [      {        id: "family",        name: "Family",        workspace: "~/.openclaw/workspace-family",        identity: { name: "Family Bot" },        groupChat: {          mentionPatterns: ["@family", "@familybot", "@Family Bot"],        },        sandbox: {          mode: "all",          scope: "agent",        },        tools: {          allow: [            "exec",            "read",            "sessions_list",            "sessions_history",            "sessions_send",            "sessions_spawn",            "session_status",          ],          deny: ["write", "edit", "apply_patch", "browser", "canvas", "nodes", "cron"],        },      },    ],  },  bindings: [    {      agentId: "family",      match: {        channel: "whatsapp",        peer: { kind: "group", id: "120363999999999999@g.us" },      },    },  ],}

    Araç izin/ret listeleri beceriler değil, araçlardır. Bir becerinin ikili dosya çalıştırması gerekiyorsa exec öğesine izin verildiğinden ve ikili dosyanın sandbox içinde bulunduğundan emin olun. Daha sıkı koşullandırma için agents.entries.*.groupChat.mentionPatterns değerini ayarlayın ve kanal için grup izin listelerini etkin tutun.

    Aracı başına sandbox ve araç yapılandırması

    Her aracının kendi sandbox ve araç kısıtlamaları olabilir:

    js
    {  agents: {    list: [      {        id: "personal",        workspace: "~/.openclaw/workspace-personal",        sandbox: {          mode: "off",  // Kişisel aracı için sandbox yok        },        // Araç kısıtlaması yoktur; tüm araçlar kullanılabilir      },      {        id: "family",        workspace: "~/.openclaw/workspace-family",        sandbox: {          mode: "all",     // Her zaman sandbox içinde          scope: "agent",  // Aracı başına bir container          docker: {            // Container oluşturulduktan sonra isteğe bağlı tek seferlik kurulum            setupCommand: "apt-get update && apt-get install -y git curl",          },        },        tools: {          allow: ["read"],                    // Yalnızca okuma aracı          deny: ["exec", "write", "edit", "apply_patch"],    // Diğerlerini reddet        },      },    ],  },}

    Bu yapı şunları sağlar:

    • Güvenlik yalıtımı: güvenilmeyen aracılar için araçları kısıtlayın.
    • Kaynak denetimi: bazı aracıları sandbox içinde çalıştırırken diğerlerini ana sistemde tutun.
    • Esnek politikalar: aracı başına farklı izinler.

    Ayrıntılı örnekler için Çok aracılı sandbox ve araçlar sayfasına bakın.

    İlgili

    • ACP ajanları — harici kodlama sistemlerini çalıştırma
    • Kanal yönlendirme — iletilerin ajanlara nasıl yönlendirildiği
    • Varlık — ajan varlığı ve kullanılabilirliği
    • Oturum — oturum yalıtımı ve yönlendirme
    • Alt ajanlar — arka planda ajan çalıştırmaları başlatma
    Was this useful?
    On this page

    On this page