Perutean Multi-Agen
Tujuan: beberapa agen yang terisolasi (ruang kerja +agentDir + sesi terpisah), ditambah beberapa akun channel (misalnya dua WhatsApp) dalam satu Gateway yang berjalan. Lalu lintas masuk dirutekan ke agen melalui binding.
Apa itu “satu agen”?
Sebuah agen adalah otak yang sepenuhnya tercakup dengan miliknya sendiri:- Ruang kerja (file, AGENTS.md/SOUL.md/USER.md, catatan lokal, aturan persona).
- Direktori status (
agentDir) untuk profil autentikasi, registri model, dan konfigurasi per agen. - Penyimpanan sesi (riwayat chat + status perutean) di bawah
~/.openclaw/agents/<agentId>/sessions.
sessions_history juga merupakan jalur recall lintas sesi yang lebih aman di sini: ini mengembalikan
tampilan yang dibatasi dan disanitasi, bukan dump transkrip mentah. Recall asisten menghapus
tag thinking, scaffolding <relevant-memories>, payload XML pemanggilan alat teks biasa
(termasuk <tool_call>...</tool_call>,
<function_call>...</function_call>, <tool_calls>...</tool_calls>,
<function_calls>...</function_calls>, dan blok pemanggilan alat yang dipotong),
scaffolding pemanggilan alat yang diturunkan, token kontrol model ASCII/lebar penuh yang bocor,
dan XML pemanggilan alat MiniMax yang tidak valid sebelum redaksi/pemotongan.
Kredensial agen utama tidak dibagikan secara otomatis. Jangan pernah menggunakan kembali agentDir
antar agen (ini menyebabkan benturan autentikasi/sesi). Jika Anda ingin berbagi kredensial,
salin auth-profiles.json ke agentDir agen lain.
Skills dimuat dari ruang kerja setiap agen ditambah root bersama seperti
~/.openclaw/skills, lalu difilter oleh allowlist skill agen efektif saat
dikonfigurasi. Gunakan agents.defaults.skills untuk baseline bersama dan
agents.list[].skills untuk penggantian per agen. Lihat
Skills: per-agent vs shared dan
Skills: agent skill allowlists.
Gateway dapat menampung satu agen (default) atau banyak agen berdampingan.
Catatan ruang kerja: ruang kerja setiap agen adalah cwd default, bukan
sandbox kaku. Path relatif diselesaikan di dalam ruang kerja, tetapi path absolut dapat
menjangkau lokasi host lain kecuali sandboxing diaktifkan. Lihat
Sandboxing.
Path (peta singkat)
- Konfigurasi:
~/.openclaw/openclaw.json(atauOPENCLAW_CONFIG_PATH) - Direktori status:
~/.openclaw(atauOPENCLAW_STATE_DIR) - Ruang kerja:
~/.openclaw/workspace(atau~/.openclaw/workspace-<agentId>) - Direktori agen:
~/.openclaw/agents/<agentId>/agent(atauagents.list[].agentDir) - Sesi:
~/.openclaw/agents/<agentId>/sessions
Mode satu agen (default)
Jika Anda tidak melakukan apa pun, OpenClaw menjalankan satu agen:agentIdsecara default adalahmain.- Sesi diberi kunci sebagai
agent:main:<mainKey>. - Ruang kerja secara default adalah
~/.openclaw/workspace(atau~/.openclaw/workspace-<profile>saatOPENCLAW_PROFILEdisetel). - Status secara default adalah
~/.openclaw/agents/main/agent.
Helper agen
Gunakan wizard agen untuk menambahkan agen terisolasi baru:bindings (atau biarkan wizard melakukannya) untuk merutekan pesan masuk.
Verifikasi dengan:
Mulai cepat
Buat setiap ruang kerja agen
Gunakan wizard atau buat ruang kerja secara manual:Setiap agen mendapatkan ruang kerjanya sendiri dengan
SOUL.md, AGENTS.md, dan USER.md opsional, ditambah agentDir khusus dan penyimpanan sesi di bawah ~/.openclaw/agents/<agentId>.Buat akun channel
Tambahkan agen, akun, dan binding
Tambahkan agen di bawah
agents.list, akun channel di bawah channels.<channel>.accounts, dan hubungkan keduanya dengan bindings (contoh di bawah).Beberapa agen = beberapa orang, beberapa kepribadian
Dengan beberapa agen, setiapagentId menjadi persona yang sepenuhnya terisolasi:
- Nomor telepon/akun berbeda (per channel
accountId). - Kepribadian berbeda (melalui file ruang kerja per agen seperti
AGENTS.mddanSOUL.md). - Autentikasi + sesi terpisah (tidak ada cross-talk kecuali diaktifkan secara eksplisit).
Pencarian memori QMD lintas agen
Jika satu agen harus mencari transkrip sesi QMD agen lain, tambahkan koleksi tambahan di bawahagents.list[].memorySearch.qmd.extraCollections.
Gunakan agents.defaults.memorySearch.qmd.extraCollections hanya jika setiap agen
harus mewarisi koleksi transkrip bersama yang sama.
Satu nomor WhatsApp, beberapa orang (pemisahan DM)
Anda dapat merutekan DM WhatsApp yang berbeda ke agen yang berbeda sambil tetap menggunakan satu akun WhatsApp. Cocokkan pada E.164 pengirim (seperti+15551234567) dengan peer.kind: "direct". Balasan tetap berasal dari nomor WhatsApp yang sama (tidak ada identitas pengirim per agen).
Detail penting: chat langsung digabungkan ke kunci sesi utama agen, jadi isolasi sejati memerlukan satu agen per orang.
Contoh:
- Kontrol akses DM bersifat global per akun WhatsApp (pairing/allowlist), bukan per agen.
- Untuk grup bersama, bind grup ke satu agen atau gunakan Broadcast groups.
Aturan perutean (bagaimana pesan memilih agen)
Binding bersifat deterministik dan yang paling spesifik menang:- kecocokan
peer(id DM/grup/channel yang persis) - kecocokan
parentPeer(pewarisan thread) guildId + roles(perutean peran Discord)guildId(Discord)teamId(Slack)- kecocokan
accountIduntuk sebuah channel - kecocokan tingkat channel (
accountId: "*") - fallback ke agen default (
agents.list[].default, jika tidak entri daftar pertama, default:main)
peer + guildId), semua field yang ditentukan wajib cocok (semantik AND).
Detail penting cakupan akun:
- Binding yang menghilangkan
accountIdcocok dengan akun default saja. - Gunakan
accountId: "*"untuk fallback tingkat channel di semua akun. - Jika nanti Anda menambahkan binding yang sama untuk agen yang sama dengan id akun eksplisit, OpenClaw meningkatkan binding khusus channel yang ada menjadi tercakup akun alih-alih menduplikasinya.
Beberapa akun / nomor telepon
Channel yang mendukung beberapa akun (misalnya WhatsApp) menggunakanaccountId untuk mengidentifikasi
setiap login. Setiap accountId dapat dirutekan ke agen yang berbeda, sehingga satu server dapat menampung
beberapa nomor telepon tanpa mencampur sesi.
Jika Anda menginginkan akun default tingkat channel saat accountId dihilangkan, setel
channels.<channel>.defaultAccount (opsional). Saat tidak disetel, OpenClaw akan fallback
ke default jika ada, atau ke id akun terkonfigurasi pertama (diurutkan).
Channel umum yang mendukung pola ini mencakup:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkbluebubbles,zalo,zalouser,nostr,feishu
Konsep
agentId: satu “otak” (ruang kerja, autentikasi per agen, penyimpanan sesi per agen).accountId: satu instans akun channel (misalnya akun WhatsApp"personal"vs"biz").binding: merutekan pesan masuk ke sebuahagentIdberdasarkan(channel, accountId, peer)dan opsional id guild/team.- Chat langsung digabungkan ke
agent:<agentId>:<mainKey>(mainper agen;session.mainKey).
Contoh platform
Bot Discord per agen
Setiap akun bot Discord dipetakan keaccountId unik. Bind setiap akun ke agen dan pertahankan allowlist per bot.
- Undang setiap bot ke guild dan aktifkan Message Content Intent.
- Token berada di
channels.discord.accounts.<id>.token(akun default dapat menggunakanDISCORD_BOT_TOKEN).
Bot Telegram per agen
- Buat satu bot per agen dengan BotFather dan salin setiap token.
- Token berada di
channels.telegram.accounts.<id>.botToken(akun default dapat menggunakanTELEGRAM_BOT_TOKEN).
Nomor WhatsApp per agen
Tautkan setiap akun sebelum memulai gateway:~/.openclaw/openclaw.json (JSON5):
Contoh: chat harian WhatsApp + deep work Telegram
Pisahkan berdasarkan channel: rute WhatsApp ke agen harian yang cepat dan Telegram ke agen Opus.- Jika Anda memiliki beberapa akun untuk sebuah channel, tambahkan
accountIdke binding (misalnya{ channel: "whatsapp", accountId: "personal" }). - Untuk merutekan satu DM/grup ke Opus sambil mempertahankan sisanya di chat, tambahkan binding
match.peeruntuk peer tersebut; kecocokan peer selalu menang atas aturan tingkat channel.
Contoh: channel yang sama, satu peer ke Opus
Pertahankan WhatsApp pada agen cepat, tetapi rute satu DM ke Opus:Agen family yang di-bind ke grup WhatsApp
Bind agen family khusus ke satu grup WhatsApp, dengan gating mention dan kebijakan alat yang lebih ketat:- Daftar allow/deny alat adalah alat, bukan Skills. Jika sebuah skill perlu menjalankan
biner, pastikan
execdiizinkan dan biner tersebut ada di dalam sandbox. - Untuk gating yang lebih ketat, setel
agents.list[].groupChat.mentionPatternsdan tetap aktifkan allowlist grup untuk channel tersebut.
Konfigurasi Sandbox dan Alat Per Agen
Setiap agen dapat memiliki pembatasan sandbox dan alatnya sendiri:setupCommand berada di bawah sandbox.docker dan dijalankan sekali saat pembuatan kontainer.
Override per agen sandbox.docker.* diabaikan saat cakupan yang diselesaikan adalah "shared".
Manfaat:
- Isolasi keamanan: Batasi alat untuk agen yang tidak tepercaya
- Kontrol sumber daya: Sandbox agen tertentu sambil mempertahankan yang lain di host
- Kebijakan fleksibel: Izin berbeda per agen
tools.elevated bersifat global dan berbasis pengirim; ini tidak dapat dikonfigurasi per agen.
Jika Anda memerlukan batas per agen, gunakan agents.list[].tools untuk menolak exec.
Untuk penargetan grup, gunakan agents.list[].groupChat.mentionPatterns agar @mention dipetakan dengan jelas ke agen yang dituju.
Lihat Sandbox & Tools Multi-Agen untuk contoh detail.
Terkait
- Channel Routing — bagaimana pesan dirutekan ke agen
- Sub-Agents — menjalankan proses agen latar belakang
- ACP Agents — menjalankan harness coding eksternal
- Presence — presence dan ketersediaan agen
- Session — isolasi sesi dan perutean