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,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "OAuth in Nodmix: token exchange, storage, and multi-account patterns"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to understand Nodmix OAuth end-to-end
|
|
5
|
+
- You hit token invalidation / logout issues
|
|
6
|
+
- You want Claude CLI or OAuth auth flows
|
|
7
|
+
- You want multiple accounts or profile routing
|
|
8
|
+
title: "OAuth"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
Nodmix supports "subscription auth" via OAuth for providers that offer it
|
|
12
|
+
(notably **OpenAI Codex (ChatGPT OAuth)**). For Anthropic, the practical split
|
|
13
|
+
is now:
|
|
14
|
+
|
|
15
|
+
- **Anthropic API key**: normal Anthropic API billing
|
|
16
|
+
- **Anthropic Claude CLI / subscription auth inside Nodmix**: Anthropic staff
|
|
17
|
+
told us this usage is allowed again
|
|
18
|
+
|
|
19
|
+
OpenAI Codex OAuth is explicitly supported for use in external tools like
|
|
20
|
+
Nodmix. This page explains:
|
|
21
|
+
|
|
22
|
+
For Anthropic in production, API key auth is the safer recommended path.
|
|
23
|
+
|
|
24
|
+
- how the OAuth **token exchange** works (PKCE)
|
|
25
|
+
- where tokens are **stored** (and why)
|
|
26
|
+
- how to handle **multiple accounts** (profiles + per-session overrides)
|
|
27
|
+
|
|
28
|
+
Nodmix also supports **provider plugins** that ship their own OAuth or API-key
|
|
29
|
+
flows. Run them via:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
nodmix models auth login --provider <id>
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## The token sink (why it exists)
|
|
36
|
+
|
|
37
|
+
OAuth providers commonly mint a **new refresh token** during login/refresh flows. Some providers (or OAuth clients) can invalidate older refresh tokens when a new one is issued for the same user/app.
|
|
38
|
+
|
|
39
|
+
Practical symptom:
|
|
40
|
+
|
|
41
|
+
- you log in via Nodmix _and_ via Claude Code / Codex CLI → one of them randomly gets "logged out" later
|
|
42
|
+
|
|
43
|
+
To reduce that, Nodmix treats `auth-profiles.json` as a **token sink**:
|
|
44
|
+
|
|
45
|
+
- the runtime reads credentials from **one place**
|
|
46
|
+
- we can keep multiple profiles and route them deterministically
|
|
47
|
+
- external CLI reuse is provider-specific: Codex CLI can bootstrap an empty
|
|
48
|
+
`openai-codex:default` profile, but once Nodmix has a local OAuth profile,
|
|
49
|
+
the local refresh token is canonical. If that local refresh token is rejected,
|
|
50
|
+
Nodmix can use a usable same-account Codex CLI token as a runtime-only
|
|
51
|
+
fallback; other integrations can remain externally managed and re-read their
|
|
52
|
+
CLI auth store
|
|
53
|
+
- status and startup paths that already know the configured provider set scope
|
|
54
|
+
external CLI discovery to that set, so an unrelated CLI login store is not
|
|
55
|
+
probed for a single-provider setup
|
|
56
|
+
|
|
57
|
+
## Storage (where tokens live)
|
|
58
|
+
|
|
59
|
+
Secrets are stored in agent auth stores:
|
|
60
|
+
|
|
61
|
+
- Auth profiles (OAuth + API keys + optional value-level refs): `~/.nodmix/agents/<agentId>/agent/auth-profiles.json`
|
|
62
|
+
- Legacy compatibility file: `~/.nodmix/agents/<agentId>/agent/auth.json`
|
|
63
|
+
(static `api_key` entries are scrubbed when discovered)
|
|
64
|
+
|
|
65
|
+
Legacy import-only file (still supported, but not the main store):
|
|
66
|
+
|
|
67
|
+
- `~/.nodmix/credentials/oauth.json` (imported into `auth-profiles.json` on first use)
|
|
68
|
+
|
|
69
|
+
All of the above also respect `$NODMIX_STATE_DIR` (state dir override). Full reference: [/gateway/configuration](/gateway/configuration-reference#auth-storage)
|
|
70
|
+
|
|
71
|
+
For static secret refs and runtime snapshot activation behavior, see [Secrets Management](/gateway/secrets).
|
|
72
|
+
|
|
73
|
+
When a secondary agent has no local auth profile, Nodmix uses read-through
|
|
74
|
+
inheritance from the default/main agent store. It does not clone the main
|
|
75
|
+
agent's `auth-profiles.json` on read. OAuth refresh tokens are especially
|
|
76
|
+
sensitive: normal copy flows skip them by default because some providers rotate
|
|
77
|
+
or invalidate refresh tokens after use. Configure a separate OAuth login for an
|
|
78
|
+
agent when it needs an independent account.
|
|
79
|
+
|
|
80
|
+
## Anthropic legacy token compatibility
|
|
81
|
+
|
|
82
|
+
<Warning>
|
|
83
|
+
Anthropic's public Claude Code docs say direct Claude Code use stays within
|
|
84
|
+
Claude subscription limits, and Anthropic staff told us Nodmix-style Claude
|
|
85
|
+
CLI usage is allowed again. Nodmix therefore treats Claude CLI reuse and
|
|
86
|
+
`claude -p` usage as sanctioned for this integration unless Anthropic
|
|
87
|
+
publishes a new policy.
|
|
88
|
+
|
|
89
|
+
For Anthropic's current direct-Claude-Code plan docs, see [Using Claude Code
|
|
90
|
+
with your Pro or Max
|
|
91
|
+
plan](https://support.claude.com/en/articles/11145838-using-claude-code-with-your-pro-or-max-plan)
|
|
92
|
+
and [Using Claude Code with your Team or Enterprise
|
|
93
|
+
plan](https://support.anthropic.com/en/articles/11845131-using-claude-code-with-your-team-or-enterprise-plan/).
|
|
94
|
+
|
|
95
|
+
If you want other subscription-style options in Nodmix, see [OpenAI
|
|
96
|
+
Codex](/providers/openai), [Qwen Cloud Coding
|
|
97
|
+
Plan](/providers/qwen), [MiniMax Coding Plan](/providers/minimax),
|
|
98
|
+
and [Z.AI / GLM Coding Plan](/providers/glm).
|
|
99
|
+
</Warning>
|
|
100
|
+
|
|
101
|
+
Nodmix also exposes Anthropic setup-token as a supported token-auth path, but it now prefers Claude CLI reuse and `claude -p` when available.
|
|
102
|
+
|
|
103
|
+
## Anthropic Claude CLI migration
|
|
104
|
+
|
|
105
|
+
Nodmix supports Anthropic Claude CLI reuse again. If you already have a local
|
|
106
|
+
Claude login on the host, onboarding/configure can reuse it directly.
|
|
107
|
+
|
|
108
|
+
## OAuth exchange (how login works)
|
|
109
|
+
|
|
110
|
+
Nodmix's interactive login flows are implemented in `@earendil-works/pi-ai` and wired into the wizards/commands.
|
|
111
|
+
|
|
112
|
+
### Anthropic setup-token
|
|
113
|
+
|
|
114
|
+
Flow shape:
|
|
115
|
+
|
|
116
|
+
1. start Anthropic setup-token or paste-token from Nodmix
|
|
117
|
+
2. Nodmix stores the resulting Anthropic credential in an auth profile
|
|
118
|
+
3. model selection stays on `anthropic/...`
|
|
119
|
+
4. existing Anthropic auth profiles remain available for rollback/order control
|
|
120
|
+
|
|
121
|
+
### OpenAI Codex (ChatGPT OAuth)
|
|
122
|
+
|
|
123
|
+
OpenAI Codex OAuth is explicitly supported for use outside the Codex CLI, including Nodmix workflows.
|
|
124
|
+
|
|
125
|
+
Flow shape (PKCE):
|
|
126
|
+
|
|
127
|
+
1. generate PKCE verifier/challenge + random `state`
|
|
128
|
+
2. open `https://auth.openai.com/oauth/authorize?...`
|
|
129
|
+
3. try to capture callback on `http://127.0.0.1:1455/auth/callback`
|
|
130
|
+
4. if callback can't bind (or you're remote/headless), paste the redirect URL/code
|
|
131
|
+
5. exchange at `https://auth.openai.com/oauth/token`
|
|
132
|
+
6. extract `accountId` from the access token and store `{ access, refresh, expires, accountId }`
|
|
133
|
+
|
|
134
|
+
Wizard path is `nodmix onboard` → auth choice `openai-codex`.
|
|
135
|
+
|
|
136
|
+
## Refresh + expiry
|
|
137
|
+
|
|
138
|
+
Profiles store an `expires` timestamp.
|
|
139
|
+
|
|
140
|
+
At runtime:
|
|
141
|
+
|
|
142
|
+
- if `expires` is in the future → use the stored access token
|
|
143
|
+
- if expired → refresh (under a file lock) and overwrite the stored credentials
|
|
144
|
+
- if a secondary agent reads an inherited main-agent OAuth profile, refresh
|
|
145
|
+
writes back to the main agent store instead of copying the refresh token into
|
|
146
|
+
the secondary agent store
|
|
147
|
+
- exception: some external CLI credentials stay externally managed; Nodmix
|
|
148
|
+
re-reads those CLI auth stores instead of spending copied refresh tokens.
|
|
149
|
+
Codex CLI bootstrap is intentionally narrower: it seeds an empty
|
|
150
|
+
`openai-codex:default` profile, then Nodmix-owned refreshes keep the local
|
|
151
|
+
profile canonical. If the local Codex refresh fails and Codex CLI has a
|
|
152
|
+
usable token for the same account, Nodmix may use that token for the current
|
|
153
|
+
runtime request without writing it back to `auth-profiles.json`.
|
|
154
|
+
|
|
155
|
+
The refresh flow is automatic; you generally don't need to manage tokens manually.
|
|
156
|
+
|
|
157
|
+
## Multiple accounts (profiles) + routing
|
|
158
|
+
|
|
159
|
+
Two patterns:
|
|
160
|
+
|
|
161
|
+
### 1) Preferred: separate agents
|
|
162
|
+
|
|
163
|
+
If you want "personal" and "work" to never interact, use isolated agents (separate sessions + credentials + workspace):
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
nodmix agents add work
|
|
167
|
+
nodmix agents add personal
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
Then configure auth per-agent (wizard) and route chats to the right agent.
|
|
171
|
+
|
|
172
|
+
### 2) Advanced: multiple profiles in one agent
|
|
173
|
+
|
|
174
|
+
`auth-profiles.json` supports multiple profile IDs for the same provider.
|
|
175
|
+
|
|
176
|
+
Pick which profile is used:
|
|
177
|
+
|
|
178
|
+
- globally via config ordering (`auth.order`)
|
|
179
|
+
- per-session via `/model ...@<profileId>`
|
|
180
|
+
|
|
181
|
+
Example (session override):
|
|
182
|
+
|
|
183
|
+
- `/model Opus@anthropic:work`
|
|
184
|
+
|
|
185
|
+
How to see what profile IDs exist:
|
|
186
|
+
|
|
187
|
+
- `nodmix channels list --json` (shows `auth[]`)
|
|
188
|
+
|
|
189
|
+
Related docs:
|
|
190
|
+
|
|
191
|
+
- [Model failover](/concepts/model-failover) (rotation + cooldown rules)
|
|
192
|
+
- [Slash commands](/tools/slash-commands) (command surface)
|
|
193
|
+
|
|
194
|
+
## Related
|
|
195
|
+
|
|
196
|
+
- [Authentication](/gateway/authentication) - model provider auth overview
|
|
197
|
+
- [Secrets](/gateway/secrets) - credential storage and SecretRef
|
|
198
|
+
- [Configuration Reference](/gateway/configuration-reference#auth-storage) - auth config keys
|
|
@@ -0,0 +1,323 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Public Nodmix App SDK for external apps, scripts, dashboards, CI jobs, and IDE extensions"
|
|
3
|
+
title: "Nodmix App SDK"
|
|
4
|
+
sidebarTitle: "App SDK"
|
|
5
|
+
read_when:
|
|
6
|
+
- You are building an external app, script, dashboard, CI job, or IDE extension that talks to Nodmix
|
|
7
|
+
- You are choosing between the App SDK and the Plugin SDK
|
|
8
|
+
- You are integrating with Gateway agent runs, sessions, events, approvals, models, or tools
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
The **Nodmix App SDK** is the public client API for apps outside the
|
|
12
|
+
Nodmix process. Use `@nodmix/sdk` when a script, dashboard, CI job, IDE
|
|
13
|
+
extension, or other external app wants to connect to the Gateway, start agent
|
|
14
|
+
runs, stream events, wait for results, cancel work, or inspect Gateway
|
|
15
|
+
resources.
|
|
16
|
+
|
|
17
|
+
<Note>
|
|
18
|
+
The App SDK is different from the [Plugin SDK](/plugins/sdk-overview).
|
|
19
|
+
`@nodmix/sdk` talks to the Gateway from outside Nodmix.
|
|
20
|
+
`nodmix/plugin-sdk/*` is only for plugins that run inside Nodmix and
|
|
21
|
+
register providers, channels, tools, hooks, or trusted runtimes.
|
|
22
|
+
</Note>
|
|
23
|
+
|
|
24
|
+
## What ships today
|
|
25
|
+
|
|
26
|
+
`@nodmix/sdk` ships with:
|
|
27
|
+
|
|
28
|
+
| Surface | Status | What it does |
|
|
29
|
+
| ------------------------- | ------- | --------------------------------------------------------------------------------- |
|
|
30
|
+
| `Nodmix` | Ready | Main client entry point. Owns transport, connection, requests, and events. |
|
|
31
|
+
| `GatewayClientTransport` | Ready | WebSocket transport backed by the Gateway client. |
|
|
32
|
+
| `oc.agents` | Ready | Lists, creates, updates, deletes, and gets agent handles. |
|
|
33
|
+
| `Agent.run()` | Ready | Starts a Gateway `agent` run and returns a `Run`. |
|
|
34
|
+
| `oc.runs` | Ready | Creates, gets, waits for, cancels, and streams runs. |
|
|
35
|
+
| `Run.events()` | Ready | Streams normalized per-run events with replay for fast runs. |
|
|
36
|
+
| `Run.wait()` | Ready | Calls `agent.wait` and returns a stable `RunResult`. |
|
|
37
|
+
| `Run.cancel()` | Ready | Calls `sessions.abort` by run id, with session key when available. |
|
|
38
|
+
| `oc.sessions` | Ready | Creates, resolves, sends to, patches, compacts, and gets session handles. |
|
|
39
|
+
| `Session.send()` | Ready | Calls `sessions.send` and returns a `Run`. |
|
|
40
|
+
| `oc.tasks` | Ready | Lists, reads, and cancels Gateway task ledger entries. |
|
|
41
|
+
| `oc.models` | Ready | Calls `models.list` and the current `models.authStatus` status RPC. |
|
|
42
|
+
| `oc.tools` | Ready | Lists, scopes, and invokes Gateway tools through the policy pipeline. |
|
|
43
|
+
| `oc.artifacts` | Ready | Lists, gets, and downloads Gateway transcript artifacts. |
|
|
44
|
+
| `oc.approvals` | Ready | Lists and resolves exec approvals through Gateway approval RPCs. |
|
|
45
|
+
| `oc.environments` | Partial | Lists Gateway-local and node environment candidates; create/delete are not wired. |
|
|
46
|
+
| `oc.rawEvents()` | Ready | Exposes raw Gateway events for advanced consumers. |
|
|
47
|
+
| `normalizeGatewayEvent()` | Ready | Converts raw Gateway events into the stable SDK event shape. |
|
|
48
|
+
|
|
49
|
+
The SDK also exports the core types used by those surfaces:
|
|
50
|
+
`AgentRunParams`, `RunResult`, `RunStatus`, `NodmixEvent`,
|
|
51
|
+
`NodmixEventType`, `GatewayEvent`, `NodmixTransport`,
|
|
52
|
+
`GatewayRequestOptions`, `SessionCreateParams`, `SessionSendParams`,
|
|
53
|
+
`ArtifactSummary`, `ArtifactQuery`, `ArtifactsListResult`,
|
|
54
|
+
`ArtifactsGetResult`, `ArtifactsDownloadResult`,
|
|
55
|
+
`TaskSummary`, `TaskStatus`, `TasksListParams`, `TasksListResult`,
|
|
56
|
+
`TasksGetResult`, `TasksCancelResult`, `RuntimeSelection`,
|
|
57
|
+
`EnvironmentSelection`, `WorkspaceSelection`, `ApprovalMode`, and related
|
|
58
|
+
result types.
|
|
59
|
+
|
|
60
|
+
## Connect to a Gateway
|
|
61
|
+
|
|
62
|
+
Create a client with an explicit Gateway URL, or inject a custom transport for
|
|
63
|
+
tests and embedded app runtimes.
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
import { Nodmix } from "@nodmix/sdk";
|
|
67
|
+
|
|
68
|
+
const oc = new Nodmix({
|
|
69
|
+
url: "ws://127.0.0.1:18789",
|
|
70
|
+
token: process.env.NODMIX_GATEWAY_TOKEN,
|
|
71
|
+
requestTimeoutMs: 30_000,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
await oc.connect();
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
`new Nodmix({ gateway: "ws://..." })` is equivalent to `url`. The
|
|
78
|
+
`gateway: "auto"` option is accepted by the constructor, but automatic Gateway
|
|
79
|
+
discovery is not a separate SDK feature yet; pass `url` when the app does not
|
|
80
|
+
already know how to discover the Gateway.
|
|
81
|
+
|
|
82
|
+
For tests, pass an object that implements `NodmixTransport`:
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
const oc = new Nodmix({
|
|
86
|
+
transport: {
|
|
87
|
+
async request(method, params) {
|
|
88
|
+
return { method, params };
|
|
89
|
+
},
|
|
90
|
+
async *events() {},
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Run an agent
|
|
96
|
+
|
|
97
|
+
Use `oc.agents.get(id)` when the app wants an agent handle, then call
|
|
98
|
+
`agent.run()`.
|
|
99
|
+
|
|
100
|
+
```typescript
|
|
101
|
+
const agent = await oc.agents.get("main");
|
|
102
|
+
|
|
103
|
+
const run = await agent.run({
|
|
104
|
+
input: "Review this pull request and suggest the smallest safe fix.",
|
|
105
|
+
model: "openai/gpt-5.5",
|
|
106
|
+
sessionKey: "main",
|
|
107
|
+
timeoutMs: 30_000,
|
|
108
|
+
});
|
|
109
|
+
|
|
110
|
+
for await (const event of run.events()) {
|
|
111
|
+
const data = event.data as { delta?: unknown };
|
|
112
|
+
if (event.type === "assistant.delta" && typeof data.delta === "string") {
|
|
113
|
+
process.stdout.write(data.delta);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const result = await run.wait({ timeoutMs: 120_000 });
|
|
118
|
+
console.log(result.status);
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Provider-qualified model refs such as `openai/gpt-5.5` are split into Gateway
|
|
122
|
+
`provider` and `model` overrides. `timeoutMs` stays milliseconds in the SDK and
|
|
123
|
+
is converted to Gateway timeout seconds for the `agent` RPC.
|
|
124
|
+
|
|
125
|
+
`run.wait()` uses the Gateway `agent.wait` RPC. A wait deadline that expires
|
|
126
|
+
while the run is still active returns `status: "accepted"` instead of pretending
|
|
127
|
+
the run itself timed out. Runtime timeouts, aborted runs, and cancelled runs are
|
|
128
|
+
normalized into `timed_out` or `cancelled`.
|
|
129
|
+
|
|
130
|
+
## Create and reuse sessions
|
|
131
|
+
|
|
132
|
+
Use sessions when the app wants durable transcript state.
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
const session = await oc.sessions.create({
|
|
136
|
+
agentId: "main",
|
|
137
|
+
label: "release-review",
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
const run = await session.send("Prepare release notes from the current diff.");
|
|
141
|
+
await run.wait();
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
`Session.send()` calls `sessions.send` and returns a `Run`. Session handles also
|
|
145
|
+
support:
|
|
146
|
+
|
|
147
|
+
```typescript
|
|
148
|
+
await session.abort(run.id);
|
|
149
|
+
await session.patch({ label: "renamed-session" });
|
|
150
|
+
await session.compact({ maxLines: 200 });
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Stream events
|
|
154
|
+
|
|
155
|
+
The SDK normalizes raw Gateway events into a stable `NodmixEvent` envelope:
|
|
156
|
+
|
|
157
|
+
```typescript
|
|
158
|
+
type NodmixEvent = {
|
|
159
|
+
version: 1;
|
|
160
|
+
id: string;
|
|
161
|
+
ts: number;
|
|
162
|
+
type: NodmixEventType;
|
|
163
|
+
runId?: string;
|
|
164
|
+
sessionId?: string;
|
|
165
|
+
sessionKey?: string;
|
|
166
|
+
taskId?: string;
|
|
167
|
+
agentId?: string;
|
|
168
|
+
data: unknown;
|
|
169
|
+
raw?: GatewayEvent;
|
|
170
|
+
};
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Common event types include:
|
|
174
|
+
|
|
175
|
+
| Event type | Source Gateway event |
|
|
176
|
+
| --------------------- | ------------------------------------------- |
|
|
177
|
+
| `run.started` | `agent` lifecycle start |
|
|
178
|
+
| `run.completed` | `agent` lifecycle end |
|
|
179
|
+
| `run.failed` | `agent` lifecycle error |
|
|
180
|
+
| `run.cancelled` | Aborted/cancelled lifecycle end |
|
|
181
|
+
| `run.timed_out` | Timeout lifecycle end |
|
|
182
|
+
| `assistant.delta` | Assistant streaming delta |
|
|
183
|
+
| `assistant.message` | Assistant message |
|
|
184
|
+
| `thinking.delta` | Thinking or plan stream |
|
|
185
|
+
| `tool.call.started` | Tool/item/command start |
|
|
186
|
+
| `tool.call.delta` | Tool/item/command update |
|
|
187
|
+
| `tool.call.completed` | Tool/item/command completion |
|
|
188
|
+
| `tool.call.failed` | Tool/item/command failure or blocked status |
|
|
189
|
+
| `approval.requested` | Exec or plugin approval request |
|
|
190
|
+
| `approval.resolved` | Exec or plugin approval resolution |
|
|
191
|
+
| `session.created` | `sessions.changed` create |
|
|
192
|
+
| `session.updated` | `sessions.changed` update |
|
|
193
|
+
| `session.compacted` | `sessions.changed` compaction |
|
|
194
|
+
| `task.updated` | Task update events |
|
|
195
|
+
| `artifact.updated` | Patch stream events |
|
|
196
|
+
| `raw` | Any event without a stable SDK mapping yet |
|
|
197
|
+
|
|
198
|
+
`Run.events()` filters events to one run id and replays already-seen events for
|
|
199
|
+
fast runs. That means the documented flow is safe:
|
|
200
|
+
|
|
201
|
+
```typescript
|
|
202
|
+
const run = await agent.run("Summarize the latest session.");
|
|
203
|
+
|
|
204
|
+
for await (const event of run.events()) {
|
|
205
|
+
if (event.type === "run.completed") {
|
|
206
|
+
break;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
For app-wide streams, use `oc.events()`. For raw Gateway frames, use
|
|
212
|
+
`oc.rawEvents()`.
|
|
213
|
+
|
|
214
|
+
## Models, tools, artifacts, and approvals
|
|
215
|
+
|
|
216
|
+
Model helpers map to current Gateway methods:
|
|
217
|
+
|
|
218
|
+
```typescript
|
|
219
|
+
await oc.models.list();
|
|
220
|
+
await oc.models.status({ probe: false }); // calls models.authStatus
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Tool helpers expose the Gateway catalog, effective tool view, and direct
|
|
224
|
+
Gateway tool invocation. `oc.tools.invoke()` returns a typed envelope instead
|
|
225
|
+
of throwing for policy or approval refusals.
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
await oc.tools.list();
|
|
229
|
+
await oc.tools.effective({ sessionKey: "main" });
|
|
230
|
+
await oc.tools.invoke("tool-name", {
|
|
231
|
+
args: { input: "value" },
|
|
232
|
+
sessionKey: "main",
|
|
233
|
+
confirm: false,
|
|
234
|
+
idempotencyKey: "tool-call-1",
|
|
235
|
+
});
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Artifact helpers expose the Gateway artifact projection for session, run, or
|
|
239
|
+
task context. Each call requires one explicit `sessionKey`, `runId`, or
|
|
240
|
+
`taskId` scope:
|
|
241
|
+
|
|
242
|
+
```typescript
|
|
243
|
+
const { artifacts } = await oc.artifacts.list({ sessionKey: "main" });
|
|
244
|
+
const first = artifacts[0];
|
|
245
|
+
|
|
246
|
+
if (first) {
|
|
247
|
+
const { artifact } = await oc.artifacts.get(first.id, { sessionKey: "main" });
|
|
248
|
+
const download = await oc.artifacts.download(artifact.id, { sessionKey: "main" });
|
|
249
|
+
console.log(download.encoding, download.url);
|
|
250
|
+
}
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
Approval helpers use the exec approval RPCs:
|
|
254
|
+
|
|
255
|
+
```typescript
|
|
256
|
+
const approvals = await oc.approvals.list();
|
|
257
|
+
await oc.approvals.respond("approval-id", { decision: "approve" });
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
Task helpers use the durable task ledger that also backs `nodmix tasks`:
|
|
261
|
+
|
|
262
|
+
```typescript
|
|
263
|
+
const tasks = await oc.tasks.list({ status: "running", sessionKey: "agent:main:main" });
|
|
264
|
+
const task = await oc.tasks.get(tasks.tasks[0].id);
|
|
265
|
+
await oc.tasks.cancel(task.task.id, { reason: "user stopped task" });
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Environment helpers expose read-only Gateway-local and node discovery:
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
const { environments } = await oc.environments.list();
|
|
272
|
+
await oc.environments.status(environments[0].id);
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
## Explicitly unsupported today
|
|
276
|
+
|
|
277
|
+
The SDK includes names for the product model we want, but it does not silently
|
|
278
|
+
pretend Gateway RPCs exist. These calls currently throw explicit unsupported
|
|
279
|
+
errors:
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
await oc.environments.create({});
|
|
283
|
+
await oc.environments.delete("environment-id");
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
Per-run `workspace`, `runtime`, `environment`, and `approvals` fields are typed
|
|
287
|
+
as future shape, but the current Gateway does not support those overrides on
|
|
288
|
+
the `agent` RPC. If callers pass them, the SDK throws before submitting the run
|
|
289
|
+
so work does not accidentally execute with default workspace, runtime,
|
|
290
|
+
environment, or approval behavior.
|
|
291
|
+
|
|
292
|
+
## App SDK vs Plugin SDK
|
|
293
|
+
|
|
294
|
+
Use the App SDK when code lives outside Nodmix:
|
|
295
|
+
|
|
296
|
+
- Node scripts that start or observe agent runs
|
|
297
|
+
- CI jobs that call a Gateway
|
|
298
|
+
- dashboards and admin panels
|
|
299
|
+
- IDE extensions
|
|
300
|
+
- external bridges that do not need to become channel plugins
|
|
301
|
+
- integration tests with fake or real Gateway transports
|
|
302
|
+
|
|
303
|
+
Use the Plugin SDK when code runs inside Nodmix:
|
|
304
|
+
|
|
305
|
+
- provider plugins
|
|
306
|
+
- channel plugins
|
|
307
|
+
- tool or lifecycle hooks
|
|
308
|
+
- agent harness plugins
|
|
309
|
+
- trusted runtime helpers
|
|
310
|
+
|
|
311
|
+
App SDK code should import from `@nodmix/sdk`. Plugin code should import from
|
|
312
|
+
documented `nodmix/plugin-sdk/*` subpaths. Do not mix the two contracts.
|
|
313
|
+
|
|
314
|
+
## Related
|
|
315
|
+
|
|
316
|
+
- [Nodmix App SDK API design](/reference/nodmix-sdk-api-design)
|
|
317
|
+
- [Gateway RPC reference](/reference/rpc)
|
|
318
|
+
- [Agent loop](/concepts/agent-loop)
|
|
319
|
+
- [Agent runtimes](/concepts/agent-runtimes)
|
|
320
|
+
- [Sessions](/concepts/session)
|
|
321
|
+
- [Background tasks](/automation/tasks)
|
|
322
|
+
- [ACP agents](/tools/acp-agents)
|
|
323
|
+
- [Plugin SDK overview](/plugins/sdk-overview)
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Run parallel specialist agents without clogging shared model and tool capacity"
|
|
3
|
+
title: "Parallel specialist lanes"
|
|
4
|
+
sidebarTitle: "Specialist lanes"
|
|
5
|
+
read_when:
|
|
6
|
+
- You route group chats to dedicated agents
|
|
7
|
+
- You want parallel work without one long task blocking every chat
|
|
8
|
+
- You are designing a multi-agent operations setup
|
|
9
|
+
status: active
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
Parallel specialist lanes let one Gateway route different chats or rooms to
|
|
13
|
+
different agents, while keeping the user experience fast. The trick is to treat
|
|
14
|
+
parallelism as a scarce-resource design problem, not just as "more agents".
|
|
15
|
+
|
|
16
|
+
## First principles
|
|
17
|
+
|
|
18
|
+
A specialist lane only improves throughput when it reduces contention for the
|
|
19
|
+
real bottlenecks:
|
|
20
|
+
|
|
21
|
+
- **Session locks**: only one run should mutate a given session at a time.
|
|
22
|
+
- **Global model capacity**: all visible chat runs still share provider limits.
|
|
23
|
+
- **Tool capacity**: shell, browser, network, and repository work can be slower
|
|
24
|
+
than the model turn itself.
|
|
25
|
+
- **Context budget**: long transcripts make every future turn slower and less
|
|
26
|
+
focused.
|
|
27
|
+
- **Ownership ambiguity**: duplicate agents doing the same job waste capacity.
|
|
28
|
+
|
|
29
|
+
Nodmix already serializes runs per session and caps global parallelism through
|
|
30
|
+
the [command queue](/concepts/queue). Specialist lanes add policy on top:
|
|
31
|
+
which agent owns which work, what stays in chat, and what becomes background
|
|
32
|
+
work.
|
|
33
|
+
|
|
34
|
+
## Recommended rollout
|
|
35
|
+
|
|
36
|
+
### Phase 1: lane contracts + background heavy work
|
|
37
|
+
|
|
38
|
+
Give every lane a written contract in its workspace and system prompt:
|
|
39
|
+
|
|
40
|
+
- **Purpose**: the work this lane owns.
|
|
41
|
+
- **Non-goals**: work it should hand off instead of attempting.
|
|
42
|
+
- **Chat budget**: quick answers stay in chat; long tasks should acknowledge
|
|
43
|
+
briefly, then run in a background sub-agent or task.
|
|
44
|
+
- **Handoff rule**: when another lane owns the work, say where it should go and
|
|
45
|
+
provide a compact handoff summary.
|
|
46
|
+
- **Tool-risk rule**: prefer the smallest tool surface that can do the job.
|
|
47
|
+
|
|
48
|
+
This is the cheapest phase and fixes most clogging: one coding job no longer
|
|
49
|
+
turns the research lane into molasses, and each chat keeps its own context clean.
|
|
50
|
+
|
|
51
|
+
### Phase 2: priority and concurrency controls
|
|
52
|
+
|
|
53
|
+
Tune queue and model capacity around the business value of each lane:
|
|
54
|
+
|
|
55
|
+
```json5
|
|
56
|
+
{
|
|
57
|
+
agents: {
|
|
58
|
+
defaults: {
|
|
59
|
+
maxConcurrent: 4,
|
|
60
|
+
subagents: { maxConcurrent: 8, delegationMode: "prefer" },
|
|
61
|
+
},
|
|
62
|
+
},
|
|
63
|
+
messages: {
|
|
64
|
+
queue: {
|
|
65
|
+
mode: "collect",
|
|
66
|
+
debounceMs: 1000,
|
|
67
|
+
cap: 20,
|
|
68
|
+
drop: "summarize",
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Use direct/personal chats and production-ops agents for high-priority work. Let
|
|
75
|
+
research, drafting, and batch coding move to background tasks when the system is
|
|
76
|
+
busy.
|
|
77
|
+
|
|
78
|
+
### Phase 3: coordinator / traffic controller
|
|
79
|
+
|
|
80
|
+
Add a small coordinator pattern once multiple lanes are active:
|
|
81
|
+
|
|
82
|
+
- Track active lane tasks and owners.
|
|
83
|
+
- Detect duplicate requests across groups.
|
|
84
|
+
- Route handoff summaries between lanes.
|
|
85
|
+
- Surface only blockers, completed results, and decisions the human must make.
|
|
86
|
+
|
|
87
|
+
Do not start here. A coordinator without lane contracts just coordinates chaos.
|
|
88
|
+
|
|
89
|
+
## Minimal lane contract template
|
|
90
|
+
|
|
91
|
+
```md
|
|
92
|
+
# Lane contract
|
|
93
|
+
|
|
94
|
+
## Owns
|
|
95
|
+
|
|
96
|
+
- <job this lane is responsible for>
|
|
97
|
+
|
|
98
|
+
## Does not own
|
|
99
|
+
|
|
100
|
+
- <work to hand off>
|
|
101
|
+
|
|
102
|
+
## Chat budget
|
|
103
|
+
|
|
104
|
+
- Answer quick questions directly.
|
|
105
|
+
- For multi-step, slow, or tool-heavy work: acknowledge briefly, spawn/background
|
|
106
|
+
the work, then return the result when complete.
|
|
107
|
+
|
|
108
|
+
## Handoff
|
|
109
|
+
|
|
110
|
+
If another lane owns the request, reply with:
|
|
111
|
+
|
|
112
|
+
- target lane
|
|
113
|
+
- objective
|
|
114
|
+
- relevant context
|
|
115
|
+
- exact next action
|
|
116
|
+
|
|
117
|
+
## Tool posture
|
|
118
|
+
|
|
119
|
+
Use the smallest tool surface that can complete the task. Avoid broad shell or
|
|
120
|
+
network work unless this lane explicitly owns it.
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
## Related
|
|
124
|
+
|
|
125
|
+
- [Multi-agent routing](/concepts/multi-agent)
|
|
126
|
+
- [Command queue](/concepts/queue)
|
|
127
|
+
- [Sub-agents](/tools/subagents)
|