agentDir) та історією сеансів — а також кілька облікових записів каналів (наприклад, два WhatsApp) в одному запущеному Gateway. Вхідні повідомлення спрямовуються до потрібного агента через прив’язки.
Агент тут означає повну область для окремої персони: файли робочого простору, профілі автентифікації, реєстр моделей і сховище сеансів. agentDir — це каталог стану на диску, який містить цю конфігурацію окремого агента за шляхом ~/.openclaw/agents/<agentId>/. Прив’язка зіставляє обліковий запис каналу (наприклад, робочий простір Slack або номер WhatsApp) з одним із цих агентів.
Що таке “один агент”?
Агент — це повністю ізольований мозок із власними:- Робочим простором (файли, AGENTS.md/SOUL.md/USER.md, локальні нотатки, правила персони).
- Каталогом стану (
agentDir) для профілів автентифікації, реєстру моделей і конфігурації окремого агента. - Сховищем сеансів (історія чату + стан маршрутизації) у
~/.openclaw/agents/<agentId>/sessions.
sessions_history тут також є безпечнішим шляхом пригадування між сеансами: він повертає обмежене, очищене подання, а не сирий дамп стенограми. Пригадування асистента вилучає теги мислення, каркас <relevant-memories>, XML-навантаження викликів інструментів у звичайному тексті (зокрема <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls>, <function_calls>...</function_calls> і обрізані блоки викликів інструментів), понижений каркас викликів інструментів, витеклі ASCII/повноширинні керівні токени моделі та некоректний XML викликів інструментів MiniMax перед редагуванням/обрізанням.~/.openclaw/skills, а потім фільтруються за ефективним списком дозволених Skills агента, якщо його налаштовано. Використовуйте agents.defaults.skills для спільної базової лінії та agents.list[].skills для заміни на рівні агента. Див. Skills: для окремого агента та спільні і Skills: списки дозволених Skills агента.
Gateway може розміщувати одного агента (за замовчуванням) або багатьох агентів поряд.
Примітка про робочий простір: робочий простір кожного агента є типовим cwd, а не жорсткою пісочницею. Відносні шляхи розв’язуються всередині робочого простору, але абсолютні шляхи можуть досягати інших розташувань хоста, якщо пісочницю не ввімкнено. Див. Пісочниця.
Шляхи (коротка мапа)
- Конфігурація:
~/.openclaw/openclaw.json(абоOPENCLAW_CONFIG_PATH) - Каталог стану:
~/.openclaw(абоOPENCLAW_STATE_DIR) - Робочий простір:
~/.openclaw/workspace(або~/.openclaw/workspace-<agentId>) - Каталог агента:
~/.openclaw/agents/<agentId>/agent(абоagents.list[].agentDir) - Сеанси:
~/.openclaw/agents/<agentId>/sessions
Режим одного агента (за замовчуванням)
Якщо ви нічого не робите, OpenClaw запускає одного агента:agentIdза замовчуванням має значенняmain.- Сеанси мають ключі у форматі
agent:main:<mainKey>. - Робочий простір за замовчуванням —
~/.openclaw/workspace(або~/.openclaw/workspace-<profile>, коли встановленоOPENCLAW_PROFILE). - Стан за замовчуванням —
~/.openclaw/agents/main/agent.
Помічник агента
Використайте майстер агентів, щоб додати нового ізольованого агента:bindings (або дозвольте майстру зробити це), щоб маршрутизувати вхідні повідомлення.
Перевірте за допомогою:
Швидкий старт
Створіть робочий простір кожного агента
Використайте майстер або створіть робочі простори вручну:Кожен агент отримує власний робочий простір із
SOUL.md, AGENTS.md і необов’язковим USER.md, а також виділений agentDir і сховище сеансів у ~/.openclaw/agents/<agentId>.Створіть облікові записи каналів
Створіть по одному обліковому запису на агента в бажаних каналах:Див. посібники каналів: Discord, Telegram, WhatsApp.
- Discord: один бот на агента, увімкніть Message Content Intent, скопіюйте кожен токен.
- Telegram: один бот на агента через BotFather, скопіюйте кожен токен.
- WhatsApp: прив’яжіть кожен номер телефону до окремого облікового запису.
Додайте агентів, облікові записи та прив’язки
Додайте агентів у
agents.list, облікові записи каналів у channels.<channel>.accounts і з’єднайте їх через bindings (приклади нижче).Кілька агентів = кілька людей, кілька особистостей
З кількома агентами коженagentId стає повністю ізольованою персоною:
- Різні номери телефонів/облікові записи (для кожного каналу
accountId). - Різні особистості (файли робочого простору окремого агента, як-от
AGENTS.mdіSOUL.md). - Окрема автентифікація + сеанси (без перетину, якщо його явно не ввімкнено).
Пошук QMD-пам’яті між агентами
Якщо один агент має шукати стенограми QMD-сеансів іншого агента, додайте додаткові колекції вagents.list[].memorySearch.qmd.extraCollections. Використовуйте agents.defaults.memorySearch.qmd.extraCollections лише тоді, коли кожен агент має успадковувати однакові спільні колекції стенограм.
Один номер WhatsApp, кілька людей (розділення DM)
Ви можете спрямовувати різні DM WhatsApp до різних агентів, залишаючись в одному обліковому записі WhatsApp. Зіставляйте за відправником E.164 (наприклад,+15551234567) із peer.kind: "direct". Відповіді все одно надходять із того самого номера WhatsApp (без окремої ідентичності відправника для кожного агента).
Прямі чати згортаються до основного ключа сеансу агента, тому справжня ізоляція потребує одного агента на людину.
- Контроль доступу DM є глобальним для облікового запису WhatsApp (спарювання/allowlist), а не окремим для агента.
- Для спільних груп прив’яжіть групу до одного агента або використайте Групи розсилки.
Правила маршрутизації (як повідомлення вибирають агента)
Прив’язки є детермінованими, і найспецифічніша перемагає:Розв’язання нічиїх і семантика AND
Розв’язання нічиїх і семантика AND
- Якщо кілька прив’язок збігаються на одному рівні, перемагає перша в порядку конфігурації.
- Якщо прив’язка задає кілька полів зіставлення (наприклад,
peer+guildId), потрібні всі зазначені поля (семантикаAND).
Деталі області облікового запису
Деталі області облікового запису
- Прив’язка, яка пропускає
accountId, зіставляється лише з обліковим записом за замовчуванням. Вона не зіставляється з усіма обліковими записами. - Використовуйте
accountId: "*"для резервного варіанта на весь канал для всіх облікових записів. - Використовуйте
accountId: "<name>", щоб зіставити один обліковий запис. - Якщо пізніше ви додасте ту саму прив’язку для того самого агента з явним id облікового запису, OpenClaw оновить наявну прив’язку лише для каналу до прив’язки з областю облікового запису замість її дублювання.
Кілька облікових записів / номерів телефонів
Канали, що підтримують кілька облікових записів (наприклад, WhatsApp), використовуютьaccountId для ідентифікації кожного входу. Кожен accountId можна спрямувати до іншого агента, тож один сервер може розміщувати кілька номерів телефонів без змішування сеансів.
Якщо вам потрібен обліковий запис за замовчуванням для всього каналу, коли accountId пропущено, установіть channels.<channel>.defaultAccount (необов’язково). Якщо не встановлено, OpenClaw повертається до default, якщо він присутній, інакше до першого налаштованого id облікового запису (після сортування).
Поширені канали, що підтримують цей шаблон, включають:
whatsapp,telegram,discord,slack,signal,imessageirc,line,googlechat,mattermost,matrix,nextcloud-talkzalo,zalouser,nostr,feishu
Концепції
agentId: один “мозок” (робочий простір, автентифікація окремого агента, сховище сеансів окремого агента).accountId: один екземпляр облікового запису каналу (наприклад, обліковий запис WhatsApp"personal"проти"biz").binding: спрямовує вхідні повідомлення доagentIdза(channel, accountId, peer)і необов’язково id гільдії/команди.- Прямі чати згортаються до
agent:<agentId>:<mainKey>(“основний” для окремого агента;session.mainKey).
Приклади платформ
Боти Discord для кожного агента
Боти Discord для кожного агента
Кожен обліковий запис бота Discord зіставляється з унікальним
accountId. Прив’яжіть кожен обліковий запис до агента та тримайте allowlist окремо для кожного бота.- Запросіть кожного бота на сервер і увімкніть Message Content Intent.
- Токени зберігаються в
channels.discord.accounts.<id>.token(обліковий запис за замовчуванням може використовуватиDISCORD_BOT_TOKEN).
Боти Telegram для кожного агента
Боти Telegram для кожного агента
- Створіть по одному боту для кожного агента через BotFather і скопіюйте кожен токен.
- Токени зберігаються в
channels.telegram.accounts.<id>.botToken(обліковий запис за замовчуванням може використовуватиTELEGRAM_BOT_TOKEN). - Для кількох ботів в одній групі Telegram запросіть кожного бота й згадайте того бота, який має відповісти.
- Вимкніть BotFather Privacy Mode для кожного групового бота, а потім додайте бота повторно, щоб Telegram застосував налаштування.
- Дозвольте групи за допомогою
channels.telegram.groupsабо використовуйтеgroupPolicy: "open"лише для довірених групових розгортань. - Додайте ідентифікатори користувачів-відправників у
groupAllowFrom. Ідентифікатори груп і супергруп належать доchannels.telegram.groups, а не доgroupAllowFrom. - Прив’язуйте за
accountId, щоб кожен бот маршрутизувався до власного агента.
Номери WhatsApp для кожного агента
Номери WhatsApp для кожного агента
Прив’яжіть кожен обліковий запис перед запуском gateway:
~/.openclaw/openclaw.json (JSON5):Поширені шаблони
- Щоденний WhatsApp + глибока робота в Telegram
- Той самий канал, один співрозмовник до Opus
- Сімейний агент, прив’язаний до групи WhatsApp
Розділіть за каналом: маршрутизуйте WhatsApp до швидкого повсякденного агента, а Telegram — до агента Opus.Примітки:
- У цих прикладах використовується
accountId: "*", щоб прив’язки продовжували працювати, якщо ви пізніше додасте облікові записи. - Щоб маршрутизувати один DM/групу до Opus, залишаючи решту в чаті, додайте прив’язку
match.peerдля цього співрозмовника; збіги за співрозмовником завжди мають пріоритет над правилами для всього каналу.
Налаштування пісочниці та інструментів для кожного агента
Кожен агент може мати власну пісочницю та обмеження інструментів:setupCommand розміщено в sandbox.docker і він виконується один раз під час створення контейнера. Перевизначення sandbox.docker.* для окремого агента ігноруються, коли визначена область дії — "shared".- Ізоляція безпеки: обмежуйте інструменти для недовірених агентів.
- Контроль ресурсів: запускайте окремих агентів у пісочниці, залишаючи інших на хості.
- Гнучкі політики: різні дозволи для кожного агента.
tools.elevated є глобальним і залежить від відправника; його не можна налаштувати для кожного агента окремо. Якщо вам потрібні межі для кожного агента, використовуйте agents.list[].tools, щоб заборонити exec. Для націлювання в групах використовуйте agents.list[].groupChat.mentionPatterns, щоб @згадки чітко відповідали потрібному агенту.Пов’язане
- Агенти ACP — запуск зовнішніх середовищ для кодування
- Маршрутизація каналів — як повідомлення маршрутизуються до агентів
- Присутність — присутність і доступність агента
- Сесія — ізоляція та маршрутизація сесій
- Субагенти — запуск фонових виконань агента