@quantumclaw/quantumclaw 2026.3.22
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 +4601 -0
- package/LICENSE +21 -0
- package/README.md +559 -0
- package/assets/avatar-placeholder.svg +19 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/dmg-background-small.png +0 -0
- package/assets/dmg-background.png +0 -0
- package/docs/.i18n/README.md +31 -0
- package/docs/.i18n/glossary.ja-JP.json +14 -0
- package/docs/.i18n/glossary.zh-CN.json +302 -0
- package/docs/.i18n/ja-JP.tm.jsonl +0 -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/pixel-lobster.svg +60 -0
- package/docs/assets/quantumclaw-logo-text-dark.png +0 -0
- package/docs/assets/quantumclaw-logo-text-dark.svg +418 -0
- package/docs/assets/quantumclaw-logo-text.png +0 -0
- package/docs/assets/quantumclaw-logo-text.svg +418 -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.svg +14 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +53 -0
- package/docs/automation/auth-monitoring.md +44 -0
- package/docs/automation/cron-jobs.md +727 -0
- package/docs/automation/cron-vs-heartbeat.md +286 -0
- package/docs/automation/gmail-pubsub.md +256 -0
- package/docs/automation/hooks.md +1056 -0
- package/docs/automation/poll.md +86 -0
- package/docs/automation/standing-orders.md +251 -0
- package/docs/automation/troubleshooting.md +122 -0
- package/docs/automation/webhook.md +217 -0
- package/docs/brave-search.md +93 -0
- package/docs/channels/bluebubbles.md +347 -0
- package/docs/channels/broadcast-groups.md +442 -0
- package/docs/channels/channel-routing.md +139 -0
- package/docs/channels/discord.md +1229 -0
- package/docs/channels/feishu.md +747 -0
- package/docs/channels/googlechat.md +261 -0
- package/docs/channels/group-messages.md +84 -0
- package/docs/channels/groups.md +379 -0
- package/docs/channels/imessage.md +367 -0
- package/docs/channels/index.md +47 -0
- package/docs/channels/irc.md +242 -0
- package/docs/channels/line.md +194 -0
- package/docs/channels/location.md +56 -0
- package/docs/channels/matrix.md +677 -0
- package/docs/channels/mattermost.md +427 -0
- package/docs/channels/msteams.md +780 -0
- package/docs/channels/nextcloud-talk.md +138 -0
- package/docs/channels/nostr.md +249 -0
- package/docs/channels/pairing.md +114 -0
- package/docs/channels/signal.md +329 -0
- package/docs/channels/slack.md +603 -0
- package/docs/channels/synology-chat.md +134 -0
- package/docs/channels/telegram.md +987 -0
- package/docs/channels/tlon.md +276 -0
- package/docs/channels/troubleshooting.md +118 -0
- package/docs/channels/twitch.md +379 -0
- package/docs/channels/whatsapp.md +460 -0
- package/docs/channels/zalo.md +243 -0
- package/docs/channels/zalouser.md +181 -0
- package/docs/ci.md +55 -0
- package/docs/cli/acp.md +288 -0
- package/docs/cli/agent.md +29 -0
- package/docs/cli/agents.md +123 -0
- package/docs/cli/approvals.md +50 -0
- package/docs/cli/backup.md +76 -0
- package/docs/cli/browser.md +106 -0
- package/docs/cli/channels.md +102 -0
- package/docs/cli/clawbot.md +21 -0
- package/docs/cli/completion.md +35 -0
- package/docs/cli/config.md +295 -0
- package/docs/cli/configure.md +36 -0
- package/docs/cli/cron.md +77 -0
- package/docs/cli/daemon.md +53 -0
- package/docs/cli/dashboard.md +22 -0
- package/docs/cli/devices.md +139 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +23 -0
- package/docs/cli/docs.md +15 -0
- package/docs/cli/doctor.md +48 -0
- package/docs/cli/gateway.md +235 -0
- package/docs/cli/health.md +21 -0
- package/docs/cli/hooks.md +329 -0
- package/docs/cli/index.md +1150 -0
- package/docs/cli/logs.md +28 -0
- package/docs/cli/memory.md +66 -0
- package/docs/cli/message.md +278 -0
- package/docs/cli/models.md +81 -0
- package/docs/cli/node.md +127 -0
- package/docs/cli/nodes.md +75 -0
- package/docs/cli/onboard.md +157 -0
- package/docs/cli/pairing.md +32 -0
- package/docs/cli/plugins.md +210 -0
- package/docs/cli/qr.md +46 -0
- package/docs/cli/reset.md +20 -0
- package/docs/cli/sandbox.md +197 -0
- package/docs/cli/secrets.md +188 -0
- package/docs/cli/security.md +79 -0
- package/docs/cli/sessions.md +110 -0
- package/docs/cli/setup.md +29 -0
- package/docs/cli/skills.md +36 -0
- package/docs/cli/status.md +30 -0
- package/docs/cli/system.md +60 -0
- package/docs/cli/tui.md +30 -0
- package/docs/cli/uninstall.md +20 -0
- package/docs/cli/update.md +103 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +25 -0
- package/docs/concepts/agent-loop.md +148 -0
- package/docs/concepts/agent-workspace.md +236 -0
- package/docs/concepts/agent.md +122 -0
- package/docs/concepts/architecture.md +137 -0
- package/docs/concepts/compaction.md +123 -0
- package/docs/concepts/context-engine.md +268 -0
- package/docs/concepts/context.md +172 -0
- package/docs/concepts/delegate-architecture.md +296 -0
- package/docs/concepts/features.md +73 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory.md +108 -0
- package/docs/concepts/messages.md +154 -0
- package/docs/concepts/model-failover.md +152 -0
- package/docs/concepts/model-providers.md +607 -0
- package/docs/concepts/models.md +225 -0
- package/docs/concepts/multi-agent.md +552 -0
- package/docs/concepts/oauth.md +158 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/session-pruning.md +121 -0
- package/docs/concepts/session-tool.md +242 -0
- package/docs/concepts/session.md +310 -0
- package/docs/concepts/streaming.md +155 -0
- package/docs/concepts/system-prompt.md +132 -0
- package/docs/concepts/timezone.md +91 -0
- package/docs/concepts/typebox.md +291 -0
- package/docs/concepts/typing-indicators.md +68 -0
- package/docs/concepts/usage-tracking.md +35 -0
- package/docs/date-time.md +128 -0
- package/docs/debug/node-issue.md +85 -0
- package/docs/diagnostics/flags.md +91 -0
- package/docs/docs.json +2078 -0
- package/docs/gateway/authentication.md +179 -0
- package/docs/gateway/background-process.md +97 -0
- package/docs/gateway/bonjour.md +177 -0
- package/docs/gateway/bridge-protocol.md +91 -0
- package/docs/gateway/cli-backends.md +225 -0
- package/docs/gateway/configuration-examples.md +651 -0
- package/docs/gateway/configuration-reference.md +3123 -0
- package/docs/gateway/configuration.md +633 -0
- package/docs/gateway/discovery.md +123 -0
- package/docs/gateway/doctor.md +362 -0
- package/docs/gateway/gateway-lock.md +34 -0
- package/docs/gateway/health.md +44 -0
- package/docs/gateway/heartbeat.md +393 -0
- package/docs/gateway/index.md +261 -0
- package/docs/gateway/local-models.md +152 -0
- package/docs/gateway/logging.md +113 -0
- package/docs/gateway/multiple-gateways.md +112 -0
- package/docs/gateway/network-model.md +22 -0
- package/docs/gateway/openai-http-api.md +132 -0
- package/docs/gateway/openresponses-http-api.md +295 -0
- package/docs/gateway/openshell.md +307 -0
- package/docs/gateway/pairing.md +99 -0
- package/docs/gateway/protocol.md +267 -0
- package/docs/gateway/remote-gateway-readme.md +158 -0
- package/docs/gateway/remote.md +153 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
- package/docs/gateway/sandboxing.md +469 -0
- package/docs/gateway/secrets-plan-contract.md +116 -0
- package/docs/gateway/secrets.md +503 -0
- package/docs/gateway/security/index.md +1220 -0
- package/docs/gateway/tailscale.md +132 -0
- package/docs/gateway/tools-invoke-http-api.md +118 -0
- package/docs/gateway/troubleshooting.md +378 -0
- package/docs/gateway/trusted-proxy-auth.md +330 -0
- package/docs/help/debugging.md +168 -0
- package/docs/help/environment.md +163 -0
- package/docs/help/faq.md +2997 -0
- package/docs/help/index.md +28 -0
- package/docs/help/scripts.md +28 -0
- package/docs/help/testing.md +526 -0
- package/docs/help/troubleshooting.md +297 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/feishu-verification-token.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 +230 -0
- package/docs/install/azure.md +311 -0
- package/docs/install/bun.md +55 -0
- package/docs/install/development-channels.md +120 -0
- package/docs/install/digitalocean.md +129 -0
- package/docs/install/docker-vm-runtime.md +142 -0
- package/docs/install/docker.md +375 -0
- package/docs/install/exe-dev.md +126 -0
- package/docs/install/fly.md +501 -0
- package/docs/install/gcp.md +402 -0
- package/docs/install/hetzner.md +251 -0
- package/docs/install/index.md +183 -0
- package/docs/install/installer.md +415 -0
- package/docs/install/kubernetes.md +191 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-matrix.md +346 -0
- package/docs/install/migrating.md +110 -0
- package/docs/install/nix.md +89 -0
- package/docs/install/node.md +138 -0
- package/docs/install/northflank.mdx +54 -0
- package/docs/install/oracle.md +156 -0
- package/docs/install/podman.md +133 -0
- package/docs/install/railway.mdx +100 -0
- package/docs/install/raspberry-pi.md +159 -0
- package/docs/install/render.mdx +169 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +128 -0
- package/docs/ja-JP/index.md +186 -0
- package/docs/ja-JP/start/getting-started.md +125 -0
- package/docs/ja-JP/start/wizard.md +77 -0
- package/docs/logging.md +352 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +54 -0
- package/docs/nodes/audio.md +187 -0
- package/docs/nodes/camera.md +162 -0
- package/docs/nodes/images.md +72 -0
- package/docs/nodes/index.md +393 -0
- package/docs/nodes/location-command.md +98 -0
- package/docs/nodes/media-understanding.md +394 -0
- package/docs/nodes/talk.md +92 -0
- package/docs/nodes/troubleshooting.md +114 -0
- package/docs/nodes/voicewake.md +66 -0
- package/docs/perplexity.md +174 -0
- package/docs/pi-dev.md +80 -0
- package/docs/pi.md +567 -0
- package/docs/platforms/android.md +168 -0
- package/docs/platforms/digitalocean.md +266 -0
- package/docs/platforms/index.md +54 -0
- package/docs/platforms/ios.md +220 -0
- package/docs/platforms/linux.md +94 -0
- package/docs/platforms/mac/bundled-gateway.md +73 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +104 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +50 -0
- package/docs/platforms/mac/remote.md +84 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +33 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +43 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos.md +226 -0
- package/docs/platforms/oracle.md +303 -0
- package/docs/platforms/raspberry-pi.md +412 -0
- package/docs/platforms/windows.md +241 -0
- package/docs/plugins/agent-tools.md +10 -0
- package/docs/plugins/architecture.md +1366 -0
- package/docs/plugins/building-extensions.md +10 -0
- package/docs/plugins/building-plugins.md +239 -0
- package/docs/plugins/bundles.md +181 -0
- package/docs/plugins/community.md +145 -0
- package/docs/plugins/manifest.md +241 -0
- package/docs/plugins/sdk-channel-plugins.md +370 -0
- package/docs/plugins/sdk-entrypoints.md +161 -0
- package/docs/plugins/sdk-migration.md +172 -0
- package/docs/plugins/sdk-overview.md +196 -0
- package/docs/plugins/sdk-provider-plugins.md +370 -0
- package/docs/plugins/sdk-runtime.md +345 -0
- package/docs/plugins/sdk-setup.md +331 -0
- package/docs/plugins/sdk-testing.md +263 -0
- package/docs/plugins/voice-call.md +380 -0
- package/docs/plugins/zalouser.md +77 -0
- package/docs/prose.md +134 -0
- package/docs/providers/anthropic.md +259 -0
- package/docs/providers/bedrock.md +176 -0
- package/docs/providers/claude-max-api-proxy.md +154 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/github-copilot.md +72 -0
- package/docs/providers/glm.md +43 -0
- package/docs/providers/google.md +78 -0
- package/docs/providers/groq.md +96 -0
- package/docs/providers/huggingface.md +209 -0
- package/docs/providers/index.md +69 -0
- package/docs/providers/kilocode.md +74 -0
- package/docs/providers/litellm.md +154 -0
- package/docs/providers/minimax.md +224 -0
- package/docs/providers/mistral.md +54 -0
- package/docs/providers/models.md +45 -0
- package/docs/providers/modelstudio.md +66 -0
- package/docs/providers/moonshot.md +175 -0
- package/docs/providers/nvidia.md +55 -0
- package/docs/providers/ollama.md +352 -0
- package/docs/providers/openai.md +303 -0
- package/docs/providers/opencode-go.md +45 -0
- package/docs/providers/opencode.md +64 -0
- package/docs/providers/openrouter.md +37 -0
- package/docs/providers/perplexity-provider.md +62 -0
- package/docs/providers/qianfan.md +38 -0
- package/docs/providers/qwen.md +53 -0
- package/docs/providers/sglang.md +104 -0
- package/docs/providers/synthetic.md +99 -0
- package/docs/providers/together.md +66 -0
- package/docs/providers/venice.md +282 -0
- package/docs/providers/vercel-ai-gateway.md +60 -0
- package/docs/providers/vllm.md +92 -0
- package/docs/providers/volcengine.md +74 -0
- package/docs/providers/xai.md +60 -0
- package/docs/providers/xiaomi.md +86 -0
- package/docs/providers/zai.md +46 -0
- package/docs/reference/AGENTS.default.md +126 -0
- package/docs/reference/RELEASING.md +42 -0
- package/docs/reference/api-usage-costs.md +144 -0
- package/docs/reference/credits.md +30 -0
- package/docs/reference/device-models.md +47 -0
- package/docs/reference/memory-config.md +711 -0
- package/docs/reference/prompt-caching.md +185 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +140 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +563 -0
- package/docs/reference/session-management-compaction.md +324 -0
- package/docs/reference/templates/AGENTS.dev.md +83 -0
- package/docs/reference/templates/AGENTS.md +219 -0
- package/docs/reference/templates/BOOT.md +11 -0
- package/docs/reference/templates/BOOTSTRAP.md +62 -0
- package/docs/reference/templates/HEARTBEAT.md +14 -0
- package/docs/reference/templates/IDENTITY.dev.md +47 -0
- package/docs/reference/templates/IDENTITY.md +29 -0
- package/docs/reference/templates/SOUL.dev.md +76 -0
- package/docs/reference/templates/SOUL.md +43 -0
- package/docs/reference/templates/TOOLS.dev.md +24 -0
- package/docs/reference/templates/TOOLS.md +47 -0
- package/docs/reference/templates/USER.dev.md +18 -0
- package/docs/reference/templates/USER.md +23 -0
- package/docs/reference/test.md +90 -0
- package/docs/reference/token-use.md +175 -0
- package/docs/reference/transcript-hygiene.md +151 -0
- package/docs/reference/wizard.md +235 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
- package/docs/security/formal-verification.md +167 -0
- package/docs/start/bootstrapping.md +41 -0
- package/docs/start/docs-directory.md +66 -0
- package/docs/start/getting-started.md +116 -0
- package/docs/start/hubs.md +198 -0
- package/docs/start/lore.md +219 -0
- package/docs/start/onboarding-overview.md +67 -0
- package/docs/start/onboarding.md +91 -0
- package/docs/start/openclaw.md +221 -0
- package/docs/start/quickstart.md +22 -0
- package/docs/start/setup.md +164 -0
- package/docs/start/showcase.md +418 -0
- package/docs/start/wizard-cli-automation.md +215 -0
- package/docs/start/wizard-cli-reference.md +299 -0
- package/docs/start/wizard.md +125 -0
- package/docs/style.css +37 -0
- package/docs/tools/acp-agents.md +623 -0
- package/docs/tools/agent-send.md +100 -0
- package/docs/tools/apply-patch.md +51 -0
- package/docs/tools/brave-search.md +93 -0
- package/docs/tools/browser-linux-troubleshooting.md +138 -0
- package/docs/tools/browser-login.md +73 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
- package/docs/tools/browser.md +731 -0
- package/docs/tools/btw.md +142 -0
- package/docs/tools/capability-cookbook.md +119 -0
- package/docs/tools/clawhub.md +298 -0
- package/docs/tools/creating-skills.md +117 -0
- package/docs/tools/diffs.md +386 -0
- package/docs/tools/elevated.md +114 -0
- package/docs/tools/exec-approvals.md +430 -0
- package/docs/tools/exec.md +207 -0
- package/docs/tools/firecrawl.md +140 -0
- package/docs/tools/index.md +137 -0
- package/docs/tools/llm-task.md +119 -0
- package/docs/tools/lobster.md +340 -0
- package/docs/tools/loop-detection.md +100 -0
- package/docs/tools/multi-agent-sandbox-tools.md +364 -0
- package/docs/tools/pdf.md +156 -0
- package/docs/tools/perplexity-search.md +174 -0
- package/docs/tools/plugin.md +255 -0
- package/docs/tools/reactions.md +64 -0
- package/docs/tools/skills-config.md +86 -0
- package/docs/tools/skills.md +309 -0
- package/docs/tools/slash-commands.md +294 -0
- package/docs/tools/subagents.md +295 -0
- package/docs/tools/tavily.md +125 -0
- package/docs/tools/thinking.md +96 -0
- package/docs/tools/tts.md +406 -0
- package/docs/tools/web.md +516 -0
- package/docs/tts.md +406 -0
- package/docs/vps.md +112 -0
- package/docs/web/control-ui.md +275 -0
- package/docs/web/dashboard.md +54 -0
- package/docs/web/index.md +120 -0
- package/docs/web/tui.md +170 -0
- package/docs/web/webchat.md +61 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/docs/zh-CN/AGENTS.md +61 -0
- package/docs/zh-CN/automation/auth-monitoring.md +47 -0
- package/docs/zh-CN/automation/cron-jobs.md +435 -0
- package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
- package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
- package/docs/zh-CN/automation/hooks.md +1051 -0
- package/docs/zh-CN/automation/poll.md +76 -0
- package/docs/zh-CN/automation/troubleshooting.md +8 -0
- package/docs/zh-CN/automation/webhook.md +163 -0
- package/docs/zh-CN/brave-search.md +60 -0
- package/docs/zh-CN/channels/bluebubbles.md +354 -0
- package/docs/zh-CN/channels/broadcast-groups.md +449 -0
- package/docs/zh-CN/channels/channel-routing.md +117 -0
- package/docs/zh-CN/channels/discord.md +468 -0
- package/docs/zh-CN/channels/feishu.md +728 -0
- package/docs/zh-CN/channels/googlechat.md +257 -0
- package/docs/zh-CN/channels/grammy.md +38 -0
- package/docs/zh-CN/channels/group-messages.md +91 -0
- package/docs/zh-CN/channels/groups.md +379 -0
- package/docs/zh-CN/channels/imessage.md +302 -0
- package/docs/zh-CN/channels/index.md +53 -0
- package/docs/zh-CN/channels/line.md +180 -0
- package/docs/zh-CN/channels/location.md +63 -0
- package/docs/zh-CN/channels/matrix.md +221 -0
- package/docs/zh-CN/channels/mattermost.md +144 -0
- package/docs/zh-CN/channels/msteams.md +775 -0
- package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
- package/docs/zh-CN/channels/nostr.md +249 -0
- package/docs/zh-CN/channels/pairing.md +89 -0
- package/docs/zh-CN/channels/signal.md +209 -0
- package/docs/zh-CN/channels/slack.md +531 -0
- package/docs/zh-CN/channels/synology-chat.md +138 -0
- package/docs/zh-CN/channels/telegram.md +751 -0
- package/docs/zh-CN/channels/tlon.md +136 -0
- package/docs/zh-CN/channels/troubleshooting.md +36 -0
- package/docs/zh-CN/channels/twitch.md +385 -0
- package/docs/zh-CN/channels/whatsapp.md +411 -0
- package/docs/zh-CN/channels/zalo.md +196 -0
- package/docs/zh-CN/channels/zalouser.md +147 -0
- package/docs/zh-CN/cli/acp.md +173 -0
- package/docs/zh-CN/cli/agent.md +30 -0
- package/docs/zh-CN/cli/agents.md +82 -0
- package/docs/zh-CN/cli/approvals.md +57 -0
- package/docs/zh-CN/cli/browser.md +114 -0
- package/docs/zh-CN/cli/channels.md +86 -0
- package/docs/zh-CN/cli/config.md +57 -0
- package/docs/zh-CN/cli/configure.md +38 -0
- package/docs/zh-CN/cli/cron.md +43 -0
- package/docs/zh-CN/cli/dashboard.md +23 -0
- package/docs/zh-CN/cli/devices.md +74 -0
- package/docs/zh-CN/cli/directory.md +70 -0
- package/docs/zh-CN/cli/dns.md +30 -0
- package/docs/zh-CN/cli/docs.md +22 -0
- package/docs/zh-CN/cli/doctor.md +48 -0
- package/docs/zh-CN/cli/gateway.md +206 -0
- package/docs/zh-CN/cli/health.md +28 -0
- package/docs/zh-CN/cli/hooks.md +298 -0
- package/docs/zh-CN/cli/index.md +1143 -0
- package/docs/zh-CN/cli/logs.md +31 -0
- package/docs/zh-CN/cli/memory.md +52 -0
- package/docs/zh-CN/cli/message.md +246 -0
- package/docs/zh-CN/cli/models.md +85 -0
- package/docs/zh-CN/cli/node.md +115 -0
- package/docs/zh-CN/cli/nodes.md +80 -0
- package/docs/zh-CN/cli/onboard.md +164 -0
- package/docs/zh-CN/cli/pairing.md +28 -0
- package/docs/zh-CN/cli/plugins.md +66 -0
- package/docs/zh-CN/cli/reset.md +24 -0
- package/docs/zh-CN/cli/sandbox.md +158 -0
- package/docs/zh-CN/cli/security.md +33 -0
- package/docs/zh-CN/cli/sessions.md +23 -0
- package/docs/zh-CN/cli/setup.md +36 -0
- package/docs/zh-CN/cli/skills.md +33 -0
- package/docs/zh-CN/cli/status.md +33 -0
- package/docs/zh-CN/cli/system.md +63 -0
- package/docs/zh-CN/cli/tui.md +30 -0
- package/docs/zh-CN/cli/uninstall.md +24 -0
- package/docs/zh-CN/cli/update.md +101 -0
- package/docs/zh-CN/cli/voicecall.md +41 -0
- package/docs/zh-CN/cli/webhooks.md +32 -0
- package/docs/zh-CN/concepts/agent-loop.md +146 -0
- package/docs/zh-CN/concepts/agent-workspace.md +219 -0
- package/docs/zh-CN/concepts/agent.md +115 -0
- package/docs/zh-CN/concepts/architecture.md +123 -0
- package/docs/zh-CN/concepts/compaction.md +67 -0
- package/docs/zh-CN/concepts/context.md +168 -0
- package/docs/zh-CN/concepts/features.md +59 -0
- package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
- package/docs/zh-CN/concepts/memory.md +412 -0
- package/docs/zh-CN/concepts/messages.md +141 -0
- package/docs/zh-CN/concepts/model-failover.md +145 -0
- package/docs/zh-CN/concepts/model-providers.md +606 -0
- package/docs/zh-CN/concepts/models.md +225 -0
- package/docs/zh-CN/concepts/multi-agent.md +372 -0
- package/docs/zh-CN/concepts/oauth.md +164 -0
- package/docs/zh-CN/concepts/presence.md +99 -0
- package/docs/zh-CN/concepts/queue.md +94 -0
- package/docs/zh-CN/concepts/retry.md +76 -0
- package/docs/zh-CN/concepts/session-pruning.md +129 -0
- package/docs/zh-CN/concepts/session-tool.md +200 -0
- package/docs/zh-CN/concepts/session.md +166 -0
- package/docs/zh-CN/concepts/streaming.md +133 -0
- package/docs/zh-CN/concepts/system-prompt.md +101 -0
- package/docs/zh-CN/concepts/timezone.md +96 -0
- package/docs/zh-CN/concepts/typebox.md +284 -0
- package/docs/zh-CN/concepts/typing-indicators.md +74 -0
- package/docs/zh-CN/concepts/usage-tracking.md +42 -0
- package/docs/zh-CN/date-time.md +129 -0
- package/docs/zh-CN/debug/node-issue.md +90 -0
- package/docs/zh-CN/diagnostics/flags.md +98 -0
- package/docs/zh-CN/gateway/authentication.md +184 -0
- package/docs/zh-CN/gateway/background-process.md +100 -0
- package/docs/zh-CN/gateway/bonjour.md +174 -0
- package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
- package/docs/zh-CN/gateway/cli-backends.md +213 -0
- package/docs/zh-CN/gateway/configuration-examples.md +587 -0
- package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
- package/docs/zh-CN/gateway/configuration.md +640 -0
- package/docs/zh-CN/gateway/discovery.md +123 -0
- package/docs/zh-CN/gateway/doctor.md +238 -0
- package/docs/zh-CN/gateway/gateway-lock.md +41 -0
- package/docs/zh-CN/gateway/health.md +42 -0
- package/docs/zh-CN/gateway/heartbeat.md +274 -0
- package/docs/zh-CN/gateway/index.md +335 -0
- package/docs/zh-CN/gateway/local-models.md +159 -0
- package/docs/zh-CN/gateway/logging.md +114 -0
- package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
- package/docs/zh-CN/gateway/network-model.md +23 -0
- package/docs/zh-CN/gateway/openai-http-api.md +125 -0
- package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
- package/docs/zh-CN/gateway/pairing.md +99 -0
- package/docs/zh-CN/gateway/protocol.md +220 -0
- package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
- package/docs/zh-CN/gateway/remote.md +133 -0
- package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
- package/docs/zh-CN/gateway/sandboxing.md +188 -0
- package/docs/zh-CN/gateway/security/index.md +777 -0
- package/docs/zh-CN/gateway/tailscale.md +124 -0
- package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
- package/docs/zh-CN/gateway/troubleshooting.md +771 -0
- package/docs/zh-CN/help/debugging.md +160 -0
- package/docs/zh-CN/help/environment.md +88 -0
- package/docs/zh-CN/help/faq.md +2640 -0
- package/docs/zh-CN/help/index.md +28 -0
- package/docs/zh-CN/help/scripts.md +35 -0
- package/docs/zh-CN/help/testing.md +375 -0
- package/docs/zh-CN/help/troubleshooting.md +104 -0
- package/docs/zh-CN/index.md +186 -0
- package/docs/zh-CN/install/ansible.md +215 -0
- package/docs/zh-CN/install/bun.md +65 -0
- package/docs/zh-CN/install/development-channels.md +81 -0
- package/docs/zh-CN/install/docker.md +532 -0
- package/docs/zh-CN/install/exe-dev.md +133 -0
- package/docs/zh-CN/install/fly.md +490 -0
- package/docs/zh-CN/install/gcp.md +510 -0
- package/docs/zh-CN/install/hetzner.md +337 -0
- package/docs/zh-CN/install/index.md +235 -0
- package/docs/zh-CN/install/installer.md +422 -0
- package/docs/zh-CN/install/macos-vm.md +288 -0
- package/docs/zh-CN/install/migrating.md +199 -0
- package/docs/zh-CN/install/nix.md +99 -0
- package/docs/zh-CN/install/node.md +8 -0
- package/docs/zh-CN/install/northflank.mdx +60 -0
- package/docs/zh-CN/install/railway.mdx +106 -0
- package/docs/zh-CN/install/render.mdx +169 -0
- package/docs/zh-CN/install/uninstall.md +135 -0
- package/docs/zh-CN/install/updating.md +233 -0
- package/docs/zh-CN/logging.md +329 -0
- package/docs/zh-CN/network.md +59 -0
- package/docs/zh-CN/nodes/audio.md +120 -0
- package/docs/zh-CN/nodes/camera.md +162 -0
- package/docs/zh-CN/nodes/images.md +79 -0
- package/docs/zh-CN/nodes/index.md +348 -0
- package/docs/zh-CN/nodes/location-command.md +120 -0
- package/docs/zh-CN/nodes/media-understanding.md +380 -0
- package/docs/zh-CN/nodes/talk.md +97 -0
- package/docs/zh-CN/nodes/troubleshooting.md +8 -0
- package/docs/zh-CN/nodes/voicewake.md +72 -0
- package/docs/zh-CN/perplexity.md +102 -0
- package/docs/zh-CN/pi-dev.md +77 -0
- package/docs/zh-CN/pi.md +619 -0
- package/docs/zh-CN/platforms/android.md +155 -0
- package/docs/zh-CN/platforms/digitalocean.md +273 -0
- package/docs/zh-CN/platforms/index.md +60 -0
- package/docs/zh-CN/platforms/ios.md +114 -0
- package/docs/zh-CN/platforms/linux.md +100 -0
- package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
- package/docs/zh-CN/platforms/mac/canvas.md +128 -0
- package/docs/zh-CN/platforms/mac/child-process.md +73 -0
- package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
- package/docs/zh-CN/platforms/mac/health.md +41 -0
- package/docs/zh-CN/platforms/mac/icon.md +38 -0
- package/docs/zh-CN/platforms/mac/logging.md +64 -0
- package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
- package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
- package/docs/zh-CN/platforms/mac/permissions.md +46 -0
- package/docs/zh-CN/platforms/mac/remote.md +90 -0
- package/docs/zh-CN/platforms/mac/signing.md +54 -0
- package/docs/zh-CN/platforms/mac/skills.md +40 -0
- package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
- package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
- package/docs/zh-CN/platforms/mac/webchat.md +43 -0
- package/docs/zh-CN/platforms/mac/xpc.md +68 -0
- package/docs/zh-CN/platforms/macos.md +193 -0
- package/docs/zh-CN/platforms/oracle.md +310 -0
- package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
- package/docs/zh-CN/platforms/windows.md +247 -0
- package/docs/zh-CN/plugins/agent-tools.md +99 -0
- package/docs/zh-CN/plugins/manifest.md +68 -0
- package/docs/zh-CN/plugins/voice-call.md +250 -0
- package/docs/zh-CN/plugins/zalouser.md +88 -0
- package/docs/zh-CN/prose.md +141 -0
- package/docs/zh-CN/providers/anthropic.md +265 -0
- package/docs/zh-CN/providers/bedrock.md +170 -0
- package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
- package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
- package/docs/zh-CN/providers/deepgram.md +97 -0
- package/docs/zh-CN/providers/github-copilot.md +67 -0
- package/docs/zh-CN/providers/glm.md +50 -0
- package/docs/zh-CN/providers/huggingface.md +216 -0
- package/docs/zh-CN/providers/index.md +69 -0
- package/docs/zh-CN/providers/kilocode.md +80 -0
- package/docs/zh-CN/providers/litellm.md +160 -0
- package/docs/zh-CN/providers/minimax.md +222 -0
- package/docs/zh-CN/providers/mistral.md +61 -0
- package/docs/zh-CN/providers/models.md +51 -0
- package/docs/zh-CN/providers/moonshot.md +182 -0
- package/docs/zh-CN/providers/nvidia.md +62 -0
- package/docs/zh-CN/providers/ollama.md +359 -0
- package/docs/zh-CN/providers/openai.md +308 -0
- package/docs/zh-CN/providers/opencode-go.md +52 -0
- package/docs/zh-CN/providers/opencode.md +71 -0
- package/docs/zh-CN/providers/openrouter.md +44 -0
- package/docs/zh-CN/providers/qianfan.md +45 -0
- package/docs/zh-CN/providers/qwen.md +55 -0
- package/docs/zh-CN/providers/sglang.md +111 -0
- package/docs/zh-CN/providers/synthetic.md +106 -0
- package/docs/zh-CN/providers/together.md +72 -0
- package/docs/zh-CN/providers/venice.md +289 -0
- package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
- package/docs/zh-CN/providers/xiaomi.md +93 -0
- package/docs/zh-CN/providers/zai.md +53 -0
- package/docs/zh-CN/reference/AGENTS.default.md +131 -0
- package/docs/zh-CN/reference/RELEASING.md +48 -0
- package/docs/zh-CN/reference/api-usage-costs.md +141 -0
- package/docs/zh-CN/reference/credits.md +34 -0
- package/docs/zh-CN/reference/device-models.md +54 -0
- package/docs/zh-CN/reference/rpc.md +48 -0
- package/docs/zh-CN/reference/session-management-compaction.md +287 -0
- package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
- package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
- package/docs/zh-CN/reference/templates/BOOT.md +17 -0
- package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
- package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
- package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
- package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
- package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
- package/docs/zh-CN/reference/templates/SOUL.md +49 -0
- package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
- package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
- package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
- package/docs/zh-CN/reference/templates/USER.md +30 -0
- package/docs/zh-CN/reference/test.md +57 -0
- package/docs/zh-CN/reference/token-use.md +119 -0
- package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
- package/docs/zh-CN/reference/wizard.md +242 -0
- package/docs/zh-CN/security/formal-verification.md +171 -0
- package/docs/zh-CN/start/bootstrapping.md +9 -0
- package/docs/zh-CN/start/docs-directory.md +70 -0
- package/docs/zh-CN/start/getting-started.md +143 -0
- package/docs/zh-CN/start/hubs.md +194 -0
- package/docs/zh-CN/start/lore.md +226 -0
- package/docs/zh-CN/start/onboarding-overview.md +58 -0
- package/docs/zh-CN/start/onboarding.md +105 -0
- package/docs/zh-CN/start/openclaw.md +248 -0
- package/docs/zh-CN/start/quickstart.md +88 -0
- package/docs/zh-CN/start/setup.md +153 -0
- package/docs/zh-CN/start/showcase.md +423 -0
- package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
- package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
- package/docs/zh-CN/start/wizard.md +132 -0
- package/docs/zh-CN/tools/agent-send.md +59 -0
- package/docs/zh-CN/tools/apply-patch.md +57 -0
- package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
- package/docs/zh-CN/tools/browser-login.md +75 -0
- package/docs/zh-CN/tools/browser.md +553 -0
- package/docs/zh-CN/tools/chrome-extension.md +183 -0
- package/docs/zh-CN/tools/clawhub.md +209 -0
- package/docs/zh-CN/tools/creating-skills.md +61 -0
- package/docs/zh-CN/tools/elevated.md +64 -0
- package/docs/zh-CN/tools/exec-approvals.md +234 -0
- package/docs/zh-CN/tools/exec.md +169 -0
- package/docs/zh-CN/tools/firecrawl.md +68 -0
- package/docs/zh-CN/tools/index.md +515 -0
- package/docs/zh-CN/tools/llm-task.md +117 -0
- package/docs/zh-CN/tools/lobster.md +349 -0
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
- package/docs/zh-CN/tools/plugin.md +1612 -0
- package/docs/zh-CN/tools/reactions.md +29 -0
- package/docs/zh-CN/tools/skills-config.md +78 -0
- package/docs/zh-CN/tools/skills.md +279 -0
- package/docs/zh-CN/tools/slash-commands.md +205 -0
- package/docs/zh-CN/tools/subagents.md +167 -0
- package/docs/zh-CN/tools/thinking.md +80 -0
- package/docs/zh-CN/tools/web.md +289 -0
- package/docs/zh-CN/tts.md +375 -0
- package/docs/zh-CN/vps.md +47 -0
- package/docs/zh-CN/web/control-ui.md +191 -0
- package/docs/zh-CN/web/dashboard.md +53 -0
- package/docs/zh-CN/web/index.md +118 -0
- package/docs/zh-CN/web/tui.md +166 -0
- package/docs/zh-CN/web/webchat.md +56 -0
- package/package.json +841 -0
- package/quantumclaw.mjs +135 -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/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +198 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +295 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +865 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -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/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +320 -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/notion/SKILL.md +174 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +92 -0
- package/skills/openai-image-gen/scripts/gen.py +328 -0
- package/skills/openai-image-gen/scripts/test_gen.py +140 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +372 -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 +159 -0
- package/skills/skill-creator/scripts/test_package_skill.py +160 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +153 -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 +95 -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 +112 -0
- package/skills/xurl/SKILL.md +461 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Node discovery and transports (Bonjour, Tailscale, SSH) for finding the gateway"
|
|
3
|
+
read_when:
|
|
4
|
+
- Implementing or changing Bonjour discovery/advertising
|
|
5
|
+
- Adjusting remote connection modes (direct vs SSH)
|
|
6
|
+
- Designing node discovery + pairing for remote nodes
|
|
7
|
+
title: "Discovery and Transports"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Discovery & transports
|
|
11
|
+
|
|
12
|
+
QuantumClaw has two distinct problems that look similar on the surface:
|
|
13
|
+
|
|
14
|
+
1. **Operator remote control**: the macOS menu bar app controlling a gateway running elsewhere.
|
|
15
|
+
2. **Node pairing**: iOS/Android (and future nodes) finding a gateway and pairing securely.
|
|
16
|
+
|
|
17
|
+
The design goal is to keep all network discovery/advertising in the **Node Gateway** (`quantumclaw gateway`) and keep clients (mac app, iOS) as consumers.
|
|
18
|
+
|
|
19
|
+
## Terms
|
|
20
|
+
|
|
21
|
+
- **Gateway**: a single long-running gateway process that owns state (sessions, pairing, node registry) and runs channels. Most setups use one per host; isolated multi-gateway setups are possible.
|
|
22
|
+
- **Gateway WS (control plane)**: the WebSocket endpoint on `127.0.0.1:18789` by default; can be bound to LAN/tailnet via `gateway.bind`.
|
|
23
|
+
- **Direct WS transport**: a LAN/tailnet-facing Gateway WS endpoint (no SSH).
|
|
24
|
+
- **SSH transport (fallback)**: remote control by forwarding `127.0.0.1:18789` over SSH.
|
|
25
|
+
- **Legacy TCP bridge (deprecated/removed)**: older node transport (see [Bridge protocol](/gateway/bridge-protocol)); no longer advertised for discovery.
|
|
26
|
+
|
|
27
|
+
Protocol details:
|
|
28
|
+
|
|
29
|
+
- [Gateway protocol](/gateway/protocol)
|
|
30
|
+
- [Bridge protocol (legacy)](/gateway/bridge-protocol)
|
|
31
|
+
|
|
32
|
+
## Why we keep both "direct" and SSH
|
|
33
|
+
|
|
34
|
+
- **Direct WS** is the best UX on the same network and within a tailnet:
|
|
35
|
+
- auto-discovery on LAN via Bonjour
|
|
36
|
+
- pairing tokens + ACLs owned by the gateway
|
|
37
|
+
- no shell access required; protocol surface can stay tight and auditable
|
|
38
|
+
- **SSH** remains the universal fallback:
|
|
39
|
+
- works anywhere you have SSH access (even across unrelated networks)
|
|
40
|
+
- survives multicast/mDNS issues
|
|
41
|
+
- requires no new inbound ports besides SSH
|
|
42
|
+
|
|
43
|
+
## Discovery inputs (how clients learn where the gateway is)
|
|
44
|
+
|
|
45
|
+
### 1) Bonjour / mDNS (LAN only)
|
|
46
|
+
|
|
47
|
+
Bonjour is best-effort and does not cross networks. It is only used for “same LAN” convenience.
|
|
48
|
+
|
|
49
|
+
Target direction:
|
|
50
|
+
|
|
51
|
+
- The **gateway** advertises its WS endpoint via Bonjour.
|
|
52
|
+
- Clients browse and show a “pick a gateway” list, then store the chosen endpoint.
|
|
53
|
+
|
|
54
|
+
Troubleshooting and beacon details: [Bonjour](/gateway/bonjour).
|
|
55
|
+
|
|
56
|
+
#### Service beacon details
|
|
57
|
+
|
|
58
|
+
- Service types:
|
|
59
|
+
- `_quantumclaw-gw._tcp` (gateway transport beacon)
|
|
60
|
+
- TXT keys (non-secret):
|
|
61
|
+
- `role=gateway`
|
|
62
|
+
- `lanHost=<hostname>.local`
|
|
63
|
+
- `sshPort=22` (or whatever is advertised)
|
|
64
|
+
- `gatewayPort=18789` (Gateway WS + HTTP)
|
|
65
|
+
- `gatewayTls=1` (only when TLS is enabled)
|
|
66
|
+
- `gatewayTlsSha256=<sha256>` (only when TLS is enabled and fingerprint is available)
|
|
67
|
+
- `canvasPort=<port>` (canvas host port; currently the same as `gatewayPort` when the canvas host is enabled)
|
|
68
|
+
- `cliPath=<path>` (optional; absolute path to a runnable `quantumclaw` entrypoint or binary)
|
|
69
|
+
- `tailnetDns=<magicdns>` (optional hint; auto-detected when Tailscale is available)
|
|
70
|
+
|
|
71
|
+
Security notes:
|
|
72
|
+
|
|
73
|
+
- Bonjour/mDNS TXT records are **unauthenticated**. Clients must treat TXT values as UX hints only.
|
|
74
|
+
- Routing (host/port) should prefer the **resolved service endpoint** (SRV + A/AAAA) over TXT-provided `lanHost`, `tailnetDns`, or `gatewayPort`.
|
|
75
|
+
- TLS pinning must never allow an advertised `gatewayTlsSha256` to override a previously stored pin.
|
|
76
|
+
- iOS/Android nodes should treat discovery-based direct connects as **TLS-only** and require an explicit “trust this fingerprint” confirmation before storing a first-time pin (out-of-band verification).
|
|
77
|
+
|
|
78
|
+
Disable/override:
|
|
79
|
+
|
|
80
|
+
- `QUANTUMCLAW_DISABLE_BONJOUR=1` disables advertising.
|
|
81
|
+
- `gateway.bind` in `~/.quantumclaw/quantumclaw.json` controls the Gateway bind mode.
|
|
82
|
+
- `QUANTUMCLAW_SSH_PORT` overrides the SSH port advertised in TXT (defaults to 22).
|
|
83
|
+
- `QUANTUMCLAW_TAILNET_DNS` publishes a `tailnetDns` hint (MagicDNS).
|
|
84
|
+
- `QUANTUMCLAW_CLI_PATH` overrides the advertised CLI path.
|
|
85
|
+
|
|
86
|
+
### 2) Tailnet (cross-network)
|
|
87
|
+
|
|
88
|
+
For London/Vienna style setups, Bonjour won’t help. The recommended “direct” target is:
|
|
89
|
+
|
|
90
|
+
- Tailscale MagicDNS name (preferred) or a stable tailnet IP.
|
|
91
|
+
|
|
92
|
+
If the gateway can detect it is running under Tailscale, it publishes `tailnetDns` as an optional hint for clients (including wide-area beacons).
|
|
93
|
+
|
|
94
|
+
### 3) Manual / SSH target
|
|
95
|
+
|
|
96
|
+
When there is no direct route (or direct is disabled), clients can always connect via SSH by forwarding the loopback gateway port.
|
|
97
|
+
|
|
98
|
+
See [Remote access](/gateway/remote).
|
|
99
|
+
|
|
100
|
+
## Transport selection (client policy)
|
|
101
|
+
|
|
102
|
+
Recommended client behavior:
|
|
103
|
+
|
|
104
|
+
1. If a paired direct endpoint is configured and reachable, use it.
|
|
105
|
+
2. Else, if Bonjour finds a gateway on LAN, offer a one-tap “Use this gateway” choice and save it as the direct endpoint.
|
|
106
|
+
3. Else, if a tailnet DNS/IP is configured, try direct.
|
|
107
|
+
4. Else, fall back to SSH.
|
|
108
|
+
|
|
109
|
+
## Pairing + auth (direct transport)
|
|
110
|
+
|
|
111
|
+
The gateway is the source of truth for node/client admission.
|
|
112
|
+
|
|
113
|
+
- Pairing requests are created/approved/rejected in the gateway (see [Gateway pairing](/gateway/pairing)).
|
|
114
|
+
- The gateway enforces:
|
|
115
|
+
- auth (token / keypair)
|
|
116
|
+
- scopes/ACLs (the gateway is not a raw proxy to every method)
|
|
117
|
+
- rate limits
|
|
118
|
+
|
|
119
|
+
## Responsibilities by component
|
|
120
|
+
|
|
121
|
+
- **Gateway**: advertises discovery beacons, owns pairing decisions, and hosts the WS endpoint.
|
|
122
|
+
- **macOS app**: helps you pick a gateway, shows pairing prompts, and uses SSH only as a fallback.
|
|
123
|
+
- **iOS/Android nodes**: browse Bonjour as a convenience and connect to the paired Gateway WS.
|
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Doctor command: health checks, config migrations, and repair steps"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying doctor migrations
|
|
5
|
+
- Introducing breaking config changes
|
|
6
|
+
title: "Doctor"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Doctor
|
|
10
|
+
|
|
11
|
+
`quantumclaw doctor` is the repair + migration tool for QuantumClaw. It fixes stale
|
|
12
|
+
config/state, checks health, and provides actionable repair steps.
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
quantumclaw doctor
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### Headless / automation
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
quantumclaw doctor --yes
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Accept defaults without prompting (including restart/service/sandbox repair steps when applicable).
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
quantumclaw doctor --repair
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Apply recommended repairs without prompting (repairs + restarts where safe).
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
quantumclaw doctor --repair --force
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Apply aggressive repairs too (overwrites custom supervisor configs).
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
quantumclaw doctor --non-interactive
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Run without prompts and only apply safe migrations (config normalization + on-disk state moves). Skips restart/service/sandbox actions that require human confirmation.
|
|
45
|
+
Legacy state migrations run automatically when detected.
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
quantumclaw doctor --deep
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
Scan system services for extra gateway installs (launchd/systemd/schtasks).
|
|
52
|
+
|
|
53
|
+
If you want to review changes before writing, open the config file first:
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
cat ~/.quantumclaw/quantumclaw.json
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## What it does (summary)
|
|
60
|
+
|
|
61
|
+
- Optional pre-flight update for git installs (interactive only).
|
|
62
|
+
- UI protocol freshness check (rebuilds Control UI when the protocol schema is newer).
|
|
63
|
+
- Health check + restart prompt.
|
|
64
|
+
- Skills status summary (eligible/missing/blocked).
|
|
65
|
+
- Config normalization for legacy values.
|
|
66
|
+
- Browser migration checks for legacy Chrome extension configs and Chrome MCP readiness.
|
|
67
|
+
- OpenCode provider override warnings (`models.providers.opencode` / `models.providers.opencode-go`).
|
|
68
|
+
- Legacy on-disk state migration (sessions/agent dir/WhatsApp auth).
|
|
69
|
+
- Legacy cron store migration (`jobId`, `schedule.cron`, top-level delivery/payload fields, payload `provider`, simple `notify: true` webhook fallback jobs).
|
|
70
|
+
- State integrity and permissions checks (sessions, transcripts, state dir).
|
|
71
|
+
- Config file permission checks (chmod 600) when running locally.
|
|
72
|
+
- Model auth health: checks OAuth expiry, can refresh expiring tokens, and reports auth-profile cooldown/disabled states.
|
|
73
|
+
- Extra workspace dir detection (`~/quantumclaw`).
|
|
74
|
+
- Sandbox image repair when sandboxing is enabled.
|
|
75
|
+
- Legacy service migration and extra gateway detection.
|
|
76
|
+
- Gateway runtime checks (service installed but not running; cached launchd label).
|
|
77
|
+
- Channel status warnings (probed from the running gateway).
|
|
78
|
+
- Supervisor config audit (launchd/systemd/schtasks) with optional repair.
|
|
79
|
+
- Gateway runtime best-practice checks (Node vs Bun, version-manager paths).
|
|
80
|
+
- Gateway port collision diagnostics (default `18789`).
|
|
81
|
+
- Security warnings for open DM policies.
|
|
82
|
+
- Gateway auth checks for local token mode (offers token generation when no token source exists; does not overwrite token SecretRef configs).
|
|
83
|
+
- systemd linger check on Linux.
|
|
84
|
+
- Source install checks (pnpm workspace mismatch, missing UI assets, missing tsx binary).
|
|
85
|
+
- Writes updated config + wizard metadata.
|
|
86
|
+
|
|
87
|
+
## Detailed behavior and rationale
|
|
88
|
+
|
|
89
|
+
### 0) Optional update (git installs)
|
|
90
|
+
|
|
91
|
+
If this is a git checkout and doctor is running interactively, it offers to
|
|
92
|
+
update (fetch/rebase/build) before running doctor.
|
|
93
|
+
|
|
94
|
+
### 1) Config normalization
|
|
95
|
+
|
|
96
|
+
If the config contains legacy value shapes (for example `messages.ackReaction`
|
|
97
|
+
without a channel-specific override), doctor normalizes them into the current
|
|
98
|
+
schema.
|
|
99
|
+
|
|
100
|
+
### 2) Legacy config key migrations
|
|
101
|
+
|
|
102
|
+
When the config contains deprecated keys, other commands refuse to run and ask
|
|
103
|
+
you to run `quantumclaw doctor`.
|
|
104
|
+
|
|
105
|
+
Doctor will:
|
|
106
|
+
|
|
107
|
+
- Explain which legacy keys were found.
|
|
108
|
+
- Show the migration it applied.
|
|
109
|
+
- Rewrite `~/.quantumclaw/quantumclaw.json` with the updated schema.
|
|
110
|
+
|
|
111
|
+
The Gateway also auto-runs doctor migrations on startup when it detects a
|
|
112
|
+
legacy config format, so stale configs are repaired without manual intervention.
|
|
113
|
+
|
|
114
|
+
Current migrations:
|
|
115
|
+
|
|
116
|
+
- `routing.allowFrom` → `channels.whatsapp.allowFrom`
|
|
117
|
+
- `routing.groupChat.requireMention` → `channels.whatsapp/telegram/imessage.groups."*".requireMention`
|
|
118
|
+
- `routing.groupChat.historyLimit` → `messages.groupChat.historyLimit`
|
|
119
|
+
- `routing.groupChat.mentionPatterns` → `messages.groupChat.mentionPatterns`
|
|
120
|
+
- `routing.queue` → `messages.queue`
|
|
121
|
+
- `routing.bindings` → top-level `bindings`
|
|
122
|
+
- `routing.agents`/`routing.defaultAgentId` → `agents.list` + `agents.list[].default`
|
|
123
|
+
- `routing.agentToAgent` → `tools.agentToAgent`
|
|
124
|
+
- `routing.transcribeAudio` → `tools.media.audio.models`
|
|
125
|
+
- `bindings[].match.accountID` → `bindings[].match.accountId`
|
|
126
|
+
- For channels with named `accounts` but missing `accounts.default`, move account-scoped top-level single-account channel values into `channels.<channel>.accounts.default` when present
|
|
127
|
+
- `identity` → `agents.list[].identity`
|
|
128
|
+
- `agent.*` → `agents.defaults` + `tools.*` (tools/elevated/exec/sandbox/subagents)
|
|
129
|
+
- `agent.model`/`allowedModels`/`modelAliases`/`modelFallbacks`/`imageModelFallbacks`
|
|
130
|
+
→ `agents.defaults.models` + `agents.defaults.model.primary/fallbacks` + `agents.defaults.imageModel.primary/fallbacks`
|
|
131
|
+
- `browser.ssrfPolicy.allowPrivateNetwork` → `browser.ssrfPolicy.dangerouslyAllowPrivateNetwork`
|
|
132
|
+
- `browser.profiles.*.driver: "extension"` → `"existing-session"`
|
|
133
|
+
- remove `browser.relayBindHost` (legacy extension relay setting)
|
|
134
|
+
|
|
135
|
+
Doctor warnings also include account-default guidance for multi-account channels:
|
|
136
|
+
|
|
137
|
+
- If two or more `channels.<channel>.accounts` entries are configured without `channels.<channel>.defaultAccount` or `accounts.default`, doctor warns that fallback routing can pick an unexpected account.
|
|
138
|
+
- If `channels.<channel>.defaultAccount` is set to an unknown account ID, doctor warns and lists configured account IDs.
|
|
139
|
+
|
|
140
|
+
### 2b) OpenCode provider overrides
|
|
141
|
+
|
|
142
|
+
If you’ve added `models.providers.opencode`, `opencode-zen`, or `opencode-go`
|
|
143
|
+
manually, it overrides the built-in OpenCode catalog from `@mariozechner/pi-ai`.
|
|
144
|
+
That can force models onto the wrong API or zero out costs. Doctor warns so you
|
|
145
|
+
can remove the override and restore per-model API routing + costs.
|
|
146
|
+
|
|
147
|
+
### 2c) Browser migration and Chrome MCP readiness
|
|
148
|
+
|
|
149
|
+
If your browser config still points at the removed Chrome extension path, doctor
|
|
150
|
+
normalizes it to the current host-local Chrome MCP attach model:
|
|
151
|
+
|
|
152
|
+
- `browser.profiles.*.driver: "extension"` becomes `"existing-session"`
|
|
153
|
+
- `browser.relayBindHost` is removed
|
|
154
|
+
|
|
155
|
+
Doctor also audits the host-local Chrome MCP path when you use `defaultProfile:
|
|
156
|
+
"user"` or a configured `existing-session` profile:
|
|
157
|
+
|
|
158
|
+
- checks whether Google Chrome is installed on the same host for default
|
|
159
|
+
auto-connect profiles
|
|
160
|
+
- checks the detected Chrome version and warns when it is below Chrome 144
|
|
161
|
+
- reminds you to enable remote debugging in the browser inspect page (for
|
|
162
|
+
example `chrome://inspect/#remote-debugging`, `brave://inspect/#remote-debugging`,
|
|
163
|
+
or `edge://inspect/#remote-debugging`)
|
|
164
|
+
|
|
165
|
+
Doctor cannot enable the Chrome-side setting for you. Host-local Chrome MCP
|
|
166
|
+
still requires:
|
|
167
|
+
|
|
168
|
+
- a Chromium-based browser 144+ on the gateway/node host
|
|
169
|
+
- the browser running locally
|
|
170
|
+
- remote debugging enabled in that browser
|
|
171
|
+
- approving the first attach consent prompt in the browser
|
|
172
|
+
|
|
173
|
+
This check does **not** apply to Docker, sandbox, remote-browser, or other
|
|
174
|
+
headless flows. Those continue to use raw CDP.
|
|
175
|
+
|
|
176
|
+
### 3) Legacy state migrations (disk layout)
|
|
177
|
+
|
|
178
|
+
Doctor can migrate older on-disk layouts into the current structure:
|
|
179
|
+
|
|
180
|
+
- Sessions store + transcripts:
|
|
181
|
+
- from `~/.quantumclaw/sessions/` to `~/.quantumclaw/agents/<agentId>/sessions/`
|
|
182
|
+
- Agent dir:
|
|
183
|
+
- from `~/.quantumclaw/agent/` to `~/.quantumclaw/agents/<agentId>/agent/`
|
|
184
|
+
- WhatsApp auth state (Baileys):
|
|
185
|
+
- from legacy `~/.quantumclaw/credentials/*.json` (except `oauth.json`)
|
|
186
|
+
- to `~/.quantumclaw/credentials/whatsapp/<accountId>/...` (default account id: `default`)
|
|
187
|
+
|
|
188
|
+
These migrations are best-effort and idempotent; doctor will emit warnings when
|
|
189
|
+
it leaves any legacy folders behind as backups. The Gateway/CLI also auto-migrates
|
|
190
|
+
the legacy sessions + agent dir on startup so history/auth/models land in the
|
|
191
|
+
per-agent path without a manual doctor run. WhatsApp auth is intentionally only
|
|
192
|
+
migrated via `quantumclaw doctor`.
|
|
193
|
+
|
|
194
|
+
### 3b) Legacy cron store migrations
|
|
195
|
+
|
|
196
|
+
Doctor also checks the cron job store (`~/.quantumclaw/cron/jobs.json` by default,
|
|
197
|
+
or `cron.store` when overridden) for old job shapes that the scheduler still
|
|
198
|
+
accepts for compatibility.
|
|
199
|
+
|
|
200
|
+
Current cron cleanups include:
|
|
201
|
+
|
|
202
|
+
- `jobId` → `id`
|
|
203
|
+
- `schedule.cron` → `schedule.expr`
|
|
204
|
+
- top-level payload fields (`message`, `model`, `thinking`, ...) → `payload`
|
|
205
|
+
- top-level delivery fields (`deliver`, `channel`, `to`, `provider`, ...) → `delivery`
|
|
206
|
+
- payload `provider` delivery aliases → explicit `delivery.channel`
|
|
207
|
+
- simple legacy `notify: true` webhook fallback jobs → explicit `delivery.mode="webhook"` with `delivery.to=cron.webhook`
|
|
208
|
+
|
|
209
|
+
Doctor only auto-migrates `notify: true` jobs when it can do so without
|
|
210
|
+
changing behavior. If a job combines legacy notify fallback with an existing
|
|
211
|
+
non-webhook delivery mode, doctor warns and leaves that job for manual review.
|
|
212
|
+
|
|
213
|
+
### 4) State integrity checks (session persistence, routing, and safety)
|
|
214
|
+
|
|
215
|
+
The state directory is the operational brainstem. If it vanishes, you lose
|
|
216
|
+
sessions, credentials, logs, and config (unless you have backups elsewhere).
|
|
217
|
+
|
|
218
|
+
Doctor checks:
|
|
219
|
+
|
|
220
|
+
- **State dir missing**: warns about catastrophic state loss, prompts to recreate
|
|
221
|
+
the directory, and reminds you that it cannot recover missing data.
|
|
222
|
+
- **State dir permissions**: verifies writability; offers to repair permissions
|
|
223
|
+
(and emits a `chown` hint when owner/group mismatch is detected).
|
|
224
|
+
- **macOS cloud-synced state dir**: warns when state resolves under iCloud Drive
|
|
225
|
+
(`~/Library/Mobile Documents/com~apple~CloudDocs/...`) or
|
|
226
|
+
`~/Library/CloudStorage/...` because sync-backed paths can cause slower I/O
|
|
227
|
+
and lock/sync races.
|
|
228
|
+
- **Linux SD or eMMC state dir**: warns when state resolves to an `mmcblk*`
|
|
229
|
+
mount source, because SD or eMMC-backed random I/O can be slower and wear
|
|
230
|
+
faster under session and credential writes.
|
|
231
|
+
- **Session dirs missing**: `sessions/` and the session store directory are
|
|
232
|
+
required to persist history and avoid `ENOENT` crashes.
|
|
233
|
+
- **Transcript mismatch**: warns when recent session entries have missing
|
|
234
|
+
transcript files.
|
|
235
|
+
- **Main session “1-line JSONL”**: flags when the main transcript has only one
|
|
236
|
+
line (history is not accumulating).
|
|
237
|
+
- **Multiple state dirs**: warns when multiple `~/.quantumclaw` folders exist across
|
|
238
|
+
home directories or when `QUANTUMCLAW_STATE_DIR` points elsewhere (history can
|
|
239
|
+
split between installs).
|
|
240
|
+
- **Remote mode reminder**: if `gateway.mode=remote`, doctor reminds you to run
|
|
241
|
+
it on the remote host (the state lives there).
|
|
242
|
+
- **Config file permissions**: warns if `~/.quantumclaw/quantumclaw.json` is
|
|
243
|
+
group/world readable and offers to tighten to `600`.
|
|
244
|
+
|
|
245
|
+
### 5) Model auth health (OAuth expiry)
|
|
246
|
+
|
|
247
|
+
Doctor inspects OAuth profiles in the auth store, warns when tokens are
|
|
248
|
+
expiring/expired, and can refresh them when safe. If the Anthropic Claude Code
|
|
249
|
+
profile is stale, it suggests running `claude setup-token` (or pasting a setup-token).
|
|
250
|
+
Refresh prompts only appear when running interactively (TTY); `--non-interactive`
|
|
251
|
+
skips refresh attempts.
|
|
252
|
+
|
|
253
|
+
Doctor also reports auth profiles that are temporarily unusable due to:
|
|
254
|
+
|
|
255
|
+
- short cooldowns (rate limits/timeouts/auth failures)
|
|
256
|
+
- longer disables (billing/credit failures)
|
|
257
|
+
|
|
258
|
+
### 6) Hooks model validation
|
|
259
|
+
|
|
260
|
+
If `hooks.gmail.model` is set, doctor validates the model reference against the
|
|
261
|
+
catalog and allowlist and warns when it won’t resolve or is disallowed.
|
|
262
|
+
|
|
263
|
+
### 7) Sandbox image repair
|
|
264
|
+
|
|
265
|
+
When sandboxing is enabled, doctor checks Docker images and offers to build or
|
|
266
|
+
switch to legacy names if the current image is missing.
|
|
267
|
+
|
|
268
|
+
### 8) Gateway service migrations and cleanup hints
|
|
269
|
+
|
|
270
|
+
Doctor detects legacy gateway services (launchd/systemd/schtasks) and
|
|
271
|
+
offers to remove them and install the QuantumClaw service using the current gateway
|
|
272
|
+
port. It can also scan for extra gateway-like services and print cleanup hints.
|
|
273
|
+
Profile-named QuantumClaw gateway services are considered first-class and are not
|
|
274
|
+
flagged as "extra."
|
|
275
|
+
|
|
276
|
+
### 9) Security warnings
|
|
277
|
+
|
|
278
|
+
Doctor emits warnings when a provider is open to DMs without an allowlist, or
|
|
279
|
+
when a policy is configured in a dangerous way.
|
|
280
|
+
|
|
281
|
+
### 10) systemd linger (Linux)
|
|
282
|
+
|
|
283
|
+
If running as a systemd user service, doctor ensures lingering is enabled so the
|
|
284
|
+
gateway stays alive after logout.
|
|
285
|
+
|
|
286
|
+
### 11) Skills status
|
|
287
|
+
|
|
288
|
+
Doctor prints a quick summary of eligible/missing/blocked skills for the current
|
|
289
|
+
workspace.
|
|
290
|
+
|
|
291
|
+
### 12) Gateway auth checks (local token)
|
|
292
|
+
|
|
293
|
+
Doctor checks local gateway token auth readiness.
|
|
294
|
+
|
|
295
|
+
- If token mode needs a token and no token source exists, doctor offers to generate one.
|
|
296
|
+
- If `gateway.auth.token` is SecretRef-managed but unavailable, doctor warns and does not overwrite it with plaintext.
|
|
297
|
+
- `quantumclaw doctor --generate-gateway-token` forces generation only when no token SecretRef is configured.
|
|
298
|
+
|
|
299
|
+
### 12b) Read-only SecretRef-aware repairs
|
|
300
|
+
|
|
301
|
+
Some repair flows need to inspect configured credentials without weakening runtime fail-fast behavior.
|
|
302
|
+
|
|
303
|
+
- `quantumclaw doctor --fix` now uses the same read-only SecretRef summary model as status-family commands for targeted config repairs.
|
|
304
|
+
- Example: Telegram `allowFrom` / `groupAllowFrom` `@username` repair tries to use configured bot credentials when available.
|
|
305
|
+
- If the Telegram bot token is configured via SecretRef but unavailable in the current command path, doctor reports that the credential is configured-but-unavailable and skips auto-resolution instead of crashing or misreporting the token as missing.
|
|
306
|
+
|
|
307
|
+
### 13) Gateway health check + restart
|
|
308
|
+
|
|
309
|
+
Doctor runs a health check and offers to restart the gateway when it looks
|
|
310
|
+
unhealthy.
|
|
311
|
+
|
|
312
|
+
### 14) Channel status warnings
|
|
313
|
+
|
|
314
|
+
If the gateway is healthy, doctor runs a channel status probe and reports
|
|
315
|
+
warnings with suggested fixes.
|
|
316
|
+
|
|
317
|
+
### 15) Supervisor config audit + repair
|
|
318
|
+
|
|
319
|
+
Doctor checks the installed supervisor config (launchd/systemd/schtasks) for
|
|
320
|
+
missing or outdated defaults (e.g., systemd network-online dependencies and
|
|
321
|
+
restart delay). When it finds a mismatch, it recommends an update and can
|
|
322
|
+
rewrite the service file/task to the current defaults.
|
|
323
|
+
|
|
324
|
+
Notes:
|
|
325
|
+
|
|
326
|
+
- `quantumclaw doctor` prompts before rewriting supervisor config.
|
|
327
|
+
- `quantumclaw doctor --yes` accepts the default repair prompts.
|
|
328
|
+
- `quantumclaw doctor --repair` applies recommended fixes without prompts.
|
|
329
|
+
- `quantumclaw doctor --repair --force` overwrites custom supervisor configs.
|
|
330
|
+
- If token auth requires a token and `gateway.auth.token` is SecretRef-managed, doctor service install/repair validates the SecretRef but does not persist resolved plaintext token values into supervisor service environment metadata.
|
|
331
|
+
- If token auth requires a token and the configured token SecretRef is unresolved, doctor blocks the install/repair path with actionable guidance.
|
|
332
|
+
- If both `gateway.auth.token` and `gateway.auth.password` are configured and `gateway.auth.mode` is unset, doctor blocks install/repair until mode is set explicitly.
|
|
333
|
+
- For Linux user-systemd units, doctor token drift checks now include both `Environment=` and `EnvironmentFile=` sources when comparing service auth metadata.
|
|
334
|
+
- You can always force a full rewrite via `quantumclaw gateway install --force`.
|
|
335
|
+
|
|
336
|
+
### 16) Gateway runtime + port diagnostics
|
|
337
|
+
|
|
338
|
+
Doctor inspects the service runtime (PID, last exit status) and warns when the
|
|
339
|
+
service is installed but not actually running. It also checks for port collisions
|
|
340
|
+
on the gateway port (default `18789`) and reports likely causes (gateway already
|
|
341
|
+
running, SSH tunnel).
|
|
342
|
+
|
|
343
|
+
### 17) Gateway runtime best practices
|
|
344
|
+
|
|
345
|
+
Doctor warns when the gateway service runs on Bun or a version-managed Node path
|
|
346
|
+
(`nvm`, `fnm`, `volta`, `asdf`, etc.). WhatsApp + Telegram channels require Node,
|
|
347
|
+
and version-manager paths can break after upgrades because the service does not
|
|
348
|
+
load your shell init. Doctor offers to migrate to a system Node install when
|
|
349
|
+
available (Homebrew/apt/choco).
|
|
350
|
+
|
|
351
|
+
### 18) Config write + wizard metadata
|
|
352
|
+
|
|
353
|
+
Doctor persists any config changes and stamps wizard metadata to record the
|
|
354
|
+
doctor run.
|
|
355
|
+
|
|
356
|
+
### 19) Workspace tips (backup + memory system)
|
|
357
|
+
|
|
358
|
+
Doctor suggests a workspace memory system when missing and prints a backup tip
|
|
359
|
+
if the workspace is not already under git.
|
|
360
|
+
|
|
361
|
+
See [/concepts/agent-workspace](/concepts/agent-workspace) for a full guide to
|
|
362
|
+
workspace structure and git backup (recommended private GitHub or GitLab).
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Gateway singleton guard using the WebSocket listener bind"
|
|
3
|
+
read_when:
|
|
4
|
+
- Running or debugging the gateway process
|
|
5
|
+
- Investigating single-instance enforcement
|
|
6
|
+
title: "Gateway Lock"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Gateway lock
|
|
10
|
+
|
|
11
|
+
Last updated: 2025-12-11
|
|
12
|
+
|
|
13
|
+
## Why
|
|
14
|
+
|
|
15
|
+
- Ensure only one gateway instance runs per base port on the same host; additional gateways must use isolated profiles and unique ports.
|
|
16
|
+
- Survive crashes/SIGKILL without leaving stale lock files.
|
|
17
|
+
- Fail fast with a clear error when the control port is already occupied.
|
|
18
|
+
|
|
19
|
+
## Mechanism
|
|
20
|
+
|
|
21
|
+
- The gateway binds the WebSocket listener (default `ws://127.0.0.1:18789`) immediately on startup using an exclusive TCP listener.
|
|
22
|
+
- If the bind fails with `EADDRINUSE`, startup throws `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`.
|
|
23
|
+
- The OS releases the listener automatically on any process exit, including crashes and SIGKILL—no separate lock file or cleanup step is needed.
|
|
24
|
+
- On shutdown the gateway closes the WebSocket server and underlying HTTP server to free the port promptly.
|
|
25
|
+
|
|
26
|
+
## Error surface
|
|
27
|
+
|
|
28
|
+
- If another process holds the port, startup throws `GatewayLockError("another gateway instance is already listening on ws://127.0.0.1:<port>")`.
|
|
29
|
+
- Other bind failures surface as `GatewayLockError("failed to bind gateway socket on ws://127.0.0.1:<port>: …")`.
|
|
30
|
+
|
|
31
|
+
## Operational notes
|
|
32
|
+
|
|
33
|
+
- If the port is occupied by _another_ process, the error is the same; free the port or choose another with `quantumclaw gateway --port <port>`.
|
|
34
|
+
- The macOS app still maintains its own lightweight PID guard before spawning the gateway; the runtime lock is enforced by the WebSocket bind.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Health check steps for channel connectivity"
|
|
3
|
+
read_when:
|
|
4
|
+
- Diagnosing WhatsApp channel health
|
|
5
|
+
title: "Health Checks"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Health Checks (CLI)
|
|
9
|
+
|
|
10
|
+
Short guide to verify channel connectivity without guessing.
|
|
11
|
+
|
|
12
|
+
## Quick checks
|
|
13
|
+
|
|
14
|
+
- `quantumclaw status` — local summary: gateway reachability/mode, update hint, linked channel auth age, sessions + recent activity.
|
|
15
|
+
- `quantumclaw status --all` — full local diagnosis (read-only, color, safe to paste for debugging).
|
|
16
|
+
- `quantumclaw status --deep` — also probes the running Gateway (per-channel probes when supported).
|
|
17
|
+
- `quantumclaw health --json` — asks the running Gateway for a full health snapshot (WS-only; no direct Baileys socket).
|
|
18
|
+
- Send `/status` as a standalone message in WhatsApp/WebChat to get a status reply without invoking the agent.
|
|
19
|
+
- Logs: tail `/tmp/quantumclaw/quantumclaw-*.log` and filter for `web-heartbeat`, `web-reconnect`, `web-auto-reply`, `web-inbound`.
|
|
20
|
+
|
|
21
|
+
## Deep diagnostics
|
|
22
|
+
|
|
23
|
+
- Creds on disk: `ls -l ~/.quantumclaw/credentials/whatsapp/<accountId>/creds.json` (mtime should be recent).
|
|
24
|
+
- Session store: `ls -l ~/.quantumclaw/agents/<agentId>/sessions/sessions.json` (path can be overridden in config). Count and recent recipients are surfaced via `status`.
|
|
25
|
+
- Relink flow: `quantumclaw channels logout && quantumclaw channels login --verbose` when status codes 409–515 or `loggedOut` appear in logs. (Note: the QR login flow auto-restarts once for status 515 after pairing.)
|
|
26
|
+
|
|
27
|
+
## Health monitor config
|
|
28
|
+
|
|
29
|
+
- `gateway.channelHealthCheckMinutes`: how often the gateway checks channel health. Default: `5`. Set `0` to disable health-monitor restarts globally.
|
|
30
|
+
- `gateway.channelStaleEventThresholdMinutes`: how long a connected channel can stay idle before the health monitor treats it as stale and restarts it. Default: `30`. Keep this greater than or equal to `gateway.channelHealthCheckMinutes`.
|
|
31
|
+
- `gateway.channelMaxRestartsPerHour`: rolling one-hour cap for health-monitor restarts per channel/account. Default: `10`.
|
|
32
|
+
- `channels.<provider>.healthMonitor.enabled`: disable health-monitor restarts for a specific channel while leaving global monitoring enabled.
|
|
33
|
+
- `channels.<provider>.accounts.<accountId>.healthMonitor.enabled`: multi-account override that wins over the channel-level setting.
|
|
34
|
+
- These per-channel overrides apply to the built-in channel monitors that expose them today: Discord, Google Chat, iMessage, Microsoft Teams, Signal, Slack, Telegram, and WhatsApp.
|
|
35
|
+
|
|
36
|
+
## When something fails
|
|
37
|
+
|
|
38
|
+
- `logged out` or status 409–515 → relink with `quantumclaw channels logout` then `quantumclaw channels login`.
|
|
39
|
+
- Gateway unreachable → start it: `quantumclaw gateway --port 18789` (use `--force` if the port is busy).
|
|
40
|
+
- No inbound messages → confirm linked phone is online and the sender is allowed (`channels.whatsapp.allowFrom`); for group chats, ensure allowlist + mention rules match (`channels.whatsapp.groups`, `agents.list[].groupChat.mentionPatterns`).
|
|
41
|
+
|
|
42
|
+
## Dedicated "health" command
|
|
43
|
+
|
|
44
|
+
`quantumclaw health --json` asks the running Gateway for its health snapshot (no direct channel sockets from the CLI). It reports linked creds/auth age when available, per-channel probe summaries, session-store summary, and a probe duration. It exits non-zero if the Gateway is unreachable or the probe fails/timeouts. Use `--timeout <ms>` to override the 10s default.
|