clawdbot 2026.1.4

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 (503) hide show
  1. package/CHANGELOG.md +115 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +297 -0
  5. package/dist/agents/agent-paths.js +17 -0
  6. package/dist/agents/bash-process-registry.js +126 -0
  7. package/dist/agents/bash-tools.js +837 -0
  8. package/dist/agents/clawdbot-tools.js +30 -0
  9. package/dist/agents/clawdis-tools.js +27 -0
  10. package/dist/agents/context.js +34 -0
  11. package/dist/agents/defaults.js +6 -0
  12. package/dist/agents/model-auth.js +112 -0
  13. package/dist/agents/model-catalog.js +55 -0
  14. package/dist/agents/model-fallback.js +191 -0
  15. package/dist/agents/model-scan.js +263 -0
  16. package/dist/agents/model-selection.js +116 -0
  17. package/dist/agents/models-config.js +49 -0
  18. package/dist/agents/pi-embedded-helpers.js +74 -0
  19. package/dist/agents/pi-embedded-runner.js +407 -0
  20. package/dist/agents/pi-embedded-subscribe.js +568 -0
  21. package/dist/agents/pi-embedded-utils.js +20 -0
  22. package/dist/agents/pi-embedded.js +1 -0
  23. package/dist/agents/pi-oauth.js +88 -0
  24. package/dist/agents/pi-tools.js +433 -0
  25. package/dist/agents/sandbox-paths.js +68 -0
  26. package/dist/agents/sandbox.js +644 -0
  27. package/dist/agents/shell-utils.js +53 -0
  28. package/dist/agents/skills-install.js +244 -0
  29. package/dist/agents/skills-status.js +157 -0
  30. package/dist/agents/skills.js +470 -0
  31. package/dist/agents/steerable-agent-loop.js +338 -0
  32. package/dist/agents/steerable-provider-transport.js +48 -0
  33. package/dist/agents/system-prompt.js +104 -0
  34. package/dist/agents/tool-display.js +162 -0
  35. package/dist/agents/tool-images.js +138 -0
  36. package/dist/agents/tools/browser-tool.js +339 -0
  37. package/dist/agents/tools/canvas-tool.js +193 -0
  38. package/dist/agents/tools/common.js +88 -0
  39. package/dist/agents/tools/cron-tool.js +124 -0
  40. package/dist/agents/tools/discord-actions-guild.js +186 -0
  41. package/dist/agents/tools/discord-actions-messaging.js +285 -0
  42. package/dist/agents/tools/discord-actions-moderation.js +70 -0
  43. package/dist/agents/tools/discord-actions.js +56 -0
  44. package/dist/agents/tools/discord-schema.js +199 -0
  45. package/dist/agents/tools/discord-tool.js +16 -0
  46. package/dist/agents/tools/gateway-tool.js +46 -0
  47. package/dist/agents/tools/gateway.js +27 -0
  48. package/dist/agents/tools/image-tool.js +132 -0
  49. package/dist/agents/tools/nodes-tool.js +413 -0
  50. package/dist/agents/tools/nodes-utils.js +92 -0
  51. package/dist/agents/tools/sessions-helpers.js +88 -0
  52. package/dist/agents/tools/sessions-history-tool.js +53 -0
  53. package/dist/agents/tools/sessions-list-tool.js +143 -0
  54. package/dist/agents/tools/sessions-send-helpers.js +100 -0
  55. package/dist/agents/tools/sessions-send-tool.js +347 -0
  56. package/dist/agents/tools/slack-actions.js +129 -0
  57. package/dist/agents/tools/slack-schema.js +59 -0
  58. package/dist/agents/tools/slack-tool.js +16 -0
  59. package/dist/agents/usage.js +39 -0
  60. package/dist/agents/workspace.js +241 -0
  61. package/dist/auto-reply/chunk.js +76 -0
  62. package/dist/auto-reply/envelope.js +38 -0
  63. package/dist/auto-reply/group-activation.js +20 -0
  64. package/dist/auto-reply/heartbeat.js +57 -0
  65. package/dist/auto-reply/model.js +14 -0
  66. package/dist/auto-reply/reply/abort.js +14 -0
  67. package/dist/auto-reply/reply/agent-runner.js +371 -0
  68. package/dist/auto-reply/reply/block-streaming.js +34 -0
  69. package/dist/auto-reply/reply/body.js +29 -0
  70. package/dist/auto-reply/reply/commands.js +207 -0
  71. package/dist/auto-reply/reply/directive-handling.js +361 -0
  72. package/dist/auto-reply/reply/directives.js +47 -0
  73. package/dist/auto-reply/reply/followup-runner.js +149 -0
  74. package/dist/auto-reply/reply/groups.js +91 -0
  75. package/dist/auto-reply/reply/mentions.js +38 -0
  76. package/dist/auto-reply/reply/model-selection.js +114 -0
  77. package/dist/auto-reply/reply/queue.js +399 -0
  78. package/dist/auto-reply/reply/reply-tags.js +26 -0
  79. package/dist/auto-reply/reply/session-updates.js +87 -0
  80. package/dist/auto-reply/reply/session.js +160 -0
  81. package/dist/auto-reply/reply/typing.js +75 -0
  82. package/dist/auto-reply/reply.js +535 -0
  83. package/dist/auto-reply/send-policy.js +28 -0
  84. package/dist/auto-reply/status.js +158 -0
  85. package/dist/auto-reply/templating.js +9 -0
  86. package/dist/auto-reply/thinking.js +49 -0
  87. package/dist/auto-reply/tokens.js +2 -0
  88. package/dist/auto-reply/tool-meta.js +74 -0
  89. package/dist/auto-reply/transcription.js +57 -0
  90. package/dist/auto-reply/types.js +1 -0
  91. package/dist/browser/bridge-server.js +37 -0
  92. package/dist/browser/cdp.js +382 -0
  93. package/dist/browser/chrome.js +432 -0
  94. package/dist/browser/client-actions-core.js +67 -0
  95. package/dist/browser/client-actions-observe.js +24 -0
  96. package/dist/browser/client-actions-types.js +1 -0
  97. package/dist/browser/client-actions.js +3 -0
  98. package/dist/browser/client-fetch.js +43 -0
  99. package/dist/browser/client.js +105 -0
  100. package/dist/browser/config.js +140 -0
  101. package/dist/browser/constants.js +4 -0
  102. package/dist/browser/profiles-service.js +122 -0
  103. package/dist/browser/profiles.js +85 -0
  104. package/dist/browser/pw-ai.js +2 -0
  105. package/dist/browser/pw-session.js +144 -0
  106. package/dist/browser/pw-tools-core.js +363 -0
  107. package/dist/browser/routes/agent.js +535 -0
  108. package/dist/browser/routes/basic.js +155 -0
  109. package/dist/browser/routes/index.js +8 -0
  110. package/dist/browser/routes/tabs.js +105 -0
  111. package/dist/browser/routes/utils.js +62 -0
  112. package/dist/browser/screenshot.js +40 -0
  113. package/dist/browser/server-context.js +377 -0
  114. package/dist/browser/server.js +81 -0
  115. package/dist/browser/target-id.js +18 -0
  116. package/dist/browser/trash.js +21 -0
  117. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  118. package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
  119. package/dist/canvas-host/a2ui/index.html +246 -0
  120. package/dist/canvas-host/a2ui.js +187 -0
  121. package/dist/canvas-host/server.js +382 -0
  122. package/dist/cli/browser-cli-actions-input.js +459 -0
  123. package/dist/cli/browser-cli-actions-observe.js +56 -0
  124. package/dist/cli/browser-cli-examples.js +31 -0
  125. package/dist/cli/browser-cli-inspect.js +97 -0
  126. package/dist/cli/browser-cli-manage.js +286 -0
  127. package/dist/cli/browser-cli-shared.js +1 -0
  128. package/dist/cli/browser-cli.js +26 -0
  129. package/dist/cli/canvas-cli.js +416 -0
  130. package/dist/cli/cron-cli.js +454 -0
  131. package/dist/cli/deps.js +17 -0
  132. package/dist/cli/dns-cli.js +180 -0
  133. package/dist/cli/gateway-cli.js +489 -0
  134. package/dist/cli/gateway-rpc.js +20 -0
  135. package/dist/cli/hooks-cli.js +135 -0
  136. package/dist/cli/models-cli.js +248 -0
  137. package/dist/cli/nodes-camera.js +57 -0
  138. package/dist/cli/nodes-canvas.js +26 -0
  139. package/dist/cli/nodes-cli.js +946 -0
  140. package/dist/cli/nodes-screen.js +37 -0
  141. package/dist/cli/parse-duration.js +20 -0
  142. package/dist/cli/ports.js +97 -0
  143. package/dist/cli/program.js +406 -0
  144. package/dist/cli/prompt.js +19 -0
  145. package/dist/cli/tui-cli.js +35 -0
  146. package/dist/cli/wait.js +8 -0
  147. package/dist/commands/agent.js +645 -0
  148. package/dist/commands/antigravity-oauth.js +327 -0
  149. package/dist/commands/configure.js +480 -0
  150. package/dist/commands/doctor.js +484 -0
  151. package/dist/commands/health.js +108 -0
  152. package/dist/commands/models/aliases.js +64 -0
  153. package/dist/commands/models/fallbacks.js +99 -0
  154. package/dist/commands/models/image-fallbacks.js +99 -0
  155. package/dist/commands/models/list.js +323 -0
  156. package/dist/commands/models/scan.js +266 -0
  157. package/dist/commands/models/set-image.js +23 -0
  158. package/dist/commands/models/set.js +23 -0
  159. package/dist/commands/models/shared.js +72 -0
  160. package/dist/commands/models.js +7 -0
  161. package/dist/commands/onboard-auth.js +70 -0
  162. package/dist/commands/onboard-helpers.js +295 -0
  163. package/dist/commands/onboard-interactive.js +17 -0
  164. package/dist/commands/onboard-non-interactive.js +202 -0
  165. package/dist/commands/onboard-providers.js +634 -0
  166. package/dist/commands/onboard-remote.js +120 -0
  167. package/dist/commands/onboard-skills.js +148 -0
  168. package/dist/commands/onboard-types.js +1 -0
  169. package/dist/commands/onboard.js +12 -0
  170. package/dist/commands/send.js +124 -0
  171. package/dist/commands/sessions.js +212 -0
  172. package/dist/commands/setup.js +58 -0
  173. package/dist/commands/signal-install.js +135 -0
  174. package/dist/commands/status.js +207 -0
  175. package/dist/commands/update.js +16 -0
  176. package/dist/config/config.js +6 -0
  177. package/dist/config/defaults.js +61 -0
  178. package/dist/config/io.js +147 -0
  179. package/dist/config/legacy-migrate.js +13 -0
  180. package/dist/config/legacy.js +159 -0
  181. package/dist/config/paths.js +71 -0
  182. package/dist/config/schema.js +150 -0
  183. package/dist/config/sessions.js +282 -0
  184. package/dist/config/talk.js +31 -0
  185. package/dist/config/types.js +1 -0
  186. package/dist/config/validation.js +29 -0
  187. package/dist/config/zod-schema.js +831 -0
  188. package/dist/cron/isolated-agent.js +499 -0
  189. package/dist/cron/run-log.js +72 -0
  190. package/dist/cron/schedule.js +24 -0
  191. package/dist/cron/service.js +471 -0
  192. package/dist/cron/store.js +43 -0
  193. package/dist/cron/types.js +1 -0
  194. package/dist/discord/index.js +2 -0
  195. package/dist/discord/monitor.js +1188 -0
  196. package/dist/discord/probe.js +54 -0
  197. package/dist/discord/send.js +577 -0
  198. package/dist/discord/token.js +8 -0
  199. package/dist/gateway/auth.js +121 -0
  200. package/dist/gateway/call.js +94 -0
  201. package/dist/gateway/chat-attachments.js +41 -0
  202. package/dist/gateway/client.js +180 -0
  203. package/dist/gateway/config-reload.js +274 -0
  204. package/dist/gateway/control-ui.js +184 -0
  205. package/dist/gateway/hooks-mapping.js +282 -0
  206. package/dist/gateway/hooks.js +168 -0
  207. package/dist/gateway/net.js +29 -0
  208. package/dist/gateway/protocol/index.js +61 -0
  209. package/dist/gateway/protocol/schema.js +560 -0
  210. package/dist/gateway/server-bridge-subscriptions.js +93 -0
  211. package/dist/gateway/server-bridge.js +1013 -0
  212. package/dist/gateway/server-browser.js +12 -0
  213. package/dist/gateway/server-chat.js +159 -0
  214. package/dist/gateway/server-constants.js +8 -0
  215. package/dist/gateway/server-discovery.js +62 -0
  216. package/dist/gateway/server-http.js +165 -0
  217. package/dist/gateway/server-methods/agent-job.js +125 -0
  218. package/dist/gateway/server-methods/agent.js +250 -0
  219. package/dist/gateway/server-methods/chat.js +200 -0
  220. package/dist/gateway/server-methods/config.js +50 -0
  221. package/dist/gateway/server-methods/connect.js +6 -0
  222. package/dist/gateway/server-methods/cron.js +83 -0
  223. package/dist/gateway/server-methods/health.js +28 -0
  224. package/dist/gateway/server-methods/models.js +16 -0
  225. package/dist/gateway/server-methods/nodes.js +294 -0
  226. package/dist/gateway/server-methods/providers.js +217 -0
  227. package/dist/gateway/server-methods/send.js +166 -0
  228. package/dist/gateway/server-methods/sessions.js +305 -0
  229. package/dist/gateway/server-methods/skills.js +83 -0
  230. package/dist/gateway/server-methods/system.js +118 -0
  231. package/dist/gateway/server-methods/talk.js +22 -0
  232. package/dist/gateway/server-methods/types.js +1 -0
  233. package/dist/gateway/server-methods/voicewake.js +30 -0
  234. package/dist/gateway/server-methods/web.js +58 -0
  235. package/dist/gateway/server-methods/wizard.js +100 -0
  236. package/dist/gateway/server-methods.js +53 -0
  237. package/dist/gateway/server-providers.js +644 -0
  238. package/dist/gateway/server-shared.js +1 -0
  239. package/dist/gateway/server-utils.js +35 -0
  240. package/dist/gateway/server.js +1437 -0
  241. package/dist/gateway/session-utils.js +216 -0
  242. package/dist/gateway/ws-log.js +349 -0
  243. package/dist/gateway/ws-logging.js +8 -0
  244. package/dist/globals.js +41 -0
  245. package/dist/hooks/gmail-ops.js +236 -0
  246. package/dist/hooks/gmail-setup-utils.js +278 -0
  247. package/dist/hooks/gmail-watcher.js +175 -0
  248. package/dist/hooks/gmail.js +177 -0
  249. package/dist/index.js +50 -0
  250. package/dist/infra/agent-events.js +46 -0
  251. package/dist/infra/binaries.js +9 -0
  252. package/dist/infra/bonjour-discovery.js +163 -0
  253. package/dist/infra/bonjour.js +200 -0
  254. package/dist/infra/bridge/server.js +562 -0
  255. package/dist/infra/canvas-host-url.js +54 -0
  256. package/dist/infra/env.js +8 -0
  257. package/dist/infra/errors.js +28 -0
  258. package/dist/infra/gateway-lock.js +8 -0
  259. package/dist/infra/heartbeat-events.js +21 -0
  260. package/dist/infra/heartbeat-runner.js +453 -0
  261. package/dist/infra/heartbeat-wake.js +61 -0
  262. package/dist/infra/is-main.js +37 -0
  263. package/dist/infra/machine-name.js +40 -0
  264. package/dist/infra/node-pairing.js +211 -0
  265. package/dist/infra/pam.js +42 -0
  266. package/dist/infra/path-env.js +92 -0
  267. package/dist/infra/ports.js +87 -0
  268. package/dist/infra/provider-summary.js +80 -0
  269. package/dist/infra/restart.js +29 -0
  270. package/dist/infra/retry.js +16 -0
  271. package/dist/infra/runtime-guard.js +59 -0
  272. package/dist/infra/system-events.js +44 -0
  273. package/dist/infra/system-presence.js +216 -0
  274. package/dist/infra/tailnet.js +46 -0
  275. package/dist/infra/tailscale.js +149 -0
  276. package/dist/infra/voicewake.js +77 -0
  277. package/dist/infra/widearea-dns.js +123 -0
  278. package/dist/infra/ws.js +13 -0
  279. package/dist/logger.js +52 -0
  280. package/dist/logging.js +490 -0
  281. package/dist/macos/gateway-daemon.js +141 -0
  282. package/dist/macos/relay.js +46 -0
  283. package/dist/media/constants.js +33 -0
  284. package/dist/media/host.js +42 -0
  285. package/dist/media/image-ops.js +121 -0
  286. package/dist/media/mime.js +115 -0
  287. package/dist/media/parse.js +81 -0
  288. package/dist/media/server.js +64 -0
  289. package/dist/media/store.js +139 -0
  290. package/dist/process/command-queue.js +97 -0
  291. package/dist/process/exec.js +75 -0
  292. package/dist/protocol.schema.json +2918 -0
  293. package/dist/provider-web.js +8 -0
  294. package/dist/providers/web/index.js +2 -0
  295. package/dist/runtime.js +8 -0
  296. package/dist/telegram/bot.js +394 -0
  297. package/dist/telegram/download.js +34 -0
  298. package/dist/telegram/index.js +4 -0
  299. package/dist/telegram/monitor.js +47 -0
  300. package/dist/telegram/probe.js +63 -0
  301. package/dist/telegram/proxy.js +9 -0
  302. package/dist/telegram/send.js +138 -0
  303. package/dist/telegram/token.js +30 -0
  304. package/dist/telegram/webhook-set.js +12 -0
  305. package/dist/telegram/webhook.js +56 -0
  306. package/dist/utils.js +133 -0
  307. package/dist/version.js +18 -0
  308. package/dist/web/active-listener.js +7 -0
  309. package/dist/web/auto-reply.js +1203 -0
  310. package/dist/web/inbound.js +481 -0
  311. package/dist/web/login-qr.js +204 -0
  312. package/dist/web/login.js +59 -0
  313. package/dist/web/media.js +148 -0
  314. package/dist/web/outbound.js +67 -0
  315. package/dist/web/qr-image.js +97 -0
  316. package/dist/web/reconnect.js +60 -0
  317. package/dist/web/reply-heartbeat-wake.js +61 -0
  318. package/dist/web/session.js +346 -0
  319. package/docs/AGENTS.default.md +116 -0
  320. package/docs/CNAME +1 -0
  321. package/docs/RELEASING.md +64 -0
  322. package/docs/_config.yml +51 -0
  323. package/docs/_layouts/default.html +145 -0
  324. package/docs/agent-send.md +21 -0
  325. package/docs/agent.md +104 -0
  326. package/docs/android/connect.md +131 -0
  327. package/docs/architecture.md +89 -0
  328. package/docs/assets/markdown.css +130 -0
  329. package/docs/assets/pixel-lobster.svg +60 -0
  330. package/docs/assets/terminal.css +497 -0
  331. package/docs/assets/theme.js +55 -0
  332. package/docs/audio.md +50 -0
  333. package/docs/background-process.md +74 -0
  334. package/docs/bash.md +32 -0
  335. package/docs/bonjour.md +159 -0
  336. package/docs/browser.md +289 -0
  337. package/docs/camera.md +152 -0
  338. package/docs/clawd.md +199 -0
  339. package/docs/clawdbot-mac.md +104 -0
  340. package/docs/configuration.md +1177 -0
  341. package/docs/control-api.md +49 -0
  342. package/docs/control-ui.md +83 -0
  343. package/docs/cron.md +374 -0
  344. package/docs/dashboard.md +17 -0
  345. package/docs/device-models.md +46 -0
  346. package/docs/discord.md +293 -0
  347. package/docs/discovery.md +112 -0
  348. package/docs/docker.md +251 -0
  349. package/docs/docs.json +86 -0
  350. package/docs/doctor.md +47 -0
  351. package/docs/elevated.md +31 -0
  352. package/docs/faq.md +640 -0
  353. package/docs/gateway/pairing.md +109 -0
  354. package/docs/gateway-lock.md +28 -0
  355. package/docs/gateway.md +174 -0
  356. package/docs/gmail-pubsub.md +191 -0
  357. package/docs/grammy.md +27 -0
  358. package/docs/group-messages.md +71 -0
  359. package/docs/groups.md +78 -0
  360. package/docs/health.md +28 -0
  361. package/docs/heartbeat.md +64 -0
  362. package/docs/images.md +52 -0
  363. package/docs/imessage.md +63 -0
  364. package/docs/index.md +182 -0
  365. package/docs/ios/connect.md +177 -0
  366. package/docs/ios/spec.md +236 -0
  367. package/docs/location-command.md +95 -0
  368. package/docs/logging.md +99 -0
  369. package/docs/lore.md +131 -0
  370. package/docs/mac/bun.md +133 -0
  371. package/docs/mac/canvas.md +161 -0
  372. package/docs/mac/child-process.md +72 -0
  373. package/docs/mac/dev-setup.md +81 -0
  374. package/docs/mac/health.md +28 -0
  375. package/docs/mac/icon.md +26 -0
  376. package/docs/mac/logging.md +51 -0
  377. package/docs/mac/menu-bar.md +69 -0
  378. package/docs/mac/peekaboo.md +170 -0
  379. package/docs/mac/permissions.md +40 -0
  380. package/docs/mac/release.md +76 -0
  381. package/docs/mac/remote.md +57 -0
  382. package/docs/mac/signing.md +41 -0
  383. package/docs/mac/skills.md +27 -0
  384. package/docs/mac/voice-overlay.md +52 -0
  385. package/docs/mac/voicewake.md +56 -0
  386. package/docs/mac/webchat.md +27 -0
  387. package/docs/mac/xpc.md +40 -0
  388. package/docs/models.md +90 -0
  389. package/docs/nix.md +49 -0
  390. package/docs/nodes.md +157 -0
  391. package/docs/onboarding-config-protocol.md +29 -0
  392. package/docs/onboarding.md +185 -0
  393. package/docs/presence.md +133 -0
  394. package/docs/queue.md +78 -0
  395. package/docs/refactor/browser-control-simplification.md +58 -0
  396. package/docs/refactor/canvas-a2ui.md +93 -0
  397. package/docs/refactor/cli-unification.md +64 -0
  398. package/docs/refactor/gateway-client.md +31 -0
  399. package/docs/refactor/gateway.md +99 -0
  400. package/docs/refactor/new-arch.md +171 -0
  401. package/docs/refactor/tui.md +26 -0
  402. package/docs/refactor/web-gateway-troubleshooting.md +37 -0
  403. package/docs/refactor/webagent-session.md +46 -0
  404. package/docs/remote-gateway-readme.md +148 -0
  405. package/docs/remote.md +66 -0
  406. package/docs/research/memory.md +227 -0
  407. package/docs/rpc.md +35 -0
  408. package/docs/security.md +168 -0
  409. package/docs/session-tool.md +119 -0
  410. package/docs/session.md +84 -0
  411. package/docs/sessions.md +8 -0
  412. package/docs/setup.md +118 -0
  413. package/docs/signal.md +113 -0
  414. package/docs/skills-config.md +58 -0
  415. package/docs/skills.md +149 -0
  416. package/docs/slack.md +158 -0
  417. package/docs/surface.md +20 -0
  418. package/docs/tailscale.md +71 -0
  419. package/docs/talk.md +79 -0
  420. package/docs/telegram.md +90 -0
  421. package/docs/templates/AGENTS.md +126 -0
  422. package/docs/templates/BOOTSTRAP.md +53 -0
  423. package/docs/templates/IDENTITY.md +17 -0
  424. package/docs/templates/SOUL.md +41 -0
  425. package/docs/templates/TOOLS.md +41 -0
  426. package/docs/templates/USER.md +22 -0
  427. package/docs/test.md +35 -0
  428. package/docs/thinking.md +46 -0
  429. package/docs/tools.md +248 -0
  430. package/docs/troubleshooting.md +227 -0
  431. package/docs/tui.md +69 -0
  432. package/docs/typebox.md +42 -0
  433. package/docs/voicewake.md +61 -0
  434. package/docs/web.md +115 -0
  435. package/docs/webchat.md +34 -0
  436. package/docs/webhook.md +132 -0
  437. package/docs/whatsapp-clawd.jpg +0 -0
  438. package/docs/whatsapp.md +142 -0
  439. package/docs/wizard.md +158 -0
  440. package/package.json +178 -0
  441. package/skills/apple-notes/SKILL.md +50 -0
  442. package/skills/apple-reminders/SKILL.md +67 -0
  443. package/skills/bear-notes/SKILL.md +79 -0
  444. package/skills/bird/SKILL.md +25 -0
  445. package/skills/blogwatcher/SKILL.md +46 -0
  446. package/skills/blucli/SKILL.md +27 -0
  447. package/skills/brave-search/SKILL.md +30 -0
  448. package/skills/brave-search/scripts/content.mjs +53 -0
  449. package/skills/brave-search/scripts/search.mjs +79 -0
  450. package/skills/camsnap/SKILL.md +25 -0
  451. package/skills/clawdhub/SKILL.md +53 -0
  452. package/skills/coding-agent/SKILL.md +275 -0
  453. package/skills/discord/SKILL.md +369 -0
  454. package/skills/eightctl/SKILL.md +29 -0
  455. package/skills/food-order/SKILL.md +41 -0
  456. package/skills/gemini/SKILL.md +23 -0
  457. package/skills/gifgrep/SKILL.md +47 -0
  458. package/skills/github/SKILL.md +47 -0
  459. package/skills/gog/SKILL.md +36 -0
  460. package/skills/goplaces/SKILL.md +30 -0
  461. package/skills/imsg/SKILL.md +25 -0
  462. package/skills/local-places/SERVER_README.md +101 -0
  463. package/skills/local-places/SKILL.md +91 -0
  464. package/skills/local-places/pyproject.toml +27 -0
  465. package/skills/local-places/src/local_places/__init__.py +2 -0
  466. package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  467. package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  468. package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  469. package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  470. package/skills/local-places/src/local_places/google_places.py +314 -0
  471. package/skills/local-places/src/local_places/main.py +65 -0
  472. package/skills/local-places/src/local_places/schemas.py +107 -0
  473. package/skills/mcporter/SKILL.md +38 -0
  474. package/skills/nano-banana-pro/SKILL.md +29 -0
  475. package/skills/nano-banana-pro/scripts/generate_image.py +167 -0
  476. package/skills/nano-pdf/SKILL.md +20 -0
  477. package/skills/notion/SKILL.md +156 -0
  478. package/skills/obsidian/SKILL.md +55 -0
  479. package/skills/openai-image-gen/SKILL.md +31 -0
  480. package/skills/openai-image-gen/scripts/gen.py +173 -0
  481. package/skills/openai-whisper/SKILL.md +19 -0
  482. package/skills/openai-whisper-api/SKILL.md +43 -0
  483. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  484. package/skills/openhue/SKILL.md +30 -0
  485. package/skills/oracle/SKILL.md +105 -0
  486. package/skills/ordercli/SKILL.md +47 -0
  487. package/skills/peekaboo/SKILL.md +153 -0
  488. package/skills/qmd/SKILL.md +26 -0
  489. package/skills/sag/SKILL.md +62 -0
  490. package/skills/slack/SKILL.md +143 -0
  491. package/skills/songsee/SKILL.md +29 -0
  492. package/skills/sonoscli/SKILL.md +26 -0
  493. package/skills/spotify-player/SKILL.md +34 -0
  494. package/skills/summarize/SKILL.md +49 -0
  495. package/skills/things-mac/SKILL.md +61 -0
  496. package/skills/tmux/SKILL.md +121 -0
  497. package/skills/tmux/scripts/find-sessions.sh +112 -0
  498. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  499. package/skills/trello/SKILL.md +84 -0
  500. package/skills/video-frames/SKILL.md +29 -0
  501. package/skills/video-frames/scripts/frame.sh +81 -0
  502. package/skills/wacli/SKILL.md +42 -0
  503. package/skills/weather/SKILL.md +49 -0
@@ -0,0 +1,42 @@
1
+ ---
2
+ summary: "TypeBox schemas as the single source of truth for the gateway protocol"
3
+ read_when:
4
+ - Updating protocol schemas or codegen
5
+ ---
6
+ # TypeBox as Protocol Source of Truth
7
+
8
+ Last updated: 2025-12-09
9
+
10
+ We use TypeBox schemas in `src/gateway/protocol/schema.ts` as the single source of truth for the Gateway control plane (connect/req/res/event frames and payloads). All derived artifacts should be generated from these schemas, not edited by hand.
11
+
12
+ ## Current pipeline
13
+
14
+ - **TypeBox → JSON Schema**: `pnpm protocol:gen` writes `dist/protocol.schema.json` (draft-07) and runs AJV in the server tests.
15
+ - **TypeBox → Swift**: `pnpm protocol:gen:swift` generates `apps/macos/Sources/ClawdbotProtocol/GatewayModels.swift`.
16
+
17
+ ## Problem
18
+
19
+ - We want strong typing in Swift, including a sealed `GatewayFrame` enum with a discriminator and a forward-compatible `unknown` case.
20
+
21
+ ## Preferred plan (next step)
22
+
23
+ - Add a small, custom Swift generator driven directly by the TypeBox schemas:
24
+ - Emit a sealed `enum GatewayFrame: Codable { case req(RequestFrame), res(ResponseFrame), event(EventFrame) }`.
25
+ - Emit strongly typed payload structs/enums (`ConnectParams`, `HelloOk`, `RequestFrame`, `ResponseFrame`, `EventFrame`, `PresenceEntry`, `Snapshot`, `StateVersion`, `ErrorShape`, `AgentEvent`, `TickEvent`, `ShutdownEvent`, `SendParams`, `AgentParams`, `ErrorCode`, `PROTOCOL_VERSION`).
26
+ - Custom `init(from:)` / `encode(to:)` enforces the `type` discriminator and can include an `unknown` case for forward compatibility.
27
+ - Wire a new script (e.g., `pnpm protocol:gen:swift`) into `protocol:check` so CI fails if the generated Swift is stale.
28
+
29
+ Why this path:
30
+ - Single source of truth stays TypeBox; no new IDL to maintain.
31
+ - Predictable, strongly typed Swift (no optional soup).
32
+ - Small deterministic codegen (~150–200 LOC script) we control.
33
+
34
+ ## Alternative (if we want off-the-shelf codegen)
35
+
36
+ - Wrap the existing JSON Schema into an OpenAPI 3.1 doc (auto-generated) and use **swift-openapi-generator** or **openapi-generator swift5**. More moving parts, but also yields enums with discriminator support. Keep this as a fallback if we don’t want a custom emitter.
37
+
38
+ ## Action items
39
+
40
+ - Implement `protocol:gen:swift` that reads the TypeBox schemas and emits the sealed Swift enum + payload structs.
41
+ - Update `protocol:check` to include the Swift generator output in the diff check.
42
+ - Remove quicktype output once the custom generator is in place (or keep it for docs only).
@@ -0,0 +1,61 @@
1
+ ---
2
+ summary: "Global voice wake words (Gateway-owned) and how they sync across nodes"
3
+ read_when:
4
+ - Changing voice wake words behavior or defaults
5
+ - Adding new node platforms that need wake word sync
6
+ ---
7
+ # Voice Wake (Global Wake Words)
8
+
9
+ Clawdbot treats **wake words as a single global list** owned by the **Gateway**.
10
+
11
+ - There are **no per-node custom wake words**.
12
+ - **Any node/app UI may edit** the list; changes are persisted by the Gateway and broadcast to everyone.
13
+ - Each device still keeps its own **Voice Wake enabled/disabled** toggle (local UX + permissions differ).
14
+
15
+ ## Storage (Gateway host)
16
+
17
+ Wake words are stored on the gateway machine at:
18
+
19
+ - `~/.clawdbot/settings/voicewake.json`
20
+
21
+ Shape:
22
+
23
+ ```json
24
+ { "triggers": ["clawd", "claude", "computer"], "updatedAtMs": 1730000000000 }
25
+ ```
26
+
27
+ ## Protocol
28
+
29
+ ### Methods
30
+
31
+ - `voicewake.get` → `{ triggers: string[] }`
32
+ - `voicewake.set` with params `{ triggers: string[] }` → `{ triggers: string[] }`
33
+
34
+ Notes:
35
+ - Triggers are normalized (trimmed, empties dropped). Empty lists fall back to defaults.
36
+ - Limits are enforced for safety (count/length caps).
37
+
38
+ ### Events
39
+
40
+ - `voicewake.changed` payload `{ triggers: string[] }`
41
+
42
+ Who receives it:
43
+ - All WebSocket clients (macOS app, WebChat, etc.)
44
+ - All connected bridge nodes (iOS/Android), and also on node connect as an initial “current state” push.
45
+
46
+ ## Client behavior
47
+
48
+ ### macOS app
49
+
50
+ - Uses the global list to gate `VoiceWakeRuntime` triggers.
51
+ - Editing “Trigger words” in Voice Wake settings calls `voicewake.set` and then relies on the broadcast to keep other clients in sync.
52
+
53
+ ### iOS node
54
+
55
+ - Uses the global list for `VoiceWakeManager` trigger detection.
56
+ - Editing Wake Words in Settings calls `voicewake.set` (over the bridge) and also keeps local wake-word detection responsive.
57
+
58
+ ### Android node
59
+
60
+ - Exposes a Wake Words editor in Settings.
61
+ - Calls `voicewake.set` over the bridge so edits sync everywhere.
package/docs/web.md ADDED
@@ -0,0 +1,115 @@
1
+ ---
2
+ summary: "Gateway web surfaces: Control UI, bind modes, and security"
3
+ read_when:
4
+ - You want to access the Gateway over Tailscale
5
+ - You want the browser Control UI and config editing
6
+ ---
7
+ # Web (Gateway)
8
+
9
+ The Gateway serves a small **browser Control UI** (Vite + Lit) from the same port as the Gateway WebSocket:
10
+
11
+ - default: `http://<host>:18789/`
12
+ - optional prefix: set `gateway.controlUi.basePath` (e.g. `/clawdbot`)
13
+
14
+ The UI talks directly to the Gateway WS and supports:
15
+ - Chat (`chat.history`, `chat.send`, `chat.abort`)
16
+ - Chat tool cards (agent tool events)
17
+ - Connections (provider status, WhatsApp QR, Telegram config)
18
+ - Instances (`system-presence`)
19
+ - Sessions (`sessions.list`, `sessions.patch`)
20
+ - Cron (`cron.*`)
21
+ - Skills (`skills.status`, `skills.update`, `skills.install`)
22
+ - Nodes (`node.list`, `node.describe`, `node.invoke`)
23
+ - Config (`config.get`, `config.set`) for `~/.clawdbot/clawdbot.json`
24
+ - Debug (status/health/models snapshots + manual calls)
25
+
26
+ ## Webhooks
27
+
28
+ When `hooks.enabled=true`, the Gateway also exposes a small webhook surface on the same HTTP server.
29
+ See `docs/configuration.md` → `hooks` for auth + payloads.
30
+
31
+ ## Config (default-on)
32
+
33
+ The Control UI is **enabled by default** when assets are present (`dist/control-ui`).
34
+ You can control it via config:
35
+
36
+ ```json5
37
+ {
38
+ gateway: {
39
+ controlUi: { enabled: true, basePath: "/clawdbot" } // basePath optional
40
+ }
41
+ }
42
+ ```
43
+
44
+ ## Tailscale access
45
+
46
+ ### Integrated Serve (recommended)
47
+
48
+ Keep the Gateway on loopback and let Tailscale Serve proxy it:
49
+
50
+ ```json5
51
+ {
52
+ gateway: {
53
+ bind: "loopback",
54
+ tailscale: { mode: "serve" }
55
+ }
56
+ }
57
+ ```
58
+
59
+ Then start the gateway:
60
+
61
+ ```bash
62
+ clawdbot gateway
63
+ ```
64
+
65
+ Open:
66
+ - `https://<magicdns>/` (or your configured `gateway.controlUi.basePath`)
67
+
68
+ ### Tailnet bind + token (legacy)
69
+
70
+ ```json5
71
+ {
72
+ gateway: {
73
+ bind: "tailnet",
74
+ controlUi: { enabled: true }
75
+ }
76
+ }
77
+ ```
78
+
79
+ Then start the gateway (token required for non-loopback binds):
80
+
81
+ ```bash
82
+ export CLAWDBOT_GATEWAY_TOKEN="…your token…"
83
+ clawdbot gateway
84
+ ```
85
+
86
+ Open:
87
+ - `http://<tailscale-ip>:18789/` (or your configured `gateway.controlUi.basePath`)
88
+
89
+ ### Public internet (Funnel)
90
+
91
+ ```json5
92
+ {
93
+ gateway: {
94
+ bind: "loopback",
95
+ tailscale: { mode: "funnel" },
96
+ auth: { mode: "password" } // or CLAWDBOT_GATEWAY_PASSWORD
97
+ }
98
+ }
99
+ ```
100
+
101
+ ## Security notes
102
+
103
+ - Binding the Gateway to a non-loopback address **requires** auth (`CLAWDBOT_GATEWAY_TOKEN` or `gateway.auth`).
104
+ - The UI sends `connect.params.auth.token` or `connect.params.auth.password`.
105
+ - Use `gateway.auth.allowTailscale: false` to require explicit credentials even in Serve mode.
106
+ - `gateway.tailscale.mode: "funnel"` requires `gateway.auth.mode: "password"` (shared password).
107
+
108
+ ## Building the UI
109
+
110
+ The Gateway serves static files from `dist/control-ui`. Build them with:
111
+
112
+ ```bash
113
+ pnpm ui:install
114
+ pnpm ui:build
115
+ ```
@@ -0,0 +1,34 @@
1
+ ---
2
+ summary: "Loopback WebChat static host and Gateway WS usage for chat UI"
3
+ read_when:
4
+ - Debugging or configuring WebChat access
5
+ ---
6
+ # WebChat (SwiftUI + Gateway WS)
7
+
8
+ Updated: 2025-12-17
9
+
10
+ ## What it is
11
+ - A native SwiftUI chat UI (macOS app / iOS) that talks directly to the Gateway WebSocket.
12
+ - No embedded browser/WKWebView and no bundled static WebChat HTTP server.
13
+ - Data plane is entirely Gateway WS: methods `chat.history`, `chat.send`, `chat.abort`; events `chat`, `agent`, `presence`, `tick`, `health`.
14
+
15
+ ## How it connects
16
+ - The UI performs Gateway WS `connect`, then calls `chat.history` for bootstrap and `chat.send` for sends; it listens to `chat/agent/presence/tick/health` events.
17
+ - History comes from the Gateway via `chat.history` (no local session file watching).
18
+ - If Gateway WS is unavailable, the UI surfaces the error and blocks send.
19
+
20
+ ## Remote use
21
+ - In remote mode, the macOS app forwards the Gateway WebSocket control port via SSH and uses that for the SwiftUI chat UI.
22
+ - You generally should not need to manage tunnels manually; see `RemoteTunnelManager` in the app.
23
+
24
+ ## Config
25
+ - WebChat does not have a separate HTTP port/config anymore.
26
+ - Gateway WS is configured via the app’s gateway endpoint settings (`GatewayEndpointStore`) or `clawdbot gateway --port` when running locally.
27
+
28
+ ## Failure handling
29
+ - UI errors when the Gateway handshake fails or the WS drops.
30
+ - No fallback transport; the Gateway WS is required.
31
+
32
+ ## Dev notes
33
+ - macOS glue: `apps/macos/Sources/Clawdbot/WebChatSwiftUI.swift` + `apps/macos/Sources/Clawdbot/WebChatManager.swift`.
34
+ - Remote tunnel helper: `apps/macos/Sources/Clawdbot/RemotePortTunnel.swift`.
@@ -0,0 +1,132 @@
1
+ ---
2
+ summary: "Webhook ingress for wake and isolated agent runs"
3
+ read_when:
4
+ - Adding or changing webhook endpoints
5
+ - Wiring external systems into Clawdbot
6
+ ---
7
+
8
+ # Webhooks
9
+
10
+ Gateway can expose a small HTTP webhook surface for external triggers.
11
+
12
+ ## Enable
13
+
14
+ ```json5
15
+ {
16
+ hooks: {
17
+ enabled: true,
18
+ token: "shared-secret",
19
+ path: "/hooks"
20
+ }
21
+ }
22
+ ```
23
+
24
+ Notes:
25
+ - `hooks.token` is required when `hooks.enabled=true`.
26
+ - `hooks.path` defaults to `/hooks`.
27
+
28
+ ## Auth
29
+
30
+ Every request must include the hook token:
31
+ - `Authorization: Bearer <token>`
32
+ - or `x-clawdbot-token: <token>`
33
+ - or `?token=<token>`
34
+
35
+ ## Endpoints
36
+
37
+ ### `POST /hooks/wake`
38
+
39
+ Payload:
40
+ ```json
41
+ { "text": "System line", "mode": "now" }
42
+ ```
43
+
44
+ - `text` required (string)
45
+ - `mode` optional: `now` | `next-heartbeat` (default `now`)
46
+
47
+ Effect:
48
+ - Enqueues a system event for the **main** session
49
+ - If `mode=now`, triggers an immediate heartbeat
50
+
51
+ ### `POST /hooks/agent`
52
+
53
+ Payload:
54
+ ```json
55
+ {
56
+ "message": "Run this",
57
+ "name": "Email",
58
+ "sessionKey": "hook:email:msg-123",
59
+ "wakeMode": "now",
60
+ "deliver": false,
61
+ "channel": "last",
62
+ "to": "+15551234567",
63
+ "thinking": "low",
64
+ "timeoutSeconds": 120
65
+ }
66
+ ```
67
+
68
+ - `message` required (string)
69
+ - `name` optional (used in the summary prefix)
70
+ - `sessionKey` optional (default random `hook:<uuid>`)
71
+ - `wakeMode` optional: `now` | `next-heartbeat` (default `now`)
72
+ - `deliver` optional (default `false`)
73
+ - `channel` optional: `last` | `whatsapp` | `telegram`
74
+ - `to` optional (channel-specific target)
75
+ - `thinking` optional (override)
76
+ - `timeoutSeconds` optional
77
+
78
+ Effect:
79
+ - Runs an **isolated** agent turn (own session key)
80
+ - Always posts a summary into the **main** session
81
+ - If `wakeMode=now`, triggers an immediate heartbeat
82
+
83
+ ### `POST /hooks/<name>` (mapped)
84
+
85
+ Custom hook names are resolved via `hooks.mappings` (see configuration). A mapping can
86
+ turn arbitrary payloads into `wake` or `agent` actions, with optional templates or
87
+ code transforms.
88
+
89
+ Mapping options (summary):
90
+ - `hooks.presets: ["gmail"]` enables the built-in Gmail mapping.
91
+ - `hooks.mappings` lets you define `match`, `action`, and templates in config.
92
+ - `hooks.transformsDir` + `transform.module` loads a JS/TS module for custom logic.
93
+ - Use `match.source` to keep a generic ingest endpoint (payload-driven routing).
94
+ - TS transforms require a TS loader (e.g. `tsx`) or precompiled `.js` at runtime.
95
+ - `clawdbot hooks gmail setup` writes `hooks.gmail` config for `clawdbot hooks gmail run`.
96
+
97
+ ## Responses
98
+
99
+ - `200` for `/hooks/wake`
100
+ - `202` for `/hooks/agent` (async run started)
101
+ - `401` on auth failure
102
+ - `400` on invalid payload
103
+ - `413` on oversized payloads
104
+
105
+ ## Examples
106
+
107
+ ```bash
108
+ curl -X POST http://127.0.0.1:18789/hooks/wake \
109
+ -H 'Authorization: Bearer SECRET' \
110
+ -H 'Content-Type: application/json' \
111
+ -d '{"text":"New email received","mode":"now"}'
112
+ ```
113
+
114
+ ```bash
115
+ curl -X POST http://127.0.0.1:18789/hooks/agent \
116
+ -H 'x-clawdbot-token: SECRET' \
117
+ -H 'Content-Type: application/json' \
118
+ -d '{"message":"Summarize inbox","name":"Email","wakeMode":"next-heartbeat"}'
119
+ ```
120
+
121
+ ```bash
122
+ curl -X POST http://127.0.0.1:18789/hooks/gmail \
123
+ -H 'Authorization: Bearer SECRET' \
124
+ -H 'Content-Type: application/json' \
125
+ -d '{"source":"gmail","messages":[{"from":"Ada","subject":"Hello","snippet":"Hi"}]}'
126
+ ```
127
+
128
+ ## Security
129
+
130
+ - Keep hook endpoints behind loopback, tailnet, or trusted reverse proxy.
131
+ - Use a dedicated hook token; do not reuse gateway auth tokens.
132
+ - Avoid including sensitive raw payloads in webhook logs.
Binary file
@@ -0,0 +1,142 @@
1
+ ---
2
+ summary: "WhatsApp (web provider) integration: login, inbox, replies, media, and ops"
3
+ read_when:
4
+ - Working on WhatsApp/web provider behavior or inbox routing
5
+ ---
6
+ # WhatsApp (web provider)
7
+
8
+ Updated: 2025-12-23
9
+
10
+ Status: WhatsApp Web via Baileys only. Gateway owns the single session.
11
+
12
+ ## Goals
13
+ - One WhatsApp identity, one gateway session.
14
+ - Deterministic routing: replies return to WhatsApp, no model routing.
15
+ - Model sees enough context to understand quoted replies.
16
+
17
+ ## Architecture (who owns what)
18
+ - **Gateway** owns the Baileys socket and inbox loop.
19
+ - **CLI / macOS app** talk to the gateway; no direct Baileys use.
20
+ - **Active listener** is required for outbound sends; otherwise send fails fast.
21
+
22
+ ## Getting a phone number
23
+
24
+ WhatsApp requires a real mobile number for verification. VoIP and virtual numbers are usually blocked.
25
+
26
+ **Recommended approaches:**
27
+ - **Local eSIM** from your country's mobile carrier (most reliable)
28
+ - Austria: [hot.at](https://www.hot.at)
29
+ - UK: [giffgaff](https://www.giffgaff.com) — free SIM, no contract
30
+ - **Prepaid SIM** — cheap, just needs to receive one SMS for verification
31
+
32
+ **Avoid:** TextNow, Google Voice, most "free SMS" services — WhatsApp blocks these aggressively.
33
+
34
+ **Tip:** The number only needs to receive one verification SMS. After that, WhatsApp Web sessions persist via `creds.json`.
35
+
36
+ ## Login + credentials
37
+ - Login command: `clawdbot login` (QR via Linked Devices).
38
+ - Credentials stored in `~/.clawdbot/credentials/creds.json`.
39
+ - Backup copy at `creds.json.bak` (restored on corruption).
40
+ - Logout: `clawdbot logout` deletes creds and session store.
41
+ - Logged-out socket => error instructs re-link.
42
+
43
+ ## Inbound flow (DM + group)
44
+ - WhatsApp events come from `messages.upsert` (Baileys).
45
+ - Inbox listeners are detached on shutdown to avoid accumulating event handlers in tests/restarts.
46
+ - Status/broadcast chats are ignored.
47
+ - Direct chats use E.164; groups use group JID.
48
+ - **Allowlist**: `whatsapp.allowFrom` enforced for direct chats only.
49
+ - If `whatsapp.allowFrom` is empty, default allowlist = self number (self-chat mode).
50
+ - **Self-chat mode**: avoids auto read receipts and ignores mention JIDs.
51
+ - Read receipts sent for non-self-chat DMs.
52
+
53
+ ## Message normalization (what the model sees)
54
+ - `Body` is the current message body with envelope.
55
+ - Quoted reply context is **always appended**:
56
+ ```
57
+ [Replying to +1555 id:ABC123]
58
+ <quoted text or <media:...>>
59
+ [/Replying]
60
+ ```
61
+ - Reply metadata also set:
62
+ - `ReplyToId` = stanzaId
63
+ - `ReplyToBody` = quoted body or media placeholder
64
+ - `ReplyToSender` = E.164 when known
65
+ - Media-only inbound messages use placeholders:
66
+ - `<media:image|video|audio|document|sticker>`
67
+
68
+ ## Groups
69
+ - Groups map to `whatsapp:group:<jid>` sessions.
70
+ - Activation modes:
71
+ - `mention` (default): requires @mention or regex match.
72
+ - `always`: always triggers.
73
+ - `/activation mention|always` is owner-only.
74
+ - Owner = `whatsapp.allowFrom` (or self E.164 if unset).
75
+ - **History injection**:
76
+ - Recent messages (default 50) inserted under:
77
+ `[Chat messages since your last reply - for context]`
78
+ - Current message under:
79
+ `[Current message - respond to this]`
80
+ - Sender suffix appended: `[from: Name (+E164)]`
81
+ - Group metadata cached 5 min (subject + participants).
82
+
83
+ ## Reply delivery (threading)
84
+ - WhatsApp Web sends standard messages (no quoted reply threading in the current gateway).
85
+ - Reply tags are ignored on this surface.
86
+
87
+ ## Outbound send (text + media)
88
+ - Uses active web listener; error if gateway not running.
89
+ - Text chunking: 4k max per message.
90
+ - Media:
91
+ - Image/video/audio/document supported.
92
+ - Audio sent as PTT; `audio/ogg` => `audio/ogg; codecs=opus`.
93
+ - Caption only on first media item.
94
+ - Media fetch supports HTTP(S) and local paths.
95
+ - Animated GIFs: WhatsApp expects MP4 with `gifPlayback: true` for inline looping.
96
+ - CLI: `clawdbot send --media <mp4> --gif-playback`
97
+ - Gateway: `send` params include `gifPlayback: true`
98
+
99
+ ## Media limits + optimization
100
+ - Default cap: 5 MB (per media item).
101
+ - Override: `agent.mediaMaxMb`.
102
+ - Images are auto-optimized to JPEG under cap (resize + quality sweep).
103
+ - Oversize media => error; media reply falls back to text warning.
104
+
105
+ ## Heartbeats
106
+ - **Gateway heartbeat** logs connection health (`web.heartbeatSeconds`, default 60s).
107
+ - **Agent heartbeat** is global (`agent.heartbeat.*`) and runs in the main session.
108
+ - Uses `HEARTBEAT` prompt + `HEARTBEAT_OK` skip behavior.
109
+ - Delivery defaults to the last used channel (or configured target).
110
+
111
+ ## Reconnect behavior
112
+ - Backoff policy: `web.reconnect`:
113
+ - `initialMs`, `maxMs`, `factor`, `jitter`, `maxAttempts`.
114
+ - If maxAttempts reached, web monitoring stops (degraded).
115
+ - Logged-out => stop and require re-link.
116
+
117
+ ## Config quick map
118
+ - `whatsapp.allowFrom` (DM allowlist).
119
+ - `whatsapp.groups` (group mention gating defaults/overrides)
120
+ - `routing.groupChat.mentionPatterns`
121
+ - `routing.groupChat.historyLimit`
122
+ - `messages.messagePrefix` (inbound prefix)
123
+ - `messages.responsePrefix` (outbound prefix)
124
+ - `agent.mediaMaxMb`
125
+ - `agent.heartbeat.every`
126
+ - `agent.heartbeat.model` (optional override)
127
+ - `agent.heartbeat.target`
128
+ - `agent.heartbeat.to`
129
+ - `session.*` (scope, idle, store; `mainKey` is ignored)
130
+ - `web.enabled` (disable provider startup when false)
131
+ - `web.heartbeatSeconds`
132
+ - `web.reconnect.*`
133
+
134
+ ## Logs + troubleshooting
135
+ - Subsystems: `whatsapp/inbound`, `whatsapp/outbound`, `web-heartbeat`, `web-reconnect`.
136
+ - Log file: `/tmp/clawdbot/clawdbot-YYYY-MM-DD.log` (configurable).
137
+ - Troubleshooting guide: `docs/refactor/web-gateway-troubleshooting.md`.
138
+
139
+ ## Tests
140
+ - `src/web/auto-reply.test.ts` (mention gating, history injection, reply flow)
141
+ - `src/web/monitor-inbox.test.ts` (inbound parsing + reply context)
142
+ - `src/web/outbound.test.ts` (send mapping + media)
package/docs/wizard.md ADDED
@@ -0,0 +1,158 @@
1
+ ---
2
+ summary: "CLI onboarding wizard: guided setup for gateway, workspace, providers, and skills"
3
+ read_when:
4
+ - Running or configuring the onboarding wizard
5
+ - Setting up a new machine
6
+ ---
7
+
8
+ # Onboarding Wizard (CLI)
9
+
10
+ The onboarding wizard is the **recommended** way to set up Clawdbot on any OS.
11
+ It configures a local Gateway or a remote Gateway connection, plus providers, skills,
12
+ and workspace defaults in one guided flow.
13
+
14
+ Primary entrypoint:
15
+
16
+ ```bash
17
+ clawdbot onboard
18
+ ```
19
+
20
+ Follow‑up reconfiguration:
21
+
22
+ ```bash
23
+ clawdbot configure
24
+ ```
25
+
26
+ ## What the wizard does
27
+
28
+ **Local mode (default)** walks you through:
29
+ - Model/auth (Anthropic OAuth recommended, API key optional, Minimax M2.1 via LM Studio)
30
+ - Workspace location + bootstrap files
31
+ - Gateway settings (port/bind/auth/tailscale)
32
+ - Providers (WhatsApp, Telegram, Discord, Signal)
33
+ - Daemon install (LaunchAgent / systemd user unit / Scheduled Task)
34
+ - Health check
35
+ - Skills (recommended)
36
+
37
+ **Remote mode** only configures the local client to connect to a Gateway elsewhere.
38
+ It does **not** install or change anything on the remote host.
39
+
40
+ ## Flow details (local)
41
+
42
+ 1) **Existing config detection**
43
+ - If `~/.clawdbot/clawdbot.json` exists, choose **Keep / Modify / Reset**.
44
+ - Reset uses `trash` (never `rm`) and offers scopes:
45
+ - Config only
46
+ - Config + credentials + sessions
47
+ - Full reset (also removes workspace)
48
+
49
+ 2) **Model/Auth**
50
+ - **Anthropic OAuth (recommended)**: browser flow; paste the `code#state`.
51
+ - **API key**: stores the key for you.
52
+ - **Minimax M2.1 (LM Studio)**: config is auto‑written for the LM Studio endpoint.
53
+ - **Skip**: no auth configured yet.
54
+
55
+ 3) **Workspace**
56
+ - Default `~/clawd` (configurable).
57
+ - Seeds the workspace files needed for the agent bootstrap ritual.
58
+
59
+ 4) **Gateway**
60
+ - Port, bind, auth mode, tailscale exposure.
61
+ - Auth recommendation: keep **Off** for single-machine loopback setups. Use **Token** for multi-machine access or non-loopback binds.
62
+ - Non‑loopback binds require auth.
63
+
64
+ 5) **Providers**
65
+ - WhatsApp: optional QR login.
66
+ - Telegram: bot token.
67
+ - Discord: bot token.
68
+ - Signal: optional `signal-cli` install + account config.
69
+ - iMessage: local `imsg` CLI path + DB access.
70
+
71
+ 6) **Daemon install**
72
+ - macOS: LaunchAgent
73
+ - Linux: systemd user unit
74
+ - Windows: Scheduled Task
75
+
76
+ 7) **Health check**
77
+ - Starts the Gateway (if needed) and runs `clawdbot health`.
78
+
79
+ 8) **Skills (recommended)**
80
+ - Reads the available skills and checks requirements.
81
+ - Lets you choose a node manager: **npm / pnpm / bun**.
82
+ - Installs optional dependencies (some use Homebrew on macOS).
83
+
84
+ 9) **Finish**
85
+ - Summary + next steps, including iOS/Android/macOS apps for extra features.
86
+ - If no GUI is detected, the wizard prints SSH port-forward instructions for the Control UI instead of opening a browser.
87
+
88
+ ## Remote mode
89
+
90
+ Remote mode configures a local client to connect to a Gateway elsewhere.
91
+
92
+ What you’ll set:
93
+ - Remote Gateway URL (`ws://...`)
94
+ - Optional token
95
+
96
+ Notes:
97
+ - No remote installs or daemon changes are performed.
98
+ - If the Gateway is loopback‑only, use SSH tunneling or a tailnet.
99
+ - Discovery hints:
100
+ - macOS: Bonjour (`dns-sd`)
101
+ - Linux: Avahi (`avahi-browse`)
102
+
103
+ ## Non‑interactive mode
104
+
105
+ Use `--non-interactive` to automate or script onboarding:
106
+
107
+ ```bash
108
+ clawdbot onboard --non-interactive \
109
+ --mode local \
110
+ --auth-choice apiKey \
111
+ --anthropic-api-key "$ANTHROPIC_API_KEY" \
112
+ --gateway-port 18789 \
113
+ --gateway-bind loopback \
114
+ --skip-skills
115
+ ```
116
+
117
+ Add `--json` for a machine‑readable summary.
118
+
119
+ ## Gateway wizard RPC
120
+
121
+ The Gateway exposes the wizard flow over RPC (`wizard.start`, `wizard.next`, `wizard.cancel`, `wizard.status`).
122
+ Clients (macOS app, Control UI) can render steps without re‑implementing onboarding logic.
123
+
124
+ ## Signal setup (signal-cli)
125
+
126
+ The wizard can install `signal-cli` from GitHub releases:
127
+ - Downloads the appropriate release asset.
128
+ - Stores it under `~/.clawdbot/tools/signal-cli/<version>/`.
129
+ - Writes `signal.cliPath` to your config.
130
+
131
+ Notes:
132
+ - JVM builds require **Java 21**.
133
+ - Native builds are used when available.
134
+ - Windows auto‑install is not supported yet (manual install required).
135
+
136
+ ## What the wizard writes
137
+
138
+ Typical fields in `~/.clawdbot/clawdbot.json`:
139
+ - `agent.workspace`
140
+ - `agent.model` / `models.providers` (if Minimax chosen)
141
+ - `gateway.*` (mode, bind, auth, tailscale)
142
+ - `telegram.botToken`, `discord.token`, `signal.*`, `imessage.*`
143
+ - `skills.install.nodeManager`
144
+ - `wizard.lastRunAt`
145
+ - `wizard.lastRunVersion`
146
+ - `wizard.lastRunCommit`
147
+ - `wizard.lastRunCommand`
148
+ - `wizard.lastRunMode`
149
+
150
+ WhatsApp credentials go to `~/.clawdbot/credentials/`.
151
+ Sessions are stored under `~/.clawdbot/sessions/`.
152
+
153
+ ## Related docs
154
+
155
+ - macOS app onboarding: `docs/onboarding.md`
156
+ - Config reference: `docs/configuration.md`
157
+ - Providers: `docs/whatsapp.md`, `docs/telegram.md`, `docs/discord.md`, `docs/signal.md`, `docs/imessage.md`
158
+ - Skills: `docs/skills.md`, `docs/skills-config.md`