agentDir), dan riwayat sesi sendiri — plus beberapa akun channel (mis. dua WhatsApp) dalam satu Gateway yang berjalan. Pesan masuk dirutekan ke agen yang tepat melalui binding.
Sebuah agen di sini adalah cakupan penuh per-persona: file workspace, profil auth, registry model, dan penyimpanan sesi. agentDir adalah direktori state di disk yang menyimpan konfigurasi per-agen ini di ~/.openclaw/agents/<agentId>/. Sebuah binding memetakan akun channel (mis. workspace Slack atau nomor WhatsApp) ke salah satu agen tersebut.
Apa itu “satu agen”?
Sebuah agen adalah otak yang tercakup penuh dengan miliknya sendiri:- Workspace (file, AGENTS.md/SOUL.md/USER.md, catatan lokal, aturan persona).
- Direktori state (
agentDir) untuk profil auth, registry model, dan konfigurasi per-agen. - Penyimpanan sesi (riwayat chat + state perutean) di bawah
~/.openclaw/agents/<agentId>/sessions.
sessions_history juga merupakan jalur recall lintas-sesi yang lebih aman di sini: ia mengembalikan tampilan terbatas dan tersanitasi, bukan dump transkrip mentah. Recall asisten menghapus tag pemikiran, scaffolding <relevant-memories>, payload XML tool-call teks biasa (termasuk <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls>, dan blok tool-call yang terpotong), scaffolding tool-call yang diturunkan, token kontrol model ASCII/lebar-penuh yang bocor, dan XML tool-call MiniMax yang tidak valid sebelum redaksi/pemotongan.~/.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 menghosting satu agen (default) atau banyak agen berdampingan.
Catatan workspace: workspace setiap agen adalah cwd default, bukan sandbox keras. Path relatif di-resolve di dalam workspace, tetapi path absolut dapat menjangkau lokasi host lain kecuali sandboxing diaktifkan. Lihat Sandboxing.
Path (peta cepat)
- Konfigurasi:
~/.openclaw/openclaw.json(atauOPENCLAW_CONFIG_PATH) - Direktori state:
~/.openclaw(atauOPENCLAW_STATE_DIR) - Workspace:
~/.openclaw/workspace(atau~/.openclaw/workspace-<agentId>) - Direktori agen:
~/.openclaw/agents/<agentId>/agent(atauagents.list[].agentDir) - Sesi:
~/.openclaw/agents/<agentId>/sessions
Mode agen tunggal (default)
Jika Anda tidak melakukan apa pun, OpenClaw menjalankan satu agen:agentIddefault kemain.- Sesi diberi kunci sebagai
agent:main:<mainKey>. - Workspace default ke
~/.openclaw/workspace(atau~/.openclaw/workspace-<profile>saatOPENCLAW_PROFILEdisetel). - State default ke
~/.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
Create each agent workspace
Gunakan wizard atau buat workspace secara manual:Setiap agen mendapatkan workspace sendiri dengan
SOUL.md, AGENTS.md, dan USER.md opsional, plus agentDir khusus dan penyimpanan sesi di bawah ~/.openclaw/agents/<agentId>.Create channel accounts
Add agents, accounts, and bindings
Tambahkan agen di bawah
agents.list, akun channel di bawah channels.<channel>.accounts, dan hubungkan dengan bindings (contoh di bawah).Banyak agen = banyak orang, banyak kepribadian
Dengan banyak agen, setiapagentId menjadi persona yang sepenuhnya terisolasi:
- Nomor telepon/akun berbeda (per channel
accountId). - Kepribadian berbeda (file workspace per-agen seperti
AGENTS.mddanSOUL.md). - Auth + sesi terpisah (tidak ada saling bicara kecuali diaktifkan secara eksplisit).
Pencarian memori QMD lintas-agen
Jika satu agen harus mencari transkrip sesi QMD agen lain, tambahkan koleksi ekstra di bawahagents.list[].memorySearch.qmd.extraCollections. Gunakan agents.defaults.memorySearch.qmd.extraCollections hanya saat setiap agen harus mewarisi koleksi transkrip bersama yang sama.
Satu nomor WhatsApp, banyak orang (pemisahan DM)
Anda dapat merutekan DM WhatsApp yang berbeda ke agen yang berbeda sambil tetap menggunakan satu akun WhatsApp. Cocokkan pada pengirim E.164 (seperti+15551234567) dengan peer.kind: "direct". Balasan tetap datang dari nomor WhatsApp yang sama (tidak ada identitas pengirim per-agen).
Chat langsung diringkas ke kunci sesi utama agen, jadi isolasi sejati memerlukan satu agen per orang.
- Kontrol akses DM bersifat global per akun WhatsApp (pairing/allowlist), bukan per agen.
- Untuk grup bersama, bind grup ke satu agen atau gunakan Grup broadcast.
Aturan perutean (cara pesan memilih agen)
Binding bersifat deterministik dan yang paling spesifik menang:Tie-breaking and AND semantics
Tie-breaking and AND semantics
- Jika beberapa binding cocok dalam tingkat yang sama, yang pertama dalam urutan konfigurasi menang.
- Jika binding menetapkan beberapa field match (misalnya
peer+guildId), semua field yang ditentukan wajib ada (semantikAND).
Account-scope detail
Account-scope detail
- Binding yang menghilangkan
accountIdhanya cocok dengan akun default. Itu tidak cocok dengan semua akun. - Gunakan
accountId: "*"untuk fallback seluruh channel di semua akun. - Gunakan
accountId: "<name>"untuk mencocokkan satu akun. - Jika nanti Anda menambahkan binding yang sama untuk agen yang sama dengan id akun eksplisit, OpenClaw meningkatkan binding channel-only yang ada menjadi account-scoped alih-alih menduplikasinya.
Banyak akun / nomor telepon
Channel yang mendukung banyak akun (mis. WhatsApp) menggunakanaccountId untuk mengidentifikasi setiap login. Setiap accountId dapat dirutekan ke agen yang berbeda, sehingga satu server dapat menghosting banyak nomor telepon tanpa mencampur sesi.
Jika Anda menginginkan akun default seluruh channel saat accountId dihilangkan, setel channels.<channel>.defaultAccount (opsional). Saat tidak disetel, OpenClaw fallback ke default jika ada, jika tidak id akun terkonfigurasi pertama (diurutkan).
Channel umum yang mendukung pola ini meliputi:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkzalo,zalouser,nostr,feishu
Konsep
agentId: satu “otak” (workspace, auth per-agen, penyimpanan sesi per-agen).accountId: satu instance akun channel (mis. akun WhatsApp"personal"vs"biz").binding: merutekan pesan masuk keagentIdberdasarkan(channel, accountId, peer)dan opsional id guild/team.- Chat langsung diringkas ke
agent:<agentId>:<mainKey>(“utama” per-agen;session.mainKey).
Contoh platform
Discord bots per agent
Discord bots per agent
Setiap akun bot Discord dipetakan ke
accountId 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
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). - Untuk beberapa bot dalam grup Telegram yang sama, undang setiap bot dan sebut bot yang harus menjawab.
- Nonaktifkan Privacy Mode BotFather untuk setiap bot grup, lalu tambahkan ulang bot agar Telegram menerapkan pengaturan tersebut.
- Izinkan grup dengan
channels.telegram.groups, atau gunakangroupPolicy: "open"hanya untuk deployment grup tepercaya. - Letakkan ID pengguna pengirim di
groupAllowFrom. ID grup dan supergrup berada dichannels.telegram.groups, bukangroupAllowFrom. - Ikat berdasarkan
accountIdagar setiap bot diarahkan ke agennya sendiri.
Nomor WhatsApp per agen
Nomor WhatsApp per agen
Tautkan setiap akun sebelum memulai Gateway:
~/.openclaw/openclaw.json (JSON5):Pola umum
- WhatsApp harian + kerja mendalam Telegram
- Channel yang sama, satu peer ke Opus
- Agen keluarga yang diikat ke grup WhatsApp
Bagi berdasarkan channel: arahkan WhatsApp ke agen harian yang cepat dan Telegram ke agen Opus.Catatan:
- Contoh ini menggunakan
accountId: "*"sehingga binding tetap berfungsi jika Anda menambahkan akun nanti. - Untuk mengarahkan satu DM/grup ke Opus sambil menjaga sisanya tetap di chat, tambahkan binding
match.peeruntuk peer tersebut; kecocokan peer selalu menang atas aturan seluruh channel.
Konfigurasi sandbox dan tool per agen
Setiap agen dapat memiliki sandbox dan pembatasan tool sendiri:setupCommand berada di bawah sandbox.docker dan berjalan sekali saat pembuatan kontainer. Override sandbox.docker.* per agen diabaikan ketika cakupan yang diselesaikan adalah "shared".- Isolasi keamanan: batasi tool untuk agen yang tidak tepercaya.
- Kontrol sumber daya: sandbox agen tertentu sambil mempertahankan agen 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 batasan per agen, gunakan agents.list[].tools untuk menolak exec. Untuk penargetan grup, gunakan agents.list[].groupChat.mentionPatterns agar @mention dipetakan dengan rapi ke agen yang dimaksud.Terkait
- Agen ACP — menjalankan harness coding eksternal
- Routing channel — bagaimana pesan diarahkan ke agen
- Presence — presence dan ketersediaan agen
- Sesi — isolasi dan routing sesi
- Sub-agen — menjalankan agen latar belakang