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,497 @@
1
+ :root {
2
+ --font-body: "Fragment Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
3
+ --font-pixel: "Pixelify Sans", system-ui, sans-serif;
4
+ --radius: 14px;
5
+ --radius-sm: 10px;
6
+ --border: 2px;
7
+ --shadow-px: 0 0 0 var(--border) var(--frame-border), 0 12px 0 -4px rgba(0, 0, 0, 0.25);
8
+ --scanline-size: 6px;
9
+ --scanline-opacity: 0.08;
10
+ }
11
+
12
+ html[data-theme="light"],
13
+ html[data-theme="auto"] {
14
+ --bg0: #fbf4e7;
15
+ --bg1: #fffaf0;
16
+ --panel: #fffdf8;
17
+ --panel2: #fff6e5;
18
+ --text: #10221c;
19
+ --muted: #3e5a50;
20
+ --faint: #6b7f77;
21
+ --link: #0f6b4c;
22
+ --link2: #ff4f40;
23
+ --accent: #ff4f40;
24
+ --accent2: #00b88a;
25
+ --frame-border: #1b2e27;
26
+ --code-bg: #0b1713;
27
+ --code-fg: #eafff6;
28
+ --code-accent: #67ff9b;
29
+ }
30
+
31
+ html[data-theme="dark"] {
32
+ --bg0: #06141f;
33
+ --bg1: #031019;
34
+ --panel: #061a16;
35
+ --panel2: #071f19;
36
+ --text: #d6f6ea;
37
+ --muted: #95c9b9;
38
+ --faint: #66a391;
39
+ --link: #79ffd0;
40
+ --link2: #ff775f;
41
+ --accent: #ff4f40;
42
+ --accent2: #67ff9b;
43
+ --frame-border: #b7ffe6;
44
+ --code-bg: #04110d;
45
+ --code-fg: #dcfff1;
46
+ --code-accent: #67ff9b;
47
+ }
48
+
49
+ @media (prefers-color-scheme: dark) {
50
+ html[data-theme="auto"] {
51
+ --bg0: #06141f;
52
+ --bg1: #031019;
53
+ --panel: #061a16;
54
+ --panel2: #071f19;
55
+ --text: #d6f6ea;
56
+ --muted: #95c9b9;
57
+ --faint: #66a391;
58
+ --link: #79ffd0;
59
+ --link2: #ff775f;
60
+ --accent: #ff4f40;
61
+ --accent2: #67ff9b;
62
+ --frame-border: #b7ffe6;
63
+ --code-bg: #04110d;
64
+ --code-fg: #dcfff1;
65
+ --code-accent: #67ff9b;
66
+ }
67
+ }
68
+
69
+ * {
70
+ box-sizing: border-box;
71
+ }
72
+
73
+ html,
74
+ body {
75
+ height: 100%;
76
+ }
77
+
78
+ body {
79
+ margin: 0;
80
+ font-family: var(--font-body);
81
+ color: var(--text);
82
+ background:
83
+ radial-gradient(1100px 700px at 20% -10%, color-mix(in oklab, var(--accent) 18%, transparent), transparent 55%),
84
+ radial-gradient(900px 600px at 95% 10%, color-mix(in oklab, var(--accent2) 14%, transparent), transparent 60%),
85
+ radial-gradient(900px 600px at 50% 120%, color-mix(in oklab, var(--link) 10%, transparent), transparent 55%),
86
+ linear-gradient(180deg, var(--bg0), var(--bg1));
87
+ overflow-x: hidden;
88
+ }
89
+
90
+ body::before {
91
+ content: "";
92
+ position: fixed;
93
+ inset: 0;
94
+ pointer-events: none;
95
+ opacity: 0.45;
96
+ background-image:
97
+ linear-gradient(to right, color-mix(in oklab, var(--text) 10%, transparent) 1px, transparent 1px),
98
+ linear-gradient(to bottom, color-mix(in oklab, var(--text) 10%, transparent) 1px, transparent 1px);
99
+ background-size: 28px 28px;
100
+ mix-blend-mode: overlay;
101
+ }
102
+
103
+ body::after {
104
+ content: "";
105
+ position: fixed;
106
+ inset: 0;
107
+ pointer-events: none;
108
+ background: repeating-linear-gradient(
109
+ to bottom,
110
+ rgba(0, 0, 0, var(--scanline-opacity)),
111
+ rgba(0, 0, 0, var(--scanline-opacity)) 1px,
112
+ transparent 1px,
113
+ transparent var(--scanline-size)
114
+ );
115
+ opacity: 0.8;
116
+ mix-blend-mode: multiply;
117
+ }
118
+
119
+ @media (prefers-reduced-motion: reduce) {
120
+ body::after {
121
+ display: none;
122
+ }
123
+ }
124
+
125
+ .skip-link {
126
+ position: absolute;
127
+ top: 10px;
128
+ left: 10px;
129
+ z-index: 10;
130
+ padding: 10px 12px;
131
+ border-radius: 999px;
132
+ background: var(--panel);
133
+ color: var(--text);
134
+ text-decoration: none;
135
+ transform: translateY(-130%);
136
+ box-shadow: var(--shadow-px);
137
+ }
138
+
139
+ .skip-link:focus {
140
+ transform: translateY(0);
141
+ outline: none;
142
+ }
143
+
144
+ .shell {
145
+ padding: 22px 16px 10px;
146
+ }
147
+
148
+ .shell__frame {
149
+ max-width: 1120px;
150
+ margin: 0 auto;
151
+ border-radius: var(--radius);
152
+ background:
153
+ linear-gradient(180deg, color-mix(in oklab, var(--panel2) 88%, transparent), color-mix(in oklab, var(--panel) 92%, transparent));
154
+ box-shadow: var(--shadow-px);
155
+ border: var(--border) solid var(--frame-border);
156
+ overflow: hidden;
157
+ }
158
+
159
+ .shell__titlebar {
160
+ display: flex;
161
+ align-items: center;
162
+ justify-content: space-between;
163
+ gap: 12px;
164
+ padding: 14px 14px 12px;
165
+ background:
166
+ linear-gradient(90deg, color-mix(in oklab, var(--accent) 26%, transparent), transparent 42%),
167
+ linear-gradient(180deg, color-mix(in oklab, var(--panel) 90%, #000 10%), color-mix(in oklab, var(--panel2) 90%, #000 10%));
168
+ }
169
+
170
+ .brand {
171
+ display: flex;
172
+ align-items: center;
173
+ gap: 12px;
174
+ min-width: 0;
175
+ }
176
+
177
+ .brand__logo {
178
+ flex: 0 0 auto;
179
+ width: 40px;
180
+ height: 40px;
181
+ image-rendering: pixelated;
182
+ filter: drop-shadow(0 2px 0 color-mix(in oklab, var(--frame-border) 80%, transparent));
183
+ }
184
+
185
+ .brand__text {
186
+ min-width: 0;
187
+ }
188
+
189
+ .brand__name {
190
+ font-family: var(--font-pixel);
191
+ letter-spacing: 0.14em;
192
+ font-weight: 700;
193
+ font-size: 18px;
194
+ line-height: 1.1;
195
+ text-shadow: 0 1px 0 color-mix(in oklab, var(--frame-border) 55%, transparent);
196
+ }
197
+
198
+ .brand__hint {
199
+ margin-top: 2px;
200
+ font-size: 12px;
201
+ color: var(--muted);
202
+ white-space: nowrap;
203
+ overflow: hidden;
204
+ text-overflow: ellipsis;
205
+ }
206
+
207
+ .titlebar__actions {
208
+ display: flex;
209
+ align-items: center;
210
+ gap: 10px;
211
+ }
212
+
213
+ .titlebar__cta {
214
+ display: inline-flex;
215
+ align-items: center;
216
+ gap: 8px;
217
+ padding: 8px 12px 8px 10px;
218
+ border-radius: 12px;
219
+ background:
220
+ linear-gradient(140deg, color-mix(in oklab, var(--accent) 10%, transparent), transparent 60%),
221
+ color-mix(in oklab, var(--panel) 92%, transparent);
222
+ border: var(--border) solid color-mix(in oklab, var(--frame-border) 80%, transparent);
223
+ color: var(--text);
224
+ text-decoration: none;
225
+ box-shadow:
226
+ 0 6px 0 -3px rgba(0, 0, 0, 0.25),
227
+ inset 0 0 0 1px color-mix(in oklab, var(--panel2) 55%, transparent);
228
+ }
229
+
230
+ .titlebar__cta:hover {
231
+ border-color: color-mix(in oklab, var(--accent2) 45%, transparent);
232
+ box-shadow:
233
+ 0 0 0 2px color-mix(in oklab, var(--accent2) 30%, transparent),
234
+ 0 6px 0 -3px rgba(0, 0, 0, 0.25);
235
+ }
236
+
237
+ .titlebar__cta:active {
238
+ transform: translateY(1px);
239
+ box-shadow: 0 4px 0 -3px rgba(0, 0, 0, 0.25);
240
+ }
241
+
242
+ .titlebar__cta:focus-visible {
243
+ outline: 3px solid color-mix(in oklab, var(--accent2) 60%, transparent);
244
+ outline-offset: 2px;
245
+ }
246
+
247
+ .titlebar__cta--accent {
248
+ background:
249
+ linear-gradient(120deg, color-mix(in oklab, var(--accent) 22%, transparent), transparent 70%),
250
+ color-mix(in oklab, var(--panel) 88%, transparent);
251
+ border-color: color-mix(in oklab, var(--accent) 60%, var(--frame-border));
252
+ }
253
+
254
+ .titlebar__cta-label {
255
+ font-family: var(--font-pixel);
256
+ letter-spacing: 0.12em;
257
+ font-size: 12px;
258
+ text-transform: uppercase;
259
+ }
260
+
261
+ .titlebar__cta-meta {
262
+ display: inline-flex;
263
+ align-items: center;
264
+ justify-content: center;
265
+ height: 20px;
266
+ padding: 0 8px;
267
+ border-radius: 999px;
268
+ font-size: 11px;
269
+ text-transform: uppercase;
270
+ letter-spacing: 0.08em;
271
+ background: var(--code-bg);
272
+ color: var(--code-accent);
273
+ border: 1px solid color-mix(in oklab, var(--code-accent) 30%, transparent);
274
+ box-shadow: inset 0 0 12px color-mix(in oklab, var(--code-accent) 25%, transparent);
275
+ }
276
+
277
+ .theme-toggle {
278
+ display: inline-flex;
279
+ align-items: center;
280
+ gap: 10px;
281
+ padding: 9px 10px;
282
+ border-radius: 12px;
283
+ background: color-mix(in oklab, var(--panel) 92%, transparent);
284
+ border: var(--border) solid var(--frame-border);
285
+ color: var(--text);
286
+ cursor: pointer;
287
+ box-shadow: 0 6px 0 -3px rgba(0, 0, 0, 0.25);
288
+ user-select: none;
289
+ }
290
+
291
+ .theme-toggle:active {
292
+ transform: translateY(1px);
293
+ box-shadow: 0 4px 0 -3px rgba(0, 0, 0, 0.25);
294
+ }
295
+
296
+ .theme-toggle__key {
297
+ display: inline-flex;
298
+ align-items: center;
299
+ justify-content: center;
300
+ width: 36px;
301
+ height: 28px;
302
+ border-radius: 9px;
303
+ background: var(--code-bg);
304
+ color: var(--code-accent);
305
+ border: 1px solid color-mix(in oklab, var(--code-accent) 30%, transparent);
306
+ font-weight: 700;
307
+ font-size: 12px;
308
+ letter-spacing: 0.06em;
309
+ text-shadow: 0 0 14px color-mix(in oklab, var(--code-accent) 55%, transparent);
310
+ }
311
+
312
+ .theme-toggle__label {
313
+ font-family: var(--font-pixel);
314
+ letter-spacing: 0.12em;
315
+ font-size: 12px;
316
+ text-transform: uppercase;
317
+ }
318
+
319
+ .theme-toggle:focus-visible {
320
+ outline: 3px solid color-mix(in oklab, var(--accent2) 60%, transparent);
321
+ outline-offset: 2px;
322
+ }
323
+
324
+ .shell__nav {
325
+ display: flex;
326
+ align-items: center;
327
+ justify-content: space-between;
328
+ gap: 10px;
329
+ padding: 10px 14px 12px;
330
+ border-top: 1px solid color-mix(in oklab, var(--frame-border) 25%, transparent);
331
+ background: linear-gradient(180deg, transparent, color-mix(in oklab, var(--panel2) 78%, transparent));
332
+ }
333
+
334
+ .nav {
335
+ display: flex;
336
+ flex-wrap: wrap;
337
+ gap: 12px;
338
+ }
339
+
340
+ .nav__link {
341
+ display: inline-flex;
342
+ align-items: center;
343
+ gap: 8px;
344
+ padding: 6px 10px;
345
+ border-radius: 999px;
346
+ text-decoration: none;
347
+ color: var(--text);
348
+ background: color-mix(in oklab, var(--panel) 85%, transparent);
349
+ border: 1px solid color-mix(in oklab, var(--frame-border) 20%, transparent);
350
+ }
351
+
352
+ .nav__link:hover {
353
+ border-color: color-mix(in oklab, var(--accent2) 45%, transparent);
354
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent2) 30%, transparent);
355
+ }
356
+
357
+ .nav__chev {
358
+ color: var(--accent);
359
+ font-weight: 700;
360
+ }
361
+
362
+ .shell__status {
363
+ display: inline-flex;
364
+ align-items: center;
365
+ gap: 10px;
366
+ color: var(--muted);
367
+ font-size: 12px;
368
+ white-space: nowrap;
369
+ }
370
+
371
+ .status__dot {
372
+ width: 10px;
373
+ height: 10px;
374
+ border-radius: 999px;
375
+ background: radial-gradient(circle at 30% 30%, var(--accent2), color-mix(in oklab, var(--accent2) 30%, #000));
376
+ box-shadow: 0 0 0 2px color-mix(in oklab, var(--accent2) 18%, transparent), 0 0 18px color-mix(in oklab, var(--accent2) 50%, transparent);
377
+ }
378
+
379
+ .content {
380
+ padding: 18px 16px 48px;
381
+ }
382
+
383
+ .terminal {
384
+ position: relative;
385
+ max-width: 1120px;
386
+ margin: 0 auto;
387
+ border-radius: var(--radius);
388
+ border: var(--border) solid var(--frame-border);
389
+ background: linear-gradient(180deg, color-mix(in oklab, var(--panel) 92%, transparent), color-mix(in oklab, var(--panel2) 86%, transparent));
390
+ box-shadow: var(--shadow-px);
391
+ padding: 18px 16px 16px;
392
+ }
393
+
394
+ .terminal__prompt {
395
+ display: block;
396
+ padding: 10px 12px;
397
+ border-radius: var(--radius-sm);
398
+ background: var(--code-bg);
399
+ color: var(--code-fg);
400
+ border: 1px solid color-mix(in oklab, var(--frame-border) 18%, transparent);
401
+ overflow-x: auto;
402
+ white-space: nowrap;
403
+ }
404
+
405
+ .prompt__user {
406
+ color: var(--code-accent);
407
+ text-shadow: 0 0 16px color-mix(in oklab, var(--code-accent) 52%, transparent);
408
+ }
409
+
410
+ .prompt__host {
411
+ color: color-mix(in oklab, var(--code-fg) 92%, var(--accent2));
412
+ }
413
+
414
+ .prompt__path {
415
+ color: color-mix(in oklab, var(--code-fg) 78%, var(--link));
416
+ }
417
+
418
+ .prompt__cmd {
419
+ margin-left: 8px;
420
+ color: color-mix(in oklab, var(--code-fg) 90%, var(--accent));
421
+ }
422
+
423
+ .terminal__summary {
424
+ margin: 12px 2px 0;
425
+ color: var(--muted);
426
+ font-size: 14px;
427
+ line-height: 1.5;
428
+ }
429
+
430
+ .terminal__meta {
431
+ margin: 12px 2px 0;
432
+ padding: 12px 12px;
433
+ border-radius: var(--radius-sm);
434
+ border: 1px dashed color-mix(in oklab, var(--frame-border) 25%, transparent);
435
+ background: color-mix(in oklab, var(--panel) 76%, transparent);
436
+ color: var(--faint);
437
+ font-size: 13px;
438
+ }
439
+
440
+ .terminal__meta summary {
441
+ cursor: pointer;
442
+ font-family: var(--font-pixel);
443
+ letter-spacing: 0.08em;
444
+ text-transform: uppercase;
445
+ color: var(--text);
446
+ }
447
+
448
+ .terminal__meta ul {
449
+ margin: 10px 0 0 18px;
450
+ }
451
+
452
+ .terminal__footer {
453
+ margin-top: 22px;
454
+ padding-top: 16px;
455
+ border-top: 1px solid color-mix(in oklab, var(--frame-border) 20%, transparent);
456
+ color: var(--muted);
457
+ font-size: 13px;
458
+ }
459
+
460
+ .footer__actions {
461
+ margin-top: 14px;
462
+ display: flex;
463
+ justify-content: flex-end;
464
+ }
465
+
466
+ .terminal__footer a {
467
+ color: var(--link);
468
+ text-decoration: none;
469
+ border-bottom: 1px dotted color-mix(in oklab, var(--link) 55%, transparent);
470
+ }
471
+
472
+ .terminal__footer a:hover {
473
+ color: var(--link2);
474
+ border-bottom-color: color-mix(in oklab, var(--link2) 75%, transparent);
475
+ }
476
+
477
+ .footer__hint {
478
+ margin-top: 8px;
479
+ color: var(--faint);
480
+ }
481
+
482
+ kbd {
483
+ font-family: var(--font-body);
484
+ font-size: 0.9em;
485
+ padding: 2px 6px;
486
+ border-radius: 8px;
487
+ border: 1px solid color-mix(in oklab, var(--frame-border) 18%, transparent);
488
+ background: color-mix(in oklab, var(--panel) 65%, transparent);
489
+ box-shadow: 0 6px 0 -4px rgba(0, 0, 0, 0.18);
490
+ }
491
+
492
+ @supports not (color: color-mix(in oklab, black, white)) {
493
+ body::before,
494
+ body::after {
495
+ opacity: 0.2;
496
+ }
497
+ }
@@ -0,0 +1,55 @@
1
+ const THEME_STORAGE_KEY = "clawdbot:theme";
2
+
3
+ function safeGet(key) {
4
+ try {
5
+ return localStorage.getItem(key);
6
+ } catch {
7
+ return null;
8
+ }
9
+ }
10
+
11
+ function safeSet(key, value) {
12
+ try {
13
+ localStorage.setItem(key, value);
14
+ } catch {
15
+ // ignore
16
+ }
17
+ }
18
+
19
+ function preferredTheme() {
20
+ const stored = safeGet(THEME_STORAGE_KEY);
21
+ if (stored === "light" || stored === "dark") return stored;
22
+ return window.matchMedia?.("(prefers-color-scheme: dark)").matches ? "dark" : "light";
23
+ }
24
+
25
+ function applyTheme(theme) {
26
+ document.documentElement.dataset.theme = theme;
27
+
28
+ const toggle = document.querySelector("[data-theme-toggle]");
29
+ const label = document.querySelector("[data-theme-label]");
30
+
31
+ if (toggle instanceof HTMLButtonElement) toggle.setAttribute("aria-pressed", theme === "dark" ? "true" : "false");
32
+ if (label) label.textContent = theme === "dark" ? "dark" : "light";
33
+ }
34
+
35
+ function toggleTheme() {
36
+ const current = document.documentElement.dataset.theme === "dark" ? "dark" : "light";
37
+ const next = current === "dark" ? "light" : "dark";
38
+ safeSet(THEME_STORAGE_KEY, next);
39
+ applyTheme(next);
40
+ }
41
+
42
+ applyTheme(preferredTheme());
43
+
44
+ document.addEventListener("click", (event) => {
45
+ const target = event.target;
46
+ const button = target instanceof Element ? target.closest("[data-theme-toggle]") : null;
47
+ if (button) toggleTheme();
48
+ });
49
+
50
+ document.addEventListener("keydown", (event) => {
51
+ if (event.key === "F2") {
52
+ event.preventDefault();
53
+ toggleTheme();
54
+ }
55
+ });
package/docs/audio.md ADDED
@@ -0,0 +1,50 @@
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
+ ---
6
+ <!-- {% raw %} -->
7
+ # Audio / Voice Notes — 2025-12-05
8
+
9
+ ## What works
10
+ - **Optional transcription**: If `routing.transcribeAudio.command` is set in `~/.clawdbot/clawdbot.json`, CLAWDBOT will:
11
+ 1) Download inbound audio to a temp path when WhatsApp only provides a URL.
12
+ 2) Run the configured CLI (templated with `{{MediaPath}}`), expecting transcript on stdout.
13
+ 3) Replace `Body` with the transcript, set `{{Transcript}}`, and prepend the original media path plus a `Transcript:` section in the command prompt so models see both.
14
+ 4) Continue through the normal auto-reply pipeline (templating, sessions, Pi command).
15
+ - **Verbose logging**: In `--verbose`, we log when transcription runs and when the transcript replaces the body.
16
+
17
+ ## Config example (OpenAI Whisper CLI)
18
+ Requires `OPENAI_API_KEY` in env and `openai` CLI installed:
19
+ ```json5
20
+ {
21
+ routing: {
22
+ transcribeAudio: {
23
+ command: [
24
+ "openai",
25
+ "api",
26
+ "audio.transcriptions.create",
27
+ "-m",
28
+ "whisper-1",
29
+ "-f",
30
+ "{{MediaPath}}",
31
+ "--response-format",
32
+ "text"
33
+ ],
34
+ timeoutSeconds: 45
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Notes & limits
41
+ - We don’t ship a transcriber; you opt in with any CLI that prints text to stdout (Whisper cloud, whisper.cpp, vosk, Deepgram, etc.).
42
+ - Size guard: inbound audio must be ≤5 MB (matches the temp media store and transcript pipeline).
43
+ - Outbound caps: web send supports audio/voice up to 16 MB (sent as a voice note with `ptt: true`).
44
+ - If transcription fails, we fall back to the original body/media note; replies still go through.
45
+ - Transcript is available to templates as `{{Transcript}}`; models get both the media path and a `Transcript:` block in the prompt when using command mode.
46
+
47
+ ## Gotchas
48
+ - Ensure your CLI exits 0 and prints plain text; JSON needs to be massaged via `jq -r .text`.
49
+ - Keep timeouts reasonable (`timeoutSeconds`, default 45s) to avoid blocking the reply queue.
50
+ <!-- {% endraw %} -->
@@ -0,0 +1,74 @@
1
+ ---
2
+ summary: "Background bash execution and process management"
3
+ read_when:
4
+ - Adding or modifying background bash behavior
5
+ - Debugging long-running bash tasks
6
+ ---
7
+
8
+ # Background Bash + Process Tool
9
+
10
+ Clawdbot runs shell commands through the `bash` tool and keeps long‑running tasks in memory. The `process` tool manages those background sessions.
11
+
12
+ ## bash tool
13
+
14
+ Key parameters:
15
+ - `command` (required)
16
+ - `yieldMs` (default 10000): auto‑background after this delay
17
+ - `background` (bool): background immediately
18
+ - `timeout` (seconds, default 1800): kill the process after this timeout
19
+ - `elevated` (bool): run on host if elevated mode is enabled/allowed
20
+ - Need a real TTY? Use the tmux skill.
21
+ - `workdir`, `env`
22
+
23
+ Behavior:
24
+ - Foreground runs return output directly.
25
+ - When backgrounded (explicit or timeout), the tool returns `status: "running"` + `sessionId` and a short tail.
26
+ - Output is kept in memory until the session is polled or cleared.
27
+
28
+ Environment overrides:
29
+ - `PI_BASH_YIELD_MS`: default yield (ms)
30
+ - `PI_BASH_MAX_OUTPUT_CHARS`: in‑memory output cap (chars)
31
+ - `PI_BASH_JOB_TTL_MS`: TTL for finished sessions (ms, bounded to 1m–3h)
32
+
33
+ Config (preferred):
34
+ - `agent.bash.backgroundMs` (default 10000)
35
+ - `agent.bash.timeoutSec` (default 1800)
36
+ - `agent.bash.cleanupMs` (default 1800000)
37
+
38
+ ## process tool
39
+
40
+ Actions:
41
+ - `list`: running + finished sessions
42
+ - `poll`: drain new output for a session (also reports exit status)
43
+ - `log`: read the aggregated output (supports `offset` + `limit`)
44
+ - `write`: send stdin (`data`, optional `eof`)
45
+ - `kill`: terminate a background session
46
+ - `clear`: remove a finished session from memory
47
+ - `remove`: kill if running, otherwise clear if finished
48
+
49
+ Notes:
50
+ - Only backgrounded sessions are listed/persisted in memory.
51
+ - Sessions are lost on process restart (no disk persistence).
52
+ - Session logs are only saved to chat history if you run `process poll/log` and the tool result is recorded.
53
+ - `process list` includes a derived `name` (command verb + target) for quick scans.
54
+ - `process log` uses line-based `offset`/`limit` (omit `offset` to grab the last N lines).
55
+
56
+ ## Examples
57
+
58
+ Run a long task and poll later:
59
+ ```json
60
+ {"tool": "bash", "command": "sleep 5 && echo done", "yieldMs": 1000}
61
+ ```
62
+ ```json
63
+ {"tool": "process", "action": "poll", "sessionId": "<id>"}
64
+ ```
65
+
66
+ Start immediately in background:
67
+ ```json
68
+ {"tool": "bash", "command": "npm run build", "background": true}
69
+ ```
70
+
71
+ Send stdin:
72
+ ```json
73
+ {"tool": "process", "action": "write", "sessionId": "<id>", "data": "y\n"}
74
+ ```
package/docs/bash.md ADDED
@@ -0,0 +1,32 @@
1
+ ---
2
+ summary: "Bash tool usage, stdin modes, and TTY support"
3
+ read_when:
4
+ - Using or modifying the bash tool
5
+ - Debugging stdin or TTY behavior
6
+ ---
7
+
8
+ # Bash tool
9
+
10
+ Run shell commands in the workspace. Supports foreground + background execution via `process`.
11
+
12
+ ## Parameters
13
+
14
+ - `command` (required)
15
+ - `yieldMs` (default 10000): auto-background after delay
16
+ - `background` (bool): background immediately
17
+ - `timeout` (seconds, default 1800): kill on expiry
18
+ - `elevated` (bool): run on host if elevated mode is enabled/allowed
19
+ - Need a real TTY? Use the tmux skill.
20
+
21
+ ## Examples
22
+
23
+ Foreground:
24
+ ```json
25
+ {"tool":"bash","command":"ls -la"}
26
+ ```
27
+
28
+ Background + poll:
29
+ ```json
30
+ {"tool":"bash","command":"npm run build","yieldMs":1000}
31
+ {"tool":"process","action":"poll","sessionId":"<id>"}
32
+ ```