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.
Files changed (827) hide show
  1. package/CHANGELOG.md +11573 -0
  2. package/LICENSE +21 -0
  3. package/README.md +486 -0
  4. package/docs/.i18n/README.md +81 -0
  5. package/docs/.i18n/ar-navigation.json +18 -0
  6. package/docs/.i18n/de-navigation.json +18 -0
  7. package/docs/.i18n/es-navigation.json +18 -0
  8. package/docs/.i18n/fr-navigation.json +18 -0
  9. package/docs/.i18n/glossary.ar.json +78 -0
  10. package/docs/.i18n/glossary.de.json +78 -0
  11. package/docs/.i18n/glossary.es.json +78 -0
  12. package/docs/.i18n/glossary.fa.json +78 -0
  13. package/docs/.i18n/glossary.fr.json +78 -0
  14. package/docs/.i18n/glossary.id.json +78 -0
  15. package/docs/.i18n/glossary.it.json +78 -0
  16. package/docs/.i18n/glossary.ja-JP.json +98 -0
  17. package/docs/.i18n/glossary.ko.json +78 -0
  18. package/docs/.i18n/glossary.nl.json +78 -0
  19. package/docs/.i18n/glossary.pl.json +78 -0
  20. package/docs/.i18n/glossary.pt-BR.json +78 -0
  21. package/docs/.i18n/glossary.th.json +78 -0
  22. package/docs/.i18n/glossary.tr.json +78 -0
  23. package/docs/.i18n/glossary.uk.json +78 -0
  24. package/docs/.i18n/glossary.vi.json +78 -0
  25. package/docs/.i18n/glossary.zh-CN.json +1002 -0
  26. package/docs/.i18n/glossary.zh-TW.json +78 -0
  27. package/docs/.i18n/id-navigation.json +18 -0
  28. package/docs/.i18n/it-navigation.json +18 -0
  29. package/docs/.i18n/ja-navigation.json +18 -0
  30. package/docs/.i18n/ko-navigation.json +18 -0
  31. package/docs/.i18n/pl-navigation.json +18 -0
  32. package/docs/.i18n/pt-BR-navigation.json +18 -0
  33. package/docs/.i18n/tr-navigation.json +18 -0
  34. package/docs/.i18n/translation-workflow.md +111 -0
  35. package/docs/.i18n/zh-Hans-navigation.json +542 -0
  36. package/docs/AGENTS.md +36 -0
  37. package/docs/announcements/bluebubbles-imessage.md +79 -0
  38. package/docs/assets/install-script.svg +1 -0
  39. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  40. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  41. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  42. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  43. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  44. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  45. package/docs/assets/openclaw-logo-text-dark.svg +418 -0
  46. package/docs/assets/openclaw-logo-text.png +0 -0
  47. package/docs/assets/openclaw-logo-text.svg +418 -0
  48. package/docs/assets/pixel-lobster.svg +60 -0
  49. package/docs/assets/pr/quick-settings-browser-tools.png +0 -0
  50. package/docs/assets/showcase/agents-ui.jpg +0 -0
  51. package/docs/assets/showcase/bambu-cli.png +0 -0
  52. package/docs/assets/showcase/codexmonitor.png +0 -0
  53. package/docs/assets/showcase/gohome-grafana.png +0 -0
  54. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  55. package/docs/assets/showcase/oura-health.png +0 -0
  56. package/docs/assets/showcase/padel-cli.svg +11 -0
  57. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  58. package/docs/assets/showcase/papla-tts.jpg +0 -0
  59. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  60. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  61. package/docs/assets/showcase/roborock-status.svg +13 -0
  62. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  63. package/docs/assets/showcase/snag.png +0 -0
  64. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  65. package/docs/assets/showcase/wienerlinien.png +0 -0
  66. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  67. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  68. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  69. package/docs/assets/sponsors/blacksmith-light.svg +14 -0
  70. package/docs/assets/sponsors/blacksmith.svg +14 -0
  71. package/docs/assets/sponsors/convex-light.svg +16 -0
  72. package/docs/assets/sponsors/convex.svg +16 -0
  73. package/docs/assets/sponsors/github-light.svg +3 -0
  74. package/docs/assets/sponsors/github.svg +3 -0
  75. package/docs/assets/sponsors/nvidia-dark.svg +9 -0
  76. package/docs/assets/sponsors/nvidia.svg +9 -0
  77. package/docs/assets/sponsors/openai-light.svg +3 -0
  78. package/docs/assets/sponsors/openai.svg +3 -0
  79. package/docs/assets/sponsors/vercel-light.svg +5 -0
  80. package/docs/assets/sponsors/vercel.svg +5 -0
  81. package/docs/auth-credential-semantics.md +124 -0
  82. package/docs/automation/auth-monitoring.md +11 -0
  83. package/docs/automation/clawflow.md +12 -0
  84. package/docs/automation/cron-jobs.md +500 -0
  85. package/docs/automation/cron-vs-heartbeat.md +11 -0
  86. package/docs/automation/gmail-pubsub.md +11 -0
  87. package/docs/automation/hooks.md +365 -0
  88. package/docs/automation/index.md +135 -0
  89. package/docs/automation/poll.md +12 -0
  90. package/docs/automation/standing-orders.md +250 -0
  91. package/docs/automation/taskflow.md +155 -0
  92. package/docs/automation/tasks.md +374 -0
  93. package/docs/automation/troubleshooting.md +12 -0
  94. package/docs/automation/webhook.md +12 -0
  95. package/docs/brave-search.md +11 -0
  96. package/docs/channels/access-groups.md +201 -0
  97. package/docs/channels/ambient-room-events.md +214 -0
  98. package/docs/channels/bot-loop-protection.md +131 -0
  99. package/docs/channels/broadcast-groups.md +472 -0
  100. package/docs/channels/channel-routing.md +162 -0
  101. package/docs/channels/clickclack.md +138 -0
  102. package/docs/channels/discord.md +1762 -0
  103. package/docs/channels/feishu.md +502 -0
  104. package/docs/channels/googlechat.md +284 -0
  105. package/docs/channels/group-messages.md +95 -0
  106. package/docs/channels/groups.md +519 -0
  107. package/docs/channels/imessage-from-bluebubbles.md +259 -0
  108. package/docs/channels/imessage.md +813 -0
  109. package/docs/channels/index.md +64 -0
  110. package/docs/channels/irc.md +253 -0
  111. package/docs/channels/line.md +243 -0
  112. package/docs/channels/location.md +71 -0
  113. package/docs/channels/matrix-migration.md +370 -0
  114. package/docs/channels/matrix-presentation.md +77 -0
  115. package/docs/channels/matrix-push-rules.md +150 -0
  116. package/docs/channels/matrix.md +921 -0
  117. package/docs/channels/mattermost.md +542 -0
  118. package/docs/channels/msteams.md +1042 -0
  119. package/docs/channels/nextcloud-talk.md +176 -0
  120. package/docs/channels/nostr.md +253 -0
  121. package/docs/channels/pairing.md +214 -0
  122. package/docs/channels/qqbot.md +309 -0
  123. package/docs/channels/signal.md +400 -0
  124. package/docs/channels/slack.md +1564 -0
  125. package/docs/channels/synology-chat.md +187 -0
  126. package/docs/channels/telegram.md +1107 -0
  127. package/docs/channels/tlon.md +296 -0
  128. package/docs/channels/troubleshooting.md +161 -0
  129. package/docs/channels/twitch.md +431 -0
  130. package/docs/channels/wechat.md +171 -0
  131. package/docs/channels/whatsapp.md +739 -0
  132. package/docs/channels/yuanbao.md +416 -0
  133. package/docs/channels/zalo.md +253 -0
  134. package/docs/channels/zalouser.md +199 -0
  135. package/docs/ci.md +612 -0
  136. package/docs/clawhub/publishing.md +96 -0
  137. package/docs/cli/acp.md +370 -0
  138. package/docs/cli/agent.md +103 -0
  139. package/docs/cli/agents.md +232 -0
  140. package/docs/cli/approvals.md +190 -0
  141. package/docs/cli/backup.md +97 -0
  142. package/docs/cli/browser.md +307 -0
  143. package/docs/cli/channels.md +154 -0
  144. package/docs/cli/clawbot.md +25 -0
  145. package/docs/cli/commitments.md +90 -0
  146. package/docs/cli/completion.md +39 -0
  147. package/docs/cli/config.md +504 -0
  148. package/docs/cli/configure.md +77 -0
  149. package/docs/cli/crestodian.md +332 -0
  150. package/docs/cli/cron.md +281 -0
  151. package/docs/cli/daemon.md +67 -0
  152. package/docs/cli/dashboard.md +33 -0
  153. package/docs/cli/devices.md +204 -0
  154. package/docs/cli/directory.md +68 -0
  155. package/docs/cli/dns.md +53 -0
  156. package/docs/cli/docs.md +73 -0
  157. package/docs/cli/doctor.md +237 -0
  158. package/docs/cli/flows.md +52 -0
  159. package/docs/cli/gateway.md +567 -0
  160. package/docs/cli/health.md +43 -0
  161. package/docs/cli/hooks.md +345 -0
  162. package/docs/cli/index.md +396 -0
  163. package/docs/cli/infer.md +364 -0
  164. package/docs/cli/logs.md +65 -0
  165. package/docs/cli/mcp.md +529 -0
  166. package/docs/cli/memory.md +183 -0
  167. package/docs/cli/message.md +317 -0
  168. package/docs/cli/migrate.md +290 -0
  169. package/docs/cli/models.md +224 -0
  170. package/docs/cli/node.md +177 -0
  171. package/docs/cli/nodes.md +76 -0
  172. package/docs/cli/onboard.md +245 -0
  173. package/docs/cli/pairing.md +77 -0
  174. package/docs/cli/path.md +502 -0
  175. package/docs/cli/plugins.md +454 -0
  176. package/docs/cli/policy.md +418 -0
  177. package/docs/cli/proxy.md +89 -0
  178. package/docs/cli/qr.md +56 -0
  179. package/docs/cli/reset.md +39 -0
  180. package/docs/cli/sandbox.md +208 -0
  181. package/docs/cli/secrets.md +202 -0
  182. package/docs/cli/security.md +124 -0
  183. package/docs/cli/sessions.md +164 -0
  184. package/docs/cli/setup.md +59 -0
  185. package/docs/cli/skills.md +102 -0
  186. package/docs/cli/status.md +45 -0
  187. package/docs/cli/system.md +89 -0
  188. package/docs/cli/tasks.md +111 -0
  189. package/docs/cli/tui.md +89 -0
  190. package/docs/cli/uninstall.md +44 -0
  191. package/docs/cli/update.md +242 -0
  192. package/docs/cli/voicecall.md +204 -0
  193. package/docs/cli/webhooks.md +117 -0
  194. package/docs/cli/wiki.md +256 -0
  195. package/docs/concepts/active-memory.md +856 -0
  196. package/docs/concepts/agent-loop.md +185 -0
  197. package/docs/concepts/agent-runtimes.md +243 -0
  198. package/docs/concepts/agent-workspace.md +230 -0
  199. package/docs/concepts/agent.md +136 -0
  200. package/docs/concepts/architecture.md +154 -0
  201. package/docs/concepts/channel-docking.md +145 -0
  202. package/docs/concepts/commitments.md +150 -0
  203. package/docs/concepts/compaction.md +203 -0
  204. package/docs/concepts/context-engine.md +306 -0
  205. package/docs/concepts/context.md +199 -0
  206. package/docs/concepts/delegate-architecture.md +319 -0
  207. package/docs/concepts/dreaming.md +261 -0
  208. package/docs/concepts/experimental-features.md +108 -0
  209. package/docs/concepts/features.md +91 -0
  210. package/docs/concepts/mantis-slack-desktop-runbook.md +202 -0
  211. package/docs/concepts/mantis.md +740 -0
  212. package/docs/concepts/markdown-formatting.md +139 -0
  213. package/docs/concepts/memory-builtin.md +146 -0
  214. package/docs/concepts/memory-honcho.md +144 -0
  215. package/docs/concepts/memory-qmd.md +271 -0
  216. package/docs/concepts/memory-search.md +166 -0
  217. package/docs/concepts/memory.md +258 -0
  218. package/docs/concepts/message-lifecycle-refactor.md +1128 -0
  219. package/docs/concepts/messages.md +214 -0
  220. package/docs/concepts/model-failover.md +385 -0
  221. package/docs/concepts/model-providers.md +715 -0
  222. package/docs/concepts/models.md +370 -0
  223. package/docs/concepts/multi-agent.md +619 -0
  224. package/docs/concepts/oauth.md +198 -0
  225. package/docs/concepts/openclaw-sdk.md +323 -0
  226. package/docs/concepts/parallel-specialist-lanes.md +127 -0
  227. package/docs/concepts/personal-agent-benchmark-pack.md +74 -0
  228. package/docs/concepts/presence.md +117 -0
  229. package/docs/concepts/progress-drafts.md +362 -0
  230. package/docs/concepts/qa-e2e-automation.md +820 -0
  231. package/docs/concepts/qa-matrix.md +139 -0
  232. package/docs/concepts/queue-steering.md +90 -0
  233. package/docs/concepts/queue.md +122 -0
  234. package/docs/concepts/retry.md +86 -0
  235. package/docs/concepts/session-pruning.md +104 -0
  236. package/docs/concepts/session-tool.md +190 -0
  237. package/docs/concepts/session.md +164 -0
  238. package/docs/concepts/soul.md +116 -0
  239. package/docs/concepts/streaming.md +251 -0
  240. package/docs/concepts/system-prompt.md +310 -0
  241. package/docs/concepts/timezone.md +47 -0
  242. package/docs/concepts/typebox.md +309 -0
  243. package/docs/concepts/typing-indicators.md +88 -0
  244. package/docs/concepts/usage-tracking.md +66 -0
  245. package/docs/date-time.md +126 -0
  246. package/docs/debug/node-issue.md +90 -0
  247. package/docs/diagnostics/flags.md +138 -0
  248. package/docs/docs.json +1832 -0
  249. package/docs/gateway/authentication.md +239 -0
  250. package/docs/gateway/background-process.md +147 -0
  251. package/docs/gateway/bonjour.md +303 -0
  252. package/docs/gateway/bridge-protocol.md +94 -0
  253. package/docs/gateway/cli-backends.md +420 -0
  254. package/docs/gateway/config-agents.md +1514 -0
  255. package/docs/gateway/config-channels.md +945 -0
  256. package/docs/gateway/config-tools.md +769 -0
  257. package/docs/gateway/configuration-examples.md +705 -0
  258. package/docs/gateway/configuration-reference.md +1393 -0
  259. package/docs/gateway/configuration.md +737 -0
  260. package/docs/gateway/diagnostics.md +213 -0
  261. package/docs/gateway/discovery.md +154 -0
  262. package/docs/gateway/doctor.md +574 -0
  263. package/docs/gateway/gateway-lock.md +37 -0
  264. package/docs/gateway/health.md +73 -0
  265. package/docs/gateway/heartbeat.md +493 -0
  266. package/docs/gateway/index.md +383 -0
  267. package/docs/gateway/local-model-services.md +205 -0
  268. package/docs/gateway/local-models.md +355 -0
  269. package/docs/gateway/logging.md +149 -0
  270. package/docs/gateway/multiple-gateways.md +178 -0
  271. package/docs/gateway/network-model.md +15 -0
  272. package/docs/gateway/openai-http-api.md +350 -0
  273. package/docs/gateway/openresponses-http-api.md +347 -0
  274. package/docs/gateway/openshell.md +316 -0
  275. package/docs/gateway/opentelemetry.md +404 -0
  276. package/docs/gateway/operator-scopes.md +111 -0
  277. package/docs/gateway/pairing.md +207 -0
  278. package/docs/gateway/prometheus.md +230 -0
  279. package/docs/gateway/protocol.md +803 -0
  280. package/docs/gateway/remote-gateway-readme.md +169 -0
  281. package/docs/gateway/remote.md +280 -0
  282. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +146 -0
  283. package/docs/gateway/sandboxing.md +545 -0
  284. package/docs/gateway/secrets-plan-contract.md +114 -0
  285. package/docs/gateway/secrets.md +609 -0
  286. package/docs/gateway/security/audit-checks.md +127 -0
  287. package/docs/gateway/security/index.md +1326 -0
  288. package/docs/gateway/security/secure-file-operations.md +76 -0
  289. package/docs/gateway/tailscale.md +156 -0
  290. package/docs/gateway/tools-invoke-http-api.md +169 -0
  291. package/docs/gateway/troubleshooting.md +772 -0
  292. package/docs/gateway/trusted-proxy-auth.md +451 -0
  293. package/docs/help/debugging.md +344 -0
  294. package/docs/help/environment.md +214 -0
  295. package/docs/help/faq-first-run.md +867 -0
  296. package/docs/help/faq-models.md +553 -0
  297. package/docs/help/faq.md +1975 -0
  298. package/docs/help/gpt55-codex-agentic-parity-maintainers.md +196 -0
  299. package/docs/help/gpt55-codex-agentic-parity.md +230 -0
  300. package/docs/help/index.md +39 -0
  301. package/docs/help/scripts.md +56 -0
  302. package/docs/help/testing-live.md +580 -0
  303. package/docs/help/testing-updates-plugins.md +291 -0
  304. package/docs/help/testing.md +928 -0
  305. package/docs/help/troubleshooting.md +424 -0
  306. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  307. package/docs/images/feishu-get-group-id.png +0 -0
  308. package/docs/images/groups-flow.svg +52 -0
  309. package/docs/images/mobile-ui-screenshot.png +0 -0
  310. package/docs/index.md +196 -0
  311. package/docs/install/ansible.md +233 -0
  312. package/docs/install/azure.md +315 -0
  313. package/docs/install/bun.md +59 -0
  314. package/docs/install/clawdock.md +112 -0
  315. package/docs/install/development-channels.md +135 -0
  316. package/docs/install/digitalocean.md +174 -0
  317. package/docs/install/docker-vm-runtime.md +154 -0
  318. package/docs/install/docker.md +562 -0
  319. package/docs/install/exe-dev.md +201 -0
  320. package/docs/install/fly.md +524 -0
  321. package/docs/install/gcp.md +418 -0
  322. package/docs/install/hetzner.md +285 -0
  323. package/docs/install/hostinger.md +98 -0
  324. package/docs/install/index.md +221 -0
  325. package/docs/install/installer.md +455 -0
  326. package/docs/install/kubernetes.md +196 -0
  327. package/docs/install/macos-vm.md +281 -0
  328. package/docs/install/migrating-claude.md +165 -0
  329. package/docs/install/migrating-hermes.md +177 -0
  330. package/docs/install/migrating.md +137 -0
  331. package/docs/install/nix.md +112 -0
  332. package/docs/install/node.md +142 -0
  333. package/docs/install/northflank.mdx +44 -0
  334. package/docs/install/oracle.md +218 -0
  335. package/docs/install/podman.md +210 -0
  336. package/docs/install/railway.mdx +92 -0
  337. package/docs/install/raspberry-pi.md +234 -0
  338. package/docs/install/render.mdx +167 -0
  339. package/docs/install/uninstall.md +131 -0
  340. package/docs/install/updating.md +280 -0
  341. package/docs/logging.md +318 -0
  342. package/docs/nav-tabs-underline.js +100 -0
  343. package/docs/network.md +72 -0
  344. package/docs/nodes/audio.md +215 -0
  345. package/docs/nodes/camera.md +166 -0
  346. package/docs/nodes/images.md +77 -0
  347. package/docs/nodes/index.md +439 -0
  348. package/docs/nodes/location-command.md +102 -0
  349. package/docs/nodes/media-understanding.md +469 -0
  350. package/docs/nodes/talk.md +154 -0
  351. package/docs/nodes/troubleshooting.md +123 -0
  352. package/docs/nodes/voicewake.md +93 -0
  353. package/docs/perplexity.md +11 -0
  354. package/docs/pi-dev.md +82 -0
  355. package/docs/pi.md +573 -0
  356. package/docs/plan/codex-context-engine-harness.md +624 -0
  357. package/docs/plan/ui-channels.md +284 -0
  358. package/docs/platforms/android.md +285 -0
  359. package/docs/platforms/digitalocean.md +12 -0
  360. package/docs/platforms/index.md +60 -0
  361. package/docs/platforms/ios.md +283 -0
  362. package/docs/platforms/linux.md +141 -0
  363. package/docs/platforms/mac/bundled-gateway.md +79 -0
  364. package/docs/platforms/mac/canvas.md +128 -0
  365. package/docs/platforms/mac/child-process.md +72 -0
  366. package/docs/platforms/mac/dev-setup.md +112 -0
  367. package/docs/platforms/mac/health.md +39 -0
  368. package/docs/platforms/mac/icon.md +36 -0
  369. package/docs/platforms/mac/logging.md +62 -0
  370. package/docs/platforms/mac/menu-bar.md +93 -0
  371. package/docs/platforms/mac/peekaboo.md +92 -0
  372. package/docs/platforms/mac/permissions.md +53 -0
  373. package/docs/platforms/mac/remote.md +123 -0
  374. package/docs/platforms/mac/signing.md +52 -0
  375. package/docs/platforms/mac/skills.md +43 -0
  376. package/docs/platforms/mac/voice-overlay.md +66 -0
  377. package/docs/platforms/mac/voicewake.md +73 -0
  378. package/docs/platforms/mac/webchat.md +54 -0
  379. package/docs/platforms/mac/xpc.md +66 -0
  380. package/docs/platforms/macos.md +226 -0
  381. package/docs/platforms/oracle.md +12 -0
  382. package/docs/platforms/raspberry-pi.md +13 -0
  383. package/docs/platforms/windows.md +286 -0
  384. package/docs/plugins/adding-capabilities.md +133 -0
  385. package/docs/plugins/admin-http-rpc.md +216 -0
  386. package/docs/plugins/agent-tools.md +13 -0
  387. package/docs/plugins/architecture-internals.md +1195 -0
  388. package/docs/plugins/architecture.md +481 -0
  389. package/docs/plugins/building-extensions.md +13 -0
  390. package/docs/plugins/building-plugins.md +330 -0
  391. package/docs/plugins/bundles.md +310 -0
  392. package/docs/plugins/cli-backend-plugins.md +310 -0
  393. package/docs/plugins/codex-computer-use.md +293 -0
  394. package/docs/plugins/codex-harness-reference.md +409 -0
  395. package/docs/plugins/codex-harness-runtime.md +247 -0
  396. package/docs/plugins/codex-harness.md +746 -0
  397. package/docs/plugins/codex-native-plugins.md +276 -0
  398. package/docs/plugins/community.md +77 -0
  399. package/docs/plugins/compatibility.md +164 -0
  400. package/docs/plugins/dependency-resolution.md +143 -0
  401. package/docs/plugins/google-meet.md +1737 -0
  402. package/docs/plugins/hooks.md +459 -0
  403. package/docs/plugins/install-overrides.md +80 -0
  404. package/docs/plugins/manage-plugins.md +210 -0
  405. package/docs/plugins/manifest.md +1359 -0
  406. package/docs/plugins/memory-lancedb.md +385 -0
  407. package/docs/plugins/memory-wiki.md +529 -0
  408. package/docs/plugins/message-presentation.md +473 -0
  409. package/docs/plugins/oc-path.md +166 -0
  410. package/docs/plugins/plugin-inventory.md +182 -0
  411. package/docs/plugins/reference/acpx.md +23 -0
  412. package/docs/plugins/reference/admin-http-rpc.md +23 -0
  413. package/docs/plugins/reference/alibaba.md +23 -0
  414. package/docs/plugins/reference/amazon-bedrock-mantle.md +23 -0
  415. package/docs/plugins/reference/amazon-bedrock.md +23 -0
  416. package/docs/plugins/reference/anthropic-vertex.md +19 -0
  417. package/docs/plugins/reference/anthropic.md +23 -0
  418. package/docs/plugins/reference/arcee.md +23 -0
  419. package/docs/plugins/reference/azure-speech.md +23 -0
  420. package/docs/plugins/reference/bonjour.md +19 -0
  421. package/docs/plugins/reference/brave.md +23 -0
  422. package/docs/plugins/reference/browser.md +23 -0
  423. package/docs/plugins/reference/byteplus.md +19 -0
  424. package/docs/plugins/reference/canvas.md +19 -0
  425. package/docs/plugins/reference/cerebras.md +23 -0
  426. package/docs/plugins/reference/chutes.md +23 -0
  427. package/docs/plugins/reference/clickclack.md +23 -0
  428. package/docs/plugins/reference/cloudflare-ai-gateway.md +23 -0
  429. package/docs/plugins/reference/codex.md +23 -0
  430. package/docs/plugins/reference/comfy.md +23 -0
  431. package/docs/plugins/reference/copilot-proxy.md +19 -0
  432. package/docs/plugins/reference/deepgram.md +23 -0
  433. package/docs/plugins/reference/deepinfra.md +23 -0
  434. package/docs/plugins/reference/deepseek.md +23 -0
  435. package/docs/plugins/reference/diagnostics-otel.md +19 -0
  436. package/docs/plugins/reference/diagnostics-prometheus.md +19 -0
  437. package/docs/plugins/reference/diffs.md +19 -0
  438. package/docs/plugins/reference/discord.md +23 -0
  439. package/docs/plugins/reference/document-extract.md +23 -0
  440. package/docs/plugins/reference/duckduckgo.md +23 -0
  441. package/docs/plugins/reference/elevenlabs.md +23 -0
  442. package/docs/plugins/reference/exa.md +23 -0
  443. package/docs/plugins/reference/fal.md +23 -0
  444. package/docs/plugins/reference/feishu.md +23 -0
  445. package/docs/plugins/reference/file-transfer.md +19 -0
  446. package/docs/plugins/reference/firecrawl.md +23 -0
  447. package/docs/plugins/reference/fireworks.md +23 -0
  448. package/docs/plugins/reference/github-copilot.md +23 -0
  449. package/docs/plugins/reference/google-meet.md +23 -0
  450. package/docs/plugins/reference/google.md +23 -0
  451. package/docs/plugins/reference/googlechat.md +23 -0
  452. package/docs/plugins/reference/gradium.md +23 -0
  453. package/docs/plugins/reference/groq.md +23 -0
  454. package/docs/plugins/reference/huggingface.md +23 -0
  455. package/docs/plugins/reference/imessage.md +23 -0
  456. package/docs/plugins/reference/inworld.md +23 -0
  457. package/docs/plugins/reference/irc.md +23 -0
  458. package/docs/plugins/reference/kilocode.md +23 -0
  459. package/docs/plugins/reference/kimi.md +23 -0
  460. package/docs/plugins/reference/line.md +23 -0
  461. package/docs/plugins/reference/litellm.md +23 -0
  462. package/docs/plugins/reference/llm-task.md +19 -0
  463. package/docs/plugins/reference/lmstudio.md +23 -0
  464. package/docs/plugins/reference/lobster.md +19 -0
  465. package/docs/plugins/reference/matrix.md +23 -0
  466. package/docs/plugins/reference/mattermost.md +23 -0
  467. package/docs/plugins/reference/memory-core.md +19 -0
  468. package/docs/plugins/reference/memory-lancedb.md +23 -0
  469. package/docs/plugins/reference/memory-wiki.md +23 -0
  470. package/docs/plugins/reference/microsoft-foundry.md +19 -0
  471. package/docs/plugins/reference/microsoft.md +19 -0
  472. package/docs/plugins/reference/migrate-claude.md +19 -0
  473. package/docs/plugins/reference/migrate-hermes.md +19 -0
  474. package/docs/plugins/reference/minimax.md +23 -0
  475. package/docs/plugins/reference/mistral.md +23 -0
  476. package/docs/plugins/reference/moonshot.md +23 -0
  477. package/docs/plugins/reference/msteams.md +23 -0
  478. package/docs/plugins/reference/nextcloud-talk.md +23 -0
  479. package/docs/plugins/reference/nostr.md +23 -0
  480. package/docs/plugins/reference/nvidia.md +23 -0
  481. package/docs/plugins/reference/oc-path.md +23 -0
  482. package/docs/plugins/reference/ollama.md +23 -0
  483. package/docs/plugins/reference/open-prose.md +19 -0
  484. package/docs/plugins/reference/openai.md +23 -0
  485. package/docs/plugins/reference/opencode-go.md +23 -0
  486. package/docs/plugins/reference/opencode.md +23 -0
  487. package/docs/plugins/reference/openrouter.md +23 -0
  488. package/docs/plugins/reference/openshell.md +19 -0
  489. package/docs/plugins/reference/perplexity.md +23 -0
  490. package/docs/plugins/reference/policy.md +23 -0
  491. package/docs/plugins/reference/qa-channel.md +23 -0
  492. package/docs/plugins/reference/qa-lab.md +19 -0
  493. package/docs/plugins/reference/qa-matrix.md +19 -0
  494. package/docs/plugins/reference/qianfan.md +23 -0
  495. package/docs/plugins/reference/qqbot.md +23 -0
  496. package/docs/plugins/reference/qwen.md +23 -0
  497. package/docs/plugins/reference/runway.md +23 -0
  498. package/docs/plugins/reference/searxng.md +19 -0
  499. package/docs/plugins/reference/senseaudio.md +23 -0
  500. package/docs/plugins/reference/sglang.md +23 -0
  501. package/docs/plugins/reference/signal.md +23 -0
  502. package/docs/plugins/reference/skill-workshop.md +23 -0
  503. package/docs/plugins/reference/slack.md +23 -0
  504. package/docs/plugins/reference/stepfun.md +23 -0
  505. package/docs/plugins/reference/synology-chat.md +23 -0
  506. package/docs/plugins/reference/synthetic.md +23 -0
  507. package/docs/plugins/reference/tavily.md +23 -0
  508. package/docs/plugins/reference/telegram.md +23 -0
  509. package/docs/plugins/reference/tencent.md +23 -0
  510. package/docs/plugins/reference/tlon.md +23 -0
  511. package/docs/plugins/reference/together.md +23 -0
  512. package/docs/plugins/reference/tokenjuice.md +23 -0
  513. package/docs/plugins/reference/tts-local-cli.md +19 -0
  514. package/docs/plugins/reference/twitch.md +23 -0
  515. package/docs/plugins/reference/venice.md +23 -0
  516. package/docs/plugins/reference/vercel-ai-gateway.md +23 -0
  517. package/docs/plugins/reference/vllm.md +23 -0
  518. package/docs/plugins/reference/voice-call.md +23 -0
  519. package/docs/plugins/reference/volcengine.md +23 -0
  520. package/docs/plugins/reference/voyage.md +19 -0
  521. package/docs/plugins/reference/vydra.md +23 -0
  522. package/docs/plugins/reference/web-readability.md +19 -0
  523. package/docs/plugins/reference/webhooks.md +23 -0
  524. package/docs/plugins/reference/whatsapp.md +23 -0
  525. package/docs/plugins/reference/xai.md +23 -0
  526. package/docs/plugins/reference/xiaomi.md +23 -0
  527. package/docs/plugins/reference/zai.md +23 -0
  528. package/docs/plugins/reference/zalo.md +23 -0
  529. package/docs/plugins/reference/zalouser.md +24 -0
  530. package/docs/plugins/reference.md +138 -0
  531. package/docs/plugins/sdk-agent-harness.md +339 -0
  532. package/docs/plugins/sdk-channel-ingress.md +137 -0
  533. package/docs/plugins/sdk-channel-message.md +458 -0
  534. package/docs/plugins/sdk-channel-plugins.md +762 -0
  535. package/docs/plugins/sdk-channel-turn.md +580 -0
  536. package/docs/plugins/sdk-entrypoints.md +333 -0
  537. package/docs/plugins/sdk-migration.md +949 -0
  538. package/docs/plugins/sdk-overview.md +501 -0
  539. package/docs/plugins/sdk-provider-plugins.md +807 -0
  540. package/docs/plugins/sdk-runtime.md +676 -0
  541. package/docs/plugins/sdk-setup.md +550 -0
  542. package/docs/plugins/sdk-subpaths.md +396 -0
  543. package/docs/plugins/sdk-testing.md +401 -0
  544. package/docs/plugins/skill-workshop.md +713 -0
  545. package/docs/plugins/tool-plugins.md +411 -0
  546. package/docs/plugins/voice-call.md +943 -0
  547. package/docs/plugins/webhooks.md +192 -0
  548. package/docs/plugins/zalouser.md +86 -0
  549. package/docs/prose.md +137 -0
  550. package/docs/providers/alibaba.md +158 -0
  551. package/docs/providers/anthropic.md +344 -0
  552. package/docs/providers/arcee.md +144 -0
  553. package/docs/providers/azure-speech.md +119 -0
  554. package/docs/providers/bedrock-mantle.md +211 -0
  555. package/docs/providers/bedrock.md +414 -0
  556. package/docs/providers/cerebras.md +130 -0
  557. package/docs/providers/chutes.md +153 -0
  558. package/docs/providers/claude-max-api-proxy.md +188 -0
  559. package/docs/providers/cloudflare-ai-gateway.md +119 -0
  560. package/docs/providers/comfy.md +362 -0
  561. package/docs/providers/deepgram.md +184 -0
  562. package/docs/providers/deepinfra.md +87 -0
  563. package/docs/providers/deepseek.md +146 -0
  564. package/docs/providers/ds4.md +309 -0
  565. package/docs/providers/elevenlabs.md +130 -0
  566. package/docs/providers/fal.md +204 -0
  567. package/docs/providers/fireworks.md +144 -0
  568. package/docs/providers/github-copilot.md +225 -0
  569. package/docs/providers/glm.md +137 -0
  570. package/docs/providers/google.md +472 -0
  571. package/docs/providers/gradium.md +123 -0
  572. package/docs/providers/groq.md +180 -0
  573. package/docs/providers/huggingface.md +235 -0
  574. package/docs/providers/index.md +102 -0
  575. package/docs/providers/inferrs.md +272 -0
  576. package/docs/providers/inworld.md +120 -0
  577. package/docs/providers/kilocode.md +135 -0
  578. package/docs/providers/litellm.md +234 -0
  579. package/docs/providers/lmstudio.md +224 -0
  580. package/docs/providers/minimax.md +505 -0
  581. package/docs/providers/mistral.md +235 -0
  582. package/docs/providers/models.md +65 -0
  583. package/docs/providers/moonshot.md +413 -0
  584. package/docs/providers/nvidia.md +140 -0
  585. package/docs/providers/ollama.md +1180 -0
  586. package/docs/providers/openai.md +1057 -0
  587. package/docs/providers/opencode-go.md +123 -0
  588. package/docs/providers/opencode.md +149 -0
  589. package/docs/providers/openrouter.md +349 -0
  590. package/docs/providers/perplexity-provider.md +123 -0
  591. package/docs/providers/qianfan.md +132 -0
  592. package/docs/providers/qwen.md +332 -0
  593. package/docs/providers/runway.md +103 -0
  594. package/docs/providers/senseaudio.md +68 -0
  595. package/docs/providers/sglang.md +161 -0
  596. package/docs/providers/stepfun.md +229 -0
  597. package/docs/providers/synthetic.md +154 -0
  598. package/docs/providers/tencent.md +130 -0
  599. package/docs/providers/together.md +141 -0
  600. package/docs/providers/venice.md +315 -0
  601. package/docs/providers/vercel-ai-gateway.md +128 -0
  602. package/docs/providers/vllm.md +383 -0
  603. package/docs/providers/volcengine.md +199 -0
  604. package/docs/providers/vydra.md +180 -0
  605. package/docs/providers/xai.md +560 -0
  606. package/docs/providers/xiaomi.md +188 -0
  607. package/docs/providers/zai.md +203 -0
  608. package/docs/refactor/access.md +9 -0
  609. package/docs/refactor/acp.md +298 -0
  610. package/docs/refactor/canvas.md +131 -0
  611. package/docs/refactor/ingress-core.md +341 -0
  612. package/docs/reference/AGENTS.default.md +129 -0
  613. package/docs/reference/RELEASING.md +767 -0
  614. package/docs/reference/api-usage-costs.md +202 -0
  615. package/docs/reference/application-modernization-plan.md +208 -0
  616. package/docs/reference/code-mode.md +757 -0
  617. package/docs/reference/credits.md +33 -0
  618. package/docs/reference/device-models.md +50 -0
  619. package/docs/reference/full-release-validation.md +202 -0
  620. package/docs/reference/memory-config.md +630 -0
  621. package/docs/reference/openclaw-sdk-api-design.md +390 -0
  622. package/docs/reference/prompt-caching.md +358 -0
  623. package/docs/reference/rich-output-protocol.md +79 -0
  624. package/docs/reference/rpc.md +43 -0
  625. package/docs/reference/secretref-credential-surface.md +159 -0
  626. package/docs/reference/secretref-user-supplied-credentials-matrix.json +663 -0
  627. package/docs/reference/session-management-compaction.md +461 -0
  628. package/docs/reference/templates/AGENTS.dev.md +89 -0
  629. package/docs/reference/templates/AGENTS.md +225 -0
  630. package/docs/reference/templates/BOOT.md +16 -0
  631. package/docs/reference/templates/BOOTSTRAP.md +66 -0
  632. package/docs/reference/templates/HEARTBEAT.md +16 -0
  633. package/docs/reference/templates/IDENTITY.dev.md +52 -0
  634. package/docs/reference/templates/IDENTITY.md +34 -0
  635. package/docs/reference/templates/SOUL.dev.md +82 -0
  636. package/docs/reference/templates/SOUL.md +49 -0
  637. package/docs/reference/templates/TOOLS.dev.md +29 -0
  638. package/docs/reference/templates/TOOLS.md +51 -0
  639. package/docs/reference/templates/USER.dev.md +23 -0
  640. package/docs/reference/templates/USER.md +28 -0
  641. package/docs/reference/test.md +239 -0
  642. package/docs/reference/token-use.md +233 -0
  643. package/docs/reference/transcript-hygiene.md +214 -0
  644. package/docs/reference/wizard.md +252 -0
  645. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +101 -0
  646. package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
  647. package/docs/security/formal-verification.md +170 -0
  648. package/docs/security/incident-response.md +59 -0
  649. package/docs/security/network-proxy.md +268 -0
  650. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +12 -0
  651. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  652. package/docs/start/bootstrapping.md +49 -0
  653. package/docs/start/docs-directory.md +69 -0
  654. package/docs/start/getting-started.md +152 -0
  655. package/docs/start/hubs.md +201 -0
  656. package/docs/start/lore.md +223 -0
  657. package/docs/start/onboarding-overview.md +72 -0
  658. package/docs/start/onboarding.md +95 -0
  659. package/docs/start/openclaw.md +244 -0
  660. package/docs/start/quickstart.md +25 -0
  661. package/docs/start/setup.md +178 -0
  662. package/docs/start/showcase.md +383 -0
  663. package/docs/start/wizard-cli-automation.md +232 -0
  664. package/docs/start/wizard-cli-reference.md +331 -0
  665. package/docs/start/wizard.md +141 -0
  666. package/docs/style.css +184 -0
  667. package/docs/superpowers/specs/2026-04-22-tweakcn-custom-theme-import-design.md +316 -0
  668. package/docs/tools/acp-agents-setup.md +352 -0
  669. package/docs/tools/acp-agents.md +847 -0
  670. package/docs/tools/agent-send.md +112 -0
  671. package/docs/tools/apply-patch.md +64 -0
  672. package/docs/tools/brave-search.md +139 -0
  673. package/docs/tools/browser-control.md +391 -0
  674. package/docs/tools/browser-linux-troubleshooting.md +173 -0
  675. package/docs/tools/browser-login.md +77 -0
  676. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +219 -0
  677. package/docs/tools/browser.md +769 -0
  678. package/docs/tools/btw.md +159 -0
  679. package/docs/tools/capability-cookbook.md +12 -0
  680. package/docs/tools/clawhub.md +5 -0
  681. package/docs/tools/code-execution.md +173 -0
  682. package/docs/tools/creating-skills.md +120 -0
  683. package/docs/tools/diffs.md +506 -0
  684. package/docs/tools/duckduckgo-search.md +109 -0
  685. package/docs/tools/elevated.md +128 -0
  686. package/docs/tools/exa-search.md +152 -0
  687. package/docs/tools/exec-approvals-advanced.md +360 -0
  688. package/docs/tools/exec-approvals.md +474 -0
  689. package/docs/tools/exec.md +282 -0
  690. package/docs/tools/firecrawl.md +155 -0
  691. package/docs/tools/gemini-search.md +114 -0
  692. package/docs/tools/grok-search.md +113 -0
  693. package/docs/tools/image-generation.md +433 -0
  694. package/docs/tools/index.md +178 -0
  695. package/docs/tools/kimi-search.md +105 -0
  696. package/docs/tools/llm-task.md +137 -0
  697. package/docs/tools/lobster.md +365 -0
  698. package/docs/tools/loop-detection.md +154 -0
  699. package/docs/tools/media-overview.md +157 -0
  700. package/docs/tools/minimax-search.md +102 -0
  701. package/docs/tools/multi-agent-sandbox-tools.md +409 -0
  702. package/docs/tools/music-generation.md +371 -0
  703. package/docs/tools/ollama-search.md +153 -0
  704. package/docs/tools/pdf.md +195 -0
  705. package/docs/tools/perplexity-search.md +220 -0
  706. package/docs/tools/plugin.md +327 -0
  707. package/docs/tools/reactions.md +100 -0
  708. package/docs/tools/searxng-search.md +141 -0
  709. package/docs/tools/skills-config.md +195 -0
  710. package/docs/tools/skills.md +535 -0
  711. package/docs/tools/slash-commands.md +488 -0
  712. package/docs/tools/steer.md +84 -0
  713. package/docs/tools/subagents.md +650 -0
  714. package/docs/tools/tavily.md +162 -0
  715. package/docs/tools/thinking.md +140 -0
  716. package/docs/tools/tokenjuice.md +81 -0
  717. package/docs/tools/tool-search.md +269 -0
  718. package/docs/tools/trajectory.md +229 -0
  719. package/docs/tools/tts.md +1004 -0
  720. package/docs/tools/video-generation.md +552 -0
  721. package/docs/tools/web-fetch.md +195 -0
  722. package/docs/tools/web.md +459 -0
  723. package/docs/tts.md +11 -0
  724. package/docs/vps.md +139 -0
  725. package/docs/web/control-ui.md +503 -0
  726. package/docs/web/dashboard.md +107 -0
  727. package/docs/web/index.md +133 -0
  728. package/docs/web/tui.md +246 -0
  729. package/docs/web/webchat.md +99 -0
  730. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  731. package/docs/whatsapp-openclaw.jpg +0 -0
  732. package/nodmix.mjs +487 -0
  733. package/package.json +1852 -0
  734. package/patches/.gitkeep +0 -0
  735. package/patches/@agentclientprotocol__claude-agent-acp@0.36.1.patch +41 -0
  736. package/pnpm-workspace.yaml +63 -0
  737. package/scripts/crabbox-wrapper.mjs +353 -0
  738. package/scripts/lib/official-external-channel-catalog.json +559 -0
  739. package/scripts/lib/official-external-plugin-catalog.json +192 -0
  740. package/scripts/lib/official-external-provider-catalog.json +117 -0
  741. package/scripts/lib/package-dist-imports.mjs +171 -0
  742. package/scripts/npm-runner.mjs +91 -0
  743. package/scripts/postinstall-bundled-plugins.mjs +978 -0
  744. package/scripts/preinstall-package-manager-warning.mjs +64 -0
  745. package/scripts/windows-cmd-helpers.mjs +20 -0
  746. package/skills/1password/SKILL.md +70 -0
  747. package/skills/1password/references/cli-examples.md +29 -0
  748. package/skills/1password/references/get-started.md +17 -0
  749. package/skills/apple-notes/SKILL.md +77 -0
  750. package/skills/apple-reminders/SKILL.md +118 -0
  751. package/skills/bear-notes/SKILL.md +107 -0
  752. package/skills/blogwatcher/SKILL.md +69 -0
  753. package/skills/blucli/SKILL.md +47 -0
  754. package/skills/camsnap/SKILL.md +45 -0
  755. package/skills/canvas/SKILL.md +78 -0
  756. package/skills/clawhub/SKILL.md +77 -0
  757. package/skills/coding-agent/SKILL.md +149 -0
  758. package/skills/diagram-maker/SKILL.md +53 -0
  759. package/skills/diagram-maker/references/excalidraw-patterns.md +85 -0
  760. package/skills/diagram-maker/references/svg-template.md +112 -0
  761. package/skills/discord/SKILL.md +136 -0
  762. package/skills/eightctl/SKILL.md +50 -0
  763. package/skills/gemini/SKILL.md +47 -0
  764. package/skills/gh-issues/SKILL.md +213 -0
  765. package/skills/gifgrep/SKILL.md +85 -0
  766. package/skills/github/SKILL.md +84 -0
  767. package/skills/gog/SKILL.md +116 -0
  768. package/skills/goplaces/SKILL.md +52 -0
  769. package/skills/healthcheck/SKILL.md +105 -0
  770. package/skills/himalaya/SKILL.md +80 -0
  771. package/skills/himalaya/references/configuration.md +184 -0
  772. package/skills/himalaya/references/message-composition.md +199 -0
  773. package/skills/imsg/SKILL.md +122 -0
  774. package/skills/mcporter/SKILL.md +61 -0
  775. package/skills/meme-maker/SKILL.md +42 -0
  776. package/skills/meme-maker/references/templates.json +358 -0
  777. package/skills/meme-maker/scripts/meme.mjs +398 -0
  778. package/skills/model-usage/SKILL.md +69 -0
  779. package/skills/model-usage/references/codexbar-cli.md +33 -0
  780. package/skills/model-usage/scripts/model_usage.py +319 -0
  781. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  782. package/skills/nano-pdf/SKILL.md +38 -0
  783. package/skills/node-connect/SKILL.md +142 -0
  784. package/skills/node-inspect-debugger/SKILL.md +85 -0
  785. package/skills/notion/SKILL.md +150 -0
  786. package/skills/obsidian/SKILL.md +119 -0
  787. package/skills/openai-whisper/SKILL.md +38 -0
  788. package/skills/openai-whisper-api/SKILL.md +71 -0
  789. package/skills/openai-whisper-api/scripts/transcribe.sh +154 -0
  790. package/skills/openhue/SKILL.md +112 -0
  791. package/skills/oracle/SKILL.md +126 -0
  792. package/skills/ordercli/SKILL.md +78 -0
  793. package/skills/peekaboo/SKILL.md +190 -0
  794. package/skills/pyproject.toml +10 -0
  795. package/skills/python-debugpy/SKILL.md +73 -0
  796. package/skills/sag/SKILL.md +87 -0
  797. package/skills/session-logs/SKILL.md +151 -0
  798. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  799. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  800. package/skills/skill-creator/SKILL.md +78 -0
  801. package/skills/skill-creator/license.txt +202 -0
  802. package/skills/skill-creator/scripts/init_skill.py +378 -0
  803. package/skills/skill-creator/scripts/package_skill.py +139 -0
  804. package/skills/skill-creator/scripts/quick_validate.py +169 -0
  805. package/skills/skill-creator/scripts/test_package_skill.py +161 -0
  806. package/skills/skill-creator/scripts/test_quick_validate.py +116 -0
  807. package/skills/slack/SKILL.md +78 -0
  808. package/skills/songsee/SKILL.md +49 -0
  809. package/skills/sonoscli/SKILL.md +65 -0
  810. package/skills/spike/SKILL.md +51 -0
  811. package/skills/spotify-player/SKILL.md +64 -0
  812. package/skills/summarize/SKILL.md +87 -0
  813. package/skills/taskflow/SKILL.md +149 -0
  814. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  815. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  816. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  817. package/skills/things-mac/SKILL.md +86 -0
  818. package/skills/tmux/SKILL.md +91 -0
  819. package/skills/tmux/scripts/find-sessions.sh +112 -0
  820. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  821. package/skills/trello/SKILL.md +108 -0
  822. package/skills/video-frames/SKILL.md +46 -0
  823. package/skills/video-frames/scripts/frame.sh +81 -0
  824. package/skills/voice-call/SKILL.md +45 -0
  825. package/skills/wacli/SKILL.md +72 -0
  826. package/skills/weather/SKILL.md +64 -0
  827. package/skills/xurl/SKILL.md +120 -0
@@ -0,0 +1,739 @@
1
+ ---
2
+ summary: "WhatsApp channel support, access controls, delivery behavior, and operations"
3
+ read_when:
4
+ - Working on WhatsApp/web channel behavior or inbox routing
5
+ title: "WhatsApp"
6
+ ---
7
+
8
+ Status: production-ready via WhatsApp Web (Baileys). Gateway owns linked session(s).
9
+
10
+ ## Install (on demand)
11
+
12
+ - Onboarding (`nodmix onboard`) and `nodmix channels add --channel whatsapp`
13
+ prompt to install the WhatsApp plugin the first time you select it.
14
+ - `nodmix channels login --channel whatsapp` also offers the install flow when
15
+ the plugin is not present yet.
16
+ - Dev channel + git checkout: defaults to the local plugin path.
17
+ - Stable/Beta: installs the official `@nodmix/whatsapp` plugin from ClawHub
18
+ first, with npm as the fallback.
19
+ - The WhatsApp runtime is distributed outside the core Nodmix npm package so
20
+ WhatsApp-specific runtime dependencies stay with the external plugin.
21
+
22
+ Manual install stays available:
23
+
24
+ ```bash
25
+ nodmix plugins install clawhub:@nodmix/whatsapp
26
+ ```
27
+
28
+ Use the bare npm package (`@nodmix/whatsapp`) only when you need the registry
29
+ fallback. Pin an exact version only when you need a reproducible install.
30
+
31
+ <CardGroup cols={3}>
32
+ <Card title="Pairing" icon="link" href="/channels/pairing">
33
+ Default DM policy is pairing for unknown senders.
34
+ </Card>
35
+ <Card title="Channel troubleshooting" icon="wrench" href="/channels/troubleshooting">
36
+ Cross-channel diagnostics and repair playbooks.
37
+ </Card>
38
+ <Card title="Gateway configuration" icon="settings" href="/gateway/configuration">
39
+ Full channel config patterns and examples.
40
+ </Card>
41
+ </CardGroup>
42
+
43
+ ## Quick setup
44
+
45
+ <Steps>
46
+ <Step title="Configure WhatsApp access policy">
47
+
48
+ ```json5
49
+ {
50
+ channels: {
51
+ whatsapp: {
52
+ dmPolicy: "pairing",
53
+ allowFrom: ["+15551234567"],
54
+ groupPolicy: "allowlist",
55
+ groupAllowFrom: ["+15551234567"],
56
+ },
57
+ },
58
+ }
59
+ ```
60
+
61
+ </Step>
62
+
63
+ <Step title="Link WhatsApp (QR)">
64
+
65
+ ```bash
66
+ nodmix channels login --channel whatsapp
67
+ ```
68
+
69
+ For a specific account:
70
+
71
+ ```bash
72
+ nodmix channels login --channel whatsapp --account work
73
+ ```
74
+
75
+ To attach an existing/custom WhatsApp Web auth directory before login:
76
+
77
+ ```bash
78
+ nodmix channels add --channel whatsapp --account work --auth-dir /path/to/wa-auth
79
+ nodmix channels login --channel whatsapp --account work
80
+ ```
81
+
82
+ </Step>
83
+
84
+ <Step title="Start the gateway">
85
+
86
+ ```bash
87
+ nodmix gateway
88
+ ```
89
+
90
+ </Step>
91
+
92
+ <Step title="Approve first pairing request (if using pairing mode)">
93
+
94
+ ```bash
95
+ nodmix pairing list whatsapp
96
+ nodmix pairing approve whatsapp <CODE>
97
+ ```
98
+
99
+ Pairing requests expire after 1 hour. Pending requests are capped at 3 per channel.
100
+
101
+ </Step>
102
+ </Steps>
103
+
104
+ <Note>
105
+ Nodmix recommends running WhatsApp on a separate number when possible. (The channel metadata and setup flow are optimized for that setup, but personal-number setups are also supported.)
106
+ </Note>
107
+
108
+ ## Deployment patterns
109
+
110
+ <AccordionGroup>
111
+ <Accordion title="Dedicated number (recommended)">
112
+ This is the cleanest operational mode:
113
+
114
+ - separate WhatsApp identity for Nodmix
115
+ - clearer DM allowlists and routing boundaries
116
+ - lower chance of self-chat confusion
117
+
118
+ Minimal policy pattern:
119
+
120
+ ```json5
121
+ {
122
+ channels: {
123
+ whatsapp: {
124
+ dmPolicy: "allowlist",
125
+ allowFrom: ["+15551234567"],
126
+ },
127
+ },
128
+ }
129
+ ```
130
+
131
+ </Accordion>
132
+
133
+ <Accordion title="Personal-number fallback">
134
+ Onboarding supports personal-number mode and writes a self-chat-friendly baseline:
135
+
136
+ - `dmPolicy: "allowlist"`
137
+ - `allowFrom` includes your personal number
138
+ - `selfChatMode: true`
139
+
140
+ In runtime, self-chat protections key off the linked self number and `allowFrom`.
141
+
142
+ </Accordion>
143
+
144
+ <Accordion title="WhatsApp Web-only channel scope">
145
+ The messaging platform channel is WhatsApp Web-based (`Baileys`) in current Nodmix channel architecture.
146
+
147
+ There is no separate Twilio WhatsApp messaging channel in the built-in chat-channel registry.
148
+
149
+ </Accordion>
150
+ </AccordionGroup>
151
+
152
+ ## Runtime model
153
+
154
+ - Gateway owns the WhatsApp socket and reconnect loop.
155
+ - The reconnect watchdog uses WhatsApp Web transport activity, not only inbound app-message volume, so a quiet linked-device session is not restarted solely because nobody has sent a message recently. A longer application-silence cap still forces a reconnect if transport frames keep arriving but no application messages are handled for the watchdog window; after a transient reconnect for a recently active session, that application-silence check uses the normal message timeout for the first recovery window.
156
+ - Baileys socket timings are explicit under `web.whatsapp.*`: `keepAliveIntervalMs` controls WhatsApp Web application pings, `connectTimeoutMs` controls the opening handshake timeout, and `defaultQueryTimeoutMs` controls Baileys query timeouts.
157
+ - Outbound sends require an active WhatsApp listener for the target account.
158
+ - Group sends attach native mention metadata for `@+<digits>` and `@<digits>` tokens in text and media captions when the token matches current WhatsApp participant metadata, including LID-backed groups.
159
+ - Status and broadcast chats are ignored (`@status`, `@broadcast`).
160
+ - The reconnect watchdog follows WhatsApp Web transport activity, not only inbound app-message volume: quiet linked-device sessions stay up while transport frames continue, but a transport stall forces reconnect well before the later remote disconnect path.
161
+ - Direct chats use DM session rules (`session.dmScope`; default `main` collapses DMs to the agent main session).
162
+ - Group sessions are isolated (`agent:<agentId>:whatsapp:group:<jid>`).
163
+ - WhatsApp Channels/Newsletters can be explicit outbound targets with their native `@newsletter` JID. Outbound newsletter sends use channel session metadata (`agent:<agentId>:whatsapp:channel:<jid>`) rather than DM session semantics.
164
+ - WhatsApp Web transport honors standard proxy environment variables on the gateway host (`HTTPS_PROXY`, `HTTP_PROXY`, `NO_PROXY` / lowercase variants). Prefer host-level proxy config over channel-specific WhatsApp proxy settings.
165
+ - When `messages.removeAckAfterReply` is enabled, Nodmix clears the WhatsApp ack reaction after a visible reply is delivered.
166
+
167
+ ## Plugin hooks and privacy
168
+
169
+ WhatsApp inbound messages can contain personal message content, phone numbers,
170
+ group identifiers, sender names, and session correlation fields. For that reason,
171
+ WhatsApp does not broadcast inbound `message_received` hook payloads to plugins
172
+ unless you explicitly opt in:
173
+
174
+ ```json5
175
+ {
176
+ channels: {
177
+ whatsapp: {
178
+ pluginHooks: {
179
+ messageReceived: true,
180
+ },
181
+ },
182
+ },
183
+ }
184
+ ```
185
+
186
+ You can scope the opt-in to one account:
187
+
188
+ ```json5
189
+ {
190
+ channels: {
191
+ whatsapp: {
192
+ accounts: {
193
+ work: {
194
+ pluginHooks: {
195
+ messageReceived: true,
196
+ },
197
+ },
198
+ },
199
+ },
200
+ },
201
+ }
202
+ ```
203
+
204
+ Only enable this for plugins you trust to receive inbound WhatsApp message
205
+ content and identifiers.
206
+
207
+ ## Access control and activation
208
+
209
+ <Tabs>
210
+ <Tab title="DM policy">
211
+ `channels.whatsapp.dmPolicy` controls direct chat access:
212
+
213
+ - `pairing` (default)
214
+ - `allowlist`
215
+ - `open` (requires `allowFrom` to include `"*"`)
216
+ - `disabled`
217
+
218
+ `allowFrom` accepts E.164-style numbers (normalized internally).
219
+
220
+ `allowFrom` is a DM sender access-control list. It does not gate explicit outbound sends to WhatsApp group JIDs or `@newsletter` channel JIDs.
221
+
222
+ Multi-account override: `channels.whatsapp.accounts.<id>.dmPolicy` (and `allowFrom`) take precedence over channel-level defaults for that account.
223
+
224
+ Runtime behavior details:
225
+
226
+ - pairings are persisted in channel allow-store and merged with configured `allowFrom`
227
+ - scheduled automation and heartbeat recipient fallback use explicit delivery targets or configured `allowFrom`; DM pairing approvals are not implicit cron or heartbeat recipients
228
+ - if no allowlist is configured, the linked self number is allowed by default
229
+ - Nodmix never auto-pairs outbound `fromMe` DMs (messages you send to yourself from the linked device)
230
+
231
+ </Tab>
232
+
233
+ <Tab title="Group policy + allowlists">
234
+ Group access has two layers:
235
+
236
+ 1. **Group membership allowlist** (`channels.whatsapp.groups`)
237
+ - if `groups` is omitted, all groups are eligible
238
+ - if `groups` is present, it acts as a group allowlist (`"*"` allowed)
239
+
240
+ 2. **Group sender policy** (`channels.whatsapp.groupPolicy` + `groupAllowFrom`)
241
+ - `open`: sender allowlist bypassed
242
+ - `allowlist`: sender must match `groupAllowFrom` (or `*`)
243
+ - `disabled`: block all group inbound
244
+
245
+ Sender allowlist fallback:
246
+
247
+ - if `groupAllowFrom` is unset, runtime falls back to `allowFrom` when available
248
+ - sender allowlists are evaluated before mention/reply activation
249
+
250
+ Note: if no `channels.whatsapp` block exists at all, runtime group-policy fallback is `allowlist` (with a warning log), even if `channels.defaults.groupPolicy` is set.
251
+
252
+ </Tab>
253
+
254
+ <Tab title="Mentions + /activation">
255
+ Group replies require mention by default.
256
+
257
+ Mention detection includes:
258
+
259
+ - explicit WhatsApp mentions of the bot identity
260
+ - configured mention regex patterns (`agents.list[].groupChat.mentionPatterns`, fallback `messages.groupChat.mentionPatterns`)
261
+ - inbound voice-note transcripts for authorized group messages
262
+ - implicit reply-to-bot detection (reply sender matches bot identity)
263
+
264
+ Security note:
265
+
266
+ - quote/reply only satisfies mention gating; it does **not** grant sender authorization
267
+ - with `groupPolicy: "allowlist"`, non-allowlisted senders are still blocked even if they reply to an allowlisted user's message
268
+
269
+ Session-level activation command:
270
+
271
+ - `/activation mention`
272
+ - `/activation always`
273
+
274
+ `activation` updates session state (not global config). It is owner-gated.
275
+
276
+ </Tab>
277
+ </Tabs>
278
+
279
+ ## Personal-number and self-chat behavior
280
+
281
+ When the linked self number is also present in `allowFrom`, WhatsApp self-chat safeguards activate:
282
+
283
+ - skip read receipts for self-chat turns
284
+ - ignore mention-JID auto-trigger behavior that would otherwise ping yourself
285
+ - if `messages.responsePrefix` is unset, self-chat replies default to `[{identity.name}]` or `[nodmix]`
286
+
287
+ ## Message normalization and context
288
+
289
+ <AccordionGroup>
290
+ <Accordion title="Inbound envelope + reply context">
291
+ Incoming WhatsApp messages are wrapped in the shared inbound envelope.
292
+
293
+ If a quoted reply exists, context is appended in this form:
294
+
295
+ ```text
296
+ [Replying to <sender> id:<stanzaId>]
297
+ <quoted body or media placeholder>
298
+ [/Replying]
299
+ ```
300
+
301
+ Reply metadata fields are also populated when available (`ReplyToId`, `ReplyToBody`, `ReplyToSender`, sender JID/E.164).
302
+ When the quoted reply target is downloadable media, Nodmix saves it through
303
+ the normal inbound media store and exposes it as `MediaPath`/`MediaType` so
304
+ the agent can inspect the referenced image instead of only seeing
305
+ `<media:image>`.
306
+
307
+ </Accordion>
308
+
309
+ <Accordion title="Media placeholders and location/contact extraction">
310
+ Media-only inbound messages are normalized with placeholders such as:
311
+
312
+ - `<media:image>`
313
+ - `<media:video>`
314
+ - `<media:audio>`
315
+ - `<media:document>`
316
+ - `<media:sticker>`
317
+
318
+ Authorized group voice notes are transcribed before mention gating when the
319
+ body is only `<media:audio>`, so saying the bot mention in the voice note can
320
+ trigger the reply. If the transcript still does not mention the bot, the
321
+ transcript is kept in pending group history instead of the raw placeholder.
322
+
323
+ Location bodies use terse coordinate text. Location labels/comments and contact/vCard details are rendered as fenced untrusted metadata, not inline prompt text.
324
+
325
+ </Accordion>
326
+
327
+ <Accordion title="Pending group history injection">
328
+ For groups, unprocessed messages can be buffered and injected as context when the bot is finally triggered.
329
+
330
+ - default limit: `50`
331
+ - config: `channels.whatsapp.historyLimit`
332
+ - fallback: `messages.groupChat.historyLimit`
333
+ - `0` disables
334
+
335
+ Injection markers:
336
+
337
+ - `[Chat messages since your last reply - for context]`
338
+ - `[Current message - respond to this]`
339
+
340
+ </Accordion>
341
+
342
+ <Accordion title="Read receipts">
343
+ Read receipts are enabled by default for accepted inbound WhatsApp messages.
344
+
345
+ Disable globally:
346
+
347
+ ```json5
348
+ {
349
+ channels: {
350
+ whatsapp: {
351
+ sendReadReceipts: false,
352
+ },
353
+ },
354
+ }
355
+ ```
356
+
357
+ Per-account override:
358
+
359
+ ```json5
360
+ {
361
+ channels: {
362
+ whatsapp: {
363
+ accounts: {
364
+ work: {
365
+ sendReadReceipts: false,
366
+ },
367
+ },
368
+ },
369
+ },
370
+ }
371
+ ```
372
+
373
+ Self-chat turns skip read receipts even when globally enabled.
374
+
375
+ </Accordion>
376
+ </AccordionGroup>
377
+
378
+ ## Delivery, chunking, and media
379
+
380
+ <AccordionGroup>
381
+ <Accordion title="Text chunking">
382
+ - default chunk limit: `channels.whatsapp.textChunkLimit = 4000`
383
+ - `channels.whatsapp.chunkMode = "length" | "newline"`
384
+ - `newline` mode prefers paragraph boundaries (blank lines), then falls back to length-safe chunking
385
+
386
+ </Accordion>
387
+
388
+ <Accordion title="Outbound media behavior">
389
+ - supports image, video, audio (PTT voice-note), and document payloads
390
+ - audio media is sent through the Baileys `audio` payload with `ptt: true`, so WhatsApp clients render it as a push-to-talk voice note
391
+ - reply payloads preserve `audioAsVoice`; TTS voice-note output for WhatsApp stays on this PTT path even when the provider returns MP3 or WebM
392
+ - native Ogg/Opus audio is sent as `audio/ogg; codecs=opus` for voice-note compatibility
393
+ - non-Ogg audio, including Microsoft Edge TTS MP3/WebM output, is transcoded with `ffmpeg` to 48 kHz mono Ogg/Opus before PTT delivery
394
+ - `/tts latest` sends the latest assistant reply as one voice note and suppresses repeat sends for the same reply; `/tts chat on|off|default` controls auto-TTS for the current WhatsApp chat
395
+ - animated GIF playback is supported via `gifPlayback: true` on video sends
396
+ - `forceDocument` / `asDocument` sends outbound images, GIFs, and videos through the Baileys document payload to avoid WhatsApp media compression while preserving the resolved filename and MIME type
397
+ - captions are applied to the first media item when sending multi-media reply payloads, except PTT voice notes send the audio first and visible text separately because WhatsApp clients do not render voice-note captions consistently
398
+ - media source can be HTTP(S), `file://`, or local paths
399
+
400
+ </Accordion>
401
+
402
+ <Accordion title="Media size limits and fallback behavior">
403
+ - inbound media save cap: `channels.whatsapp.mediaMaxMb` (default `50`)
404
+ - outbound media send cap: `channels.whatsapp.mediaMaxMb` (default `50`)
405
+ - per-account overrides use `channels.whatsapp.accounts.<accountId>.mediaMaxMb`
406
+ - images are auto-optimized (resize/quality sweep) to fit limits unless `forceDocument` / `asDocument` requests document delivery
407
+ - on media send failure, first-item fallback sends text warning instead of dropping the response silently
408
+
409
+ </Accordion>
410
+ </AccordionGroup>
411
+
412
+ ## Reply quoting
413
+
414
+ WhatsApp supports native reply quoting, where outbound replies visibly quote the inbound message. Control it with `channels.whatsapp.replyToMode`.
415
+
416
+ | Value | Behavior |
417
+ | ----------- | --------------------------------------------------------------------- |
418
+ | `"off"` | Never quote; send as a plain message |
419
+ | `"first"` | Quote only the first outbound reply chunk |
420
+ | `"all"` | Quote every outbound reply chunk |
421
+ | `"batched"` | Quote queued batched replies while leaving immediate replies unquoted |
422
+
423
+ Default is `"off"`. Per-account overrides use `channels.whatsapp.accounts.<id>.replyToMode`.
424
+
425
+ ```json5
426
+ {
427
+ channels: {
428
+ whatsapp: {
429
+ replyToMode: "first",
430
+ },
431
+ },
432
+ }
433
+ ```
434
+
435
+ ## Reaction level
436
+
437
+ `channels.whatsapp.reactionLevel` controls how broadly the agent uses emoji reactions on WhatsApp:
438
+
439
+ | Level | Ack reactions | Agent-initiated reactions | Description |
440
+ | ------------- | ------------- | ------------------------- | ------------------------------------------------ |
441
+ | `"off"` | No | No | No reactions at all |
442
+ | `"ack"` | Yes | No | Ack reactions only (pre-reply receipt) |
443
+ | `"minimal"` | Yes | Yes (conservative) | Ack + agent reactions with conservative guidance |
444
+ | `"extensive"` | Yes | Yes (encouraged) | Ack + agent reactions with encouraged guidance |
445
+
446
+ Default: `"minimal"`.
447
+
448
+ Per-account overrides use `channels.whatsapp.accounts.<id>.reactionLevel`.
449
+
450
+ ```json5
451
+ {
452
+ channels: {
453
+ whatsapp: {
454
+ reactionLevel: "ack",
455
+ },
456
+ },
457
+ }
458
+ ```
459
+
460
+ ## Acknowledgment reactions
461
+
462
+ WhatsApp supports immediate ack reactions on inbound receipt via `channels.whatsapp.ackReaction`.
463
+ Ack reactions are gated by `reactionLevel` — they are suppressed when `reactionLevel` is `"off"`.
464
+
465
+ ```json5
466
+ {
467
+ channels: {
468
+ whatsapp: {
469
+ ackReaction: {
470
+ emoji: "👀",
471
+ direct: true,
472
+ group: "mentions", // always | mentions | never
473
+ },
474
+ },
475
+ },
476
+ }
477
+ ```
478
+
479
+ Behavior notes:
480
+
481
+ - sent immediately after inbound is accepted (pre-reply)
482
+ - failures are logged but do not block normal reply delivery
483
+ - group mode `mentions` reacts on mention-triggered turns; group activation `always` acts as bypass for this check
484
+ - WhatsApp uses `channels.whatsapp.ackReaction` (legacy `messages.ackReaction` is not used here)
485
+
486
+ ## Lifecycle status reactions
487
+
488
+ Set `messages.statusReactions.enabled: true` to let WhatsApp replace the ack reaction during a turn instead of leaving a static receipt emoji. When enabled, Nodmix uses the same inbound message reaction slot for lifecycle states such as queued, thinking, tool activity, compaction, done, and error.
489
+
490
+ ```json5
491
+ {
492
+ messages: {
493
+ statusReactions: {
494
+ enabled: true,
495
+ emojis: {
496
+ deploy: "🛫",
497
+ build: "🏗️",
498
+ concierge: "💁",
499
+ },
500
+ },
501
+ },
502
+ }
503
+ ```
504
+
505
+ Behavior notes:
506
+
507
+ - `channels.whatsapp.ackReaction` still controls whether status reactions are eligible for direct messages and groups.
508
+ - WhatsApp has one bot reaction slot per message, so lifecycle updates replace the current reaction in place.
509
+ - `messages.removeAckAfterReply: true` clears the final status reaction after the configured done/error hold.
510
+ - Tool emoji categories include `tool`, `coding`, `web`, `deploy`, `build`, and `concierge`.
511
+
512
+ ## Multi-account and credentials
513
+
514
+ <AccordionGroup>
515
+ <Accordion title="Account selection and defaults">
516
+ - account ids come from `channels.whatsapp.accounts`
517
+ - default account selection: `default` if present, otherwise first configured account id (sorted)
518
+ - account ids are normalized internally for lookup
519
+
520
+ </Accordion>
521
+
522
+ <Accordion title="Credential paths and legacy compatibility">
523
+ - current auth path: `~/.nodmix/credentials/whatsapp/<accountId>/creds.json`
524
+ - backup file: `creds.json.bak`
525
+ - legacy default auth in `~/.nodmix/credentials/` is still recognized/migrated for default-account flows
526
+
527
+ </Accordion>
528
+
529
+ <Accordion title="Logout behavior">
530
+ `nodmix channels logout --channel whatsapp [--account <id>]` clears WhatsApp auth state for that account.
531
+
532
+ When a Gateway is reachable, logout first stops the live WhatsApp listener for the selected account so the linked session does not keep receiving messages until the next restart. `nodmix channels remove --channel whatsapp` also stops the live listener before disabling or deleting account config.
533
+
534
+ In legacy auth directories, `oauth.json` is preserved while Baileys auth files are removed.
535
+
536
+ </Accordion>
537
+ </AccordionGroup>
538
+
539
+ ## Tools, actions, and config writes
540
+
541
+ - Agent tool support includes WhatsApp reaction action (`react`).
542
+ - Action gates:
543
+ - `channels.whatsapp.actions.reactions`
544
+ - `channels.whatsapp.actions.polls`
545
+ - Channel-initiated config writes are enabled by default (disable via `channels.whatsapp.configWrites=false`).
546
+
547
+ ## Troubleshooting
548
+
549
+ <AccordionGroup>
550
+ <Accordion title="Not linked (QR required)">
551
+ Symptom: channel status reports not linked.
552
+
553
+ Fix:
554
+
555
+ ```bash
556
+ nodmix channels login --channel whatsapp
557
+ nodmix channels status
558
+ ```
559
+
560
+ </Accordion>
561
+
562
+ <Accordion title="Linked but disconnected / reconnect loop">
563
+ Symptom: linked account with repeated disconnects or reconnect attempts.
564
+
565
+ Quiet accounts can stay connected past the normal message timeout; the watchdog
566
+ restarts when WhatsApp Web transport activity stops, the socket closes, or
567
+ application-level activity stays silent beyond the longer safety window.
568
+
569
+ If logs show repeated `status=408 Request Time-out Connection was lost`, tune
570
+ Baileys socket timings under `web.whatsapp`. Start by shortening
571
+ `keepAliveIntervalMs` below your network's idle timeout and increasing
572
+ `connectTimeoutMs` on slow or lossy links:
573
+
574
+ ```json5
575
+ {
576
+ web: {
577
+ whatsapp: {
578
+ keepAliveIntervalMs: 15000,
579
+ connectTimeoutMs: 60000,
580
+ defaultQueryTimeoutMs: 60000,
581
+ },
582
+ },
583
+ }
584
+ ```
585
+
586
+ Fix:
587
+
588
+ ```bash
589
+ nodmix doctor
590
+ nodmix logs --follow
591
+ ```
592
+
593
+ If `~/.nodmix/logs/whatsapp-health.log` says `Gateway inactive` but
594
+ `nodmix gateway status` and `nodmix channels status --probe` show the
595
+ gateway and WhatsApp are healthy, run `nodmix doctor`. On Linux, doctor
596
+ warns about legacy crontab entries that still invoke
597
+ `~/.nodmix/bin/ensure-whatsapp.sh`; remove those stale entries with
598
+ `crontab -e` because cron can lack the systemd user-bus environment and
599
+ make that old script misreport gateway health.
600
+
601
+ If needed, re-link with `channels login`.
602
+
603
+ </Accordion>
604
+
605
+ <Accordion title="QR login times out behind a proxy">
606
+ Symptom: `nodmix channels login --channel whatsapp` fails before showing a usable QR code with `status=408 Request Time-out` or a TLS socket disconnect.
607
+
608
+ WhatsApp Web login uses the gateway host's standard proxy environment (`HTTPS_PROXY`, `HTTP_PROXY`, lowercase variants, and `NO_PROXY`). Verify the gateway process inherits the proxy env and that `NO_PROXY` does not match `mmg.whatsapp.net`.
609
+
610
+ </Accordion>
611
+
612
+ <Accordion title="No active listener when sending">
613
+ Outbound sends fail fast when no active gateway listener exists for the target account.
614
+
615
+ Make sure gateway is running and the account is linked.
616
+
617
+ </Accordion>
618
+
619
+ <Accordion title="Reply appears in transcript but not in WhatsApp">
620
+ Transcript rows record what the agent generated. WhatsApp delivery is checked separately: Nodmix only treats an auto-reply as sent after Baileys returns an outbound message id for at least one visible text or media send.
621
+
622
+ Ack reactions are independent pre-reply receipts. A successful reaction does not prove that the later text or media reply was accepted by WhatsApp.
623
+
624
+ Check gateway logs for `auto-reply delivery failed` or `auto-reply was not accepted by WhatsApp provider`.
625
+
626
+ </Accordion>
627
+
628
+ <Accordion title="Group messages unexpectedly ignored">
629
+ Check in this order:
630
+
631
+ - `groupPolicy`
632
+ - `groupAllowFrom` / `allowFrom`
633
+ - `groups` allowlist entries
634
+ - mention gating (`requireMention` + mention patterns)
635
+ - duplicate keys in `nodmix.json` (JSON5): later entries override earlier ones, so keep a single `groupPolicy` per scope
636
+
637
+ If `channels.whatsapp.groups` is present, WhatsApp can still observe messages from other groups, but Nodmix drops them before session routing. Add the group JID to `channels.whatsapp.groups` or add `groups["*"]` to admit all groups while keeping sender authorization under `groupPolicy` and `groupAllowFrom`.
638
+
639
+ </Accordion>
640
+
641
+ <Accordion title="Bun runtime warning">
642
+ WhatsApp gateway runtime should use Node. Bun is flagged as incompatible for stable WhatsApp/Telegram gateway operation.
643
+ </Accordion>
644
+ </AccordionGroup>
645
+
646
+ ## System prompts
647
+
648
+ WhatsApp supports Telegram-style system prompts for groups and direct chats via the `groups` and `direct` maps.
649
+
650
+ Resolution hierarchy for group messages:
651
+
652
+ The effective `groups` map is determined first: if the account defines its own `groups`, it fully replaces the root `groups` map (no deep merge). Prompt lookup then runs on the resulting single map:
653
+
654
+ 1. **Group-specific system prompt** (`groups["<groupId>"].systemPrompt`): used when the specific group entry exists in the map **and** its `systemPrompt` key is defined. If `systemPrompt` is an empty string (`""`), the wildcard is suppressed and no system prompt is applied.
655
+ 2. **Group wildcard system prompt** (`groups["*"].systemPrompt`): used when the specific group entry is absent from the map entirely, or when it exists but defines no `systemPrompt` key.
656
+
657
+ Resolution hierarchy for direct messages:
658
+
659
+ The effective `direct` map is determined first: if the account defines its own `direct`, it fully replaces the root `direct` map (no deep merge). Prompt lookup then runs on the resulting single map:
660
+
661
+ 1. **Direct-specific system prompt** (`direct["<peerId>"].systemPrompt`): used when the specific peer entry exists in the map **and** its `systemPrompt` key is defined. If `systemPrompt` is an empty string (`""`), the wildcard is suppressed and no system prompt is applied.
662
+ 2. **Direct wildcard system prompt** (`direct["*"].systemPrompt`): used when the specific peer entry is absent from the map entirely, or when it exists but defines no `systemPrompt` key.
663
+
664
+ <Note>
665
+ `dms` remains the lightweight per-DM history override bucket (`dms.<id>.historyLimit`). Prompt overrides live under `direct`.
666
+ </Note>
667
+
668
+ **Difference from Telegram multi-account behavior:** In Telegram, root `groups` is intentionally suppressed for all accounts in a multi-account setup — even accounts that define no `groups` of their own — to prevent a bot from receiving group messages for groups it does not belong to. WhatsApp does not apply this guard: root `groups` and root `direct` are always inherited by accounts that define no account-level override, regardless of how many accounts are configured. In a multi-account WhatsApp setup, if you want per-account group or direct prompts, define the full map under each account explicitly rather than relying on root-level defaults.
669
+
670
+ Important behavior:
671
+
672
+ - `channels.whatsapp.groups` is both a per-group config map and the chat-level group allowlist. At either the root or account scope, `groups["*"]` means "all groups are admitted" for that scope.
673
+ - Only add a wildcard group `systemPrompt` when you already want that scope to admit all groups. If you still want only a fixed set of group IDs to be eligible, do not use `groups["*"]` for the prompt default. Instead, repeat the prompt on each explicitly allowlisted group entry.
674
+ - Group admission and sender authorization are separate checks. `groups["*"]` widens the set of groups that can reach group handling, but it does not by itself authorize every sender in those groups. Sender access is still controlled separately by `channels.whatsapp.groupPolicy` and `channels.whatsapp.groupAllowFrom`.
675
+ - `channels.whatsapp.direct` does not have the same side effect for DMs. `direct["*"]` only provides a default direct-chat config after a DM is already admitted by `dmPolicy` plus `allowFrom` or pairing-store rules.
676
+
677
+ Example:
678
+
679
+ ```json5
680
+ {
681
+ channels: {
682
+ whatsapp: {
683
+ groups: {
684
+ // Use only if all groups should be admitted at the root scope.
685
+ // Applies to all accounts that do not define their own groups map.
686
+ "*": { systemPrompt: "Default prompt for all groups." },
687
+ },
688
+ direct: {
689
+ // Applies to all accounts that do not define their own direct map.
690
+ "*": { systemPrompt: "Default prompt for all direct chats." },
691
+ },
692
+ accounts: {
693
+ work: {
694
+ groups: {
695
+ // This account defines its own groups, so root groups are fully
696
+ // replaced. To keep a wildcard, define "*" explicitly here too.
697
+ "120363406415684625@g.us": {
698
+ requireMention: false,
699
+ systemPrompt: "Focus on project management.",
700
+ },
701
+ // Use only if all groups should be admitted in this account.
702
+ "*": { systemPrompt: "Default prompt for work groups." },
703
+ },
704
+ direct: {
705
+ // This account defines its own direct map, so root direct entries are
706
+ // fully replaced. To keep a wildcard, define "*" explicitly here too.
707
+ "+15551234567": { systemPrompt: "Prompt for a specific work direct chat." },
708
+ "*": { systemPrompt: "Default prompt for work direct chats." },
709
+ },
710
+ },
711
+ },
712
+ },
713
+ },
714
+ }
715
+ ```
716
+
717
+ ## Configuration reference pointers
718
+
719
+ Primary reference:
720
+
721
+ - [Configuration reference - WhatsApp](/gateway/config-channels#whatsapp)
722
+
723
+ High-signal WhatsApp fields:
724
+
725
+ - access: `dmPolicy`, `allowFrom`, `groupPolicy`, `groupAllowFrom`, `groups`
726
+ - delivery: `textChunkLimit`, `chunkMode`, `mediaMaxMb`, `sendReadReceipts`, `ackReaction`, `reactionLevel`
727
+ - multi-account: `accounts.<id>.enabled`, `accounts.<id>.authDir`, account-level overrides
728
+ - operations: `configWrites`, `debounceMs`, `web.enabled`, `web.heartbeatSeconds`, `web.reconnect.*`, `web.whatsapp.*`
729
+ - session behavior: `session.dmScope`, `historyLimit`, `dmHistoryLimit`, `dms.<id>.historyLimit`
730
+ - prompts: `groups.<id>.systemPrompt`, `groups["*"].systemPrompt`, `direct.<id>.systemPrompt`, `direct["*"].systemPrompt`
731
+
732
+ ## Related
733
+
734
+ - [Pairing](/channels/pairing)
735
+ - [Groups](/channels/groups)
736
+ - [Security](/gateway/security)
737
+ - [Channel routing](/channels/channel-routing)
738
+ - [Multi-agent routing](/concepts/multi-agent)
739
+ - [Troubleshooting](/channels/troubleshooting)