vilvona 1.0.0

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 (812) hide show
  1. package/CHANGELOG.md +12331 -0
  2. package/LICENSE +24 -0
  3. package/README.md +314 -0
  4. package/THIRD_PARTY_NOTICES.md +37 -0
  5. package/docs/.i18n/README.md +81 -0
  6. package/docs/.i18n/ar-navigation.json +18 -0
  7. package/docs/.i18n/de-navigation.json +18 -0
  8. package/docs/.i18n/es-navigation.json +18 -0
  9. package/docs/.i18n/fr-navigation.json +18 -0
  10. package/docs/.i18n/glossary.ar.json +82 -0
  11. package/docs/.i18n/glossary.de.json +82 -0
  12. package/docs/.i18n/glossary.es.json +82 -0
  13. package/docs/.i18n/glossary.fa.json +82 -0
  14. package/docs/.i18n/glossary.fr.json +82 -0
  15. package/docs/.i18n/glossary.id.json +82 -0
  16. package/docs/.i18n/glossary.it.json +82 -0
  17. package/docs/.i18n/glossary.ja-JP.json +102 -0
  18. package/docs/.i18n/glossary.ko.json +82 -0
  19. package/docs/.i18n/glossary.nl.json +82 -0
  20. package/docs/.i18n/glossary.pl.json +82 -0
  21. package/docs/.i18n/glossary.pt-BR.json +82 -0
  22. package/docs/.i18n/glossary.th.json +82 -0
  23. package/docs/.i18n/glossary.tr.json +82 -0
  24. package/docs/.i18n/glossary.uk.json +82 -0
  25. package/docs/.i18n/glossary.vi.json +82 -0
  26. package/docs/.i18n/glossary.zh-CN.json +1182 -0
  27. package/docs/.i18n/glossary.zh-TW.json +162 -0
  28. package/docs/.i18n/id-navigation.json +18 -0
  29. package/docs/.i18n/it-navigation.json +18 -0
  30. package/docs/.i18n/ja-navigation.json +18 -0
  31. package/docs/.i18n/ko-navigation.json +18 -0
  32. package/docs/.i18n/pl-navigation.json +18 -0
  33. package/docs/.i18n/pt-BR-navigation.json +18 -0
  34. package/docs/.i18n/tr-navigation.json +18 -0
  35. package/docs/.i18n/translation-workflow.md +111 -0
  36. package/docs/.i18n/zh-Hans-navigation.json +552 -0
  37. package/docs/AGENTS.md +36 -0
  38. package/docs/agent-runtime-architecture.md +48 -0
  39. package/docs/announcements/bluebubbles-imessage.md +79 -0
  40. package/docs/auth-credential-semantics.md +124 -0
  41. package/docs/automation/auth-monitoring.md +11 -0
  42. package/docs/automation/clawflow.md +12 -0
  43. package/docs/automation/cron-jobs.md +569 -0
  44. package/docs/automation/cron-vs-heartbeat.md +11 -0
  45. package/docs/automation/gmail-pubsub.md +11 -0
  46. package/docs/automation/hooks.md +387 -0
  47. package/docs/automation/index.md +135 -0
  48. package/docs/automation/poll.md +12 -0
  49. package/docs/automation/standing-orders.md +250 -0
  50. package/docs/automation/taskflow.md +155 -0
  51. package/docs/automation/tasks.md +374 -0
  52. package/docs/automation/troubleshooting.md +12 -0
  53. package/docs/automation/webhook.md +12 -0
  54. package/docs/brave-search.md +11 -0
  55. package/docs/channels/access-groups.md +201 -0
  56. package/docs/channels/ambient-room-events.md +214 -0
  57. package/docs/channels/bot-loop-protection.md +131 -0
  58. package/docs/channels/broadcast-groups.md +472 -0
  59. package/docs/channels/channel-routing.md +162 -0
  60. package/docs/channels/clickclack.md +146 -0
  61. package/docs/channels/discord.md +1758 -0
  62. package/docs/channels/feishu.md +654 -0
  63. package/docs/channels/googlechat.md +286 -0
  64. package/docs/channels/group-messages.md +95 -0
  65. package/docs/channels/groups.md +610 -0
  66. package/docs/channels/imessage-from-bluebubbles.md +259 -0
  67. package/docs/channels/imessage.md +864 -0
  68. package/docs/channels/index.md +65 -0
  69. package/docs/channels/irc.md +253 -0
  70. package/docs/channels/line.md +243 -0
  71. package/docs/channels/location.md +71 -0
  72. package/docs/channels/matrix-migration.md +375 -0
  73. package/docs/channels/matrix-presentation.md +77 -0
  74. package/docs/channels/matrix-push-rules.md +150 -0
  75. package/docs/channels/matrix.md +935 -0
  76. package/docs/channels/mattermost.md +542 -0
  77. package/docs/channels/msteams.md +1097 -0
  78. package/docs/channels/nextcloud-talk.md +176 -0
  79. package/docs/channels/nostr.md +253 -0
  80. package/docs/channels/pairing.md +214 -0
  81. package/docs/channels/qqbot.md +317 -0
  82. package/docs/channels/signal.md +417 -0
  83. package/docs/channels/slack.md +1623 -0
  84. package/docs/channels/sms.md +380 -0
  85. package/docs/channels/synology-chat.md +187 -0
  86. package/docs/channels/telegram.md +1121 -0
  87. package/docs/channels/tlon.md +296 -0
  88. package/docs/channels/troubleshooting.md +162 -0
  89. package/docs/channels/twitch.md +431 -0
  90. package/docs/channels/wechat.md +171 -0
  91. package/docs/channels/whatsapp.md +796 -0
  92. package/docs/channels/yuanbao.md +416 -0
  93. package/docs/channels/zalo.md +253 -0
  94. package/docs/channels/zalouser.md +217 -0
  95. package/docs/ci.md +665 -0
  96. package/docs/clawhub/cli.md +82 -0
  97. package/docs/clawhub/publishing.md +96 -0
  98. package/docs/cli/acp.md +370 -0
  99. package/docs/cli/agent.md +109 -0
  100. package/docs/cli/agents.md +253 -0
  101. package/docs/cli/approvals.md +193 -0
  102. package/docs/cli/backup.md +98 -0
  103. package/docs/cli/browser.md +322 -0
  104. package/docs/cli/channels.md +154 -0
  105. package/docs/cli/clawbot.md +25 -0
  106. package/docs/cli/commitments.md +90 -0
  107. package/docs/cli/completion.md +39 -0
  108. package/docs/cli/config.md +504 -0
  109. package/docs/cli/configure.md +77 -0
  110. package/docs/cli/crestodian.md +337 -0
  111. package/docs/cli/cron.md +344 -0
  112. package/docs/cli/daemon.md +67 -0
  113. package/docs/cli/dashboard.md +33 -0
  114. package/docs/cli/devices.md +240 -0
  115. package/docs/cli/directory.md +68 -0
  116. package/docs/cli/dns.md +53 -0
  117. package/docs/cli/docs.md +63 -0
  118. package/docs/cli/doctor.md +254 -0
  119. package/docs/cli/flows.md +52 -0
  120. package/docs/cli/gateway.md +572 -0
  121. package/docs/cli/health.md +43 -0
  122. package/docs/cli/hooks.md +345 -0
  123. package/docs/cli/index.md +406 -0
  124. package/docs/cli/infer.md +364 -0
  125. package/docs/cli/logs.md +68 -0
  126. package/docs/cli/mcp.md +851 -0
  127. package/docs/cli/memory.md +183 -0
  128. package/docs/cli/message.md +317 -0
  129. package/docs/cli/migrate.md +334 -0
  130. package/docs/cli/models.md +239 -0
  131. package/docs/cli/node.md +178 -0
  132. package/docs/cli/nodes.md +76 -0
  133. package/docs/cli/onboard.md +251 -0
  134. package/docs/cli/pairing.md +77 -0
  135. package/docs/cli/path.md +511 -0
  136. package/docs/cli/plugins.md +480 -0
  137. package/docs/cli/policy.md +929 -0
  138. package/docs/cli/proxy.md +89 -0
  139. package/docs/cli/qr.md +56 -0
  140. package/docs/cli/reset.md +39 -0
  141. package/docs/cli/sandbox.md +208 -0
  142. package/docs/cli/secrets.md +202 -0
  143. package/docs/cli/security.md +135 -0
  144. package/docs/cli/sessions.md +178 -0
  145. package/docs/cli/setup.md +60 -0
  146. package/docs/cli/skills.md +156 -0
  147. package/docs/cli/status.md +45 -0
  148. package/docs/cli/system.md +89 -0
  149. package/docs/cli/tasks.md +111 -0
  150. package/docs/cli/transcripts.md +151 -0
  151. package/docs/cli/tui.md +92 -0
  152. package/docs/cli/uninstall.md +45 -0
  153. package/docs/cli/update.md +283 -0
  154. package/docs/cli/voicecall.md +204 -0
  155. package/docs/cli/webhooks.md +117 -0
  156. package/docs/cli/wiki.md +256 -0
  157. package/docs/cli/workboard.md +228 -0
  158. package/docs/concepts/active-memory.md +856 -0
  159. package/docs/concepts/agent-loop.md +185 -0
  160. package/docs/concepts/agent-runtimes.md +276 -0
  161. package/docs/concepts/agent-workspace.md +230 -0
  162. package/docs/concepts/agent.md +142 -0
  163. package/docs/concepts/architecture.md +154 -0
  164. package/docs/concepts/channel-docking.md +145 -0
  165. package/docs/concepts/commitments.md +150 -0
  166. package/docs/concepts/compaction.md +203 -0
  167. package/docs/concepts/context-engine.md +347 -0
  168. package/docs/concepts/context.md +199 -0
  169. package/docs/concepts/delegate-architecture.md +319 -0
  170. package/docs/concepts/dreaming.md +279 -0
  171. package/docs/concepts/experimental-features.md +111 -0
  172. package/docs/concepts/features.md +91 -0
  173. package/docs/concepts/mantis-slack-desktop-runbook.md +231 -0
  174. package/docs/concepts/mantis.md +744 -0
  175. package/docs/concepts/markdown-formatting.md +139 -0
  176. package/docs/concepts/memory-builtin.md +151 -0
  177. package/docs/concepts/memory-honcho.md +144 -0
  178. package/docs/concepts/memory-qmd.md +277 -0
  179. package/docs/concepts/memory-search.md +175 -0
  180. package/docs/concepts/memory.md +299 -0
  181. package/docs/concepts/message-lifecycle-refactor.md +1126 -0
  182. package/docs/concepts/messages.md +216 -0
  183. package/docs/concepts/model-failover.md +405 -0
  184. package/docs/concepts/model-providers.md +719 -0
  185. package/docs/concepts/models.md +371 -0
  186. package/docs/concepts/multi-agent.md +625 -0
  187. package/docs/concepts/oauth.md +218 -0
  188. package/docs/concepts/parallel-specialist-lanes.md +127 -0
  189. package/docs/concepts/personal-agent-benchmark-pack.md +74 -0
  190. package/docs/concepts/presence.md +117 -0
  191. package/docs/concepts/progress-drafts.md +406 -0
  192. package/docs/concepts/qa-e2e-automation.md +979 -0
  193. package/docs/concepts/qa-matrix.md +139 -0
  194. package/docs/concepts/queue-steering.md +90 -0
  195. package/docs/concepts/queue.md +136 -0
  196. package/docs/concepts/retry.md +86 -0
  197. package/docs/concepts/session-pruning.md +104 -0
  198. package/docs/concepts/session-tool.md +201 -0
  199. package/docs/concepts/session.md +164 -0
  200. package/docs/concepts/soul.md +116 -0
  201. package/docs/concepts/streaming.md +258 -0
  202. package/docs/concepts/system-prompt.md +330 -0
  203. package/docs/concepts/timezone.md +47 -0
  204. package/docs/concepts/typebox.md +309 -0
  205. package/docs/concepts/typing-indicators.md +88 -0
  206. package/docs/concepts/usage-tracking.md +72 -0
  207. package/docs/date-time.md +126 -0
  208. package/docs/debug/node-issue.md +90 -0
  209. package/docs/diagnostics/flags.md +182 -0
  210. package/docs/docs.json +1885 -0
  211. package/docs/gateway/authentication.md +286 -0
  212. package/docs/gateway/background-process.md +147 -0
  213. package/docs/gateway/bonjour.md +303 -0
  214. package/docs/gateway/bridge-protocol.md +97 -0
  215. package/docs/gateway/cli-backends.md +463 -0
  216. package/docs/gateway/config-agents.md +1525 -0
  217. package/docs/gateway/config-channels.md +942 -0
  218. package/docs/gateway/config-tools.md +806 -0
  219. package/docs/gateway/configuration-examples.md +706 -0
  220. package/docs/gateway/configuration-reference.md +1449 -0
  221. package/docs/gateway/configuration.md +748 -0
  222. package/docs/gateway/diagnostics.md +213 -0
  223. package/docs/gateway/discovery.md +154 -0
  224. package/docs/gateway/doctor.md +576 -0
  225. package/docs/gateway/external-apps.md +86 -0
  226. package/docs/gateway/gateway-lock.md +37 -0
  227. package/docs/gateway/health.md +73 -0
  228. package/docs/gateway/heartbeat.md +498 -0
  229. package/docs/gateway/index.md +385 -0
  230. package/docs/gateway/local-model-services.md +205 -0
  231. package/docs/gateway/local-models.md +355 -0
  232. package/docs/gateway/logging.md +149 -0
  233. package/docs/gateway/multiple-gateways.md +178 -0
  234. package/docs/gateway/network-model.md +15 -0
  235. package/docs/gateway/openai-http-api.md +379 -0
  236. package/docs/gateway/openresponses-http-api.md +349 -0
  237. package/docs/gateway/openshell.md +316 -0
  238. package/docs/gateway/opentelemetry.md +440 -0
  239. package/docs/gateway/operator-scopes.md +119 -0
  240. package/docs/gateway/pairing.md +207 -0
  241. package/docs/gateway/prometheus.md +249 -0
  242. package/docs/gateway/protocol.md +839 -0
  243. package/docs/gateway/remote-gateway-readme.md +169 -0
  244. package/docs/gateway/remote.md +280 -0
  245. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +148 -0
  246. package/docs/gateway/sandboxing.md +546 -0
  247. package/docs/gateway/secrets-plan-contract.md +159 -0
  248. package/docs/gateway/secrets.md +805 -0
  249. package/docs/gateway/security/audit-checks.md +127 -0
  250. package/docs/gateway/security/exposure-runbook.md +212 -0
  251. package/docs/gateway/security/index.md +1344 -0
  252. package/docs/gateway/security/secure-file-operations.md +76 -0
  253. package/docs/gateway/security/shrinkwrap.md +111 -0
  254. package/docs/gateway/tailscale.md +180 -0
  255. package/docs/gateway/tools-invoke-http-api.md +175 -0
  256. package/docs/gateway/troubleshooting.md +881 -0
  257. package/docs/gateway/trusted-proxy-auth.md +483 -0
  258. package/docs/help/debugging.md +341 -0
  259. package/docs/help/environment.md +240 -0
  260. package/docs/help/faq-first-run.md +872 -0
  261. package/docs/help/faq-models.md +557 -0
  262. package/docs/help/faq.md +2115 -0
  263. package/docs/help/index.md +39 -0
  264. package/docs/help/scripts.md +56 -0
  265. package/docs/help/testing-live.md +592 -0
  266. package/docs/help/testing-updates-plugins.md +299 -0
  267. package/docs/help/testing.md +977 -0
  268. package/docs/help/troubleshooting.md +500 -0
  269. package/docs/index.md +196 -0
  270. package/docs/install/ansible.md +233 -0
  271. package/docs/install/azure.md +315 -0
  272. package/docs/install/bun.md +59 -0
  273. package/docs/install/clawdock.md +112 -0
  274. package/docs/install/development-channels.md +148 -0
  275. package/docs/install/digitalocean.md +174 -0
  276. package/docs/install/docker-vm-runtime.md +154 -0
  277. package/docs/install/docker.md +564 -0
  278. package/docs/install/exe-dev.md +201 -0
  279. package/docs/install/fly.md +524 -0
  280. package/docs/install/gcp.md +418 -0
  281. package/docs/install/hetzner.md +285 -0
  282. package/docs/install/hostinger.md +98 -0
  283. package/docs/install/index.md +236 -0
  284. package/docs/install/installer.md +447 -0
  285. package/docs/install/kubernetes.md +196 -0
  286. package/docs/install/macos-vm.md +281 -0
  287. package/docs/install/migrating-claude.md +165 -0
  288. package/docs/install/migrating-hermes.md +178 -0
  289. package/docs/install/migrating.md +137 -0
  290. package/docs/install/nix.md +112 -0
  291. package/docs/install/node.md +142 -0
  292. package/docs/install/northflank.mdx +44 -0
  293. package/docs/install/oracle.md +218 -0
  294. package/docs/install/podman.md +216 -0
  295. package/docs/install/railway.mdx +92 -0
  296. package/docs/install/raspberry-pi.md +234 -0
  297. package/docs/install/render.mdx +167 -0
  298. package/docs/install/uninstall.md +140 -0
  299. package/docs/install/updating.md +284 -0
  300. package/docs/install/upstash.md +96 -0
  301. package/docs/logging.md +322 -0
  302. package/docs/maturity-scores.yaml +5361 -0
  303. package/docs/nav-tabs-underline.js +104 -0
  304. package/docs/network.md +72 -0
  305. package/docs/nodes/audio.md +216 -0
  306. package/docs/nodes/camera.md +166 -0
  307. package/docs/nodes/images.md +77 -0
  308. package/docs/nodes/index.md +444 -0
  309. package/docs/nodes/location-command.md +102 -0
  310. package/docs/nodes/media-understanding.md +495 -0
  311. package/docs/nodes/talk.md +160 -0
  312. package/docs/nodes/troubleshooting.md +123 -0
  313. package/docs/nodes/voicewake.md +93 -0
  314. package/docs/openclaw-agent-runtime.md +82 -0
  315. package/docs/perplexity.md +11 -0
  316. package/docs/plan/codex-context-engine-harness.md +624 -0
  317. package/docs/plan/ui-channels.md +284 -0
  318. package/docs/platforms/android.md +286 -0
  319. package/docs/platforms/digitalocean.md +12 -0
  320. package/docs/platforms/easyrunner.md +109 -0
  321. package/docs/platforms/index.md +65 -0
  322. package/docs/platforms/ios.md +287 -0
  323. package/docs/platforms/linux.md +141 -0
  324. package/docs/platforms/mac/bundled-gateway.md +79 -0
  325. package/docs/platforms/mac/canvas.md +128 -0
  326. package/docs/platforms/mac/child-process.md +72 -0
  327. package/docs/platforms/mac/dev-setup.md +112 -0
  328. package/docs/platforms/mac/health.md +39 -0
  329. package/docs/platforms/mac/icon.md +36 -0
  330. package/docs/platforms/mac/logging.md +62 -0
  331. package/docs/platforms/mac/menu-bar.md +93 -0
  332. package/docs/platforms/mac/peekaboo.md +96 -0
  333. package/docs/platforms/mac/permissions.md +73 -0
  334. package/docs/platforms/mac/remote.md +123 -0
  335. package/docs/platforms/mac/signing.md +52 -0
  336. package/docs/platforms/mac/skills.md +45 -0
  337. package/docs/platforms/mac/voice-overlay.md +66 -0
  338. package/docs/platforms/mac/voicewake.md +79 -0
  339. package/docs/platforms/mac/webchat.md +54 -0
  340. package/docs/platforms/mac/xpc.md +66 -0
  341. package/docs/platforms/macos.md +228 -0
  342. package/docs/platforms/oracle.md +12 -0
  343. package/docs/platforms/raspberry-pi.md +13 -0
  344. package/docs/platforms/windows.md +304 -0
  345. package/docs/plugins/adding-capabilities.md +146 -0
  346. package/docs/plugins/admin-http-rpc.md +216 -0
  347. package/docs/plugins/agent-tools.md +13 -0
  348. package/docs/plugins/architecture-internals.md +1203 -0
  349. package/docs/plugins/architecture.md +483 -0
  350. package/docs/plugins/building-extensions.md +13 -0
  351. package/docs/plugins/building-plugins.md +343 -0
  352. package/docs/plugins/bundles.md +310 -0
  353. package/docs/plugins/cli-backend-plugins.md +328 -0
  354. package/docs/plugins/codex-computer-use.md +297 -0
  355. package/docs/plugins/codex-harness-reference.md +480 -0
  356. package/docs/plugins/codex-harness-runtime.md +268 -0
  357. package/docs/plugins/codex-harness.md +800 -0
  358. package/docs/plugins/codex-native-plugins.md +280 -0
  359. package/docs/plugins/community.md +77 -0
  360. package/docs/plugins/compatibility.md +198 -0
  361. package/docs/plugins/copilot.md +355 -0
  362. package/docs/plugins/dependency-resolution.md +176 -0
  363. package/docs/plugins/google-meet.md +1737 -0
  364. package/docs/plugins/hooks.md +525 -0
  365. package/docs/plugins/install-overrides.md +80 -0
  366. package/docs/plugins/llama-cpp.md +58 -0
  367. package/docs/plugins/manage-plugins.md +214 -0
  368. package/docs/plugins/manifest.md +1468 -0
  369. package/docs/plugins/memory-lancedb.md +385 -0
  370. package/docs/plugins/memory-wiki.md +529 -0
  371. package/docs/plugins/message-presentation.md +487 -0
  372. package/docs/plugins/oc-path.md +166 -0
  373. package/docs/plugins/plugin-inventory.md +318 -0
  374. package/docs/plugins/plugin-permission-requests.md +193 -0
  375. package/docs/plugins/reference/acpx.md +23 -0
  376. package/docs/plugins/reference/admin-http-rpc.md +23 -0
  377. package/docs/plugins/reference/alibaba.md +23 -0
  378. package/docs/plugins/reference/amazon-bedrock-mantle.md +23 -0
  379. package/docs/plugins/reference/amazon-bedrock.md +23 -0
  380. package/docs/plugins/reference/anthropic-vertex.md +29 -0
  381. package/docs/plugins/reference/anthropic.md +23 -0
  382. package/docs/plugins/reference/arcee.md +23 -0
  383. package/docs/plugins/reference/azure-speech.md +23 -0
  384. package/docs/plugins/reference/bonjour.md +19 -0
  385. package/docs/plugins/reference/brave.md +23 -0
  386. package/docs/plugins/reference/browser.md +23 -0
  387. package/docs/plugins/reference/byteplus.md +19 -0
  388. package/docs/plugins/reference/canvas.md +19 -0
  389. package/docs/plugins/reference/cerebras.md +23 -0
  390. package/docs/plugins/reference/chutes.md +23 -0
  391. package/docs/plugins/reference/clickclack.md +23 -0
  392. package/docs/plugins/reference/cloudflare-ai-gateway.md +23 -0
  393. package/docs/plugins/reference/codex-supervisor.md +27 -0
  394. package/docs/plugins/reference/codex.md +23 -0
  395. package/docs/plugins/reference/comfy.md +23 -0
  396. package/docs/plugins/reference/copilot-proxy.md +19 -0
  397. package/docs/plugins/reference/copilot.md +23 -0
  398. package/docs/plugins/reference/deepgram.md +23 -0
  399. package/docs/plugins/reference/deepinfra.md +23 -0
  400. package/docs/plugins/reference/deepseek.md +23 -0
  401. package/docs/plugins/reference/diagnostics-otel.md +19 -0
  402. package/docs/plugins/reference/diagnostics-prometheus.md +19 -0
  403. package/docs/plugins/reference/diffs-language-pack.md +31 -0
  404. package/docs/plugins/reference/diffs.md +19 -0
  405. package/docs/plugins/reference/discord.md +23 -0
  406. package/docs/plugins/reference/document-extract.md +23 -0
  407. package/docs/plugins/reference/duckduckgo.md +23 -0
  408. package/docs/plugins/reference/elevenlabs.md +23 -0
  409. package/docs/plugins/reference/exa.md +23 -0
  410. package/docs/plugins/reference/fal.md +23 -0
  411. package/docs/plugins/reference/feishu.md +23 -0
  412. package/docs/plugins/reference/file-transfer.md +19 -0
  413. package/docs/plugins/reference/firecrawl.md +23 -0
  414. package/docs/plugins/reference/fireworks.md +23 -0
  415. package/docs/plugins/reference/github-copilot.md +23 -0
  416. package/docs/plugins/reference/gmi.md +23 -0
  417. package/docs/plugins/reference/google-meet.md +23 -0
  418. package/docs/plugins/reference/google.md +23 -0
  419. package/docs/plugins/reference/googlechat.md +23 -0
  420. package/docs/plugins/reference/gradium.md +23 -0
  421. package/docs/plugins/reference/groq.md +23 -0
  422. package/docs/plugins/reference/huggingface.md +23 -0
  423. package/docs/plugins/reference/imessage.md +23 -0
  424. package/docs/plugins/reference/inworld.md +23 -0
  425. package/docs/plugins/reference/irc.md +23 -0
  426. package/docs/plugins/reference/kilocode.md +23 -0
  427. package/docs/plugins/reference/kimi.md +23 -0
  428. package/docs/plugins/reference/line.md +23 -0
  429. package/docs/plugins/reference/litellm.md +23 -0
  430. package/docs/plugins/reference/llama-cpp.md +23 -0
  431. package/docs/plugins/reference/llm-task.md +19 -0
  432. package/docs/plugins/reference/lmstudio.md +23 -0
  433. package/docs/plugins/reference/lobster.md +19 -0
  434. package/docs/plugins/reference/matrix.md +23 -0
  435. package/docs/plugins/reference/mattermost.md +23 -0
  436. package/docs/plugins/reference/memory-core.md +19 -0
  437. package/docs/plugins/reference/memory-lancedb.md +23 -0
  438. package/docs/plugins/reference/memory-wiki.md +23 -0
  439. package/docs/plugins/reference/microsoft-foundry.md +113 -0
  440. package/docs/plugins/reference/microsoft.md +19 -0
  441. package/docs/plugins/reference/migrate-claude.md +19 -0
  442. package/docs/plugins/reference/migrate-hermes.md +19 -0
  443. package/docs/plugins/reference/minimax.md +23 -0
  444. package/docs/plugins/reference/mistral.md +23 -0
  445. package/docs/plugins/reference/moonshot.md +23 -0
  446. package/docs/plugins/reference/msteams.md +23 -0
  447. package/docs/plugins/reference/nextcloud-talk.md +23 -0
  448. package/docs/plugins/reference/nostr.md +23 -0
  449. package/docs/plugins/reference/novita.md +23 -0
  450. package/docs/plugins/reference/nvidia.md +23 -0
  451. package/docs/plugins/reference/oc-path.md +23 -0
  452. package/docs/plugins/reference/ollama.md +24 -0
  453. package/docs/plugins/reference/open-prose.md +19 -0
  454. package/docs/plugins/reference/openai.md +23 -0
  455. package/docs/plugins/reference/opencode-go.md +23 -0
  456. package/docs/plugins/reference/opencode.md +23 -0
  457. package/docs/plugins/reference/openrouter.md +23 -0
  458. package/docs/plugins/reference/openshell.md +19 -0
  459. package/docs/plugins/reference/perplexity.md +23 -0
  460. package/docs/plugins/reference/pixverse.md +23 -0
  461. package/docs/plugins/reference/policy.md +79 -0
  462. package/docs/plugins/reference/qa-channel.md +23 -0
  463. package/docs/plugins/reference/qa-lab.md +19 -0
  464. package/docs/plugins/reference/qa-matrix.md +19 -0
  465. package/docs/plugins/reference/qianfan.md +23 -0
  466. package/docs/plugins/reference/qqbot.md +23 -0
  467. package/docs/plugins/reference/qwen.md +24 -0
  468. package/docs/plugins/reference/runway.md +23 -0
  469. package/docs/plugins/reference/searxng.md +19 -0
  470. package/docs/plugins/reference/senseaudio.md +23 -0
  471. package/docs/plugins/reference/sglang.md +23 -0
  472. package/docs/plugins/reference/signal.md +23 -0
  473. package/docs/plugins/reference/slack.md +23 -0
  474. package/docs/plugins/reference/sms.md +23 -0
  475. package/docs/plugins/reference/stepfun.md +23 -0
  476. package/docs/plugins/reference/synology-chat.md +23 -0
  477. package/docs/plugins/reference/synthetic.md +23 -0
  478. package/docs/plugins/reference/tavily.md +23 -0
  479. package/docs/plugins/reference/telegram.md +23 -0
  480. package/docs/plugins/reference/tencent.md +23 -0
  481. package/docs/plugins/reference/tlon.md +23 -0
  482. package/docs/plugins/reference/together.md +23 -0
  483. package/docs/plugins/reference/tokenjuice.md +23 -0
  484. package/docs/plugins/reference/tts-local-cli.md +19 -0
  485. package/docs/plugins/reference/twitch.md +23 -0
  486. package/docs/plugins/reference/venice.md +23 -0
  487. package/docs/plugins/reference/vercel-ai-gateway.md +23 -0
  488. package/docs/plugins/reference/vllm.md +23 -0
  489. package/docs/plugins/reference/voice-call.md +23 -0
  490. package/docs/plugins/reference/volcengine.md +23 -0
  491. package/docs/plugins/reference/voyage.md +19 -0
  492. package/docs/plugins/reference/vydra.md +23 -0
  493. package/docs/plugins/reference/web-readability.md +19 -0
  494. package/docs/plugins/reference/webhooks.md +23 -0
  495. package/docs/plugins/reference/whatsapp.md +23 -0
  496. package/docs/plugins/reference/workboard.md +23 -0
  497. package/docs/plugins/reference/xai.md +23 -0
  498. package/docs/plugins/reference/xiaomi.md +23 -0
  499. package/docs/plugins/reference/zai.md +23 -0
  500. package/docs/plugins/reference/zalo.md +23 -0
  501. package/docs/plugins/reference/zalouser.md +24 -0
  502. package/docs/plugins/reference.md +19 -0
  503. package/docs/plugins/sdk-agent-harness.md +339 -0
  504. package/docs/plugins/sdk-channel-inbound.md +70 -0
  505. package/docs/plugins/sdk-channel-ingress.md +137 -0
  506. package/docs/plugins/sdk-channel-message.md +18 -0
  507. package/docs/plugins/sdk-channel-outbound.md +113 -0
  508. package/docs/plugins/sdk-channel-plugins.md +770 -0
  509. package/docs/plugins/sdk-channel-turn.md +9 -0
  510. package/docs/plugins/sdk-entrypoints.md +344 -0
  511. package/docs/plugins/sdk-migration.md +1011 -0
  512. package/docs/plugins/sdk-overview.md +525 -0
  513. package/docs/plugins/sdk-provider-plugins.md +1019 -0
  514. package/docs/plugins/sdk-runtime.md +683 -0
  515. package/docs/plugins/sdk-setup.md +550 -0
  516. package/docs/plugins/sdk-subpaths.md +401 -0
  517. package/docs/plugins/sdk-testing.md +403 -0
  518. package/docs/plugins/tool-plugins.md +411 -0
  519. package/docs/plugins/voice-call.md +942 -0
  520. package/docs/plugins/webhooks.md +192 -0
  521. package/docs/plugins/workboard.md +402 -0
  522. package/docs/plugins/zalouser.md +86 -0
  523. package/docs/prose.md +191 -0
  524. package/docs/providers/alibaba.md +158 -0
  525. package/docs/providers/anthropic.md +386 -0
  526. package/docs/providers/arcee.md +144 -0
  527. package/docs/providers/azure-speech.md +119 -0
  528. package/docs/providers/bedrock-mantle.md +224 -0
  529. package/docs/providers/bedrock.md +433 -0
  530. package/docs/providers/cerebras.md +130 -0
  531. package/docs/providers/chutes.md +153 -0
  532. package/docs/providers/claude-max-api-proxy.md +191 -0
  533. package/docs/providers/cloudflare-ai-gateway.md +119 -0
  534. package/docs/providers/comfy.md +362 -0
  535. package/docs/providers/deepgram.md +184 -0
  536. package/docs/providers/deepinfra.md +92 -0
  537. package/docs/providers/deepseek.md +146 -0
  538. package/docs/providers/ds4.md +309 -0
  539. package/docs/providers/elevenlabs.md +130 -0
  540. package/docs/providers/fal.md +240 -0
  541. package/docs/providers/fireworks.md +144 -0
  542. package/docs/providers/github-copilot.md +257 -0
  543. package/docs/providers/gmi.md +92 -0
  544. package/docs/providers/google.md +472 -0
  545. package/docs/providers/gradium.md +123 -0
  546. package/docs/providers/groq.md +171 -0
  547. package/docs/providers/huggingface.md +235 -0
  548. package/docs/providers/index.md +105 -0
  549. package/docs/providers/inferrs.md +272 -0
  550. package/docs/providers/inworld.md +120 -0
  551. package/docs/providers/kilocode.md +135 -0
  552. package/docs/providers/litellm.md +234 -0
  553. package/docs/providers/lmstudio.md +224 -0
  554. package/docs/providers/minimax.md +518 -0
  555. package/docs/providers/mistral.md +235 -0
  556. package/docs/providers/models.md +64 -0
  557. package/docs/providers/moonshot.md +413 -0
  558. package/docs/providers/novita.md +92 -0
  559. package/docs/providers/nvidia.md +208 -0
  560. package/docs/providers/ollama-cloud.md +115 -0
  561. package/docs/providers/ollama.md +1225 -0
  562. package/docs/providers/openai.md +1091 -0
  563. package/docs/providers/opencode-go.md +123 -0
  564. package/docs/providers/opencode.md +149 -0
  565. package/docs/providers/openrouter.md +390 -0
  566. package/docs/providers/perplexity-provider.md +123 -0
  567. package/docs/providers/pixverse.md +165 -0
  568. package/docs/providers/qianfan.md +132 -0
  569. package/docs/providers/qwen-oauth.md +115 -0
  570. package/docs/providers/qwen.md +364 -0
  571. package/docs/providers/runway.md +103 -0
  572. package/docs/providers/senseaudio.md +68 -0
  573. package/docs/providers/sglang.md +161 -0
  574. package/docs/providers/stepfun.md +229 -0
  575. package/docs/providers/synthetic.md +154 -0
  576. package/docs/providers/tencent.md +130 -0
  577. package/docs/providers/together.md +140 -0
  578. package/docs/providers/venice.md +312 -0
  579. package/docs/providers/vercel-ai-gateway.md +128 -0
  580. package/docs/providers/vllm.md +407 -0
  581. package/docs/providers/volcengine.md +199 -0
  582. package/docs/providers/vydra.md +180 -0
  583. package/docs/providers/xai.md +571 -0
  584. package/docs/providers/xiaomi.md +286 -0
  585. package/docs/providers/zai.md +224 -0
  586. package/docs/refactor/access.md +9 -0
  587. package/docs/refactor/acp.md +298 -0
  588. package/docs/refactor/canvas.md +131 -0
  589. package/docs/refactor/database-first.md +2263 -0
  590. package/docs/refactor/ingress-core.md +341 -0
  591. package/docs/reference/AGENTS.default.md +131 -0
  592. package/docs/reference/RELEASING.md +844 -0
  593. package/docs/reference/api-usage-costs.md +208 -0
  594. package/docs/reference/application-modernization-plan.md +208 -0
  595. package/docs/reference/code-mode.md +1058 -0
  596. package/docs/reference/credits.md +33 -0
  597. package/docs/reference/device-models.md +50 -0
  598. package/docs/reference/full-release-validation.md +206 -0
  599. package/docs/reference/memory-config.md +630 -0
  600. package/docs/reference/prompt-caching.md +358 -0
  601. package/docs/reference/release-performance-sweep.md +347 -0
  602. package/docs/reference/rich-output-protocol.md +93 -0
  603. package/docs/reference/rpc.md +43 -0
  604. package/docs/reference/secret-placeholder-conventions.md +33 -0
  605. package/docs/reference/secretref-credential-surface.md +163 -0
  606. package/docs/reference/secretref-user-supplied-credentials-matrix.json +691 -0
  607. package/docs/reference/session-management-compaction.md +474 -0
  608. package/docs/reference/templates/AGENTS.dev.md +90 -0
  609. package/docs/reference/templates/AGENTS.md +227 -0
  610. package/docs/reference/templates/BOOT.md +16 -0
  611. package/docs/reference/templates/BOOTSTRAP.md +66 -0
  612. package/docs/reference/templates/HEARTBEAT.md +24 -0
  613. package/docs/reference/templates/IDENTITY.dev.md +52 -0
  614. package/docs/reference/templates/IDENTITY.md +34 -0
  615. package/docs/reference/templates/SOUL.dev.md +82 -0
  616. package/docs/reference/templates/SOUL.md +49 -0
  617. package/docs/reference/templates/TOOLS.dev.md +29 -0
  618. package/docs/reference/templates/TOOLS.md +51 -0
  619. package/docs/reference/templates/USER.dev.md +23 -0
  620. package/docs/reference/templates/USER.md +28 -0
  621. package/docs/reference/test.md +248 -0
  622. package/docs/reference/token-use.md +246 -0
  623. package/docs/reference/transcript-hygiene.md +226 -0
  624. package/docs/reference/wizard.md +252 -0
  625. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +101 -0
  626. package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
  627. package/docs/security/formal-verification.md +170 -0
  628. package/docs/security/incident-response.md +59 -0
  629. package/docs/security/network-proxy.md +268 -0
  630. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +12 -0
  631. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  632. package/docs/specs/claw-supervisor.md +247 -0
  633. package/docs/start/bootstrapping.md +49 -0
  634. package/docs/start/docs-directory.md +69 -0
  635. package/docs/start/getting-started.md +152 -0
  636. package/docs/start/hubs.md +201 -0
  637. package/docs/start/lore.md +223 -0
  638. package/docs/start/onboarding-overview.md +72 -0
  639. package/docs/start/onboarding.md +98 -0
  640. package/docs/start/openclaw.md +246 -0
  641. package/docs/start/quickstart.md +25 -0
  642. package/docs/start/setup.md +178 -0
  643. package/docs/start/showcase.md +371 -0
  644. package/docs/start/wizard-cli-automation.md +232 -0
  645. package/docs/start/wizard-cli-reference.md +331 -0
  646. package/docs/start/wizard.md +142 -0
  647. package/docs/style.css +137 -0
  648. package/docs/tools/acp-agents-setup.md +356 -0
  649. package/docs/tools/acp-agents.md +865 -0
  650. package/docs/tools/agent-send.md +130 -0
  651. package/docs/tools/apply-patch.md +64 -0
  652. package/docs/tools/brave-search.md +139 -0
  653. package/docs/tools/browser-control.md +405 -0
  654. package/docs/tools/browser-linux-troubleshooting.md +173 -0
  655. package/docs/tools/browser-login.md +77 -0
  656. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +219 -0
  657. package/docs/tools/browser.md +866 -0
  658. package/docs/tools/btw.md +159 -0
  659. package/docs/tools/capability-cookbook.md +12 -0
  660. package/docs/tools/clawhub.md +5 -0
  661. package/docs/tools/code-execution.md +173 -0
  662. package/docs/tools/creating-skills.md +271 -0
  663. package/docs/tools/diffs.md +527 -0
  664. package/docs/tools/duckduckgo-search.md +109 -0
  665. package/docs/tools/elevated.md +128 -0
  666. package/docs/tools/exa-search.md +152 -0
  667. package/docs/tools/exec-approvals-advanced.md +457 -0
  668. package/docs/tools/exec-approvals.md +520 -0
  669. package/docs/tools/exec.md +294 -0
  670. package/docs/tools/firecrawl.md +155 -0
  671. package/docs/tools/gemini-search.md +114 -0
  672. package/docs/tools/goal.md +217 -0
  673. package/docs/tools/grok-search.md +129 -0
  674. package/docs/tools/image-generation.md +538 -0
  675. package/docs/tools/index.md +176 -0
  676. package/docs/tools/kimi-search.md +105 -0
  677. package/docs/tools/llm-task.md +137 -0
  678. package/docs/tools/lobster.md +365 -0
  679. package/docs/tools/loop-detection.md +154 -0
  680. package/docs/tools/media-overview.md +161 -0
  681. package/docs/tools/minimax-search.md +102 -0
  682. package/docs/tools/multi-agent-sandbox-tools.md +409 -0
  683. package/docs/tools/music-generation.md +372 -0
  684. package/docs/tools/ollama-search.md +153 -0
  685. package/docs/tools/parallel-search.md +154 -0
  686. package/docs/tools/pdf.md +213 -0
  687. package/docs/tools/permission-modes.md +111 -0
  688. package/docs/tools/perplexity-search.md +220 -0
  689. package/docs/tools/plugin.md +378 -0
  690. package/docs/tools/reactions.md +100 -0
  691. package/docs/tools/searxng-search.md +141 -0
  692. package/docs/tools/skill-workshop.md +283 -0
  693. package/docs/tools/skills-config.md +457 -0
  694. package/docs/tools/skills.md +591 -0
  695. package/docs/tools/slash-commands.md +518 -0
  696. package/docs/tools/steer.md +77 -0
  697. package/docs/tools/subagents.md +652 -0
  698. package/docs/tools/tavily.md +162 -0
  699. package/docs/tools/thinking.md +142 -0
  700. package/docs/tools/tokenjuice.md +84 -0
  701. package/docs/tools/tool-search.md +269 -0
  702. package/docs/tools/trajectory.md +229 -0
  703. package/docs/tools/tts.md +1013 -0
  704. package/docs/tools/video-generation.md +555 -0
  705. package/docs/tools/web-fetch.md +210 -0
  706. package/docs/tools/web.md +476 -0
  707. package/docs/tts.md +11 -0
  708. package/docs/vps.md +139 -0
  709. package/docs/web/control-ui.md +530 -0
  710. package/docs/web/dashboard.md +107 -0
  711. package/docs/web/index.md +133 -0
  712. package/docs/web/tui.md +258 -0
  713. package/docs/web/webchat.md +102 -0
  714. package/npm-shrinkwrap.json +3485 -0
  715. package/openclaw.mjs +661 -0
  716. package/package.json +1971 -0
  717. package/patches/.gitkeep +0 -0
  718. package/patches/@agentclientprotocol__claude-agent-acp@0.39.0.patch +40 -0
  719. package/pnpm-workspace.yaml +124 -0
  720. package/scripts/crabbox-wrapper.mjs +2470 -0
  721. package/scripts/lib/official-external-channel-catalog.json +570 -0
  722. package/scripts/lib/official-external-plugin-catalog.json +284 -0
  723. package/scripts/lib/official-external-provider-catalog.json +158 -0
  724. package/scripts/lib/package-dist-imports.mjs +174 -0
  725. package/scripts/npm-runner.mjs +95 -0
  726. package/scripts/postinstall-bundled-plugins.mjs +978 -0
  727. package/scripts/preinstall-package-manager-warning.mjs +74 -0
  728. package/scripts/prepare-git-hooks.mjs +73 -0
  729. package/scripts/windows-cmd-helpers.mjs +29 -0
  730. package/skills/1password/SKILL.md +70 -0
  731. package/skills/1password/references/cli-examples.md +29 -0
  732. package/skills/1password/references/get-started.md +17 -0
  733. package/skills/apple-notes/SKILL.md +77 -0
  734. package/skills/apple-reminders/SKILL.md +118 -0
  735. package/skills/bear-notes/SKILL.md +107 -0
  736. package/skills/blogwatcher/SKILL.md +69 -0
  737. package/skills/blucli/SKILL.md +47 -0
  738. package/skills/camsnap/SKILL.md +45 -0
  739. package/skills/canvas/SKILL.md +78 -0
  740. package/skills/clawhub/SKILL.md +77 -0
  741. package/skills/coding-agent/SKILL.md +143 -0
  742. package/skills/diagram-maker/SKILL.md +53 -0
  743. package/skills/diagram-maker/references/excalidraw-patterns.md +85 -0
  744. package/skills/diagram-maker/references/svg-template.md +112 -0
  745. package/skills/discord/SKILL.md +136 -0
  746. package/skills/eightctl/SKILL.md +50 -0
  747. package/skills/gemini/SKILL.md +47 -0
  748. package/skills/gh-issues/SKILL.md +213 -0
  749. package/skills/gifgrep/SKILL.md +85 -0
  750. package/skills/github/SKILL.md +84 -0
  751. package/skills/gog/SKILL.md +116 -0
  752. package/skills/goplaces/SKILL.md +52 -0
  753. package/skills/healthcheck/SKILL.md +105 -0
  754. package/skills/himalaya/SKILL.md +80 -0
  755. package/skills/himalaya/references/configuration.md +184 -0
  756. package/skills/himalaya/references/message-composition.md +199 -0
  757. package/skills/imsg/SKILL.md +122 -0
  758. package/skills/mcporter/SKILL.md +61 -0
  759. package/skills/meme-maker/SKILL.md +42 -0
  760. package/skills/meme-maker/references/templates.json +358 -0
  761. package/skills/meme-maker/scripts/meme.mjs +398 -0
  762. package/skills/model-usage/SKILL.md +71 -0
  763. package/skills/model-usage/references/codexbar-cli.md +33 -0
  764. package/skills/model-usage/scripts/model_usage.py +319 -0
  765. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  766. package/skills/nano-pdf/SKILL.md +38 -0
  767. package/skills/node-connect/SKILL.md +143 -0
  768. package/skills/node-inspect-debugger/SKILL.md +85 -0
  769. package/skills/notion/SKILL.md +150 -0
  770. package/skills/obsidian/SKILL.md +119 -0
  771. package/skills/openai-whisper/SKILL.md +38 -0
  772. package/skills/openai-whisper-api/SKILL.md +71 -0
  773. package/skills/openai-whisper-api/scripts/transcribe.sh +154 -0
  774. package/skills/openhue/SKILL.md +112 -0
  775. package/skills/oracle/SKILL.md +126 -0
  776. package/skills/ordercli/SKILL.md +78 -0
  777. package/skills/peekaboo/SKILL.md +198 -0
  778. package/skills/pyproject.toml +10 -0
  779. package/skills/python-debugpy/SKILL.md +73 -0
  780. package/skills/sag/SKILL.md +87 -0
  781. package/skills/session-logs/SKILL.md +151 -0
  782. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  783. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  784. package/skills/skill-creator/SKILL.md +78 -0
  785. package/skills/skill-creator/license.txt +202 -0
  786. package/skills/skill-creator/scripts/init_skill.py +378 -0
  787. package/skills/skill-creator/scripts/package_skill.py +144 -0
  788. package/skills/skill-creator/scripts/quick_validate.py +169 -0
  789. package/skills/skill-creator/scripts/test_package_skill.py +199 -0
  790. package/skills/skill-creator/scripts/test_quick_validate.py +116 -0
  791. package/skills/slack/SKILL.md +78 -0
  792. package/skills/songsee/SKILL.md +49 -0
  793. package/skills/sonoscli/SKILL.md +65 -0
  794. package/skills/spike/SKILL.md +51 -0
  795. package/skills/spotify-player/SKILL.md +64 -0
  796. package/skills/summarize/SKILL.md +87 -0
  797. package/skills/taskflow/SKILL.md +149 -0
  798. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  799. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  800. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  801. package/skills/things-mac/SKILL.md +86 -0
  802. package/skills/tmux/SKILL.md +91 -0
  803. package/skills/tmux/scripts/find-sessions.sh +112 -0
  804. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  805. package/skills/trello/SKILL.md +108 -0
  806. package/skills/video-frames/SKILL.md +46 -0
  807. package/skills/video-frames/scripts/frame.sh +81 -0
  808. package/skills/voice-call/SKILL.md +45 -0
  809. package/skills/wacli/SKILL.md +72 -0
  810. package/skills/weather/SKILL.md +87 -0
  811. package/skills/xurl/SKILL.md +120 -0
  812. package/src/agents/templates/HEARTBEAT.md +5 -0
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Docs UI enhancement that mirrors the active nav tab underline with a stable
3
+ * animated underline element.
4
+ */
5
+ (() => {
6
+ const NAV_TABS_SELECTOR = ".nav-tabs";
7
+ const ACTIVE_UNDERLINE_SELECTOR = ".nav-tabs-item > div.bg-primary";
8
+ const UNDERLINE_CLASS = "nav-tabs-underline";
9
+ const READY_CLASS = "nav-tabs-underline-ready";
10
+
11
+ let navTabs = null;
12
+ let navTabsObserver = null;
13
+ let lastX = null;
14
+ let lastWidth = null;
15
+
16
+ const ensureUnderline = (tabs) => {
17
+ let underline = tabs.querySelector(`.${UNDERLINE_CLASS}`);
18
+ if (!underline) {
19
+ underline = document.createElement("div");
20
+ underline.className = UNDERLINE_CLASS;
21
+ tabs.appendChild(underline);
22
+ }
23
+ return underline;
24
+ };
25
+
26
+ const getActiveTab = (tabs) => {
27
+ const activeUnderline = tabs.querySelector(ACTIVE_UNDERLINE_SELECTOR);
28
+ return activeUnderline?.closest(".nav-tabs-item") ?? null;
29
+ };
30
+
31
+ const updateUnderline = () => {
32
+ if (!navTabs) {
33
+ return;
34
+ }
35
+
36
+ ensureUnderline(navTabs);
37
+
38
+ const activeTab = getActiveTab(navTabs);
39
+ if (!activeTab) {
40
+ navTabs.classList.remove(READY_CLASS);
41
+ return;
42
+ }
43
+
44
+ const navRect = navTabs.getBoundingClientRect();
45
+ const tabRect = activeTab.getBoundingClientRect();
46
+ const left = tabRect.left - navRect.left;
47
+
48
+ navTabs.style.setProperty("--nav-tab-underline-x", `${left}px`);
49
+ navTabs.style.setProperty("--nav-tab-underline-width", `${tabRect.width}px`);
50
+ navTabs.classList.add(READY_CLASS);
51
+
52
+ lastX = left;
53
+ lastWidth = tabRect.width;
54
+ };
55
+
56
+ const scheduleUpdate = () => {
57
+ requestAnimationFrame(updateUnderline);
58
+ };
59
+
60
+ const setupNavTabsObserver = (tabs) => {
61
+ if (!tabs || tabs === navTabs) {
62
+ return;
63
+ }
64
+
65
+ navTabs = tabs;
66
+ ensureUnderline(navTabs);
67
+ if (lastX !== null && lastWidth !== null) {
68
+ navTabs.style.setProperty("--nav-tab-underline-x", `${lastX}px`);
69
+ navTabs.style.setProperty("--nav-tab-underline-width", `${lastWidth}px`);
70
+ navTabs.classList.add(READY_CLASS);
71
+ }
72
+ navTabsObserver?.disconnect();
73
+ navTabsObserver = new MutationObserver(scheduleUpdate);
74
+ navTabsObserver.observe(navTabs, {
75
+ subtree: true,
76
+ attributes: true,
77
+ attributeFilter: ["class"],
78
+ });
79
+
80
+ scheduleUpdate();
81
+ };
82
+
83
+ const setupObservers = () => {
84
+ const tabs = document.querySelector(NAV_TABS_SELECTOR);
85
+ if (tabs) {
86
+ setupNavTabsObserver(tabs);
87
+ }
88
+ };
89
+
90
+ const rootObserver = new MutationObserver(setupObservers);
91
+
92
+ if (document.readyState === "loading") {
93
+ document.addEventListener("DOMContentLoaded", () => {
94
+ setupObservers();
95
+ rootObserver.observe(document.body, { childList: true, subtree: true });
96
+ });
97
+ } else {
98
+ setupObservers();
99
+ rootObserver.observe(document.body, { childList: true, subtree: true });
100
+ }
101
+
102
+ window.addEventListener("resize", scheduleUpdate);
103
+ void document.fonts?.ready?.then(scheduleUpdate, () => {});
104
+ })();
@@ -0,0 +1,72 @@
1
+ ---
2
+ summary: "Network hub: gateway surfaces, pairing, discovery, and security"
3
+ read_when:
4
+ - You need the network architecture + security overview
5
+ - You are debugging local vs tailnet access or pairing
6
+ - You want the canonical list of networking docs
7
+ title: "Network"
8
+ ---
9
+
10
+ This hub links the core docs for how OpenClaw connects, pairs, and secures
11
+ devices across localhost, LAN, and tailnet.
12
+
13
+ ## Core model
14
+
15
+ Most operations flow through the Gateway (`openclaw gateway`), a single long-running process that owns channel connections and the WebSocket control plane.
16
+
17
+ - **Loopback first**: the Gateway WS defaults to `ws://127.0.0.1:18789`.
18
+ Non-loopback binds require a valid gateway auth path: shared-secret
19
+ token/password auth, or a correctly configured non-loopback
20
+ `trusted-proxy` deployment.
21
+ - **One Gateway per host** is recommended. For isolation, run multiple gateways with isolated profiles and ports ([Multiple Gateways](/gateway/multiple-gateways)).
22
+ - **Canvas host** is served on the same port as the Gateway (`/__openclaw__/canvas/`, `/__openclaw__/a2ui/`), protected by Gateway auth when bound beyond loopback.
23
+ - **Remote access** is typically SSH tunnel or Tailscale VPN ([Remote Access](/gateway/remote)).
24
+
25
+ Key references:
26
+
27
+ - [Gateway architecture](/concepts/architecture)
28
+ - [Gateway protocol](/gateway/protocol)
29
+ - [Gateway runbook](/gateway)
30
+ - [Web surfaces + bind modes](/web)
31
+
32
+ ## Pairing + identity
33
+
34
+ - [Pairing overview (DM + nodes)](/channels/pairing)
35
+ - [Gateway-owned node pairing](/gateway/pairing)
36
+ - [Devices CLI (pairing + token rotation)](/cli/devices)
37
+ - [Pairing CLI (DM approvals)](/cli/pairing)
38
+
39
+ Local trust:
40
+
41
+ - Direct local loopback connects can be auto-approved for pairing to keep
42
+ same-host UX smooth.
43
+ - OpenClaw also has a narrow backend/container-local self-connect path for
44
+ trusted shared-secret helper flows.
45
+ - Tailnet and LAN clients, including same-host tailnet binds, still require
46
+ explicit pairing approval.
47
+
48
+ ## Discovery + transports
49
+
50
+ - [Discovery and transports](/gateway/discovery)
51
+ - [Bonjour / mDNS](/gateway/bonjour)
52
+ - [Remote access (SSH)](/gateway/remote)
53
+ - [Tailscale](/gateway/tailscale)
54
+
55
+ ## Nodes + transports
56
+
57
+ - [Nodes overview](/nodes)
58
+ - [Bridge protocol (legacy nodes, historical)](/gateway/bridge-protocol)
59
+ - [Node runbook: iOS](/platforms/ios)
60
+ - [Node runbook: Android](/platforms/android)
61
+
62
+ ## Security
63
+
64
+ - [Security overview](/gateway/security)
65
+ - [Gateway config reference](/gateway/configuration)
66
+ - [Troubleshooting](/gateway/troubleshooting)
67
+ - [Doctor](/gateway/doctor)
68
+
69
+ ## Related
70
+
71
+ - [Gateway runbook](/gateway)
72
+ - [Remote access](/gateway/remote)
@@ -0,0 +1,216 @@
1
+ ---
2
+ summary: "How inbound audio/voice notes are downloaded, transcribed, and injected into replies"
3
+ read_when:
4
+ - Changing audio transcription or media handling
5
+ title: "Audio and voice notes"
6
+ ---
7
+
8
+ ## What works
9
+
10
+ - **Media understanding (audio)**: If audio understanding is enabled (or auto-detected), OpenClaw:
11
+ 1. Locates the first audio attachment (local path or URL) and downloads it if needed.
12
+ 2. Enforces `maxBytes` before sending to each model entry.
13
+ 3. Runs the first eligible model entry in order (provider or CLI).
14
+ 4. If it fails or skips (size/timeout), it tries the next entry.
15
+ 5. On success, it replaces `Body` with an `[Audio]` block and sets `{{Transcript}}`.
16
+ - **Command parsing**: When transcription succeeds, `CommandBody`/`RawBody` are set to the transcript so slash commands still work.
17
+ - **Verbose logging**: In `--verbose`, we log when transcription runs and when it replaces the body.
18
+
19
+ ## Auto-detection (default)
20
+
21
+ If you **don't configure models** and `tools.media.audio.enabled` is **not** set to `false`,
22
+ OpenClaw auto-detects in this order and stops at the first working option:
23
+
24
+ 1. **Active reply model** when its provider supports audio understanding.
25
+ 2. **Local CLIs** (if installed)
26
+ - `sherpa-onnx-offline` (requires `SHERPA_ONNX_MODEL_DIR` with encoder/decoder/joiner/tokens)
27
+ - `whisper-cli` (from `whisper-cpp`; uses `WHISPER_CPP_MODEL` or the bundled tiny model)
28
+ - `whisper` (Python CLI; downloads models automatically)
29
+ 3. **Provider auth**
30
+ - Configured `models.providers.*` entries that support audio are tried first
31
+ - Bundled fallback order: OpenAI → Groq → xAI → Deepgram → Google → SenseAudio → ElevenLabs → Mistral
32
+
33
+ As of 2026-05-22, Gemini CLI auto-detect is no longer supported for media understanding. Google is transitioning Gemini CLI users to Antigravity CLI; audio should use local or provider transcription, while image/video CLI fallback should move to Antigravity CLI (`agy`).
34
+
35
+ To disable auto-detection, set `tools.media.audio.enabled: false`.
36
+ To customize, set `tools.media.audio.models`.
37
+ Note: Binary detection is best-effort across macOS/Linux/Windows; ensure the CLI is on `PATH` (we expand `~`), or set an explicit CLI model with a full command path.
38
+
39
+ ## Config examples
40
+
41
+ ### Provider + CLI fallback (OpenAI + Whisper CLI)
42
+
43
+ ```json5
44
+ {
45
+ tools: {
46
+ media: {
47
+ audio: {
48
+ enabled: true,
49
+ maxBytes: 20971520,
50
+ models: [
51
+ { provider: "openai", model: "gpt-4o-mini-transcribe" },
52
+ {
53
+ type: "cli",
54
+ command: "whisper",
55
+ args: ["--model", "base", "{{MediaPath}}"],
56
+ timeoutSeconds: 45,
57
+ },
58
+ ],
59
+ },
60
+ },
61
+ },
62
+ }
63
+ ```
64
+
65
+ ### Provider-only with scope gating
66
+
67
+ ```json5
68
+ {
69
+ tools: {
70
+ media: {
71
+ audio: {
72
+ enabled: true,
73
+ scope: {
74
+ default: "allow",
75
+ rules: [{ action: "deny", match: { chatType: "group" } }],
76
+ },
77
+ models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
78
+ },
79
+ },
80
+ },
81
+ }
82
+ ```
83
+
84
+ ### Provider-only (Deepgram)
85
+
86
+ ```json5
87
+ {
88
+ tools: {
89
+ media: {
90
+ audio: {
91
+ enabled: true,
92
+ models: [{ provider: "deepgram", model: "nova-3" }],
93
+ },
94
+ },
95
+ },
96
+ }
97
+ ```
98
+
99
+ ### Provider-only (Mistral Voxtral)
100
+
101
+ ```json5
102
+ {
103
+ tools: {
104
+ media: {
105
+ audio: {
106
+ enabled: true,
107
+ models: [{ provider: "mistral", model: "voxtral-mini-latest" }],
108
+ },
109
+ },
110
+ },
111
+ }
112
+ ```
113
+
114
+ ### Provider-only (SenseAudio)
115
+
116
+ ```json5
117
+ {
118
+ tools: {
119
+ media: {
120
+ audio: {
121
+ enabled: true,
122
+ models: [{ provider: "senseaudio", model: "senseaudio-asr-pro-1.5-260319" }],
123
+ },
124
+ },
125
+ },
126
+ }
127
+ ```
128
+
129
+ ### Echo transcript to chat (opt-in)
130
+
131
+ ```json5
132
+ {
133
+ tools: {
134
+ media: {
135
+ audio: {
136
+ enabled: true,
137
+ echoTranscript: true, // default is false
138
+ echoFormat: '📝 "{transcript}"', // optional, supports {transcript}
139
+ models: [{ provider: "openai", model: "gpt-4o-mini-transcribe" }],
140
+ },
141
+ },
142
+ },
143
+ }
144
+ ```
145
+
146
+ ## Notes and limits
147
+
148
+ - Provider auth follows the standard model auth order (auth profiles, env vars, `models.providers.*.apiKey`).
149
+ - Groq setup details: [Groq](/providers/groq).
150
+ - Deepgram picks up `DEEPGRAM_API_KEY` when `provider: "deepgram"` is used.
151
+ - Deepgram setup details: [Deepgram (audio transcription)](/providers/deepgram).
152
+ - Mistral setup details: [Mistral](/providers/mistral).
153
+ - SenseAudio picks up `SENSEAUDIO_API_KEY` when `provider: "senseaudio"` is used.
154
+ - SenseAudio setup details: [SenseAudio](/providers/senseaudio).
155
+ - Audio providers can override `baseUrl`, `headers`, and `providerOptions` via `tools.media.audio`.
156
+ - Default size cap is 20MB (`tools.media.audio.maxBytes`). Oversize audio is skipped for that model and the next entry is tried.
157
+ - Tiny/empty audio files below 1024 bytes are skipped before provider/CLI transcription.
158
+ - Default `maxChars` for audio is **unset** (full transcript). Set `tools.media.audio.maxChars` or per-entry `maxChars` to trim output.
159
+ - OpenAI auto default is `gpt-4o-mini-transcribe`; set `model: "gpt-4o-transcribe"` for higher accuracy.
160
+ - Use `tools.media.audio.attachments` to process multiple voice notes (`mode: "all"` + `maxAttachments`).
161
+ - Transcript is available to templates as `{{Transcript}}`.
162
+ - `tools.media.audio.echoTranscript` is off by default; enable it to send transcript confirmation back to the originating chat before agent processing.
163
+ - `tools.media.audio.echoFormat` customizes the echo text (placeholder: `{transcript}`).
164
+ - CLI stdout is capped (5MB); keep CLI output concise.
165
+ - CLI `args` should use `{{MediaPath}}` for the local audio file path. Run `openclaw doctor --fix` to migrate deprecated `{input}` placeholders from older `audio.transcription.command` configs.
166
+
167
+ ### Proxy environment support
168
+
169
+ Provider-based audio transcription honors standard outbound proxy env vars:
170
+
171
+ - `HTTPS_PROXY`
172
+ - `HTTP_PROXY`
173
+ - `ALL_PROXY`
174
+ - `https_proxy`
175
+ - `http_proxy`
176
+ - `all_proxy`
177
+
178
+ If no proxy env vars are set, direct egress is used. If proxy config is malformed, OpenClaw logs a warning and falls back to direct fetch.
179
+
180
+ ## Mention detection in groups
181
+
182
+ When `requireMention: true` is set for a group chat, OpenClaw now transcribes audio **before** checking for mentions. This allows voice notes to be processed even when they contain mentions.
183
+
184
+ **How it works:**
185
+
186
+ 1. If a voice message has no text body and the group requires mentions, OpenClaw performs a "preflight" transcription.
187
+ 2. The transcript is checked for mention patterns (e.g., `@BotName`, emoji triggers).
188
+ 3. If a mention is found, the message proceeds through the full reply pipeline.
189
+ 4. The transcript is used for mention detection so voice notes can pass the mention gate.
190
+
191
+ **Fallback behavior:**
192
+
193
+ - If transcription fails during preflight (timeout, API error, etc.), the message is processed based on text-only mention detection.
194
+ - This ensures that mixed messages (text + audio) are never incorrectly dropped.
195
+
196
+ **Opt-out per Telegram group/topic:**
197
+
198
+ - Set `channels.telegram.groups.<chatId>.disableAudioPreflight: true` to skip preflight transcript mention checks for that group.
199
+ - Set `channels.telegram.groups.<chatId>.topics.<threadId>.disableAudioPreflight` to override per-topic (`true` to skip, `false` to force-enable).
200
+ - Default is `false` (preflight enabled when mention-gated conditions match).
201
+
202
+ **Example:** A user sends a voice note saying "Hey @Claude, what's the weather?" in a Telegram group with `requireMention: true`. The voice note is transcribed, the mention is detected, and the agent replies.
203
+
204
+ ## Gotchas
205
+
206
+ - Scope rules use first-match wins. `chatType` is normalized to `direct`, `group`, or `room`.
207
+ - Ensure your CLI exits 0 and prints plain text; JSON needs to be massaged via `jq -r .text`.
208
+ - For `parakeet-mlx`, if you pass `--output-dir`, OpenClaw reads `<output-dir>/<media-basename>.txt` when `--output-format` is `txt` (or omitted); non-`txt` output formats fall back to stdout parsing.
209
+ - Keep timeouts reasonable (`timeoutSeconds`, default 60s) to avoid blocking the reply queue.
210
+ - Preflight transcription only processes the **first** audio attachment for mention detection. Additional audio is processed during the main media understanding phase.
211
+
212
+ ## Related
213
+
214
+ - [Media understanding](/nodes/media-understanding)
215
+ - [Talk mode](/nodes/talk)
216
+ - [Voice wake](/nodes/voicewake)
@@ -0,0 +1,166 @@
1
+ ---
2
+ summary: "Camera capture (iOS/Android nodes + macOS app) for agent use: photos (jpg) and short video clips (mp4)"
3
+ read_when:
4
+ - Adding or modifying camera capture on iOS/Android nodes or macOS
5
+ - Extending agent-accessible MEDIA temp-file workflows
6
+ title: "Camera capture"
7
+ ---
8
+
9
+ OpenClaw supports **camera capture** for agent workflows:
10
+
11
+ - **iOS node** (paired via Gateway): capture a **photo** (`jpg`) or **short video clip** (`mp4`, with optional audio) via `node.invoke`.
12
+ - **Android node** (paired via Gateway): capture a **photo** (`jpg`) or **short video clip** (`mp4`, with optional audio) via `node.invoke`.
13
+ - **macOS app** (node via Gateway): capture a **photo** (`jpg`) or **short video clip** (`mp4`, with optional audio) via `node.invoke`.
14
+
15
+ All camera access is gated behind **user-controlled settings**.
16
+
17
+ ## iOS node
18
+
19
+ ### User setting (default on)
20
+
21
+ - iOS Settings tab → **Camera** → **Allow Camera** (`camera.enabled`)
22
+ - Default: **on** (missing key is treated as enabled).
23
+ - When off: `camera.*` commands return `CAMERA_DISABLED`.
24
+
25
+ ### Commands (via Gateway `node.invoke`)
26
+
27
+ - `camera.list`
28
+ - Response payload:
29
+ - `devices`: array of `{ id, name, position, deviceType }`
30
+
31
+ - `camera.snap`
32
+ - Params:
33
+ - `facing`: `front|back` (default: `front`)
34
+ - `maxWidth`: number (optional; default `1600` on the iOS node)
35
+ - `quality`: `0..1` (optional; default `0.9`)
36
+ - `format`: currently `jpg`
37
+ - `delayMs`: number (optional; default `0`)
38
+ - `deviceId`: string (optional; from `camera.list`)
39
+ - Response payload:
40
+ - `format: "jpg"`
41
+ - `base64: "<...>"`
42
+ - `width`, `height`
43
+ - Payload guard: photos are recompressed to keep the base64 payload under 5 MB.
44
+
45
+ - `camera.clip`
46
+ - Params:
47
+ - `facing`: `front|back` (default: `front`)
48
+ - `durationMs`: number (default `3000`, clamped to a max of `60000`)
49
+ - `includeAudio`: boolean (default `true`)
50
+ - `format`: currently `mp4`
51
+ - `deviceId`: string (optional; from `camera.list`)
52
+ - Response payload:
53
+ - `format: "mp4"`
54
+ - `base64: "<...>"`
55
+ - `durationMs`
56
+ - `hasAudio`
57
+
58
+ ### Foreground requirement
59
+
60
+ Like `canvas.*`, the iOS node only allows `camera.*` commands in the **foreground**. Background invocations return `NODE_BACKGROUND_UNAVAILABLE`.
61
+
62
+ ### CLI helper
63
+
64
+ The easiest way to get media files is via the CLI helper, which writes decoded media to a temp file and prints the saved path.
65
+
66
+ Examples:
67
+
68
+ ```bash
69
+ openclaw nodes camera snap --node <id> # default: both front + back (2 MEDIA lines)
70
+ openclaw nodes camera snap --node <id> --facing front
71
+ openclaw nodes camera clip --node <id> --duration 3000
72
+ openclaw nodes camera clip --node <id> --no-audio
73
+ ```
74
+
75
+ Notes:
76
+
77
+ - `nodes camera snap` defaults to **both** facings to give the agent both views.
78
+ - Output files are temporary (in the OS temp directory) unless you build your own wrapper.
79
+
80
+ ## Android node
81
+
82
+ ### Android user setting (default on)
83
+
84
+ - Android Settings sheet → **Camera** → **Allow Camera** (`camera.enabled`)
85
+ - Default: **on** (missing key is treated as enabled).
86
+ - When off: `camera.*` commands return `CAMERA_DISABLED`.
87
+
88
+ ### Permissions
89
+
90
+ - Android requires runtime permissions:
91
+ - `CAMERA` for both `camera.snap` and `camera.clip`.
92
+ - `RECORD_AUDIO` for `camera.clip` when `includeAudio=true`.
93
+
94
+ If permissions are missing, the app will prompt when possible; if denied, `camera.*` requests fail with a
95
+ `*_PERMISSION_REQUIRED` error.
96
+
97
+ ### Android foreground requirement
98
+
99
+ Like `canvas.*`, the Android node only allows `camera.*` commands in the **foreground**. Background invocations return `NODE_BACKGROUND_UNAVAILABLE`.
100
+
101
+ ### Android commands (via Gateway `node.invoke`)
102
+
103
+ - `camera.list`
104
+ - Response payload:
105
+ - `devices`: array of `{ id, name, position, deviceType }`
106
+
107
+ ### Payload guard
108
+
109
+ Photos are recompressed to keep the base64 payload under 5 MB.
110
+
111
+ ## macOS app
112
+
113
+ ### User setting (default off)
114
+
115
+ The macOS companion app exposes a checkbox:
116
+
117
+ - **Settings → General → Allow Camera** (`openclaw.cameraEnabled`)
118
+ - Default: **off**
119
+ - When off: camera requests return "Camera disabled by user".
120
+
121
+ ### CLI helper (node invoke)
122
+
123
+ Use the main `openclaw` CLI to invoke camera commands on the macOS node.
124
+
125
+ Examples:
126
+
127
+ ```bash
128
+ openclaw nodes camera list --node <id> # list camera ids
129
+ openclaw nodes camera snap --node <id> # prints saved path
130
+ openclaw nodes camera snap --node <id> --max-width 1280
131
+ openclaw nodes camera snap --node <id> --delay-ms 2000
132
+ openclaw nodes camera snap --node <id> --device-id <id>
133
+ openclaw nodes camera clip --node <id> --duration 10s # prints saved path
134
+ openclaw nodes camera clip --node <id> --duration-ms 3000 # prints saved path (legacy flag)
135
+ openclaw nodes camera clip --node <id> --device-id <id>
136
+ openclaw nodes camera clip --node <id> --no-audio
137
+ ```
138
+
139
+ Notes:
140
+
141
+ - `openclaw nodes camera snap` defaults to `maxWidth=1600` unless overridden.
142
+ - On macOS, `camera.snap` waits `delayMs` (default 2000ms) after warm-up/exposure settle before capturing.
143
+ - Photo payloads are recompressed to keep base64 under 5 MB.
144
+
145
+ ## Safety + practical limits
146
+
147
+ - Camera and microphone access trigger the usual OS permission prompts (and require usage strings in Info.plist).
148
+ - Video clips are capped (currently `<= 60s`) to avoid oversized node payloads (base64 overhead + message limits).
149
+
150
+ ## macOS screen video (OS-level)
151
+
152
+ For _screen_ video (not camera), use the macOS companion:
153
+
154
+ ```bash
155
+ openclaw nodes screen record --node <id> --duration 10s --fps 15 # prints saved path
156
+ ```
157
+
158
+ Notes:
159
+
160
+ - Requires macOS **Screen Recording** permission (TCC).
161
+
162
+ ## Related
163
+
164
+ - [Image and media support](/nodes/images)
165
+ - [Media understanding](/nodes/media-understanding)
166
+ - [Location command](/nodes/location-command)
@@ -0,0 +1,77 @@
1
+ ---
2
+ summary: "Image and media handling rules for send, gateway, and agent replies"
3
+ read_when:
4
+ - Modifying media pipeline or attachments
5
+ title: "Image and media support"
6
+ ---
7
+
8
+ The WhatsApp channel runs via **Baileys Web**. This document captures the current media handling rules for send, gateway, and agent replies.
9
+
10
+ ## Goals
11
+
12
+ - Send media with optional captions via `openclaw message send --media`.
13
+ - Allow auto-replies from the web inbox to include media alongside text.
14
+ - Keep per-type limits sane and predictable.
15
+
16
+ ## CLI Surface
17
+
18
+ - `openclaw message send --media <path-or-url> [--message <caption>]`
19
+ - `--media` optional; caption can be empty for media-only sends.
20
+ - `--dry-run` prints the resolved payload; `--json` emits `{ channel, to, messageId, mediaUrl, caption }`.
21
+
22
+ ## WhatsApp Web channel behavior
23
+
24
+ - Input: local file path **or** HTTP(S) URL.
25
+ - Flow: load into a Buffer, detect media kind, and build the correct payload:
26
+ - **Images:** resize & recompress to JPEG (max side 2048px) targeting `channels.whatsapp.mediaMaxMb` (default: 50 MB).
27
+ - **Audio/Voice/Video:** pass-through up to 16 MB; audio is sent as a voice note (`ptt: true`).
28
+ - **Documents:** anything else, up to 100 MB, with filename preserved when available.
29
+ - WhatsApp GIF-style playback: send an MP4 with `gifPlayback: true` (CLI: `--gif-playback`) so mobile clients loop inline.
30
+ - MIME detection prefers magic bytes, then headers, then file extension.
31
+ - Caption comes from `--message` or `reply.text`; empty caption is allowed.
32
+ - Logging: non-verbose shows `↩️`/`✅`; verbose includes size and source path/URL.
33
+
34
+ ## Auto-Reply Pipeline
35
+
36
+ - `getReplyFromConfig` returns `{ text?, mediaUrl?, mediaUrls? }`.
37
+ - When media is present, the web sender resolves local paths or URLs using the same pipeline as `openclaw message send`.
38
+ - Multiple media entries are sent sequentially if provided.
39
+
40
+ ## Inbound Media To Commands
41
+
42
+ - When inbound web messages include media, OpenClaw downloads to a temp file and exposes templating variables:
43
+ - `{{MediaUrl}}` pseudo-URL for the inbound media.
44
+ - `{{MediaPath}}` local temp path written before running the command.
45
+ - When a per-session Docker sandbox is enabled, inbound media is copied into the sandbox workspace and `MediaPath`/`MediaUrl` are rewritten to a relative path like `media/inbound/<filename>`.
46
+ - Media understanding (if configured via `tools.media.*` or shared `tools.media.models`) runs before templating and can insert `[Image]`, `[Audio]`, and `[Video]` blocks into `Body`.
47
+ - Audio sets `{{Transcript}}` and uses the transcript for command parsing so slash commands still work.
48
+ - Video and image descriptions preserve any caption text for command parsing.
49
+ - If the active primary image model already supports vision natively, OpenClaw skips the `[Image]` summary block and passes the original image to the model instead.
50
+ - By default only the first matching image/audio/video attachment is processed; set `tools.media.<cap>.attachments` to process multiple attachments.
51
+
52
+ ## Limits and errors
53
+
54
+ **Outbound send caps (WhatsApp web send)**
55
+
56
+ - Images: up to `channels.whatsapp.mediaMaxMb` (default: 50 MB) after recompression.
57
+ - Audio/voice/video: 16 MB cap; documents: 100 MB cap.
58
+ - Oversize or unreadable media → clear error in logs and the reply is skipped.
59
+
60
+ **Media understanding caps (transcription/description)**
61
+
62
+ - Image default: 10 MB (`tools.media.image.maxBytes`).
63
+ - Audio default: 20 MB (`tools.media.audio.maxBytes`).
64
+ - Video default: 50 MB (`tools.media.video.maxBytes`).
65
+ - Oversize media skips understanding, but replies still go through with the original body.
66
+
67
+ ## Notes for Tests
68
+
69
+ - Cover send + reply flows for image/audio/document cases.
70
+ - Validate recompression for images (size bound) and voice-note flag for audio.
71
+ - Ensure multi-media replies fan out as sequential sends.
72
+
73
+ ## Related
74
+
75
+ - [Camera capture](/nodes/camera)
76
+ - [Media understanding](/nodes/media-understanding)
77
+ - [Audio and voice notes](/nodes/audio)