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,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Historical bridge protocol (legacy nodes): TCP JSONL, pairing, scoped RPC"
|
|
3
|
+
read_when:
|
|
4
|
+
- Building or debugging node clients (iOS/Android/macOS node mode)
|
|
5
|
+
- Investigating pairing or bridge auth failures
|
|
6
|
+
- Auditing the node surface exposed by the gateway
|
|
7
|
+
title: "Bridge protocol"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
<Warning>
|
|
11
|
+
The TCP bridge has been **removed**. Current Nodmix builds do not ship the bridge listener and `bridge.*` config keys are no longer in the schema. This page is kept for historical reference only. Use the [Gateway Protocol](/gateway/protocol) for all node/operator clients.
|
|
12
|
+
</Warning>
|
|
13
|
+
|
|
14
|
+
## Why it existed
|
|
15
|
+
|
|
16
|
+
- **Security boundary**: the bridge exposes a small allowlist instead of the
|
|
17
|
+
full gateway API surface.
|
|
18
|
+
- **Pairing + node identity**: node admission is owned by the gateway and tied
|
|
19
|
+
to a per-node token.
|
|
20
|
+
- **Discovery UX**: nodes can discover gateways via Bonjour on LAN, or connect
|
|
21
|
+
directly over a tailnet.
|
|
22
|
+
- **Loopback WS**: the full WS control plane stays local unless tunneled via SSH.
|
|
23
|
+
|
|
24
|
+
## Transport
|
|
25
|
+
|
|
26
|
+
- TCP, one JSON object per line (JSONL).
|
|
27
|
+
- Optional TLS (when `bridge.tls.enabled` is true).
|
|
28
|
+
- Historical default listener port was `18790` (current builds do not start a
|
|
29
|
+
TCP bridge).
|
|
30
|
+
|
|
31
|
+
When TLS is enabled, discovery TXT records include `bridgeTls=1` plus
|
|
32
|
+
`bridgeTlsSha256` as a non-secret hint. Note that Bonjour/mDNS TXT records are
|
|
33
|
+
unauthenticated; clients must not treat the advertised fingerprint as an
|
|
34
|
+
authoritative pin without explicit user intent or other out-of-band verification.
|
|
35
|
+
|
|
36
|
+
## Handshake + pairing
|
|
37
|
+
|
|
38
|
+
1. Client sends `hello` with node metadata + token (if already paired).
|
|
39
|
+
2. If not paired, gateway replies `error` (`NOT_PAIRED`/`UNAUTHORIZED`).
|
|
40
|
+
3. Client sends `pair-request`.
|
|
41
|
+
4. Gateway waits for approval, then sends `pair-ok` and `hello-ok`.
|
|
42
|
+
|
|
43
|
+
Historically, `hello-ok` returned `serverName`; hosted plugin surfaces are now
|
|
44
|
+
advertised through `pluginSurfaceUrls`. Canvas/A2UI uses
|
|
45
|
+
`pluginSurfaceUrls.canvas`; the deprecated `canvasHostUrl` alias is not part of
|
|
46
|
+
the refactored protocol.
|
|
47
|
+
|
|
48
|
+
## Frames
|
|
49
|
+
|
|
50
|
+
Client → Gateway:
|
|
51
|
+
|
|
52
|
+
- `req` / `res`: scoped gateway RPC (chat, sessions, config, health, voicewake, skills.bins)
|
|
53
|
+
- `event`: node signals (voice transcript, agent request, chat subscribe, exec lifecycle)
|
|
54
|
+
|
|
55
|
+
Gateway → Client:
|
|
56
|
+
|
|
57
|
+
- `invoke` / `invoke-res`: node commands (`canvas.*`, `camera.*`, `screen.record`,
|
|
58
|
+
`location.get`, `sms.send`)
|
|
59
|
+
- `event`: chat updates for subscribed sessions
|
|
60
|
+
- `ping` / `pong`: keepalive
|
|
61
|
+
|
|
62
|
+
Legacy allowlist enforcement lived in `src/gateway/server-bridge.ts` (removed).
|
|
63
|
+
|
|
64
|
+
## Exec lifecycle events
|
|
65
|
+
|
|
66
|
+
Nodes can emit `exec.finished` or `exec.denied` events to surface system.run activity.
|
|
67
|
+
These are mapped to system events in the gateway. (Legacy nodes may still emit `exec.started`.)
|
|
68
|
+
|
|
69
|
+
Payload fields (all optional unless noted):
|
|
70
|
+
|
|
71
|
+
- `sessionKey` (required): agent session to receive the system event.
|
|
72
|
+
- `runId`: unique exec id for grouping.
|
|
73
|
+
- `command`: raw or formatted command string.
|
|
74
|
+
- `exitCode`, `timedOut`, `success`, `output`: completion details (finished only).
|
|
75
|
+
- `reason`: denial reason (denied only).
|
|
76
|
+
|
|
77
|
+
## Historical tailnet usage
|
|
78
|
+
|
|
79
|
+
- Bind the bridge to a tailnet IP: `bridge.bind: "tailnet"` in
|
|
80
|
+
`~/.nodmix/nodmix.json` (historical only; `bridge.*` is no longer valid).
|
|
81
|
+
- Clients connect via MagicDNS name or tailnet IP.
|
|
82
|
+
- Bonjour does **not** cross networks; use manual host/port or wide-area DNS-SD
|
|
83
|
+
when needed.
|
|
84
|
+
|
|
85
|
+
## Versioning
|
|
86
|
+
|
|
87
|
+
The bridge was **implicit v1** (no min/max negotiation). This section is
|
|
88
|
+
historical reference only; current node/operator clients use the WebSocket
|
|
89
|
+
[Gateway Protocol](/gateway/protocol).
|
|
90
|
+
|
|
91
|
+
## Related
|
|
92
|
+
|
|
93
|
+
- [Gateway protocol](/gateway/protocol)
|
|
94
|
+
- [Nodes](/nodes)
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "CLI backends: local AI CLI fallback with optional MCP tool bridge"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want a reliable fallback when API providers fail
|
|
5
|
+
- You are running local AI CLIs and want to reuse them
|
|
6
|
+
- You want to understand the MCP loopback bridge for CLI backend tool access
|
|
7
|
+
title: "CLI backends"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
Nodmix can run **local AI CLIs** as a **text-only fallback** when API providers are down,
|
|
11
|
+
rate-limited, or temporarily misbehaving. This is intentionally conservative:
|
|
12
|
+
|
|
13
|
+
- **Nodmix tools are not injected directly**, but backends with `bundleMcp: true`
|
|
14
|
+
can receive gateway tools via a loopback MCP bridge.
|
|
15
|
+
- **JSONL streaming** for CLIs that support it.
|
|
16
|
+
- **Sessions are supported** (so follow-up turns stay coherent).
|
|
17
|
+
- **Images can be passed through** if the CLI accepts image paths.
|
|
18
|
+
|
|
19
|
+
This is designed as a **safety net** rather than a primary path. Use it when you
|
|
20
|
+
want "always works" text responses without relying on external APIs.
|
|
21
|
+
|
|
22
|
+
If you want a full harness runtime with ACP session controls, background tasks,
|
|
23
|
+
thread/conversation binding, and persistent external coding sessions, use
|
|
24
|
+
[ACP Agents](/tools/acp-agents) instead. CLI backends are not ACP.
|
|
25
|
+
|
|
26
|
+
<Tip>
|
|
27
|
+
Building a new backend plugin? Use
|
|
28
|
+
[CLI backend plugins](/plugins/cli-backend-plugins). This page is for users
|
|
29
|
+
configuring and operating an already registered backend.
|
|
30
|
+
</Tip>
|
|
31
|
+
|
|
32
|
+
## Beginner-friendly quick start
|
|
33
|
+
|
|
34
|
+
You can use Claude Code CLI **without any config** (the bundled Anthropic plugin
|
|
35
|
+
registers a default backend):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
nodmix agent --message "hi" --model claude-cli/claude-sonnet-4-6
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
If your gateway runs under launchd/systemd and PATH is minimal, add just the
|
|
42
|
+
command path:
|
|
43
|
+
|
|
44
|
+
```json5
|
|
45
|
+
{
|
|
46
|
+
agents: {
|
|
47
|
+
defaults: {
|
|
48
|
+
cliBackends: {
|
|
49
|
+
"claude-cli": {
|
|
50
|
+
command: "/opt/homebrew/bin/claude",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
That's it. No keys, no extra auth config needed beyond the CLI itself.
|
|
59
|
+
|
|
60
|
+
If you use a bundled CLI backend as the **primary message provider** on a
|
|
61
|
+
gateway host, Nodmix now auto-loads the owning bundled plugin when your config
|
|
62
|
+
explicitly references that backend in a model ref or under
|
|
63
|
+
`agents.defaults.cliBackends`.
|
|
64
|
+
|
|
65
|
+
## Using it as a fallback
|
|
66
|
+
|
|
67
|
+
Add a CLI backend to your fallback list so it only runs when primary models fail:
|
|
68
|
+
|
|
69
|
+
```json5
|
|
70
|
+
{
|
|
71
|
+
agents: {
|
|
72
|
+
defaults: {
|
|
73
|
+
model: {
|
|
74
|
+
primary: "anthropic/claude-opus-4-6",
|
|
75
|
+
fallbacks: ["claude-cli/claude-sonnet-4-6"],
|
|
76
|
+
},
|
|
77
|
+
models: {
|
|
78
|
+
"anthropic/claude-opus-4-6": { alias: "Opus" },
|
|
79
|
+
"claude-cli/claude-sonnet-4-6": {},
|
|
80
|
+
},
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
Notes:
|
|
87
|
+
|
|
88
|
+
- If you use `agents.defaults.models` (allowlist), you must include your CLI backend models there too.
|
|
89
|
+
- If the primary provider fails (auth, rate limits, timeouts), Nodmix will
|
|
90
|
+
try the CLI backend next.
|
|
91
|
+
|
|
92
|
+
## Configuration overview
|
|
93
|
+
|
|
94
|
+
All CLI backends live under:
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
agents.defaults.cliBackends
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
Each entry is keyed by a **provider id** (e.g. `claude-cli`, `my-cli`).
|
|
101
|
+
The provider id becomes the left side of your model ref:
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
<provider>/<model>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Example configuration
|
|
108
|
+
|
|
109
|
+
```json5
|
|
110
|
+
{
|
|
111
|
+
agents: {
|
|
112
|
+
defaults: {
|
|
113
|
+
cliBackends: {
|
|
114
|
+
"my-cli": {
|
|
115
|
+
command: "my-cli",
|
|
116
|
+
args: ["--json"],
|
|
117
|
+
output: "json",
|
|
118
|
+
input: "arg",
|
|
119
|
+
modelArg: "--model",
|
|
120
|
+
modelAliases: {
|
|
121
|
+
"claude-opus-4-6": "opus",
|
|
122
|
+
"claude-sonnet-4-6": "sonnet",
|
|
123
|
+
},
|
|
124
|
+
sessionArg: "--session",
|
|
125
|
+
sessionMode: "existing",
|
|
126
|
+
sessionIdFields: ["session_id", "conversation_id"],
|
|
127
|
+
systemPromptArg: "--system",
|
|
128
|
+
// For CLIs with a dedicated prompt-file flag:
|
|
129
|
+
// systemPromptFileArg: "--system-file",
|
|
130
|
+
// Codex-style CLIs can point at a prompt file instead:
|
|
131
|
+
// systemPromptFileConfigArg: "-c",
|
|
132
|
+
// systemPromptFileConfigKey: "model_instructions_file",
|
|
133
|
+
systemPromptWhen: "first",
|
|
134
|
+
imageArg: "--image",
|
|
135
|
+
imageMode: "repeat",
|
|
136
|
+
// Opt in only if this backend may reseed safe invalidated sessions
|
|
137
|
+
// from bounded raw Nodmix transcript history before compaction.
|
|
138
|
+
reseedFromRawTranscriptWhenUncompacted: true,
|
|
139
|
+
serialize: true,
|
|
140
|
+
},
|
|
141
|
+
},
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## How it works
|
|
148
|
+
|
|
149
|
+
1. **Selects a backend** based on the provider prefix (`claude-cli/...`).
|
|
150
|
+
2. **Builds a system prompt** using the same Nodmix prompt + workspace context.
|
|
151
|
+
3. **Executes the CLI** with a session id (if supported) so history stays consistent.
|
|
152
|
+
The bundled `claude-cli` backend keeps a Claude stdio process alive per
|
|
153
|
+
Nodmix session and sends follow-up turns over stream-json stdin.
|
|
154
|
+
4. **Parses output** (JSON or plain text) and returns the final text.
|
|
155
|
+
5. **Persists session ids** per backend, so follow-ups reuse the same CLI session.
|
|
156
|
+
|
|
157
|
+
<Note>
|
|
158
|
+
The bundled Anthropic `claude-cli` backend is supported again. Anthropic staff
|
|
159
|
+
told us Nodmix-style Claude CLI usage is allowed again, so Nodmix treats
|
|
160
|
+
`claude -p` usage as sanctioned for this integration unless Anthropic publishes
|
|
161
|
+
a new policy.
|
|
162
|
+
</Note>
|
|
163
|
+
|
|
164
|
+
The bundled Anthropic `claude-cli` backend receives the Nodmix skills snapshot
|
|
165
|
+
two ways: the compact Nodmix skills catalog in the appended system prompt, and
|
|
166
|
+
a temporary Claude Code plugin passed with `--plugin-dir`. The plugin contains
|
|
167
|
+
only the eligible skills for that agent/session, so Claude Code's native skill
|
|
168
|
+
resolver sees the same filtered set that Nodmix would otherwise advertise in
|
|
169
|
+
the prompt. Skill env/API key overrides are still applied by Nodmix to the
|
|
170
|
+
child process environment for the run.
|
|
171
|
+
|
|
172
|
+
Claude CLI also has its own noninteractive permission mode. Nodmix maps that
|
|
173
|
+
to the existing exec policy instead of adding Claude-specific config: when the
|
|
174
|
+
effective requested exec policy is YOLO (`tools.exec.security: "full"` and
|
|
175
|
+
`tools.exec.ask: "off"`), Nodmix adds `--permission-mode bypassPermissions`.
|
|
176
|
+
Per-agent `agents.list[].tools.exec` settings override global `tools.exec` for
|
|
177
|
+
that agent. To force a different Claude mode, set explicit raw backend args
|
|
178
|
+
such as `--permission-mode default` or `--permission-mode acceptEdits` under
|
|
179
|
+
`agents.defaults.cliBackends.claude-cli.args` and matching `resumeArgs`.
|
|
180
|
+
|
|
181
|
+
The bundled Anthropic `claude-cli` backend also maps Nodmix `/think` levels
|
|
182
|
+
to Claude Code's native `--effort` flag for non-off levels. `minimal` and
|
|
183
|
+
`low` map to `low`, `adaptive` and `medium` map to `medium`, and `high`,
|
|
184
|
+
`xhigh`, and `max` map directly. Other CLI backends need their owning plugin to
|
|
185
|
+
declare an equivalent argv mapper before `/think` can affect the spawned CLI.
|
|
186
|
+
|
|
187
|
+
Before Nodmix can use the bundled `claude-cli` backend, Claude Code itself
|
|
188
|
+
must already be logged in on the same host:
|
|
189
|
+
|
|
190
|
+
```bash
|
|
191
|
+
claude auth login
|
|
192
|
+
claude auth status --text
|
|
193
|
+
nodmix models auth login --provider anthropic --method cli --set-default
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
Use `agents.defaults.cliBackends.claude-cli.command` only when the `claude`
|
|
197
|
+
binary is not already on `PATH`.
|
|
198
|
+
|
|
199
|
+
## Sessions
|
|
200
|
+
|
|
201
|
+
- If the CLI supports sessions, set `sessionArg` (e.g. `--session-id`) or
|
|
202
|
+
`sessionArgs` (placeholder `{sessionId}`) when the ID needs to be inserted
|
|
203
|
+
into multiple flags.
|
|
204
|
+
- If the CLI uses a **resume subcommand** with different flags, set
|
|
205
|
+
`resumeArgs` (replaces `args` when resuming) and optionally `resumeOutput`
|
|
206
|
+
(for non-JSON resumes).
|
|
207
|
+
- `sessionMode`:
|
|
208
|
+
- `always`: always send a session id (new UUID if none stored).
|
|
209
|
+
- `existing`: only send a session id if one was stored before.
|
|
210
|
+
- `none`: never send a session id.
|
|
211
|
+
- `claude-cli` defaults to `liveSession: "claude-stdio"`, `output: "jsonl"`,
|
|
212
|
+
and `input: "stdin"` so follow-up turns reuse the live Claude process while
|
|
213
|
+
it is active. Warm stdio is the default now, including for custom configs
|
|
214
|
+
that omit transport fields. If the Gateway restarts or the idle process
|
|
215
|
+
exits, Nodmix resumes from the stored Claude session id. Stored session
|
|
216
|
+
ids are verified against an existing readable project transcript before
|
|
217
|
+
resume, so phantom bindings are cleared with `reason=transcript-missing`
|
|
218
|
+
instead of silently starting a fresh Claude CLI session under `--resume`.
|
|
219
|
+
- Claude live sessions keep bounded JSONL output guards. Defaults allow up to
|
|
220
|
+
8 MiB and 20,000 raw JSONL lines per turn. Tool-heavy Claude turns can raise
|
|
221
|
+
them per backend with
|
|
222
|
+
`agents.defaults.cliBackends.claude-cli.reliability.outputLimits.maxTurnRawChars`
|
|
223
|
+
and `maxTurnLines`; Nodmix clamps those settings to 64 MiB and 100,000
|
|
224
|
+
lines.
|
|
225
|
+
- Stored CLI sessions are provider-owned continuity. The implicit daily session
|
|
226
|
+
reset does not cut them; `/reset` and explicit `session.reset` policies still
|
|
227
|
+
do.
|
|
228
|
+
- Fresh CLI sessions normally reseed only from Nodmix's compaction summary
|
|
229
|
+
plus post-compaction tail. To recover short sessions that are invalidated
|
|
230
|
+
before compaction, a backend can opt in with
|
|
231
|
+
`reseedFromRawTranscriptWhenUncompacted: true`. Nodmix still keeps raw
|
|
232
|
+
transcript reseed bounded and limits it to safe invalidations such as missing
|
|
233
|
+
CLI transcripts, system-prompt/MCP changes, or session-expired retry; auth
|
|
234
|
+
profile or credential-epoch changes never reseed raw transcript history.
|
|
235
|
+
|
|
236
|
+
Serialization notes:
|
|
237
|
+
|
|
238
|
+
- `serialize: true` keeps same-lane runs ordered.
|
|
239
|
+
- Most CLIs serialize on one provider lane.
|
|
240
|
+
- Nodmix drops stored CLI session reuse when the selected auth identity changes,
|
|
241
|
+
including a changed auth profile id, static API key, static token, or OAuth
|
|
242
|
+
account identity when the CLI exposes one. OAuth access and refresh token
|
|
243
|
+
rotation does not cut the stored CLI session. If a CLI does not expose a
|
|
244
|
+
stable OAuth account id, Nodmix lets that CLI enforce resume permissions.
|
|
245
|
+
|
|
246
|
+
## Fallback prelude from claude-cli sessions
|
|
247
|
+
|
|
248
|
+
When a `claude-cli` attempt fails over to a non-CLI candidate in
|
|
249
|
+
[`agents.defaults.model.fallbacks`](/concepts/model-failover), Nodmix seeds
|
|
250
|
+
the next attempt with a context prelude harvested from Claude Code's local
|
|
251
|
+
JSONL transcript at `~/.claude/projects/`. Without this seed, the fallback
|
|
252
|
+
provider would start cold because Nodmix's own session transcript is empty
|
|
253
|
+
for `claude-cli` runs.
|
|
254
|
+
|
|
255
|
+
- The prelude prefers the latest `/compact` summary or `compact_boundary`
|
|
256
|
+
marker, then appends the most recent post-boundary turns up to a char
|
|
257
|
+
budget. Pre-boundary turns are dropped because the summary already represents
|
|
258
|
+
them.
|
|
259
|
+
- Tool blocks are coalesced to compact `(tool call: name)` and
|
|
260
|
+
`(tool result: …)` hints to keep the prompt budget honest. The summary is
|
|
261
|
+
labeled `(truncated)` if it overflows.
|
|
262
|
+
- Same-provider `claude-cli` to `claude-cli` fallbacks rely on Claude's own
|
|
263
|
+
`--resume` and skip the prelude.
|
|
264
|
+
- The seed reuses the existing Claude session-file path validation, so
|
|
265
|
+
arbitrary paths cannot be read.
|
|
266
|
+
|
|
267
|
+
## Images (pass-through)
|
|
268
|
+
|
|
269
|
+
If your CLI accepts image paths, set `imageArg`:
|
|
270
|
+
|
|
271
|
+
```json5
|
|
272
|
+
imageArg: "--image",
|
|
273
|
+
imageMode: "repeat"
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
Nodmix will write base64 images to temp files. If `imageArg` is set, those
|
|
277
|
+
paths are passed as CLI args. If `imageArg` is missing, Nodmix appends the
|
|
278
|
+
file paths to the prompt (path injection), which is enough for CLIs that auto-
|
|
279
|
+
load local files from plain paths.
|
|
280
|
+
|
|
281
|
+
## Inputs / outputs
|
|
282
|
+
|
|
283
|
+
- `output: "json"` (default) tries to parse JSON and extract text + session id.
|
|
284
|
+
- For Gemini CLI JSON output, Nodmix reads reply text from `response` and
|
|
285
|
+
usage from `stats` when `usage` is missing or empty.
|
|
286
|
+
- `output: "jsonl"` parses JSONL streams and extracts the final agent message plus session
|
|
287
|
+
identifiers when present.
|
|
288
|
+
- `output: "text"` treats stdout as the final response.
|
|
289
|
+
|
|
290
|
+
Input modes:
|
|
291
|
+
|
|
292
|
+
- `input: "arg"` (default) passes the prompt as the last CLI arg.
|
|
293
|
+
- `input: "stdin"` sends the prompt via stdin.
|
|
294
|
+
- If the prompt is very long and `maxPromptArgChars` is set, stdin is used.
|
|
295
|
+
|
|
296
|
+
## Defaults (plugin-owned)
|
|
297
|
+
|
|
298
|
+
Bundled CLI backend defaults live with their owning plugin. For example,
|
|
299
|
+
Anthropic owns `claude-cli` and Google owns `google-gemini-cli`. OpenAI Codex
|
|
300
|
+
agent runs use the Codex app-server harness through `openai/*`; Nodmix no
|
|
301
|
+
longer registers a bundled `codex-cli` backend.
|
|
302
|
+
|
|
303
|
+
The bundled Anthropic plugin registers a default for `claude-cli`:
|
|
304
|
+
|
|
305
|
+
- `command: "claude"`
|
|
306
|
+
- `args: ["-p","--output-format","stream-json","--include-partial-messages","--verbose", ...]`
|
|
307
|
+
- `output: "jsonl"`
|
|
308
|
+
- `input: "stdin"`
|
|
309
|
+
- `modelArg: "--model"`
|
|
310
|
+
- `sessionMode: "always"`
|
|
311
|
+
|
|
312
|
+
The bundled Google plugin also registers a default for `google-gemini-cli`:
|
|
313
|
+
|
|
314
|
+
- `command: "gemini"`
|
|
315
|
+
- `args: ["--output-format", "json", "--prompt", "{prompt}"]`
|
|
316
|
+
- `resumeArgs: ["--resume", "{sessionId}", "--output-format", "json", "--prompt", "{prompt}"]`
|
|
317
|
+
- `imageArg: "@"`
|
|
318
|
+
- `imagePathScope: "workspace"`
|
|
319
|
+
- `modelArg: "--model"`
|
|
320
|
+
- `sessionMode: "existing"`
|
|
321
|
+
- `sessionIdFields: ["session_id", "sessionId"]`
|
|
322
|
+
|
|
323
|
+
Prerequisite: the local Gemini CLI must be installed and available as
|
|
324
|
+
`gemini` on `PATH` (`brew install gemini-cli` or
|
|
325
|
+
`npm install -g @google/gemini-cli`).
|
|
326
|
+
|
|
327
|
+
Gemini CLI JSON notes:
|
|
328
|
+
|
|
329
|
+
- Reply text is read from the JSON `response` field.
|
|
330
|
+
- Usage falls back to `stats` when `usage` is absent or empty.
|
|
331
|
+
- `stats.cached` is normalized into Nodmix `cacheRead`.
|
|
332
|
+
- If `stats.input` is missing, Nodmix derives input tokens from
|
|
333
|
+
`stats.input_tokens - stats.cached`.
|
|
334
|
+
|
|
335
|
+
Override only if needed (common: absolute `command` path).
|
|
336
|
+
|
|
337
|
+
## Plugin-owned defaults
|
|
338
|
+
|
|
339
|
+
CLI backend defaults are now part of the plugin surface:
|
|
340
|
+
|
|
341
|
+
- Plugins register them with `api.registerCliBackend(...)`.
|
|
342
|
+
- The backend `id` becomes the provider prefix in model refs.
|
|
343
|
+
- User config in `agents.defaults.cliBackends.<id>` still overrides the plugin default.
|
|
344
|
+
- Backend-specific config cleanup stays plugin-owned through the optional
|
|
345
|
+
`normalizeConfig` hook.
|
|
346
|
+
|
|
347
|
+
Plugins that need tiny prompt/message compatibility shims can declare
|
|
348
|
+
bidirectional text transforms without replacing a provider or CLI backend:
|
|
349
|
+
|
|
350
|
+
```typescript
|
|
351
|
+
api.registerTextTransforms({
|
|
352
|
+
input: [
|
|
353
|
+
{ from: /red basket/g, to: "blue basket" },
|
|
354
|
+
{ from: /paper ticket/g, to: "digital ticket" },
|
|
355
|
+
{ from: /left shelf/g, to: "right shelf" },
|
|
356
|
+
],
|
|
357
|
+
output: [
|
|
358
|
+
{ from: /blue basket/g, to: "red basket" },
|
|
359
|
+
{ from: /digital ticket/g, to: "paper ticket" },
|
|
360
|
+
{ from: /right shelf/g, to: "left shelf" },
|
|
361
|
+
],
|
|
362
|
+
});
|
|
363
|
+
```
|
|
364
|
+
|
|
365
|
+
`input` rewrites the system prompt and user prompt passed to the CLI. `output`
|
|
366
|
+
rewrites streamed assistant deltas and parsed final text before Nodmix handles
|
|
367
|
+
its own control markers and channel delivery.
|
|
368
|
+
|
|
369
|
+
For CLIs that emit Claude Code stream-json compatible JSONL, set
|
|
370
|
+
`jsonlDialect: "claude-stream-json"` on that backend's config.
|
|
371
|
+
|
|
372
|
+
## Bundle MCP overlays
|
|
373
|
+
|
|
374
|
+
CLI backends do **not** receive Nodmix tool calls directly, but a backend can
|
|
375
|
+
opt into a generated MCP config overlay with `bundleMcp: true`.
|
|
376
|
+
|
|
377
|
+
Current bundled behavior:
|
|
378
|
+
|
|
379
|
+
- `claude-cli`: generated strict MCP config file
|
|
380
|
+
- `google-gemini-cli`: generated Gemini system settings file
|
|
381
|
+
|
|
382
|
+
When bundle MCP is enabled, Nodmix:
|
|
383
|
+
|
|
384
|
+
- spawns a loopback HTTP MCP server that exposes gateway tools to the CLI process
|
|
385
|
+
- authenticates the bridge with a per-session token (`NODMIX_MCP_TOKEN`)
|
|
386
|
+
- scopes tool access to the current session, account, and channel context
|
|
387
|
+
- loads enabled bundle-MCP servers for the current workspace
|
|
388
|
+
- merges them with any existing backend MCP config/settings shape
|
|
389
|
+
- rewrites the launch config using the backend-owned integration mode from the owning extension
|
|
390
|
+
|
|
391
|
+
If no MCP servers are enabled, Nodmix still injects a strict config when a
|
|
392
|
+
backend opts into bundle MCP so background runs stay isolated.
|
|
393
|
+
|
|
394
|
+
Session-scoped bundled MCP runtimes are cached for reuse within a session, then
|
|
395
|
+
reaped after `mcp.sessionIdleTtlMs` milliseconds of idle time (default 10
|
|
396
|
+
minutes; set `0` to disable). One-shot embedded runs such as auth probes,
|
|
397
|
+
slug generation, and active-memory recall request cleanup at run end so stdio
|
|
398
|
+
children and Streamable HTTP/SSE streams do not outlive the run.
|
|
399
|
+
|
|
400
|
+
## Limitations
|
|
401
|
+
|
|
402
|
+
- **No direct Nodmix tool calls.** Nodmix does not inject tool calls into
|
|
403
|
+
the CLI backend protocol. Backends only see gateway tools when they opt into
|
|
404
|
+
`bundleMcp: true`.
|
|
405
|
+
- **Streaming is backend-specific.** Some backends stream JSONL; others buffer
|
|
406
|
+
until exit.
|
|
407
|
+
- **Structured outputs** depend on the CLI's JSON format.
|
|
408
|
+
|
|
409
|
+
## Troubleshooting
|
|
410
|
+
|
|
411
|
+
- **CLI not found**: set `command` to a full path.
|
|
412
|
+
- **Wrong model name**: use `modelAliases` to map `provider/model` → CLI model.
|
|
413
|
+
- **No session continuity**: ensure `sessionArg` is set and `sessionMode` is not
|
|
414
|
+
`none`.
|
|
415
|
+
- **Images ignored**: set `imageArg` (and verify CLI supports file paths).
|
|
416
|
+
|
|
417
|
+
## Related
|
|
418
|
+
|
|
419
|
+
- [Gateway runbook](/gateway)
|
|
420
|
+
- [Local models](/gateway/local-models)
|