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,740 @@
1
+ ---
2
+ summary: "Mantis is the visual end-to-end verification system for reproducing Nodmix bugs on live transports, capturing before and after evidence, and attaching artifacts to PRs."
3
+ title: "Mantis"
4
+ read_when:
5
+ - Building or running live visual QA for Nodmix bugs
6
+ - Adding before and after verification for a pull request
7
+ - Adding Discord, Slack, WhatsApp, or other live transport scenarios
8
+ - Debugging QA runs that need screenshots, browser automation, or VNC access
9
+ ---
10
+
11
+ Mantis is the Nodmix end-to-end verification system for bugs that need a real
12
+ runtime, a real transport, and visible proof. It runs a scenario against a known
13
+ bad ref, captures evidence, runs the same scenario against a candidate ref, and
14
+ publishes the comparison as artifacts that a maintainer can inspect from a PR or
15
+ from a local command.
16
+
17
+ Mantis starts with Discord because Discord gives us a high-value first lane:
18
+ real bot auth, real guild channels, reactions, threads, native commands, and a
19
+ browser UI where humans can visually confirm what the transport showed.
20
+
21
+ ## Goals
22
+
23
+ - Reproduce a bug from a GitHub issue or PR with the same transport shape users
24
+ see.
25
+ - Capture a **before** artifact on the baseline ref before applying the fix.
26
+ - Capture an **after** artifact on the candidate ref after applying the fix.
27
+ - Use a deterministic oracle whenever possible, such as a Discord REST reaction
28
+ read or channel transcript check.
29
+ - Capture screenshots when the bug has a visible UI surface.
30
+ - Run locally from an agent-controlled CLI and remotely from GitHub.
31
+ - Preserve enough machine state for VNC rescue when login, browser automation, or
32
+ provider auth gets stuck.
33
+ - Post concise status to an operator Discord channel when the run is blocked,
34
+ needs manual VNC help, or finishes.
35
+
36
+ ## Non goals
37
+
38
+ - Mantis is not a replacement for unit tests. A Mantis run should usually become
39
+ a smaller regression test after the fix is understood.
40
+ - Mantis is not the normal fast CI gate. It is slower, uses live credentials, and
41
+ is reserved for bugs where the live environment matters.
42
+ - Mantis should not require a human for normal operation. Manual VNC is a rescue
43
+ path, not the happy path.
44
+ - Mantis does not store raw secrets in artifacts, logs, screenshots, Markdown
45
+ reports, or PR comments.
46
+
47
+ ## Ownership
48
+
49
+ Mantis lives in the Nodmix QA stack.
50
+
51
+ - Nodmix owns the scenario runtime, transport adapters, evidence schema, and
52
+ local CLI under `pnpm nodmix qa mantis`.
53
+ - QA Lab owns the live transport harness pieces, browser capture helpers, and
54
+ artifact writers.
55
+ - Crabbox owns warmed Linux machines when a remote VM is needed.
56
+ - GitHub Actions owns the remote workflow entrypoint and artifact retention.
57
+ - ClawSweeper owns GitHub comment routing: parsing maintainer commands,
58
+ dispatching the workflow, and posting the final PR comment.
59
+ - Nodmix agents drive Mantis through Codex when a scenario needs agentic setup,
60
+ debugging, or stuck-state reporting.
61
+
62
+ This boundary keeps transport knowledge in Nodmix, machine scheduling in
63
+ Crabbox, and maintainer workflow glue in ClawSweeper.
64
+
65
+ ## Command shape
66
+
67
+ The first local command verifies the Discord bot, guild, channel, message send,
68
+ reaction send, and artifact path:
69
+
70
+ ```bash
71
+ pnpm nodmix qa mantis discord-smoke \
72
+ --output-dir .artifacts/qa-e2e/mantis/discord-smoke
73
+ ```
74
+
75
+ The local before and after runner accepts this shape:
76
+
77
+ ```bash
78
+ pnpm nodmix qa mantis run \
79
+ --transport discord \
80
+ --scenario discord-status-reactions-tool-only \
81
+ --baseline origin/main \
82
+ --candidate HEAD \
83
+ --output-dir .artifacts/qa-e2e/mantis/local-discord-status-reactions
84
+ ```
85
+
86
+ The runner creates detached baseline and candidate worktrees under the output
87
+ directory, installs dependencies, builds each ref, runs the scenario with
88
+ `--allow-failures`, then writes `baseline/`, `candidate/`, `comparison.json`,
89
+ and `mantis-report.md`. For the first Discord scenario, a successful verification
90
+ means baseline status is `fail` and candidate status is `pass`.
91
+
92
+ The second Discord before/after probe targets thread attachments:
93
+
94
+ ```bash
95
+ pnpm nodmix qa mantis run \
96
+ --transport discord \
97
+ --scenario discord-thread-reply-filepath-attachment \
98
+ --baseline <bug-ref> \
99
+ --candidate <fix-ref> \
100
+ --output-dir .artifacts/qa-e2e/mantis/local-discord-thread-attachment
101
+ ```
102
+
103
+ That scenario posts a parent message with the driver bot, creates a real Discord
104
+ thread, calls Nodmix's `message.thread-reply` action with a repo-local
105
+ `filePath`, then polls the thread for the SUT reply and attachment filename. The
106
+ baseline screenshot shows the reply with no attachment; the candidate screenshot
107
+ shows the expected `mantis-thread-report.md` attachment.
108
+
109
+ The first VM/browser primitive is the desktop smoke:
110
+
111
+ ```bash
112
+ pnpm nodmix qa mantis desktop-browser-smoke \
113
+ --output-dir .artifacts/qa-e2e/mantis/desktop-browser
114
+ ```
115
+
116
+ It leases or reuses a Crabbox desktop machine, starts a visible browser inside the
117
+ VNC session, captures the desktop, pulls artifacts back to the local output
118
+ directory, and writes the reconnect command into the report. The command defaults
119
+ to the Hetzner provider because it is the first provider with working desktop/VNC
120
+ coverage in the Mantis lane. Override it with `--provider`, `--crabbox-bin`, or
121
+ `NODMIX_MANTIS_CRABBOX_PROVIDER` when running against another Crabbox fleet.
122
+
123
+ Useful desktop smoke flags:
124
+
125
+ - `--lease-id <cbx_...>` or `NODMIX_MANTIS_CRABBOX_LEASE_ID` reuses a warmed desktop.
126
+ - `--browser-url <url>` changes the page opened in the visible browser.
127
+ - `--html-file <path>` renders a repo-local HTML artifact in the visible browser. Mantis uses this to capture the generated Discord status-reaction timeline through a real Crabbox desktop.
128
+ - `--browser-profile-dir <remote-path>` reuses a remote Chrome user-data-dir so a persistent Mantis desktop can stay logged in between runs. Use this for the long-lived Discord Web viewer profile.
129
+ - `--browser-profile-archive-env <name>` restores a base64 `.tgz` Chrome user-data-dir archive from the named environment variable before launching the browser. Use this for logged-in witnesses such as Discord Web. The default env var is `NODMIX_MANTIS_BROWSER_PROFILE_TGZ_B64`.
130
+ - `--video-duration <seconds>` controls the MP4 capture length. Use a longer duration for slow logged-in web apps that need time to settle.
131
+ - `--keep-lease` or `NODMIX_MANTIS_KEEP_VM=1` keeps a newly created passing lease open for VNC inspection. Failed runs keep the lease by default when one was created so an operator can reconnect.
132
+ - `--class`, `--idle-timeout`, and `--ttl` tune machine size and lease lifetime.
133
+
134
+ For Discord Web evidence, Mantis uses a dedicated viewer account instead of a
135
+ bot token. The live Discord API scenario remains the oracle: it creates the real
136
+ thread, sends the SUT `thread-reply`, and checks the attachment through Discord
137
+ REST. When `NODMIX_QA_DISCORD_CAPTURE_UI_METADATA=1` is set, the scenario also
138
+ writes a Discord Web URL artifact. When `NODMIX_QA_DISCORD_KEEP_THREADS=1` is
139
+ set, it leaves that thread available long enough for a logged-in browser to open
140
+ and record it.
141
+
142
+ The GitHub workflow opens the candidate thread URL in Discord Web, captures a
143
+ screenshot, records an MP4, and generates a trimmed GIF preview when Crabbox
144
+ media tooling is available. Prefer a persistent viewer profile path configured
145
+ through `MANTIS_DISCORD_VIEWER_CHROME_PROFILE_DIR`, because full Chrome profile
146
+ archives can outgrow GitHub's secret-size limit. For small/bootstrap profiles,
147
+ the workflow can also restore a base64 `.tgz` archive from
148
+ `MANTIS_DISCORD_VIEWER_CHROME_PROFILE_TGZ_B64`. If neither profile source is
149
+ configured, the workflow still publishes the deterministic baseline/candidate
150
+ attachment screenshots and logs a notice that the logged-in Discord Web witness
151
+ was skipped.
152
+
153
+ The first full desktop transport primitive is the Slack desktop smoke:
154
+
155
+ ```bash
156
+ pnpm nodmix qa mantis slack-desktop-smoke \
157
+ --output-dir .artifacts/qa-e2e/mantis/slack-desktop \
158
+ --gateway-setup \
159
+ --scenario slack-canary \
160
+ --keep-lease
161
+ ```
162
+
163
+ It leases or reuses a Crabbox desktop machine, syncs the current checkout into
164
+ the VM, runs `pnpm nodmix qa slack` inside that VM, opens Slack Web in the VNC
165
+ browser, captures the visible desktop, and copies both the Slack QA artifacts and
166
+ the VNC screenshot back to the local output directory. This is the first Mantis
167
+ shape where the SUT Nodmix gateway and the browser both live inside the same
168
+ Linux desktop VM.
169
+
170
+ With `--gateway-setup`, the command prepares a persistent disposable Nodmix
171
+ home at `$HOME/.nodmix-mantis/slack-nodmix`, patches Slack Socket Mode
172
+ configuration for the selected channel, starts `nodmix gateway run` on port
173
+ `38973`, and keeps Chrome running in the VNC session. This is the "leave me a
174
+ Linux desktop with Slack and a claw running" mode; the bot-to-bot Slack QA lane
175
+ remains the default when `--gateway-setup` is omitted.
176
+
177
+ Required inputs for `--credential-source env`:
178
+
179
+ - `NODMIX_QA_SLACK_CHANNEL_ID`
180
+ - `NODMIX_QA_SLACK_DRIVER_BOT_TOKEN`
181
+ - `NODMIX_QA_SLACK_SUT_BOT_TOKEN`
182
+ - `NODMIX_QA_SLACK_SUT_APP_TOKEN`
183
+ - `NODMIX_LIVE_OPENAI_KEY` for the remote model lane. If only
184
+ `OPENAI_API_KEY` is set locally, Mantis maps it to `NODMIX_LIVE_OPENAI_KEY`
185
+ before invoking Crabbox so Crabbox's `NODMIX_*` env forwarding can carry it
186
+ into the VM.
187
+
188
+ With `--gateway-setup --credential-source convex`, Mantis leases the Slack SUT
189
+ credential from the shared pool before creating the VM and forwards the leased
190
+ channel id, Socket Mode app token, and bot token as the `NODMIX_MANTIS_SLACK_*`
191
+ runtime env inside the desktop. That keeps GitHub workflows thin: they only need
192
+ the Convex broker secret, not raw Slack bot or app tokens.
193
+
194
+ Useful Slack desktop flags:
195
+
196
+ - `--lease-id <cbx_...>` reruns against a machine where an operator already logged in to Slack Web through VNC.
197
+ - `--gateway-setup` starts a persistent Nodmix Slack gateway in the VM instead of only running the bot-to-bot QA lane.
198
+ - `--keep-lease` keeps the gateway VM open for VNC inspection after success; `--no-keep-lease` stops it after collecting artifacts.
199
+ - `--slack-url <url>` opens a specific Slack Web URL. Without it, Mantis derives `https://app.slack.com/client/<team>/<channel>` from Slack `auth.test` when the SUT bot token is available.
200
+ - `--slack-channel-id <id>` controls the Slack channel allowlist used by gateway setup.
201
+ - `NODMIX_MANTIS_SLACK_BROWSER_PROFILE_DIR` controls the persistent Chrome profile inside the VM. The default is `$HOME/.config/nodmix-mantis/slack-chrome-profile`, so a manual Slack Web login survives reruns on the same lease.
202
+ - `--credential-source convex --credential-role ci` uses the shared credential pool instead of direct Slack env tokens.
203
+ - `--provider-mode`, `--model`, `--alt-model`, and `--fast` pass through to the Slack live lane.
204
+
205
+ The GitHub smoke workflow is `Mantis Discord Smoke`. The before and after GitHub
206
+ workflow for the first real scenario is `Mantis Discord Status Reactions`. It
207
+ accepts:
208
+
209
+ - `baseline_ref`: the ref expected to reproduce queued-only behavior.
210
+ - `candidate_ref`: the ref expected to show `queued -> thinking -> done`.
211
+
212
+ It checks out the workflow harness ref, builds separate baseline and candidate
213
+ worktrees, runs `discord-status-reactions-tool-only` against each worktree, and
214
+ uploads `baseline/`, `candidate/`, `comparison.json`, and `mantis-report.md` as
215
+ Actions artifacts. It also renders each lane's timeline HTML in a Crabbox
216
+ desktop browser and publishes those VNC screenshots beside the deterministic
217
+ timeline PNGs in the PR comment. The same PR comment embeds lightweight
218
+ motion-trimmed GIF previews generated by `crabbox media preview`, links to the
219
+ matching motion-trimmed MP4 clips, and keeps the full desktop MP4 files for deep
220
+ inspection. Screenshots stay inline for quick review. The workflow builds the
221
+ Crabbox CLI from
222
+ `nodmix/crabbox` main so it can use the current desktop/browser lease flags
223
+ before the next Crabbox binary release is cut.
224
+
225
+ `Mantis Scenario` is the generic manual entrypoint. It takes a `scenario_id`,
226
+ `candidate_ref`, optional `baseline_ref`, and optional `pr_number`, then
227
+ dispatches the scenario-owned workflow. The wrapper is intentionally thin:
228
+ scenario workflows still own their transport setup, credentials, VM class,
229
+ expected oracle, and artifact manifest.
230
+
231
+ `Mantis Slack Desktop Smoke` is the first Slack VM workflow. It checks out the
232
+ trusted candidate ref in a separate worktree, leases a Crabbox Linux desktop,
233
+ runs `pnpm nodmix qa mantis slack-desktop-smoke --gateway-setup` against that
234
+ candidate, opens Slack Web in the VNC browser, records the desktop, generates a
235
+ motion-trimmed preview with `crabbox media preview`, uploads the full artifact
236
+ directory, and optionally posts the inline evidence comment on the target PR.
237
+ It defaults to AWS for the desktop lease and exposes a manual provider input so
238
+ operators can switch to Hetzner when AWS capacity is slow or unavailable. Use
239
+ this lane when you want "a Linux desktop with Slack and a claw running" instead
240
+ of only a bot-to-bot Slack transcript.
241
+
242
+ `Mantis Telegram Live` wraps the existing Telegram live QA lane in the same PR
243
+ evidence pipeline. It checks out the trusted candidate ref in a separate
244
+ worktree, runs `pnpm nodmix qa telegram --credential-source convex
245
+ --credential-role ci`, writes a `mantis-evidence.json` manifest from the
246
+ Telegram QA summary and observed-message artifact, renders the redacted
247
+ transcript HTML through a Crabbox desktop browser, generates a motion-trimmed GIF
248
+ with `crabbox media preview`, and posts the inline PR evidence comment when a PR
249
+ number is available. This lane is transcript-visual rather than logged-in
250
+ Telegram Web proof: the Telegram Bot API gives stable live message evidence, but
251
+ Telegram Web login state is not required for normal Mantis automation.
252
+
253
+ `Mantis Telegram Desktop Proof` is the agentic native Telegram Desktop
254
+ before/after wrapper. A maintainer can trigger it from a PR comment with
255
+ `@nodmix-mantis telegram desktop proof`, from the Actions UI with freeform
256
+ instructions, or through the generic `Mantis Scenario` dispatcher. The workflow
257
+ hands the PR, baseline ref, candidate ref, and maintainer instructions to Codex.
258
+ The agent reads the PR, decides what Telegram-visible behavior proves the
259
+ change, runs the real-user Crabbox Telegram Desktop proof lane for baseline and
260
+ candidate, iterates until the native GIFs are useful, writes paired
261
+ `motionPreview` artifacts into `mantis-evidence.json`, uploads the bundle, and
262
+ posts a 2-column PR evidence table when a PR number is available.
263
+
264
+ For human-in-the-loop Telegram desktop setup, use the scenario builder:
265
+
266
+ ```bash
267
+ pnpm nodmix qa mantis telegram-desktop-builder \
268
+ --credential-source convex \
269
+ --credential-role maintainer \
270
+ --keep-lease
271
+ ```
272
+
273
+ The builder leases or reuses a Crabbox desktop, installs the native Linux
274
+ Telegram Desktop binary, optionally restores a user-session archive, configures
275
+ Nodmix with the leased Telegram SUT bot token, starts `nodmix gateway run`
276
+ on port `38974`, posts a driver-bot readiness message to the leased private
277
+ group, then captures a screenshot and MP4 from the visible VNC desktop. A bot
278
+ token never logs Telegram Desktop in; it only configures Nodmix. The desktop
279
+ viewer is a separate Telegram user session restored from
280
+ `--telegram-profile-archive-env <name>` or created manually through VNC and kept
281
+ alive with `--keep-lease`.
282
+
283
+ Useful Telegram desktop builder flags:
284
+
285
+ - `--lease-id <cbx_...>` reruns against a VM where an operator already logged in to Telegram Desktop.
286
+ - `--telegram-profile-archive-env <name>` reads a base64 `.tgz` Telegram Desktop profile archive from that env var and restores it before launch.
287
+ - `--telegram-profile-dir <remote-path>` controls the remote Telegram Desktop profile directory. The default is `$HOME/.local/share/TelegramDesktop`.
288
+ - `--no-gateway-setup` installs and opens Telegram Desktop without configuring Nodmix.
289
+ - `--credential-source convex --credential-role ci` uses the shared credential broker instead of direct Telegram env tokens.
290
+
291
+ Every PR-publishing scenario writes `mantis-evidence.json` next to its report.
292
+ This schema is the handoff between scenario code and GitHub comments:
293
+
294
+ ```json
295
+ {
296
+ "schemaVersion": 1,
297
+ "id": "discord-status-reactions",
298
+ "title": "Mantis Discord Status Reactions QA",
299
+ "summary": "Human-readable top summary for the PR comment.",
300
+ "scenario": "discord-status-reactions-tool-only",
301
+ "comparison": {
302
+ "baseline": { "sha": "...", "status": "fail", "expected": "queued-only" },
303
+ "candidate": { "sha": "...", "status": "pass", "expected": "queued -> thinking -> done" },
304
+ "pass": true
305
+ },
306
+ "artifacts": [
307
+ {
308
+ "kind": "timeline",
309
+ "lane": "baseline",
310
+ "label": "Baseline queued-only",
311
+ "path": "baseline/timeline.png",
312
+ "targetPath": "baseline.png",
313
+ "alt": "Baseline Discord timeline",
314
+ "width": 420
315
+ }
316
+ ]
317
+ }
318
+ ```
319
+
320
+ Artifact `path` values are relative to the manifest directory. `targetPath`
321
+ values are relative paths under the configured Mantis R2/S3 artifact prefix. The
322
+ publisher rejects path traversal and skips entries marked `"required": false`
323
+ when optional previews or videos are unavailable.
324
+
325
+ Supported artifact kinds:
326
+
327
+ - `timeline`: deterministic scenario screenshot, usually before/after.
328
+ - `desktopScreenshot`: VNC/browser desktop screenshot.
329
+ - `motionPreview`: inline animated GIF generated from the desktop recording.
330
+ - `motionClip`: motion-trimmed MP4 that removes static lead-in and tail.
331
+ - `fullVideo`: full MP4 recording for deep inspection.
332
+ - `metadata`: JSON/log sidecar.
333
+ - `report`: Markdown report.
334
+
335
+ The reusable publisher is `scripts/mantis/publish-pr-evidence.mjs`. Workflows
336
+ call it with the manifest, target PR, artifact target root, comment marker,
337
+ Actions artifact URL, run URL, and request source. It uploads declared artifacts
338
+ to the configured Mantis R2/S3 bucket, builds a summary-first PR comment with
339
+ inline images/previews and linked videos, then updates the existing marker
340
+ comment or creates one. The workflows publish to `nodmix-crabbox-artifacts`
341
+ with public URLs under `https://artifacts.nodmix.ai`. They provide bucket,
342
+ region, and public URL values directly. The reusable publisher requires:
343
+
344
+ - `MANTIS_ARTIFACT_R2_ACCESS_KEY_ID`
345
+ - `MANTIS_ARTIFACT_R2_SECRET_ACCESS_KEY`
346
+ - `MANTIS_ARTIFACT_R2_BUCKET`
347
+ - `MANTIS_ARTIFACT_R2_ENDPOINT`
348
+ - `MANTIS_ARTIFACT_R2_REGION`
349
+ - `MANTIS_ARTIFACT_R2_PUBLIC_BASE_URL`
350
+
351
+ You can also trigger the status-reactions run directly from a PR comment:
352
+
353
+ ```text
354
+ @nodmix-mantis discord status reactions
355
+ ```
356
+
357
+ The comment trigger is intentionally narrow. It only runs on pull request
358
+ comments from users with write, maintain, or admin access, and it only recognizes
359
+ Discord status-reaction requests. By default it uses the known bad baseline ref
360
+ and the current PR head SHA as the candidate. Maintainers can override either
361
+ ref:
362
+
363
+ ```text
364
+ @nodmix-mantis discord status reactions baseline=origin/main candidate=HEAD
365
+ ```
366
+
367
+ Telegram live QA can also be triggered from a PR comment:
368
+
369
+ ```text
370
+ @nodmix-mantis telegram
371
+ @nodmix-mantis telegram scenario=telegram-status-command
372
+ @nodmix-mantis telegram scenarios=telegram-status-command,telegram-mentioned-message-reply
373
+ ```
374
+
375
+ By default it uses the current PR head SHA as the candidate and runs
376
+ `telegram-status-command`. Maintainers can override `candidate=...`,
377
+ `provider=aws|hetzner`, and `lease=<cbx_...>` when they need a specific ref or a
378
+ pre-warmed Crabbox desktop.
379
+
380
+ ClawSweeper command examples:
381
+
382
+ ```text
383
+ @clawsweeper mantis discord discord-status-reactions-tool-only
384
+ @clawsweeper verify e2e discord
385
+ ```
386
+
387
+ The first command is explicit and scenario-focused. The second can later map a PR
388
+ or issue to recommended Mantis scenarios from labels, changed files, and
389
+ ClawSweeper review findings.
390
+
391
+ ## Run lifecycle
392
+
393
+ 1. Acquire credentials.
394
+ 2. Allocate or reuse a VM.
395
+ 3. Prepare the desktop/browser profile when the scenario needs UI evidence.
396
+ 4. Prepare a clean checkout for the baseline ref.
397
+ 5. Install dependencies and build only what the scenario needs.
398
+ 6. Start a child Nodmix Gateway with an isolated state directory.
399
+ 7. Configure the live transport, provider, model, and browser profile.
400
+ 8. Run the scenario and capture baseline evidence.
401
+ 9. Stop the gateway and preserve logs.
402
+ 10. Prepare the candidate ref in the same VM.
403
+ 11. Run the same scenario and capture candidate evidence.
404
+ 12. Compare the oracle results and visual evidence.
405
+ 13. Write Markdown, JSON, logs, screenshots, and optional trace artifacts.
406
+ 14. Upload GitHub Actions artifacts.
407
+ 15. Post a concise PR or Discord status message.
408
+
409
+ The scenario should be able to fail in two different ways:
410
+
411
+ - **Bug reproduced**: baseline failed in the expected way.
412
+ - **Harness failure**: environment setup, credentials, Discord API, browser, or
413
+ provider failed before the bug oracle was meaningful.
414
+
415
+ The final report must separate these cases so maintainers do not confuse a flaky
416
+ environment with product behavior.
417
+
418
+ ## Discord MVP
419
+
420
+ The first scenario should target Discord status reactions in guild channels where
421
+ the source reply delivery mode is `message_tool_only`.
422
+
423
+ Why it is a good Mantis seed:
424
+
425
+ - It is visible in Discord as reactions on the triggering message.
426
+ - It has a strong REST oracle through Discord message reaction state.
427
+ - It exercises a real Nodmix Gateway, Discord bot auth, message dispatch,
428
+ source reply delivery mode, status reaction state, and model turn lifecycle.
429
+ - It is narrow enough to keep the first implementation honest.
430
+
431
+ Expected scenario shape:
432
+
433
+ ```yaml
434
+ id: discord-status-reactions-tool-only
435
+ transport: discord
436
+ baseline:
437
+ expect:
438
+ reproduced: true
439
+ candidate:
440
+ expect:
441
+ fixed: true
442
+ config:
443
+ messages:
444
+ ackReaction: "👀"
445
+ ackReactionScope: "group-mentions"
446
+ groupChat:
447
+ visibleReplies: "message_tool"
448
+ statusReactions:
449
+ enabled: true
450
+ timing:
451
+ debounceMs: 0
452
+ discord:
453
+ requireMention: true
454
+ notifyChannel: operator-notify
455
+ evidence:
456
+ rest:
457
+ messageReactions: true
458
+ browser:
459
+ screenshotMessageRow: true
460
+ ```
461
+
462
+ Baseline evidence should show the queued acknowledgement reaction but no
463
+ lifecycle transition in tool-only mode. Candidate evidence should show lifecycle
464
+ status reactions running when `messages.statusReactions.enabled` is explicitly
465
+ true.
466
+
467
+ The executable first slice is the opt-in Discord live QA scenario:
468
+
469
+ ```bash
470
+ pnpm nodmix qa discord \
471
+ --scenario discord-status-reactions-tool-only \
472
+ --provider-mode live-frontier \
473
+ --model openai/gpt-5.4 \
474
+ --alt-model openai/gpt-5.4 \
475
+ --fast \
476
+ --output-dir .artifacts/qa-e2e/mantis/discord-status-reactions-candidate
477
+ ```
478
+
479
+ It configures the SUT with always-on guild handling, `visibleReplies:
480
+ "message_tool"`, `ackReaction: "👀"`, and explicit status reactions. The oracle
481
+ polls the real Discord triggering message and expects the observed sequence
482
+ `👀 -> 🤔 -> 👍`. Artifacts include `discord-qa-reaction-timelines.json`,
483
+ `discord-status-reactions-tool-only-timeline.html`, and
484
+ `discord-status-reactions-tool-only-timeline.png`.
485
+
486
+ ## Existing QA pieces
487
+
488
+ Mantis should build on the existing private QA stack instead of starting from
489
+ zero:
490
+
491
+ - `pnpm nodmix qa discord` already runs a live Discord lane with driver and
492
+ SUT bots.
493
+ - The live transport runner already writes reports and observed-message
494
+ artifacts under `.artifacts/qa-e2e/`.
495
+ - Convex credential leases already provide exclusive access to shared live
496
+ transport credentials.
497
+ - The browser control service already supports screenshots, snapshots,
498
+ headless managed profiles, and remote CDP profiles.
499
+ - QA Lab already has a debugger UI and bus for transport-shaped testing.
500
+
501
+ The first Mantis implementation can be a thin before/after runner over these
502
+ pieces, plus one visual evidence layer.
503
+
504
+ ## Evidence model
505
+
506
+ Every run writes a stable artifact directory:
507
+
508
+ ```text
509
+ .artifacts/qa-e2e/mantis/<run-id>/
510
+ mantis-report.md
511
+ mantis-summary.json
512
+ baseline/
513
+ summary.json
514
+ discord-message.json
515
+ screenshot-message-row.png
516
+ gateway-debug/
517
+ candidate/
518
+ summary.json
519
+ discord-message.json
520
+ screenshot-message-row.png
521
+ gateway-debug/
522
+ comparison.json
523
+ run.log
524
+ ```
525
+
526
+ `mantis-summary.json` should be the machine-readable source of truth. The
527
+ Markdown report is for PR comments and human review.
528
+
529
+ The summary must include:
530
+
531
+ - refs and SHAs tested
532
+ - transport and scenario id
533
+ - machine provider and machine id or lease id
534
+ - credential source without secret values
535
+ - baseline result
536
+ - candidate result
537
+ - whether the bug reproduced on baseline
538
+ - whether the candidate fixed it
539
+ - artifact paths
540
+ - sanitized setup or cleanup issues
541
+
542
+ Screenshots are evidence, not secrets. They still need redaction discipline:
543
+ private channel names, user names, or message content may appear. For public PRs,
544
+ prefer GitHub Actions artifact links over inline images until the redaction story
545
+ is stronger.
546
+
547
+ ## Browser and VNC
548
+
549
+ The browser lane has two modes:
550
+
551
+ - **Headless automation**: default for CI. Chrome runs with CDP enabled, and
552
+ Playwright or Nodmix browser control captures screenshots.
553
+ - **VNC rescue**: enabled on the same VM when login, MFA, Discord anti-automation,
554
+ or visual debugging needs a human.
555
+
556
+ The Discord observer browser profile should be persistent enough to avoid
557
+ logging in for every run, but isolated from personal browser state. A profile
558
+ belongs to the Mantis machine pool, not to a developer laptop.
559
+
560
+ When Mantis gets stuck, it posts a Discord status message with:
561
+
562
+ - run id
563
+ - scenario id
564
+ - machine provider
565
+ - artifact directory
566
+ - VNC or noVNC connection instructions if available
567
+ - short blocker text
568
+
569
+ The first private deployment can post these messages to the existing operator
570
+ channel and move to a dedicated Mantis channel later.
571
+
572
+ ## Machines
573
+
574
+ Mantis should prefer AWS through Crabbox for the first remote implementation.
575
+ Crabbox gives us warmed machines, lease tracking, hydration, logs, results, and
576
+ cleanup. If AWS capacity is too slow or unavailable, add a Hetzner provider
577
+ behind the same machine interface.
578
+
579
+ Minimum VM requirements:
580
+
581
+ - Linux with a desktop-capable Chrome or Chromium install
582
+ - CDP access for browser automation
583
+ - VNC or noVNC for rescue
584
+ - Node 22 and pnpm
585
+ - Nodmix checkout and dependency cache
586
+ - Playwright Chromium browser cache when Playwright is used
587
+ - enough CPU and memory for one Nodmix Gateway, one browser, and one model run
588
+ - outbound access to Discord, GitHub, model providers, and the credential broker
589
+
590
+ The VM should not keep long-lived raw secrets outside the expected credential or
591
+ browser profile stores.
592
+
593
+ ## Secrets
594
+
595
+ Secrets live in GitHub organization or repository secrets for remote runs, and in
596
+ a local operator-controlled secret file for local runs.
597
+
598
+ Recommended secret names:
599
+
600
+ - `NODMIX_QA_DISCORD_MANTIS_BOT_TOKEN`
601
+ - `NODMIX_QA_DISCORD_DRIVER_BOT_TOKEN`
602
+ - `NODMIX_QA_DISCORD_SUT_BOT_TOKEN`
603
+ - `NODMIX_QA_DISCORD_GUILD_ID`
604
+ - `NODMIX_QA_DISCORD_CHANNEL_ID`
605
+ - `NODMIX_QA_DISCORD_NOTIFY_CHANNEL_ID`
606
+ - `NODMIX_QA_REDACT_PUBLIC_METADATA=1` for public GitHub artifact uploads
607
+ - `NODMIX_QA_CONVEX_SITE_URL`
608
+ - `NODMIX_QA_CONVEX_SECRET_CI`
609
+ - `NODMIX_QA_MANTIS_CRABBOX_COORDINATOR`
610
+ - `NODMIX_QA_MANTIS_CRABBOX_COORDINATOR_TOKEN`
611
+
612
+ Long term, the Convex credential pool should remain the normal source for live
613
+ transport credentials. GitHub secrets bootstrap the broker and fallback lanes.
614
+ The Discord status-reactions workflow maps the Mantis Crabbox secrets back to
615
+ the `CRABBOX_COORDINATOR` and `CRABBOX_COORDINATOR_TOKEN` environment variables
616
+ that the Crabbox CLI expects. The plain `CRABBOX_*` GitHub secret names remain
617
+ accepted as a compatibility fallback.
618
+
619
+ The Mantis runner must never print:
620
+
621
+ - Discord bot tokens
622
+ - provider API keys
623
+ - browser cookies
624
+ - auth profile contents
625
+ - VNC passwords
626
+ - raw credential payloads
627
+
628
+ Public artifact uploads should also redact Discord target metadata such as bot,
629
+ guild, channel, and message ids. The GitHub smoke workflow enables
630
+ `NODMIX_QA_REDACT_PUBLIC_METADATA=1` for this reason.
631
+
632
+ If a token is accidentally pasted into an issue, PR, chat, or log, rotate it
633
+ after the new secret has been stored.
634
+
635
+ ## GitHub artifacts and PR comments
636
+
637
+ Mantis workflows should upload the full evidence bundle as a short-lived Actions
638
+ artifact. When the workflow is run for a bug report or fix PR, it should also
639
+ publish redacted inline media to the configured Mantis R2/S3 bucket and upsert a
640
+ comment on that bug or fix PR with inline before/after screenshots. Do not post
641
+ the primary proof only on a generic QA automation PR. Raw logs, observed
642
+ messages, and other bulky evidence stay in the Actions artifact.
643
+
644
+ Production workflows should post those comments with the Mantis GitHub App, not
645
+ with `github-actions[bot]`. Store the app id and private key as
646
+ `MANTIS_GITHUB_APP_ID` and `MANTIS_GITHUB_APP_PRIVATE_KEY` GitHub Actions
647
+ secrets. The workflow uses a hidden marker as the upsert key, updates that
648
+ comment when the token can edit it, and creates a new Mantis-owned comment when
649
+ an older bot-owned marker cannot be edited.
650
+
651
+ The PR comment should be short and visual:
652
+
653
+ ```md
654
+ Mantis Discord Status Reactions QA
655
+
656
+ Summary: Mantis reran the reported Discord status-reaction bug against the known
657
+ bad baseline and the candidate fix. The baseline reproduced the bug, while the
658
+ candidate showed the expected queued -> thinking -> done sequence.
659
+
660
+ - Scenario: `discord-status-reactions-tool-only`
661
+ - Run: <workflow run link>
662
+ - Artifact: <artifact link>
663
+ - Baseline: `<status>` at `<sha>`
664
+ - Candidate: `<status>` at `<sha>`
665
+
666
+ | Baseline | Candidate |
667
+ | ------------------- | ------------------- |
668
+ | <inline screenshot> | <inline screenshot> |
669
+ ```
670
+
671
+ When the run fails because the harness failed, the comment must say that instead
672
+ of implying the candidate failed.
673
+
674
+ ## Private deployment notes
675
+
676
+ A private deployment may already have a Mantis Discord application. Reuse that
677
+ application instead of creating another app when it has the right bot
678
+ permissions and can be safely rotated.
679
+
680
+ Set the initial operator notification channel through secrets or deployment
681
+ configuration. It can point at an existing maintainer or operations channel
682
+ first, then move to a dedicated Mantis channel once one exists.
683
+
684
+ Do not put guild ids, channel ids, bot tokens, browser cookies, or VNC passwords
685
+ in this document. Store them in GitHub secrets, the credential broker, or the
686
+ operator's local secret store.
687
+
688
+ ## Adding a scenario
689
+
690
+ A Mantis scenario should declare:
691
+
692
+ - id and title
693
+ - transport
694
+ - required credentials
695
+ - baseline ref policy
696
+ - candidate ref policy
697
+ - Nodmix config patch
698
+ - setup steps
699
+ - stimulus
700
+ - expected baseline oracle
701
+ - expected candidate oracle
702
+ - visual capture targets
703
+ - timeout budget
704
+ - cleanup steps
705
+
706
+ Scenarios should prefer small, typed oracles:
707
+
708
+ - Discord reaction state for reaction bugs
709
+ - Discord message references for threading bugs
710
+ - Slack thread ts and reaction API state for Slack bugs
711
+ - email message ids and headers for email bugs
712
+ - browser screenshots when UI is the only reliable observable
713
+
714
+ Vision checks should be additive. If a platform API can prove the bug, use the
715
+ API as the pass/fail oracle and keep screenshots for human confidence.
716
+
717
+ ## Provider expansion
718
+
719
+ After Discord, the same runner can add:
720
+
721
+ - Slack: reactions, threads, app mentions, modals, file uploads.
722
+ - Email: Gmail auth and message threading using `gog` where connectors are not
723
+ enough.
724
+ - WhatsApp: QR login, re-identification, message delivery, media, reactions.
725
+ - Telegram: group mention gating, commands, reactions where available.
726
+ - Matrix: encrypted rooms, thread or reply relations, restart resume.
727
+
728
+ Each transport should have one cheap smoke scenario and one or more bug-class
729
+ scenarios. Expensive visual scenarios should stay opt-in.
730
+
731
+ ## Open questions
732
+
733
+ - Which Discord bot should be the driver, and which should be the SUT, when the
734
+ existing Mantis bot is reused?
735
+ - Should the observer browser login use a human Discord account, a test account,
736
+ or only bot-readable REST evidence for the first phase?
737
+ - How long should GitHub retain Mantis artifacts for PRs?
738
+ - When should ClawSweeper automatically recommend Mantis instead of waiting for a
739
+ maintainer command?
740
+ - Should screenshots be redacted or cropped before upload for public PRs?