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,355 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Run Nodmix on local LLMs (LM Studio, vLLM, LiteLLM, custom OpenAI endpoints)"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to serve models from your own GPU box
|
|
5
|
+
- You are wiring LM Studio or an OpenAI-compatible proxy
|
|
6
|
+
- You need the safest local model guidance
|
|
7
|
+
title: "Local models"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Local models are doable. They also raise the bar on hardware, context size, and prompt-injection defense — small or aggressively quantized cards truncate context and leak safety. This page is the opinionated guide for higher-end local stacks and custom OpenAI-compatible local servers. For lowest-friction onboarding, start with [LM Studio](/providers/lmstudio) or [Ollama](/providers/ollama) and `nodmix onboard`.
|
|
11
|
+
|
|
12
|
+
For local servers that should start only when a selected model needs them, see
|
|
13
|
+
[Local model services](/gateway/local-model-services).
|
|
14
|
+
|
|
15
|
+
## Hardware floor
|
|
16
|
+
|
|
17
|
+
Aim high: **≥2 maxed-out Mac Studios or an equivalent GPU rig (~$30k+)** for a comfortable agent loop. A single **24 GB** GPU works only for lighter prompts at higher latency. Always run the **largest / full-size variant you can host**; small or heavily quantized checkpoints raise prompt-injection risk (see [Security](/gateway/security)).
|
|
18
|
+
|
|
19
|
+
## Pick a backend
|
|
20
|
+
|
|
21
|
+
| Backend | Use when |
|
|
22
|
+
| ---------------------------------------------------- | --------------------------------------------------------------------------- |
|
|
23
|
+
| [ds4](/providers/ds4) | Local DeepSeek V4 Flash on macOS Metal with OpenAI-compatible tool calls |
|
|
24
|
+
| [LM Studio](/providers/lmstudio) | First-time local setup, GUI loader, native Responses API |
|
|
25
|
+
| LiteLLM / OAI-proxy / custom OpenAI-compatible proxy | You front another model API and need Nodmix to treat it as OpenAI |
|
|
26
|
+
| MLX / vLLM / SGLang | High-throughput self-hosted serving with an OpenAI-compatible HTTP endpoint |
|
|
27
|
+
| [Ollama](/providers/ollama) | CLI workflow, model library, hands-off systemd service |
|
|
28
|
+
|
|
29
|
+
Use Responses API (`api: "openai-responses"`) when the backend supports it (LM Studio does). Otherwise stick to Chat Completions (`api: "openai-completions"`).
|
|
30
|
+
|
|
31
|
+
<Warning>
|
|
32
|
+
**WSL2 + Ollama + NVIDIA/CUDA users:** The official Ollama Linux installer enables a systemd service with `Restart=always`. On WSL2 GPU setups, autostart can reload the last model during boot and pin host memory. If your WSL2 VM repeatedly restarts after enabling Ollama, see [WSL2 crash loop](/providers/ollama#wsl2-crash-loop-repeated-reboots).
|
|
33
|
+
</Warning>
|
|
34
|
+
|
|
35
|
+
## Recommended: LM Studio + large local model (Responses API)
|
|
36
|
+
|
|
37
|
+
Best current local stack. Load a large model in LM Studio (for example, a full-size Qwen, DeepSeek, or Llama build), enable the local server (default `http://127.0.0.1:1234`), and use Responses API to keep reasoning separate from final text.
|
|
38
|
+
|
|
39
|
+
```json5
|
|
40
|
+
{
|
|
41
|
+
agents: {
|
|
42
|
+
defaults: {
|
|
43
|
+
model: { primary: "lmstudio/my-local-model" },
|
|
44
|
+
models: {
|
|
45
|
+
"anthropic/claude-opus-4-6": { alias: "Opus" },
|
|
46
|
+
"lmstudio/my-local-model": { alias: "Local" },
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
models: {
|
|
51
|
+
mode: "merge",
|
|
52
|
+
providers: {
|
|
53
|
+
lmstudio: {
|
|
54
|
+
baseUrl: "http://127.0.0.1:1234/v1",
|
|
55
|
+
apiKey: "lmstudio",
|
|
56
|
+
api: "openai-responses",
|
|
57
|
+
models: [
|
|
58
|
+
{
|
|
59
|
+
id: "my-local-model",
|
|
60
|
+
name: "Local Model",
|
|
61
|
+
reasoning: false,
|
|
62
|
+
input: ["text"],
|
|
63
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
64
|
+
contextWindow: 196608,
|
|
65
|
+
maxTokens: 8192,
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Setup checklist**
|
|
75
|
+
|
|
76
|
+
- Install LM Studio: [https://lmstudio.ai](https://lmstudio.ai)
|
|
77
|
+
- In LM Studio, download the **largest model build available** (avoid "small"/heavily quantized variants), start the server, confirm `http://127.0.0.1:1234/v1/models` lists it.
|
|
78
|
+
- Replace `my-local-model` with the actual model ID shown in LM Studio.
|
|
79
|
+
- Keep the model loaded; cold-load adds startup latency.
|
|
80
|
+
- Adjust `contextWindow`/`maxTokens` if your LM Studio build differs.
|
|
81
|
+
- For WhatsApp, stick to Responses API so only final text is sent.
|
|
82
|
+
|
|
83
|
+
Keep hosted models configured even when running local; use `models.mode: "merge"` so fallbacks stay available.
|
|
84
|
+
|
|
85
|
+
### Hybrid config: hosted primary, local fallback
|
|
86
|
+
|
|
87
|
+
```json5
|
|
88
|
+
{
|
|
89
|
+
agents: {
|
|
90
|
+
defaults: {
|
|
91
|
+
model: {
|
|
92
|
+
primary: "anthropic/claude-sonnet-4-6",
|
|
93
|
+
fallbacks: ["lmstudio/my-local-model", "anthropic/claude-opus-4-6"],
|
|
94
|
+
},
|
|
95
|
+
models: {
|
|
96
|
+
"anthropic/claude-sonnet-4-6": { alias: "Sonnet" },
|
|
97
|
+
"lmstudio/my-local-model": { alias: "Local" },
|
|
98
|
+
"anthropic/claude-opus-4-6": { alias: "Opus" },
|
|
99
|
+
},
|
|
100
|
+
},
|
|
101
|
+
},
|
|
102
|
+
models: {
|
|
103
|
+
mode: "merge",
|
|
104
|
+
providers: {
|
|
105
|
+
lmstudio: {
|
|
106
|
+
baseUrl: "http://127.0.0.1:1234/v1",
|
|
107
|
+
apiKey: "lmstudio",
|
|
108
|
+
api: "openai-responses",
|
|
109
|
+
models: [
|
|
110
|
+
{
|
|
111
|
+
id: "my-local-model",
|
|
112
|
+
name: "Local Model",
|
|
113
|
+
reasoning: false,
|
|
114
|
+
input: ["text"],
|
|
115
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
116
|
+
contextWindow: 196608,
|
|
117
|
+
maxTokens: 8192,
|
|
118
|
+
},
|
|
119
|
+
],
|
|
120
|
+
},
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
}
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Local-first with hosted safety net
|
|
127
|
+
|
|
128
|
+
Swap the primary and fallback order; keep the same providers block and `models.mode: "merge"` so you can fall back to Sonnet or Opus when the local box is down.
|
|
129
|
+
|
|
130
|
+
### Regional hosting / data routing
|
|
131
|
+
|
|
132
|
+
- Hosted MiniMax/Kimi/GLM variants also exist on OpenRouter with region-pinned endpoints (e.g., US-hosted). Pick the regional variant there to keep traffic in your chosen jurisdiction while still using `models.mode: "merge"` for Anthropic/OpenAI fallbacks.
|
|
133
|
+
- Local-only remains the strongest privacy path; hosted regional routing is the middle ground when you need provider features but want control over data flow.
|
|
134
|
+
|
|
135
|
+
## Other OpenAI-compatible local proxies
|
|
136
|
+
|
|
137
|
+
MLX (`mlx_lm.server`), vLLM, SGLang, LiteLLM, OAI-proxy, or custom
|
|
138
|
+
gateways work if they expose an OpenAI-style `/v1/chat/completions`
|
|
139
|
+
endpoint. Use the Chat Completions adapter unless the backend explicitly
|
|
140
|
+
documents `/v1/responses` support. Replace the provider block above with your
|
|
141
|
+
endpoint and model ID:
|
|
142
|
+
|
|
143
|
+
```json5
|
|
144
|
+
{
|
|
145
|
+
agents: {
|
|
146
|
+
defaults: {
|
|
147
|
+
model: { primary: "local/my-local-model" },
|
|
148
|
+
},
|
|
149
|
+
},
|
|
150
|
+
models: {
|
|
151
|
+
mode: "merge",
|
|
152
|
+
providers: {
|
|
153
|
+
local: {
|
|
154
|
+
baseUrl: "http://127.0.0.1:8000/v1",
|
|
155
|
+
apiKey: "sk-local",
|
|
156
|
+
api: "openai-completions",
|
|
157
|
+
timeoutSeconds: 300,
|
|
158
|
+
models: [
|
|
159
|
+
{
|
|
160
|
+
id: "my-local-model",
|
|
161
|
+
name: "Local Model",
|
|
162
|
+
reasoning: false,
|
|
163
|
+
input: ["text"],
|
|
164
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
165
|
+
contextWindow: 120000,
|
|
166
|
+
maxTokens: 8192,
|
|
167
|
+
},
|
|
168
|
+
],
|
|
169
|
+
},
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
If `api` is omitted on a custom provider with a `baseUrl`, Nodmix defaults to
|
|
176
|
+
`openai-completions`. Custom/local provider entries trust their exact configured
|
|
177
|
+
`baseUrl` origin for guarded model requests, including loopback, LAN, tailnet,
|
|
178
|
+
and private DNS hosts. Requests to other private origins still need
|
|
179
|
+
`request.allowPrivateNetwork: true`; metadata/link-local origins remain blocked
|
|
180
|
+
without explicit opt-in. Set it to `false` to opt out of exact-origin trust.
|
|
181
|
+
|
|
182
|
+
The `models.providers.<id>.models[].id` value is provider-local. Do not
|
|
183
|
+
include the provider prefix there. For example, an MLX server started with
|
|
184
|
+
`mlx_lm.server --model mlx-community/Qwen3-30B-A3B-6bit` should use this
|
|
185
|
+
catalog id and model ref:
|
|
186
|
+
|
|
187
|
+
- `models.providers.mlx.models[].id: "mlx-community/Qwen3-30B-A3B-6bit"`
|
|
188
|
+
- `agents.defaults.model.primary: "mlx/mlx-community/Qwen3-30B-A3B-6bit"`
|
|
189
|
+
|
|
190
|
+
Set `input: ["text", "image"]` on local or proxied vision models so image
|
|
191
|
+
attachments are injected into agent turns. Interactive custom-provider
|
|
192
|
+
onboarding infers common vision model IDs and asks only for unknown names.
|
|
193
|
+
Non-interactive onboarding uses the same inference; use `--custom-image-input`
|
|
194
|
+
for unknown vision IDs or `--custom-text-input` when a known-looking model is
|
|
195
|
+
text-only behind your endpoint.
|
|
196
|
+
|
|
197
|
+
Keep `models.mode: "merge"` so hosted models stay available as fallbacks.
|
|
198
|
+
Use `models.providers.<id>.timeoutSeconds` for slow local or remote model
|
|
199
|
+
servers before raising `agents.defaults.timeoutSeconds`. The provider timeout
|
|
200
|
+
applies only to model HTTP requests, including connect, headers, body streaming,
|
|
201
|
+
and the total guarded-fetch abort. If the agent or run timeout is lower, raise
|
|
202
|
+
that ceiling too because provider timeouts cannot extend the whole agent run.
|
|
203
|
+
|
|
204
|
+
<Note>
|
|
205
|
+
For custom OpenAI-compatible providers, persisting a non-secret local marker such as `apiKey: "ollama-local"` is accepted when `baseUrl` resolves to loopback, a private LAN, `.local`, or a bare hostname. Nodmix treats it as a valid local credential instead of reporting a missing key. Use a real value for any provider that accepts a public hostname.
|
|
206
|
+
</Note>
|
|
207
|
+
|
|
208
|
+
Behavior note for local/proxied `/v1` backends:
|
|
209
|
+
|
|
210
|
+
- Nodmix treats these as proxy-style OpenAI-compatible routes, not native
|
|
211
|
+
OpenAI endpoints
|
|
212
|
+
- native OpenAI-only request shaping does not apply here: no
|
|
213
|
+
`service_tier`, no Responses `store`, no OpenAI reasoning-compat payload
|
|
214
|
+
shaping, and no prompt-cache hints
|
|
215
|
+
- hidden Nodmix attribution headers (`originator`, `version`, `User-Agent`)
|
|
216
|
+
are not injected on these custom proxy URLs
|
|
217
|
+
|
|
218
|
+
Compatibility notes for stricter OpenAI-compatible backends:
|
|
219
|
+
|
|
220
|
+
- Some servers accept only string `messages[].content` on Chat Completions, not
|
|
221
|
+
structured content-part arrays. Set
|
|
222
|
+
`models.providers.<provider>.models[].compat.requiresStringContent: true` for
|
|
223
|
+
those endpoints.
|
|
224
|
+
- Some local models emit standalone bracketed tool requests as text, such as
|
|
225
|
+
`[tool_name]` followed by JSON and `[END_TOOL_REQUEST]`. Nodmix promotes
|
|
226
|
+
those into real tool calls only when the name exactly matches a registered
|
|
227
|
+
tool for the turn; otherwise the block is treated as unsupported text and is
|
|
228
|
+
hidden from user-visible replies.
|
|
229
|
+
- If a model emits JSON, XML, or ReAct-style text that looks like a tool call
|
|
230
|
+
but the provider did not emit a structured invocation, Nodmix leaves it as
|
|
231
|
+
text and logs a warning with the run id, provider/model, detected pattern, and
|
|
232
|
+
tool name when available. Treat that as provider/model tool-call
|
|
233
|
+
incompatibility, not a completed tool run.
|
|
234
|
+
- If tools appear as assistant text instead of running, for example raw JSON,
|
|
235
|
+
XML, ReAct syntax, or an empty `tool_calls` array in the provider response,
|
|
236
|
+
first verify the server is using a tool-call-capable chat template/parser. For
|
|
237
|
+
OpenAI-compatible Chat Completions backends whose parser works only when tool
|
|
238
|
+
use is forced, set a per-model request override instead of relying on text
|
|
239
|
+
parsing:
|
|
240
|
+
|
|
241
|
+
```json5
|
|
242
|
+
{
|
|
243
|
+
agents: {
|
|
244
|
+
defaults: {
|
|
245
|
+
models: {
|
|
246
|
+
"local/my-local-model": {
|
|
247
|
+
params: {
|
|
248
|
+
extra_body: {
|
|
249
|
+
tool_choice: "required",
|
|
250
|
+
},
|
|
251
|
+
},
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
}
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
Use this only for models/sessions where every normal turn should call a tool.
|
|
260
|
+
It overrides Nodmix's default proxy value of `tool_choice: "auto"`.
|
|
261
|
+
Replace `local/my-local-model` with the exact provider/model ref shown by
|
|
262
|
+
`nodmix models list`.
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
nodmix config set agents.defaults.models '{"local/my-local-model":{"params":{"extra_body":{"tool_choice":"required"}}}}' --strict-json --merge
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
- If a custom OpenAI-compatible model accepts OpenAI reasoning efforts beyond
|
|
269
|
+
the built-in profile, declare them on the model compat block. Adding `"xhigh"`
|
|
270
|
+
here makes `/think xhigh`, session pickers, Gateway validation, and `llm-task`
|
|
271
|
+
validation expose the level for that configured provider/model ref:
|
|
272
|
+
|
|
273
|
+
```json5
|
|
274
|
+
{
|
|
275
|
+
models: {
|
|
276
|
+
providers: {
|
|
277
|
+
local: {
|
|
278
|
+
baseUrl: "http://127.0.0.1:8000/v1",
|
|
279
|
+
apiKey: "sk-local",
|
|
280
|
+
api: "openai-responses",
|
|
281
|
+
models: [
|
|
282
|
+
{
|
|
283
|
+
id: "gpt-5.4",
|
|
284
|
+
name: "GPT 5.4 via local proxy",
|
|
285
|
+
reasoning: true,
|
|
286
|
+
input: ["text"],
|
|
287
|
+
cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
|
|
288
|
+
contextWindow: 196608,
|
|
289
|
+
maxTokens: 8192,
|
|
290
|
+
compat: {
|
|
291
|
+
supportedReasoningEfforts: ["low", "medium", "high", "xhigh"],
|
|
292
|
+
reasoningEffortMap: { xhigh: "xhigh" },
|
|
293
|
+
},
|
|
294
|
+
},
|
|
295
|
+
],
|
|
296
|
+
},
|
|
297
|
+
},
|
|
298
|
+
},
|
|
299
|
+
}
|
|
300
|
+
```
|
|
301
|
+
|
|
302
|
+
## Smaller or stricter backends
|
|
303
|
+
|
|
304
|
+
If the model loads cleanly but full agent turns misbehave, work top-down — confirm transport first, then narrow the surface.
|
|
305
|
+
|
|
306
|
+
1. **Confirm the local model itself responds.** No tools, no agent context:
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
nodmix infer model run --local --model <provider/model> --prompt "Reply with exactly: pong" --json
|
|
310
|
+
```
|
|
311
|
+
|
|
312
|
+
2. **Confirm Gateway routing.** Sends only the supplied prompt — skips transcript, AGENTS bootstrap, context-engine assembly, tools, and bundled MCP servers, but still exercises Gateway routing, auth, and provider selection:
|
|
313
|
+
|
|
314
|
+
```bash
|
|
315
|
+
nodmix infer model run --gateway --model <provider/model> --prompt "Reply with exactly: pong" --json
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
3. **Try lean mode.** If both probes pass but real agent turns fail with malformed tool calls or oversized prompts, enable `agents.defaults.experimental.localModelLean: true`. It drops the three heaviest default tools (`browser`, `cron`, `message`) so the prompt shape is smaller and less brittle. See [Experimental Features → Local model lean mode](/concepts/experimental-features#local-model-lean-mode) for the full explanation, when to use it, and how to confirm it is on.
|
|
319
|
+
|
|
320
|
+
4. **Disable tools entirely as a last resort.** If lean mode is not enough, set `models.providers.<provider>.models[].compat.supportsTools: false` for that model entry. The agent will then operate without tool calls on that model.
|
|
321
|
+
|
|
322
|
+
5. **Past that, the bottleneck is upstream.** If the backend still fails only on larger Nodmix runs after lean mode and `supportsTools: false`, the remaining issue is usually upstream model or server capacity — context window, GPU memory, kv-cache eviction, or a backend bug. It is not Nodmix's transport layer at that point.
|
|
323
|
+
|
|
324
|
+
## Troubleshooting
|
|
325
|
+
|
|
326
|
+
- Gateway can reach the proxy? `curl http://127.0.0.1:1234/v1/models`.
|
|
327
|
+
- LM Studio model unloaded? Reload; cold start is a common "hanging" cause.
|
|
328
|
+
- Local server says `terminated`, `ECONNRESET`, or closes the stream mid-turn?
|
|
329
|
+
Nodmix records a low-cardinality `model.call.error.failureKind` plus the
|
|
330
|
+
Nodmix process RSS/heap snapshot in diagnostics. For LM Studio/Ollama
|
|
331
|
+
memory pressure, match that timestamp against the server log or macOS crash /
|
|
332
|
+
jetsam log to confirm whether the model server was killed.
|
|
333
|
+
- Nodmix derives context-window preflight thresholds from the detected model window, or from the uncapped model window when `agents.defaults.contextTokens` lowers the effective window. It warns below 20% with an **8k** floor. Hard blocks use the 10% threshold with a **4k** floor, capped to the effective context window so oversized model metadata cannot reject an otherwise valid user cap. If you hit that preflight, raise the server/model context limit or choose a larger model.
|
|
334
|
+
- Context errors? Lower `contextWindow` or raise your server limit.
|
|
335
|
+
- OpenAI-compatible server returns `messages[].content ... expected a string`?
|
|
336
|
+
Add `compat.requiresStringContent: true` on that model entry.
|
|
337
|
+
- OpenAI-compatible server returns `validation.keys` or says message entries only allow `role` and `content`?
|
|
338
|
+
Add `compat.strictMessageKeys: true` on that model entry.
|
|
339
|
+
- Direct tiny `/v1/chat/completions` calls work, but `nodmix infer model run --local`
|
|
340
|
+
fails on Gemma or another local model? Check the provider URL, model ref, auth
|
|
341
|
+
marker, and server logs first; local `model run` does not include agent tools.
|
|
342
|
+
If local `model run` succeeds but larger agent turns fail, reduce the agent
|
|
343
|
+
tool surface with `localModelLean` or `compat.supportsTools: false`.
|
|
344
|
+
- Tool calls show up as raw JSON/XML/ReAct text, or the provider returns an
|
|
345
|
+
empty `tool_calls` array? Do not add a proxy that blindly converts assistant
|
|
346
|
+
text into tool execution. Fix the server chat template/parser first. If the
|
|
347
|
+
model only works when tool use is forced, add the per-model
|
|
348
|
+
`params.extra_body.tool_choice: "required"` override above and use that model
|
|
349
|
+
entry only for sessions where a tool call is expected on every turn.
|
|
350
|
+
- Safety: local models skip provider-side filters; keep agents narrow and compaction on to limit prompt injection blast radius.
|
|
351
|
+
|
|
352
|
+
## Related
|
|
353
|
+
|
|
354
|
+
- [Configuration reference](/gateway/configuration-reference)
|
|
355
|
+
- [Model failover](/concepts/model-failover)
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Logging surfaces, file logs, WS log styles, and console formatting"
|
|
3
|
+
read_when:
|
|
4
|
+
- Changing logging output or formats
|
|
5
|
+
- Debugging CLI or gateway output
|
|
6
|
+
title: "Gateway logging"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Logging
|
|
10
|
+
|
|
11
|
+
For a user-facing overview (CLI + Control UI + config), see [/logging](/logging).
|
|
12
|
+
|
|
13
|
+
Nodmix has two log "surfaces":
|
|
14
|
+
|
|
15
|
+
- **Console output** (what you see in the terminal / Debug UI).
|
|
16
|
+
- **File logs** (JSON lines) written by the gateway logger.
|
|
17
|
+
|
|
18
|
+
At startup, the Gateway logs the resolved default agent model together with the
|
|
19
|
+
mode defaults that affect new sessions, for example:
|
|
20
|
+
|
|
21
|
+
```text
|
|
22
|
+
agent model: openai-codex/gpt-5.5 (thinking=medium, fast=on)
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
`thinking` comes from the default agent, model params, or global agent default;
|
|
26
|
+
when it is unset, the startup summary shows `medium`. `fast` comes from the
|
|
27
|
+
default agent or model `fastMode` params.
|
|
28
|
+
|
|
29
|
+
## File-based logger
|
|
30
|
+
|
|
31
|
+
- Default rolling log file is under `/tmp/nodmix/` (one file per day): `nodmix-YYYY-MM-DD.log`
|
|
32
|
+
- Date uses the gateway host's local timezone.
|
|
33
|
+
- Active log files rotate at `logging.maxFileBytes` (default: 100 MB), keeping
|
|
34
|
+
up to five numbered archives and continuing to write a fresh active file.
|
|
35
|
+
- The log file path and level can be configured via `~/.nodmix/nodmix.json`:
|
|
36
|
+
- `logging.file`
|
|
37
|
+
- `logging.level`
|
|
38
|
+
|
|
39
|
+
The file format is one JSON object per line.
|
|
40
|
+
|
|
41
|
+
Talk, realtime voice, and managed-room code paths use the shared file logger for
|
|
42
|
+
bounded lifecycle records. These records are intended for operational debugging
|
|
43
|
+
and OTLP log export; transcript text, audio payloads, turn ids, call ids, and
|
|
44
|
+
provider item ids are not copied into the log record.
|
|
45
|
+
|
|
46
|
+
The Control UI Logs tab tails this file via the gateway (`logs.tail`).
|
|
47
|
+
CLI can do the same:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
nodmix logs --follow
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Verbose vs. log levels**
|
|
54
|
+
|
|
55
|
+
- **File logs** are controlled exclusively by `logging.level`.
|
|
56
|
+
- `--verbose` only affects **console verbosity** (and WS log style); it does **not**
|
|
57
|
+
raise the file log level.
|
|
58
|
+
- To capture verbose-only details in file logs, set `logging.level` to `debug` or
|
|
59
|
+
`trace`.
|
|
60
|
+
- Trace logging also includes diagnostic timing summaries for selected hot paths,
|
|
61
|
+
such as plugin tool factory preparation. See
|
|
62
|
+
[/tools/plugin#slow-plugin-tool-setup](/tools/plugin#slow-plugin-tool-setup).
|
|
63
|
+
|
|
64
|
+
## Console capture
|
|
65
|
+
|
|
66
|
+
The CLI captures `console.log/info/warn/error/debug/trace` and writes them to file logs,
|
|
67
|
+
while still printing to stdout/stderr.
|
|
68
|
+
|
|
69
|
+
You can tune console verbosity independently via:
|
|
70
|
+
|
|
71
|
+
- `logging.consoleLevel` (default `info`)
|
|
72
|
+
- `logging.consoleStyle` (`pretty` | `compact` | `json`)
|
|
73
|
+
|
|
74
|
+
## Redaction
|
|
75
|
+
|
|
76
|
+
Nodmix can mask sensitive tokens before log or transcript output leaves the
|
|
77
|
+
process. This logging redaction policy is applied at console, file-log, OTLP
|
|
78
|
+
log-record, and session transcript text sinks, so matching secret values are
|
|
79
|
+
masked before JSONL lines or messages are written to disk.
|
|
80
|
+
|
|
81
|
+
- `logging.redactSensitive`: `off` | `tools` (default: `tools`)
|
|
82
|
+
- `logging.redactPatterns`: array of regex strings (overrides defaults)
|
|
83
|
+
- Use raw regex strings (auto `gi`), or `/pattern/flags` if you need custom flags.
|
|
84
|
+
- Matches are masked by keeping the first 6 + last 4 chars (length >= 18), otherwise `***`.
|
|
85
|
+
- Defaults cover common key assignments, CLI flags, JSON fields, bearer headers, PEM blocks, popular token prefixes, and payment credential field names such as card number, CVC/CVV, shared payment token, and payment credential.
|
|
86
|
+
|
|
87
|
+
Some safety boundaries always redact regardless of `logging.redactSensitive`.
|
|
88
|
+
That includes Control UI tool-call events, `sessions_history` tool output,
|
|
89
|
+
diagnostics support exports, provider error observations, exec approval command
|
|
90
|
+
display, and Gateway WebSocket protocol logs. These surfaces may still use
|
|
91
|
+
`logging.redactPatterns` as additional patterns, but `redactSensitive: "off"`
|
|
92
|
+
does not make them emit raw secrets.
|
|
93
|
+
|
|
94
|
+
## Gateway WebSocket logs
|
|
95
|
+
|
|
96
|
+
The gateway prints WebSocket protocol logs in two modes:
|
|
97
|
+
|
|
98
|
+
- **Normal mode (no `--verbose`)**: only "interesting" RPC results are printed:
|
|
99
|
+
- errors (`ok=false`)
|
|
100
|
+
- slow calls (default threshold: `>= 50ms`)
|
|
101
|
+
- parse errors
|
|
102
|
+
- **Verbose mode (`--verbose`)**: prints all WS request/response traffic.
|
|
103
|
+
|
|
104
|
+
### WS log style
|
|
105
|
+
|
|
106
|
+
`nodmix gateway` supports a per-gateway style switch:
|
|
107
|
+
|
|
108
|
+
- `--ws-log auto` (default): normal mode is optimized; verbose mode uses compact output
|
|
109
|
+
- `--ws-log compact`: compact output (paired request/response) when verbose
|
|
110
|
+
- `--ws-log full`: full per-frame output when verbose
|
|
111
|
+
- `--compact`: alias for `--ws-log compact`
|
|
112
|
+
|
|
113
|
+
Examples:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# optimized (only errors/slow)
|
|
117
|
+
nodmix gateway
|
|
118
|
+
|
|
119
|
+
# show all WS traffic (paired)
|
|
120
|
+
nodmix gateway --verbose --ws-log compact
|
|
121
|
+
|
|
122
|
+
# show all WS traffic (full meta)
|
|
123
|
+
nodmix gateway --verbose --ws-log full
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Console formatting (subsystem logging)
|
|
127
|
+
|
|
128
|
+
The console formatter is **TTY-aware** and prints consistent, prefixed lines.
|
|
129
|
+
Subsystem loggers keep output grouped and scannable.
|
|
130
|
+
|
|
131
|
+
Behavior:
|
|
132
|
+
|
|
133
|
+
- **Subsystem prefixes** on every line (e.g. `[gateway]`, `[canvas]`, `[tailscale]`)
|
|
134
|
+
- **Subsystem colors** (stable per subsystem) plus level coloring
|
|
135
|
+
- **Color when output is a TTY or the environment looks like a rich terminal** (`TERM`/`COLORTERM`/`TERM_PROGRAM`), respects `NO_COLOR`
|
|
136
|
+
- **Shortened subsystem prefixes**: drops leading `gateway/` + `channels/`, keeps last 2 segments (e.g. `whatsapp/outbound`)
|
|
137
|
+
- **Sub-loggers by subsystem** (auto prefix + structured field `{ subsystem }`)
|
|
138
|
+
- **`logRaw()`** for QR/UX output (no prefix, no formatting)
|
|
139
|
+
- **Console styles** (e.g. `pretty | compact | json`)
|
|
140
|
+
- **Console log level** separate from file log level (file keeps full detail when `logging.level` is set to `debug`/`trace`)
|
|
141
|
+
- **WhatsApp message bodies** are logged at `debug` (use `--verbose` to see them)
|
|
142
|
+
|
|
143
|
+
This keeps existing file logs stable while making interactive output scannable.
|
|
144
|
+
|
|
145
|
+
## Related
|
|
146
|
+
|
|
147
|
+
- [Logging](/logging)
|
|
148
|
+
- [OpenTelemetry export](/gateway/opentelemetry)
|
|
149
|
+
- [Diagnostics export](/gateway/diagnostics)
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Run multiple Nodmix Gateways on one host (isolation, ports, and profiles)"
|
|
3
|
+
read_when:
|
|
4
|
+
- Running more than one Gateway on the same machine
|
|
5
|
+
- You need isolated config/state/ports per Gateway
|
|
6
|
+
title: "Multiple gateways"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Most setups should use one Gateway because a single Gateway can handle multiple messaging connections and agents. If you need stronger isolation or redundancy (e.g., a rescue bot), run separate Gateways with isolated profiles/ports.
|
|
10
|
+
|
|
11
|
+
## Best recommended setup
|
|
12
|
+
|
|
13
|
+
For most users, the simplest rescue-bot setup is:
|
|
14
|
+
|
|
15
|
+
- keep the main bot on the default profile
|
|
16
|
+
- run the rescue bot on `--profile rescue`
|
|
17
|
+
- use a completely separate Telegram bot for the rescue account
|
|
18
|
+
- keep the rescue bot on a different base port such as `19789`
|
|
19
|
+
|
|
20
|
+
This keeps the rescue bot isolated from the main bot so it can debug or apply
|
|
21
|
+
config changes if the primary bot is down. Leave at least 20 ports between
|
|
22
|
+
base ports so the derived browser/canvas/CDP ports never collide.
|
|
23
|
+
|
|
24
|
+
## Rescue-Bot Quickstart
|
|
25
|
+
|
|
26
|
+
Use this as the default path unless you have a strong reason to do something
|
|
27
|
+
else:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# Rescue bot (separate Telegram bot, separate profile, port 19789)
|
|
31
|
+
nodmix --profile rescue onboard
|
|
32
|
+
nodmix --profile rescue gateway install --port 19789
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
If your main bot is already running, that is usually all you need.
|
|
36
|
+
|
|
37
|
+
During `nodmix --profile rescue onboard`:
|
|
38
|
+
|
|
39
|
+
- use the separate Telegram bot token
|
|
40
|
+
- keep the `rescue` profile
|
|
41
|
+
- use a base port at least 20 higher than the main bot
|
|
42
|
+
- accept the default rescue workspace unless you already manage one yourself
|
|
43
|
+
|
|
44
|
+
If onboarding already installed the rescue service for you, the final
|
|
45
|
+
`gateway install` is not needed.
|
|
46
|
+
|
|
47
|
+
## Why this works
|
|
48
|
+
|
|
49
|
+
The rescue bot stays independent because it has its own:
|
|
50
|
+
|
|
51
|
+
- profile/config
|
|
52
|
+
- state directory
|
|
53
|
+
- workspace
|
|
54
|
+
- base port (plus derived ports)
|
|
55
|
+
- Telegram bot token
|
|
56
|
+
|
|
57
|
+
For most setups, use a completely separate Telegram bot for the rescue profile:
|
|
58
|
+
|
|
59
|
+
- easy to keep operator-only
|
|
60
|
+
- separate bot token and identity
|
|
61
|
+
- independent from the main bot's channel/app install
|
|
62
|
+
- simple DM-based recovery path when the main bot is broken
|
|
63
|
+
|
|
64
|
+
## What `--profile rescue onboard` Changes
|
|
65
|
+
|
|
66
|
+
`nodmix --profile rescue onboard` uses the normal onboarding flow, but it
|
|
67
|
+
writes everything into a separate profile.
|
|
68
|
+
|
|
69
|
+
In practice, that means the rescue bot gets its own:
|
|
70
|
+
|
|
71
|
+
- config file
|
|
72
|
+
- state directory
|
|
73
|
+
- workspace (by default `~/.nodmix/workspace-rescue`)
|
|
74
|
+
- managed service name
|
|
75
|
+
|
|
76
|
+
The prompts are otherwise the same as normal onboarding.
|
|
77
|
+
|
|
78
|
+
## General multi-gateway setup
|
|
79
|
+
|
|
80
|
+
The rescue-bot layout above is the easiest default, but the same isolation
|
|
81
|
+
pattern works for any pair or group of Gateways on one host.
|
|
82
|
+
|
|
83
|
+
For a more general setup, give each extra Gateway its own named profile and its
|
|
84
|
+
own base port:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
# main (default profile)
|
|
88
|
+
nodmix setup
|
|
89
|
+
nodmix gateway --port 18789
|
|
90
|
+
|
|
91
|
+
# extra gateway
|
|
92
|
+
nodmix --profile ops setup
|
|
93
|
+
nodmix --profile ops gateway --port 19789
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
If you want both Gateways to use named profiles, that also works:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
nodmix --profile main setup
|
|
100
|
+
nodmix --profile main gateway --port 18789
|
|
101
|
+
|
|
102
|
+
nodmix --profile ops setup
|
|
103
|
+
nodmix --profile ops gateway --port 19789
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Services follow the same pattern:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
nodmix gateway install
|
|
110
|
+
nodmix --profile ops gateway install --port 19789
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Use the rescue-bot quickstart when you want a fallback operator lane. Use the
|
|
114
|
+
general profile pattern when you want multiple long-lived Gateways for
|
|
115
|
+
different channels, tenants, workspaces, or operational roles.
|
|
116
|
+
|
|
117
|
+
## Isolation checklist
|
|
118
|
+
|
|
119
|
+
Keep these unique per Gateway instance:
|
|
120
|
+
|
|
121
|
+
- `NODMIX_CONFIG_PATH` — per-instance config file
|
|
122
|
+
- `NODMIX_STATE_DIR` — per-instance sessions, creds, caches
|
|
123
|
+
- `agents.defaults.workspace` — per-instance workspace root
|
|
124
|
+
- `gateway.port` (or `--port`) — unique per instance
|
|
125
|
+
- derived browser/canvas/CDP ports
|
|
126
|
+
|
|
127
|
+
If these are shared, you will hit config races and port conflicts.
|
|
128
|
+
|
|
129
|
+
## Port mapping (derived)
|
|
130
|
+
|
|
131
|
+
Base port = `gateway.port` (or `NODMIX_GATEWAY_PORT` / `--port`).
|
|
132
|
+
|
|
133
|
+
- browser control service port = base + 2 (loopback only)
|
|
134
|
+
- canvas host is served on the Gateway HTTP server (same port as `gateway.port`)
|
|
135
|
+
- Browser profile CDP ports auto-allocate from `browser.controlPort + 9 .. + 108`
|
|
136
|
+
|
|
137
|
+
If you override any of these in config or env, you must keep them unique per instance.
|
|
138
|
+
|
|
139
|
+
## Browser/CDP notes (common footgun)
|
|
140
|
+
|
|
141
|
+
- Do **not** pin `browser.cdpUrl` to the same values on multiple instances.
|
|
142
|
+
- Each instance needs its own browser control port and CDP range (derived from its gateway port).
|
|
143
|
+
- If you need explicit CDP ports, set `browser.profiles.<name>.cdpPort` per instance.
|
|
144
|
+
- Remote Chrome: use `browser.profiles.<name>.cdpUrl` (per profile, per instance).
|
|
145
|
+
|
|
146
|
+
## Manual env example
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
NODMIX_CONFIG_PATH=~/.nodmix/main.json \
|
|
150
|
+
NODMIX_STATE_DIR=~/.nodmix \
|
|
151
|
+
nodmix gateway --port 18789
|
|
152
|
+
|
|
153
|
+
NODMIX_CONFIG_PATH=~/.nodmix/rescue.json \
|
|
154
|
+
NODMIX_STATE_DIR=~/.nodmix-rescue \
|
|
155
|
+
nodmix gateway --port 19789
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Quick checks
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
nodmix gateway status --deep
|
|
162
|
+
nodmix --profile rescue gateway status --deep
|
|
163
|
+
nodmix --profile rescue gateway probe
|
|
164
|
+
nodmix status
|
|
165
|
+
nodmix --profile rescue status
|
|
166
|
+
nodmix --profile rescue browser status
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Interpretation:
|
|
170
|
+
|
|
171
|
+
- `gateway status --deep` helps catch stale launchd/systemd/schtasks services from older installs.
|
|
172
|
+
- `gateway probe` warning text such as `multiple reachable gateways detected` is expected only when you intentionally run more than one isolated gateway.
|
|
173
|
+
|
|
174
|
+
## Related
|
|
175
|
+
|
|
176
|
+
- [Gateway runbook](/gateway)
|
|
177
|
+
- [Gateway lock](/gateway/gateway-lock)
|
|
178
|
+
- [Configuration](/gateway/configuration)
|