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,176 @@
1
+ ---
2
+ summary: "Nextcloud Talk support status, capabilities, and configuration"
3
+ read_when:
4
+ - Working on Nextcloud Talk channel features
5
+ title: "Nextcloud Talk"
6
+ ---
7
+
8
+ Status: bundled plugin (webhook bot). Direct messages, rooms, reactions, and markdown messages are supported.
9
+
10
+ ## Bundled plugin
11
+
12
+ Nextcloud Talk ships as a bundled plugin in current Nodmix releases, so
13
+ normal packaged builds do not need a separate install.
14
+
15
+ If you are on an older build or a custom install that excludes Nextcloud Talk,
16
+ install the npm package directly:
17
+
18
+ Install via CLI (npm registry):
19
+
20
+ ```bash
21
+ nodmix plugins install @nodmix/nextcloud-talk
22
+ ```
23
+
24
+ Use the bare package to follow the current official release tag. Pin an exact
25
+ version only when you need a reproducible install.
26
+
27
+ Local checkout (when running from a git repo):
28
+
29
+ ```bash
30
+ nodmix plugins install ./path/to/local/nextcloud-talk-plugin
31
+ ```
32
+
33
+ Details: [Plugins](/tools/plugin)
34
+
35
+ ## Quick setup (beginner)
36
+
37
+ 1. Ensure the Nextcloud Talk plugin is available.
38
+ - Current packaged Nodmix releases already bundle it.
39
+ - Older/custom installs can add it manually with the commands above.
40
+ 2. On your Nextcloud server, create a bot:
41
+
42
+ ```bash
43
+ ./occ talk:bot:install "Nodmix" "<shared-secret>" "<webhook-url>" --feature webhook --feature response --feature reaction
44
+ ```
45
+
46
+ 3. Enable the bot in the target room settings.
47
+ 4. Configure Nodmix:
48
+ - Config: `channels.nextcloud-talk.baseUrl` + `channels.nextcloud-talk.botSecret`
49
+ - Or env: `NEXTCLOUD_TALK_BOT_SECRET` (default account only)
50
+
51
+ CLI setup:
52
+
53
+ ```bash
54
+ nodmix channels add --channel nextcloud-talk \
55
+ --url https://cloud.example.com \
56
+ --token "<shared-secret>"
57
+ ```
58
+
59
+ Equivalent explicit fields:
60
+
61
+ ```bash
62
+ nodmix channels add --channel nextcloud-talk \
63
+ --base-url https://cloud.example.com \
64
+ --secret "<shared-secret>"
65
+ ```
66
+
67
+ File-backed secret:
68
+
69
+ ```bash
70
+ nodmix channels add --channel nextcloud-talk \
71
+ --base-url https://cloud.example.com \
72
+ --secret-file /path/to/nextcloud-talk-secret
73
+ ```
74
+
75
+ 5. Restart the gateway (or finish setup).
76
+
77
+ Minimal config:
78
+
79
+ ```json5
80
+ {
81
+ channels: {
82
+ "nextcloud-talk": {
83
+ enabled: true,
84
+ baseUrl: "https://cloud.example.com",
85
+ botSecret: "shared-secret",
86
+ dmPolicy: "pairing",
87
+ },
88
+ },
89
+ }
90
+ ```
91
+
92
+ ## Notes
93
+
94
+ - Bots cannot initiate DMs. The user must message the bot first.
95
+ - Webhook URL must be reachable by the Gateway; set `webhookPublicUrl` if behind a proxy.
96
+ - Media uploads are not supported by the bot API; media is sent as URLs.
97
+ - The webhook payload does not distinguish DMs vs rooms; set `apiUser` + `apiPassword` to enable room-type lookups (otherwise DMs are treated as rooms).
98
+
99
+ ## Access control (DMs)
100
+
101
+ - Default: `channels.nextcloud-talk.dmPolicy = "pairing"`. Unknown senders get a pairing code.
102
+ - Approve via:
103
+ - `nodmix pairing list nextcloud-talk`
104
+ - `nodmix pairing approve nextcloud-talk <CODE>`
105
+ - Public DMs: `channels.nextcloud-talk.dmPolicy="open"` plus `channels.nextcloud-talk.allowFrom=["*"]`.
106
+ - `allowFrom` matches Nextcloud user IDs only; display names are ignored.
107
+
108
+ ## Rooms (groups)
109
+
110
+ - Default: `channels.nextcloud-talk.groupPolicy = "allowlist"` (mention-gated).
111
+ - Allowlist rooms with `channels.nextcloud-talk.rooms`:
112
+
113
+ ```json5
114
+ {
115
+ channels: {
116
+ "nextcloud-talk": {
117
+ rooms: {
118
+ "room-token": { requireMention: true },
119
+ },
120
+ },
121
+ },
122
+ }
123
+ ```
124
+
125
+ - To allow no rooms, keep the allowlist empty or set `channels.nextcloud-talk.groupPolicy="disabled"`.
126
+
127
+ ## Capabilities
128
+
129
+ | Feature | Status |
130
+ | --------------- | ------------- |
131
+ | Direct messages | Supported |
132
+ | Rooms | Supported |
133
+ | Threads | Not supported |
134
+ | Media | URL-only |
135
+ | Reactions | Supported |
136
+ | Native commands | Not supported |
137
+
138
+ ## Configuration reference (Nextcloud Talk)
139
+
140
+ Full configuration: [Configuration](/gateway/configuration)
141
+
142
+ Provider options:
143
+
144
+ - `channels.nextcloud-talk.enabled`: enable/disable channel startup.
145
+ - `channels.nextcloud-talk.baseUrl`: Nextcloud instance URL.
146
+ - `channels.nextcloud-talk.botSecret`: bot shared secret.
147
+ - `channels.nextcloud-talk.botSecretFile`: regular-file secret path. Symlinks are rejected.
148
+ - `channels.nextcloud-talk.apiUser`: API user for room lookups (DM detection).
149
+ - `channels.nextcloud-talk.apiPassword`: API/app password for room lookups.
150
+ - `channels.nextcloud-talk.apiPasswordFile`: API password file path.
151
+ - `channels.nextcloud-talk.webhookPort`: webhook listener port (default: 8788).
152
+ - `channels.nextcloud-talk.webhookHost`: webhook host (default: 0.0.0.0).
153
+ - `channels.nextcloud-talk.webhookPath`: webhook path (default: /nextcloud-talk-webhook).
154
+ - `channels.nextcloud-talk.webhookPublicUrl`: externally reachable webhook URL.
155
+ - `channels.nextcloud-talk.dmPolicy`: `pairing | allowlist | open | disabled`.
156
+ - `channels.nextcloud-talk.allowFrom`: DM allowlist (user IDs). `open` requires `"*"`.
157
+ - `channels.nextcloud-talk.groupPolicy`: `allowlist | open | disabled`.
158
+ - `channels.nextcloud-talk.groupAllowFrom`: group allowlist (user IDs).
159
+ - `channels.nextcloud-talk.rooms`: per-room settings and allowlist.
160
+ - Static sender access groups can be referenced from `allowFrom` and `groupAllowFrom` with `accessGroup:<name>`.
161
+ - `channels.nextcloud-talk.historyLimit`: group history limit (0 disables).
162
+ - `channels.nextcloud-talk.dmHistoryLimit`: DM history limit (0 disables).
163
+ - `channels.nextcloud-talk.dms`: per-DM overrides (historyLimit).
164
+ - `channels.nextcloud-talk.textChunkLimit`: outbound text chunk size (chars).
165
+ - `channels.nextcloud-talk.chunkMode`: `length` (default) or `newline` to split on blank lines (paragraph boundaries) before length chunking.
166
+ - `channels.nextcloud-talk.blockStreaming`: disable block streaming for this channel.
167
+ - `channels.nextcloud-talk.blockStreamingCoalesce`: block streaming coalesce tuning.
168
+ - `channels.nextcloud-talk.mediaMaxMb`: inbound media cap (MB).
169
+
170
+ ## Related
171
+
172
+ - [Channels Overview](/channels) — all supported channels
173
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
174
+ - [Groups](/channels/groups) — group chat behavior and mention gating
175
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
176
+ - [Security](/gateway/security) — access model and hardening
@@ -0,0 +1,253 @@
1
+ ---
2
+ summary: "Nostr DM channel via NIP-04 encrypted messages"
3
+ read_when:
4
+ - You want Nodmix to receive DMs via Nostr
5
+ - You're setting up decentralized messaging
6
+ title: "Nostr"
7
+ ---
8
+
9
+ **Status:** Optional bundled plugin (disabled by default until configured).
10
+
11
+ Nostr is a decentralized protocol for social networking. This channel enables Nodmix to receive and respond to encrypted direct messages (DMs) via NIP-04.
12
+
13
+ ## Bundled plugin
14
+
15
+ Current Nodmix releases ship Nostr as a bundled plugin, so normal packaged
16
+ builds do not need a separate install.
17
+
18
+ ### Older/custom installs
19
+
20
+ - Onboarding (`nodmix onboard`) and `nodmix channels add` still surface
21
+ Nostr from the shared channel catalog.
22
+ - If your build excludes bundled Nostr, install the npm package directly.
23
+
24
+ ```bash
25
+ nodmix plugins install @nodmix/nostr
26
+ ```
27
+
28
+ Use the bare package to follow the current official release tag. Pin an exact
29
+ version only when you need a reproducible install.
30
+
31
+ Use a local checkout (dev workflows):
32
+
33
+ ```bash
34
+ nodmix plugins install --link <path-to-local-nostr-plugin>
35
+ ```
36
+
37
+ Restart the Gateway after installing or enabling plugins.
38
+
39
+ ### Non-interactive setup
40
+
41
+ ```bash
42
+ nodmix channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"
43
+ nodmix channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"
44
+ ```
45
+
46
+ Use `--use-env` to keep `NOSTR_PRIVATE_KEY` in the environment instead of storing the key in config.
47
+
48
+ ## Quick setup
49
+
50
+ 1. Generate a Nostr keypair (if needed):
51
+
52
+ ```bash
53
+ # Using nak
54
+ nak key generate
55
+ ```
56
+
57
+ 2. Add to config:
58
+
59
+ ```json5
60
+ {
61
+ channels: {
62
+ nostr: {
63
+ privateKey: "${NOSTR_PRIVATE_KEY}",
64
+ },
65
+ },
66
+ }
67
+ ```
68
+
69
+ 3. Export the key:
70
+
71
+ ```bash
72
+ export NOSTR_PRIVATE_KEY="nsec1..."
73
+ ```
74
+
75
+ 4. Restart the Gateway.
76
+
77
+ ## Configuration reference
78
+
79
+ | Key | Type | Default | Description |
80
+ | ------------ | -------- | ------------------------------------------- | ----------------------------------- |
81
+ | `privateKey` | string | required | Private key in `nsec` or hex format |
82
+ | `relays` | string[] | `['wss://relay.damus.io', 'wss://nos.lol']` | Relay URLs (WebSocket) |
83
+ | `dmPolicy` | string | `pairing` | DM access policy |
84
+ | `allowFrom` | string[] | `[]` | Allowed sender pubkeys |
85
+ | `enabled` | boolean | `true` | Enable/disable channel |
86
+ | `name` | string | - | Display name |
87
+ | `profile` | object | - | NIP-01 profile metadata |
88
+
89
+ ## Profile metadata
90
+
91
+ Profile data is published as a NIP-01 `kind:0` event. You can manage it from the Control UI (Channels -> Nostr -> Profile) or set it directly in config.
92
+
93
+ Example:
94
+
95
+ ```json5
96
+ {
97
+ channels: {
98
+ nostr: {
99
+ privateKey: "${NOSTR_PRIVATE_KEY}",
100
+ profile: {
101
+ name: "nodmix",
102
+ displayName: "Nodmix",
103
+ about: "Personal assistant DM bot",
104
+ picture: "https://example.com/avatar.png",
105
+ banner: "https://example.com/banner.png",
106
+ website: "https://example.com",
107
+ nip05: "nodmix@example.com",
108
+ lud16: "nodmix@example.com",
109
+ },
110
+ },
111
+ },
112
+ }
113
+ ```
114
+
115
+ Notes:
116
+
117
+ - Profile URLs must use `https://`.
118
+ - Importing from relays merges fields and preserves local overrides.
119
+
120
+ ## Access control
121
+
122
+ ### DM policies
123
+
124
+ - **pairing** (default): unknown senders get a pairing code.
125
+ - **allowlist**: only pubkeys in `allowFrom` can DM.
126
+ - **open**: public inbound DMs (requires `allowFrom: ["*"]`).
127
+ - **disabled**: ignore inbound DMs.
128
+
129
+ Enforcement notes:
130
+
131
+ - Inbound event signatures are verified before sender policy and NIP-04 decryption, so forged events are rejected early.
132
+ - Pairing replies are sent without processing the original DM body.
133
+ - Inbound DMs are rate-limited and oversized payloads are dropped before decrypt.
134
+
135
+ ### Allowlist example
136
+
137
+ ```json5
138
+ {
139
+ channels: {
140
+ nostr: {
141
+ privateKey: "${NOSTR_PRIVATE_KEY}",
142
+ dmPolicy: "allowlist",
143
+ allowFrom: ["npub1abc...", "npub1xyz..."],
144
+ },
145
+ },
146
+ }
147
+ ```
148
+
149
+ ## Key formats
150
+
151
+ Accepted formats:
152
+
153
+ - **Private key:** `nsec...` or 64-char hex
154
+ - **Pubkeys (`allowFrom`):** `npub...` or hex
155
+
156
+ ## Relays
157
+
158
+ Defaults: `relay.damus.io` and `nos.lol`.
159
+
160
+ ```json5
161
+ {
162
+ channels: {
163
+ nostr: {
164
+ privateKey: "${NOSTR_PRIVATE_KEY}",
165
+ relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
166
+ },
167
+ },
168
+ }
169
+ ```
170
+
171
+ Tips:
172
+
173
+ - Use 2-3 relays for redundancy.
174
+ - Avoid too many relays (latency, duplication).
175
+ - Paid relays can improve reliability.
176
+ - Local relays are fine for testing (`ws://localhost:7777`).
177
+
178
+ ## Protocol support
179
+
180
+ | NIP | Status | Description |
181
+ | ------ | --------- | ------------------------------------- |
182
+ | NIP-01 | Supported | Basic event format + profile metadata |
183
+ | NIP-04 | Supported | Encrypted DMs (`kind:4`) |
184
+ | NIP-17 | Planned | Gift-wrapped DMs |
185
+ | NIP-44 | Planned | Versioned encryption |
186
+
187
+ ## Testing
188
+
189
+ ### Local relay
190
+
191
+ ```bash
192
+ # Start strfry
193
+ docker run -p 7777:7777 ghcr.io/hoytech/strfry
194
+ ```
195
+
196
+ ```json5
197
+ {
198
+ channels: {
199
+ nostr: {
200
+ privateKey: "${NOSTR_PRIVATE_KEY}",
201
+ relays: ["ws://localhost:7777"],
202
+ },
203
+ },
204
+ }
205
+ ```
206
+
207
+ ### Manual test
208
+
209
+ 1. Note the bot pubkey (npub) from logs.
210
+ 2. Open a Nostr client (Damus, Amethyst, etc.).
211
+ 3. DM the bot pubkey.
212
+ 4. Verify the response.
213
+
214
+ ## Troubleshooting
215
+
216
+ ### Not receiving messages
217
+
218
+ - Verify the private key is valid.
219
+ - Ensure relay URLs are reachable and use `wss://` (or `ws://` for local).
220
+ - Confirm `enabled` is not `false`.
221
+ - Check Gateway logs for relay connection errors.
222
+
223
+ ### Not sending responses
224
+
225
+ - Check relay accepts writes.
226
+ - Verify outbound connectivity.
227
+ - Watch for relay rate limits.
228
+
229
+ ### Duplicate responses
230
+
231
+ - Expected when using multiple relays.
232
+ - Messages are deduplicated by event ID; only the first delivery triggers a response.
233
+
234
+ ## Security
235
+
236
+ - Never commit private keys.
237
+ - Use environment variables for keys.
238
+ - Consider `allowlist` for production bots.
239
+ - Signatures are verified before sender policy, and sender policy is enforced before decrypt, so forged events are rejected early and unknown senders cannot force full crypto work.
240
+
241
+ ## Limitations (MVP)
242
+
243
+ - Direct messages only (no group chats).
244
+ - No media attachments.
245
+ - NIP-04 only (NIP-17 gift-wrap planned).
246
+
247
+ ## Related
248
+
249
+ - [Channels Overview](/channels) — all supported channels
250
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
251
+ - [Groups](/channels/groups) — group chat behavior and mention gating
252
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
253
+ - [Security](/gateway/security) — access model and hardening
@@ -0,0 +1,214 @@
1
+ ---
2
+ summary: "Pairing overview: approve who can DM you + which nodes can join"
3
+ read_when:
4
+ - Setting up DM access control
5
+ - Pairing a new iOS/Android node
6
+ - Reviewing Nodmix security posture
7
+ title: "Pairing"
8
+ ---
9
+
10
+ "Pairing" is Nodmix's explicit access approval step.
11
+ It is used in two places:
12
+
13
+ 1. **DM pairing** (who is allowed to talk to the bot)
14
+ 2. **Node pairing** (which devices/nodes are allowed to join the gateway network)
15
+
16
+ Security context: [Security](/gateway/security)
17
+
18
+ ## 1) DM pairing (inbound chat access)
19
+
20
+ When a channel is configured with DM policy `pairing`, unknown senders get a short code and their message is **not processed** until you approve.
21
+
22
+ Default DM policies are documented in: [Security](/gateway/security)
23
+
24
+ `dmPolicy: "open"` is public only when the effective DM allowlist includes `"*"`.
25
+ Setup and validation require that wildcard for public-open configs. If existing
26
+ state contains `open` with concrete `allowFrom` entries, runtime still admits
27
+ only those senders, and pairing-store approvals do not widen `open` access.
28
+
29
+ Pairing codes:
30
+
31
+ - 8 characters, uppercase, no ambiguous chars (`0O1I`).
32
+ - **Expire after 1 hour**. The bot only sends the pairing message when a new request is created (roughly once per hour per sender).
33
+ - Pending DM pairing requests are capped at **3 per channel** by default; additional requests are ignored until one expires or is approved.
34
+
35
+ ### Approve a sender
36
+
37
+ ```bash
38
+ nodmix pairing list telegram
39
+ nodmix pairing approve telegram <CODE>
40
+ ```
41
+
42
+ If no command owner is configured yet, approving a DM pairing code also bootstraps
43
+ `commands.ownerAllowFrom` to the approved sender, such as `telegram:123456789`.
44
+ That gives first-time setups an explicit owner for privileged commands and exec
45
+ approval prompts. After an owner exists, later pairing approvals only grant DM
46
+ access; they do not add more owners.
47
+
48
+ Supported channels: `discord`, `feishu`, `googlechat`, `imessage`, `irc`, `line`, `matrix`, `mattermost`, `msteams`, `nextcloud-talk`, `nostr`, `nodmix-weixin`, `signal`, `slack`, `synology-chat`, `telegram`, `twitch`, `whatsapp`, `zalo`, `zalouser`.
49
+
50
+ ### Reusable sender groups
51
+
52
+ Use top-level `accessGroups` when the same trusted sender set should apply to
53
+ multiple message channels or to both DM and group allowlists.
54
+
55
+ Static groups use `type: "message.senders"` and are referenced with
56
+ `accessGroup:<name>` from channel allowlists:
57
+
58
+ ```json5
59
+ {
60
+ accessGroups: {
61
+ operators: {
62
+ type: "message.senders",
63
+ members: {
64
+ discord: ["discord:123456789012345678"],
65
+ telegram: ["987654321"],
66
+ whatsapp: ["+15551234567"],
67
+ },
68
+ },
69
+ },
70
+ channels: {
71
+ telegram: { dmPolicy: "allowlist", allowFrom: ["accessGroup:operators"] },
72
+ whatsapp: { groupPolicy: "allowlist", groupAllowFrom: ["accessGroup:operators"] },
73
+ },
74
+ }
75
+ ```
76
+
77
+ Access groups are documented in detail here: [Access groups](/channels/access-groups)
78
+
79
+ ### Where the state lives
80
+
81
+ Stored under `~/.nodmix/credentials/`:
82
+
83
+ - Pending requests: `<channel>-pairing.json`
84
+ - Approved allowlist store:
85
+ - Default account: `<channel>-allowFrom.json`
86
+ - Non-default account: `<channel>-<accountId>-allowFrom.json`
87
+
88
+ Account scoping behavior:
89
+
90
+ - Non-default accounts read/write only their scoped allowlist file.
91
+ - Default account uses the channel-scoped unscoped allowlist file.
92
+
93
+ Treat these as sensitive (they gate access to your assistant).
94
+
95
+ <Note>
96
+ The pairing allowlist store is for DM access. Group authorization is separate.
97
+ Approving a DM pairing code does not automatically allow that sender to run group
98
+ commands or control the bot in groups. First-owner bootstrap is separate config
99
+ state in `commands.ownerAllowFrom`, and group chat delivery still follows the
100
+ channel's group allowlists (for example `groupAllowFrom`, `groups`, or per-group
101
+ or per-topic overrides depending on the channel).
102
+ </Note>
103
+
104
+ ## 2) Node device pairing (iOS/Android/macOS/headless nodes)
105
+
106
+ Nodes connect to the Gateway as **devices** with `role: node`. The Gateway
107
+ creates a device pairing request that must be approved.
108
+
109
+ ### Pair via Telegram (recommended for iOS)
110
+
111
+ If you use the `device-pair` plugin, you can do first-time device pairing entirely from Telegram:
112
+
113
+ 1. In Telegram, message your bot: `/pair`
114
+ 2. The bot replies with two messages: an instruction message and a separate **setup code** message (easy to copy/paste in Telegram).
115
+ 3. On your phone, open the Nodmix iOS app → Settings → Gateway.
116
+ 4. Scan the QR code or paste the setup code and connect.
117
+ 5. Back in Telegram: `/pair pending` (review request IDs, role, and scopes), then approve.
118
+
119
+ The setup code is a base64-encoded JSON payload that contains:
120
+
121
+ - `url`: the Gateway WebSocket URL (`ws://...` or `wss://...`)
122
+ - `bootstrapToken`: a short-lived single-device bootstrap token used for the initial pairing handshake
123
+
124
+ That bootstrap token carries the built-in pairing bootstrap profile:
125
+
126
+ - the built-in setup profile allows the fresh QR/setup-code baseline only:
127
+ `node` plus a bounded `operator` handoff
128
+ - the handed-off `node` token stays `scopes: []`
129
+ - the handed-off `operator` token is limited to `operator.approvals`,
130
+ `operator.read`, and `operator.write`
131
+ - `operator.admin` and `operator.pairing` are not granted by QR/setup-code
132
+ bootstrap; they require a separate approved operator pairing or token flow
133
+ - later token rotation/revocation remains bounded by both the device's approved
134
+ role contract and the caller session's operator scopes
135
+
136
+ Treat the setup code like a password while it is valid.
137
+
138
+ For Tailscale, public, or other remote mobile pairing, use Tailscale Serve/Funnel
139
+ or another `wss://` Gateway URL. Plaintext `ws://` setup codes are accepted only
140
+ for loopback, private LAN addresses, `.local` Bonjour hosts, and the Android
141
+ emulator host. Tailnet CGNAT addresses, `.ts.net` names, and public hosts still
142
+ fail closed before QR/setup-code issuance.
143
+
144
+ ### Approve a node device
145
+
146
+ ```bash
147
+ nodmix devices list
148
+ nodmix devices approve <requestId>
149
+ nodmix devices reject <requestId>
150
+ ```
151
+
152
+ When an explicit approval is denied because the approving paired-device session
153
+ was opened with pairing-only scope, the CLI retries the same request with
154
+ `operator.admin`. This lets an existing admin-capable paired device recover a new
155
+ Control UI/browser pairing without editing `devices/paired.json` by hand. The
156
+ Gateway still validates the retried connection; tokens that cannot authenticate
157
+ with `operator.admin` remain blocked.
158
+
159
+ If the same device retries with different auth details (for example different
160
+ role/scopes/public key), the previous pending request is superseded and a new
161
+ `requestId` is created.
162
+
163
+ <Note>
164
+ An already paired device does not get broader access silently. If it reconnects asking for more scopes or a broader role, Nodmix keeps the existing approval as-is and creates a fresh pending upgrade request. Use `nodmix devices list` to compare the currently approved access with the newly requested access before you approve.
165
+ </Note>
166
+
167
+ ### Optional trusted-CIDR node auto-approve
168
+
169
+ Device pairing remains manual by default. For tightly controlled node networks,
170
+ you can opt in to first-time node auto-approval with explicit CIDRs or exact IPs:
171
+
172
+ ```json5
173
+ {
174
+ gateway: {
175
+ nodes: {
176
+ pairing: {
177
+ autoApproveCidrs: ["192.168.1.0/24"],
178
+ },
179
+ },
180
+ },
181
+ }
182
+ ```
183
+
184
+ This only applies to fresh `role: node` pairing requests with no requested
185
+ scopes. Operator, browser, Control UI, and WebChat clients still require manual
186
+ approval. Role, scope, metadata, and public-key changes still require manual
187
+ approval.
188
+
189
+ ### Node pairing state storage
190
+
191
+ Stored under `~/.nodmix/devices/`:
192
+
193
+ - `pending.json` (short-lived; pending requests expire)
194
+ - `paired.json` (paired devices + tokens)
195
+
196
+ ### Notes
197
+
198
+ - The legacy `node.pair.*` API (CLI: `nodmix nodes pending|approve|reject|remove|rename`) is a
199
+ separate gateway-owned pairing store. WS nodes still require device pairing.
200
+ - The pairing record is the durable source of truth for approved roles. Active
201
+ device tokens stay bounded to that approved role set; a stray token entry
202
+ outside the approved roles does not create new access.
203
+
204
+ ## Related docs
205
+
206
+ - Security model + prompt injection: [Security](/gateway/security)
207
+ - Updating safely (run doctor): [Updating](/install/updating)
208
+ - Channel configs:
209
+ - Telegram: [Telegram](/channels/telegram)
210
+ - WhatsApp: [WhatsApp](/channels/whatsapp)
211
+ - Signal: [Signal](/channels/signal)
212
+ - iMessage: [iMessage](/channels/imessage)
213
+ - Discord: [Discord](/channels/discord)
214
+ - Slack: [Slack](/channels/slack)