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 guild/team.- Прямые чаты сворачиваются в
agent:<agentId>:<mainKey>(«основной» для отдельного агента;session.mainKey).
Примеры платформ
Боты Discord на каждого агента
Боты Discord на каждого агента
Каждая учетная запись бота Discord сопоставляется с уникальным
accountId. Привяжите каждую учетную запись к агенту и держите allowlist отдельно для каждого бота.- Пригласите каждого бота на сервер и включите Message Content Intent.
- Токены находятся в
channels.discord.accounts.<id>.token(учетная запись по умолчанию может использоватьDISCORD_BOT_TOKEN).
Telegram bots per agent
Telegram bots per agent
- Создайте по одному боту на агента через BotFather и скопируйте каждый токен.
- Токены находятся в
channels.telegram.accounts.<id>.botToken(учетная запись по умолчанию может использоватьTELEGRAM_BOT_TOKEN). - Для нескольких ботов в одной группе Telegram пригласите каждого бота и упомяните бота, который должен отвечать.
- Отключите BotFather Privacy Mode для каждого группового бота, затем добавьте бота повторно, чтобы Telegram применил настройку.
- Разрешите группы через
channels.telegram.groupsили используйтеgroupPolicy: "open"только для доверенных групповых развертываний. - Поместите пользовательские ID отправителей в
groupAllowFrom. ID групп и супергрупп должны быть вchannels.telegram.groups, а не вgroupAllowFrom. - Выполните привязку по
accountId, чтобы каждый бот маршрутизировался к своему агенту.
WhatsApp numbers per agent
WhatsApp numbers per agent
Свяжите каждую учетную запись перед запуском gateway:
~/.openclaw/openclaw.json (JSON5):Распространенные шаблоны
- WhatsApp daily + Telegram deep work
- Same channel, one peer to Opus
- Family agent bound to a WhatsApp group
Разделение по каналам: маршрутизируйте WhatsApp к быстрому повседневному агенту, а Telegram — к агенту Opus.Примечания:
- В этих примерах используется
accountId: "*", поэтому привязки продолжат работать, если вы добавите учетные записи позже. - Чтобы маршрутизировать один DM/группу к Opus, оставив остальные чаты на агенте chat, добавьте привязку
match.peerдля этого собеседника; совпадения по собеседнику всегда имеют приоритет над правилами для всего канала.
Песочница и конфигурация инструментов для каждого агента
У каждого агента могут быть собственная песочница и ограничения инструментов:setupCommand находится в sandbox.docker и выполняется один раз при создании контейнера. Переопределения sandbox.docker.* для отдельного агента игнорируются, когда разрешенная область равна "shared".- Изоляция безопасности: ограничивайте инструменты для недоверенных агентов.
- Контроль ресурсов: помещайте отдельных агентов в песочницу, оставляя других на хосте.
- Гибкие политики: разные разрешения для каждого агента.
tools.elevated является глобальной настройкой и зависит от отправителя; ее нельзя настраивать для отдельного агента. Если вам нужны границы на уровне агента, используйте agents.list[].tools, чтобы запретить exec. Для адресации в группах используйте agents.list[].groupChat.mentionPatterns, чтобы @упоминания корректно сопоставлялись с нужным агентом.Связанные разделы
- Агенты ACP — запуск внешних сред кодирования
- Маршрутизация каналов — как сообщения маршрутизируются к агентам
- Присутствие — присутствие и доступность агента
- Сессия — изоляция и маршрутизация сессий
- Субагенты — запуск фоновых выполнений агентов