agentDir) и хранящейся в SQLite историей сеансов, а также несколькими учётными записями каналов (например, двумя номерами WhatsApp). Входящие сообщения направляются нужному агенту посредством привязок.
Агент — это полная область отдельной персоны: файлы рабочей области, профили аутентификации, реестр моделей и хранилище сеансов. Привязка сопоставляет учётную запись канала (рабочую область Slack, номер WhatsApp и т. д.) с одним из этих агентов.
Что представляет собой один агент
У каждого агента есть собственные:- Рабочая область: файлы,
AGENTS.md/SOUL.md/USER.md, локальные заметки, правила персоны. - Каталог состояния (
agentDir): профили аутентификации, реестр моделей, конфигурация отдельного агента. - Хранилище сеансов: история чатов и состояние маршрутизации в
~/.openclaw/agents/<agentId>/agent/openclaw-agent.sqlite.
sessions_history — более безопасный способ обращения к данным из других сеансов: он возвращает ограниченное и отредактированное представление, а не необработанную выгрузку стенограммы. Он удаляет сигнатуры блоков рассуждений, подробности содержимого результатов инструментов, служебную структуру <relevant-memories>, XML-теги вызовов инструментов (<tool_call>, <function_call>, а также их формы множественного числа и пониженной версии) и XML вызовов инструментов MiniMax, после чего обрезает вывод и ограничивает его размер в байтах.~/.openclaw/skills, после чего фильтруются по действующему списку разрешённых Skills агента. Используйте agents.defaults.skills для общей базовой конфигурации и agents.list[].skills для замены на уровне отдельного агента (явно заданные элементы заменяют значения по умолчанию, а не объединяются с ними). См. Skills: для отдельных агентов и общие и Skills: списки разрешений агентов.
Хранилище, принадлежащее плагину, подчиняется конфигурации этого плагина; добавление второго агента
не приводит к автоматическому разделению всех глобальных хранилищ плагинов. Например, настройте
хранилища Memory Wiki для отдельных агентов,
если персоны не должны совместно использовать скомпилированные знания вики.
Примечание о рабочей области: рабочая область каждого агента является рабочим каталогом по умолчанию, а не строгой песочницей. Относительные пути разрешаются внутри рабочей области, однако абсолютные пути могут обращаться к другим расположениям на узле, если песочница не включена. См. Песочница.
Пути
Режим одного агента (по умолчанию)
Если ничего не настраивать, OpenClaw запускает одного агента:agentIdпо умолчанию имеет значениеmain.- Ключи сеансов имеют вид
agent:main:<mainKey>(значениеmainKeyпо умолчанию —main). - Рабочая область по умолчанию —
~/.openclaw/workspace(илиworkspace-<profile>, еслиOPENCLAW_PROFILEимеет значение, отличное отdefault). - Каталог состояния по умолчанию —
~/.openclaw/agents/main/agent.
Вспомогательная команда для агентов
Добавьте нового изолированного агента:--workspace <dir>, --model <id>, --agent-dir <dir>, --bind <channel[:accountId]> (можно указывать несколько раз), --non-interactive (требует --workspace).
Добавьте bindings для маршрутизации входящих сообщений (мастер предложит сделать это за вас), затем проверьте:
Быстрый старт
1
Создайте рабочую область для каждого агента
SOUL.md, AGENTS.md и необязательным USER.md, а также выделенный agentDir и хранилище сеансов в ~/.openclaw/agents/<agentId>.2
Создайте учётные записи каналов
Создайте по одной учётной записи для каждого агента в предпочитаемых каналах:См. руководства по каналам: Discord, Telegram, WhatsApp.
- Discord: один бот для каждого агента; включите Message Content Intent и скопируйте каждый токен.
- Telegram: создайте по одному боту для каждого агента через BotFather и скопируйте каждый токен.
- WhatsApp: привяжите отдельный номер телефона к каждой учётной записи.
3
Добавьте агентов, учётные записи и привязки
Добавьте агентов в
agents.list, учётные записи каналов — в channels.<channel>.accounts, а затем свяжите их с помощью bindings (примеры приведены ниже).4
Перезапустите и проверьте
Несколько агентов, несколько персон
Каждый настроенныйagentId образует отдельную границу персоны для основного состояния агента:
- Разные учётные записи для каждого канала (по
accountId). - Разные личности (задаются для каждого агента в
AGENTS.md/SOUL.md). - Раздельные данные аутентификации и сеансы; межагентный доступ включается только посредством явно заданных функций или конфигурации плагина.
Хранилища Memory Wiki для отдельных агентов
По умолчанию Memory Wiki использует одно глобальное хранилище. Чтобы отделить скомпилированные знания агента поддержки от знаний маркетингового агента, задайте дляplugins.entries.memory-wiki.config.vault.scope значение agent:
~/.openclaw/wiki/support и
~/.openclaw/wiki/marketing. При наличии нескольких настроенных агентов операции CLI и Gateway,
относящиеся к отдельному агенту, требуют явно указать агента. Подробности о
фильтрации мостов, миграции и границах доверия см. в разделе
Хранилища Memory Wiki для отдельных агентов.
Межагентный поиск в памяти QMD
Чтобы один агент мог искать по стенограммам сеансов QMD другого агента, добавьте дополнительные коллекции вagents.list[].memorySearch.qmd.extraCollections. Используйте agents.defaults.memorySearch.qmd.extraCollections, если все агенты должны совместно использовать одинаковые коллекции.
name остаётся явно заданным, если путь находится за пределами рабочей области агента. Пути внутри рабочей области сохраняют область отдельного агента, поэтому у каждого агента остаётся собственный набор поиска по стенограммам.
Один номер WhatsApp, несколько людей (разделение личных сообщений)
Направляйте личные сообщения WhatsApp от разных отправителей разным агентам в рамках одной учётной записи WhatsApp, сопоставляя номер отправителя в формате E.164 (+15551234567) с peer.kind: "direct". Ответы по-прежнему отправляются с одного и того же номера WhatsApp — отдельного идентификатора отправителя для каждого агента нет.
По умолчанию личные чаты сводятся к ключу основного сеанса агента, поэтому для настоящей изоляции каждому человеку требуется отдельный агент.
Правила маршрутизации
Привязки детерминированы: побеждает наиболее конкретная. Полный порядок уровней (точный собеседник, родительский собеседник, шаблон собеседника, сервер+роли, сервер, команда, учётная запись, канал, агент по умолчанию) приведён в разделе Маршрутизация каналов. Здесь стоит отдельно отметить несколько правил:- Если на одном уровне совпадают несколько привязок, побеждает первая в порядке конфигурации.
- Если в привязке задано несколько полей сопоставления (например,
peer+guildId), должны совпасть все указанные поля (семантикаAND). - Привязка без
accountIdсоответствует только учётной записи по умолчанию, а не всем учётным записям. ИспользуйтеaccountId: "*"как резервное правило для всего канала илиaccountId: "<name>"для одной учётной записи. Повторное добавление той же привязки с явным идентификатором учётной записи обновляет существующую привязку только к каналу, а не создаёт её дубликат.
Несколько учётных записей / телефонных номеров
Каналы, поддерживающие несколько учётных записей (например, WhatsApp), используютaccountId для идентификации каждого входа. Каждый accountId направляется своему агенту, поэтому один сервер может обслуживать несколько телефонных номеров без смешивания сеансов.
Задайте channels.<channel>.defaultAccount, чтобы выбрать учётную запись, используемую, когда accountId не указано. Если значение не задано, OpenClaw использует default, если оно присутствует, а иначе — идентификатор первой настроенной учётной записи (после сортировки).
Каналы с поддержкой нескольких учётных записей: discord, feishu, googlechat, imessage, irc, line, mattermost, matrix, nextcloud-talk, nostr, signal, slack, telegram, whatsapp, zalo, zalouser.
Основные понятия
agentId: один «мозг» (рабочее пространство, отдельная аутентификация и отдельное хранилище сеансов для каждого агента).accountId: один экземпляр учётной записи канала (например, учётная запись WhatsApppersonalиbiz).binding: направляет входящие сообщения агентуagentIdпо(channel, accountId, peer)и, при необходимости, по идентификаторам сервера или команды.- Личные чаты объединяются в
agent:<agentId>:<mainKey>(основной сеанс агента; см.session.mainKey).
Примеры для платформ
Отдельный бот Discord для каждого агента
Отдельный бот Discord для каждого агента
Каждая учётная запись бота Discord сопоставляется с уникальным
accountId. Привяжите каждую учётную запись к агенту и настройте отдельные списки разрешённых пользователей для каждого бота.- Пригласите каждого бота на сервер и включите 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 для каждого группового бота (
/setprivacy-> Disable), затем удалите и повторно добавьте бота, чтобы 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: "*", поэтому привязки продолжат работать, если позднее вы добавите учётные записи. Чтобы направить только один личный чат или группу агенту Opus, оставив остальные у агента чата, добавьте привязку match.peer для этого собеседника — совпадения по собеседнику всегда имеют приоритет над правилами для всего канала.Настройка песочницы и инструментов для каждого агента
Для каждого агента можно задать собственные ограничения песочницы и инструментов:setupCommand находится в sandbox.docker и выполняется один раз при создании контейнера. Переопределения sandbox.docker.* для отдельных агентов игнорируются, если вычисленная область действия равна "shared".- Изоляцию безопасности: ограничивайте инструменты для недоверенных агентов.
- Управление ресурсами: запускайте отдельных агентов в песочнице, оставляя остальных на хосте.
- Гибкие политики: задавайте разные разрешения для каждого агента.
tools.elevated имеет как глобальное ограничение (tools.elevated.enabled/allowFrom), так и ограничение для каждого агента (agents.list[].tools.elevated.enabled/allowFrom). Ограничение агента может лишь дополнительно ужесточить глобальное: чтобы разрешить выполнение команд с повышенными привилегиями, оба ограничения должны допускать отправителя. Для выбора агента в группе используйте agents.list[].groupChat.mentionPatterns, чтобы упоминания @ однозначно сопоставлялись с нужным агентом.Связанные материалы
- Агенты ACP — запуск внешних сред выполнения для программирования
- Маршрутизация каналов — как сообщения направляются агентам
- Присутствие — присутствие и доступность агента
- Сеанс — изоляция и маршрутизация сеансов
- Субагенты — запуск фоновых выполнений агентов