clawdbot 2026.1.4-1

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 (550) hide show
  1. package/CHANGELOG.md +120 -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/control-ui/assets/index-BFID3yAA.css +1 -0
  189. package/dist/control-ui/assets/index-CE_axlTS.js +2235 -0
  190. package/dist/control-ui/assets/index-CE_axlTS.js.map +1 -0
  191. package/dist/control-ui/index.html +15 -0
  192. package/dist/cron/isolated-agent.js +499 -0
  193. package/dist/cron/run-log.js +72 -0
  194. package/dist/cron/schedule.js +24 -0
  195. package/dist/cron/service.js +471 -0
  196. package/dist/cron/store.js +43 -0
  197. package/dist/cron/types.js +1 -0
  198. package/dist/daemon/constants.js +10 -0
  199. package/dist/daemon/launchd.js +276 -0
  200. package/dist/daemon/legacy.js +63 -0
  201. package/dist/daemon/program-args.js +76 -0
  202. package/dist/daemon/schtasks.js +257 -0
  203. package/dist/daemon/service.js +60 -0
  204. package/dist/daemon/systemd.js +266 -0
  205. package/dist/discord/index.js +2 -0
  206. package/dist/discord/monitor.js +1188 -0
  207. package/dist/discord/probe.js +54 -0
  208. package/dist/discord/send.js +577 -0
  209. package/dist/discord/token.js +8 -0
  210. package/dist/gateway/auth.js +121 -0
  211. package/dist/gateway/call.js +94 -0
  212. package/dist/gateway/chat-attachments.js +41 -0
  213. package/dist/gateway/client.js +180 -0
  214. package/dist/gateway/config-reload.js +274 -0
  215. package/dist/gateway/control-ui.js +184 -0
  216. package/dist/gateway/hooks-mapping.js +282 -0
  217. package/dist/gateway/hooks.js +168 -0
  218. package/dist/gateway/net.js +29 -0
  219. package/dist/gateway/protocol/index.js +61 -0
  220. package/dist/gateway/protocol/schema.js +560 -0
  221. package/dist/gateway/server-bridge-subscriptions.js +93 -0
  222. package/dist/gateway/server-bridge.js +1013 -0
  223. package/dist/gateway/server-browser.js +12 -0
  224. package/dist/gateway/server-chat.js +159 -0
  225. package/dist/gateway/server-constants.js +8 -0
  226. package/dist/gateway/server-discovery.js +62 -0
  227. package/dist/gateway/server-http.js +165 -0
  228. package/dist/gateway/server-methods/agent-job.js +125 -0
  229. package/dist/gateway/server-methods/agent.js +250 -0
  230. package/dist/gateway/server-methods/chat.js +200 -0
  231. package/dist/gateway/server-methods/config.js +50 -0
  232. package/dist/gateway/server-methods/connect.js +6 -0
  233. package/dist/gateway/server-methods/cron.js +83 -0
  234. package/dist/gateway/server-methods/health.js +28 -0
  235. package/dist/gateway/server-methods/models.js +16 -0
  236. package/dist/gateway/server-methods/nodes.js +294 -0
  237. package/dist/gateway/server-methods/providers.js +217 -0
  238. package/dist/gateway/server-methods/send.js +166 -0
  239. package/dist/gateway/server-methods/sessions.js +305 -0
  240. package/dist/gateway/server-methods/skills.js +83 -0
  241. package/dist/gateway/server-methods/system.js +118 -0
  242. package/dist/gateway/server-methods/talk.js +22 -0
  243. package/dist/gateway/server-methods/types.js +1 -0
  244. package/dist/gateway/server-methods/voicewake.js +30 -0
  245. package/dist/gateway/server-methods/web.js +58 -0
  246. package/dist/gateway/server-methods/wizard.js +100 -0
  247. package/dist/gateway/server-methods.js +53 -0
  248. package/dist/gateway/server-providers.js +644 -0
  249. package/dist/gateway/server-shared.js +1 -0
  250. package/dist/gateway/server-utils.js +35 -0
  251. package/dist/gateway/server.js +1437 -0
  252. package/dist/gateway/session-utils.js +216 -0
  253. package/dist/gateway/ws-log.js +349 -0
  254. package/dist/gateway/ws-logging.js +8 -0
  255. package/dist/globals.js +41 -0
  256. package/dist/hooks/gmail-ops.js +236 -0
  257. package/dist/hooks/gmail-setup-utils.js +278 -0
  258. package/dist/hooks/gmail-watcher.js +175 -0
  259. package/dist/hooks/gmail.js +177 -0
  260. package/dist/imessage/client.js +165 -0
  261. package/dist/imessage/index.js +3 -0
  262. package/dist/imessage/monitor.js +272 -0
  263. package/dist/imessage/probe.js +26 -0
  264. package/dist/imessage/send.js +83 -0
  265. package/dist/imessage/targets.js +176 -0
  266. package/dist/index.js +50 -0
  267. package/dist/infra/agent-events.js +46 -0
  268. package/dist/infra/binaries.js +9 -0
  269. package/dist/infra/bonjour-discovery.js +163 -0
  270. package/dist/infra/bonjour.js +200 -0
  271. package/dist/infra/bridge/server.js +562 -0
  272. package/dist/infra/canvas-host-url.js +54 -0
  273. package/dist/infra/env.js +8 -0
  274. package/dist/infra/errors.js +28 -0
  275. package/dist/infra/gateway-lock.js +8 -0
  276. package/dist/infra/heartbeat-events.js +21 -0
  277. package/dist/infra/heartbeat-runner.js +453 -0
  278. package/dist/infra/heartbeat-wake.js +61 -0
  279. package/dist/infra/is-main.js +37 -0
  280. package/dist/infra/machine-name.js +40 -0
  281. package/dist/infra/node-pairing.js +211 -0
  282. package/dist/infra/pam.js +42 -0
  283. package/dist/infra/path-env.js +92 -0
  284. package/dist/infra/ports.js +87 -0
  285. package/dist/infra/provider-summary.js +80 -0
  286. package/dist/infra/restart.js +29 -0
  287. package/dist/infra/retry.js +16 -0
  288. package/dist/infra/runtime-guard.js +59 -0
  289. package/dist/infra/system-events.js +44 -0
  290. package/dist/infra/system-presence.js +216 -0
  291. package/dist/infra/tailnet.js +46 -0
  292. package/dist/infra/tailscale.js +149 -0
  293. package/dist/infra/voicewake.js +77 -0
  294. package/dist/infra/widearea-dns.js +123 -0
  295. package/dist/infra/ws.js +13 -0
  296. package/dist/logger.js +52 -0
  297. package/dist/logging.js +490 -0
  298. package/dist/macos/gateway-daemon.js +141 -0
  299. package/dist/macos/relay.js +46 -0
  300. package/dist/media/constants.js +33 -0
  301. package/dist/media/host.js +42 -0
  302. package/dist/media/image-ops.js +121 -0
  303. package/dist/media/mime.js +115 -0
  304. package/dist/media/parse.js +81 -0
  305. package/dist/media/server.js +64 -0
  306. package/dist/media/store.js +139 -0
  307. package/dist/process/command-queue.js +97 -0
  308. package/dist/process/exec.js +75 -0
  309. package/dist/protocol.schema.json +2918 -0
  310. package/dist/provider-web.js +8 -0
  311. package/dist/providers/web/index.js +2 -0
  312. package/dist/runtime.js +8 -0
  313. package/dist/sessions/send-policy.js +68 -0
  314. package/dist/signal/client.js +134 -0
  315. package/dist/signal/daemon.js +69 -0
  316. package/dist/signal/index.js +3 -0
  317. package/dist/signal/monitor.js +336 -0
  318. package/dist/signal/probe.js +46 -0
  319. package/dist/signal/send.js +91 -0
  320. package/dist/slack/actions.js +97 -0
  321. package/dist/slack/index.js +5 -0
  322. package/dist/slack/monitor.js +1029 -0
  323. package/dist/slack/probe.js +47 -0
  324. package/dist/slack/send.js +131 -0
  325. package/dist/slack/token.js +10 -0
  326. package/dist/telegram/bot.js +394 -0
  327. package/dist/telegram/download.js +34 -0
  328. package/dist/telegram/index.js +4 -0
  329. package/dist/telegram/monitor.js +47 -0
  330. package/dist/telegram/probe.js +63 -0
  331. package/dist/telegram/proxy.js +9 -0
  332. package/dist/telegram/send.js +138 -0
  333. package/dist/telegram/token.js +30 -0
  334. package/dist/telegram/webhook-set.js +12 -0
  335. package/dist/telegram/webhook.js +56 -0
  336. package/dist/tui/commands.js +74 -0
  337. package/dist/tui/components/assistant-message.js +16 -0
  338. package/dist/tui/components/chat-log.js +92 -0
  339. package/dist/tui/components/custom-editor.js +53 -0
  340. package/dist/tui/components/selectors.js +8 -0
  341. package/dist/tui/components/tool-execution.js +111 -0
  342. package/dist/tui/components/user-message.js +17 -0
  343. package/dist/tui/gateway-chat.js +140 -0
  344. package/dist/tui/layout.js +41 -0
  345. package/dist/tui/message-list.js +57 -0
  346. package/dist/tui/theme/theme.js +80 -0
  347. package/dist/tui/theme.js +25 -0
  348. package/dist/tui/tui.js +708 -0
  349. package/dist/utils.js +133 -0
  350. package/dist/version.js +18 -0
  351. package/dist/web/active-listener.js +7 -0
  352. package/dist/web/auto-reply.js +1203 -0
  353. package/dist/web/inbound.js +481 -0
  354. package/dist/web/login-qr.js +204 -0
  355. package/dist/web/login.js +59 -0
  356. package/dist/web/media.js +148 -0
  357. package/dist/web/outbound.js +67 -0
  358. package/dist/web/qr-image.js +97 -0
  359. package/dist/web/reconnect.js +60 -0
  360. package/dist/web/reply-heartbeat-wake.js +61 -0
  361. package/dist/web/session.js +346 -0
  362. package/dist/wizard/clack-prompter.js +56 -0
  363. package/dist/wizard/onboarding.js +452 -0
  364. package/dist/wizard/prompts.js +6 -0
  365. package/dist/wizard/session.js +203 -0
  366. package/docs/AGENTS.default.md +116 -0
  367. package/docs/CNAME +1 -0
  368. package/docs/RELEASING.md +64 -0
  369. package/docs/_config.yml +51 -0
  370. package/docs/_layouts/default.html +145 -0
  371. package/docs/agent-send.md +21 -0
  372. package/docs/agent.md +104 -0
  373. package/docs/android/connect.md +131 -0
  374. package/docs/architecture.md +89 -0
  375. package/docs/assets/markdown.css +130 -0
  376. package/docs/assets/pixel-lobster.svg +60 -0
  377. package/docs/assets/terminal.css +497 -0
  378. package/docs/assets/theme.js +55 -0
  379. package/docs/audio.md +50 -0
  380. package/docs/background-process.md +74 -0
  381. package/docs/bash.md +32 -0
  382. package/docs/bonjour.md +159 -0
  383. package/docs/browser.md +289 -0
  384. package/docs/camera.md +152 -0
  385. package/docs/clawd.md +199 -0
  386. package/docs/clawdbot-mac.md +104 -0
  387. package/docs/configuration.md +1177 -0
  388. package/docs/control-api.md +49 -0
  389. package/docs/control-ui.md +83 -0
  390. package/docs/cron.md +374 -0
  391. package/docs/dashboard.md +17 -0
  392. package/docs/device-models.md +46 -0
  393. package/docs/discord.md +293 -0
  394. package/docs/discovery.md +112 -0
  395. package/docs/docker.md +251 -0
  396. package/docs/docs.json +86 -0
  397. package/docs/doctor.md +47 -0
  398. package/docs/elevated.md +31 -0
  399. package/docs/faq.md +640 -0
  400. package/docs/gateway/pairing.md +109 -0
  401. package/docs/gateway-lock.md +28 -0
  402. package/docs/gateway.md +174 -0
  403. package/docs/gmail-pubsub.md +191 -0
  404. package/docs/grammy.md +27 -0
  405. package/docs/group-messages.md +71 -0
  406. package/docs/groups.md +78 -0
  407. package/docs/health.md +28 -0
  408. package/docs/heartbeat.md +64 -0
  409. package/docs/images.md +52 -0
  410. package/docs/imessage.md +63 -0
  411. package/docs/index.md +182 -0
  412. package/docs/ios/connect.md +177 -0
  413. package/docs/ios/spec.md +236 -0
  414. package/docs/location-command.md +95 -0
  415. package/docs/logging.md +99 -0
  416. package/docs/lore.md +131 -0
  417. package/docs/mac/bun.md +133 -0
  418. package/docs/mac/canvas.md +161 -0
  419. package/docs/mac/child-process.md +72 -0
  420. package/docs/mac/dev-setup.md +81 -0
  421. package/docs/mac/health.md +28 -0
  422. package/docs/mac/icon.md +26 -0
  423. package/docs/mac/logging.md +51 -0
  424. package/docs/mac/menu-bar.md +69 -0
  425. package/docs/mac/peekaboo.md +170 -0
  426. package/docs/mac/permissions.md +40 -0
  427. package/docs/mac/release.md +76 -0
  428. package/docs/mac/remote.md +57 -0
  429. package/docs/mac/signing.md +41 -0
  430. package/docs/mac/skills.md +27 -0
  431. package/docs/mac/voice-overlay.md +52 -0
  432. package/docs/mac/voicewake.md +56 -0
  433. package/docs/mac/webchat.md +27 -0
  434. package/docs/mac/xpc.md +40 -0
  435. package/docs/models.md +90 -0
  436. package/docs/nix.md +49 -0
  437. package/docs/nodes.md +157 -0
  438. package/docs/onboarding-config-protocol.md +29 -0
  439. package/docs/onboarding.md +185 -0
  440. package/docs/presence.md +133 -0
  441. package/docs/queue.md +78 -0
  442. package/docs/refactor/browser-control-simplification.md +58 -0
  443. package/docs/refactor/canvas-a2ui.md +93 -0
  444. package/docs/refactor/cli-unification.md +64 -0
  445. package/docs/refactor/gateway-client.md +31 -0
  446. package/docs/refactor/gateway.md +99 -0
  447. package/docs/refactor/new-arch.md +171 -0
  448. package/docs/refactor/tui.md +26 -0
  449. package/docs/refactor/web-gateway-troubleshooting.md +37 -0
  450. package/docs/refactor/webagent-session.md +46 -0
  451. package/docs/remote-gateway-readme.md +148 -0
  452. package/docs/remote.md +66 -0
  453. package/docs/research/memory.md +227 -0
  454. package/docs/rpc.md +35 -0
  455. package/docs/security.md +168 -0
  456. package/docs/session-tool.md +119 -0
  457. package/docs/session.md +84 -0
  458. package/docs/sessions.md +8 -0
  459. package/docs/setup.md +118 -0
  460. package/docs/signal.md +113 -0
  461. package/docs/skills-config.md +58 -0
  462. package/docs/skills.md +149 -0
  463. package/docs/slack.md +158 -0
  464. package/docs/surface.md +20 -0
  465. package/docs/tailscale.md +71 -0
  466. package/docs/talk.md +79 -0
  467. package/docs/telegram.md +90 -0
  468. package/docs/templates/AGENTS.md +126 -0
  469. package/docs/templates/BOOTSTRAP.md +53 -0
  470. package/docs/templates/IDENTITY.md +17 -0
  471. package/docs/templates/SOUL.md +41 -0
  472. package/docs/templates/TOOLS.md +41 -0
  473. package/docs/templates/USER.md +22 -0
  474. package/docs/test.md +35 -0
  475. package/docs/thinking.md +46 -0
  476. package/docs/tools.md +248 -0
  477. package/docs/troubleshooting.md +227 -0
  478. package/docs/tui.md +69 -0
  479. package/docs/typebox.md +42 -0
  480. package/docs/voicewake.md +61 -0
  481. package/docs/web.md +115 -0
  482. package/docs/webchat.md +34 -0
  483. package/docs/webhook.md +132 -0
  484. package/docs/whatsapp-clawd.jpg +0 -0
  485. package/docs/whatsapp.md +142 -0
  486. package/docs/wizard.md +158 -0
  487. package/package.json +186 -0
  488. package/skills/apple-notes/SKILL.md +50 -0
  489. package/skills/apple-reminders/SKILL.md +67 -0
  490. package/skills/bear-notes/SKILL.md +79 -0
  491. package/skills/bird/SKILL.md +25 -0
  492. package/skills/blogwatcher/SKILL.md +46 -0
  493. package/skills/blucli/SKILL.md +27 -0
  494. package/skills/brave-search/SKILL.md +30 -0
  495. package/skills/brave-search/scripts/content.mjs +53 -0
  496. package/skills/brave-search/scripts/search.mjs +79 -0
  497. package/skills/camsnap/SKILL.md +25 -0
  498. package/skills/clawdhub/SKILL.md +53 -0
  499. package/skills/coding-agent/SKILL.md +275 -0
  500. package/skills/discord/SKILL.md +369 -0
  501. package/skills/eightctl/SKILL.md +29 -0
  502. package/skills/food-order/SKILL.md +41 -0
  503. package/skills/gemini/SKILL.md +23 -0
  504. package/skills/gifgrep/SKILL.md +47 -0
  505. package/skills/github/SKILL.md +47 -0
  506. package/skills/gog/SKILL.md +36 -0
  507. package/skills/goplaces/SKILL.md +30 -0
  508. package/skills/imsg/SKILL.md +25 -0
  509. package/skills/local-places/SERVER_README.md +101 -0
  510. package/skills/local-places/SKILL.md +91 -0
  511. package/skills/local-places/pyproject.toml +27 -0
  512. package/skills/local-places/src/local_places/__init__.py +2 -0
  513. package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
  514. package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
  515. package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
  516. package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
  517. package/skills/local-places/src/local_places/google_places.py +314 -0
  518. package/skills/local-places/src/local_places/main.py +65 -0
  519. package/skills/local-places/src/local_places/schemas.py +107 -0
  520. package/skills/mcporter/SKILL.md +38 -0
  521. package/skills/nano-banana-pro/SKILL.md +29 -0
  522. package/skills/nano-banana-pro/scripts/generate_image.py +167 -0
  523. package/skills/nano-pdf/SKILL.md +20 -0
  524. package/skills/notion/SKILL.md +156 -0
  525. package/skills/obsidian/SKILL.md +55 -0
  526. package/skills/openai-image-gen/SKILL.md +31 -0
  527. package/skills/openai-image-gen/scripts/gen.py +173 -0
  528. package/skills/openai-whisper/SKILL.md +19 -0
  529. package/skills/openai-whisper-api/SKILL.md +43 -0
  530. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  531. package/skills/openhue/SKILL.md +30 -0
  532. package/skills/oracle/SKILL.md +105 -0
  533. package/skills/ordercli/SKILL.md +47 -0
  534. package/skills/peekaboo/SKILL.md +153 -0
  535. package/skills/qmd/SKILL.md +26 -0
  536. package/skills/sag/SKILL.md +62 -0
  537. package/skills/slack/SKILL.md +143 -0
  538. package/skills/songsee/SKILL.md +29 -0
  539. package/skills/sonoscli/SKILL.md +26 -0
  540. package/skills/spotify-player/SKILL.md +34 -0
  541. package/skills/summarize/SKILL.md +49 -0
  542. package/skills/things-mac/SKILL.md +61 -0
  543. package/skills/tmux/SKILL.md +121 -0
  544. package/skills/tmux/scripts/find-sessions.sh +112 -0
  545. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  546. package/skills/trello/SKILL.md +84 -0
  547. package/skills/video-frames/SKILL.md +29 -0
  548. package/skills/video-frames/scripts/frame.sh +81 -0
  549. package/skills/wacli/SKILL.md +42 -0
  550. package/skills/weather/SKILL.md +49 -0
@@ -0,0 +1,119 @@
1
+ ---
2
+ summary: "Agent session tools for listing sessions, fetching history, and sending cross-session messages"
3
+ read_when:
4
+ - Adding or modifying session tools
5
+ ---
6
+
7
+ # Session Tools
8
+
9
+ Goal: small, hard-to-misuse tool surface so agents can list sessions, fetch history, and send to another session.
10
+
11
+ ## Tool Names
12
+ - `sessions_list`
13
+ - `sessions_history`
14
+ - `sessions_send`
15
+
16
+ ## Key Model
17
+ - Main direct chat bucket is always the literal key `"main"`.
18
+ - Group chats use `surface:group:<id>` or `surface:channel:<id>`.
19
+ - Cron jobs use `cron:<job.id>`.
20
+ - Hooks use `hook:<uuid>` unless explicitly set.
21
+ - Node bridge uses `node-<nodeId>` unless explicitly set.
22
+
23
+ `global` and `unknown` are internal-only and never listed. If `session.scope = "global"`, we alias it to `main` for all tools so callers never see `global`.
24
+
25
+ ## sessions_list
26
+ List sessions as an array of rows.
27
+
28
+ Parameters:
29
+ - `kinds?: string[]` filter: any of `"main" | "group" | "cron" | "hook" | "node" | "other"`
30
+ - `limit?: number` max rows (default: server default, clamp e.g. 200)
31
+ - `activeMinutes?: number` only sessions updated within N minutes
32
+ - `messageLimit?: number` 0 = no messages (default 0); >0 = include last N messages
33
+
34
+ Behavior:
35
+ - `messageLimit > 0` fetches `chat.history` per session and includes the last N messages.
36
+ - Tool results are filtered out in list output; use `sessions_history` for tool messages.
37
+
38
+ Row shape (JSON):
39
+ - `key`: session key (string)
40
+ - `kind`: `main | group | cron | hook | node | other`
41
+ - `provider`: `whatsapp | telegram | discord | signal | imessage | webchat | internal | unknown`
42
+ - `displayName` (group display label if available)
43
+ - `updatedAt` (ms)
44
+ - `sessionId`
45
+ - `model`, `contextTokens`, `totalTokens`
46
+ - `thinkingLevel`, `verboseLevel`, `systemSent`, `abortedLastRun`
47
+ - `sendPolicy` (session override if set)
48
+ - `lastChannel`, `lastTo`
49
+ - `transcriptPath` (best-effort path derived from store dir + sessionId)
50
+ - `messages?` (only when `messageLimit > 0`)
51
+
52
+ ## sessions_history
53
+ Fetch transcript for one session.
54
+
55
+ Parameters:
56
+ - `sessionKey` (required)
57
+ - `limit?: number` max messages (server clamps)
58
+ - `includeTools?: boolean` (default false)
59
+
60
+ Behavior:
61
+ - `includeTools=false` filters `role: "toolResult"` messages.
62
+ - Returns messages array in the raw transcript format.
63
+
64
+ ## sessions_send
65
+ Send a message into another session.
66
+
67
+ Parameters:
68
+ - `sessionKey` (required)
69
+ - `message` (required)
70
+ - `timeoutSeconds?: number` (default >0; 0 = fire-and-forget)
71
+
72
+ Behavior:
73
+ - `timeoutSeconds = 0`: enqueue and return `{ runId, status: "accepted" }`.
74
+ - `timeoutSeconds > 0`: wait up to N seconds for completion, then return `{ runId, status: "ok", reply }`.
75
+ - If wait times out: `{ runId, status: "timeout", error }`. Run continues; call `sessions_history` later.
76
+ - If the run fails: `{ runId, status: "error", error }`.
77
+ - Waits via gateway `agent.wait` (server-side) so reconnects don't drop the wait.
78
+ - Agent-to-agent message context is injected for the primary run.
79
+ - After the primary run completes, Clawdbot runs a **reply-back loop**:
80
+ - Round 2+ alternates between requester and target agents.
81
+ - Reply exactly `REPLY_SKIP` to stop the ping‑pong.
82
+ - Max turns is `session.agentToAgent.maxPingPongTurns` (0–5, default 5).
83
+ - Once the loop ends, Clawdbot runs the **agent‑to‑agent announce step** (target agent only):
84
+ - Reply exactly `ANNOUNCE_SKIP` to stay silent.
85
+ - Any other reply is sent to the target channel.
86
+ - Announce step includes the original request + round‑1 reply + latest ping‑pong reply.
87
+
88
+ ## Provider Field
89
+ - For groups, `provider` is the `surface` recorded on the session entry.
90
+ - For direct chats, `provider` maps from `lastChannel`.
91
+ - For cron/hook/node, `provider` is `internal`.
92
+ - If missing, `provider` is `unknown`.
93
+
94
+ ## Security / Send Policy
95
+ Policy-based blocking by surface/chat type (not per session id).
96
+
97
+ ```json
98
+ {
99
+ "session": {
100
+ "sendPolicy": {
101
+ "rules": [
102
+ {
103
+ "match": { "surface": "discord", "chatType": "group" },
104
+ "action": "deny"
105
+ }
106
+ ],
107
+ "default": "allow"
108
+ }
109
+ }
110
+ }
111
+ ```
112
+
113
+ Runtime override (per session entry):
114
+ - `sendPolicy: "allow" | "deny"` (unset = inherit config)
115
+ - Settable via `sessions.patch` or owner-only `/send on|off|inherit`.
116
+
117
+ Enforcement points:
118
+ - `chat.send` / `agent` (gateway)
119
+ - auto-reply delivery logic
@@ -0,0 +1,84 @@
1
+ ---
2
+ summary: "Session management rules, keys, and persistence for chats"
3
+ read_when:
4
+ - Modifying session handling or storage
5
+ ---
6
+ # Session Management
7
+
8
+ Clawdbot treats **one session as primary**. The canonical key is fixed to `main` for direct chats (or `global` when scope is global); no configuration is required. `session.mainKey` is ignored. Older/local sessions can stay on disk, but only the primary key is used for desktop/web chat and direct agent calls.
9
+
10
+ ## Gateway is the source of truth
11
+ All session state is **owned by the gateway** (the “master” Clawdbot). UI clients (macOS app, WebChat, etc.) must query the gateway for session lists and token counts instead of reading local files.
12
+
13
+ - In **remote mode**, the session store you care about lives on the remote gateway host, not your Mac.
14
+ - Token counts shown in UIs come from the gateway’s store fields (`inputTokens`, `outputTokens`, `totalTokens`, `contextTokens`). Clients do not parse JSONL transcripts to “fix up” totals.
15
+
16
+ ## Where state lives
17
+ - On the **gateway host**:
18
+ - Store file: `~/.clawdbot/sessions/sessions.json` (legacy: `~/.clawdbot/sessions.json`).
19
+ - Transcripts: `~/.clawdbot/sessions/<SessionId>.jsonl` (one file per session id).
20
+ - The store is a map `sessionKey -> { sessionId, updatedAt, ... }`. Deleting entries is safe; they are recreated on demand.
21
+ - Group entries may include `displayName`, `surface`, `subject`, `room`, and `space` to label sessions in UIs.
22
+ - Clawdbot does **not** read legacy Pi/Tau session folders.
23
+
24
+ ## Mapping transports → session keys
25
+ - Direct chats (WhatsApp, Telegram, Discord, desktop Web Chat) all collapse to the **primary key** so they share context.
26
+ - Multiple phone numbers can map to that same key; they act as transports into the same conversation.
27
+ - Group chats isolate state with `surface:group:<id>` keys (rooms/channels use `surface:channel:<id>`); do not reuse the primary key for groups. (Discord display names show `discord:<guildSlug>#<channelSlug>`.)
28
+ - Legacy `group:<surface>:<id>` and `group:<id>` keys are still recognized.
29
+ - Other sources:
30
+ - Cron jobs: `cron:<job.id>`
31
+ - Webhooks: `hook:<uuid>` (unless explicitly set by the hook)
32
+ - Node bridge runs: `node-<nodeId>`
33
+
34
+ ## Lifecyle
35
+ - Idle expiry: `session.idleMinutes` (default 60). After the timeout a new `sessionId` is minted on the next message.
36
+ - Reset triggers: exact `/new` or `/reset` (plus any extras in `resetTriggers`) start a fresh session id and pass the remainder of the message through. If `/new` or `/reset` is sent alone, Clawdbot runs a short “hello” greeting turn to confirm the reset.
37
+ - Manual reset: delete specific keys from the store or remove the JSONL transcript; the next message recreates them.
38
+
39
+ ## Send policy (optional)
40
+ Block delivery for specific session types without listing individual ids.
41
+
42
+ ```json5
43
+ {
44
+ session: {
45
+ sendPolicy: {
46
+ rules: [
47
+ { action: "deny", match: { surface: "discord", chatType: "group" } },
48
+ { action: "deny", match: { keyPrefix: "cron:" } }
49
+ ],
50
+ default: "allow"
51
+ }
52
+ }
53
+ }
54
+ ```
55
+
56
+ Runtime override (owner only):
57
+ - `/send on` → allow for this session
58
+ - `/send off` → deny for this session
59
+ - `/send inherit` → clear override and use config rules
60
+
61
+ ## Configuration (optional rename example)
62
+ ```json5
63
+ // ~/.clawdbot/clawdbot.json
64
+ {
65
+ session: {
66
+ scope: "per-sender", // keep group keys separate
67
+ idleMinutes: 120,
68
+ resetTriggers: ["/new", "/reset"],
69
+ store: "~/.clawdbot/sessions/sessions.json",
70
+ // mainKey is ignored; primary key is fixed to "main"
71
+ }
72
+ }
73
+ ```
74
+
75
+ ## Inspecting
76
+ - `pnpm clawdbot status` — shows store path and recent sessions.
77
+ - `pnpm clawdbot sessions --json` — dumps every entry (filter with `--active <minutes>`).
78
+ - `pnpm clawdbot gateway call sessions.list --params '{}'` — fetch sessions from the running gateway (use `--url`/`--token` for remote gateway access).
79
+ - Send `/status` in chat to see whether the agent is reachable, how much of the session context is used, current thinking/verbose toggles, and when your WhatsApp web creds were last refreshed (helps spot relink needs).
80
+ - JSONL transcripts can be opened directly to review full turns.
81
+
82
+ ## Tips
83
+ - Keep the primary key dedicated to 1:1 traffic; let groups keep their own keys.
84
+ - When automating cleanup, delete individual keys instead of the whole store to preserve context elsewhere.
@@ -0,0 +1,8 @@
1
+ ---
2
+ summary: "Alias for session management docs"
3
+ read_when:
4
+ - You looked for docs/sessions.md; canonical doc lives in docs/session.md
5
+ ---
6
+ # Sessions
7
+
8
+ Canonical session management docs live in `docs/session.md`.
package/docs/setup.md ADDED
@@ -0,0 +1,118 @@
1
+ ---
2
+ summary: "Setup guide: keep your Clawdbot setup tailored while staying up-to-date"
3
+ read_when:
4
+ - Setting up a new machine
5
+ - You want “latest + greatest” without breaking your personal setup
6
+ ---
7
+
8
+ # Setup
9
+
10
+ Last updated: 2026-01-01
11
+
12
+ ## TL;DR
13
+ - **Tailoring lives outside the repo:** `~/clawd` (workspace) + `~/.clawdbot/clawdbot.json` (config).
14
+ - **Stable workflow:** install the macOS app; let it run the bundled Gateway.
15
+ - **Bleeding edge workflow:** run the Gateway yourself via `pnpm gateway:watch`, then point the macOS app at it using **Debug Settings → Gateway → Attach only**.
16
+
17
+ ## Prereqs (from source)
18
+ - Node `>=22`
19
+ - `pnpm`
20
+ - Docker (optional; only for containerized setup/e2e — see `docs/docker.md`)
21
+
22
+ ## Tailoring strategy (so updates don’t hurt)
23
+
24
+ If you want “100% tailored to me” *and* easy updates, keep your customization in:
25
+
26
+ - **Config:** `~/.clawdbot/clawdbot.json` (JSON/JSON5-ish)
27
+ - **Workspace:** `~/clawd` (skills, prompts, memories; make it a private git repo)
28
+
29
+ Bootstrap once:
30
+
31
+ ```bash
32
+ clawdbot setup
33
+ ```
34
+
35
+ From inside this repo, use the local CLI entry:
36
+
37
+ ```bash
38
+ pnpm clawdbot setup
39
+ ```
40
+
41
+ ## Stable workflow (macOS app first)
42
+
43
+ 1) Install + launch **Clawdbot.app** (menu bar).
44
+ 2) Complete the onboarding/permissions checklist (TCC prompts).
45
+ 3) Ensure Gateway is **Local** and running (the app manages it).
46
+ 4) Link surfaces (example: WhatsApp):
47
+
48
+ ```bash
49
+ clawdbot login
50
+ ```
51
+
52
+ 5) Sanity check:
53
+
54
+ ```bash
55
+ clawdbot health
56
+ ```
57
+
58
+ If onboarding is still WIP/broken on your build:
59
+ - Run `clawdbot setup`, then `clawdbot login`, then start the Gateway manually (`clawdbot gateway`).
60
+
61
+ ## Bleeding edge workflow (Gateway in a terminal)
62
+
63
+ Goal: work on the TypeScript Gateway, get hot reload, keep the macOS app UI attached.
64
+
65
+ ### 0) (Optional) Run the macOS app from source too
66
+
67
+ If you also want the macOS app on the bleeding edge:
68
+
69
+ ```bash
70
+ ./scripts/restart-mac.sh
71
+ ```
72
+
73
+ ### 1) Start the dev Gateway
74
+
75
+ ```bash
76
+ pnpm install
77
+ pnpm gateway:watch
78
+ ```
79
+
80
+ `gateway:watch` runs `src/index.ts gateway --force` and reloads on `src/**/*.ts` changes.
81
+
82
+ ### 2) Point the macOS app at your running Gateway
83
+
84
+ In **Clawdbot.app**:
85
+
86
+ - Connection Mode: **Local**
87
+ - Settings → **Debug Settings** → **Gateway** → enable **Attach only**
88
+
89
+ This makes the app **only connect to an already-running gateway** and **never spawn** its own.
90
+
91
+ ### 3) Verify
92
+
93
+ - In-app Gateway status should read **“Using existing gateway …”**
94
+ - Or via CLI:
95
+
96
+ ```bash
97
+ pnpm clawdbot health
98
+ ```
99
+
100
+ ### Common footguns
101
+ - **Attach only enabled, but nothing is running:** app shows “Attach-only enabled; no gateway to attach”.
102
+ - **Wrong port:** Gateway WS defaults to `ws://127.0.0.1:18789`; keep app + CLI on the same port.
103
+ - **Where state lives:**
104
+ - Credentials: `~/.clawdbot/credentials/`
105
+ - Sessions/logs: `~/.clawdbot/sessions/`
106
+
107
+ ## Updating (without wrecking your setup)
108
+
109
+ - Keep `~/clawd` and `~/.clawdbot/` as “your stuff”; don’t put personal prompts/config into the `clawdbot` repo.
110
+ - Updating source: `git pull` + `pnpm install` (when lockfile changed) + keep using `pnpm gateway:watch`.
111
+
112
+ ## Related docs
113
+
114
+ - `docs/gateway.md` (Gateway runbook; flags, supervision, ports)
115
+ - `docs/configuration.md` (config schema + examples)
116
+ - `docs/discord.md` and `docs/telegram.md` (reply tags + replyToMode settings)
117
+ - `docs/clawd.md` (personal assistant setup)
118
+ - `docs/clawdbot-mac.md` (macOS app behavior; gateway lifecycle + “Attach only”)
package/docs/signal.md ADDED
@@ -0,0 +1,113 @@
1
+ ---
2
+ summary: "Signal support via signal-cli (JSON-RPC + SSE), setup, and number model"
3
+ read_when:
4
+ - Setting up Signal support
5
+ - Debugging Signal send/receive
6
+ ---
7
+ # Signal (signal-cli)
8
+
9
+ Status: external CLI integration only. No libsignal embedding.
10
+
11
+ ## Why
12
+ - Signal OSS stack is GPL/AGPL; not compatible with Clawdbot MIT if bundled.
13
+ - signal-cli is unofficial; must stay up to date (Signal server churn).
14
+
15
+ ## The “number model” (important)
16
+ - Clawdbot is a **device** connected via `signal-cli`.
17
+ - If you run `signal-cli` on **your personal Signal account**, Clawdbot will **not** respond to messages sent from that same account (loop protection: ignore sender==account).
18
+ - Result: you **cannot** “text yourself” to chat with the AI.
19
+ - For “I text her, she texts me back” you want a **separate Signal account/number for the bot**:
20
+ - Bot number runs `signal-cli` (linked device)
21
+ - Your personal number is in `signal.allowFrom`
22
+ - You DM the bot number; Clawdbot replies back to you
23
+
24
+ You can still run Clawdbot on your own Signal account if your goal is “respond to other people as me”, but not for self-chat.
25
+
26
+ ## Model
27
+ - Run `signal-cli` as separate process (user-installed).
28
+ - Prefer `daemon --http=127.0.0.1:PORT` for JSON-RPC + SSE.
29
+ - Alternative: `jsonRpc` mode over stdin/stdout.
30
+
31
+ ## Quickstart (bot number)
32
+ 1) Install `signal-cli` (keep Java installed).
33
+ - If you use the CLI wizard, it can auto-install to `~/.clawdbot/tools/signal-cli/...`.
34
+ - If you want a pinned version (example: `v0.13.22`), install manually:
35
+ - Download the release asset for your platform from GitHub (tag `v0.13.22`).
36
+ - Extract it somewhere stable (example: `~/.clawdbot/tools/signal-cli/0.13.22/`).
37
+ - Set `signal.cliPath` to the extracted `signal-cli` binary path.
38
+ 2) Link the bot account as a device:
39
+ - Run: `signal-cli link -n "Clawdbot"`
40
+ - Scan QR in Signal: Settings → Linked Devices → Link New Device
41
+ - Verify: `signal-cli listAccounts` includes the bot E.164
42
+ 3) Configure `~/.clawdbot/clawdbot.json`:
43
+ ```json5
44
+ {
45
+ signal: {
46
+ enabled: true,
47
+ account: "+15551234567", // bot number (recommended)
48
+ cliPath: "signal-cli",
49
+ autoStart: true,
50
+ httpHost: "127.0.0.1",
51
+ httpPort: 8080,
52
+
53
+ // Who is allowed to talk to the bot
54
+ allowFrom: ["+15557654321"] // your personal number (or "*")
55
+ }
56
+ }
57
+ ```
58
+ 4) Run gateway; sanity probe:
59
+ - `clawdbot gateway call providers.status --params '{"probe":true}'`
60
+ - Expect `signal.probe.ok=true` and `signal.probe.version`.
61
+ 5) DM the bot number from your phone; Clawdbot replies.
62
+
63
+ ## “Do I need a separate number?”
64
+ - If you want “I text her and she texts me back”, yes: **use a separate Signal account/number for the bot**.
65
+ - Your personal account can run `signal-cli`, but you can’t self-chat (Signal loop protection; Clawdbot ignores sender==account).
66
+
67
+ If you have a second phone:
68
+ - Create/activate the bot number on that phone.
69
+ - Run `signal-cli link -n "Clawdbot"` on your Mac, scan the QR on the bot phone.
70
+ - Put your personal number in `signal.allowFrom`, then DM the bot number from your personal phone.
71
+
72
+ ## Endpoints (daemon --http)
73
+ - `POST /api/v1/rpc` JSON-RPC request (single or batch).
74
+ - `GET /api/v1/events` SSE stream of `receive` notifications.
75
+ - `GET /api/v1/check` health probe (200 = up).
76
+
77
+ ## Multi-account
78
+ - Start daemon without `-a`.
79
+ - Include `params.account` (E164) on JSON-RPC calls.
80
+ - SSE `?account=+E164` filters events; no param = all accounts.
81
+
82
+ ## Troubleshooting
83
+ - Gateway log coloring: `signal-cli: ...` lines are classified by severity; red means “treat this as an error”.
84
+ - `Failed to initialize HTTP Server` typically means the daemon can’t bind the HTTP port (already in use). Stop the other daemon or change `signal.httpPort`.
85
+
86
+ ## Minimal RPC surface
87
+ - `send` (recipient/groupId/username, message, attachments).
88
+ - `listGroups` (map group IDs).
89
+ - `subscribeReceive` / `unsubscribeReceive` (if manual receive).
90
+ - `startLink` / `finishLink` (optional device link flow).
91
+
92
+ ## Addressing (send targets)
93
+ - Direct: `signal:+15551234567` (or plain `+15551234567`)
94
+ - Groups: `signal:group:<groupId>`
95
+ - Usernames: `username:<name>` / `u:<name>`
96
+
97
+ ## Process plan (Clawdbot adapter)
98
+ 1) Detect `signal-cli` binary; refuse if missing.
99
+ 2) Launch daemon (HTTP preferred), store PID.
100
+ 3) Poll `/api/v1/check` until ready.
101
+ 4) Open SSE stream; parse `event: receive`.
102
+ 5) Translate receive payload into Clawdbot surface model.
103
+ 6) On SSE disconnect, backoff + reconnect.
104
+
105
+ ## Storage
106
+ - signal-cli data lives in `$XDG_DATA_HOME/signal-cli/data` or
107
+ `$HOME/.local/share/signal-cli/data`.
108
+
109
+ ## References (local)
110
+ - `~/Projects/oss/signal-cli/README.md`
111
+ - `~/Projects/oss/signal-cli/man/signal-cli-jsonrpc.5.adoc`
112
+ - `~/Projects/oss/signal-cli/src/main/java/org/asamk/signal/http/HttpServerHandler.java`
113
+ - `~/Projects/oss/signal-cli/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java`
@@ -0,0 +1,58 @@
1
+ ---
2
+ summary: "Skills config schema and examples"
3
+ read_when:
4
+ - Adding or modifying skills config
5
+ - Adjusting bundled allowlist or install behavior
6
+ ---
7
+ # Skills Config
8
+
9
+ All skills-related configuration lives under `skills` in `~/.clawdbot/clawdbot.json`.
10
+
11
+ ```json5
12
+ {
13
+ skills: {
14
+ allowBundled: ["brave-search", "gemini"],
15
+ load: {
16
+ extraDirs: [
17
+ "~/Projects/agent-scripts/skills",
18
+ "~/Projects/oss/some-skill-pack/skills"
19
+ ]
20
+ },
21
+ install: {
22
+ preferBrew: true,
23
+ nodeManager: "npm" // npm | pnpm | yarn | bun
24
+ },
25
+ entries: {
26
+ "nano-banana-pro": {
27
+ enabled: true,
28
+ apiKey: "GEMINI_KEY_HERE",
29
+ env: {
30
+ GEMINI_API_KEY: "GEMINI_KEY_HERE"
31
+ }
32
+ },
33
+ peekaboo: { enabled: true },
34
+ sag: { enabled: false }
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ ## Fields
41
+
42
+ - `allowBundled`: optional allowlist for **bundled** skills only. When set, only
43
+ bundled skills in the list are eligible (managed/workspace skills unaffected).
44
+ - `load.extraDirs`: additional skill directories to scan (lowest precedence).
45
+ - `install.preferBrew`: prefer brew installers when available (default: true).
46
+ - `install.nodeManager`: node installer preference (`npm` | `pnpm` | `yarn` | `bun`, default: npm).
47
+ - `entries.<skillKey>`: per-skill overrides.
48
+
49
+ Per-skill fields:
50
+ - `enabled`: set `false` to disable a skill even if it’s bundled/installed.
51
+ - `env`: environment variables injected for the agent run (only if not already set).
52
+ - `apiKey`: optional convenience for skills that declare a primary env var.
53
+
54
+ ## Notes
55
+
56
+ - Keys under `entries` map to the skill name by default. If a skill defines
57
+ `metadata.clawdbot.skillKey`, use that key instead.
58
+ - Changes to skills are picked up on the next new session.
package/docs/skills.md ADDED
@@ -0,0 +1,149 @@
1
+ ---
2
+ summary: "Skills: managed vs workspace, gating rules, and config/env wiring"
3
+ read_when:
4
+ - Adding or modifying skills
5
+ - Changing skill gating or load rules
6
+ ---
7
+ <!-- {% raw %} -->
8
+ # Skills (Clawdbot)
9
+
10
+ Clawdbot uses **AgentSkills-compatible** skill folders to teach the agent how to use tools. Each skill is a directory containing a `SKILL.md` with YAML frontmatter and instructions. Clawdbot loads **bundled skills** plus optional local overrides, and filters them at load time based on environment, config, and binary presence.
11
+
12
+ ## Locations and precedence
13
+
14
+ Skills are loaded from **three** places:
15
+
16
+ 1) **Bundled skills**: shipped with the install (npm package or Clawdbot.app)
17
+ 2) **Managed/local skills**: `~/.clawdbot/skills`
18
+ 3) **Workspace skills**: `<workspace>/skills`
19
+
20
+ If a skill name conflicts, precedence is:
21
+
22
+ `<workspace>/skills` (highest) → `~/.clawdbot/skills` → bundled skills (lowest)
23
+
24
+ Additionally, you can configure extra skill folders (lowest precedence) via
25
+ `skills.load.extraDirs` in `~/.clawdbot/clawdbot.json`.
26
+
27
+ ## Format (AgentSkills + Pi-compatible)
28
+
29
+ `SKILL.md` must include at least:
30
+
31
+ ```markdown
32
+ ---
33
+ name: nano-banana-pro
34
+ description: Generate or edit images via Gemini 3 Pro Image
35
+ ---
36
+ ```
37
+
38
+ Notes:
39
+ - We follow the AgentSkills spec for layout/intent.
40
+ - The parser used by the embedded agent supports **single-line** frontmatter keys only.
41
+ - `metadata` should be a **single-line JSON object**.
42
+ - Use `{baseDir}` in instructions to reference the skill folder path.
43
+ - Optional frontmatter keys:
44
+ - `homepage` — URL surfaced as “Website” in the macOS Skills UI (also supported via `metadata.clawdbot.homepage`).
45
+
46
+ ## Gating (load-time filters)
47
+
48
+ Clawdbot **filters skills at load time** using `metadata` (single-line JSON):
49
+
50
+ ```markdown
51
+ ---
52
+ name: nano-banana-pro
53
+ description: Generate or edit images via Gemini 3 Pro Image
54
+ metadata: {"clawdbot":{"requires":{"bins":["uv"],"env":["GEMINI_API_KEY"],"config":["browser.enabled"]},"primaryEnv":"GEMINI_API_KEY"}}
55
+ ---
56
+ ```
57
+
58
+ Fields under `metadata.clawdbot`:
59
+ - `always: true` — always include the skill (skip other gates).
60
+ - `emoji` — optional emoji used by the macOS Skills UI.
61
+ - `homepage` — optional URL shown as “Website” in the macOS Skills UI.
62
+ - `os` — optional list of platforms (`darwin`, `linux`, `win32`). If set, the skill is only eligible on those OSes.
63
+ - `requires.bins` — list; each must exist on `PATH`.
64
+ - `requires.anyBins` — list; at least one must exist on `PATH`.
65
+ - `requires.env` — list; env var must exist **or** be provided in config.
66
+ - `requires.config` — list of `clawdbot.json` paths that must be truthy.
67
+ - `primaryEnv` — env var name associated with `skills.entries.<name>.apiKey`.
68
+ - `install` — optional array of installer specs used by the macOS Skills UI (brew/node/go/uv).
69
+
70
+ Installer example:
71
+
72
+ ```markdown
73
+ ---
74
+ name: gemini
75
+ description: Use Gemini CLI for coding assistance and Google search lookups.
76
+ metadata: {"clawdbot":{"emoji":"♊️","requires":{"bins":["gemini"]},"install":[{"id":"brew","kind":"brew","formula":"gemini-cli","bins":["gemini"],"label":"Install Gemini CLI (brew)"}]}}
77
+ ---
78
+ ```
79
+
80
+ Notes:
81
+ - If multiple installers are listed, the gateway picks a **single** preferred option (brew when available, otherwise node).
82
+ - Node installs honor `skills.install.nodeManager` in `clawdbot.json` (default: npm; options: npm/pnpm/yarn/bun).
83
+ - Go installs: if `go` is missing and `brew` is available, the gateway installs Go via Homebrew first and sets `GOBIN` to Homebrew’s `bin` when possible.
84
+
85
+ If no `metadata.clawdbot` is present, the skill is always eligible (unless
86
+ disabled in config or blocked by `skills.allowBundled` for bundled skills).
87
+
88
+ ## Config overrides (`~/.clawdbot/clawdbot.json`)
89
+
90
+ Bundled/managed skills can be toggled and supplied with env values:
91
+
92
+ ```json5
93
+ {
94
+ skills: {
95
+ entries: {
96
+ "nano-banana-pro": {
97
+ enabled: true,
98
+ apiKey: "GEMINI_KEY_HERE",
99
+ env: {
100
+ GEMINI_API_KEY: "GEMINI_KEY_HERE"
101
+ }
102
+ },
103
+ peekaboo: { enabled: true },
104
+ sag: { enabled: false }
105
+ }
106
+ }
107
+ }
108
+ ```
109
+
110
+ Note: if the skill name contains hyphens, quote the key (JSON5 allows quoted keys).
111
+
112
+ Config keys match the **skill name** by default. If a skill defines
113
+ `metadata.clawdbot.skillKey`, use that key under `skills.entries`.
114
+
115
+ Rules:
116
+ - `enabled: false` disables the skill even if it’s bundled/installed.
117
+ - `env`: injected **only if** the variable isn’t already set in the process.
118
+ - `apiKey`: convenience for skills that declare `metadata.clawdbot.primaryEnv`.
119
+ - `allowBundled`: optional allowlist for **bundled** skills only. If set, only
120
+ bundled skills in the list are eligible (managed/workspace skills unaffected).
121
+
122
+ ## Environment injection (per agent run)
123
+
124
+ When an agent run starts, Clawdbot:
125
+ 1) Reads skill metadata.
126
+ 2) Applies any `skills.entries.<key>.env` or `skills.entries.<key>.apiKey` to
127
+ `process.env`.
128
+ 3) Builds the system prompt with **eligible** skills.
129
+ 4) Restores the original environment after the run ends.
130
+
131
+ This is **scoped to the agent run**, not a global shell environment.
132
+
133
+ ## Session snapshot (performance)
134
+
135
+ Clawdbot snapshots the eligible skills **when a session starts** and reuses that list for subsequent turns in the same session. Changes to skills or config take effect on the next new session.
136
+
137
+ ## Managed skills lifecycle
138
+
139
+ Clawdbot ships a baseline set of skills as **bundled skills** as part of the
140
+ install (npm package or Clawdbot.app). `~/.clawdbot/skills` exists for local
141
+ overrides (for example, pinning/patching a skill without changing the bundled
142
+ copy). Workspace skills are user-owned and override both on name conflicts.
143
+
144
+ ## Config reference
145
+
146
+ See `docs/skills-config.md` for the full configuration schema.
147
+
148
+ ---
149
+ <!-- {% endraw %} -->