Skip to main content
Запускайте несколько изолированных агентов в одном процессе Gateway, каждый со своей рабочей областью, каталогом состояния (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, после чего обрезает вывод и ограничивает его размер в байтах.
Никогда не используйте agentDir повторно для разных агентов — это приводит к конфликтам состояния аутентификации и сеансов. Если срок действия локальных учётных данных OAuth дополнительного агента истёк или их обновление завершилось сбоем, OpenClaw обращается к учётным данным агента по умолчанию/основного агента с тем же идентификатором профиля и использует наиболее свежий токен, не копируя токен обновления в хранилище дополнительного агента. Если вам нужна полностью независимая учётная запись OAuth, войдите в неё от имени этого агента. При ручном копировании учётных данных копируйте только переносимые статические профили api_key или token — данные обновления OAuth по умолчанию непереносимы (copyToAgents позволяет явно включить такую возможность для профиля).
Skills загружаются из рабочей области каждого агента и общих корневых каталогов, таких как ~/.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: один бот для каждого агента; включите Message Content Intent и скопируйте каждый токен.
  • Telegram: создайте по одному боту для каждого агента через BotFather и скопируйте каждый токен.
  • WhatsApp: привяжите отдельный номер телефона к каждой учётной записи.
См. руководства по каналам: Discord, Telegram, WhatsApp.
3

Добавьте агентов, учётные записи и привязки

Добавьте агентов в agents.list, учётные записи каналов — в channels.<channel>.accounts, а затем свяжите их с помощью bindings (примеры приведены ниже).
4

Перезапустите и проверьте

Несколько агентов, несколько персон

Каждый настроенный agentId образует отдельную границу персоны для основного состояния агента:
  • Разные учётные записи для каждого канала (по accountId).
  • Разные личности (задаются для каждого агента в AGENTS.md/SOUL.md).
  • Раздельные данные аутентификации и сеансы; межагентный доступ включается только посредством явно заданных функций или конфигурации плагина.
Это позволяет нескольким людям совместно использовать один Gateway, сохраняя основное состояние агентов раздельным.

Хранилища Memory Wiki для отдельных агентов

По умолчанию Memory Wiki использует одно глобальное хранилище. Чтобы отделить скомпилированные знания агента поддержки от знаний маркетингового агента, задайте для plugins.entries.memory-wiki.config.vault.scope значение agent:
Настроенный путь является родительским каталогом. OpenClaw добавляет к нему нормализованный идентификатор агента, формируя пути наподобие ~/.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 — отдельного идентификатора отправителя для каждого агента нет.
По умолчанию личные чаты сводятся к ключу основного сеанса агента, поэтому для настоящей изоляции каждому человеку требуется отдельный агент.
Управление доступом к личным сообщениям (сопряжение/список разрешений) действует глобально для всей учётной записи 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: один экземпляр учётной записи канала (например, учётная запись WhatsApp personal и biz).
  • binding: направляет входящие сообщения агенту agentId по (channel, accountId, peer) и, при необходимости, по идентификаторам сервера или команды.
  • Личные чаты объединяются в agent:<agentId>:<mainKey> (основной сеанс агента; см. session.mainKey).

Примеры для платформ

Каждая учётная запись бота Discord сопоставляется с уникальным accountId. Привяжите каждую учётную запись к агенту и настройте отдельные списки разрешённых пользователей для каждого бота.
  • Пригласите каждого бота на сервер и включите Message Content Intent.
  • Токены хранятся в channels.discord.accounts.<id>.token (учётная запись по умолчанию может использовать DISCORD_BOT_TOKEN).
  • Создайте в 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, чтобы каждый бот направлял сообщения своему агенту.
Свяжите каждую учётную запись перед запуском Gateway:
~/.openclaw/openclaw.json (JSON5):

Распространённые схемы

Разделите по каналам: направляйте 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, чтобы упоминания @ однозначно сопоставлялись с нужным агентом.
Подробные примеры см. в разделе Песочница и инструменты для нескольких агентов.

Связанные материалы