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,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "macOS Skills settings UI and gateway-backed status"
|
|
3
|
+
read_when:
|
|
4
|
+
- Updating the macOS Skills settings UI
|
|
5
|
+
- Changing skills gating or install behavior
|
|
6
|
+
title: "Skills (macOS)"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
The macOS app surfaces Nodmix skills via the gateway; it does not parse skills locally.
|
|
10
|
+
|
|
11
|
+
## Data source
|
|
12
|
+
|
|
13
|
+
- `skills.status` (gateway) returns all skills plus eligibility and missing requirements
|
|
14
|
+
(including allowlist blocks for bundled skills).
|
|
15
|
+
- Requirements are derived from `metadata.nodmix.requires` in each `SKILL.md`.
|
|
16
|
+
|
|
17
|
+
## Install actions
|
|
18
|
+
|
|
19
|
+
- `metadata.nodmix.install` defines install options (brew/node/go/uv).
|
|
20
|
+
- The app calls `skills.install` to run installers on the gateway host.
|
|
21
|
+
- Built-in dangerous-code `critical` findings block `skills.install` by default; suspicious findings still warn only. The dangerous override exists on the gateway request, but the default app flow stays fail-closed.
|
|
22
|
+
- If every install option is `download`, the gateway surfaces all download
|
|
23
|
+
choices.
|
|
24
|
+
- Otherwise, the gateway picks one preferred installer using the current
|
|
25
|
+
install preferences and host binaries: Homebrew first when
|
|
26
|
+
`skills.install.preferBrew` is enabled and `brew` exists, then `uv`, then the
|
|
27
|
+
configured node manager from `skills.install.nodeManager`, then later
|
|
28
|
+
fallbacks like `go` or `download`.
|
|
29
|
+
- Node install labels reflect the configured node manager, including `yarn`.
|
|
30
|
+
|
|
31
|
+
## Env/API keys
|
|
32
|
+
|
|
33
|
+
- The app stores keys in `~/.nodmix/nodmix.json` under `skills.entries.<skillKey>`.
|
|
34
|
+
- `skills.update` patches `enabled`, `apiKey`, and `env`.
|
|
35
|
+
|
|
36
|
+
## Remote mode
|
|
37
|
+
|
|
38
|
+
- Install + config updates happen on the gateway host (not the local Mac).
|
|
39
|
+
|
|
40
|
+
## Related
|
|
41
|
+
|
|
42
|
+
- [Skills](/tools/skills)
|
|
43
|
+
- [macOS app](/platforms/macos)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Voice overlay lifecycle when wake-word and push-to-talk overlap"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adjusting voice overlay behavior
|
|
5
|
+
title: "Voice overlay"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Voice Overlay Lifecycle (macOS)
|
|
9
|
+
|
|
10
|
+
Audience: macOS app contributors. Goal: keep the voice overlay predictable when wake-word and push-to-talk overlap.
|
|
11
|
+
|
|
12
|
+
## Current intent
|
|
13
|
+
|
|
14
|
+
- If the overlay is already visible from wake-word and the user presses the hotkey, the hotkey session _adopts_ the existing text instead of resetting it. The overlay stays up while the hotkey is held. When the user releases: send if there is trimmed text, otherwise dismiss.
|
|
15
|
+
- Wake-word alone still auto-sends on silence; push-to-talk sends immediately on release.
|
|
16
|
+
|
|
17
|
+
## Implemented (Dec 9, 2025)
|
|
18
|
+
|
|
19
|
+
- Overlay sessions now carry a token per capture (wake-word or push-to-talk). Partial/final/send/dismiss/level updates are dropped when the token doesn't match, avoiding stale callbacks.
|
|
20
|
+
- Push-to-talk adopts any visible overlay text as a prefix (so pressing the hotkey while the wake overlay is up keeps the text and appends new speech). It waits up to 1.5s for a final transcript before falling back to the current text.
|
|
21
|
+
- Chime/overlay logging is emitted at `info` in categories `voicewake.overlay`, `voicewake.ptt`, and `voicewake.chime` (session start, partial, final, send, dismiss, chime reason).
|
|
22
|
+
|
|
23
|
+
## Next steps
|
|
24
|
+
|
|
25
|
+
1. **VoiceSessionCoordinator (actor)**
|
|
26
|
+
- Owns exactly one `VoiceSession` at a time.
|
|
27
|
+
- API (token-based): `beginWakeCapture`, `beginPushToTalk`, `updatePartial`, `endCapture`, `cancel`, `applyCooldown`.
|
|
28
|
+
- Drops callbacks that carry stale tokens (prevents old recognizers from reopening the overlay).
|
|
29
|
+
2. **VoiceSession (model)**
|
|
30
|
+
- Fields: `token`, `source` (wakeWord|pushToTalk), committed/volatile text, chime flags, timers (auto-send, idle), `overlayMode` (display|editing|sending), cooldown deadline.
|
|
31
|
+
3. **Overlay binding**
|
|
32
|
+
- `VoiceSessionPublisher` (`ObservableObject`) mirrors the active session into SwiftUI.
|
|
33
|
+
- `VoiceWakeOverlayView` renders only via the publisher; it never mutates global singletons directly.
|
|
34
|
+
- Overlay user actions (`sendNow`, `dismiss`, `edit`) call back into the coordinator with the session token.
|
|
35
|
+
4. **Unified send path**
|
|
36
|
+
- On `endCapture`: if trimmed text is empty → dismiss; else `performSend(session:)` (plays send chime once, forwards, dismisses).
|
|
37
|
+
- Push-to-talk: no delay; wake-word: optional delay for auto-send.
|
|
38
|
+
- Apply a short cooldown to the wake runtime after push-to-talk finishes so wake-word doesn't immediately retrigger.
|
|
39
|
+
5. **Logging**
|
|
40
|
+
- Coordinator emits `.info` logs in subsystem `ai.nodmix`, categories `voicewake.overlay` and `voicewake.chime`.
|
|
41
|
+
- Key events: `session_started`, `adopted_by_push_to_talk`, `partial`, `finalized`, `send`, `dismiss`, `cancel`, `cooldown`.
|
|
42
|
+
|
|
43
|
+
## Debugging checklist
|
|
44
|
+
|
|
45
|
+
- Stream logs while reproducing a sticky overlay:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
sudo log stream --predicate 'subsystem == "ai.nodmix" AND category CONTAINS "voicewake"' --level info --style compact
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
- Verify only one active session token; stale callbacks should be dropped by the coordinator.
|
|
52
|
+
- Ensure push-to-talk release always calls `endCapture` with the active token; if text is empty, expect `dismiss` without chime or send.
|
|
53
|
+
|
|
54
|
+
## Migration steps (suggested)
|
|
55
|
+
|
|
56
|
+
1. Add `VoiceSessionCoordinator`, `VoiceSession`, and `VoiceSessionPublisher`.
|
|
57
|
+
2. Refactor `VoiceWakeRuntime` to create/update/end sessions instead of touching `VoiceWakeOverlayController` directly.
|
|
58
|
+
3. Refactor `VoicePushToTalk` to adopt existing sessions and call `endCapture` on release; apply runtime cooldown.
|
|
59
|
+
4. Wire `VoiceWakeOverlayController` to the publisher; remove direct calls from runtime/PTT.
|
|
60
|
+
5. Add integration tests for session adoption, cooldown, and empty-text dismissal.
|
|
61
|
+
|
|
62
|
+
## Related
|
|
63
|
+
|
|
64
|
+
- [macOS app](/platforms/macos)
|
|
65
|
+
- [Voice wake (macOS)](/platforms/mac/voicewake)
|
|
66
|
+
- [Talk mode](/nodes/talk)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Voice wake and push-to-talk modes plus routing details in the mac app"
|
|
3
|
+
read_when:
|
|
4
|
+
- Working on voice wake or PTT pathways
|
|
5
|
+
title: "Voice wake (macOS)"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Voice Wake & Push-to-Talk
|
|
9
|
+
|
|
10
|
+
## Modes
|
|
11
|
+
|
|
12
|
+
- **Wake-word mode** (default): always-on Speech recognizer waits for trigger tokens (`swabbleTriggerWords`). On match it starts capture, shows the overlay with partial text, and auto-sends after silence.
|
|
13
|
+
- **Push-to-talk (Right Option hold)**: hold the right Option key to capture immediately—no trigger needed. The overlay appears while held; releasing finalizes and forwards after a short delay so you can tweak text.
|
|
14
|
+
|
|
15
|
+
## Runtime behavior (wake-word)
|
|
16
|
+
|
|
17
|
+
- Speech recognizer lives in `VoiceWakeRuntime`.
|
|
18
|
+
- Trigger only fires when there's a **meaningful pause** between the wake word and the next word (~0.55s gap). The overlay/chime can start on the pause even before the command begins.
|
|
19
|
+
- Silence windows: 2.0s when speech is flowing, 5.0s if only the trigger was heard.
|
|
20
|
+
- Hard stop: 120s to prevent runaway sessions.
|
|
21
|
+
- Debounce between sessions: 350ms.
|
|
22
|
+
- Overlay is driven via `VoiceWakeOverlayController` with committed/volatile coloring.
|
|
23
|
+
- After send, recognizer restarts cleanly to listen for the next trigger.
|
|
24
|
+
|
|
25
|
+
## Lifecycle invariants
|
|
26
|
+
|
|
27
|
+
- If Voice Wake is enabled and permissions are granted, the wake-word recognizer should be listening (except during an explicit push-to-talk capture).
|
|
28
|
+
- Overlay visibility (including manual dismiss via the X button) must never prevent the recognizer from resuming.
|
|
29
|
+
|
|
30
|
+
## Sticky overlay failure mode (previous)
|
|
31
|
+
|
|
32
|
+
Previously, if the overlay got stuck visible and you manually closed it, Voice Wake could appear "dead" because the runtime's restart attempt could be blocked by overlay visibility and no subsequent restart was scheduled.
|
|
33
|
+
|
|
34
|
+
Hardening:
|
|
35
|
+
|
|
36
|
+
- Wake runtime restart is no longer blocked by overlay visibility.
|
|
37
|
+
- Overlay dismiss completion triggers a `VoiceWakeRuntime.refresh(...)` via `VoiceSessionCoordinator`, so manual X-dismiss always resumes listening.
|
|
38
|
+
|
|
39
|
+
## Push-to-talk specifics
|
|
40
|
+
|
|
41
|
+
- Hotkey detection uses a global `.flagsChanged` monitor for **right Option** (`keyCode 61` + `.option`). We only observe events (no swallowing).
|
|
42
|
+
- Capture pipeline lives in `VoicePushToTalk`: starts Speech immediately, streams partials to the overlay, and calls `VoiceWakeForwarder` on release.
|
|
43
|
+
- When push-to-talk starts we pause the wake-word runtime to avoid dueling audio taps; it restarts automatically after release.
|
|
44
|
+
- Permissions: requires Microphone + Speech; seeing events needs Accessibility/Input Monitoring approval.
|
|
45
|
+
- External keyboards: some may not expose right Option as expected—offer a fallback shortcut if users report misses.
|
|
46
|
+
|
|
47
|
+
## User-facing settings
|
|
48
|
+
|
|
49
|
+
- **Voice Wake** toggle: enables wake-word runtime.
|
|
50
|
+
- **Hold Cmd+Fn to talk**: enables the push-to-talk monitor. Disabled on macOS < 26.
|
|
51
|
+
- Language & mic pickers, live level meter, trigger-word table, tester (local-only; does not forward).
|
|
52
|
+
- Mic picker preserves the last selection if a device disconnects, shows a disconnected hint, and temporarily falls back to the system default until it returns.
|
|
53
|
+
- **Sounds**: chimes on trigger detect and on send; defaults to the macOS "Glass" system sound. You can pick any `NSSound`-loadable file (e.g. MP3/WAV/AIFF) for each event or choose **No Sound**.
|
|
54
|
+
|
|
55
|
+
## Forwarding behavior
|
|
56
|
+
|
|
57
|
+
- When Voice Wake is enabled, transcripts are forwarded to the active gateway/agent (the same local vs remote mode used by the rest of the mac app).
|
|
58
|
+
- Replies are delivered to the **last-used main provider** (WhatsApp/Telegram/Discord/WebChat). If delivery fails, the error is logged and the run is still visible via WebChat/session logs.
|
|
59
|
+
|
|
60
|
+
## Forwarding payload
|
|
61
|
+
|
|
62
|
+
- `VoiceWakeForwarder.prefixedTranscript(_:)` prepends the machine hint before sending. Shared between wake-word and push-to-talk paths.
|
|
63
|
+
|
|
64
|
+
## Quick verification
|
|
65
|
+
|
|
66
|
+
- Toggle push-to-talk on, hold Cmd+Fn, speak, release: overlay should show partials then send.
|
|
67
|
+
- While holding, menu-bar ears should stay enlarged (uses `triggerVoiceEars(ttl:nil)`); they drop after release.
|
|
68
|
+
|
|
69
|
+
## Related
|
|
70
|
+
|
|
71
|
+
- [Voice wake](/nodes/voicewake)
|
|
72
|
+
- [Voice overlay](/platforms/mac/voice-overlay)
|
|
73
|
+
- [macOS app](/platforms/macos)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "How the mac app embeds the gateway WebChat and how to debug it"
|
|
3
|
+
read_when:
|
|
4
|
+
- Debugging mac WebChat view or loopback port
|
|
5
|
+
title: "WebChat (macOS)"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
The macOS menu bar app embeds the WebChat UI as a native SwiftUI view. It
|
|
9
|
+
connects to the Gateway and defaults to the **main session** for the selected
|
|
10
|
+
agent (with a session switcher for other sessions).
|
|
11
|
+
|
|
12
|
+
- **Local mode**: connects directly to the local Gateway WebSocket.
|
|
13
|
+
- **Remote mode**: forwards the Gateway control port over SSH and uses that
|
|
14
|
+
tunnel as the data plane.
|
|
15
|
+
|
|
16
|
+
## Launch and debugging
|
|
17
|
+
|
|
18
|
+
- Manual: Lobster menu → "Open Chat".
|
|
19
|
+
- Auto-open for testing:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
dist/Nodmix.app/Contents/MacOS/Nodmix --webchat
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
- Logs: `./scripts/clawlog.sh` (subsystem `ai.nodmix`, category `WebChatSwiftUI`).
|
|
26
|
+
|
|
27
|
+
## How it is wired
|
|
28
|
+
|
|
29
|
+
- Data plane: Gateway WS methods `chat.history`, `chat.send`, `chat.abort`,
|
|
30
|
+
`chat.inject` and events `chat`, `agent`, `presence`, `tick`, `health`.
|
|
31
|
+
- `chat.history` returns display-normalized transcript rows: inline directive
|
|
32
|
+
tags are stripped from visible text, plain-text tool-call XML payloads
|
|
33
|
+
(including `<tool_call>...</tool_call>`,
|
|
34
|
+
`<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`,
|
|
35
|
+
`<function_calls>...</function_calls>`, and truncated tool-call blocks) and
|
|
36
|
+
leaked ASCII/full-width model control tokens are stripped, pure
|
|
37
|
+
silent-token assistant rows such as exact `NO_REPLY` / `no_reply` are
|
|
38
|
+
omitted, and oversized rows can be replaced with placeholders.
|
|
39
|
+
- Session: defaults to the primary session (`main`, or `global` when scope is
|
|
40
|
+
global). The UI can switch between sessions.
|
|
41
|
+
- Onboarding uses a dedicated session to keep first-run setup separate.
|
|
42
|
+
|
|
43
|
+
## Security surface
|
|
44
|
+
|
|
45
|
+
- Remote mode forwards only the Gateway WebSocket control port over SSH.
|
|
46
|
+
|
|
47
|
+
## Known limitations
|
|
48
|
+
|
|
49
|
+
- The UI is optimized for chat sessions (not a full browser sandbox).
|
|
50
|
+
|
|
51
|
+
## Related
|
|
52
|
+
|
|
53
|
+
- [WebChat](/web/webchat)
|
|
54
|
+
- [macOS app](/platforms/macos)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "macOS IPC architecture for Nodmix app, gateway node transport, and PeekabooBridge"
|
|
3
|
+
read_when:
|
|
4
|
+
- Editing IPC contracts or menu bar app IPC
|
|
5
|
+
title: "macOS IPC"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Nodmix macOS IPC architecture
|
|
9
|
+
|
|
10
|
+
**Current model:** a local Unix socket connects the **node host service** to the **macOS app** for exec approvals + `system.run`. A `nodmix-mac` debug CLI exists for discovery/connect checks; agent actions still flow through the Gateway WebSocket and `node.invoke`. UI automation uses PeekabooBridge.
|
|
11
|
+
|
|
12
|
+
## Goals
|
|
13
|
+
|
|
14
|
+
- Single GUI app instance that owns all TCC-facing work (notifications, screen recording, mic, speech, AppleScript).
|
|
15
|
+
- A small surface for automation: Gateway + node commands, plus PeekabooBridge for UI automation.
|
|
16
|
+
- Predictable permissions: always the same signed bundle ID, launched by launchd, so TCC grants stick.
|
|
17
|
+
|
|
18
|
+
## How it works
|
|
19
|
+
|
|
20
|
+
### Gateway + node transport
|
|
21
|
+
|
|
22
|
+
- The app runs the Gateway (local mode) and connects to it as a node.
|
|
23
|
+
- Agent actions are performed via `node.invoke` (e.g. `system.run`, `system.notify`, `canvas.*`).
|
|
24
|
+
|
|
25
|
+
### Node service + app IPC
|
|
26
|
+
|
|
27
|
+
- A headless node host service connects to the Gateway WebSocket.
|
|
28
|
+
- `system.run` requests are forwarded to the macOS app over a local Unix socket.
|
|
29
|
+
- The app performs the exec in UI context, prompts if needed, and returns output.
|
|
30
|
+
|
|
31
|
+
Diagram (SCI):
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Agent -> Gateway -> Node Service (WS)
|
|
35
|
+
| IPC (UDS + token + HMAC + TTL)
|
|
36
|
+
v
|
|
37
|
+
Mac App (UI + TCC + system.run)
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### PeekabooBridge (UI automation)
|
|
41
|
+
|
|
42
|
+
- UI automation uses a separate UNIX socket named `bridge.sock` and the PeekabooBridge JSON protocol.
|
|
43
|
+
- Host preference order (client-side): Peekaboo.app → Claude.app → Nodmix.app → local execution.
|
|
44
|
+
- Security: bridge hosts require an allowed TeamID; DEBUG-only same-UID escape hatch is guarded by `PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1` (Peekaboo convention).
|
|
45
|
+
- See: [PeekabooBridge usage](/platforms/mac/peekaboo) for details.
|
|
46
|
+
|
|
47
|
+
## Operational flows
|
|
48
|
+
|
|
49
|
+
- Restart/rebuild: `SIGN_IDENTITY="Apple Development: <Developer Name> (<TEAMID>)" scripts/restart-mac.sh`
|
|
50
|
+
- Kills existing instances
|
|
51
|
+
- Swift build + package
|
|
52
|
+
- Writes/bootstraps/kickstarts the LaunchAgent
|
|
53
|
+
- Single instance: app exits early if another instance with the same bundle ID is running.
|
|
54
|
+
|
|
55
|
+
## Hardening notes
|
|
56
|
+
|
|
57
|
+
- Prefer requiring a TeamID match for all privileged surfaces.
|
|
58
|
+
- PeekabooBridge: `PEEKABOO_ALLOW_UNSIGNED_SOCKET_CLIENTS=1` (DEBUG-only) may allow same-UID callers for local development.
|
|
59
|
+
- All communication remains local-only; no network sockets are exposed.
|
|
60
|
+
- TCC prompts originate only from the GUI app bundle; keep the signed bundle ID stable across rebuilds.
|
|
61
|
+
- IPC hardening: socket mode `0600`, token, peer-UID checks, HMAC challenge/response, short TTL.
|
|
62
|
+
|
|
63
|
+
## Related
|
|
64
|
+
|
|
65
|
+
- [macOS app](/platforms/macos)
|
|
66
|
+
- [macOS IPC flow (Exec approvals)](/tools/exec-approvals-advanced#macos-ipc-flow)
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Nodmix macOS companion app (menu bar + gateway broker)"
|
|
3
|
+
read_when:
|
|
4
|
+
- Implementing macOS app features
|
|
5
|
+
- Changing gateway lifecycle or node bridging on macOS
|
|
6
|
+
title: "macOS app"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
The macOS app is the **menu-bar companion** for Nodmix. It owns permissions,
|
|
10
|
+
manages/attaches to the Gateway locally (launchd or manual), and exposes macOS
|
|
11
|
+
capabilities to the agent as a node.
|
|
12
|
+
|
|
13
|
+
## What it does
|
|
14
|
+
|
|
15
|
+
- Shows native notifications and status in the menu bar.
|
|
16
|
+
- Owns TCC prompts (Notifications, Accessibility, Screen Recording, Microphone,
|
|
17
|
+
Speech Recognition, Automation/AppleScript).
|
|
18
|
+
- Runs or connects to the Gateway (local or remote).
|
|
19
|
+
- Exposes macOS-only tools (Canvas, Camera, Screen Recording, `system.run`).
|
|
20
|
+
- Starts the local node host service in **remote** mode (launchd), and stops it in **local** mode.
|
|
21
|
+
- Optionally hosts **PeekabooBridge** for UI automation.
|
|
22
|
+
- Installs the global CLI (`nodmix`) on request via npm, pnpm, or bun (the app prefers npm, then pnpm, then bun; Node remains the recommended Gateway runtime).
|
|
23
|
+
|
|
24
|
+
## Local vs remote mode
|
|
25
|
+
|
|
26
|
+
- **Local** (default): the app attaches to a running local Gateway if present;
|
|
27
|
+
otherwise it enables the launchd service via `nodmix gateway install`.
|
|
28
|
+
- **Remote**: the app connects to a Gateway over SSH/Tailscale and never starts
|
|
29
|
+
a local process.
|
|
30
|
+
The app starts the local **node host service** so the remote Gateway can reach this Mac.
|
|
31
|
+
The app does not spawn the Gateway as a child process.
|
|
32
|
+
Gateway discovery now prefers Tailscale MagicDNS names over raw tailnet IPs,
|
|
33
|
+
so the Mac app recovers more reliably when tailnet IPs change.
|
|
34
|
+
|
|
35
|
+
## Launchd control
|
|
36
|
+
|
|
37
|
+
The app manages a per-user LaunchAgent labeled `ai.nodmix.gateway`
|
|
38
|
+
(or `ai.nodmix.<profile>` when using `--profile`/`NODMIX_PROFILE`; legacy `com.nodmix.*` still unloads).
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
launchctl kickstart -k gui/$UID/ai.nodmix.gateway
|
|
42
|
+
launchctl bootout gui/$UID/ai.nodmix.gateway
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Replace the label with `ai.nodmix.<profile>` when running a named profile.
|
|
46
|
+
|
|
47
|
+
If the LaunchAgent isn't installed, enable it from the app or run
|
|
48
|
+
`nodmix gateway install`.
|
|
49
|
+
|
|
50
|
+
## Node capabilities (mac)
|
|
51
|
+
|
|
52
|
+
The macOS app presents itself as a node. Common commands:
|
|
53
|
+
|
|
54
|
+
- Canvas: `canvas.present`, `canvas.navigate`, `canvas.eval`, `canvas.snapshot`, `canvas.a2ui.*`
|
|
55
|
+
- Camera: `camera.snap`, `camera.clip`
|
|
56
|
+
- Screen: `screen.snapshot`, `screen.record`
|
|
57
|
+
- System: `system.run`, `system.notify`
|
|
58
|
+
|
|
59
|
+
The node reports a `permissions` map so agents can decide what's allowed.
|
|
60
|
+
|
|
61
|
+
Node service + app IPC:
|
|
62
|
+
|
|
63
|
+
- When the headless node host service is running (remote mode), it connects to the Gateway WS as a node.
|
|
64
|
+
- `system.run` executes in the macOS app (UI/TCC context) over a local Unix socket; prompts + output stay in-app.
|
|
65
|
+
|
|
66
|
+
Diagram (SCI):
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
Gateway -> Node Service (WS)
|
|
70
|
+
| IPC (UDS + token + HMAC + TTL)
|
|
71
|
+
v
|
|
72
|
+
Mac App (UI + TCC + system.run)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Exec approvals (system.run)
|
|
76
|
+
|
|
77
|
+
`system.run` is controlled by **Exec approvals** in the macOS app (Settings → Exec approvals).
|
|
78
|
+
Security + ask + allowlist are stored locally on the Mac in:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
~/.nodmix/exec-approvals.json
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Example:
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"version": 1,
|
|
89
|
+
"defaults": {
|
|
90
|
+
"security": "deny",
|
|
91
|
+
"ask": "on-miss"
|
|
92
|
+
},
|
|
93
|
+
"agents": {
|
|
94
|
+
"main": {
|
|
95
|
+
"security": "allowlist",
|
|
96
|
+
"ask": "on-miss",
|
|
97
|
+
"allowlist": [{ "pattern": "/opt/homebrew/bin/rg" }]
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Notes:
|
|
104
|
+
|
|
105
|
+
- `allowlist` entries are glob patterns for resolved binary paths, or bare command names for PATH-invoked commands.
|
|
106
|
+
- Raw shell command text that contains shell control or expansion syntax (`&&`, `||`, `;`, `|`, `` ` ``, `$`, `<`, `>`, `(`, `)`) is treated as an allowlist miss and requires explicit approval (or allowlisting the shell binary).
|
|
107
|
+
- Choosing "Always Allow" in the prompt adds that command to the allowlist.
|
|
108
|
+
- `system.run` environment overrides are filtered (drops `PATH`, `DYLD_*`, `LD_*`, `NODE_OPTIONS`, `PYTHON*`, `PERL*`, `RUBYOPT`, `SHELLOPTS`, `PS4`) and then merged with the app's environment.
|
|
109
|
+
- For shell wrappers (`bash|sh|zsh ... -c/-lc`), request-scoped environment overrides are reduced to a small explicit allowlist (`TERM`, `LANG`, `LC_*`, `COLORTERM`, `NO_COLOR`, `FORCE_COLOR`).
|
|
110
|
+
- For allow-always decisions in allowlist mode, known dispatch wrappers (`env`, `nice`, `nohup`, `stdbuf`, `timeout`) persist inner executable paths instead of wrapper paths. If unwrapping is not safe, no allowlist entry is persisted automatically.
|
|
111
|
+
|
|
112
|
+
## Deep links
|
|
113
|
+
|
|
114
|
+
The app registers the `nodmix://` URL scheme for local actions.
|
|
115
|
+
|
|
116
|
+
### `nodmix://agent`
|
|
117
|
+
|
|
118
|
+
Triggers a Gateway `agent` request.
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
open 'nodmix://agent?message=Hello%20from%20deep%20link'
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Query parameters:
|
|
125
|
+
|
|
126
|
+
- `message` (required)
|
|
127
|
+
- `sessionKey` (optional)
|
|
128
|
+
- `thinking` (optional)
|
|
129
|
+
- `deliver` / `to` / `channel` (optional)
|
|
130
|
+
- `timeoutSeconds` (optional)
|
|
131
|
+
- `key` (optional unattended mode key)
|
|
132
|
+
|
|
133
|
+
Safety:
|
|
134
|
+
|
|
135
|
+
- Without `key`, the app prompts for confirmation.
|
|
136
|
+
- Without `key`, the app enforces a short message limit for the confirmation prompt and ignores `deliver` / `to` / `channel`.
|
|
137
|
+
- With a valid `key`, the run is unattended (intended for personal automations).
|
|
138
|
+
|
|
139
|
+
## Onboarding flow (typical)
|
|
140
|
+
|
|
141
|
+
1. Install and launch **Nodmix.app**.
|
|
142
|
+
2. Complete the permissions checklist (TCC prompts).
|
|
143
|
+
3. Ensure **Local** mode is active and the Gateway is running.
|
|
144
|
+
4. Install the CLI if you want terminal access.
|
|
145
|
+
|
|
146
|
+
## State dir placement (macOS)
|
|
147
|
+
|
|
148
|
+
Avoid putting your Nodmix state dir in iCloud or other cloud-synced folders.
|
|
149
|
+
Sync-backed paths can add latency and occasionally cause file-lock/sync races for
|
|
150
|
+
sessions and credentials.
|
|
151
|
+
|
|
152
|
+
Prefer a local non-synced state path such as:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
NODMIX_STATE_DIR=~/.nodmix
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
If `nodmix doctor` detects state under:
|
|
159
|
+
|
|
160
|
+
- `~/Library/Mobile Documents/com~apple~CloudDocs/...`
|
|
161
|
+
- `~/Library/CloudStorage/...`
|
|
162
|
+
|
|
163
|
+
it will warn and recommend moving back to a local path.
|
|
164
|
+
|
|
165
|
+
## Build and dev workflow (native)
|
|
166
|
+
|
|
167
|
+
- `cd apps/macos && swift build`
|
|
168
|
+
- `swift run Nodmix` (or Xcode)
|
|
169
|
+
- Package app: `scripts/package-mac-app.sh`
|
|
170
|
+
|
|
171
|
+
## Debug gateway connectivity (macOS CLI)
|
|
172
|
+
|
|
173
|
+
Use the debug CLI to exercise the same Gateway WebSocket handshake and discovery
|
|
174
|
+
logic that the macOS app uses, without launching the app.
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
cd apps/macos
|
|
178
|
+
swift run nodmix-mac connect --json
|
|
179
|
+
swift run nodmix-mac discover --timeout 3000 --json
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
Connect options:
|
|
183
|
+
|
|
184
|
+
- `--url <ws://host:port>`: override config
|
|
185
|
+
- `--mode <local|remote>`: resolve from config (default: config or local)
|
|
186
|
+
- `--probe`: force a fresh health probe
|
|
187
|
+
- `--timeout <ms>`: request timeout (default: `15000`)
|
|
188
|
+
- `--json`: structured output for diffing
|
|
189
|
+
|
|
190
|
+
Discovery options:
|
|
191
|
+
|
|
192
|
+
- `--include-local`: include gateways that would be filtered as "local"
|
|
193
|
+
- `--timeout <ms>`: overall discovery window (default: `2000`)
|
|
194
|
+
- `--json`: structured output for diffing
|
|
195
|
+
|
|
196
|
+
<Tip>
|
|
197
|
+
Compare against `nodmix gateway discover --json` to see whether the macOS app's discovery pipeline (`local.` plus the configured wide-area domain, with wide-area and Tailscale Serve fallbacks) differs from the Node CLI's `dns-sd` based discovery.
|
|
198
|
+
</Tip>
|
|
199
|
+
|
|
200
|
+
## Remote connection plumbing (SSH tunnels)
|
|
201
|
+
|
|
202
|
+
When the macOS app runs in **Remote** mode, it opens an SSH tunnel so local UI
|
|
203
|
+
components can talk to a remote Gateway as if it were on localhost.
|
|
204
|
+
|
|
205
|
+
### Control tunnel (Gateway WebSocket port)
|
|
206
|
+
|
|
207
|
+
- **Purpose:** health checks, status, Web Chat, config, and other control-plane calls.
|
|
208
|
+
- **Local port:** the Gateway port (default `18789`), always stable.
|
|
209
|
+
- **Remote port:** the same Gateway port on the remote host.
|
|
210
|
+
- **Behavior:** no random local port; the app reuses an existing healthy tunnel
|
|
211
|
+
or restarts it if needed.
|
|
212
|
+
- **SSH shape:** `ssh -N -L <local>:127.0.0.1:<remote>` with BatchMode +
|
|
213
|
+
ExitOnForwardFailure + keepalive options.
|
|
214
|
+
- **IP reporting:** the SSH tunnel uses loopback, so the gateway will see the node
|
|
215
|
+
IP as `127.0.0.1`. Use **Direct (ws/wss)** transport if you want the real client
|
|
216
|
+
IP to appear (see [macOS remote access](/platforms/mac/remote)).
|
|
217
|
+
|
|
218
|
+
For setup steps, see [macOS remote access](/platforms/mac/remote). For protocol
|
|
219
|
+
details, see [Gateway protocol](/gateway/protocol).
|
|
220
|
+
|
|
221
|
+
## Related docs
|
|
222
|
+
|
|
223
|
+
- [Gateway runbook](/gateway)
|
|
224
|
+
- [Gateway (macOS)](/platforms/mac/bundled-gateway)
|
|
225
|
+
- [macOS permissions](/platforms/mac/permissions)
|
|
226
|
+
- [Canvas](/platforms/mac/canvas)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Redirect to /install/raspberry-pi"
|
|
3
|
+
title: "Raspberry Pi (platform)"
|
|
4
|
+
redirect: /install/raspberry-pi
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
This page has moved to [Raspberry Pi](/install/raspberry-pi).
|
|
8
|
+
|
|
9
|
+
## Related
|
|
10
|
+
|
|
11
|
+
- [Install overview](/install)
|
|
12
|
+
- [Linux server](/vps)
|
|
13
|
+
- [Platforms](/platforms)
|