nodmix 2026.5.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11573 -0
- package/LICENSE +21 -0
- package/README.md +486 -0
- package/docs/.i18n/README.md +81 -0
- package/docs/.i18n/ar-navigation.json +18 -0
- package/docs/.i18n/de-navigation.json +18 -0
- package/docs/.i18n/es-navigation.json +18 -0
- package/docs/.i18n/fr-navigation.json +18 -0
- package/docs/.i18n/glossary.ar.json +78 -0
- package/docs/.i18n/glossary.de.json +78 -0
- package/docs/.i18n/glossary.es.json +78 -0
- package/docs/.i18n/glossary.fa.json +78 -0
- package/docs/.i18n/glossary.fr.json +78 -0
- package/docs/.i18n/glossary.id.json +78 -0
- package/docs/.i18n/glossary.it.json +78 -0
- package/docs/.i18n/glossary.ja-JP.json +98 -0
- package/docs/.i18n/glossary.ko.json +78 -0
- package/docs/.i18n/glossary.nl.json +78 -0
- package/docs/.i18n/glossary.pl.json +78 -0
- package/docs/.i18n/glossary.pt-BR.json +78 -0
- package/docs/.i18n/glossary.th.json +78 -0
- package/docs/.i18n/glossary.tr.json +78 -0
- package/docs/.i18n/glossary.uk.json +78 -0
- package/docs/.i18n/glossary.vi.json +78 -0
- package/docs/.i18n/glossary.zh-CN.json +1002 -0
- package/docs/.i18n/glossary.zh-TW.json +78 -0
- package/docs/.i18n/id-navigation.json +18 -0
- package/docs/.i18n/it-navigation.json +18 -0
- package/docs/.i18n/ja-navigation.json +18 -0
- package/docs/.i18n/ko-navigation.json +18 -0
- package/docs/.i18n/pl-navigation.json +18 -0
- package/docs/.i18n/pt-BR-navigation.json +18 -0
- package/docs/.i18n/tr-navigation.json +18 -0
- package/docs/.i18n/translation-workflow.md +111 -0
- package/docs/.i18n/zh-Hans-navigation.json +542 -0
- package/docs/AGENTS.md +36 -0
- package/docs/announcements/bluebubbles-imessage.md +79 -0
- package/docs/assets/install-script.svg +1 -0
- package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
- package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
- package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
- package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
- package/docs/assets/macos-onboarding/05-permissions.png +0 -0
- package/docs/assets/openclaw-logo-text-dark.png +0 -0
- package/docs/assets/openclaw-logo-text-dark.svg +418 -0
- package/docs/assets/openclaw-logo-text.png +0 -0
- package/docs/assets/openclaw-logo-text.svg +418 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/pr/quick-settings-browser-tools.png +0 -0
- package/docs/assets/showcase/agents-ui.jpg +0 -0
- package/docs/assets/showcase/bambu-cli.png +0 -0
- package/docs/assets/showcase/codexmonitor.png +0 -0
- package/docs/assets/showcase/gohome-grafana.png +0 -0
- package/docs/assets/showcase/ios-testflight.jpg +0 -0
- package/docs/assets/showcase/oura-health.png +0 -0
- package/docs/assets/showcase/padel-cli.svg +11 -0
- package/docs/assets/showcase/padel-screenshot.jpg +0 -0
- package/docs/assets/showcase/papla-tts.jpg +0 -0
- package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
- package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
- package/docs/assets/showcase/roborock-status.svg +13 -0
- package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
- package/docs/assets/showcase/snag.png +0 -0
- package/docs/assets/showcase/tesco-shop.jpg +0 -0
- package/docs/assets/showcase/wienerlinien.png +0 -0
- package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
- package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
- package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
- package/docs/assets/sponsors/blacksmith-light.svg +14 -0
- package/docs/assets/sponsors/blacksmith.svg +14 -0
- package/docs/assets/sponsors/convex-light.svg +16 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/github-light.svg +3 -0
- package/docs/assets/sponsors/github.svg +3 -0
- package/docs/assets/sponsors/nvidia-dark.svg +9 -0
- package/docs/assets/sponsors/nvidia.svg +9 -0
- package/docs/assets/sponsors/openai-light.svg +3 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel-light.svg +5 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +124 -0
- package/docs/automation/auth-monitoring.md +11 -0
- package/docs/automation/clawflow.md +12 -0
- package/docs/automation/cron-jobs.md +500 -0
- package/docs/automation/cron-vs-heartbeat.md +11 -0
- package/docs/automation/gmail-pubsub.md +11 -0
- package/docs/automation/hooks.md +365 -0
- package/docs/automation/index.md +135 -0
- package/docs/automation/poll.md +12 -0
- package/docs/automation/standing-orders.md +250 -0
- package/docs/automation/taskflow.md +155 -0
- package/docs/automation/tasks.md +374 -0
- package/docs/automation/troubleshooting.md +12 -0
- package/docs/automation/webhook.md +12 -0
- package/docs/brave-search.md +11 -0
- package/docs/channels/access-groups.md +201 -0
- package/docs/channels/ambient-room-events.md +214 -0
- package/docs/channels/bot-loop-protection.md +131 -0
- package/docs/channels/broadcast-groups.md +472 -0
- package/docs/channels/channel-routing.md +162 -0
- package/docs/channels/clickclack.md +138 -0
- package/docs/channels/discord.md +1762 -0
- package/docs/channels/feishu.md +502 -0
- package/docs/channels/googlechat.md +284 -0
- package/docs/channels/group-messages.md +95 -0
- package/docs/channels/groups.md +519 -0
- package/docs/channels/imessage-from-bluebubbles.md +259 -0
- package/docs/channels/imessage.md +813 -0
- package/docs/channels/index.md +64 -0
- package/docs/channels/irc.md +253 -0
- package/docs/channels/line.md +243 -0
- package/docs/channels/location.md +71 -0
- package/docs/channels/matrix-migration.md +370 -0
- package/docs/channels/matrix-presentation.md +77 -0
- package/docs/channels/matrix-push-rules.md +150 -0
- package/docs/channels/matrix.md +921 -0
- package/docs/channels/mattermost.md +542 -0
- package/docs/channels/msteams.md +1042 -0
- package/docs/channels/nextcloud-talk.md +176 -0
- package/docs/channels/nostr.md +253 -0
- package/docs/channels/pairing.md +214 -0
- package/docs/channels/qqbot.md +309 -0
- package/docs/channels/signal.md +400 -0
- package/docs/channels/slack.md +1564 -0
- package/docs/channels/synology-chat.md +187 -0
- package/docs/channels/telegram.md +1107 -0
- package/docs/channels/tlon.md +296 -0
- package/docs/channels/troubleshooting.md +161 -0
- package/docs/channels/twitch.md +431 -0
- package/docs/channels/wechat.md +171 -0
- package/docs/channels/whatsapp.md +739 -0
- package/docs/channels/yuanbao.md +416 -0
- package/docs/channels/zalo.md +253 -0
- package/docs/channels/zalouser.md +199 -0
- package/docs/ci.md +612 -0
- package/docs/clawhub/publishing.md +96 -0
- package/docs/cli/acp.md +370 -0
- package/docs/cli/agent.md +103 -0
- package/docs/cli/agents.md +232 -0
- package/docs/cli/approvals.md +190 -0
- package/docs/cli/backup.md +97 -0
- package/docs/cli/browser.md +307 -0
- package/docs/cli/channels.md +154 -0
- package/docs/cli/clawbot.md +25 -0
- package/docs/cli/commitments.md +90 -0
- package/docs/cli/completion.md +39 -0
- package/docs/cli/config.md +504 -0
- package/docs/cli/configure.md +77 -0
- package/docs/cli/crestodian.md +332 -0
- package/docs/cli/cron.md +281 -0
- package/docs/cli/daemon.md +67 -0
- package/docs/cli/dashboard.md +33 -0
- package/docs/cli/devices.md +204 -0
- package/docs/cli/directory.md +68 -0
- package/docs/cli/dns.md +53 -0
- package/docs/cli/docs.md +73 -0
- package/docs/cli/doctor.md +237 -0
- package/docs/cli/flows.md +52 -0
- package/docs/cli/gateway.md +567 -0
- package/docs/cli/health.md +43 -0
- package/docs/cli/hooks.md +345 -0
- package/docs/cli/index.md +396 -0
- package/docs/cli/infer.md +364 -0
- package/docs/cli/logs.md +65 -0
- package/docs/cli/mcp.md +529 -0
- package/docs/cli/memory.md +183 -0
- package/docs/cli/message.md +317 -0
- package/docs/cli/migrate.md +290 -0
- package/docs/cli/models.md +224 -0
- package/docs/cli/node.md +177 -0
- package/docs/cli/nodes.md +76 -0
- package/docs/cli/onboard.md +245 -0
- package/docs/cli/pairing.md +77 -0
- package/docs/cli/path.md +502 -0
- package/docs/cli/plugins.md +454 -0
- package/docs/cli/policy.md +418 -0
- package/docs/cli/proxy.md +89 -0
- package/docs/cli/qr.md +56 -0
- package/docs/cli/reset.md +39 -0
- package/docs/cli/sandbox.md +208 -0
- package/docs/cli/secrets.md +202 -0
- package/docs/cli/security.md +124 -0
- package/docs/cli/sessions.md +164 -0
- package/docs/cli/setup.md +59 -0
- package/docs/cli/skills.md +102 -0
- package/docs/cli/status.md +45 -0
- package/docs/cli/system.md +89 -0
- package/docs/cli/tasks.md +111 -0
- package/docs/cli/tui.md +89 -0
- package/docs/cli/uninstall.md +44 -0
- package/docs/cli/update.md +242 -0
- package/docs/cli/voicecall.md +204 -0
- package/docs/cli/webhooks.md +117 -0
- package/docs/cli/wiki.md +256 -0
- package/docs/concepts/active-memory.md +856 -0
- package/docs/concepts/agent-loop.md +185 -0
- package/docs/concepts/agent-runtimes.md +243 -0
- package/docs/concepts/agent-workspace.md +230 -0
- package/docs/concepts/agent.md +136 -0
- package/docs/concepts/architecture.md +154 -0
- package/docs/concepts/channel-docking.md +145 -0
- package/docs/concepts/commitments.md +150 -0
- package/docs/concepts/compaction.md +203 -0
- package/docs/concepts/context-engine.md +306 -0
- package/docs/concepts/context.md +199 -0
- package/docs/concepts/delegate-architecture.md +319 -0
- package/docs/concepts/dreaming.md +261 -0
- package/docs/concepts/experimental-features.md +108 -0
- package/docs/concepts/features.md +91 -0
- package/docs/concepts/mantis-slack-desktop-runbook.md +202 -0
- package/docs/concepts/mantis.md +740 -0
- package/docs/concepts/markdown-formatting.md +139 -0
- package/docs/concepts/memory-builtin.md +146 -0
- package/docs/concepts/memory-honcho.md +144 -0
- package/docs/concepts/memory-qmd.md +271 -0
- package/docs/concepts/memory-search.md +166 -0
- package/docs/concepts/memory.md +258 -0
- package/docs/concepts/message-lifecycle-refactor.md +1128 -0
- package/docs/concepts/messages.md +214 -0
- package/docs/concepts/model-failover.md +385 -0
- package/docs/concepts/model-providers.md +715 -0
- package/docs/concepts/models.md +370 -0
- package/docs/concepts/multi-agent.md +619 -0
- package/docs/concepts/oauth.md +198 -0
- package/docs/concepts/openclaw-sdk.md +323 -0
- package/docs/concepts/parallel-specialist-lanes.md +127 -0
- package/docs/concepts/personal-agent-benchmark-pack.md +74 -0
- package/docs/concepts/presence.md +117 -0
- package/docs/concepts/progress-drafts.md +362 -0
- package/docs/concepts/qa-e2e-automation.md +820 -0
- package/docs/concepts/qa-matrix.md +139 -0
- package/docs/concepts/queue-steering.md +90 -0
- package/docs/concepts/queue.md +122 -0
- package/docs/concepts/retry.md +86 -0
- package/docs/concepts/session-pruning.md +104 -0
- package/docs/concepts/session-tool.md +190 -0
- package/docs/concepts/session.md +164 -0
- package/docs/concepts/soul.md +116 -0
- package/docs/concepts/streaming.md +251 -0
- package/docs/concepts/system-prompt.md +310 -0
- package/docs/concepts/timezone.md +47 -0
- package/docs/concepts/typebox.md +309 -0
- package/docs/concepts/typing-indicators.md +88 -0
- package/docs/concepts/usage-tracking.md +66 -0
- package/docs/date-time.md +126 -0
- package/docs/debug/node-issue.md +90 -0
- package/docs/diagnostics/flags.md +138 -0
- package/docs/docs.json +1832 -0
- package/docs/gateway/authentication.md +239 -0
- package/docs/gateway/background-process.md +147 -0
- package/docs/gateway/bonjour.md +303 -0
- package/docs/gateway/bridge-protocol.md +94 -0
- package/docs/gateway/cli-backends.md +420 -0
- package/docs/gateway/config-agents.md +1514 -0
- package/docs/gateway/config-channels.md +945 -0
- package/docs/gateway/config-tools.md +769 -0
- package/docs/gateway/configuration-examples.md +705 -0
- package/docs/gateway/configuration-reference.md +1393 -0
- package/docs/gateway/configuration.md +737 -0
- package/docs/gateway/diagnostics.md +213 -0
- package/docs/gateway/discovery.md +154 -0
- package/docs/gateway/doctor.md +574 -0
- package/docs/gateway/gateway-lock.md +37 -0
- package/docs/gateway/health.md +73 -0
- package/docs/gateway/heartbeat.md +493 -0
- package/docs/gateway/index.md +383 -0
- package/docs/gateway/local-model-services.md +205 -0
- package/docs/gateway/local-models.md +355 -0
- package/docs/gateway/logging.md +149 -0
- package/docs/gateway/multiple-gateways.md +178 -0
- package/docs/gateway/network-model.md +15 -0
- package/docs/gateway/openai-http-api.md +350 -0
- package/docs/gateway/openresponses-http-api.md +347 -0
- package/docs/gateway/openshell.md +316 -0
- package/docs/gateway/opentelemetry.md +404 -0
- package/docs/gateway/operator-scopes.md +111 -0
- package/docs/gateway/pairing.md +207 -0
- package/docs/gateway/prometheus.md +230 -0
- package/docs/gateway/protocol.md +803 -0
- package/docs/gateway/remote-gateway-readme.md +169 -0
- package/docs/gateway/remote.md +280 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +146 -0
- package/docs/gateway/sandboxing.md +545 -0
- package/docs/gateway/secrets-plan-contract.md +114 -0
- package/docs/gateway/secrets.md +609 -0
- package/docs/gateway/security/audit-checks.md +127 -0
- package/docs/gateway/security/index.md +1326 -0
- package/docs/gateway/security/secure-file-operations.md +76 -0
- package/docs/gateway/tailscale.md +156 -0
- package/docs/gateway/tools-invoke-http-api.md +169 -0
- package/docs/gateway/troubleshooting.md +772 -0
- package/docs/gateway/trusted-proxy-auth.md +451 -0
- package/docs/help/debugging.md +344 -0
- package/docs/help/environment.md +214 -0
- package/docs/help/faq-first-run.md +867 -0
- package/docs/help/faq-models.md +553 -0
- package/docs/help/faq.md +1975 -0
- package/docs/help/gpt55-codex-agentic-parity-maintainers.md +196 -0
- package/docs/help/gpt55-codex-agentic-parity.md +230 -0
- package/docs/help/index.md +39 -0
- package/docs/help/scripts.md +56 -0
- package/docs/help/testing-live.md +580 -0
- package/docs/help/testing-updates-plugins.md +291 -0
- package/docs/help/testing.md +928 -0
- package/docs/help/troubleshooting.md +424 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-get-group-id.png +0 -0
- package/docs/images/groups-flow.svg +52 -0
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +196 -0
- package/docs/install/ansible.md +233 -0
- package/docs/install/azure.md +315 -0
- package/docs/install/bun.md +59 -0
- package/docs/install/clawdock.md +112 -0
- package/docs/install/development-channels.md +135 -0
- package/docs/install/digitalocean.md +174 -0
- package/docs/install/docker-vm-runtime.md +154 -0
- package/docs/install/docker.md +562 -0
- package/docs/install/exe-dev.md +201 -0
- package/docs/install/fly.md +524 -0
- package/docs/install/gcp.md +418 -0
- package/docs/install/hetzner.md +285 -0
- package/docs/install/hostinger.md +98 -0
- package/docs/install/index.md +221 -0
- package/docs/install/installer.md +455 -0
- package/docs/install/kubernetes.md +196 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-claude.md +165 -0
- package/docs/install/migrating-hermes.md +177 -0
- package/docs/install/migrating.md +137 -0
- package/docs/install/nix.md +112 -0
- package/docs/install/node.md +142 -0
- package/docs/install/northflank.mdx +44 -0
- package/docs/install/oracle.md +218 -0
- package/docs/install/podman.md +210 -0
- package/docs/install/railway.mdx +92 -0
- package/docs/install/raspberry-pi.md +234 -0
- package/docs/install/render.mdx +167 -0
- package/docs/install/uninstall.md +131 -0
- package/docs/install/updating.md +280 -0
- package/docs/logging.md +318 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +72 -0
- package/docs/nodes/audio.md +215 -0
- package/docs/nodes/camera.md +166 -0
- package/docs/nodes/images.md +77 -0
- package/docs/nodes/index.md +439 -0
- package/docs/nodes/location-command.md +102 -0
- package/docs/nodes/media-understanding.md +469 -0
- package/docs/nodes/talk.md +154 -0
- package/docs/nodes/troubleshooting.md +123 -0
- package/docs/nodes/voicewake.md +93 -0
- package/docs/perplexity.md +11 -0
- package/docs/pi-dev.md +82 -0
- package/docs/pi.md +573 -0
- package/docs/plan/codex-context-engine-harness.md +624 -0
- package/docs/plan/ui-channels.md +284 -0
- package/docs/platforms/android.md +285 -0
- package/docs/platforms/digitalocean.md +12 -0
- package/docs/platforms/index.md +60 -0
- package/docs/platforms/ios.md +283 -0
- package/docs/platforms/linux.md +141 -0
- package/docs/platforms/mac/bundled-gateway.md +79 -0
- package/docs/platforms/mac/canvas.md +128 -0
- package/docs/platforms/mac/child-process.md +72 -0
- package/docs/platforms/mac/dev-setup.md +112 -0
- package/docs/platforms/mac/health.md +39 -0
- package/docs/platforms/mac/icon.md +36 -0
- package/docs/platforms/mac/logging.md +62 -0
- package/docs/platforms/mac/menu-bar.md +93 -0
- package/docs/platforms/mac/peekaboo.md +92 -0
- package/docs/platforms/mac/permissions.md +53 -0
- package/docs/platforms/mac/remote.md +123 -0
- package/docs/platforms/mac/signing.md +52 -0
- package/docs/platforms/mac/skills.md +43 -0
- package/docs/platforms/mac/voice-overlay.md +66 -0
- package/docs/platforms/mac/voicewake.md +73 -0
- package/docs/platforms/mac/webchat.md +54 -0
- package/docs/platforms/mac/xpc.md +66 -0
- package/docs/platforms/macos.md +226 -0
- package/docs/platforms/oracle.md +12 -0
- package/docs/platforms/raspberry-pi.md +13 -0
- package/docs/platforms/windows.md +286 -0
- package/docs/plugins/adding-capabilities.md +133 -0
- package/docs/plugins/admin-http-rpc.md +216 -0
- package/docs/plugins/agent-tools.md +13 -0
- package/docs/plugins/architecture-internals.md +1195 -0
- package/docs/plugins/architecture.md +481 -0
- package/docs/plugins/building-extensions.md +13 -0
- package/docs/plugins/building-plugins.md +330 -0
- package/docs/plugins/bundles.md +310 -0
- package/docs/plugins/cli-backend-plugins.md +310 -0
- package/docs/plugins/codex-computer-use.md +293 -0
- package/docs/plugins/codex-harness-reference.md +409 -0
- package/docs/plugins/codex-harness-runtime.md +247 -0
- package/docs/plugins/codex-harness.md +746 -0
- package/docs/plugins/codex-native-plugins.md +276 -0
- package/docs/plugins/community.md +77 -0
- package/docs/plugins/compatibility.md +164 -0
- package/docs/plugins/dependency-resolution.md +143 -0
- package/docs/plugins/google-meet.md +1737 -0
- package/docs/plugins/hooks.md +459 -0
- package/docs/plugins/install-overrides.md +80 -0
- package/docs/plugins/manage-plugins.md +210 -0
- package/docs/plugins/manifest.md +1359 -0
- package/docs/plugins/memory-lancedb.md +385 -0
- package/docs/plugins/memory-wiki.md +529 -0
- package/docs/plugins/message-presentation.md +473 -0
- package/docs/plugins/oc-path.md +166 -0
- package/docs/plugins/plugin-inventory.md +182 -0
- package/docs/plugins/reference/acpx.md +23 -0
- package/docs/plugins/reference/admin-http-rpc.md +23 -0
- package/docs/plugins/reference/alibaba.md +23 -0
- package/docs/plugins/reference/amazon-bedrock-mantle.md +23 -0
- package/docs/plugins/reference/amazon-bedrock.md +23 -0
- package/docs/plugins/reference/anthropic-vertex.md +19 -0
- package/docs/plugins/reference/anthropic.md +23 -0
- package/docs/plugins/reference/arcee.md +23 -0
- package/docs/plugins/reference/azure-speech.md +23 -0
- package/docs/plugins/reference/bonjour.md +19 -0
- package/docs/plugins/reference/brave.md +23 -0
- package/docs/plugins/reference/browser.md +23 -0
- package/docs/plugins/reference/byteplus.md +19 -0
- package/docs/plugins/reference/canvas.md +19 -0
- package/docs/plugins/reference/cerebras.md +23 -0
- package/docs/plugins/reference/chutes.md +23 -0
- package/docs/plugins/reference/clickclack.md +23 -0
- package/docs/plugins/reference/cloudflare-ai-gateway.md +23 -0
- package/docs/plugins/reference/codex.md +23 -0
- package/docs/plugins/reference/comfy.md +23 -0
- package/docs/plugins/reference/copilot-proxy.md +19 -0
- package/docs/plugins/reference/deepgram.md +23 -0
- package/docs/plugins/reference/deepinfra.md +23 -0
- package/docs/plugins/reference/deepseek.md +23 -0
- package/docs/plugins/reference/diagnostics-otel.md +19 -0
- package/docs/plugins/reference/diagnostics-prometheus.md +19 -0
- package/docs/plugins/reference/diffs.md +19 -0
- package/docs/plugins/reference/discord.md +23 -0
- package/docs/plugins/reference/document-extract.md +23 -0
- package/docs/plugins/reference/duckduckgo.md +23 -0
- package/docs/plugins/reference/elevenlabs.md +23 -0
- package/docs/plugins/reference/exa.md +23 -0
- package/docs/plugins/reference/fal.md +23 -0
- package/docs/plugins/reference/feishu.md +23 -0
- package/docs/plugins/reference/file-transfer.md +19 -0
- package/docs/plugins/reference/firecrawl.md +23 -0
- package/docs/plugins/reference/fireworks.md +23 -0
- package/docs/plugins/reference/github-copilot.md +23 -0
- package/docs/plugins/reference/google-meet.md +23 -0
- package/docs/plugins/reference/google.md +23 -0
- package/docs/plugins/reference/googlechat.md +23 -0
- package/docs/plugins/reference/gradium.md +23 -0
- package/docs/plugins/reference/groq.md +23 -0
- package/docs/plugins/reference/huggingface.md +23 -0
- package/docs/plugins/reference/imessage.md +23 -0
- package/docs/plugins/reference/inworld.md +23 -0
- package/docs/plugins/reference/irc.md +23 -0
- package/docs/plugins/reference/kilocode.md +23 -0
- package/docs/plugins/reference/kimi.md +23 -0
- package/docs/plugins/reference/line.md +23 -0
- package/docs/plugins/reference/litellm.md +23 -0
- package/docs/plugins/reference/llm-task.md +19 -0
- package/docs/plugins/reference/lmstudio.md +23 -0
- package/docs/plugins/reference/lobster.md +19 -0
- package/docs/plugins/reference/matrix.md +23 -0
- package/docs/plugins/reference/mattermost.md +23 -0
- package/docs/plugins/reference/memory-core.md +19 -0
- package/docs/plugins/reference/memory-lancedb.md +23 -0
- package/docs/plugins/reference/memory-wiki.md +23 -0
- package/docs/plugins/reference/microsoft-foundry.md +19 -0
- package/docs/plugins/reference/microsoft.md +19 -0
- package/docs/plugins/reference/migrate-claude.md +19 -0
- package/docs/plugins/reference/migrate-hermes.md +19 -0
- package/docs/plugins/reference/minimax.md +23 -0
- package/docs/plugins/reference/mistral.md +23 -0
- package/docs/plugins/reference/moonshot.md +23 -0
- package/docs/plugins/reference/msteams.md +23 -0
- package/docs/plugins/reference/nextcloud-talk.md +23 -0
- package/docs/plugins/reference/nostr.md +23 -0
- package/docs/plugins/reference/nvidia.md +23 -0
- package/docs/plugins/reference/oc-path.md +23 -0
- package/docs/plugins/reference/ollama.md +23 -0
- package/docs/plugins/reference/open-prose.md +19 -0
- package/docs/plugins/reference/openai.md +23 -0
- package/docs/plugins/reference/opencode-go.md +23 -0
- package/docs/plugins/reference/opencode.md +23 -0
- package/docs/plugins/reference/openrouter.md +23 -0
- package/docs/plugins/reference/openshell.md +19 -0
- package/docs/plugins/reference/perplexity.md +23 -0
- package/docs/plugins/reference/policy.md +23 -0
- package/docs/plugins/reference/qa-channel.md +23 -0
- package/docs/plugins/reference/qa-lab.md +19 -0
- package/docs/plugins/reference/qa-matrix.md +19 -0
- package/docs/plugins/reference/qianfan.md +23 -0
- package/docs/plugins/reference/qqbot.md +23 -0
- package/docs/plugins/reference/qwen.md +23 -0
- package/docs/plugins/reference/runway.md +23 -0
- package/docs/plugins/reference/searxng.md +19 -0
- package/docs/plugins/reference/senseaudio.md +23 -0
- package/docs/plugins/reference/sglang.md +23 -0
- package/docs/plugins/reference/signal.md +23 -0
- package/docs/plugins/reference/skill-workshop.md +23 -0
- package/docs/plugins/reference/slack.md +23 -0
- package/docs/plugins/reference/stepfun.md +23 -0
- package/docs/plugins/reference/synology-chat.md +23 -0
- package/docs/plugins/reference/synthetic.md +23 -0
- package/docs/plugins/reference/tavily.md +23 -0
- package/docs/plugins/reference/telegram.md +23 -0
- package/docs/plugins/reference/tencent.md +23 -0
- package/docs/plugins/reference/tlon.md +23 -0
- package/docs/plugins/reference/together.md +23 -0
- package/docs/plugins/reference/tokenjuice.md +23 -0
- package/docs/plugins/reference/tts-local-cli.md +19 -0
- package/docs/plugins/reference/twitch.md +23 -0
- package/docs/plugins/reference/venice.md +23 -0
- package/docs/plugins/reference/vercel-ai-gateway.md +23 -0
- package/docs/plugins/reference/vllm.md +23 -0
- package/docs/plugins/reference/voice-call.md +23 -0
- package/docs/plugins/reference/volcengine.md +23 -0
- package/docs/plugins/reference/voyage.md +19 -0
- package/docs/plugins/reference/vydra.md +23 -0
- package/docs/plugins/reference/web-readability.md +19 -0
- package/docs/plugins/reference/webhooks.md +23 -0
- package/docs/plugins/reference/whatsapp.md +23 -0
- package/docs/plugins/reference/xai.md +23 -0
- package/docs/plugins/reference/xiaomi.md +23 -0
- package/docs/plugins/reference/zai.md +23 -0
- package/docs/plugins/reference/zalo.md +23 -0
- package/docs/plugins/reference/zalouser.md +24 -0
- package/docs/plugins/reference.md +138 -0
- package/docs/plugins/sdk-agent-harness.md +339 -0
- package/docs/plugins/sdk-channel-ingress.md +137 -0
- package/docs/plugins/sdk-channel-message.md +458 -0
- package/docs/plugins/sdk-channel-plugins.md +762 -0
- package/docs/plugins/sdk-channel-turn.md +580 -0
- package/docs/plugins/sdk-entrypoints.md +333 -0
- package/docs/plugins/sdk-migration.md +949 -0
- package/docs/plugins/sdk-overview.md +501 -0
- package/docs/plugins/sdk-provider-plugins.md +807 -0
- package/docs/plugins/sdk-runtime.md +676 -0
- package/docs/plugins/sdk-setup.md +550 -0
- package/docs/plugins/sdk-subpaths.md +396 -0
- package/docs/plugins/sdk-testing.md +401 -0
- package/docs/plugins/skill-workshop.md +713 -0
- package/docs/plugins/tool-plugins.md +411 -0
- package/docs/plugins/voice-call.md +943 -0
- package/docs/plugins/webhooks.md +192 -0
- package/docs/plugins/zalouser.md +86 -0
- package/docs/prose.md +137 -0
- package/docs/providers/alibaba.md +158 -0
- package/docs/providers/anthropic.md +344 -0
- package/docs/providers/arcee.md +144 -0
- package/docs/providers/azure-speech.md +119 -0
- package/docs/providers/bedrock-mantle.md +211 -0
- package/docs/providers/bedrock.md +414 -0
- package/docs/providers/cerebras.md +130 -0
- package/docs/providers/chutes.md +153 -0
- package/docs/providers/claude-max-api-proxy.md +188 -0
- package/docs/providers/cloudflare-ai-gateway.md +119 -0
- package/docs/providers/comfy.md +362 -0
- package/docs/providers/deepgram.md +184 -0
- package/docs/providers/deepinfra.md +87 -0
- package/docs/providers/deepseek.md +146 -0
- package/docs/providers/ds4.md +309 -0
- package/docs/providers/elevenlabs.md +130 -0
- package/docs/providers/fal.md +204 -0
- package/docs/providers/fireworks.md +144 -0
- package/docs/providers/github-copilot.md +225 -0
- package/docs/providers/glm.md +137 -0
- package/docs/providers/google.md +472 -0
- package/docs/providers/gradium.md +123 -0
- package/docs/providers/groq.md +180 -0
- package/docs/providers/huggingface.md +235 -0
- package/docs/providers/index.md +102 -0
- package/docs/providers/inferrs.md +272 -0
- package/docs/providers/inworld.md +120 -0
- package/docs/providers/kilocode.md +135 -0
- package/docs/providers/litellm.md +234 -0
- package/docs/providers/lmstudio.md +224 -0
- package/docs/providers/minimax.md +505 -0
- package/docs/providers/mistral.md +235 -0
- package/docs/providers/models.md +65 -0
- package/docs/providers/moonshot.md +413 -0
- package/docs/providers/nvidia.md +140 -0
- package/docs/providers/ollama.md +1180 -0
- package/docs/providers/openai.md +1057 -0
- package/docs/providers/opencode-go.md +123 -0
- package/docs/providers/opencode.md +149 -0
- package/docs/providers/openrouter.md +349 -0
- package/docs/providers/perplexity-provider.md +123 -0
- package/docs/providers/qianfan.md +132 -0
- package/docs/providers/qwen.md +332 -0
- package/docs/providers/runway.md +103 -0
- package/docs/providers/senseaudio.md +68 -0
- package/docs/providers/sglang.md +161 -0
- package/docs/providers/stepfun.md +229 -0
- package/docs/providers/synthetic.md +154 -0
- package/docs/providers/tencent.md +130 -0
- package/docs/providers/together.md +141 -0
- package/docs/providers/venice.md +315 -0
- package/docs/providers/vercel-ai-gateway.md +128 -0
- package/docs/providers/vllm.md +383 -0
- package/docs/providers/volcengine.md +199 -0
- package/docs/providers/vydra.md +180 -0
- package/docs/providers/xai.md +560 -0
- package/docs/providers/xiaomi.md +188 -0
- package/docs/providers/zai.md +203 -0
- package/docs/refactor/access.md +9 -0
- package/docs/refactor/acp.md +298 -0
- package/docs/refactor/canvas.md +131 -0
- package/docs/refactor/ingress-core.md +341 -0
- package/docs/reference/AGENTS.default.md +129 -0
- package/docs/reference/RELEASING.md +767 -0
- package/docs/reference/api-usage-costs.md +202 -0
- package/docs/reference/application-modernization-plan.md +208 -0
- package/docs/reference/code-mode.md +757 -0
- package/docs/reference/credits.md +33 -0
- package/docs/reference/device-models.md +50 -0
- package/docs/reference/full-release-validation.md +202 -0
- package/docs/reference/memory-config.md +630 -0
- package/docs/reference/openclaw-sdk-api-design.md +390 -0
- package/docs/reference/prompt-caching.md +358 -0
- package/docs/reference/rich-output-protocol.md +79 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +159 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +663 -0
- package/docs/reference/session-management-compaction.md +461 -0
- package/docs/reference/templates/AGENTS.dev.md +89 -0
- package/docs/reference/templates/AGENTS.md +225 -0
- package/docs/reference/templates/BOOT.md +16 -0
- package/docs/reference/templates/BOOTSTRAP.md +66 -0
- package/docs/reference/templates/HEARTBEAT.md +16 -0
- package/docs/reference/templates/IDENTITY.dev.md +52 -0
- package/docs/reference/templates/IDENTITY.md +34 -0
- package/docs/reference/templates/SOUL.dev.md +82 -0
- package/docs/reference/templates/SOUL.md +49 -0
- package/docs/reference/templates/TOOLS.dev.md +29 -0
- package/docs/reference/templates/TOOLS.md +51 -0
- package/docs/reference/templates/USER.dev.md +23 -0
- package/docs/reference/templates/USER.md +28 -0
- package/docs/reference/test.md +239 -0
- package/docs/reference/token-use.md +233 -0
- package/docs/reference/transcript-hygiene.md +214 -0
- package/docs/reference/wizard.md +252 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +101 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
- package/docs/security/formal-verification.md +170 -0
- package/docs/security/incident-response.md +59 -0
- package/docs/security/network-proxy.md +268 -0
- package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +12 -0
- package/docs/snippets/plugin-publish/minimal-package.json +16 -0
- package/docs/start/bootstrapping.md +49 -0
- package/docs/start/docs-directory.md +69 -0
- package/docs/start/getting-started.md +152 -0
- package/docs/start/hubs.md +201 -0
- package/docs/start/lore.md +223 -0
- package/docs/start/onboarding-overview.md +72 -0
- package/docs/start/onboarding.md +95 -0
- package/docs/start/openclaw.md +244 -0
- package/docs/start/quickstart.md +25 -0
- package/docs/start/setup.md +178 -0
- package/docs/start/showcase.md +383 -0
- package/docs/start/wizard-cli-automation.md +232 -0
- package/docs/start/wizard-cli-reference.md +331 -0
- package/docs/start/wizard.md +141 -0
- package/docs/style.css +184 -0
- package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +316 -0
- package/docs/tools/acp-agents-setup.md +352 -0
- package/docs/tools/acp-agents.md +847 -0
- package/docs/tools/agent-send.md +112 -0
- package/docs/tools/apply-patch.md +64 -0
- package/docs/tools/brave-search.md +139 -0
- package/docs/tools/browser-control.md +391 -0
- package/docs/tools/browser-linux-troubleshooting.md +173 -0
- package/docs/tools/browser-login.md +77 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +219 -0
- package/docs/tools/browser.md +769 -0
- package/docs/tools/btw.md +159 -0
- package/docs/tools/capability-cookbook.md +12 -0
- package/docs/tools/clawhub.md +5 -0
- package/docs/tools/code-execution.md +173 -0
- package/docs/tools/creating-skills.md +120 -0
- package/docs/tools/diffs.md +506 -0
- package/docs/tools/duckduckgo-search.md +109 -0
- package/docs/tools/elevated.md +128 -0
- package/docs/tools/exa-search.md +152 -0
- package/docs/tools/exec-approvals-advanced.md +360 -0
- package/docs/tools/exec-approvals.md +474 -0
- package/docs/tools/exec.md +282 -0
- package/docs/tools/firecrawl.md +155 -0
- package/docs/tools/gemini-search.md +114 -0
- package/docs/tools/grok-search.md +113 -0
- package/docs/tools/image-generation.md +433 -0
- package/docs/tools/index.md +178 -0
- package/docs/tools/kimi-search.md +105 -0
- package/docs/tools/llm-task.md +137 -0
- package/docs/tools/lobster.md +365 -0
- package/docs/tools/loop-detection.md +154 -0
- package/docs/tools/media-overview.md +157 -0
- package/docs/tools/minimax-search.md +102 -0
- package/docs/tools/multi-agent-sandbox-tools.md +409 -0
- package/docs/tools/music-generation.md +371 -0
- package/docs/tools/ollama-search.md +153 -0
- package/docs/tools/pdf.md +195 -0
- package/docs/tools/perplexity-search.md +220 -0
- package/docs/tools/plugin.md +327 -0
- package/docs/tools/reactions.md +100 -0
- package/docs/tools/searxng-search.md +141 -0
- package/docs/tools/skills-config.md +195 -0
- package/docs/tools/skills.md +535 -0
- package/docs/tools/slash-commands.md +488 -0
- package/docs/tools/steer.md +84 -0
- package/docs/tools/subagents.md +650 -0
- package/docs/tools/tavily.md +162 -0
- package/docs/tools/thinking.md +140 -0
- package/docs/tools/tokenjuice.md +81 -0
- package/docs/tools/tool-search.md +269 -0
- package/docs/tools/trajectory.md +229 -0
- package/docs/tools/tts.md +1004 -0
- package/docs/tools/video-generation.md +552 -0
- package/docs/tools/web-fetch.md +195 -0
- package/docs/tools/web.md +459 -0
- package/docs/tts.md +11 -0
- package/docs/vps.md +139 -0
- package/docs/web/control-ui.md +503 -0
- package/docs/web/dashboard.md +107 -0
- package/docs/web/index.md +133 -0
- package/docs/web/tui.md +246 -0
- package/docs/web/webchat.md +99 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/nodmix.mjs +487 -0
- package/package.json +1852 -0
- package/patches/.gitkeep +0 -0
- package/patches/@agentclientprotocol__claude-agent-acp@0.36.1.patch +41 -0
- package/pnpm-workspace.yaml +63 -0
- package/scripts/crabbox-wrapper.mjs +353 -0
- package/scripts/lib/official-external-channel-catalog.json +559 -0
- package/scripts/lib/official-external-plugin-catalog.json +192 -0
- package/scripts/lib/official-external-provider-catalog.json +117 -0
- package/scripts/lib/package-dist-imports.mjs +171 -0
- package/scripts/npm-runner.mjs +91 -0
- package/scripts/postinstall-bundled-plugins.mjs +978 -0
- package/scripts/preinstall-package-manager-warning.mjs +64 -0
- package/scripts/windows-cmd-helpers.mjs +20 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +78 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +149 -0
- package/skills/diagram-maker/SKILL.md +53 -0
- package/skills/diagram-maker/references/excalidraw-patterns.md +85 -0
- package/skills/diagram-maker/references/svg-template.md +112 -0
- package/skills/discord/SKILL.md +136 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +47 -0
- package/skills/gh-issues/SKILL.md +213 -0
- package/skills/gifgrep/SKILL.md +85 -0
- package/skills/github/SKILL.md +84 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +105 -0
- package/skills/himalaya/SKILL.md +80 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/meme-maker/SKILL.md +42 -0
- package/skills/meme-maker/references/templates.json +358 -0
- package/skills/meme-maker/scripts/meme.mjs +398 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +319 -0
- package/skills/model-usage/scripts/test_model_usage.py +40 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/node-connect/SKILL.md +142 -0
- package/skills/node-inspect-debugger/SKILL.md +85 -0
- package/skills/notion/SKILL.md +150 -0
- package/skills/obsidian/SKILL.md +119 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +71 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +154 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +126 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/pyproject.toml +10 -0
- package/skills/python-debugpy/SKILL.md +73 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +151 -0
- package/skills/sherpa-onnx-tts/SKILL.md +109 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +78 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +139 -0
- package/skills/skill-creator/scripts/quick_validate.py +169 -0
- package/skills/skill-creator/scripts/test_package_skill.py +161 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +116 -0
- package/skills/slack/SKILL.md +78 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spike/SKILL.md +51 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/taskflow/SKILL.md +149 -0
- package/skills/taskflow/examples/inbox-triage.lobster +33 -0
- package/skills/taskflow/examples/pr-intake.lobster +32 -0
- package/skills/taskflow-inbox-triage/SKILL.md +119 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +91 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +108 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +64 -0
- package/skills/xurl/SKILL.md +120 -0
|
@@ -0,0 +1,619 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Multi-agent routing: isolated agents, channel accounts, and bindings"
|
|
3
|
+
title: "Multi-agent routing"
|
|
4
|
+
sidebarTitle: "Multi-agent routing"
|
|
5
|
+
read_when: "You want multiple isolated agents (workspaces + auth) in one gateway process."
|
|
6
|
+
status: active
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Run multiple _isolated_ agents — each with its own workspace, state directory (`agentDir`), and session history — plus multiple channel accounts (e.g. two WhatsApps) in one running Gateway. Inbound messages are routed to the right agent through bindings.
|
|
10
|
+
|
|
11
|
+
An **agent** here is the full per-persona scope: workspace files, auth profiles, model registry, and session store. `agentDir` is the on-disk state directory that holds this per-agent config at `~/.nodmix/agents/<agentId>/`. A **binding** maps a channel account (e.g. a Slack workspace or a WhatsApp number) to one of those agents.
|
|
12
|
+
|
|
13
|
+
## What is "one agent"?
|
|
14
|
+
|
|
15
|
+
An **agent** is a fully scoped brain with its own:
|
|
16
|
+
|
|
17
|
+
- **Workspace** (files, AGENTS.md/SOUL.md/USER.md, local notes, persona rules).
|
|
18
|
+
- **State directory** (`agentDir`) for auth profiles, model registry, and per-agent config.
|
|
19
|
+
- **Session store** (chat history + routing state) under `~/.nodmix/agents/<agentId>/sessions`.
|
|
20
|
+
|
|
21
|
+
Auth profiles are **per-agent**. Each agent reads from its own:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
~/.nodmix/agents/<agentId>/agent/auth-profiles.json
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
<Note>
|
|
28
|
+
`sessions_history` is the safer cross-session recall path here too: it returns a bounded, sanitized view, not a raw transcript dump. Assistant recall strips thinking tags, `<relevant-memories>` scaffolding, plain-text tool-call XML payloads (including `<tool_call>...</tool_call>`, `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, `<function_calls>...</function_calls>`, and truncated tool-call blocks), downgraded tool-call scaffolding, leaked ASCII/full-width model control tokens, and malformed MiniMax tool-call XML before redaction/truncation.
|
|
29
|
+
</Note>
|
|
30
|
+
|
|
31
|
+
<Warning>
|
|
32
|
+
Never reuse `agentDir` across agents (it causes auth/session collisions). Agents
|
|
33
|
+
can read through to the default/main agent's auth profiles when they do not have
|
|
34
|
+
a local profile, but Nodmix does not clone OAuth refresh tokens into the
|
|
35
|
+
secondary agent store. If you want an independent OAuth account, sign in from
|
|
36
|
+
that agent; if you copy credentials manually, copy only portable static
|
|
37
|
+
`api_key` or `token` profiles.
|
|
38
|
+
</Warning>
|
|
39
|
+
|
|
40
|
+
Skills are loaded from each agent workspace plus shared roots such as `~/.nodmix/skills`, then filtered by the effective agent skill allowlist when configured. Use `agents.defaults.skills` for a shared baseline and `agents.list[].skills` for per-agent replacement. See [Skills: per-agent vs shared](/tools/skills#per-agent-vs-shared-skills) and [Skills: agent skill allowlists](/tools/skills#agent-skill-allowlists).
|
|
41
|
+
|
|
42
|
+
The Gateway can host **one agent** (default) or **many agents** side-by-side.
|
|
43
|
+
|
|
44
|
+
<Note>
|
|
45
|
+
**Workspace note:** each agent's workspace is the **default cwd**, not a hard sandbox. Relative paths resolve inside the workspace, but absolute paths can reach other host locations unless sandboxing is enabled. See [Sandboxing](/gateway/sandboxing).
|
|
46
|
+
</Note>
|
|
47
|
+
|
|
48
|
+
## Paths (quick map)
|
|
49
|
+
|
|
50
|
+
- Config: `~/.nodmix/nodmix.json` (or `NODMIX_CONFIG_PATH`)
|
|
51
|
+
- State dir: `~/.nodmix` (or `NODMIX_STATE_DIR`)
|
|
52
|
+
- Workspace: `~/.nodmix/workspace` (or `~/.nodmix/workspace-<agentId>`)
|
|
53
|
+
- Agent dir: `~/.nodmix/agents/<agentId>/agent` (or `agents.list[].agentDir`)
|
|
54
|
+
- Sessions: `~/.nodmix/agents/<agentId>/sessions`
|
|
55
|
+
|
|
56
|
+
### Single-agent mode (default)
|
|
57
|
+
|
|
58
|
+
If you do nothing, Nodmix runs a single agent:
|
|
59
|
+
|
|
60
|
+
- `agentId` defaults to **`main`**.
|
|
61
|
+
- Sessions are keyed as `agent:main:<mainKey>`.
|
|
62
|
+
- Workspace defaults to `~/.nodmix/workspace` (or `~/.nodmix/workspace-<profile>` when `NODMIX_PROFILE` is set).
|
|
63
|
+
- State defaults to `~/.nodmix/agents/main/agent`.
|
|
64
|
+
|
|
65
|
+
## Agent helper
|
|
66
|
+
|
|
67
|
+
Use the agent wizard to add a new isolated agent:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
nodmix agents add work
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Then add `bindings` (or let the wizard do it) to route inbound messages.
|
|
74
|
+
|
|
75
|
+
Verify with:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
nodmix agents list --bindings
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Quick start
|
|
82
|
+
|
|
83
|
+
<Steps>
|
|
84
|
+
<Step title="Create each agent workspace">
|
|
85
|
+
Use the wizard or create workspaces manually:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
nodmix agents add coding
|
|
89
|
+
nodmix agents add social
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Each agent gets its own workspace with `SOUL.md`, `AGENTS.md`, and optional `USER.md`, plus a dedicated `agentDir` and session store under `~/.nodmix/agents/<agentId>`.
|
|
93
|
+
|
|
94
|
+
</Step>
|
|
95
|
+
<Step title="Create channel accounts">
|
|
96
|
+
Create one account per agent on your preferred channels:
|
|
97
|
+
|
|
98
|
+
- Discord: one bot per agent, enable Message Content Intent, copy each token.
|
|
99
|
+
- Telegram: one bot per agent via BotFather, copy each token.
|
|
100
|
+
- WhatsApp: link each phone number per account.
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
nodmix channels login --channel whatsapp --account work
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
See channel guides: [Discord](/channels/discord), [Telegram](/channels/telegram), [WhatsApp](/channels/whatsapp).
|
|
107
|
+
|
|
108
|
+
</Step>
|
|
109
|
+
<Step title="Add agents, accounts, and bindings">
|
|
110
|
+
Add agents under `agents.list`, channel accounts under `channels.<channel>.accounts`, and connect them with `bindings` (examples below).
|
|
111
|
+
</Step>
|
|
112
|
+
<Step title="Restart and verify">
|
|
113
|
+
```bash
|
|
114
|
+
nodmix gateway restart
|
|
115
|
+
nodmix agents list --bindings
|
|
116
|
+
nodmix channels status --probe
|
|
117
|
+
```
|
|
118
|
+
</Step>
|
|
119
|
+
</Steps>
|
|
120
|
+
|
|
121
|
+
## Multiple agents = multiple people, multiple personalities
|
|
122
|
+
|
|
123
|
+
With **multiple agents**, each `agentId` becomes a **fully isolated persona**:
|
|
124
|
+
|
|
125
|
+
- **Different phone numbers/accounts** (per channel `accountId`).
|
|
126
|
+
- **Different personalities** (per-agent workspace files like `AGENTS.md` and `SOUL.md`).
|
|
127
|
+
- **Separate auth + sessions** (no cross-talk unless explicitly enabled).
|
|
128
|
+
|
|
129
|
+
This lets **multiple people** share one Gateway server while keeping their AI "brains" and data isolated.
|
|
130
|
+
|
|
131
|
+
## Cross-agent QMD memory search
|
|
132
|
+
|
|
133
|
+
If one agent should search another agent's QMD session transcripts, add extra collections under `agents.list[].memorySearch.qmd.extraCollections`. Use `agents.defaults.memorySearch.qmd.extraCollections` only when every agent should inherit the same shared transcript collections.
|
|
134
|
+
|
|
135
|
+
```json5
|
|
136
|
+
{
|
|
137
|
+
agents: {
|
|
138
|
+
defaults: {
|
|
139
|
+
workspace: "~/workspaces/main",
|
|
140
|
+
memorySearch: {
|
|
141
|
+
qmd: {
|
|
142
|
+
extraCollections: [{ path: "~/agents/family/sessions", name: "family-sessions" }],
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
list: [
|
|
147
|
+
{
|
|
148
|
+
id: "main",
|
|
149
|
+
workspace: "~/workspaces/main",
|
|
150
|
+
memorySearch: {
|
|
151
|
+
qmd: {
|
|
152
|
+
extraCollections: [{ path: "notes" }], // resolves inside workspace -> collection named "notes-main"
|
|
153
|
+
},
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{ id: "family", workspace: "~/workspaces/family" },
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
memory: {
|
|
160
|
+
backend: "qmd",
|
|
161
|
+
qmd: { includeDefaultMemory: false },
|
|
162
|
+
},
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
The extra collection path can be shared across agents, but the collection name stays explicit when the path is outside the agent workspace. Paths inside the workspace remain agent-scoped so each agent keeps its own transcript search set.
|
|
167
|
+
|
|
168
|
+
## One WhatsApp number, multiple people (DM split)
|
|
169
|
+
|
|
170
|
+
You can route **different WhatsApp DMs** to different agents while staying on **one WhatsApp account**. Match on sender E.164 (like `+15551234567`) with `peer.kind: "direct"`. Replies still come from the same WhatsApp number (no per-agent sender identity).
|
|
171
|
+
|
|
172
|
+
<Note>
|
|
173
|
+
Direct chats collapse to the agent's **main session key**, so true isolation requires **one agent per person**.
|
|
174
|
+
</Note>
|
|
175
|
+
|
|
176
|
+
Example:
|
|
177
|
+
|
|
178
|
+
```json5
|
|
179
|
+
{
|
|
180
|
+
agents: {
|
|
181
|
+
list: [
|
|
182
|
+
{ id: "alex", workspace: "~/.nodmix/workspace-alex" },
|
|
183
|
+
{ id: "mia", workspace: "~/.nodmix/workspace-mia" },
|
|
184
|
+
],
|
|
185
|
+
},
|
|
186
|
+
bindings: [
|
|
187
|
+
{
|
|
188
|
+
agentId: "alex",
|
|
189
|
+
match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230001" } },
|
|
190
|
+
},
|
|
191
|
+
{
|
|
192
|
+
agentId: "mia",
|
|
193
|
+
match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230002" } },
|
|
194
|
+
},
|
|
195
|
+
],
|
|
196
|
+
channels: {
|
|
197
|
+
whatsapp: {
|
|
198
|
+
dmPolicy: "allowlist",
|
|
199
|
+
allowFrom: ["+15551230001", "+15551230002"],
|
|
200
|
+
},
|
|
201
|
+
},
|
|
202
|
+
}
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Notes:
|
|
206
|
+
|
|
207
|
+
- DM access control is **global per WhatsApp account** (pairing/allowlist), not per agent.
|
|
208
|
+
- For shared groups, bind the group to one agent or use [Broadcast groups](/channels/broadcast-groups).
|
|
209
|
+
|
|
210
|
+
## Routing rules (how messages pick an agent)
|
|
211
|
+
|
|
212
|
+
Bindings are **deterministic** and **most-specific wins**:
|
|
213
|
+
|
|
214
|
+
<Steps>
|
|
215
|
+
<Step title="peer match">
|
|
216
|
+
Exact DM/group/channel id.
|
|
217
|
+
</Step>
|
|
218
|
+
<Step title="parentPeer match">
|
|
219
|
+
Thread inheritance.
|
|
220
|
+
</Step>
|
|
221
|
+
<Step title="guildId + roles">
|
|
222
|
+
Discord role routing.
|
|
223
|
+
</Step>
|
|
224
|
+
<Step title="guildId">
|
|
225
|
+
Discord.
|
|
226
|
+
</Step>
|
|
227
|
+
<Step title="teamId">
|
|
228
|
+
Slack.
|
|
229
|
+
</Step>
|
|
230
|
+
<Step title="accountId match for a channel">
|
|
231
|
+
Per-account fallback.
|
|
232
|
+
</Step>
|
|
233
|
+
<Step title="Channel-level match">
|
|
234
|
+
`accountId: "*"`.
|
|
235
|
+
</Step>
|
|
236
|
+
<Step title="Default agent">
|
|
237
|
+
Fallback to `agents.list[].default`, else first list entry, default: `main`.
|
|
238
|
+
</Step>
|
|
239
|
+
</Steps>
|
|
240
|
+
|
|
241
|
+
<AccordionGroup>
|
|
242
|
+
<Accordion title="Tie-breaking and AND semantics">
|
|
243
|
+
- If multiple bindings match in the same tier, the first one in config order wins.
|
|
244
|
+
- If a binding sets multiple match fields (for example `peer` + `guildId`), all specified fields are required (`AND` semantics).
|
|
245
|
+
|
|
246
|
+
</Accordion>
|
|
247
|
+
<Accordion title="Account-scope detail">
|
|
248
|
+
- A binding that omits `accountId` matches the default account only.
|
|
249
|
+
- Use `accountId: "*"` for a channel-wide fallback across all accounts.
|
|
250
|
+
- If you later add the same binding for the same agent with an explicit account id, Nodmix upgrades the existing channel-only binding to account-scoped instead of duplicating it.
|
|
251
|
+
|
|
252
|
+
</Accordion>
|
|
253
|
+
</AccordionGroup>
|
|
254
|
+
|
|
255
|
+
## Multiple accounts / phone numbers
|
|
256
|
+
|
|
257
|
+
Channels that support **multiple accounts** (e.g. WhatsApp) use `accountId` to identify each login. Each `accountId` can be routed to a different agent, so one server can host multiple phone numbers without mixing sessions.
|
|
258
|
+
|
|
259
|
+
If you want a channel-wide default account when `accountId` is omitted, set `channels.<channel>.defaultAccount` (optional). When unset, Nodmix falls back to `default` if present, otherwise the first configured account id (sorted).
|
|
260
|
+
|
|
261
|
+
Common channels supporting this pattern include:
|
|
262
|
+
|
|
263
|
+
- `whatsapp`, `telegram`, `discord`, `slack`, `signal`, `imessage`
|
|
264
|
+
- `irc`, `line`, `googlechat`, `mattermost`, `matrix`, `nextcloud-talk`
|
|
265
|
+
- `zalo`, `zalouser`, `nostr`, `feishu`
|
|
266
|
+
|
|
267
|
+
## Concepts
|
|
268
|
+
|
|
269
|
+
- `agentId`: one "brain" (workspace, per-agent auth, per-agent session store).
|
|
270
|
+
- `accountId`: one channel account instance (e.g. WhatsApp account `"personal"` vs `"biz"`).
|
|
271
|
+
- `binding`: routes inbound messages to an `agentId` by `(channel, accountId, peer)` and optionally guild/team ids.
|
|
272
|
+
- Direct chats collapse to `agent:<agentId>:<mainKey>` (per-agent "main"; `session.mainKey`).
|
|
273
|
+
|
|
274
|
+
## Platform examples
|
|
275
|
+
|
|
276
|
+
<AccordionGroup>
|
|
277
|
+
<Accordion title="Discord bots per agent">
|
|
278
|
+
Each Discord bot account maps to a unique `accountId`. Bind each account to an agent and keep allowlists per bot.
|
|
279
|
+
|
|
280
|
+
```json5
|
|
281
|
+
{
|
|
282
|
+
agents: {
|
|
283
|
+
list: [
|
|
284
|
+
{ id: "main", workspace: "~/.nodmix/workspace-main" },
|
|
285
|
+
{ id: "coding", workspace: "~/.nodmix/workspace-coding" },
|
|
286
|
+
],
|
|
287
|
+
},
|
|
288
|
+
bindings: [
|
|
289
|
+
{ agentId: "main", match: { channel: "discord", accountId: "default" } },
|
|
290
|
+
{ agentId: "coding", match: { channel: "discord", accountId: "coding" } },
|
|
291
|
+
],
|
|
292
|
+
channels: {
|
|
293
|
+
discord: {
|
|
294
|
+
groupPolicy: "allowlist",
|
|
295
|
+
accounts: {
|
|
296
|
+
default: {
|
|
297
|
+
token: "DISCORD_BOT_TOKEN_MAIN",
|
|
298
|
+
guilds: {
|
|
299
|
+
"123456789012345678": {
|
|
300
|
+
channels: {
|
|
301
|
+
"222222222222222222": { allow: true, requireMention: false },
|
|
302
|
+
},
|
|
303
|
+
},
|
|
304
|
+
},
|
|
305
|
+
},
|
|
306
|
+
coding: {
|
|
307
|
+
token: "DISCORD_BOT_TOKEN_CODING",
|
|
308
|
+
guilds: {
|
|
309
|
+
"123456789012345678": {
|
|
310
|
+
channels: {
|
|
311
|
+
"333333333333333333": { allow: true, requireMention: false },
|
|
312
|
+
},
|
|
313
|
+
},
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
- Invite each bot to the guild and enable Message Content Intent.
|
|
323
|
+
- Tokens live in `channels.discord.accounts.<id>.token` (default account can use `DISCORD_BOT_TOKEN`).
|
|
324
|
+
|
|
325
|
+
</Accordion>
|
|
326
|
+
<Accordion title="Telegram bots per agent">
|
|
327
|
+
```json5
|
|
328
|
+
{
|
|
329
|
+
agents: {
|
|
330
|
+
list: [
|
|
331
|
+
{ id: "main", workspace: "~/.nodmix/workspace-main" },
|
|
332
|
+
{ id: "alerts", workspace: "~/.nodmix/workspace-alerts" },
|
|
333
|
+
],
|
|
334
|
+
},
|
|
335
|
+
bindings: [
|
|
336
|
+
{ agentId: "main", match: { channel: "telegram", accountId: "default" } },
|
|
337
|
+
{ agentId: "alerts", match: { channel: "telegram", accountId: "alerts" } },
|
|
338
|
+
],
|
|
339
|
+
channels: {
|
|
340
|
+
telegram: {
|
|
341
|
+
accounts: {
|
|
342
|
+
default: {
|
|
343
|
+
botToken: "123456:ABC...",
|
|
344
|
+
dmPolicy: "pairing",
|
|
345
|
+
},
|
|
346
|
+
alerts: {
|
|
347
|
+
botToken: "987654:XYZ...",
|
|
348
|
+
dmPolicy: "allowlist",
|
|
349
|
+
allowFrom: ["tg:123456789"],
|
|
350
|
+
},
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
}
|
|
355
|
+
```
|
|
356
|
+
|
|
357
|
+
- Create one bot per agent with BotFather and copy each token.
|
|
358
|
+
- Tokens live in `channels.telegram.accounts.<id>.botToken` (default account can use `TELEGRAM_BOT_TOKEN`).
|
|
359
|
+
|
|
360
|
+
</Accordion>
|
|
361
|
+
<Accordion title="WhatsApp numbers per agent">
|
|
362
|
+
Link each account before starting the gateway:
|
|
363
|
+
|
|
364
|
+
```bash
|
|
365
|
+
nodmix channels login --channel whatsapp --account personal
|
|
366
|
+
nodmix channels login --channel whatsapp --account biz
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
`~/.nodmix/nodmix.json` (JSON5):
|
|
370
|
+
|
|
371
|
+
```js
|
|
372
|
+
{
|
|
373
|
+
agents: {
|
|
374
|
+
list: [
|
|
375
|
+
{
|
|
376
|
+
id: "home",
|
|
377
|
+
default: true,
|
|
378
|
+
name: "Home",
|
|
379
|
+
workspace: "~/.nodmix/workspace-home",
|
|
380
|
+
agentDir: "~/.nodmix/agents/home/agent",
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
id: "work",
|
|
384
|
+
name: "Work",
|
|
385
|
+
workspace: "~/.nodmix/workspace-work",
|
|
386
|
+
agentDir: "~/.nodmix/agents/work/agent",
|
|
387
|
+
},
|
|
388
|
+
],
|
|
389
|
+
},
|
|
390
|
+
|
|
391
|
+
// Deterministic routing: first match wins (most-specific first).
|
|
392
|
+
bindings: [
|
|
393
|
+
{ agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
|
|
394
|
+
{ agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
|
|
395
|
+
|
|
396
|
+
// Optional per-peer override (example: send a specific group to work agent).
|
|
397
|
+
{
|
|
398
|
+
agentId: "work",
|
|
399
|
+
match: {
|
|
400
|
+
channel: "whatsapp",
|
|
401
|
+
accountId: "personal",
|
|
402
|
+
peer: { kind: "group", id: "1203630...@g.us" },
|
|
403
|
+
},
|
|
404
|
+
},
|
|
405
|
+
],
|
|
406
|
+
|
|
407
|
+
// Off by default: agent-to-agent messaging must be explicitly enabled + allowlisted.
|
|
408
|
+
tools: {
|
|
409
|
+
agentToAgent: {
|
|
410
|
+
enabled: false,
|
|
411
|
+
allow: ["home", "work"],
|
|
412
|
+
},
|
|
413
|
+
},
|
|
414
|
+
|
|
415
|
+
channels: {
|
|
416
|
+
whatsapp: {
|
|
417
|
+
accounts: {
|
|
418
|
+
personal: {
|
|
419
|
+
// Optional override. Default: ~/.nodmix/credentials/whatsapp/personal
|
|
420
|
+
// authDir: "~/.nodmix/credentials/whatsapp/personal",
|
|
421
|
+
},
|
|
422
|
+
biz: {
|
|
423
|
+
// Optional override. Default: ~/.nodmix/credentials/whatsapp/biz
|
|
424
|
+
// authDir: "~/.nodmix/credentials/whatsapp/biz",
|
|
425
|
+
},
|
|
426
|
+
},
|
|
427
|
+
},
|
|
428
|
+
},
|
|
429
|
+
}
|
|
430
|
+
```
|
|
431
|
+
|
|
432
|
+
</Accordion>
|
|
433
|
+
</AccordionGroup>
|
|
434
|
+
|
|
435
|
+
## Common patterns
|
|
436
|
+
|
|
437
|
+
<Tabs>
|
|
438
|
+
<Tab title="WhatsApp daily + Telegram deep work">
|
|
439
|
+
Split by channel: route WhatsApp to a fast everyday agent and Telegram to an Opus agent.
|
|
440
|
+
|
|
441
|
+
```json5
|
|
442
|
+
{
|
|
443
|
+
agents: {
|
|
444
|
+
list: [
|
|
445
|
+
{
|
|
446
|
+
id: "chat",
|
|
447
|
+
name: "Everyday",
|
|
448
|
+
workspace: "~/.nodmix/workspace-chat",
|
|
449
|
+
model: "anthropic/claude-sonnet-4-6",
|
|
450
|
+
},
|
|
451
|
+
{
|
|
452
|
+
id: "opus",
|
|
453
|
+
name: "Deep Work",
|
|
454
|
+
workspace: "~/.nodmix/workspace-opus",
|
|
455
|
+
model: "anthropic/claude-opus-4-6",
|
|
456
|
+
},
|
|
457
|
+
],
|
|
458
|
+
},
|
|
459
|
+
bindings: [
|
|
460
|
+
{ agentId: "chat", match: { channel: "whatsapp" } },
|
|
461
|
+
{ agentId: "opus", match: { channel: "telegram" } },
|
|
462
|
+
],
|
|
463
|
+
}
|
|
464
|
+
```
|
|
465
|
+
|
|
466
|
+
Notes:
|
|
467
|
+
|
|
468
|
+
- If you have multiple accounts for a channel, add `accountId` to the binding (for example `{ channel: "whatsapp", accountId: "personal" }`).
|
|
469
|
+
- To route a single DM/group to Opus while keeping the rest on chat, add a `match.peer` binding for that peer; peer matches always win over channel-wide rules.
|
|
470
|
+
|
|
471
|
+
</Tab>
|
|
472
|
+
<Tab title="Same channel, one peer to Opus">
|
|
473
|
+
Keep WhatsApp on the fast agent, but route one DM to Opus:
|
|
474
|
+
|
|
475
|
+
```json5
|
|
476
|
+
{
|
|
477
|
+
agents: {
|
|
478
|
+
list: [
|
|
479
|
+
{
|
|
480
|
+
id: "chat",
|
|
481
|
+
name: "Everyday",
|
|
482
|
+
workspace: "~/.nodmix/workspace-chat",
|
|
483
|
+
model: "anthropic/claude-sonnet-4-6",
|
|
484
|
+
},
|
|
485
|
+
{
|
|
486
|
+
id: "opus",
|
|
487
|
+
name: "Deep Work",
|
|
488
|
+
workspace: "~/.nodmix/workspace-opus",
|
|
489
|
+
model: "anthropic/claude-opus-4-6",
|
|
490
|
+
},
|
|
491
|
+
],
|
|
492
|
+
},
|
|
493
|
+
bindings: [
|
|
494
|
+
{
|
|
495
|
+
agentId: "opus",
|
|
496
|
+
match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551234567" } },
|
|
497
|
+
},
|
|
498
|
+
{ agentId: "chat", match: { channel: "whatsapp" } },
|
|
499
|
+
],
|
|
500
|
+
}
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
Peer bindings always win, so keep them above the channel-wide rule.
|
|
504
|
+
|
|
505
|
+
</Tab>
|
|
506
|
+
<Tab title="Family agent bound to a WhatsApp group">
|
|
507
|
+
Bind a dedicated family agent to a single WhatsApp group, with mention gating and a tighter tool policy:
|
|
508
|
+
|
|
509
|
+
```json5
|
|
510
|
+
{
|
|
511
|
+
agents: {
|
|
512
|
+
list: [
|
|
513
|
+
{
|
|
514
|
+
id: "family",
|
|
515
|
+
name: "Family",
|
|
516
|
+
workspace: "~/.nodmix/workspace-family",
|
|
517
|
+
identity: { name: "Family Bot" },
|
|
518
|
+
groupChat: {
|
|
519
|
+
mentionPatterns: ["@family", "@familybot", "@Family Bot"],
|
|
520
|
+
},
|
|
521
|
+
sandbox: {
|
|
522
|
+
mode: "all",
|
|
523
|
+
scope: "agent",
|
|
524
|
+
},
|
|
525
|
+
tools: {
|
|
526
|
+
allow: [
|
|
527
|
+
"exec",
|
|
528
|
+
"read",
|
|
529
|
+
"sessions_list",
|
|
530
|
+
"sessions_history",
|
|
531
|
+
"sessions_send",
|
|
532
|
+
"sessions_spawn",
|
|
533
|
+
"session_status",
|
|
534
|
+
],
|
|
535
|
+
deny: ["write", "edit", "apply_patch", "browser", "canvas", "nodes", "cron"],
|
|
536
|
+
},
|
|
537
|
+
},
|
|
538
|
+
],
|
|
539
|
+
},
|
|
540
|
+
bindings: [
|
|
541
|
+
{
|
|
542
|
+
agentId: "family",
|
|
543
|
+
match: {
|
|
544
|
+
channel: "whatsapp",
|
|
545
|
+
peer: { kind: "group", id: "120363999999999999@g.us" },
|
|
546
|
+
},
|
|
547
|
+
},
|
|
548
|
+
],
|
|
549
|
+
}
|
|
550
|
+
```
|
|
551
|
+
|
|
552
|
+
Notes:
|
|
553
|
+
|
|
554
|
+
- Tool allow/deny lists are **tools**, not skills. If a skill needs to run a binary, ensure `exec` is allowed and the binary exists in the sandbox.
|
|
555
|
+
- For stricter gating, set `agents.list[].groupChat.mentionPatterns` and keep group allowlists enabled for the channel.
|
|
556
|
+
|
|
557
|
+
</Tab>
|
|
558
|
+
</Tabs>
|
|
559
|
+
|
|
560
|
+
## Per-agent sandbox and tool configuration
|
|
561
|
+
|
|
562
|
+
Each agent can have its own sandbox and tool restrictions:
|
|
563
|
+
|
|
564
|
+
```js
|
|
565
|
+
{
|
|
566
|
+
agents: {
|
|
567
|
+
list: [
|
|
568
|
+
{
|
|
569
|
+
id: "personal",
|
|
570
|
+
workspace: "~/.nodmix/workspace-personal",
|
|
571
|
+
sandbox: {
|
|
572
|
+
mode: "off", // No sandbox for personal agent
|
|
573
|
+
},
|
|
574
|
+
// No tool restrictions - all tools available
|
|
575
|
+
},
|
|
576
|
+
{
|
|
577
|
+
id: "family",
|
|
578
|
+
workspace: "~/.nodmix/workspace-family",
|
|
579
|
+
sandbox: {
|
|
580
|
+
mode: "all", // Always sandboxed
|
|
581
|
+
scope: "agent", // One container per agent
|
|
582
|
+
docker: {
|
|
583
|
+
// Optional one-time setup after container creation
|
|
584
|
+
setupCommand: "apt-get update && apt-get install -y git curl",
|
|
585
|
+
},
|
|
586
|
+
},
|
|
587
|
+
tools: {
|
|
588
|
+
allow: ["read"], // Only read tool
|
|
589
|
+
deny: ["exec", "write", "edit", "apply_patch"], // Deny others
|
|
590
|
+
},
|
|
591
|
+
},
|
|
592
|
+
],
|
|
593
|
+
},
|
|
594
|
+
}
|
|
595
|
+
```
|
|
596
|
+
|
|
597
|
+
<Note>
|
|
598
|
+
`setupCommand` lives under `sandbox.docker` and runs once on container creation. Per-agent `sandbox.docker.*` overrides are ignored when the resolved scope is `"shared"`.
|
|
599
|
+
</Note>
|
|
600
|
+
|
|
601
|
+
**Benefits:**
|
|
602
|
+
|
|
603
|
+
- **Security isolation**: restrict tools for untrusted agents.
|
|
604
|
+
- **Resource control**: sandbox specific agents while keeping others on host.
|
|
605
|
+
- **Flexible policies**: different permissions per agent.
|
|
606
|
+
|
|
607
|
+
<Note>
|
|
608
|
+
`tools.elevated` is **global** and sender-based; it is not configurable per agent. If you need per-agent boundaries, use `agents.list[].tools` to deny `exec`. For group targeting, use `agents.list[].groupChat.mentionPatterns` so @mentions map cleanly to the intended agent.
|
|
609
|
+
</Note>
|
|
610
|
+
|
|
611
|
+
See [Multi-agent sandbox and tools](/tools/multi-agent-sandbox-tools) for detailed examples.
|
|
612
|
+
|
|
613
|
+
## Related
|
|
614
|
+
|
|
615
|
+
- [ACP agents](/tools/acp-agents) — running external coding harnesses
|
|
616
|
+
- [Channel routing](/channels/channel-routing) — how messages route to agents
|
|
617
|
+
- [Presence](/concepts/presence) — agent presence and availability
|
|
618
|
+
- [Session](/concepts/session) — session isolation and routing
|
|
619
|
+
- [Sub-agents](/tools/subagents) — spawning background agent runs
|