moltbot-termux 2026.1.27-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 (2608) hide show
  1. package/CHANGELOG.md +1200 -0
  2. package/LICENSE +21 -0
  3. package/README-header.png +0 -0
  4. package/README.md +520 -0
  5. package/assets/avatar-placeholder.svg +19 -0
  6. package/assets/chrome-extension/README.md +22 -0
  7. package/assets/chrome-extension/background.js +438 -0
  8. package/assets/chrome-extension/icons/icon128.png +0 -0
  9. package/assets/chrome-extension/icons/icon16.png +0 -0
  10. package/assets/chrome-extension/icons/icon32.png +0 -0
  11. package/assets/chrome-extension/icons/icon48.png +0 -0
  12. package/assets/chrome-extension/manifest.json +25 -0
  13. package/assets/chrome-extension/options.html +196 -0
  14. package/assets/chrome-extension/options.js +59 -0
  15. package/assets/dmg-background-small.png +0 -0
  16. package/assets/dmg-background.png +0 -0
  17. package/dist/acp/client.js +144 -0
  18. package/dist/acp/commands.js +38 -0
  19. package/dist/acp/event-mapper.js +70 -0
  20. package/dist/acp/index.js +2 -0
  21. package/dist/acp/meta.js +30 -0
  22. package/dist/acp/server.js +131 -0
  23. package/dist/acp/session-mapper.js +65 -0
  24. package/dist/acp/session.js +68 -0
  25. package/dist/acp/translator.js +344 -0
  26. package/dist/acp/types.js +6 -0
  27. package/dist/agents/agent-paths.js +19 -0
  28. package/dist/agents/agent-scope.js +118 -0
  29. package/dist/agents/anthropic-payload-log.js +160 -0
  30. package/dist/agents/apply-patch-update.js +145 -0
  31. package/dist/agents/apply-patch.js +355 -0
  32. package/dist/agents/auth-health.js +165 -0
  33. package/dist/agents/auth-profiles/constants.js +20 -0
  34. package/dist/agents/auth-profiles/display.js +10 -0
  35. package/dist/agents/auth-profiles/doctor.js +31 -0
  36. package/dist/agents/auth-profiles/external-cli-sync.js +62 -0
  37. package/dist/agents/auth-profiles/oauth.js +218 -0
  38. package/dist/agents/auth-profiles/order.js +166 -0
  39. package/dist/agents/auth-profiles/paths.js +27 -0
  40. package/dist/agents/auth-profiles/profiles.js +63 -0
  41. package/dist/agents/auth-profiles/repair.js +120 -0
  42. package/dist/agents/auth-profiles/session-override.js +97 -0
  43. package/dist/agents/auth-profiles/store.js +323 -0
  44. package/dist/agents/auth-profiles/types.js +1 -0
  45. package/dist/agents/auth-profiles/usage.js +235 -0
  46. package/dist/agents/auth-profiles.js +10 -0
  47. package/dist/agents/bash-process-registry.js +177 -0
  48. package/dist/agents/bash-tools.exec.js +1176 -0
  49. package/dist/agents/bash-tools.js +2 -0
  50. package/dist/agents/bash-tools.process.js +569 -0
  51. package/dist/agents/bash-tools.shared.js +198 -0
  52. package/dist/agents/bedrock-discovery.js +157 -0
  53. package/dist/agents/bootstrap-files.js +28 -0
  54. package/dist/agents/bootstrap-hooks.js +19 -0
  55. package/dist/agents/cache-trace.js +185 -0
  56. package/dist/agents/channel-tools.js +58 -0
  57. package/dist/agents/chutes-oauth.js +133 -0
  58. package/dist/agents/claude-cli-runner.js +3 -0
  59. package/dist/agents/cli-backends.js +126 -0
  60. package/dist/agents/cli-credentials.js +360 -0
  61. package/dist/agents/cli-runner/helpers.js +409 -0
  62. package/dist/agents/cli-runner.js +265 -0
  63. package/dist/agents/cli-session.js +27 -0
  64. package/dist/agents/compaction.js +229 -0
  65. package/dist/agents/context-window-guard.js +37 -0
  66. package/dist/agents/context.js +34 -0
  67. package/dist/agents/date-time.js +158 -0
  68. package/dist/agents/defaults.js +6 -0
  69. package/dist/agents/docs-path.js +20 -0
  70. package/dist/agents/failover-error.js +164 -0
  71. package/dist/agents/identity-avatar.js +82 -0
  72. package/dist/agents/identity-file.js +80 -0
  73. package/dist/agents/identity.js +61 -0
  74. package/dist/agents/lanes.js +2 -0
  75. package/dist/agents/live-auth-keys.js +70 -0
  76. package/dist/agents/live-model-filter.js +70 -0
  77. package/dist/agents/memory-search.js +189 -0
  78. package/dist/agents/minimax-vlm.js +81 -0
  79. package/dist/agents/model-auth.js +273 -0
  80. package/dist/agents/model-catalog.js +95 -0
  81. package/dist/agents/model-compat.js +17 -0
  82. package/dist/agents/model-fallback.js +268 -0
  83. package/dist/agents/model-scan.js +350 -0
  84. package/dist/agents/model-selection.js +284 -0
  85. package/dist/agents/models-config.js +111 -0
  86. package/dist/agents/models-config.providers.js +423 -0
  87. package/dist/agents/moltbot-tools.js +121 -0
  88. package/dist/agents/opencode-zen-models.js +254 -0
  89. package/dist/agents/pi-embedded-block-chunker.js +209 -0
  90. package/dist/agents/pi-embedded-helpers/bootstrap.js +159 -0
  91. package/dist/agents/pi-embedded-helpers/errors.js +456 -0
  92. package/dist/agents/pi-embedded-helpers/google.js +12 -0
  93. package/dist/agents/pi-embedded-helpers/images.js +92 -0
  94. package/dist/agents/pi-embedded-helpers/messaging-dedupe.js +35 -0
  95. package/dist/agents/pi-embedded-helpers/openai.js +98 -0
  96. package/dist/agents/pi-embedded-helpers/thinking.js +32 -0
  97. package/dist/agents/pi-embedded-helpers/turns.js +95 -0
  98. package/dist/agents/pi-embedded-helpers/types.js +1 -0
  99. package/dist/agents/pi-embedded-helpers.js +9 -0
  100. package/dist/agents/pi-embedded-messaging.js +24 -0
  101. package/dist/agents/pi-embedded-runner/abort.js +9 -0
  102. package/dist/agents/pi-embedded-runner/cache-ttl.js +45 -0
  103. package/dist/agents/pi-embedded-runner/compact.js +405 -0
  104. package/dist/agents/pi-embedded-runner/extensions.js +64 -0
  105. package/dist/agents/pi-embedded-runner/extra-params.js +70 -0
  106. package/dist/agents/pi-embedded-runner/google.js +302 -0
  107. package/dist/agents/pi-embedded-runner/history.js +61 -0
  108. package/dist/agents/pi-embedded-runner/lanes.js +11 -0
  109. package/dist/agents/pi-embedded-runner/logger.js +2 -0
  110. package/dist/agents/pi-embedded-runner/model.js +76 -0
  111. package/dist/agents/pi-embedded-runner/run/attempt.js +752 -0
  112. package/dist/agents/pi-embedded-runner/run/images.js +344 -0
  113. package/dist/agents/pi-embedded-runner/run/params.js +1 -0
  114. package/dist/agents/pi-embedded-runner/run/payloads.js +162 -0
  115. package/dist/agents/pi-embedded-runner/run/types.js +1 -0
  116. package/dist/agents/pi-embedded-runner/run.js +561 -0
  117. package/dist/agents/pi-embedded-runner/runs.js +107 -0
  118. package/dist/agents/pi-embedded-runner/sandbox-info.js +22 -0
  119. package/dist/agents/pi-embedded-runner/session-manager-cache.js +54 -0
  120. package/dist/agents/pi-embedded-runner/session-manager-init.js +31 -0
  121. package/dist/agents/pi-embedded-runner/system-prompt.js +33 -0
  122. package/dist/agents/pi-embedded-runner/tool-split.js +8 -0
  123. package/dist/agents/pi-embedded-runner/types.js +1 -0
  124. package/dist/agents/pi-embedded-runner/utils.js +25 -0
  125. package/dist/agents/pi-embedded-runner.js +10 -0
  126. package/dist/agents/pi-embedded-subscribe.handlers.js +45 -0
  127. package/dist/agents/pi-embedded-subscribe.handlers.lifecycle.js +86 -0
  128. package/dist/agents/pi-embedded-subscribe.handlers.messages.js +230 -0
  129. package/dist/agents/pi-embedded-subscribe.handlers.tools.js +176 -0
  130. package/dist/agents/pi-embedded-subscribe.handlers.types.js +1 -0
  131. package/dist/agents/pi-embedded-subscribe.js +454 -0
  132. package/dist/agents/pi-embedded-subscribe.raw-stream.js +27 -0
  133. package/dist/agents/pi-embedded-subscribe.tools.js +166 -0
  134. package/dist/agents/pi-embedded-subscribe.types.js +1 -0
  135. package/dist/agents/pi-embedded-utils.js +341 -0
  136. package/dist/agents/pi-embedded.js +1 -0
  137. package/dist/agents/pi-extensions/compaction-safeguard-runtime.js +20 -0
  138. package/dist/agents/pi-extensions/compaction-safeguard.js +252 -0
  139. package/dist/agents/pi-extensions/context-pruning/extension.js +32 -0
  140. package/dist/agents/pi-extensions/context-pruning/pruner.js +263 -0
  141. package/dist/agents/pi-extensions/context-pruning/runtime.js +21 -0
  142. package/dist/agents/pi-extensions/context-pruning/settings.js +71 -0
  143. package/dist/agents/pi-extensions/context-pruning/tools.js +44 -0
  144. package/dist/agents/pi-extensions/context-pruning.js +9 -0
  145. package/dist/agents/pi-settings.js +19 -0
  146. package/dist/agents/pi-tool-definition-adapter.js +74 -0
  147. package/dist/agents/pi-tools.abort.js +41 -0
  148. package/dist/agents/pi-tools.js +297 -0
  149. package/dist/agents/pi-tools.policy.js +245 -0
  150. package/dist/agents/pi-tools.read.js +227 -0
  151. package/dist/agents/pi-tools.schema.js +147 -0
  152. package/dist/agents/pi-tools.types.js +1 -0
  153. package/dist/agents/pty-dsr.js +13 -0
  154. package/dist/agents/pty-keys.js +235 -0
  155. package/dist/agents/sandbox/browser-bridges.js +1 -0
  156. package/dist/agents/sandbox/browser.js +176 -0
  157. package/dist/agents/sandbox/config-hash.js +45 -0
  158. package/dist/agents/sandbox/config.js +114 -0
  159. package/dist/agents/sandbox/constants.js +45 -0
  160. package/dist/agents/sandbox/context.js +117 -0
  161. package/dist/agents/sandbox/docker.js +272 -0
  162. package/dist/agents/sandbox/manage.js +91 -0
  163. package/dist/agents/sandbox/prune.js +87 -0
  164. package/dist/agents/sandbox/registry.js +71 -0
  165. package/dist/agents/sandbox/runtime-status.js +90 -0
  166. package/dist/agents/sandbox/shared.js +38 -0
  167. package/dist/agents/sandbox/tool-policy.js +106 -0
  168. package/dist/agents/sandbox/types.docker.js +1 -0
  169. package/dist/agents/sandbox/types.js +1 -0
  170. package/dist/agents/sandbox/workspace.js +39 -0
  171. package/dist/agents/sandbox-paths.js +68 -0
  172. package/dist/agents/sandbox.js +7 -0
  173. package/dist/agents/schema/clean-for-gemini.js +295 -0
  174. package/dist/agents/schema/typebox.js +22 -0
  175. package/dist/agents/session-slug.js +134 -0
  176. package/dist/agents/session-tool-result-guard-wrapper.js +34 -0
  177. package/dist/agents/session-tool-result-guard.js +99 -0
  178. package/dist/agents/session-transcript-repair.js +174 -0
  179. package/dist/agents/session-write-lock.js +170 -0
  180. package/dist/agents/shell-utils.js +99 -0
  181. package/dist/agents/skills/bundled-dir.js +30 -0
  182. package/dist/agents/skills/config.js +142 -0
  183. package/dist/agents/skills/env-overrides.js +67 -0
  184. package/dist/agents/skills/frontmatter.js +120 -0
  185. package/dist/agents/skills/plugin-skills.js +55 -0
  186. package/dist/agents/skills/refresh.js +135 -0
  187. package/dist/agents/skills/serialize.js +13 -0
  188. package/dist/agents/skills/types.js +1 -0
  189. package/dist/agents/skills/workspace.js +272 -0
  190. package/dist/agents/skills-install.js +390 -0
  191. package/dist/agents/skills-status.js +183 -0
  192. package/dist/agents/skills.js +13 -0
  193. package/dist/agents/subagent-announce-queue.js +129 -0
  194. package/dist/agents/subagent-announce.js +391 -0
  195. package/dist/agents/subagent-registry.js +343 -0
  196. package/dist/agents/subagent-registry.store.js +73 -0
  197. package/dist/agents/synthetic-models.js +174 -0
  198. package/dist/agents/system-prompt-params.js +70 -0
  199. package/dist/agents/system-prompt-report.js +113 -0
  200. package/dist/agents/system-prompt.js +456 -0
  201. package/dist/agents/test-helpers/fast-coding-tools.js +18 -0
  202. package/dist/agents/test-helpers/fast-core-tools.js +24 -0
  203. package/dist/agents/timeout.js +24 -0
  204. package/dist/agents/tool-call-id.js +164 -0
  205. package/dist/agents/tool-display.js +209 -0
  206. package/dist/agents/tool-display.json +308 -0
  207. package/dist/agents/tool-images.js +166 -0
  208. package/dist/agents/tool-policy.js +199 -0
  209. package/dist/agents/tool-summaries.js +10 -0
  210. package/dist/agents/tools/agent-step.js +44 -0
  211. package/dist/agents/tools/agents-list-tool.js +66 -0
  212. package/dist/agents/tools/browser-tool.js +596 -0
  213. package/dist/agents/tools/browser-tool.schema.js +105 -0
  214. package/dist/agents/tools/canvas-tool.js +158 -0
  215. package/dist/agents/tools/common.js +146 -0
  216. package/dist/agents/tools/cron-tool.js +261 -0
  217. package/dist/agents/tools/discord-actions-guild.js +453 -0
  218. package/dist/agents/tools/discord-actions-messaging.js +383 -0
  219. package/dist/agents/tools/discord-actions-moderation.js +92 -0
  220. package/dist/agents/tools/discord-actions.js +61 -0
  221. package/dist/agents/tools/gateway-tool.js +214 -0
  222. package/dist/agents/tools/gateway.js +30 -0
  223. package/dist/agents/tools/image-tool.helpers.js +55 -0
  224. package/dist/agents/tools/image-tool.js +370 -0
  225. package/dist/agents/tools/memory-tool.js +103 -0
  226. package/dist/agents/tools/message-tool.js +321 -0
  227. package/dist/agents/tools/nodes-tool.js +399 -0
  228. package/dist/agents/tools/nodes-utils.js +92 -0
  229. package/dist/agents/tools/session-status-tool.js +357 -0
  230. package/dist/agents/tools/sessions-announce-target.js +43 -0
  231. package/dist/agents/tools/sessions-helpers.js +261 -0
  232. package/dist/agents/tools/sessions-history-tool.js +118 -0
  233. package/dist/agents/tools/sessions-list-tool.js +161 -0
  234. package/dist/agents/tools/sessions-send-helpers.js +116 -0
  235. package/dist/agents/tools/sessions-send-tool.a2a.js +119 -0
  236. package/dist/agents/tools/sessions-send-tool.js +345 -0
  237. package/dist/agents/tools/sessions-spawn-tool.js +232 -0
  238. package/dist/agents/tools/slack-actions.js +243 -0
  239. package/dist/agents/tools/telegram-actions.js +256 -0
  240. package/dist/agents/tools/tts-tool.js +47 -0
  241. package/dist/agents/tools/web-fetch-utils.js +104 -0
  242. package/dist/agents/tools/web-fetch.js +477 -0
  243. package/dist/agents/tools/web-search.js +437 -0
  244. package/dist/agents/tools/web-shared.js +62 -0
  245. package/dist/agents/tools/web-tools.js +2 -0
  246. package/dist/agents/tools/whatsapp-actions.js +32 -0
  247. package/dist/agents/transcript-policy.js +83 -0
  248. package/dist/agents/usage.js +48 -0
  249. package/dist/agents/venice-models.js +342 -0
  250. package/dist/agents/workspace.js +234 -0
  251. package/dist/auto-reply/chunk.js +358 -0
  252. package/dist/auto-reply/command-auth.js +132 -0
  253. package/dist/auto-reply/command-detection.js +56 -0
  254. package/dist/auto-reply/commands-args.js +85 -0
  255. package/dist/auto-reply/commands-registry.data.js +574 -0
  256. package/dist/auto-reply/commands-registry.js +354 -0
  257. package/dist/auto-reply/commands-registry.types.js +1 -0
  258. package/dist/auto-reply/dispatch.js +40 -0
  259. package/dist/auto-reply/envelope.js +173 -0
  260. package/dist/auto-reply/group-activation.js +22 -0
  261. package/dist/auto-reply/heartbeat.js +120 -0
  262. package/dist/auto-reply/inbound-debounce.js +74 -0
  263. package/dist/auto-reply/media-note.js +72 -0
  264. package/dist/auto-reply/model.js +28 -0
  265. package/dist/auto-reply/reply/abort.js +151 -0
  266. package/dist/auto-reply/reply/agent-runner-execution.js +467 -0
  267. package/dist/auto-reply/reply/agent-runner-helpers.js +65 -0
  268. package/dist/auto-reply/reply/agent-runner-memory.js +160 -0
  269. package/dist/auto-reply/reply/agent-runner-payloads.js +85 -0
  270. package/dist/auto-reply/reply/agent-runner-utils.js +101 -0
  271. package/dist/auto-reply/reply/agent-runner.js +379 -0
  272. package/dist/auto-reply/reply/audio-tags.js +1 -0
  273. package/dist/auto-reply/reply/bash-command.js +336 -0
  274. package/dist/auto-reply/reply/block-reply-coalescer.js +101 -0
  275. package/dist/auto-reply/reply/block-reply-pipeline.js +179 -0
  276. package/dist/auto-reply/reply/block-streaming.js +91 -0
  277. package/dist/auto-reply/reply/body.js +37 -0
  278. package/dist/auto-reply/reply/commands-allowlist.js +570 -0
  279. package/dist/auto-reply/reply/commands-approve.js +88 -0
  280. package/dist/auto-reply/reply/commands-bash.js +25 -0
  281. package/dist/auto-reply/reply/commands-compact.js +106 -0
  282. package/dist/auto-reply/reply/commands-config.js +239 -0
  283. package/dist/auto-reply/reply/commands-context-report.js +294 -0
  284. package/dist/auto-reply/reply/commands-context.js +29 -0
  285. package/dist/auto-reply/reply/commands-core.js +101 -0
  286. package/dist/auto-reply/reply/commands-info.js +154 -0
  287. package/dist/auto-reply/reply/commands-models.js +201 -0
  288. package/dist/auto-reply/reply/commands-plugin.js +35 -0
  289. package/dist/auto-reply/reply/commands-session.js +311 -0
  290. package/dist/auto-reply/reply/commands-status.js +178 -0
  291. package/dist/auto-reply/reply/commands-subagents.js +357 -0
  292. package/dist/auto-reply/reply/commands-tts.js +226 -0
  293. package/dist/auto-reply/reply/commands-types.js +1 -0
  294. package/dist/auto-reply/reply/commands.js +3 -0
  295. package/dist/auto-reply/reply/config-commands.js +58 -0
  296. package/dist/auto-reply/reply/config-value.js +35 -0
  297. package/dist/auto-reply/reply/debug-commands.js +58 -0
  298. package/dist/auto-reply/reply/directive-handling.auth.js +191 -0
  299. package/dist/auto-reply/reply/directive-handling.fast-lane.js +60 -0
  300. package/dist/auto-reply/reply/directive-handling.impl.js +380 -0
  301. package/dist/auto-reply/reply/directive-handling.js +5 -0
  302. package/dist/auto-reply/reply/directive-handling.model-picker.js +64 -0
  303. package/dist/auto-reply/reply/directive-handling.model.js +279 -0
  304. package/dist/auto-reply/reply/directive-handling.parse.js +84 -0
  305. package/dist/auto-reply/reply/directive-handling.persist.js +181 -0
  306. package/dist/auto-reply/reply/directive-handling.queue-validation.js +48 -0
  307. package/dist/auto-reply/reply/directive-handling.shared.js +43 -0
  308. package/dist/auto-reply/reply/directives.js +114 -0
  309. package/dist/auto-reply/reply/dispatch-from-config.js +353 -0
  310. package/dist/auto-reply/reply/exec/directive.js +183 -0
  311. package/dist/auto-reply/reply/exec.js +1 -0
  312. package/dist/auto-reply/reply/followup-runner.js +226 -0
  313. package/dist/auto-reply/reply/get-reply-directives-apply.js +201 -0
  314. package/dist/auto-reply/reply/get-reply-directives-utils.js +45 -0
  315. package/dist/auto-reply/reply/get-reply-directives.js +343 -0
  316. package/dist/auto-reply/reply/get-reply-inline-actions.js +257 -0
  317. package/dist/auto-reply/reply/get-reply-run.js +286 -0
  318. package/dist/auto-reply/reply/get-reply.js +234 -0
  319. package/dist/auto-reply/reply/groups.js +102 -0
  320. package/dist/auto-reply/reply/history.js +110 -0
  321. package/dist/auto-reply/reply/inbound-context.js +51 -0
  322. package/dist/auto-reply/reply/inbound-dedupe.js +39 -0
  323. package/dist/auto-reply/reply/inbound-sender-meta.js +45 -0
  324. package/dist/auto-reply/reply/inbound-text.js +3 -0
  325. package/dist/auto-reply/reply/line-directives.js +294 -0
  326. package/dist/auto-reply/reply/memory-flush.js +66 -0
  327. package/dist/auto-reply/reply/mentions.js +122 -0
  328. package/dist/auto-reply/reply/model-selection.js +398 -0
  329. package/dist/auto-reply/reply/normalize-reply.js +54 -0
  330. package/dist/auto-reply/reply/provider-dispatcher.js +19 -0
  331. package/dist/auto-reply/reply/queue/cleanup.js +19 -0
  332. package/dist/auto-reply/reply/queue/directive.js +155 -0
  333. package/dist/auto-reply/reply/queue/drain.js +111 -0
  334. package/dist/auto-reply/reply/queue/enqueue.js +43 -0
  335. package/dist/auto-reply/reply/queue/normalize.js +30 -0
  336. package/dist/auto-reply/reply/queue/settings.js +52 -0
  337. package/dist/auto-reply/reply/queue/state.js +53 -0
  338. package/dist/auto-reply/reply/queue/types.js +1 -0
  339. package/dist/auto-reply/reply/queue.js +6 -0
  340. package/dist/auto-reply/reply/reply-directives.js +30 -0
  341. package/dist/auto-reply/reply/reply-dispatcher.js +100 -0
  342. package/dist/auto-reply/reply/reply-elevated.js +166 -0
  343. package/dist/auto-reply/reply/reply-inline.js +28 -0
  344. package/dist/auto-reply/reply/reply-payloads.js +83 -0
  345. package/dist/auto-reply/reply/reply-reference.js +35 -0
  346. package/dist/auto-reply/reply/reply-tags.js +13 -0
  347. package/dist/auto-reply/reply/reply-threading.js +41 -0
  348. package/dist/auto-reply/reply/response-prefix-template.js +76 -0
  349. package/dist/auto-reply/reply/route-reply.js +108 -0
  350. package/dist/auto-reply/reply/session-reset-model.js +133 -0
  351. package/dist/auto-reply/reply/session-updates.js +233 -0
  352. package/dist/auto-reply/reply/session-usage.js +79 -0
  353. package/dist/auto-reply/reply/session.js +303 -0
  354. package/dist/auto-reply/reply/stage-sandbox-media.js +146 -0
  355. package/dist/auto-reply/reply/streaming-directives.js +92 -0
  356. package/dist/auto-reply/reply/subagents-utils.js +52 -0
  357. package/dist/auto-reply/reply/test-ctx.js +15 -0
  358. package/dist/auto-reply/reply/typing-mode.js +91 -0
  359. package/dist/auto-reply/reply/typing.js +132 -0
  360. package/dist/auto-reply/reply.js +5 -0
  361. package/dist/auto-reply/send-policy.js +30 -0
  362. package/dist/auto-reply/skill-commands.js +97 -0
  363. package/dist/auto-reply/status.js +491 -0
  364. package/dist/auto-reply/templating.js +39 -0
  365. package/dist/auto-reply/thinking.js +154 -0
  366. package/dist/auto-reply/tokens.js +15 -0
  367. package/dist/auto-reply/tool-meta.js +112 -0
  368. package/dist/auto-reply/types.js +1 -0
  369. package/dist/browser/bridge-server.js +45 -0
  370. package/dist/browser/cdp.helpers.js +136 -0
  371. package/dist/browser/cdp.js +293 -0
  372. package/dist/browser/chrome.executables.js +509 -0
  373. package/dist/browser/chrome.js +253 -0
  374. package/dist/browser/chrome.profile-decoration.js +144 -0
  375. package/dist/browser/client-actions-core.js +100 -0
  376. package/dist/browser/client-actions-observe.js +100 -0
  377. package/dist/browser/client-actions-state.js +169 -0
  378. package/dist/browser/client-actions-types.js +1 -0
  379. package/dist/browser/client-actions.js +4 -0
  380. package/dist/browser/client-fetch.js +91 -0
  381. package/dist/browser/client.js +137 -0
  382. package/dist/browser/config.js +180 -0
  383. package/dist/browser/constants.js +8 -0
  384. package/dist/browser/control-service.js +72 -0
  385. package/dist/browser/extension-relay.js +541 -0
  386. package/dist/browser/profiles-service.js +132 -0
  387. package/dist/browser/profiles.js +93 -0
  388. package/dist/browser/pw-ai-module.js +37 -0
  389. package/dist/browser/pw-ai.js +2 -0
  390. package/dist/browser/pw-role-snapshot.js +310 -0
  391. package/dist/browser/pw-session.js +431 -0
  392. package/dist/browser/pw-tools-core.activity.js +44 -0
  393. package/dist/browser/pw-tools-core.downloads.js +177 -0
  394. package/dist/browser/pw-tools-core.interactions.js +420 -0
  395. package/dist/browser/pw-tools-core.js +8 -0
  396. package/dist/browser/pw-tools-core.responses.js +83 -0
  397. package/dist/browser/pw-tools-core.shared.js +48 -0
  398. package/dist/browser/pw-tools-core.snapshot.js +142 -0
  399. package/dist/browser/pw-tools-core.state.js +147 -0
  400. package/dist/browser/pw-tools-core.storage.js +72 -0
  401. package/dist/browser/pw-tools-core.trace.js +25 -0
  402. package/dist/browser/routes/agent.act.js +466 -0
  403. package/dist/browser/routes/agent.act.shared.js +38 -0
  404. package/dist/browser/routes/agent.debug.js +134 -0
  405. package/dist/browser/routes/agent.js +10 -0
  406. package/dist/browser/routes/agent.shared.js +45 -0
  407. package/dist/browser/routes/agent.snapshot.js +269 -0
  408. package/dist/browser/routes/agent.storage.js +386 -0
  409. package/dist/browser/routes/basic.js +173 -0
  410. package/dist/browser/routes/dispatcher.js +86 -0
  411. package/dist/browser/routes/index.js +8 -0
  412. package/dist/browser/routes/tabs.js +120 -0
  413. package/dist/browser/routes/types.js +1 -0
  414. package/dist/browser/routes/utils.js +57 -0
  415. package/dist/browser/screenshot.js +39 -0
  416. package/dist/browser/server-context.js +533 -0
  417. package/dist/browser/server-context.types.js +1 -0
  418. package/dist/browser/server.js +90 -0
  419. package/dist/browser/target-id.js +16 -0
  420. package/dist/browser/trash.js +21 -0
  421. package/dist/build-info.json +5 -0
  422. package/dist/canvas-host/a2ui/.bundle.hash +1 -0
  423. package/dist/canvas-host/a2ui/a2ui.bundle.js +17770 -0
  424. package/dist/canvas-host/a2ui/index.html +307 -0
  425. package/dist/canvas-host/a2ui.js +191 -0
  426. package/dist/canvas-host/server.js +414 -0
  427. package/dist/channel-web.js +8 -0
  428. package/dist/channels/ack-reactions.js +56 -0
  429. package/dist/channels/allowlist-match.js +3 -0
  430. package/dist/channels/allowlists/resolve-utils.js +37 -0
  431. package/dist/channels/channel-config.js +131 -0
  432. package/dist/channels/chat-type.js +12 -0
  433. package/dist/channels/command-gating.js +24 -0
  434. package/dist/channels/conversation-label.js +48 -0
  435. package/dist/channels/dock.js +344 -0
  436. package/dist/channels/location.js +44 -0
  437. package/dist/channels/logging.js +13 -0
  438. package/dist/channels/mention-gating.js +26 -0
  439. package/dist/channels/plugins/actions/discord/handle-action.guild-admin.js +332 -0
  440. package/dist/channels/plugins/actions/discord/handle-action.js +165 -0
  441. package/dist/channels/plugins/actions/discord.js +93 -0
  442. package/dist/channels/plugins/actions/signal.js +115 -0
  443. package/dist/channels/plugins/actions/telegram.js +151 -0
  444. package/dist/channels/plugins/agent-tools/whatsapp-login.js +63 -0
  445. package/dist/channels/plugins/allowlist-match.js +1 -0
  446. package/dist/channels/plugins/bluebubbles-actions.js +16 -0
  447. package/dist/channels/plugins/catalog.js +218 -0
  448. package/dist/channels/plugins/channel-config.js +1 -0
  449. package/dist/channels/plugins/config-helpers.js +87 -0
  450. package/dist/channels/plugins/config-schema.js +8 -0
  451. package/dist/channels/plugins/config-writes.js +21 -0
  452. package/dist/channels/plugins/directory-config.js +185 -0
  453. package/dist/channels/plugins/group-mentions.js +314 -0
  454. package/dist/channels/plugins/helpers.js +12 -0
  455. package/dist/channels/plugins/index.js +51 -0
  456. package/dist/channels/plugins/load.js +22 -0
  457. package/dist/channels/plugins/media-limits.js +15 -0
  458. package/dist/channels/plugins/message-action-names.js +51 -0
  459. package/dist/channels/plugins/message-actions.js +35 -0
  460. package/dist/channels/plugins/normalize/discord.js +18 -0
  461. package/dist/channels/plugins/normalize/imessage.js +36 -0
  462. package/dist/channels/plugins/normalize/signal.js +52 -0
  463. package/dist/channels/plugins/normalize/slack.js +19 -0
  464. package/dist/channels/plugins/normalize/telegram.js +31 -0
  465. package/dist/channels/plugins/normalize/whatsapp.js +17 -0
  466. package/dist/channels/plugins/onboarding/channel-access.js +68 -0
  467. package/dist/channels/plugins/onboarding/discord.js +413 -0
  468. package/dist/channels/plugins/onboarding/helpers.js +33 -0
  469. package/dist/channels/plugins/onboarding/imessage.js +231 -0
  470. package/dist/channels/plugins/onboarding/signal.js +262 -0
  471. package/dist/channels/plugins/onboarding/slack.js +470 -0
  472. package/dist/channels/plugins/onboarding/telegram.js +289 -0
  473. package/dist/channels/plugins/onboarding/whatsapp.js +286 -0
  474. package/dist/channels/plugins/onboarding-types.js +1 -0
  475. package/dist/channels/plugins/outbound/discord.js +29 -0
  476. package/dist/channels/plugins/outbound/imessage.js +38 -0
  477. package/dist/channels/plugins/outbound/load.js +28 -0
  478. package/dist/channels/plugins/outbound/signal.js +36 -0
  479. package/dist/channels/plugins/outbound/slack.js +27 -0
  480. package/dist/channels/plugins/outbound/telegram.js +93 -0
  481. package/dist/channels/plugins/outbound/whatsapp.js +76 -0
  482. package/dist/channels/plugins/pairing-message.js +1 -0
  483. package/dist/channels/plugins/pairing.js +44 -0
  484. package/dist/channels/plugins/setup-helpers.js +89 -0
  485. package/dist/channels/plugins/slack.actions.js +158 -0
  486. package/dist/channels/plugins/status-issues/bluebubbles.js +76 -0
  487. package/dist/channels/plugins/status-issues/discord.js +115 -0
  488. package/dist/channels/plugins/status-issues/shared.js +23 -0
  489. package/dist/channels/plugins/status-issues/telegram.js +100 -0
  490. package/dist/channels/plugins/status-issues/whatsapp.js +52 -0
  491. package/dist/channels/plugins/status.js +26 -0
  492. package/dist/channels/plugins/types.adapters.js +1 -0
  493. package/dist/channels/plugins/types.core.js +1 -0
  494. package/dist/channels/plugins/types.js +1 -0
  495. package/dist/channels/plugins/types.plugin.js +1 -0
  496. package/dist/channels/plugins/whatsapp-heartbeat.js +56 -0
  497. package/dist/channels/registry.js +153 -0
  498. package/dist/channels/reply-prefix.js +21 -0
  499. package/dist/channels/sender-identity.js +30 -0
  500. package/dist/channels/sender-label.js +38 -0
  501. package/dist/channels/session.js +26 -0
  502. package/dist/channels/targets.js +27 -0
  503. package/dist/channels/typing.js +17 -0
  504. package/dist/channels/web/index.js +2 -0
  505. package/dist/cli/acp-cli.js +61 -0
  506. package/dist/cli/argv.js +126 -0
  507. package/dist/cli/banner.js +96 -0
  508. package/dist/cli/browser-cli-actions-input/register.element.js +228 -0
  509. package/dist/cli/browser-cli-actions-input/register.files-downloads.js +148 -0
  510. package/dist/cli/browser-cli-actions-input/register.form-wait-eval.js +121 -0
  511. package/dist/cli/browser-cli-actions-input/register.js +10 -0
  512. package/dist/cli/browser-cli-actions-input/register.navigation.js +72 -0
  513. package/dist/cli/browser-cli-actions-input/shared.js +57 -0
  514. package/dist/cli/browser-cli-actions-input.js +1 -0
  515. package/dist/cli/browser-cli-actions-observe.js +90 -0
  516. package/dist/cli/browser-cli-debug.js +162 -0
  517. package/dist/cli/browser-cli-examples.js +33 -0
  518. package/dist/cli/browser-cli-extension.js +98 -0
  519. package/dist/cli/browser-cli-inspect.js +136 -0
  520. package/dist/cli/browser-cli-manage.js +401 -0
  521. package/dist/cli/browser-cli-shared.js +34 -0
  522. package/dist/cli/browser-cli-state.cookies-storage.js +182 -0
  523. package/dist/cli/browser-cli-state.js +287 -0
  524. package/dist/cli/browser-cli.js +37 -0
  525. package/dist/cli/channel-auth.js +49 -0
  526. package/dist/cli/channel-options.js +29 -0
  527. package/dist/cli/channels-cli.js +208 -0
  528. package/dist/cli/cli-name.js +26 -0
  529. package/dist/cli/cli-utils.js +34 -0
  530. package/dist/cli/command-format.js +18 -0
  531. package/dist/cli/command-options.js +6 -0
  532. package/dist/cli/config-cli.js +295 -0
  533. package/dist/cli/cron-cli/register.cron-add.js +188 -0
  534. package/dist/cli/cron-cli/register.cron-edit.js +160 -0
  535. package/dist/cli/cron-cli/register.cron-simple.js +98 -0
  536. package/dist/cli/cron-cli/register.js +16 -0
  537. package/dist/cli/cron-cli/shared.js +178 -0
  538. package/dist/cli/cron-cli.js +1 -0
  539. package/dist/cli/daemon-cli/install.js +112 -0
  540. package/dist/cli/daemon-cli/lifecycle.js +265 -0
  541. package/dist/cli/daemon-cli/probe.js +28 -0
  542. package/dist/cli/daemon-cli/register.js +69 -0
  543. package/dist/cli/daemon-cli/response.js +20 -0
  544. package/dist/cli/daemon-cli/runners.js +3 -0
  545. package/dist/cli/daemon-cli/shared.js +164 -0
  546. package/dist/cli/daemon-cli/status.gather.js +170 -0
  547. package/dist/cli/daemon-cli/status.js +19 -0
  548. package/dist/cli/daemon-cli/status.print.js +241 -0
  549. package/dist/cli/daemon-cli/types.js +1 -0
  550. package/dist/cli/daemon-cli.js +2 -0
  551. package/dist/cli/deps.js +28 -0
  552. package/dist/cli/devices-cli.js +181 -0
  553. package/dist/cli/directory-cli.js +227 -0
  554. package/dist/cli/dns-cli.js +199 -0
  555. package/dist/cli/docs-cli.js +17 -0
  556. package/dist/cli/exec-approvals-cli.js +378 -0
  557. package/dist/cli/gateway-cli/call.js +25 -0
  558. package/dist/cli/gateway-cli/dev.js +101 -0
  559. package/dist/cli/gateway-cli/discover.js +88 -0
  560. package/dist/cli/gateway-cli/register.js +255 -0
  561. package/dist/cli/gateway-cli/run-loop.js +87 -0
  562. package/dist/cli/gateway-cli/run.js +265 -0
  563. package/dist/cli/gateway-cli/shared.js +101 -0
  564. package/dist/cli/gateway-cli.js +1 -0
  565. package/dist/cli/gateway-rpc.js +27 -0
  566. package/dist/cli/help-format.js +16 -0
  567. package/dist/cli/hooks-cli.js +709 -0
  568. package/dist/cli/logs-cli.js +222 -0
  569. package/dist/cli/memory-cli.js +527 -0
  570. package/dist/cli/models-cli.js +321 -0
  571. package/dist/cli/node-cli/daemon.js +481 -0
  572. package/dist/cli/node-cli/register.js +81 -0
  573. package/dist/cli/node-cli.js +1 -0
  574. package/dist/cli/nodes-camera.js +52 -0
  575. package/dist/cli/nodes-canvas.js +26 -0
  576. package/dist/cli/nodes-cli/a2ui-jsonl.js +81 -0
  577. package/dist/cli/nodes-cli/cli-utils.js +27 -0
  578. package/dist/cli/nodes-cli/format.js +35 -0
  579. package/dist/cli/nodes-cli/register.camera.js +193 -0
  580. package/dist/cli/nodes-cli/register.canvas.js +215 -0
  581. package/dist/cli/nodes-cli/register.invoke.js +303 -0
  582. package/dist/cli/nodes-cli/register.js +24 -0
  583. package/dist/cli/nodes-cli/register.location.js +64 -0
  584. package/dist/cli/nodes-cli/register.notify.js +51 -0
  585. package/dist/cli/nodes-cli/register.pairing.js +99 -0
  586. package/dist/cli/nodes-cli/register.screen.js +66 -0
  587. package/dist/cli/nodes-cli/register.status.js +328 -0
  588. package/dist/cli/nodes-cli/rpc.js +88 -0
  589. package/dist/cli/nodes-cli/types.js +1 -0
  590. package/dist/cli/nodes-cli.js +1 -0
  591. package/dist/cli/nodes-run.js +19 -0
  592. package/dist/cli/nodes-screen.js +35 -0
  593. package/dist/cli/outbound-send-deps.js +11 -0
  594. package/dist/cli/pairing-cli.js +115 -0
  595. package/dist/cli/parse-duration.js +28 -0
  596. package/dist/cli/parse-timeout.js +18 -0
  597. package/dist/cli/plugin-registry.js +24 -0
  598. package/dist/cli/plugins-cli.js +469 -0
  599. package/dist/cli/ports.js +101 -0
  600. package/dist/cli/profile-utils.js +17 -0
  601. package/dist/cli/profile.js +86 -0
  602. package/dist/cli/program/build-program.js +14 -0
  603. package/dist/cli/program/command-registry.js +148 -0
  604. package/dist/cli/program/config-guard.js +67 -0
  605. package/dist/cli/program/context.js +11 -0
  606. package/dist/cli/program/help.js +68 -0
  607. package/dist/cli/program/helpers.js +26 -0
  608. package/dist/cli/program/message/helpers.js +46 -0
  609. package/dist/cli/program/message/register.broadcast.js +11 -0
  610. package/dist/cli/program/message/register.discord-admin.js +119 -0
  611. package/dist/cli/program/message/register.emoji-sticker.js +43 -0
  612. package/dist/cli/program/message/register.permissions-search.js +22 -0
  613. package/dist/cli/program/message/register.pins.js +23 -0
  614. package/dist/cli/program/message/register.poll.js +13 -0
  615. package/dist/cli/program/message/register.reactions.js +21 -0
  616. package/dist/cli/program/message/register.read-edit-delete.js +30 -0
  617. package/dist/cli/program/message/register.send.js +18 -0
  618. package/dist/cli/program/message/register.thread.js +35 -0
  619. package/dist/cli/program/preaction.js +48 -0
  620. package/dist/cli/program/register.agent.js +162 -0
  621. package/dist/cli/program/register.configure.js +32 -0
  622. package/dist/cli/program/register.maintenance.js +91 -0
  623. package/dist/cli/program/register.message.js +54 -0
  624. package/dist/cli/program/register.onboard.js +120 -0
  625. package/dist/cli/program/register.setup.js +41 -0
  626. package/dist/cli/program/register.status-health-sessions.js +109 -0
  627. package/dist/cli/program/register.subclis.js +271 -0
  628. package/dist/cli/program.js +2 -0
  629. package/dist/cli/progress.js +165 -0
  630. package/dist/cli/prompt.js +17 -0
  631. package/dist/cli/route.js +29 -0
  632. package/dist/cli/run-main.js +107 -0
  633. package/dist/cli/sandbox-cli.js +98 -0
  634. package/dist/cli/security-cli.js +123 -0
  635. package/dist/cli/skills-cli.js +341 -0
  636. package/dist/cli/system-cli.js +98 -0
  637. package/dist/cli/tagline.js +208 -0
  638. package/dist/cli/tui-cli.js +44 -0
  639. package/dist/cli/update-cli.js +1013 -0
  640. package/dist/cli/wait.js +8 -0
  641. package/dist/cli/webhooks-cli.js +140 -0
  642. package/dist/commands/agent/delivery.js +140 -0
  643. package/dist/commands/agent/run-context.js +27 -0
  644. package/dist/commands/agent/session-store.js +43 -0
  645. package/dist/commands/agent/session.js +74 -0
  646. package/dist/commands/agent/types.js +1 -0
  647. package/dist/commands/agent-via-gateway.js +119 -0
  648. package/dist/commands/agent.js +439 -0
  649. package/dist/commands/agents.bindings.js +126 -0
  650. package/dist/commands/agents.command-shared.js +18 -0
  651. package/dist/commands/agents.commands.add.js +293 -0
  652. package/dist/commands/agents.commands.delete.js +75 -0
  653. package/dist/commands/agents.commands.identity.js +168 -0
  654. package/dist/commands/agents.commands.list.js +98 -0
  655. package/dist/commands/agents.config.js +145 -0
  656. package/dist/commands/agents.js +6 -0
  657. package/dist/commands/agents.providers.js +140 -0
  658. package/dist/commands/auth-choice-options.js +165 -0
  659. package/dist/commands/auth-choice-prompt.js +36 -0
  660. package/dist/commands/auth-choice.api-key.js +34 -0
  661. package/dist/commands/auth-choice.apply.anthropic.js +77 -0
  662. package/dist/commands/auth-choice.apply.api-providers.js +502 -0
  663. package/dist/commands/auth-choice.apply.copilot-proxy.js +10 -0
  664. package/dist/commands/auth-choice.apply.github-copilot.js +47 -0
  665. package/dist/commands/auth-choice.apply.google-antigravity.js +10 -0
  666. package/dist/commands/auth-choice.apply.google-gemini-cli.js +10 -0
  667. package/dist/commands/auth-choice.apply.js +30 -0
  668. package/dist/commands/auth-choice.apply.minimax.js +72 -0
  669. package/dist/commands/auth-choice.apply.oauth.js +78 -0
  670. package/dist/commands/auth-choice.apply.openai.js +117 -0
  671. package/dist/commands/auth-choice.apply.plugin-provider.js +140 -0
  672. package/dist/commands/auth-choice.apply.qwen-portal.js +10 -0
  673. package/dist/commands/auth-choice.default-model.js +12 -0
  674. package/dist/commands/auth-choice.js +3 -0
  675. package/dist/commands/auth-choice.model-check.js +61 -0
  676. package/dist/commands/auth-choice.preferred-provider.js +32 -0
  677. package/dist/commands/auth-token.js +32 -0
  678. package/dist/commands/channels/add-mutators.js +49 -0
  679. package/dist/commands/channels/add.js +210 -0
  680. package/dist/commands/channels/capabilities.js +439 -0
  681. package/dist/commands/channels/list.js +145 -0
  682. package/dist/commands/channels/logs.js +85 -0
  683. package/dist/commands/channels/remove.js +114 -0
  684. package/dist/commands/channels/resolve.js +107 -0
  685. package/dist/commands/channels/shared.js +41 -0
  686. package/dist/commands/channels/status.js +238 -0
  687. package/dist/commands/channels.js +7 -0
  688. package/dist/commands/chutes-oauth.js +144 -0
  689. package/dist/commands/cleanup-utils.js +74 -0
  690. package/dist/commands/configure.channels.js +52 -0
  691. package/dist/commands/configure.commands.js +8 -0
  692. package/dist/commands/configure.daemon.js +106 -0
  693. package/dist/commands/configure.gateway-auth.js +64 -0
  694. package/dist/commands/configure.gateway.js +159 -0
  695. package/dist/commands/configure.js +4 -0
  696. package/dist/commands/configure.shared.js +49 -0
  697. package/dist/commands/configure.wizard.js +471 -0
  698. package/dist/commands/daemon-install-helpers.js +54 -0
  699. package/dist/commands/daemon-runtime.js +11 -0
  700. package/dist/commands/dashboard.js +47 -0
  701. package/dist/commands/docs.js +148 -0
  702. package/dist/commands/doctor-auth.js +236 -0
  703. package/dist/commands/doctor-config-flow.js +228 -0
  704. package/dist/commands/doctor-format.js +85 -0
  705. package/dist/commands/doctor-gateway-daemon-flow.js +201 -0
  706. package/dist/commands/doctor-gateway-health.js +43 -0
  707. package/dist/commands/doctor-gateway-services.js +209 -0
  708. package/dist/commands/doctor-install.js +27 -0
  709. package/dist/commands/doctor-legacy-config.js +42 -0
  710. package/dist/commands/doctor-platform-notes.js +86 -0
  711. package/dist/commands/doctor-prompter.js +64 -0
  712. package/dist/commands/doctor-sandbox.js +207 -0
  713. package/dist/commands/doctor-security.js +141 -0
  714. package/dist/commands/doctor-state-integrity.js +332 -0
  715. package/dist/commands/doctor-state-migrations.js +1 -0
  716. package/dist/commands/doctor-ui.js +119 -0
  717. package/dist/commands/doctor-update.js +65 -0
  718. package/dist/commands/doctor-workspace-status.js +56 -0
  719. package/dist/commands/doctor-workspace.js +69 -0
  720. package/dist/commands/doctor.js +253 -0
  721. package/dist/commands/gateway-status/helpers.js +200 -0
  722. package/dist/commands/gateway-status.js +300 -0
  723. package/dist/commands/google-gemini-model-default.js +33 -0
  724. package/dist/commands/health-format.js +37 -0
  725. package/dist/commands/health.js +595 -0
  726. package/dist/commands/message-format.js +345 -0
  727. package/dist/commands/message.js +45 -0
  728. package/dist/commands/model-picker.js +420 -0
  729. package/dist/commands/models/aliases.js +92 -0
  730. package/dist/commands/models/auth-order.js +95 -0
  731. package/dist/commands/models/auth.js +334 -0
  732. package/dist/commands/models/fallbacks.js +126 -0
  733. package/dist/commands/models/image-fallbacks.js +126 -0
  734. package/dist/commands/models/list.auth-overview.js +93 -0
  735. package/dist/commands/models/list.configured.js +80 -0
  736. package/dist/commands/models/list.format.js +41 -0
  737. package/dist/commands/models/list.js +2 -0
  738. package/dist/commands/models/list.list-command.js +99 -0
  739. package/dist/commands/models/list.probe.js +348 -0
  740. package/dist/commands/models/list.registry.js +81 -0
  741. package/dist/commands/models/list.status-command.js +420 -0
  742. package/dist/commands/models/list.table.js +58 -0
  743. package/dist/commands/models/list.types.js +1 -0
  744. package/dist/commands/models/scan.js +293 -0
  745. package/dist/commands/models/set-image.js +28 -0
  746. package/dist/commands/models/set.js +28 -0
  747. package/dist/commands/models/shared.js +80 -0
  748. package/dist/commands/models.js +10 -0
  749. package/dist/commands/node-daemon-install-helpers.js +35 -0
  750. package/dist/commands/node-daemon-runtime.js +6 -0
  751. package/dist/commands/oauth-env.js +16 -0
  752. package/dist/commands/oauth-flow.js +33 -0
  753. package/dist/commands/onboard-auth.config-core.js +386 -0
  754. package/dist/commands/onboard-auth.config-minimax.js +176 -0
  755. package/dist/commands/onboard-auth.config-opencode.js +40 -0
  756. package/dist/commands/onboard-auth.credentials.js +147 -0
  757. package/dist/commands/onboard-auth.js +7 -0
  758. package/dist/commands/onboard-auth.models.js +100 -0
  759. package/dist/commands/onboard-channels.js +527 -0
  760. package/dist/commands/onboard-helpers.js +360 -0
  761. package/dist/commands/onboard-hooks.js +59 -0
  762. package/dist/commands/onboard-interactive.js +17 -0
  763. package/dist/commands/onboard-non-interactive/api-keys.js +45 -0
  764. package/dist/commands/onboard-non-interactive/local/auth-choice.js +333 -0
  765. package/dist/commands/onboard-non-interactive/local/daemon-install.js +45 -0
  766. package/dist/commands/onboard-non-interactive/local/gateway-config.js +86 -0
  767. package/dist/commands/onboard-non-interactive/local/output.js +14 -0
  768. package/dist/commands/onboard-non-interactive/local/skills-config.js +21 -0
  769. package/dist/commands/onboard-non-interactive/local/workspace.js +7 -0
  770. package/dist/commands/onboard-non-interactive/local.js +105 -0
  771. package/dist/commands/onboard-non-interactive/remote.js +41 -0
  772. package/dist/commands/onboard-non-interactive.js +25 -0
  773. package/dist/commands/onboard-remote.js +121 -0
  774. package/dist/commands/onboard-skills.js +146 -0
  775. package/dist/commands/onboard-types.js +1 -0
  776. package/dist/commands/onboard.js +62 -0
  777. package/dist/commands/onboarding/__tests__/test-utils.js +20 -0
  778. package/dist/commands/onboarding/plugin-install.js +162 -0
  779. package/dist/commands/onboarding/registry.js +13 -0
  780. package/dist/commands/onboarding/types.js +1 -0
  781. package/dist/commands/openai-codex-model-default.js +44 -0
  782. package/dist/commands/opencode-zen-model-default.js +35 -0
  783. package/dist/commands/reset.js +134 -0
  784. package/dist/commands/sandbox-display.js +82 -0
  785. package/dist/commands/sandbox-explain.js +226 -0
  786. package/dist/commands/sandbox-formatters.js +31 -0
  787. package/dist/commands/sandbox.js +119 -0
  788. package/dist/commands/sessions.js +211 -0
  789. package/dist/commands/setup.js +62 -0
  790. package/dist/commands/signal-install.js +132 -0
  791. package/dist/commands/status-all/agents.js +62 -0
  792. package/dist/commands/status-all/channels.js +354 -0
  793. package/dist/commands/status-all/diagnosis.js +156 -0
  794. package/dist/commands/status-all/format.js +41 -0
  795. package/dist/commands/status-all/gateway.js +158 -0
  796. package/dist/commands/status-all/report-lines.js +135 -0
  797. package/dist/commands/status-all.js +409 -0
  798. package/dist/commands/status.agent-local.js +68 -0
  799. package/dist/commands/status.command.js +476 -0
  800. package/dist/commands/status.daemon.js +30 -0
  801. package/dist/commands/status.format.js +52 -0
  802. package/dist/commands/status.gateway-probe.js +35 -0
  803. package/dist/commands/status.js +2 -0
  804. package/dist/commands/status.link-channel.js +39 -0
  805. package/dist/commands/status.scan.js +140 -0
  806. package/dist/commands/status.summary.js +172 -0
  807. package/dist/commands/status.types.js +1 -0
  808. package/dist/commands/status.update.js +112 -0
  809. package/dist/commands/systemd-linger.js +77 -0
  810. package/dist/commands/uninstall.js +161 -0
  811. package/dist/compat/legacy-names.js +6 -0
  812. package/dist/config/agent-dirs.js +79 -0
  813. package/dist/config/agent-limits.js +16 -0
  814. package/dist/config/cache-utils.js +22 -0
  815. package/dist/config/channel-capabilities.js +42 -0
  816. package/dist/config/commands.js +38 -0
  817. package/dist/config/config-paths.js +75 -0
  818. package/dist/config/config.js +7 -0
  819. package/dist/config/defaults.js +350 -0
  820. package/dist/config/env-substitution.js +117 -0
  821. package/dist/config/env-vars.js +21 -0
  822. package/dist/config/group-policy.js +123 -0
  823. package/dist/config/includes.js +183 -0
  824. package/dist/config/io.js +491 -0
  825. package/dist/config/legacy-migrate.js +13 -0
  826. package/dist/config/legacy.js +34 -0
  827. package/dist/config/legacy.migrations.js +8 -0
  828. package/dist/config/legacy.migrations.part-1.js +308 -0
  829. package/dist/config/legacy.migrations.part-2.js +343 -0
  830. package/dist/config/legacy.migrations.part-3.js +164 -0
  831. package/dist/config/legacy.rules.js +116 -0
  832. package/dist/config/legacy.shared.js +76 -0
  833. package/dist/config/logging.js +10 -0
  834. package/dist/config/markdown-tables.js +36 -0
  835. package/dist/config/merge-config.js +22 -0
  836. package/dist/config/merge-patch.js +22 -0
  837. package/dist/config/normalize-paths.js +54 -0
  838. package/dist/config/paths.js +196 -0
  839. package/dist/config/plugin-auto-enable.js +338 -0
  840. package/dist/config/port-defaults.js +30 -0
  841. package/dist/config/runtime-overrides.js +50 -0
  842. package/dist/config/schema.js +793 -0
  843. package/dist/config/sessions/group.js +83 -0
  844. package/dist/config/sessions/main-session.js +43 -0
  845. package/dist/config/sessions/metadata.js +114 -0
  846. package/dist/config/sessions/paths.js +46 -0
  847. package/dist/config/sessions/reset.js +103 -0
  848. package/dist/config/sessions/session-key.js +34 -0
  849. package/dist/config/sessions/store.js +346 -0
  850. package/dist/config/sessions/transcript.js +113 -0
  851. package/dist/config/sessions/types.js +11 -0
  852. package/dist/config/sessions.js +9 -0
  853. package/dist/config/talk.js +31 -0
  854. package/dist/config/telegram-custom-commands.js +70 -0
  855. package/dist/config/types.agent-defaults.js +1 -0
  856. package/dist/config/types.agents.js +1 -0
  857. package/dist/config/types.approvals.js +1 -0
  858. package/dist/config/types.auth.js +1 -0
  859. package/dist/config/types.base.js +1 -0
  860. package/dist/config/types.browser.js +1 -0
  861. package/dist/config/types.channels.js +1 -0
  862. package/dist/config/types.clawdbot.js +1 -0
  863. package/dist/config/types.cron.js +1 -0
  864. package/dist/config/types.discord.js +1 -0
  865. package/dist/config/types.gateway.js +1 -0
  866. package/dist/config/types.googlechat.js +1 -0
  867. package/dist/config/types.hooks.js +1 -0
  868. package/dist/config/types.imessage.js +1 -0
  869. package/dist/config/types.js +29 -0
  870. package/dist/config/types.messages.js +1 -0
  871. package/dist/config/types.models.js +1 -0
  872. package/dist/config/types.msteams.js +1 -0
  873. package/dist/config/types.node-host.js +1 -0
  874. package/dist/config/types.plugins.js +1 -0
  875. package/dist/config/types.queue.js +1 -0
  876. package/dist/config/types.sandbox.js +1 -0
  877. package/dist/config/types.signal.js +1 -0
  878. package/dist/config/types.skills.js +1 -0
  879. package/dist/config/types.slack.js +1 -0
  880. package/dist/config/types.telegram.js +1 -0
  881. package/dist/config/types.tools.js +1 -0
  882. package/dist/config/types.tts.js +1 -0
  883. package/dist/config/types.whatsapp.js +1 -0
  884. package/dist/config/validation.js +297 -0
  885. package/dist/config/version.js +30 -0
  886. package/dist/config/zod-schema.agent-defaults.js +157 -0
  887. package/dist/config/zod-schema.agent-runtime.js +519 -0
  888. package/dist/config/zod-schema.agents.js +46 -0
  889. package/dist/config/zod-schema.approvals.js +25 -0
  890. package/dist/config/zod-schema.channels.js +9 -0
  891. package/dist/config/zod-schema.core.js +452 -0
  892. package/dist/config/zod-schema.hooks.js +124 -0
  893. package/dist/config/zod-schema.js +538 -0
  894. package/dist/config/zod-schema.providers-core.js +703 -0
  895. package/dist/config/zod-schema.providers-whatsapp.js +126 -0
  896. package/dist/config/zod-schema.providers.js +29 -0
  897. package/dist/config/zod-schema.session.js +100 -0
  898. package/dist/control-ui/assets/index-BAFzd9IE.css +1 -0
  899. package/dist/control-ui/assets/index-CxUFDXFX.js +3162 -0
  900. package/dist/control-ui/assets/index-CxUFDXFX.js.map +1 -0
  901. package/dist/control-ui/favicon.ico +0 -0
  902. package/dist/control-ui/index.html +15 -0
  903. package/dist/cron/isolated-agent/delivery-target.js +59 -0
  904. package/dist/cron/isolated-agent/helpers.js +49 -0
  905. package/dist/cron/isolated-agent/run.js +376 -0
  906. package/dist/cron/isolated-agent/session.js +27 -0
  907. package/dist/cron/isolated-agent.js +1 -0
  908. package/dist/cron/normalize.js +111 -0
  909. package/dist/cron/parse.js +24 -0
  910. package/dist/cron/payload-migration.js +29 -0
  911. package/dist/cron/run-log.js +70 -0
  912. package/dist/cron/schedule.js +24 -0
  913. package/dist/cron/service/jobs.js +174 -0
  914. package/dist/cron/service/locked.js +12 -0
  915. package/dist/cron/service/normalize.js +55 -0
  916. package/dist/cron/service/ops.js +118 -0
  917. package/dist/cron/service/state.js +10 -0
  918. package/dist/cron/service/store.js +57 -0
  919. package/dist/cron/service/timer.js +217 -0
  920. package/dist/cron/service.js +35 -0
  921. package/dist/cron/store.js +43 -0
  922. package/dist/cron/types.js +1 -0
  923. package/dist/daemon/constants.js +81 -0
  924. package/dist/daemon/diagnostics.js +38 -0
  925. package/dist/daemon/inspect.js +314 -0
  926. package/dist/daemon/launchd-plist.js +68 -0
  927. package/dist/daemon/launchd.js +316 -0
  928. package/dist/daemon/legacy.js +44 -0
  929. package/dist/daemon/node-service.js +53 -0
  930. package/dist/daemon/paths.js +35 -0
  931. package/dist/daemon/program-args.js +220 -0
  932. package/dist/daemon/runtime-parse.js +17 -0
  933. package/dist/daemon/runtime-paths.js +113 -0
  934. package/dist/daemon/schtasks.js +303 -0
  935. package/dist/daemon/service-audit.js +270 -0
  936. package/dist/daemon/service-env.js +128 -0
  937. package/dist/daemon/service-runtime.js +1 -0
  938. package/dist/daemon/service.js +108 -0
  939. package/dist/daemon/systemd-hints.js +31 -0
  940. package/dist/daemon/systemd-linger.js +59 -0
  941. package/dist/daemon/systemd-unit.js +108 -0
  942. package/dist/daemon/systemd.js +318 -0
  943. package/dist/daemon/termux.js +178 -0
  944. package/dist/discord/accounts.js +52 -0
  945. package/dist/discord/api.js +93 -0
  946. package/dist/discord/audit.js +94 -0
  947. package/dist/discord/chunk.js +200 -0
  948. package/dist/discord/directory-live.js +76 -0
  949. package/dist/discord/gateway-logging.js +48 -0
  950. package/dist/discord/index.js +2 -0
  951. package/dist/discord/monitor/allow-list.js +230 -0
  952. package/dist/discord/monitor/exec-approvals.js +406 -0
  953. package/dist/discord/monitor/format.js +27 -0
  954. package/dist/discord/monitor/listeners.js +240 -0
  955. package/dist/discord/monitor/message-handler.js +101 -0
  956. package/dist/discord/monitor/message-handler.preflight.js +438 -0
  957. package/dist/discord/monitor/message-handler.preflight.types.js +1 -0
  958. package/dist/discord/monitor/message-handler.process.js +344 -0
  959. package/dist/discord/monitor/message-utils.js +189 -0
  960. package/dist/discord/monitor/native-command.js +707 -0
  961. package/dist/discord/monitor/presence-cache.js +38 -0
  962. package/dist/discord/monitor/provider.js +551 -0
  963. package/dist/discord/monitor/reply-context.js +29 -0
  964. package/dist/discord/monitor/reply-delivery.js +57 -0
  965. package/dist/discord/monitor/system-events.js +53 -0
  966. package/dist/discord/monitor/threading.js +201 -0
  967. package/dist/discord/monitor/typing.js +8 -0
  968. package/dist/discord/monitor.gateway.js +54 -0
  969. package/dist/discord/monitor.js +7 -0
  970. package/dist/discord/probe.js +124 -0
  971. package/dist/discord/resolve-channels.js +239 -0
  972. package/dist/discord/resolve-users.js +114 -0
  973. package/dist/discord/send.channels.js +74 -0
  974. package/dist/discord/send.emojis-stickers.js +48 -0
  975. package/dist/discord/send.guild.js +79 -0
  976. package/dist/discord/send.js +7 -0
  977. package/dist/discord/send.messages.js +91 -0
  978. package/dist/discord/send.outbound.js +87 -0
  979. package/dist/discord/send.permissions.js +116 -0
  980. package/dist/discord/send.reactions.js +71 -0
  981. package/dist/discord/send.shared.js +249 -0
  982. package/dist/discord/send.types.js +16 -0
  983. package/dist/discord/targets.js +43 -0
  984. package/dist/discord/token.js +29 -0
  985. package/dist/entry.js +138 -0
  986. package/dist/gateway/assistant-identity.js +64 -0
  987. package/dist/gateway/auth.js +194 -0
  988. package/dist/gateway/boot.js +72 -0
  989. package/dist/gateway/call.js +182 -0
  990. package/dist/gateway/chat-abort.js +55 -0
  991. package/dist/gateway/chat-attachments.js +133 -0
  992. package/dist/gateway/chat-sanitize.js +103 -0
  993. package/dist/gateway/client.js +339 -0
  994. package/dist/gateway/config-reload.js +295 -0
  995. package/dist/gateway/control-ui-shared.js +48 -0
  996. package/dist/gateway/control-ui.js +258 -0
  997. package/dist/gateway/device-auth.js +19 -0
  998. package/dist/gateway/exec-approval-manager.js +40 -0
  999. package/dist/gateway/hooks-mapping.js +287 -0
  1000. package/dist/gateway/hooks.js +167 -0
  1001. package/dist/gateway/http-common.js +43 -0
  1002. package/dist/gateway/http-utils.js +49 -0
  1003. package/dist/gateway/live-image-probe.js +156 -0
  1004. package/dist/gateway/net.js +176 -0
  1005. package/dist/gateway/node-command-policy.js +106 -0
  1006. package/dist/gateway/node-registry.js +142 -0
  1007. package/dist/gateway/open-responses.schema.js +285 -0
  1008. package/dist/gateway/openai-http.js +327 -0
  1009. package/dist/gateway/openresponses-http.js +693 -0
  1010. package/dist/gateway/probe.js +87 -0
  1011. package/dist/gateway/protocol/client-info.js +46 -0
  1012. package/dist/gateway/protocol/index.js +109 -0
  1013. package/dist/gateway/protocol/schema/agent.js +73 -0
  1014. package/dist/gateway/protocol/schema/agents-models-skills.js +47 -0
  1015. package/dist/gateway/protocol/schema/channels.js +74 -0
  1016. package/dist/gateway/protocol/schema/config.js +44 -0
  1017. package/dist/gateway/protocol/schema/cron.js +159 -0
  1018. package/dist/gateway/protocol/schema/devices.js +36 -0
  1019. package/dist/gateway/protocol/schema/error-codes.js +14 -0
  1020. package/dist/gateway/protocol/schema/exec-approvals.js +66 -0
  1021. package/dist/gateway/protocol/schema/frames.js +101 -0
  1022. package/dist/gateway/protocol/schema/logs-chat.js +53 -0
  1023. package/dist/gateway/protocol/schema/nodes.js +54 -0
  1024. package/dist/gateway/protocol/schema/primitives.js +10 -0
  1025. package/dist/gateway/protocol/schema/protocol-schemas.js +117 -0
  1026. package/dist/gateway/protocol/schema/sessions.js +69 -0
  1027. package/dist/gateway/protocol/schema/snapshot.js +40 -0
  1028. package/dist/gateway/protocol/schema/types.js +1 -0
  1029. package/dist/gateway/protocol/schema/wizard.js +76 -0
  1030. package/dist/gateway/protocol/schema.js +16 -0
  1031. package/dist/gateway/server/__tests__/test-utils.js +24 -0
  1032. package/dist/gateway/server/close-reason.js +10 -0
  1033. package/dist/gateway/server/health-state.js +69 -0
  1034. package/dist/gateway/server/hooks.js +85 -0
  1035. package/dist/gateway/server/http-listen.js +26 -0
  1036. package/dist/gateway/server/plugins-http.js +45 -0
  1037. package/dist/gateway/server/tls.js +4 -0
  1038. package/dist/gateway/server/ws-connection/message-handler.js +771 -0
  1039. package/dist/gateway/server/ws-connection.js +191 -0
  1040. package/dist/gateway/server/ws-types.js +1 -0
  1041. package/dist/gateway/server-broadcast.js +73 -0
  1042. package/dist/gateway/server-browser.js +22 -0
  1043. package/dist/gateway/server-channels.js +242 -0
  1044. package/dist/gateway/server-chat.js +221 -0
  1045. package/dist/gateway/server-close.js +99 -0
  1046. package/dist/gateway/server-constants.js +29 -0
  1047. package/dist/gateway/server-cron.js +84 -0
  1048. package/dist/gateway/server-discovery-runtime.js +69 -0
  1049. package/dist/gateway/server-discovery.js +62 -0
  1050. package/dist/gateway/server-http.js +224 -0
  1051. package/dist/gateway/server-lanes.js +7 -0
  1052. package/dist/gateway/server-maintenance.js +68 -0
  1053. package/dist/gateway/server-methods/agent-job.js +104 -0
  1054. package/dist/gateway/server-methods/agent.js +360 -0
  1055. package/dist/gateway/server-methods/agents.js +14 -0
  1056. package/dist/gateway/server-methods/browser.js +204 -0
  1057. package/dist/gateway/server-methods/channels.js +218 -0
  1058. package/dist/gateway/server-methods/chat.js +520 -0
  1059. package/dist/gateway/server-methods/config.js +269 -0
  1060. package/dist/gateway/server-methods/connect.js +6 -0
  1061. package/dist/gateway/server-methods/cron.js +109 -0
  1062. package/dist/gateway/server-methods/devices.js +95 -0
  1063. package/dist/gateway/server-methods/exec-approval.js +78 -0
  1064. package/dist/gateway/server-methods/exec-approvals.js +141 -0
  1065. package/dist/gateway/server-methods/health.js +29 -0
  1066. package/dist/gateway/server-methods/logs.js +143 -0
  1067. package/dist/gateway/server-methods/models.js +16 -0
  1068. package/dist/gateway/server-methods/nodes.helpers.js +32 -0
  1069. package/dist/gateway/server-methods/nodes.js +426 -0
  1070. package/dist/gateway/server-methods/send.js +280 -0
  1071. package/dist/gateway/server-methods/sessions.js +322 -0
  1072. package/dist/gateway/server-methods/skills.js +137 -0
  1073. package/dist/gateway/server-methods/system.js +122 -0
  1074. package/dist/gateway/server-methods/talk.js +20 -0
  1075. package/dist/gateway/server-methods/tts.js +132 -0
  1076. package/dist/gateway/server-methods/types.js +1 -0
  1077. package/dist/gateway/server-methods/update.js +96 -0
  1078. package/dist/gateway/server-methods/usage.js +63 -0
  1079. package/dist/gateway/server-methods/voicewake.js +30 -0
  1080. package/dist/gateway/server-methods/web.js +73 -0
  1081. package/dist/gateway/server-methods/wizard.js +100 -0
  1082. package/dist/gateway/server-methods-list.js +108 -0
  1083. package/dist/gateway/server-methods.js +195 -0
  1084. package/dist/gateway/server-mobile-nodes.js +10 -0
  1085. package/dist/gateway/server-model-catalog.js +11 -0
  1086. package/dist/gateway/server-node-events-types.js +1 -0
  1087. package/dist/gateway/server-node-events.js +206 -0
  1088. package/dist/gateway/server-node-subscriptions.js +93 -0
  1089. package/dist/gateway/server-plugins.js +36 -0
  1090. package/dist/gateway/server-reload-handlers.js +112 -0
  1091. package/dist/gateway/server-restart-sentinel.js +84 -0
  1092. package/dist/gateway/server-runtime-config.js +66 -0
  1093. package/dist/gateway/server-runtime-state.js +113 -0
  1094. package/dist/gateway/server-session-key.js +20 -0
  1095. package/dist/gateway/server-shared.js +1 -0
  1096. package/dist/gateway/server-startup-log.js +27 -0
  1097. package/dist/gateway/server-startup.js +119 -0
  1098. package/dist/gateway/server-tailscale.js +41 -0
  1099. package/dist/gateway/server-utils.js +35 -0
  1100. package/dist/gateway/server-wizard-sessions.js +19 -0
  1101. package/dist/gateway/server-ws-runtime.js +20 -0
  1102. package/dist/gateway/server.impl.js +453 -0
  1103. package/dist/gateway/server.js +2 -0
  1104. package/dist/gateway/session-utils.fs.js +343 -0
  1105. package/dist/gateway/session-utils.js +534 -0
  1106. package/dist/gateway/session-utils.types.js +1 -0
  1107. package/dist/gateway/sessions-patch.js +298 -0
  1108. package/dist/gateway/sessions-resolve.js +103 -0
  1109. package/dist/gateway/test-helpers.e2e.js +101 -0
  1110. package/dist/gateway/test-helpers.mocks.js +502 -0
  1111. package/dist/gateway/test-helpers.openai-mock.js +163 -0
  1112. package/dist/gateway/test-helpers.server.js +369 -0
  1113. package/dist/gateway/tools-invoke-http.js +185 -0
  1114. package/dist/gateway/ws-log.js +336 -0
  1115. package/dist/gateway/ws-logging.js +8 -0
  1116. package/dist/globals.js +41 -0
  1117. package/dist/hooks/bundled/boot-md/HOOK.md +19 -0
  1118. package/dist/hooks/bundled/boot-md/handler.js +14 -0
  1119. package/dist/hooks/bundled/command-logger/HOOK.md +122 -0
  1120. package/dist/hooks/bundled/command-logger/handler.js +55 -0
  1121. package/dist/hooks/bundled/session-memory/HOOK.md +86 -0
  1122. package/dist/hooks/bundled/session-memory/handler.js +140 -0
  1123. package/dist/hooks/bundled/soul-evil/HOOK.md +71 -0
  1124. package/dist/hooks/bundled/soul-evil/handler.js +36 -0
  1125. package/dist/hooks/bundled-dir.js +42 -0
  1126. package/dist/hooks/config.js +123 -0
  1127. package/dist/hooks/frontmatter.js +106 -0
  1128. package/dist/hooks/gmail-ops.js +243 -0
  1129. package/dist/hooks/gmail-setup-utils.js +310 -0
  1130. package/dist/hooks/gmail-watcher.js +191 -0
  1131. package/dist/hooks/gmail.js +179 -0
  1132. package/dist/hooks/hooks-status.js +135 -0
  1133. package/dist/hooks/hooks.js +2 -0
  1134. package/dist/hooks/install.js +328 -0
  1135. package/dist/hooks/installs.js +24 -0
  1136. package/dist/hooks/internal-hooks.js +121 -0
  1137. package/dist/hooks/llm-slug-generator.js +70 -0
  1138. package/dist/hooks/loader.js +110 -0
  1139. package/dist/hooks/plugin-hooks.js +91 -0
  1140. package/dist/hooks/soul-evil.js +186 -0
  1141. package/dist/hooks/types.js +1 -0
  1142. package/dist/hooks/workspace.js +207 -0
  1143. package/dist/imessage/accounts.js +61 -0
  1144. package/dist/imessage/client.js +174 -0
  1145. package/dist/imessage/index.js +3 -0
  1146. package/dist/imessage/monitor/deliver.js +45 -0
  1147. package/dist/imessage/monitor/monitor-provider.js +592 -0
  1148. package/dist/imessage/monitor/runtime.js +12 -0
  1149. package/dist/imessage/monitor/types.js +1 -0
  1150. package/dist/imessage/monitor.js +1 -0
  1151. package/dist/imessage/probe.js +68 -0
  1152. package/dist/imessage/send.js +101 -0
  1153. package/dist/imessage/targets.js +172 -0
  1154. package/dist/index.js +49 -0
  1155. package/dist/infra/agent-events.js +57 -0
  1156. package/dist/infra/archive.js +97 -0
  1157. package/dist/infra/backoff.js +19 -0
  1158. package/dist/infra/binaries.js +9 -0
  1159. package/dist/infra/bonjour-ciao.js +10 -0
  1160. package/dist/infra/bonjour-discovery.js +445 -0
  1161. package/dist/infra/bonjour-errors.js +7 -0
  1162. package/dist/infra/bonjour.js +209 -0
  1163. package/dist/infra/brew.js +55 -0
  1164. package/dist/infra/canvas-host-url.js +52 -0
  1165. package/dist/infra/channel-activity.js +32 -0
  1166. package/dist/infra/channel-summary.js +183 -0
  1167. package/dist/infra/channels-status-issues.js +15 -0
  1168. package/dist/infra/clipboard.js +38 -0
  1169. package/dist/infra/control-ui-assets.js +98 -0
  1170. package/dist/infra/dedupe.js +47 -0
  1171. package/dist/infra/device-auth-store.js +97 -0
  1172. package/dist/infra/device-identity.js +149 -0
  1173. package/dist/infra/device-pairing.js +401 -0
  1174. package/dist/infra/diagnostic-events.js +28 -0
  1175. package/dist/infra/diagnostic-flags.js +66 -0
  1176. package/dist/infra/dotenv.js +15 -0
  1177. package/dist/infra/env-file.js +43 -0
  1178. package/dist/infra/env.js +34 -0
  1179. package/dist/infra/errors.js +35 -0
  1180. package/dist/infra/exec-approval-forwarder.js +212 -0
  1181. package/dist/infra/exec-approvals.js +1040 -0
  1182. package/dist/infra/exec-host.js +75 -0
  1183. package/dist/infra/exec-safety.js +31 -0
  1184. package/dist/infra/fetch.js +58 -0
  1185. package/dist/infra/format-duration.js +20 -0
  1186. package/dist/infra/fs-safe.js +76 -0
  1187. package/dist/infra/gateway-lock.js +203 -0
  1188. package/dist/infra/git-commit.js +106 -0
  1189. package/dist/infra/heartbeat-events.js +34 -0
  1190. package/dist/infra/heartbeat-runner.js +743 -0
  1191. package/dist/infra/heartbeat-visibility.js +45 -0
  1192. package/dist/infra/heartbeat-wake.js +61 -0
  1193. package/dist/infra/is-main.js +33 -0
  1194. package/dist/infra/json-file.js +21 -0
  1195. package/dist/infra/machine-name.js +43 -0
  1196. package/dist/infra/moltbot-root.js +57 -0
  1197. package/dist/infra/net/ssrf.js +199 -0
  1198. package/dist/infra/node-pairing.js +228 -0
  1199. package/dist/infra/node-shell.js +9 -0
  1200. package/dist/infra/os-summary.js +23 -0
  1201. package/dist/infra/outbound/agent-delivery.js +86 -0
  1202. package/dist/infra/outbound/channel-adapters.js +16 -0
  1203. package/dist/infra/outbound/channel-selection.js +62 -0
  1204. package/dist/infra/outbound/channel-target.js +28 -0
  1205. package/dist/infra/outbound/deliver.js +253 -0
  1206. package/dist/infra/outbound/directory-cache.js +44 -0
  1207. package/dist/infra/outbound/envelope.js +20 -0
  1208. package/dist/infra/outbound/format.js +66 -0
  1209. package/dist/infra/outbound/message-action-runner.js +766 -0
  1210. package/dist/infra/outbound/message-action-spec.js +83 -0
  1211. package/dist/infra/outbound/message.js +189 -0
  1212. package/dist/infra/outbound/outbound-policy.js +122 -0
  1213. package/dist/infra/outbound/outbound-send-service.js +123 -0
  1214. package/dist/infra/outbound/outbound-session.js +744 -0
  1215. package/dist/infra/outbound/payloads.js +78 -0
  1216. package/dist/infra/outbound/target-errors.js +23 -0
  1217. package/dist/infra/outbound/target-normalization.js +27 -0
  1218. package/dist/infra/outbound/target-resolver.js +348 -0
  1219. package/dist/infra/outbound/targets.js +213 -0
  1220. package/dist/infra/path-env.js +93 -0
  1221. package/dist/infra/ports-format.js +53 -0
  1222. package/dist/infra/ports-inspect.js +240 -0
  1223. package/dist/infra/ports-lsof.js +33 -0
  1224. package/dist/infra/ports-types.js +1 -0
  1225. package/dist/infra/ports.js +75 -0
  1226. package/dist/infra/provider-usage.auth.js +188 -0
  1227. package/dist/infra/provider-usage.fetch.antigravity.js +212 -0
  1228. package/dist/infra/provider-usage.fetch.claude.js +129 -0
  1229. package/dist/infra/provider-usage.fetch.codex.js +62 -0
  1230. package/dist/infra/provider-usage.fetch.copilot.js +42 -0
  1231. package/dist/infra/provider-usage.fetch.gemini.js +57 -0
  1232. package/dist/infra/provider-usage.fetch.js +7 -0
  1233. package/dist/infra/provider-usage.fetch.minimax.js +332 -0
  1234. package/dist/infra/provider-usage.fetch.shared.js +10 -0
  1235. package/dist/infra/provider-usage.fetch.zai.js +62 -0
  1236. package/dist/infra/provider-usage.format.js +96 -0
  1237. package/dist/infra/provider-usage.js +3 -0
  1238. package/dist/infra/provider-usage.load.js +59 -0
  1239. package/dist/infra/provider-usage.shared.js +51 -0
  1240. package/dist/infra/provider-usage.types.js +1 -0
  1241. package/dist/infra/restart-sentinel.js +65 -0
  1242. package/dist/infra/restart.js +171 -0
  1243. package/dist/infra/retry-policy.js +71 -0
  1244. package/dist/infra/retry.js +85 -0
  1245. package/dist/infra/runtime-guard.js +60 -0
  1246. package/dist/infra/session-cost-usage.js +190 -0
  1247. package/dist/infra/shell-env.js +125 -0
  1248. package/dist/infra/skills-remote.js +282 -0
  1249. package/dist/infra/ssh-config.js +83 -0
  1250. package/dist/infra/ssh-tunnel.js +166 -0
  1251. package/dist/infra/state-migrations.fs.js +49 -0
  1252. package/dist/infra/state-migrations.js +613 -0
  1253. package/dist/infra/system-events.js +75 -0
  1254. package/dist/infra/system-presence.js +231 -0
  1255. package/dist/infra/tailnet.js +46 -0
  1256. package/dist/infra/tailscale.js +368 -0
  1257. package/dist/infra/termux-api.js +71 -0
  1258. package/dist/infra/tls/fingerprint.js +5 -0
  1259. package/dist/infra/tls/gateway.js +119 -0
  1260. package/dist/infra/transport-ready.js +38 -0
  1261. package/dist/infra/unhandled-rejections.js +139 -0
  1262. package/dist/infra/update-channels.js +57 -0
  1263. package/dist/infra/update-check.js +293 -0
  1264. package/dist/infra/update-global.js +85 -0
  1265. package/dist/infra/update-runner.js +577 -0
  1266. package/dist/infra/update-startup.js +86 -0
  1267. package/dist/infra/voicewake.js +74 -0
  1268. package/dist/infra/warnings.js +25 -0
  1269. package/dist/infra/widearea-dns.js +131 -0
  1270. package/dist/infra/ws.js +13 -0
  1271. package/dist/infra/wsl.js +25 -0
  1272. package/dist/line/accounts.js +130 -0
  1273. package/dist/line/auto-reply-delivery.js +102 -0
  1274. package/dist/line/bot-access.js +38 -0
  1275. package/dist/line/bot-handlers.js +258 -0
  1276. package/dist/line/bot-message-context.js +374 -0
  1277. package/dist/line/bot.js +48 -0
  1278. package/dist/line/config-schema.js +47 -0
  1279. package/dist/line/download.js +95 -0
  1280. package/dist/line/flex-templates.js +1264 -0
  1281. package/dist/line/http-registry.js +27 -0
  1282. package/dist/line/index.js +19 -0
  1283. package/dist/line/markdown-to-line.js +346 -0
  1284. package/dist/line/monitor.js +266 -0
  1285. package/dist/line/probe.js +37 -0
  1286. package/dist/line/reply-chunks.js +53 -0
  1287. package/dist/line/rich-menu.js +320 -0
  1288. package/dist/line/send.js +451 -0
  1289. package/dist/line/signature.js +11 -0
  1290. package/dist/line/template-messages.js +258 -0
  1291. package/dist/line/types.js +1 -0
  1292. package/dist/line/webhook.js +71 -0
  1293. package/dist/link-understanding/apply.js +22 -0
  1294. package/dist/link-understanding/defaults.js +2 -0
  1295. package/dist/link-understanding/detect.js +49 -0
  1296. package/dist/link-understanding/format.js +10 -0
  1297. package/dist/link-understanding/index.js +4 -0
  1298. package/dist/link-understanding/runner.js +99 -0
  1299. package/dist/logger.js +53 -0
  1300. package/dist/logging/config.js +19 -0
  1301. package/dist/logging/console.js +237 -0
  1302. package/dist/logging/diagnostic.js +236 -0
  1303. package/dist/logging/levels.js +26 -0
  1304. package/dist/logging/logger.js +185 -0
  1305. package/dist/logging/parse-log-line.js +52 -0
  1306. package/dist/logging/redact.js +115 -0
  1307. package/dist/logging/state.js +12 -0
  1308. package/dist/logging/subsystem.js +234 -0
  1309. package/dist/logging.js +5 -0
  1310. package/dist/macos/gateway-daemon.js +178 -0
  1311. package/dist/macos/relay-smoke.js +29 -0
  1312. package/dist/macos/relay.js +60 -0
  1313. package/dist/markdown/code-spans.js +67 -0
  1314. package/dist/markdown/fences.js +57 -0
  1315. package/dist/markdown/frontmatter.js +124 -0
  1316. package/dist/markdown/ir.js +687 -0
  1317. package/dist/markdown/render.js +113 -0
  1318. package/dist/markdown/tables.js +35 -0
  1319. package/dist/media/audio-tags.js +14 -0
  1320. package/dist/media/audio.js +15 -0
  1321. package/dist/media/constants.js +33 -0
  1322. package/dist/media/fetch.js +151 -0
  1323. package/dist/media/host.js +43 -0
  1324. package/dist/media/image-ops.js +385 -0
  1325. package/dist/media/input-files.js +276 -0
  1326. package/dist/media/mime.js +147 -0
  1327. package/dist/media/parse.js +175 -0
  1328. package/dist/media/server.js +88 -0
  1329. package/dist/media/store.js +200 -0
  1330. package/dist/media-understanding/apply.js +78 -0
  1331. package/dist/media-understanding/attachments.js +320 -0
  1332. package/dist/media-understanding/concurrency.js +26 -0
  1333. package/dist/media-understanding/defaults.js +30 -0
  1334. package/dist/media-understanding/errors.js +11 -0
  1335. package/dist/media-understanding/format.js +56 -0
  1336. package/dist/media-understanding/index.js +3 -0
  1337. package/dist/media-understanding/providers/anthropic/index.js +6 -0
  1338. package/dist/media-understanding/providers/deepgram/audio.js +47 -0
  1339. package/dist/media-understanding/providers/deepgram/index.js +6 -0
  1340. package/dist/media-understanding/providers/google/audio.js +64 -0
  1341. package/dist/media-understanding/providers/google/index.js +10 -0
  1342. package/dist/media-understanding/providers/google/video.js +64 -0
  1343. package/dist/media-understanding/providers/groq/index.js +10 -0
  1344. package/dist/media-understanding/providers/image.js +59 -0
  1345. package/dist/media-understanding/providers/index.js +45 -0
  1346. package/dist/media-understanding/providers/minimax/index.js +6 -0
  1347. package/dist/media-understanding/providers/openai/audio.js +46 -0
  1348. package/dist/media-understanding/providers/openai/index.js +8 -0
  1349. package/dist/media-understanding/providers/shared.js +29 -0
  1350. package/dist/media-understanding/resolve.js +113 -0
  1351. package/dist/media-understanding/runner.js +1008 -0
  1352. package/dist/media-understanding/scope.js +41 -0
  1353. package/dist/media-understanding/types.js +1 -0
  1354. package/dist/media-understanding/video.js +8 -0
  1355. package/dist/memory/batch-gemini.js +320 -0
  1356. package/dist/memory/batch-openai.js +290 -0
  1357. package/dist/memory/embeddings-gemini.js +129 -0
  1358. package/dist/memory/embeddings-openai.js +65 -0
  1359. package/dist/memory/embeddings.js +170 -0
  1360. package/dist/memory/headers-fingerprint.js +16 -0
  1361. package/dist/memory/hybrid.js +61 -0
  1362. package/dist/memory/index.js +1 -0
  1363. package/dist/memory/internal.js +189 -0
  1364. package/dist/memory/manager-cache-key.js +45 -0
  1365. package/dist/memory/manager-search.js +95 -0
  1366. package/dist/memory/manager.js +1815 -0
  1367. package/dist/memory/memory-schema.js +79 -0
  1368. package/dist/memory/node-llama.js +3 -0
  1369. package/dist/memory/openai-batch.js +2 -0
  1370. package/dist/memory/provider-key.js +23 -0
  1371. package/dist/memory/search-manager.js +11 -0
  1372. package/dist/memory/session-files.js +98 -0
  1373. package/dist/memory/sqlite-vec.js +19 -0
  1374. package/dist/memory/sqlite.js +7 -0
  1375. package/dist/memory/status-format.js +23 -0
  1376. package/dist/memory/sync-memory-files.js +69 -0
  1377. package/dist/memory/sync-session-files.js +95 -0
  1378. package/dist/node-host/config.js +53 -0
  1379. package/dist/node-host/runner.js +955 -0
  1380. package/dist/pairing/pairing-labels.js +4 -0
  1381. package/dist/pairing/pairing-messages.js +14 -0
  1382. package/dist/pairing/pairing-store.js +357 -0
  1383. package/dist/plugin-sdk/index.js +85 -0
  1384. package/dist/plugins/bundled-dir.js +35 -0
  1385. package/dist/plugins/cli.js +49 -0
  1386. package/dist/plugins/commands.js +228 -0
  1387. package/dist/plugins/config-schema.js +23 -0
  1388. package/dist/plugins/config-state.js +101 -0
  1389. package/dist/plugins/discovery.js +274 -0
  1390. package/dist/plugins/enable.js +36 -0
  1391. package/dist/plugins/hook-runner-global.js +57 -0
  1392. package/dist/plugins/hooks.js +283 -0
  1393. package/dist/plugins/http-path.js +10 -0
  1394. package/dist/plugins/http-registry.js +31 -0
  1395. package/dist/plugins/install.js +324 -0
  1396. package/dist/plugins/installs.js +21 -0
  1397. package/dist/plugins/loader.js +371 -0
  1398. package/dist/plugins/manifest-registry.js +136 -0
  1399. package/dist/plugins/manifest.js +84 -0
  1400. package/dist/plugins/providers.js +16 -0
  1401. package/dist/plugins/registry.js +312 -0
  1402. package/dist/plugins/runtime/index.js +290 -0
  1403. package/dist/plugins/runtime/native-deps.js +16 -0
  1404. package/dist/plugins/runtime/types.js +1 -0
  1405. package/dist/plugins/runtime.js +42 -0
  1406. package/dist/plugins/schema-validator.js +28 -0
  1407. package/dist/plugins/services.js +55 -0
  1408. package/dist/plugins/slots.js +68 -0
  1409. package/dist/plugins/status.js +27 -0
  1410. package/dist/plugins/tools.js +98 -0
  1411. package/dist/plugins/types.js +1 -0
  1412. package/dist/plugins/update.js +324 -0
  1413. package/dist/polls.js +41 -0
  1414. package/dist/process/child-process-bridge.js +34 -0
  1415. package/dist/process/command-queue.js +104 -0
  1416. package/dist/process/exec.js +98 -0
  1417. package/dist/process/lanes.js +1 -0
  1418. package/dist/process/spawn-utils.js +95 -0
  1419. package/dist/providers/github-copilot-auth.js +124 -0
  1420. package/dist/providers/github-copilot-models.js +35 -0
  1421. package/dist/providers/github-copilot-token.js +95 -0
  1422. package/dist/providers/qwen-portal-oauth.js +38 -0
  1423. package/dist/routing/bindings.js +87 -0
  1424. package/dist/routing/resolve-route.js +140 -0
  1425. package/dist/routing/session-key.js +169 -0
  1426. package/dist/runtime.js +15 -0
  1427. package/dist/security/audit-extra.js +833 -0
  1428. package/dist/security/audit-fs.js +133 -0
  1429. package/dist/security/audit.js +759 -0
  1430. package/dist/security/external-content.js +143 -0
  1431. package/dist/security/fix.js +402 -0
  1432. package/dist/security/windows-acl.js +162 -0
  1433. package/dist/sessions/level-overrides.js +24 -0
  1434. package/dist/sessions/model-overrides.js +57 -0
  1435. package/dist/sessions/send-policy.js +69 -0
  1436. package/dist/sessions/session-key-utils.js +51 -0
  1437. package/dist/sessions/session-label.js +16 -0
  1438. package/dist/sessions/transcript-events.js +16 -0
  1439. package/dist/shared/text/reasoning-tags.js +48 -0
  1440. package/dist/signal/accounts.js +59 -0
  1441. package/dist/signal/client.js +141 -0
  1442. package/dist/signal/daemon.js +69 -0
  1443. package/dist/signal/format.js +165 -0
  1444. package/dist/signal/identity.js +95 -0
  1445. package/dist/signal/index.js +5 -0
  1446. package/dist/signal/monitor/event-handler.js +492 -0
  1447. package/dist/signal/monitor/event-handler.types.js +1 -0
  1448. package/dist/signal/monitor.js +269 -0
  1449. package/dist/signal/probe.js +46 -0
  1450. package/dist/signal/reaction-level.js +53 -0
  1451. package/dist/signal/send-reactions.js +155 -0
  1452. package/dist/signal/send.js +192 -0
  1453. package/dist/signal/sse-reconnect.js +56 -0
  1454. package/dist/slack/accounts.js +84 -0
  1455. package/dist/slack/actions.js +156 -0
  1456. package/dist/slack/channel-migration.js +53 -0
  1457. package/dist/slack/client.js +17 -0
  1458. package/dist/slack/directory-live.js +122 -0
  1459. package/dist/slack/format.js +111 -0
  1460. package/dist/slack/http/index.js +1 -0
  1461. package/dist/slack/http/registry.js +27 -0
  1462. package/dist/slack/index.js +6 -0
  1463. package/dist/slack/monitor/allow-list.js +58 -0
  1464. package/dist/slack/monitor/auth.js +17 -0
  1465. package/dist/slack/monitor/channel-config.js +79 -0
  1466. package/dist/slack/monitor/commands.js +17 -0
  1467. package/dist/slack/monitor/context.js +242 -0
  1468. package/dist/slack/monitor/events/channels.js +116 -0
  1469. package/dist/slack/monitor/events/members.js +74 -0
  1470. package/dist/slack/monitor/events/messages.js +111 -0
  1471. package/dist/slack/monitor/events/pins.js +76 -0
  1472. package/dist/slack/monitor/events/reactions.js +54 -0
  1473. package/dist/slack/monitor/events.js +15 -0
  1474. package/dist/slack/monitor/media.js +93 -0
  1475. package/dist/slack/monitor/message-handler/dispatch.js +170 -0
  1476. package/dist/slack/monitor/message-handler/prepare.js +477 -0
  1477. package/dist/slack/monitor/message-handler/types.js +1 -0
  1478. package/dist/slack/monitor/message-handler.js +87 -0
  1479. package/dist/slack/monitor/policy.js +10 -0
  1480. package/dist/slack/monitor/provider.js +324 -0
  1481. package/dist/slack/monitor/replies.js +107 -0
  1482. package/dist/slack/monitor/slash.js +504 -0
  1483. package/dist/slack/monitor/thread-resolution.js +102 -0
  1484. package/dist/slack/monitor/types.js +1 -0
  1485. package/dist/slack/monitor.js +4 -0
  1486. package/dist/slack/monitor.test-helpers.js +119 -0
  1487. package/dist/slack/probe.js +47 -0
  1488. package/dist/slack/resolve-channels.js +88 -0
  1489. package/dist/slack/resolve-users.js +133 -0
  1490. package/dist/slack/scopes.js +87 -0
  1491. package/dist/slack/send.js +132 -0
  1492. package/dist/slack/targets.js +48 -0
  1493. package/dist/slack/threading-tool-context.js +18 -0
  1494. package/dist/slack/threading.js +26 -0
  1495. package/dist/slack/token.js +10 -0
  1496. package/dist/slack/types.js +1 -0
  1497. package/dist/telegram/accounts.js +98 -0
  1498. package/dist/telegram/allowed-updates.js +8 -0
  1499. package/dist/telegram/api-logging.js +24 -0
  1500. package/dist/telegram/audit.js +116 -0
  1501. package/dist/telegram/bot/delivery.js +424 -0
  1502. package/dist/telegram/bot/helpers.js +313 -0
  1503. package/dist/telegram/bot/types.js +1 -0
  1504. package/dist/telegram/bot-access.js +59 -0
  1505. package/dist/telegram/bot-handlers.js +578 -0
  1506. package/dist/telegram/bot-message-context.js +496 -0
  1507. package/dist/telegram/bot-message-dispatch.js +251 -0
  1508. package/dist/telegram/bot-message.js +41 -0
  1509. package/dist/telegram/bot-native-commands.js +436 -0
  1510. package/dist/telegram/bot-updates.js +25 -0
  1511. package/dist/telegram/bot.js +399 -0
  1512. package/dist/telegram/caption.js +11 -0
  1513. package/dist/telegram/download.js +34 -0
  1514. package/dist/telegram/draft-chunking.js +22 -0
  1515. package/dist/telegram/draft-stream.js +101 -0
  1516. package/dist/telegram/fetch.js +35 -0
  1517. package/dist/telegram/format.js +66 -0
  1518. package/dist/telegram/group-migration.js +53 -0
  1519. package/dist/telegram/index.js +4 -0
  1520. package/dist/telegram/inline-buttons.js +55 -0
  1521. package/dist/telegram/monitor.js +150 -0
  1522. package/dist/telegram/network-config.js +23 -0
  1523. package/dist/telegram/network-errors.js +103 -0
  1524. package/dist/telegram/pairing-store.js +77 -0
  1525. package/dist/telegram/probe.js +70 -0
  1526. package/dist/telegram/proxy.js +10 -0
  1527. package/dist/telegram/reaction-level.js +46 -0
  1528. package/dist/telegram/send.js +535 -0
  1529. package/dist/telegram/sent-message-cache.js +53 -0
  1530. package/dist/telegram/sticker-cache.js +202 -0
  1531. package/dist/telegram/targets.js +46 -0
  1532. package/dist/telegram/token.js +58 -0
  1533. package/dist/telegram/update-offset-store.js +60 -0
  1534. package/dist/telegram/voice.js +23 -0
  1535. package/dist/telegram/webhook-set.js +28 -0
  1536. package/dist/telegram/webhook.js +95 -0
  1537. package/dist/terminal/ansi.js +11 -0
  1538. package/dist/terminal/links.js +17 -0
  1539. package/dist/terminal/note.js +79 -0
  1540. package/dist/terminal/palette.js +12 -0
  1541. package/dist/terminal/progress-line.js +18 -0
  1542. package/dist/terminal/prompt-style.js +4 -0
  1543. package/dist/terminal/stream-writer.js +49 -0
  1544. package/dist/terminal/table.js +327 -0
  1545. package/dist/terminal/theme.js +22 -0
  1546. package/dist/tts/tts.js +1164 -0
  1547. package/dist/tui/commands.js +134 -0
  1548. package/dist/tui/components/assistant-message.js +16 -0
  1549. package/dist/tui/components/chat-log.js +86 -0
  1550. package/dist/tui/components/custom-editor.js +61 -0
  1551. package/dist/tui/components/filterable-select-list.js +102 -0
  1552. package/dist/tui/components/fuzzy-filter.js +113 -0
  1553. package/dist/tui/components/searchable-select-list.js +231 -0
  1554. package/dist/tui/components/selectors.js +16 -0
  1555. package/dist/tui/components/tool-execution.js +109 -0
  1556. package/dist/tui/components/user-message.js +17 -0
  1557. package/dist/tui/gateway-chat.js +146 -0
  1558. package/dist/tui/theme/syntax-theme.js +49 -0
  1559. package/dist/tui/theme/theme.js +119 -0
  1560. package/dist/tui/tui-command-handlers.js +418 -0
  1561. package/dist/tui/tui-event-handlers.js +160 -0
  1562. package/dist/tui/tui-formatters.js +158 -0
  1563. package/dist/tui/tui-local-shell.js +99 -0
  1564. package/dist/tui/tui-overlays.js +13 -0
  1565. package/dist/tui/tui-session-actions.js +205 -0
  1566. package/dist/tui/tui-status-summary.js +74 -0
  1567. package/dist/tui/tui-stream-assembler.js +54 -0
  1568. package/dist/tui/tui-types.js +1 -0
  1569. package/dist/tui/tui-waiting.js +34 -0
  1570. package/dist/tui/tui.js +551 -0
  1571. package/dist/utils/account-id.js +6 -0
  1572. package/dist/utils/boolean.js +22 -0
  1573. package/dist/utils/delivery-context.js +84 -0
  1574. package/dist/utils/directive-tags.js +54 -0
  1575. package/dist/utils/message-channel.js +84 -0
  1576. package/dist/utils/provider-utils.js +28 -0
  1577. package/dist/utils/queue-helpers.js +95 -0
  1578. package/dist/utils/time-format.js +19 -0
  1579. package/dist/utils/usage-format.js +46 -0
  1580. package/dist/utils.js +258 -0
  1581. package/dist/version.js +18 -0
  1582. package/dist/web/accounts.js +122 -0
  1583. package/dist/web/active-listener.js +37 -0
  1584. package/dist/web/auth-store.js +168 -0
  1585. package/dist/web/auto-reply/constants.js +1 -0
  1586. package/dist/web/auto-reply/deliver-reply.js +140 -0
  1587. package/dist/web/auto-reply/heartbeat-runner.js +264 -0
  1588. package/dist/web/auto-reply/loggers.js +5 -0
  1589. package/dist/web/auto-reply/mentions.js +79 -0
  1590. package/dist/web/auto-reply/monitor/ack-reaction.js +47 -0
  1591. package/dist/web/auto-reply/monitor/broadcast.js +64 -0
  1592. package/dist/web/auto-reply/monitor/commands.js +21 -0
  1593. package/dist/web/auto-reply/monitor/echo.js +36 -0
  1594. package/dist/web/auto-reply/monitor/group-activation.js +37 -0
  1595. package/dist/web/auto-reply/monitor/group-gating.js +98 -0
  1596. package/dist/web/auto-reply/monitor/group-members.js +53 -0
  1597. package/dist/web/auto-reply/monitor/last-route.js +38 -0
  1598. package/dist/web/auto-reply/monitor/message-line.js +35 -0
  1599. package/dist/web/auto-reply/monitor/on-message.js +128 -0
  1600. package/dist/web/auto-reply/monitor/peer.js +10 -0
  1601. package/dist/web/auto-reply/monitor/process-message.js +316 -0
  1602. package/dist/web/auto-reply/monitor.js +355 -0
  1603. package/dist/web/auto-reply/session-snapshot.js +40 -0
  1604. package/dist/web/auto-reply/types.js +1 -0
  1605. package/dist/web/auto-reply/util.js +47 -0
  1606. package/dist/web/auto-reply.impl.js +5 -0
  1607. package/dist/web/auto-reply.js +1 -0
  1608. package/dist/web/inbound/access-control.js +147 -0
  1609. package/dist/web/inbound/dedupe.js +13 -0
  1610. package/dist/web/inbound/extract.js +254 -0
  1611. package/dist/web/inbound/media.js +35 -0
  1612. package/dist/web/inbound/monitor.js +332 -0
  1613. package/dist/web/inbound/send-api.js +90 -0
  1614. package/dist/web/inbound/types.js +1 -0
  1615. package/dist/web/inbound.js +3 -0
  1616. package/dist/web/login-qr.js +227 -0
  1617. package/dist/web/login.js +68 -0
  1618. package/dist/web/media.js +221 -0
  1619. package/dist/web/outbound.js +132 -0
  1620. package/dist/web/qr-image.js +95 -0
  1621. package/dist/web/reconnect.js +36 -0
  1622. package/dist/web/session.js +243 -0
  1623. package/dist/web/vcard.js +63 -0
  1624. package/dist/whatsapp/normalize.js +66 -0
  1625. package/dist/wizard/clack-prompter.js +72 -0
  1626. package/dist/wizard/onboarding.finalize.js +351 -0
  1627. package/dist/wizard/onboarding.gateway-config.js +188 -0
  1628. package/dist/wizard/onboarding.js +372 -0
  1629. package/dist/wizard/onboarding.types.js +1 -0
  1630. package/dist/wizard/prompts.js +6 -0
  1631. package/dist/wizard/session.js +201 -0
  1632. package/docs/CNAME +1 -0
  1633. package/docs/_config.yml +53 -0
  1634. package/docs/_layouts/default.html +145 -0
  1635. package/docs/assets/markdown.css +179 -0
  1636. package/docs/assets/pixel-lobster.svg +60 -0
  1637. package/docs/assets/showcase/agents-ui.jpg +0 -0
  1638. package/docs/assets/showcase/bambu-cli.png +0 -0
  1639. package/docs/assets/showcase/codexmonitor.png +0 -0
  1640. package/docs/assets/showcase/gohome-grafana.png +0 -0
  1641. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  1642. package/docs/assets/showcase/oura-health.png +0 -0
  1643. package/docs/assets/showcase/padel-cli.svg +11 -0
  1644. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  1645. package/docs/assets/showcase/papla-tts.jpg +0 -0
  1646. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  1647. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  1648. package/docs/assets/showcase/roborock-status.svg +13 -0
  1649. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  1650. package/docs/assets/showcase/snag.png +0 -0
  1651. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  1652. package/docs/assets/showcase/wienerlinien.png +0 -0
  1653. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  1654. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  1655. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  1656. package/docs/assets/terminal.css +473 -0
  1657. package/docs/assets/theme.js +55 -0
  1658. package/docs/automation/auth-monitoring.md +41 -0
  1659. package/docs/automation/cron-jobs.md +286 -0
  1660. package/docs/automation/cron-vs-heartbeat.md +274 -0
  1661. package/docs/automation/gmail-pubsub.md +252 -0
  1662. package/docs/automation/poll.md +63 -0
  1663. package/docs/automation/webhook.md +155 -0
  1664. package/docs/bedrock.md +172 -0
  1665. package/docs/brave-search.md +40 -0
  1666. package/docs/broadcast-groups.md +407 -0
  1667. package/docs/channels/bluebubbles.md +233 -0
  1668. package/docs/channels/discord.md +404 -0
  1669. package/docs/channels/googlechat.md +220 -0
  1670. package/docs/channels/grammy.md +27 -0
  1671. package/docs/channels/imessage.md +261 -0
  1672. package/docs/channels/index.md +43 -0
  1673. package/docs/channels/line.md +183 -0
  1674. package/docs/channels/location.md +48 -0
  1675. package/docs/channels/matrix.md +230 -0
  1676. package/docs/channels/mattermost.md +123 -0
  1677. package/docs/channels/msteams.md +707 -0
  1678. package/docs/channels/nextcloud-talk.md +120 -0
  1679. package/docs/channels/nostr.md +235 -0
  1680. package/docs/channels/signal.md +179 -0
  1681. package/docs/channels/slack.md +509 -0
  1682. package/docs/channels/telegram.md +675 -0
  1683. package/docs/channels/tlon.md +133 -0
  1684. package/docs/channels/troubleshooting.md +25 -0
  1685. package/docs/channels/twitch.md +366 -0
  1686. package/docs/channels/whatsapp.md +362 -0
  1687. package/docs/channels/zalo.md +167 -0
  1688. package/docs/channels/zalouser.md +123 -0
  1689. package/docs/cli/acp.md +166 -0
  1690. package/docs/cli/agent.md +22 -0
  1691. package/docs/cli/agents.md +71 -0
  1692. package/docs/cli/approvals.md +48 -0
  1693. package/docs/cli/browser.md +104 -0
  1694. package/docs/cli/channels.md +75 -0
  1695. package/docs/cli/config.md +49 -0
  1696. package/docs/cli/configure.md +30 -0
  1697. package/docs/cli/cron.md +29 -0
  1698. package/docs/cli/dashboard.md +16 -0
  1699. package/docs/cli/devices.md +66 -0
  1700. package/docs/cli/directory.md +60 -0
  1701. package/docs/cli/dns.md +22 -0
  1702. package/docs/cli/docs.md +15 -0
  1703. package/docs/cli/doctor.md +38 -0
  1704. package/docs/cli/gateway.md +187 -0
  1705. package/docs/cli/health.md +19 -0
  1706. package/docs/cli/hooks.md +290 -0
  1707. package/docs/cli/index.md +918 -0
  1708. package/docs/cli/logs.md +23 -0
  1709. package/docs/cli/memory.md +41 -0
  1710. package/docs/cli/message.md +228 -0
  1711. package/docs/cli/models.md +68 -0
  1712. package/docs/cli/node.md +108 -0
  1713. package/docs/cli/nodes.md +68 -0
  1714. package/docs/cli/onboard.md +26 -0
  1715. package/docs/cli/pairing.md +20 -0
  1716. package/docs/cli/plugins.md +60 -0
  1717. package/docs/cli/reset.md +17 -0
  1718. package/docs/cli/sandbox.md +150 -0
  1719. package/docs/cli/security.md +24 -0
  1720. package/docs/cli/sessions.md +16 -0
  1721. package/docs/cli/setup.md +28 -0
  1722. package/docs/cli/skills.md +25 -0
  1723. package/docs/cli/status.md +24 -0
  1724. package/docs/cli/system.md +55 -0
  1725. package/docs/cli/tui.md +22 -0
  1726. package/docs/cli/uninstall.md +17 -0
  1727. package/docs/cli/update.md +96 -0
  1728. package/docs/cli/voicecall.md +33 -0
  1729. package/docs/cli/webhooks.md +23 -0
  1730. package/docs/concepts/agent-loop.md +126 -0
  1731. package/docs/concepts/agent-workspace.md +231 -0
  1732. package/docs/concepts/agent.md +117 -0
  1733. package/docs/concepts/architecture.md +122 -0
  1734. package/docs/concepts/channel-routing.md +114 -0
  1735. package/docs/concepts/compaction.md +49 -0
  1736. package/docs/concepts/context.md +151 -0
  1737. package/docs/concepts/group-messages.md +78 -0
  1738. package/docs/concepts/groups.md +344 -0
  1739. package/docs/concepts/markdown-formatting.md +132 -0
  1740. package/docs/concepts/memory.md +388 -0
  1741. package/docs/concepts/messages.md +143 -0
  1742. package/docs/concepts/model-failover.md +139 -0
  1743. package/docs/concepts/model-providers.md +318 -0
  1744. package/docs/concepts/models.md +202 -0
  1745. package/docs/concepts/multi-agent.md +354 -0
  1746. package/docs/concepts/oauth.md +135 -0
  1747. package/docs/concepts/presence.md +98 -0
  1748. package/docs/concepts/queue.md +77 -0
  1749. package/docs/concepts/retry.md +60 -0
  1750. package/docs/concepts/session-pruning.md +104 -0
  1751. package/docs/concepts/session-tool.md +171 -0
  1752. package/docs/concepts/session.md +150 -0
  1753. package/docs/concepts/sessions.md +8 -0
  1754. package/docs/concepts/streaming.md +123 -0
  1755. package/docs/concepts/system-prompt.md +110 -0
  1756. package/docs/concepts/timezone.md +89 -0
  1757. package/docs/concepts/typebox.md +281 -0
  1758. package/docs/concepts/typing-indicators.md +59 -0
  1759. package/docs/concepts/usage-tracking.md +30 -0
  1760. package/docs/date-time.md +127 -0
  1761. package/docs/debug/node-issue.md +72 -0
  1762. package/docs/debugging.md +161 -0
  1763. package/docs/diagnostics/flags.md +89 -0
  1764. package/docs/docs.json +1137 -0
  1765. package/docs/environment.md +78 -0
  1766. package/docs/experiments/onboarding-config-protocol.md +34 -0
  1767. package/docs/experiments/plans/cron-add-hardening.md +57 -0
  1768. package/docs/experiments/plans/group-policy-hardening.md +38 -0
  1769. package/docs/experiments/plans/openresponses-gateway.md +122 -0
  1770. package/docs/experiments/proposals/model-config.md +32 -0
  1771. package/docs/experiments/research/memory.md +210 -0
  1772. package/docs/gateway/authentication.md +143 -0
  1773. package/docs/gateway/background-process.md +82 -0
  1774. package/docs/gateway/bonjour.md +162 -0
  1775. package/docs/gateway/bridge-protocol.md +85 -0
  1776. package/docs/gateway/cli-backends.md +221 -0
  1777. package/docs/gateway/configuration-examples.md +572 -0
  1778. package/docs/gateway/configuration.md +3252 -0
  1779. package/docs/gateway/discovery.md +110 -0
  1780. package/docs/gateway/doctor.md +252 -0
  1781. package/docs/gateway/gateway-lock.md +28 -0
  1782. package/docs/gateway/health.md +29 -0
  1783. package/docs/gateway/heartbeat.md +297 -0
  1784. package/docs/gateway/index.md +292 -0
  1785. package/docs/gateway/local-models.md +146 -0
  1786. package/docs/gateway/logging.md +112 -0
  1787. package/docs/gateway/multiple-gateways.md +107 -0
  1788. package/docs/gateway/openai-http-api.md +112 -0
  1789. package/docs/gateway/openresponses-http-api.md +298 -0
  1790. package/docs/gateway/pairing.md +92 -0
  1791. package/docs/gateway/protocol.md +215 -0
  1792. package/docs/gateway/remote-gateway-readme.md +155 -0
  1793. package/docs/gateway/remote.md +122 -0
  1794. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +120 -0
  1795. package/docs/gateway/sandboxing.md +176 -0
  1796. package/docs/gateway/security/formal-verification.md +160 -0
  1797. package/docs/gateway/security/index.md +760 -0
  1798. package/docs/gateway/tailscale.md +124 -0
  1799. package/docs/gateway/tools-invoke-http-api.md +79 -0
  1800. package/docs/gateway/troubleshooting.md +714 -0
  1801. package/docs/help/faq.md +2726 -0
  1802. package/docs/help/index.md +20 -0
  1803. package/docs/help/troubleshooting.md +97 -0
  1804. package/docs/hooks/soul-evil.md +68 -0
  1805. package/docs/hooks.md +896 -0
  1806. package/docs/images/groups-flow.svg +52 -0
  1807. package/docs/images/mobile-ui-screenshot.png +0 -0
  1808. package/docs/index.md +240 -0
  1809. package/docs/install/ansible.md +205 -0
  1810. package/docs/install/bun.md +58 -0
  1811. package/docs/install/development-channels.md +74 -0
  1812. package/docs/install/docker.md +447 -0
  1813. package/docs/install/index.md +181 -0
  1814. package/docs/install/installer.md +122 -0
  1815. package/docs/install/migrating.md +190 -0
  1816. package/docs/install/nix.md +95 -0
  1817. package/docs/install/node.md +78 -0
  1818. package/docs/install/uninstall.md +125 -0
  1819. package/docs/install/updating.md +219 -0
  1820. package/docs/logging.md +343 -0
  1821. package/docs/multi-agent-sandbox-tools.md +374 -0
  1822. package/docs/network.md +51 -0
  1823. package/docs/nodes/audio.md +109 -0
  1824. package/docs/nodes/camera.md +152 -0
  1825. package/docs/nodes/images.md +61 -0
  1826. package/docs/nodes/index.md +305 -0
  1827. package/docs/nodes/location-command.md +95 -0
  1828. package/docs/nodes/media-understanding.md +313 -0
  1829. package/docs/nodes/talk.md +79 -0
  1830. package/docs/nodes/voicewake.md +61 -0
  1831. package/docs/northflank.mdx +53 -0
  1832. package/docs/perplexity.md +79 -0
  1833. package/docs/platforms/android.md +141 -0
  1834. package/docs/platforms/digitalocean.md +243 -0
  1835. package/docs/platforms/exe-dev.md +125 -0
  1836. package/docs/platforms/fly.md +465 -0
  1837. package/docs/platforms/gcp.md +498 -0
  1838. package/docs/platforms/hetzner.md +325 -0
  1839. package/docs/platforms/index.md +50 -0
  1840. package/docs/platforms/ios.md +104 -0
  1841. package/docs/platforms/linux.md +89 -0
  1842. package/docs/platforms/mac/bundled-gateway.md +67 -0
  1843. package/docs/platforms/mac/canvas.md +121 -0
  1844. package/docs/platforms/mac/child-process.md +67 -0
  1845. package/docs/platforms/mac/dev-setup.md +91 -0
  1846. package/docs/platforms/mac/health.md +28 -0
  1847. package/docs/platforms/mac/icon.md +26 -0
  1848. package/docs/platforms/mac/logging.md +51 -0
  1849. package/docs/platforms/mac/menu-bar.md +70 -0
  1850. package/docs/platforms/mac/peekaboo.md +62 -0
  1851. package/docs/platforms/mac/permissions.md +40 -0
  1852. package/docs/platforms/mac/release.md +77 -0
  1853. package/docs/platforms/mac/remote.md +71 -0
  1854. package/docs/platforms/mac/signing.md +43 -0
  1855. package/docs/platforms/mac/skills.md +27 -0
  1856. package/docs/platforms/mac/voice-overlay.md +52 -0
  1857. package/docs/platforms/mac/voicewake.md +56 -0
  1858. package/docs/platforms/mac/webchat.md +39 -0
  1859. package/docs/platforms/mac/xpc.md +51 -0
  1860. package/docs/platforms/macos-vm.md +275 -0
  1861. package/docs/platforms/macos.md +195 -0
  1862. package/docs/platforms/oracle.md +291 -0
  1863. package/docs/platforms/raspberry-pi.md +354 -0
  1864. package/docs/platforms/windows.md +153 -0
  1865. package/docs/plugin.md +638 -0
  1866. package/docs/plugins/agent-tools.md +96 -0
  1867. package/docs/plugins/manifest.md +67 -0
  1868. package/docs/plugins/voice-call.md +239 -0
  1869. package/docs/plugins/zalouser.md +75 -0
  1870. package/docs/prose.md +131 -0
  1871. package/docs/providers/anthropic.md +126 -0
  1872. package/docs/providers/claude-max-api-proxy.md +145 -0
  1873. package/docs/providers/deepgram.md +89 -0
  1874. package/docs/providers/github-copilot.md +70 -0
  1875. package/docs/providers/glm.md +31 -0
  1876. package/docs/providers/index.md +59 -0
  1877. package/docs/providers/minimax.md +183 -0
  1878. package/docs/providers/models.md +48 -0
  1879. package/docs/providers/moonshot.md +151 -0
  1880. package/docs/providers/ollama.md +219 -0
  1881. package/docs/providers/openai.md +60 -0
  1882. package/docs/providers/opencode.md +34 -0
  1883. package/docs/providers/openrouter.md +35 -0
  1884. package/docs/providers/qwen.md +51 -0
  1885. package/docs/providers/synthetic.md +97 -0
  1886. package/docs/providers/venice.md +264 -0
  1887. package/docs/providers/vercel-ai-gateway.md +50 -0
  1888. package/docs/providers/zai.md +34 -0
  1889. package/docs/railway.mdx +96 -0
  1890. package/docs/refactor/clawnet.md +360 -0
  1891. package/docs/refactor/exec-host.md +265 -0
  1892. package/docs/refactor/outbound-session-mirroring.md +75 -0
  1893. package/docs/refactor/plugin-sdk.md +187 -0
  1894. package/docs/refactor/strict-config.md +81 -0
  1895. package/docs/reference/AGENTS.default.md +113 -0
  1896. package/docs/reference/RELEASING.md +107 -0
  1897. package/docs/reference/api-usage-costs.md +116 -0
  1898. package/docs/reference/device-models.md +46 -0
  1899. package/docs/reference/rpc.md +35 -0
  1900. package/docs/reference/session-management-compaction.md +273 -0
  1901. package/docs/reference/templates/AGENTS.dev.md +78 -0
  1902. package/docs/reference/templates/AGENTS.md +196 -0
  1903. package/docs/reference/templates/BOOT.md +9 -0
  1904. package/docs/reference/templates/BOOTSTRAP.md +55 -0
  1905. package/docs/reference/templates/HEARTBEAT.md +9 -0
  1906. package/docs/reference/templates/IDENTITY.dev.md +40 -0
  1907. package/docs/reference/templates/IDENTITY.md +27 -0
  1908. package/docs/reference/templates/SOUL.dev.md +74 -0
  1909. package/docs/reference/templates/SOUL.md +41 -0
  1910. package/docs/reference/templates/TOOLS.dev.md +21 -0
  1911. package/docs/reference/templates/TOOLS.md +41 -0
  1912. package/docs/reference/templates/USER.dev.md +17 -0
  1913. package/docs/reference/templates/USER.md +22 -0
  1914. package/docs/reference/test.md +46 -0
  1915. package/docs/reference/transcript-hygiene.md +95 -0
  1916. package/docs/render.mdx +158 -0
  1917. package/docs/scripts.md +31 -0
  1918. package/docs/security/formal-verification.md +160 -0
  1919. package/docs/start/clawd.md +235 -0
  1920. package/docs/start/getting-started.md +204 -0
  1921. package/docs/start/hubs.md +182 -0
  1922. package/docs/start/lore.md +169 -0
  1923. package/docs/start/onboarding.md +103 -0
  1924. package/docs/start/pairing.md +83 -0
  1925. package/docs/start/setup.md +144 -0
  1926. package/docs/start/showcase.md +416 -0
  1927. package/docs/start/wizard.md +321 -0
  1928. package/docs/testing.md +349 -0
  1929. package/docs/token-use.md +110 -0
  1930. package/docs/tools/agent-send.md +51 -0
  1931. package/docs/tools/apply-patch.md +49 -0
  1932. package/docs/tools/browser-linux-troubleshooting.md +129 -0
  1933. package/docs/tools/browser-login.md +67 -0
  1934. package/docs/tools/browser.md +536 -0
  1935. package/docs/tools/chrome-extension.md +168 -0
  1936. package/docs/tools/clawdhub.md +201 -0
  1937. package/docs/tools/creating-skills.md +41 -0
  1938. package/docs/tools/elevated.md +49 -0
  1939. package/docs/tools/exec-approvals.md +226 -0
  1940. package/docs/tools/exec.md +167 -0
  1941. package/docs/tools/firecrawl.md +58 -0
  1942. package/docs/tools/index.md +450 -0
  1943. package/docs/tools/llm-task.md +114 -0
  1944. package/docs/tools/lobster.md +338 -0
  1945. package/docs/tools/reactions.md +20 -0
  1946. package/docs/tools/skills-config.md +75 -0
  1947. package/docs/tools/skills.md +267 -0
  1948. package/docs/tools/slash-commands.md +190 -0
  1949. package/docs/tools/subagents.md +137 -0
  1950. package/docs/tools/thinking.md +62 -0
  1951. package/docs/tools/web.md +257 -0
  1952. package/docs/tts.md +389 -0
  1953. package/docs/tui.md +134 -0
  1954. package/docs/vps.md +41 -0
  1955. package/docs/web/control-ui.md +163 -0
  1956. package/docs/web/dashboard.md +42 -0
  1957. package/docs/web/index.md +110 -0
  1958. package/docs/web/webchat.md +41 -0
  1959. package/docs/whatsapp-clawd.jpg +0 -0
  1960. package/extensions/bluebubbles/clawdbot.plugin.json +11 -0
  1961. package/extensions/bluebubbles/index.ts +20 -0
  1962. package/extensions/bluebubbles/package.json +33 -0
  1963. package/extensions/bluebubbles/src/accounts.ts +80 -0
  1964. package/extensions/bluebubbles/src/actions.test.ts +651 -0
  1965. package/extensions/bluebubbles/src/actions.ts +403 -0
  1966. package/extensions/bluebubbles/src/attachments.test.ts +346 -0
  1967. package/extensions/bluebubbles/src/attachments.ts +282 -0
  1968. package/extensions/bluebubbles/src/channel.ts +399 -0
  1969. package/extensions/bluebubbles/src/chat.test.ts +462 -0
  1970. package/extensions/bluebubbles/src/chat.ts +354 -0
  1971. package/extensions/bluebubbles/src/config-schema.ts +51 -0
  1972. package/extensions/bluebubbles/src/media-send.ts +168 -0
  1973. package/extensions/bluebubbles/src/monitor.test.ts +2146 -0
  1974. package/extensions/bluebubbles/src/monitor.ts +2276 -0
  1975. package/extensions/bluebubbles/src/onboarding.ts +340 -0
  1976. package/extensions/bluebubbles/src/probe.ts +127 -0
  1977. package/extensions/bluebubbles/src/reactions.test.ts +393 -0
  1978. package/extensions/bluebubbles/src/reactions.ts +183 -0
  1979. package/extensions/bluebubbles/src/runtime.ts +14 -0
  1980. package/extensions/bluebubbles/src/send.test.ts +809 -0
  1981. package/extensions/bluebubbles/src/send.ts +418 -0
  1982. package/extensions/bluebubbles/src/targets.test.ts +184 -0
  1983. package/extensions/bluebubbles/src/targets.ts +323 -0
  1984. package/extensions/bluebubbles/src/types.ts +127 -0
  1985. package/extensions/copilot-proxy/README.md +24 -0
  1986. package/extensions/copilot-proxy/clawdbot.plugin.json +11 -0
  1987. package/extensions/copilot-proxy/index.ts +142 -0
  1988. package/extensions/copilot-proxy/package.json +11 -0
  1989. package/extensions/diagnostics-otel/clawdbot.plugin.json +8 -0
  1990. package/extensions/diagnostics-otel/index.ts +16 -0
  1991. package/extensions/diagnostics-otel/node_modules/.bin/acorn +21 -0
  1992. package/extensions/diagnostics-otel/package.json +24 -0
  1993. package/extensions/diagnostics-otel/src/service.test.ts +220 -0
  1994. package/extensions/diagnostics-otel/src/service.ts +566 -0
  1995. package/extensions/discord/clawdbot.plugin.json +11 -0
  1996. package/extensions/discord/index.ts +18 -0
  1997. package/extensions/discord/package.json +11 -0
  1998. package/extensions/discord/src/channel.ts +422 -0
  1999. package/extensions/discord/src/runtime.ts +14 -0
  2000. package/extensions/google-antigravity-auth/README.md +24 -0
  2001. package/extensions/google-antigravity-auth/clawdbot.plugin.json +11 -0
  2002. package/extensions/google-antigravity-auth/index.ts +437 -0
  2003. package/extensions/google-antigravity-auth/package.json +11 -0
  2004. package/extensions/google-gemini-cli-auth/README.md +35 -0
  2005. package/extensions/google-gemini-cli-auth/clawdbot.plugin.json +11 -0
  2006. package/extensions/google-gemini-cli-auth/index.ts +91 -0
  2007. package/extensions/google-gemini-cli-auth/oauth.test.ts +228 -0
  2008. package/extensions/google-gemini-cli-auth/oauth.ts +580 -0
  2009. package/extensions/google-gemini-cli-auth/package.json +11 -0
  2010. package/extensions/googlechat/clawdbot.plugin.json +11 -0
  2011. package/extensions/googlechat/index.ts +20 -0
  2012. package/extensions/googlechat/node_modules/.bin/clawdbot +21 -0
  2013. package/extensions/googlechat/node_modules/.bin/moltbot +21 -0
  2014. package/extensions/googlechat/package.json +39 -0
  2015. package/extensions/googlechat/src/accounts.ts +133 -0
  2016. package/extensions/googlechat/src/actions.ts +162 -0
  2017. package/extensions/googlechat/src/api.test.ts +62 -0
  2018. package/extensions/googlechat/src/api.ts +259 -0
  2019. package/extensions/googlechat/src/auth.ts +113 -0
  2020. package/extensions/googlechat/src/channel.ts +580 -0
  2021. package/extensions/googlechat/src/monitor.test.ts +27 -0
  2022. package/extensions/googlechat/src/monitor.ts +900 -0
  2023. package/extensions/googlechat/src/onboarding.ts +278 -0
  2024. package/extensions/googlechat/src/runtime.ts +14 -0
  2025. package/extensions/googlechat/src/targets.test.ts +35 -0
  2026. package/extensions/googlechat/src/targets.ts +55 -0
  2027. package/extensions/googlechat/src/types.config.ts +3 -0
  2028. package/extensions/googlechat/src/types.ts +73 -0
  2029. package/extensions/imessage/clawdbot.plugin.json +11 -0
  2030. package/extensions/imessage/index.ts +18 -0
  2031. package/extensions/imessage/package.json +11 -0
  2032. package/extensions/imessage/src/channel.ts +294 -0
  2033. package/extensions/imessage/src/runtime.ts +14 -0
  2034. package/extensions/line/clawdbot.plugin.json +11 -0
  2035. package/extensions/line/index.ts +20 -0
  2036. package/extensions/line/node_modules/.bin/clawdbot +21 -0
  2037. package/extensions/line/node_modules/.bin/moltbot +21 -0
  2038. package/extensions/line/package.json +29 -0
  2039. package/extensions/line/src/card-command.ts +338 -0
  2040. package/extensions/line/src/channel.logout.test.ts +96 -0
  2041. package/extensions/line/src/channel.sendPayload.test.ts +308 -0
  2042. package/extensions/line/src/channel.ts +773 -0
  2043. package/extensions/line/src/runtime.ts +14 -0
  2044. package/extensions/llm-task/README.md +97 -0
  2045. package/extensions/llm-task/clawdbot.plugin.json +21 -0
  2046. package/extensions/llm-task/index.ts +7 -0
  2047. package/extensions/llm-task/package.json +11 -0
  2048. package/extensions/llm-task/src/llm-task-tool.test.ts +117 -0
  2049. package/extensions/llm-task/src/llm-task-tool.ts +218 -0
  2050. package/extensions/lobster/README.md +80 -0
  2051. package/extensions/lobster/SKILL.md +90 -0
  2052. package/extensions/lobster/clawdbot.plugin.json +10 -0
  2053. package/extensions/lobster/index.ts +13 -0
  2054. package/extensions/lobster/package.json +11 -0
  2055. package/extensions/lobster/src/lobster-tool.test.ts +143 -0
  2056. package/extensions/lobster/src/lobster-tool.ts +240 -0
  2057. package/extensions/matrix/CHANGELOG.md +59 -0
  2058. package/extensions/matrix/clawdbot.plugin.json +11 -0
  2059. package/extensions/matrix/index.ts +18 -0
  2060. package/extensions/matrix/package.json +36 -0
  2061. package/extensions/matrix/src/actions.ts +185 -0
  2062. package/extensions/matrix/src/channel.directory.test.ts +56 -0
  2063. package/extensions/matrix/src/channel.ts +417 -0
  2064. package/extensions/matrix/src/config-schema.ts +62 -0
  2065. package/extensions/matrix/src/directory-live.ts +175 -0
  2066. package/extensions/matrix/src/group-mentions.ts +61 -0
  2067. package/extensions/matrix/src/matrix/accounts.test.ts +83 -0
  2068. package/extensions/matrix/src/matrix/accounts.ts +63 -0
  2069. package/extensions/matrix/src/matrix/actions/client.ts +53 -0
  2070. package/extensions/matrix/src/matrix/actions/messages.ts +120 -0
  2071. package/extensions/matrix/src/matrix/actions/pins.ts +70 -0
  2072. package/extensions/matrix/src/matrix/actions/reactions.ts +84 -0
  2073. package/extensions/matrix/src/matrix/actions/room.ts +88 -0
  2074. package/extensions/matrix/src/matrix/actions/summary.ts +77 -0
  2075. package/extensions/matrix/src/matrix/actions/types.ts +84 -0
  2076. package/extensions/matrix/src/matrix/actions.ts +15 -0
  2077. package/extensions/matrix/src/matrix/active-client.ts +11 -0
  2078. package/extensions/matrix/src/matrix/client/config.ts +165 -0
  2079. package/extensions/matrix/src/matrix/client/create-client.ts +127 -0
  2080. package/extensions/matrix/src/matrix/client/logging.ts +35 -0
  2081. package/extensions/matrix/src/matrix/client/runtime.ts +4 -0
  2082. package/extensions/matrix/src/matrix/client/shared.ts +169 -0
  2083. package/extensions/matrix/src/matrix/client/storage.ts +131 -0
  2084. package/extensions/matrix/src/matrix/client/types.ts +34 -0
  2085. package/extensions/matrix/src/matrix/client.test.ts +57 -0
  2086. package/extensions/matrix/src/matrix/client.ts +9 -0
  2087. package/extensions/matrix/src/matrix/credentials.ts +103 -0
  2088. package/extensions/matrix/src/matrix/deps.ts +57 -0
  2089. package/extensions/matrix/src/matrix/format.test.ts +34 -0
  2090. package/extensions/matrix/src/matrix/format.ts +22 -0
  2091. package/extensions/matrix/src/matrix/index.ts +11 -0
  2092. package/extensions/matrix/src/matrix/monitor/allowlist.ts +58 -0
  2093. package/extensions/matrix/src/matrix/monitor/auto-join.ts +68 -0
  2094. package/extensions/matrix/src/matrix/monitor/direct.ts +105 -0
  2095. package/extensions/matrix/src/matrix/monitor/events.ts +103 -0
  2096. package/extensions/matrix/src/matrix/monitor/handler.ts +645 -0
  2097. package/extensions/matrix/src/matrix/monitor/index.ts +279 -0
  2098. package/extensions/matrix/src/matrix/monitor/location.ts +83 -0
  2099. package/extensions/matrix/src/matrix/monitor/media.test.ts +103 -0
  2100. package/extensions/matrix/src/matrix/monitor/media.ts +113 -0
  2101. package/extensions/matrix/src/matrix/monitor/mentions.ts +31 -0
  2102. package/extensions/matrix/src/matrix/monitor/replies.ts +96 -0
  2103. package/extensions/matrix/src/matrix/monitor/room-info.ts +58 -0
  2104. package/extensions/matrix/src/matrix/monitor/rooms.ts +43 -0
  2105. package/extensions/matrix/src/matrix/monitor/threads.ts +64 -0
  2106. package/extensions/matrix/src/matrix/monitor/types.ts +39 -0
  2107. package/extensions/matrix/src/matrix/poll-types.test.ts +22 -0
  2108. package/extensions/matrix/src/matrix/poll-types.ts +157 -0
  2109. package/extensions/matrix/src/matrix/probe.ts +70 -0
  2110. package/extensions/matrix/src/matrix/send/client.ts +63 -0
  2111. package/extensions/matrix/src/matrix/send/formatting.ts +92 -0
  2112. package/extensions/matrix/src/matrix/send/media.ts +220 -0
  2113. package/extensions/matrix/src/matrix/send/targets.test.ts +102 -0
  2114. package/extensions/matrix/src/matrix/send/targets.ts +144 -0
  2115. package/extensions/matrix/src/matrix/send/types.ts +109 -0
  2116. package/extensions/matrix/src/matrix/send.test.ts +172 -0
  2117. package/extensions/matrix/src/matrix/send.ts +255 -0
  2118. package/extensions/matrix/src/onboarding.ts +432 -0
  2119. package/extensions/matrix/src/outbound.ts +53 -0
  2120. package/extensions/matrix/src/resolve-targets.ts +89 -0
  2121. package/extensions/matrix/src/runtime.ts +14 -0
  2122. package/extensions/matrix/src/tool-actions.ts +160 -0
  2123. package/extensions/matrix/src/types.ts +95 -0
  2124. package/extensions/mattermost/clawdbot.plugin.json +11 -0
  2125. package/extensions/mattermost/index.ts +18 -0
  2126. package/extensions/mattermost/package.json +25 -0
  2127. package/extensions/mattermost/src/channel.test.ts +43 -0
  2128. package/extensions/mattermost/src/channel.ts +339 -0
  2129. package/extensions/mattermost/src/config-schema.ts +56 -0
  2130. package/extensions/mattermost/src/group-mentions.ts +14 -0
  2131. package/extensions/mattermost/src/mattermost/accounts.ts +115 -0
  2132. package/extensions/mattermost/src/mattermost/client.ts +208 -0
  2133. package/extensions/mattermost/src/mattermost/index.ts +9 -0
  2134. package/extensions/mattermost/src/mattermost/monitor-helpers.ts +150 -0
  2135. package/extensions/mattermost/src/mattermost/monitor.ts +921 -0
  2136. package/extensions/mattermost/src/mattermost/probe.ts +70 -0
  2137. package/extensions/mattermost/src/mattermost/send.ts +217 -0
  2138. package/extensions/mattermost/src/normalize.ts +38 -0
  2139. package/extensions/mattermost/src/onboarding-helpers.ts +42 -0
  2140. package/extensions/mattermost/src/onboarding.ts +187 -0
  2141. package/extensions/mattermost/src/runtime.ts +14 -0
  2142. package/extensions/mattermost/src/types.ts +50 -0
  2143. package/extensions/memory-core/clawdbot.plugin.json +9 -0
  2144. package/extensions/memory-core/index.ts +36 -0
  2145. package/extensions/memory-core/node_modules/.bin/clawdbot +21 -0
  2146. package/extensions/memory-core/node_modules/.bin/moltbot +21 -0
  2147. package/extensions/memory-core/package.json +17 -0
  2148. package/extensions/memory-lancedb/clawdbot.plugin.json +67 -0
  2149. package/extensions/memory-lancedb/config.ts +114 -0
  2150. package/extensions/memory-lancedb/index.test.ts +284 -0
  2151. package/extensions/memory-lancedb/index.ts +590 -0
  2152. package/extensions/memory-lancedb/node_modules/.bin/arrow2csv +21 -0
  2153. package/extensions/memory-lancedb/node_modules/.bin/openai +21 -0
  2154. package/extensions/memory-lancedb/package.json +16 -0
  2155. package/extensions/msteams/CHANGELOG.md +56 -0
  2156. package/extensions/msteams/clawdbot.plugin.json +11 -0
  2157. package/extensions/msteams/index.ts +18 -0
  2158. package/extensions/msteams/node_modules/.bin/clawdbot +21 -0
  2159. package/extensions/msteams/node_modules/.bin/moltbot +21 -0
  2160. package/extensions/msteams/package.json +36 -0
  2161. package/extensions/msteams/src/attachments/download.ts +206 -0
  2162. package/extensions/msteams/src/attachments/graph.ts +319 -0
  2163. package/extensions/msteams/src/attachments/html.ts +76 -0
  2164. package/extensions/msteams/src/attachments/payload.ts +22 -0
  2165. package/extensions/msteams/src/attachments/shared.ts +235 -0
  2166. package/extensions/msteams/src/attachments/types.ts +37 -0
  2167. package/extensions/msteams/src/attachments.test.ts +424 -0
  2168. package/extensions/msteams/src/attachments.ts +18 -0
  2169. package/extensions/msteams/src/channel.directory.test.ts +46 -0
  2170. package/extensions/msteams/src/channel.ts +436 -0
  2171. package/extensions/msteams/src/conversation-store-fs.test.ts +88 -0
  2172. package/extensions/msteams/src/conversation-store-fs.ts +155 -0
  2173. package/extensions/msteams/src/conversation-store-memory.ts +45 -0
  2174. package/extensions/msteams/src/conversation-store.ts +41 -0
  2175. package/extensions/msteams/src/directory-live.ts +179 -0
  2176. package/extensions/msteams/src/errors.test.ts +46 -0
  2177. package/extensions/msteams/src/errors.ts +158 -0
  2178. package/extensions/msteams/src/file-consent-helpers.test.ts +234 -0
  2179. package/extensions/msteams/src/file-consent-helpers.ts +73 -0
  2180. package/extensions/msteams/src/file-consent.ts +122 -0
  2181. package/extensions/msteams/src/graph-chat.ts +52 -0
  2182. package/extensions/msteams/src/graph-upload.ts +445 -0
  2183. package/extensions/msteams/src/inbound.test.ts +67 -0
  2184. package/extensions/msteams/src/inbound.ts +38 -0
  2185. package/extensions/msteams/src/index.ts +4 -0
  2186. package/extensions/msteams/src/media-helpers.test.ts +186 -0
  2187. package/extensions/msteams/src/media-helpers.ts +77 -0
  2188. package/extensions/msteams/src/messenger.test.ts +245 -0
  2189. package/extensions/msteams/src/messenger.ts +460 -0
  2190. package/extensions/msteams/src/monitor-handler/inbound-media.ts +123 -0
  2191. package/extensions/msteams/src/monitor-handler/message-handler.ts +629 -0
  2192. package/extensions/msteams/src/monitor-handler.ts +166 -0
  2193. package/extensions/msteams/src/monitor-types.ts +5 -0
  2194. package/extensions/msteams/src/monitor.ts +290 -0
  2195. package/extensions/msteams/src/onboarding.ts +432 -0
  2196. package/extensions/msteams/src/outbound.ts +47 -0
  2197. package/extensions/msteams/src/pending-uploads.ts +87 -0
  2198. package/extensions/msteams/src/policy.test.ts +210 -0
  2199. package/extensions/msteams/src/policy.ts +247 -0
  2200. package/extensions/msteams/src/polls-store-memory.ts +30 -0
  2201. package/extensions/msteams/src/polls-store.test.ts +40 -0
  2202. package/extensions/msteams/src/polls.test.ts +72 -0
  2203. package/extensions/msteams/src/polls.ts +299 -0
  2204. package/extensions/msteams/src/probe.test.ts +57 -0
  2205. package/extensions/msteams/src/probe.ts +99 -0
  2206. package/extensions/msteams/src/reply-dispatcher.ts +128 -0
  2207. package/extensions/msteams/src/resolve-allowlist.ts +277 -0
  2208. package/extensions/msteams/src/runtime.ts +14 -0
  2209. package/extensions/msteams/src/sdk-types.ts +19 -0
  2210. package/extensions/msteams/src/sdk.ts +33 -0
  2211. package/extensions/msteams/src/send-context.ts +156 -0
  2212. package/extensions/msteams/src/send.ts +489 -0
  2213. package/extensions/msteams/src/sent-message-cache.test.ts +16 -0
  2214. package/extensions/msteams/src/sent-message-cache.ts +41 -0
  2215. package/extensions/msteams/src/storage.ts +22 -0
  2216. package/extensions/msteams/src/store-fs.ts +80 -0
  2217. package/extensions/msteams/src/token.ts +19 -0
  2218. package/extensions/nextcloud-talk/clawdbot.plugin.json +11 -0
  2219. package/extensions/nextcloud-talk/index.ts +18 -0
  2220. package/extensions/nextcloud-talk/package.json +30 -0
  2221. package/extensions/nextcloud-talk/src/accounts.ts +154 -0
  2222. package/extensions/nextcloud-talk/src/channel.ts +404 -0
  2223. package/extensions/nextcloud-talk/src/config-schema.ts +78 -0
  2224. package/extensions/nextcloud-talk/src/format.ts +79 -0
  2225. package/extensions/nextcloud-talk/src/inbound.ts +336 -0
  2226. package/extensions/nextcloud-talk/src/monitor.ts +246 -0
  2227. package/extensions/nextcloud-talk/src/normalize.ts +31 -0
  2228. package/extensions/nextcloud-talk/src/onboarding.ts +341 -0
  2229. package/extensions/nextcloud-talk/src/policy.ts +175 -0
  2230. package/extensions/nextcloud-talk/src/room-info.ts +111 -0
  2231. package/extensions/nextcloud-talk/src/runtime.ts +14 -0
  2232. package/extensions/nextcloud-talk/src/send.ts +206 -0
  2233. package/extensions/nextcloud-talk/src/signature.ts +67 -0
  2234. package/extensions/nextcloud-talk/src/types.ts +179 -0
  2235. package/extensions/nostr/CHANGELOG.md +51 -0
  2236. package/extensions/nostr/README.md +136 -0
  2237. package/extensions/nostr/clawdbot.plugin.json +11 -0
  2238. package/extensions/nostr/index.ts +69 -0
  2239. package/extensions/nostr/node_modules/.bin/clawdbot +21 -0
  2240. package/extensions/nostr/node_modules/.bin/moltbot +21 -0
  2241. package/extensions/nostr/node_modules/.bin/tsc +21 -0
  2242. package/extensions/nostr/node_modules/.bin/tsserver +21 -0
  2243. package/extensions/nostr/package.json +31 -0
  2244. package/extensions/nostr/src/channel.test.ts +141 -0
  2245. package/extensions/nostr/src/channel.ts +342 -0
  2246. package/extensions/nostr/src/config-schema.ts +90 -0
  2247. package/extensions/nostr/src/metrics.ts +464 -0
  2248. package/extensions/nostr/src/nostr-bus.fuzz.test.ts +544 -0
  2249. package/extensions/nostr/src/nostr-bus.integration.test.ts +452 -0
  2250. package/extensions/nostr/src/nostr-bus.test.ts +199 -0
  2251. package/extensions/nostr/src/nostr-bus.ts +741 -0
  2252. package/extensions/nostr/src/nostr-profile-http.test.ts +378 -0
  2253. package/extensions/nostr/src/nostr-profile-http.ts +500 -0
  2254. package/extensions/nostr/src/nostr-profile-import.test.ts +120 -0
  2255. package/extensions/nostr/src/nostr-profile-import.ts +259 -0
  2256. package/extensions/nostr/src/nostr-profile.fuzz.test.ts +479 -0
  2257. package/extensions/nostr/src/nostr-profile.test.ts +410 -0
  2258. package/extensions/nostr/src/nostr-profile.ts +242 -0
  2259. package/extensions/nostr/src/nostr-state-store.test.ts +128 -0
  2260. package/extensions/nostr/src/nostr-state-store.ts +226 -0
  2261. package/extensions/nostr/src/runtime.ts +14 -0
  2262. package/extensions/nostr/src/seen-tracker.ts +271 -0
  2263. package/extensions/nostr/src/types.test.ts +161 -0
  2264. package/extensions/nostr/src/types.ts +99 -0
  2265. package/extensions/nostr/test/setup.ts +5 -0
  2266. package/extensions/open-prose/README.md +25 -0
  2267. package/extensions/open-prose/clawdbot.plugin.json +11 -0
  2268. package/extensions/open-prose/index.ts +5 -0
  2269. package/extensions/open-prose/package.json +11 -0
  2270. package/extensions/open-prose/skills/prose/LICENSE +21 -0
  2271. package/extensions/open-prose/skills/prose/SKILL.md +318 -0
  2272. package/extensions/open-prose/skills/prose/alt-borges.md +141 -0
  2273. package/extensions/open-prose/skills/prose/alts/arabian-nights.md +358 -0
  2274. package/extensions/open-prose/skills/prose/alts/borges.md +360 -0
  2275. package/extensions/open-prose/skills/prose/alts/folk.md +322 -0
  2276. package/extensions/open-prose/skills/prose/alts/homer.md +346 -0
  2277. package/extensions/open-prose/skills/prose/alts/kafka.md +373 -0
  2278. package/extensions/open-prose/skills/prose/compiler.md +2967 -0
  2279. package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +4 -0
  2280. package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +6 -0
  2281. package/extensions/open-prose/skills/prose/examples/03-code-review.prose +17 -0
  2282. package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +14 -0
  2283. package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +20 -0
  2284. package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +17 -0
  2285. package/extensions/open-prose/skills/prose/examples/07-refactor.prose +20 -0
  2286. package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +20 -0
  2287. package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +25 -0
  2288. package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +32 -0
  2289. package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +27 -0
  2290. package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +43 -0
  2291. package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +51 -0
  2292. package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +48 -0
  2293. package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +23 -0
  2294. package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +19 -0
  2295. package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +19 -0
  2296. package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +36 -0
  2297. package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +71 -0
  2298. package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +20 -0
  2299. package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +35 -0
  2300. package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +51 -0
  2301. package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +63 -0
  2302. package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +86 -0
  2303. package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +114 -0
  2304. package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +100 -0
  2305. package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +105 -0
  2306. package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +37 -0
  2307. package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +1572 -0
  2308. package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +218 -0
  2309. package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +42 -0
  2310. package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +145 -0
  2311. package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +168 -0
  2312. package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +204 -0
  2313. package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +296 -0
  2314. package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +237 -0
  2315. package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +1474 -0
  2316. package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +455 -0
  2317. package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +277 -0
  2318. package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +32 -0
  2319. package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +38 -0
  2320. package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +46 -0
  2321. package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +50 -0
  2322. package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +261 -0
  2323. package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +159 -0
  2324. package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +637 -0
  2325. package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +148 -0
  2326. package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +225 -0
  2327. package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +356 -0
  2328. package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +445 -0
  2329. package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +210 -0
  2330. package/extensions/open-prose/skills/prose/examples/README.md +391 -0
  2331. package/extensions/open-prose/skills/prose/examples/roadmap/README.md +22 -0
  2332. package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +20 -0
  2333. package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +18 -0
  2334. package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +17 -0
  2335. package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +223 -0
  2336. package/extensions/open-prose/skills/prose/guidance/antipatterns.md +951 -0
  2337. package/extensions/open-prose/skills/prose/guidance/patterns.md +700 -0
  2338. package/extensions/open-prose/skills/prose/guidance/system-prompt.md +180 -0
  2339. package/extensions/open-prose/skills/prose/help.md +143 -0
  2340. package/extensions/open-prose/skills/prose/lib/README.md +105 -0
  2341. package/extensions/open-prose/skills/prose/lib/calibrator.prose +215 -0
  2342. package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +174 -0
  2343. package/extensions/open-prose/skills/prose/lib/error-forensics.prose +250 -0
  2344. package/extensions/open-prose/skills/prose/lib/inspector.prose +196 -0
  2345. package/extensions/open-prose/skills/prose/lib/profiler.prose +460 -0
  2346. package/extensions/open-prose/skills/prose/lib/program-improver.prose +275 -0
  2347. package/extensions/open-prose/skills/prose/lib/project-memory.prose +118 -0
  2348. package/extensions/open-prose/skills/prose/lib/user-memory.prose +93 -0
  2349. package/extensions/open-prose/skills/prose/lib/vm-improver.prose +243 -0
  2350. package/extensions/open-prose/skills/prose/primitives/session.md +587 -0
  2351. package/extensions/open-prose/skills/prose/prose.md +1235 -0
  2352. package/extensions/open-prose/skills/prose/state/filesystem.md +478 -0
  2353. package/extensions/open-prose/skills/prose/state/in-context.md +380 -0
  2354. package/extensions/open-prose/skills/prose/state/postgres.md +875 -0
  2355. package/extensions/open-prose/skills/prose/state/sqlite.md +572 -0
  2356. package/extensions/qwen-portal-auth/README.md +24 -0
  2357. package/extensions/qwen-portal-auth/clawdbot.plugin.json +11 -0
  2358. package/extensions/qwen-portal-auth/index.ts +127 -0
  2359. package/extensions/qwen-portal-auth/oauth.ts +190 -0
  2360. package/extensions/signal/clawdbot.plugin.json +11 -0
  2361. package/extensions/signal/index.ts +18 -0
  2362. package/extensions/signal/package.json +11 -0
  2363. package/extensions/signal/src/channel.ts +312 -0
  2364. package/extensions/signal/src/runtime.ts +14 -0
  2365. package/extensions/slack/clawdbot.plugin.json +11 -0
  2366. package/extensions/slack/index.ts +18 -0
  2367. package/extensions/slack/package.json +11 -0
  2368. package/extensions/slack/src/channel.ts +577 -0
  2369. package/extensions/slack/src/runtime.ts +14 -0
  2370. package/extensions/telegram/clawdbot.plugin.json +11 -0
  2371. package/extensions/telegram/index.ts +18 -0
  2372. package/extensions/telegram/package.json +11 -0
  2373. package/extensions/telegram/src/channel.ts +478 -0
  2374. package/extensions/telegram/src/runtime.ts +14 -0
  2375. package/extensions/tlon/README.md +5 -0
  2376. package/extensions/tlon/clawdbot.plugin.json +11 -0
  2377. package/extensions/tlon/index.ts +18 -0
  2378. package/extensions/tlon/package.json +30 -0
  2379. package/extensions/tlon/src/channel.ts +379 -0
  2380. package/extensions/tlon/src/config-schema.test.ts +32 -0
  2381. package/extensions/tlon/src/config-schema.ts +43 -0
  2382. package/extensions/tlon/src/monitor/discovery.ts +71 -0
  2383. package/extensions/tlon/src/monitor/history.ts +87 -0
  2384. package/extensions/tlon/src/monitor/index.ts +501 -0
  2385. package/extensions/tlon/src/monitor/processed-messages.test.ts +24 -0
  2386. package/extensions/tlon/src/monitor/processed-messages.ts +38 -0
  2387. package/extensions/tlon/src/monitor/utils.ts +83 -0
  2388. package/extensions/tlon/src/onboarding.ts +213 -0
  2389. package/extensions/tlon/src/runtime.ts +14 -0
  2390. package/extensions/tlon/src/targets.ts +79 -0
  2391. package/extensions/tlon/src/types.ts +85 -0
  2392. package/extensions/tlon/src/urbit/auth.ts +18 -0
  2393. package/extensions/tlon/src/urbit/http-api.ts +36 -0
  2394. package/extensions/tlon/src/urbit/send.test.ts +38 -0
  2395. package/extensions/tlon/src/urbit/send.ts +127 -0
  2396. package/extensions/tlon/src/urbit/sse-client.test.ts +41 -0
  2397. package/extensions/tlon/src/urbit/sse-client.ts +367 -0
  2398. package/extensions/twitch/CHANGELOG.md +26 -0
  2399. package/extensions/twitch/README.md +89 -0
  2400. package/extensions/twitch/clawdbot.plugin.json +9 -0
  2401. package/extensions/twitch/index.ts +20 -0
  2402. package/extensions/twitch/node_modules/.bin/clawdbot +21 -0
  2403. package/extensions/twitch/node_modules/.bin/moltbot +21 -0
  2404. package/extensions/twitch/package.json +20 -0
  2405. package/extensions/twitch/src/access-control.test.ts +489 -0
  2406. package/extensions/twitch/src/access-control.ts +154 -0
  2407. package/extensions/twitch/src/actions.ts +173 -0
  2408. package/extensions/twitch/src/client-manager-registry.ts +115 -0
  2409. package/extensions/twitch/src/config-schema.ts +82 -0
  2410. package/extensions/twitch/src/config.test.ts +88 -0
  2411. package/extensions/twitch/src/config.ts +116 -0
  2412. package/extensions/twitch/src/monitor.ts +257 -0
  2413. package/extensions/twitch/src/onboarding.test.ts +311 -0
  2414. package/extensions/twitch/src/onboarding.ts +411 -0
  2415. package/extensions/twitch/src/outbound.test.ts +373 -0
  2416. package/extensions/twitch/src/outbound.ts +186 -0
  2417. package/extensions/twitch/src/plugin.test.ts +39 -0
  2418. package/extensions/twitch/src/plugin.ts +274 -0
  2419. package/extensions/twitch/src/probe.test.ts +198 -0
  2420. package/extensions/twitch/src/probe.ts +118 -0
  2421. package/extensions/twitch/src/resolver.ts +137 -0
  2422. package/extensions/twitch/src/runtime.ts +14 -0
  2423. package/extensions/twitch/src/send.test.ts +289 -0
  2424. package/extensions/twitch/src/send.ts +136 -0
  2425. package/extensions/twitch/src/status.test.ts +270 -0
  2426. package/extensions/twitch/src/status.ts +176 -0
  2427. package/extensions/twitch/src/token.test.ts +171 -0
  2428. package/extensions/twitch/src/token.ts +87 -0
  2429. package/extensions/twitch/src/twitch-client.test.ts +574 -0
  2430. package/extensions/twitch/src/twitch-client.ts +277 -0
  2431. package/extensions/twitch/src/types.ts +141 -0
  2432. package/extensions/twitch/src/utils/markdown.ts +92 -0
  2433. package/extensions/twitch/src/utils/twitch.ts +78 -0
  2434. package/extensions/twitch/test/setup.ts +7 -0
  2435. package/extensions/voice-call/CHANGELOG.md +78 -0
  2436. package/extensions/voice-call/README.md +135 -0
  2437. package/extensions/voice-call/clawdbot.plugin.json +601 -0
  2438. package/extensions/voice-call/index.ts +497 -0
  2439. package/extensions/voice-call/package.json +16 -0
  2440. package/extensions/voice-call/src/cli.ts +300 -0
  2441. package/extensions/voice-call/src/config.test.ts +204 -0
  2442. package/extensions/voice-call/src/config.ts +502 -0
  2443. package/extensions/voice-call/src/core-bridge.ts +198 -0
  2444. package/extensions/voice-call/src/manager/context.ts +21 -0
  2445. package/extensions/voice-call/src/manager/events.ts +177 -0
  2446. package/extensions/voice-call/src/manager/lookup.ts +33 -0
  2447. package/extensions/voice-call/src/manager/outbound.ts +248 -0
  2448. package/extensions/voice-call/src/manager/state.ts +50 -0
  2449. package/extensions/voice-call/src/manager/store.ts +88 -0
  2450. package/extensions/voice-call/src/manager/timers.ts +86 -0
  2451. package/extensions/voice-call/src/manager/twiml.ts +9 -0
  2452. package/extensions/voice-call/src/manager.test.ts +108 -0
  2453. package/extensions/voice-call/src/manager.ts +876 -0
  2454. package/extensions/voice-call/src/media-stream.test.ts +97 -0
  2455. package/extensions/voice-call/src/media-stream.ts +393 -0
  2456. package/extensions/voice-call/src/providers/base.ts +67 -0
  2457. package/extensions/voice-call/src/providers/index.ts +10 -0
  2458. package/extensions/voice-call/src/providers/mock.ts +168 -0
  2459. package/extensions/voice-call/src/providers/plivo.test.ts +28 -0
  2460. package/extensions/voice-call/src/providers/plivo.ts +504 -0
  2461. package/extensions/voice-call/src/providers/stt-openai-realtime.ts +311 -0
  2462. package/extensions/voice-call/src/providers/telnyx.ts +364 -0
  2463. package/extensions/voice-call/src/providers/tts-openai.ts +264 -0
  2464. package/extensions/voice-call/src/providers/twilio/api.ts +45 -0
  2465. package/extensions/voice-call/src/providers/twilio/webhook.ts +30 -0
  2466. package/extensions/voice-call/src/providers/twilio.test.ts +64 -0
  2467. package/extensions/voice-call/src/providers/twilio.ts +595 -0
  2468. package/extensions/voice-call/src/response-generator.ts +171 -0
  2469. package/extensions/voice-call/src/runtime.ts +217 -0
  2470. package/extensions/voice-call/src/telephony-audio.ts +88 -0
  2471. package/extensions/voice-call/src/telephony-tts.ts +95 -0
  2472. package/extensions/voice-call/src/tunnel.ts +331 -0
  2473. package/extensions/voice-call/src/types.ts +273 -0
  2474. package/extensions/voice-call/src/utils.ts +12 -0
  2475. package/extensions/voice-call/src/voice-mapping.ts +65 -0
  2476. package/extensions/voice-call/src/webhook-security.test.ts +260 -0
  2477. package/extensions/voice-call/src/webhook-security.ts +469 -0
  2478. package/extensions/voice-call/src/webhook.ts +491 -0
  2479. package/extensions/whatsapp/clawdbot.plugin.json +11 -0
  2480. package/extensions/whatsapp/index.ts +18 -0
  2481. package/extensions/whatsapp/package.json +11 -0
  2482. package/extensions/whatsapp/src/channel.ts +500 -0
  2483. package/extensions/whatsapp/src/runtime.ts +14 -0
  2484. package/extensions/zalo/CHANGELOG.md +60 -0
  2485. package/extensions/zalo/README.md +50 -0
  2486. package/extensions/zalo/clawdbot.plugin.json +11 -0
  2487. package/extensions/zalo/index.ts +20 -0
  2488. package/extensions/zalo/node_modules/.bin/clawdbot +21 -0
  2489. package/extensions/zalo/node_modules/.bin/moltbot +21 -0
  2490. package/extensions/zalo/package.json +33 -0
  2491. package/extensions/zalo/src/accounts.ts +71 -0
  2492. package/extensions/zalo/src/actions.ts +62 -0
  2493. package/extensions/zalo/src/api.ts +206 -0
  2494. package/extensions/zalo/src/channel.directory.test.ts +35 -0
  2495. package/extensions/zalo/src/channel.ts +394 -0
  2496. package/extensions/zalo/src/config-schema.ts +24 -0
  2497. package/extensions/zalo/src/monitor.ts +760 -0
  2498. package/extensions/zalo/src/monitor.webhook.test.ts +70 -0
  2499. package/extensions/zalo/src/onboarding.ts +405 -0
  2500. package/extensions/zalo/src/probe.ts +46 -0
  2501. package/extensions/zalo/src/proxy.ts +18 -0
  2502. package/extensions/zalo/src/runtime.ts +14 -0
  2503. package/extensions/zalo/src/send.ts +117 -0
  2504. package/extensions/zalo/src/status-issues.ts +50 -0
  2505. package/extensions/zalo/src/token.ts +55 -0
  2506. package/extensions/zalo/src/types.ts +42 -0
  2507. package/extensions/zalouser/CHANGELOG.md +38 -0
  2508. package/extensions/zalouser/README.md +221 -0
  2509. package/extensions/zalouser/clawdbot.plugin.json +11 -0
  2510. package/extensions/zalouser/index.ts +32 -0
  2511. package/extensions/zalouser/node_modules/.bin/clawdbot +21 -0
  2512. package/extensions/zalouser/node_modules/.bin/moltbot +21 -0
  2513. package/extensions/zalouser/package.json +33 -0
  2514. package/extensions/zalouser/src/accounts.ts +117 -0
  2515. package/extensions/zalouser/src/channel.test.ts +17 -0
  2516. package/extensions/zalouser/src/channel.ts +641 -0
  2517. package/extensions/zalouser/src/config-schema.ts +27 -0
  2518. package/extensions/zalouser/src/monitor.ts +574 -0
  2519. package/extensions/zalouser/src/onboarding.ts +488 -0
  2520. package/extensions/zalouser/src/probe.ts +28 -0
  2521. package/extensions/zalouser/src/runtime.ts +14 -0
  2522. package/extensions/zalouser/src/send.ts +150 -0
  2523. package/extensions/zalouser/src/status-issues.test.ts +58 -0
  2524. package/extensions/zalouser/src/status-issues.ts +81 -0
  2525. package/extensions/zalouser/src/tool.ts +156 -0
  2526. package/extensions/zalouser/src/types.ts +102 -0
  2527. package/extensions/zalouser/src/zca.ts +208 -0
  2528. package/git-hooks/pre-commit +4 -0
  2529. package/moltbot.mjs +14 -0
  2530. package/package.json +288 -0
  2531. package/scripts/format-staged.js +157 -0
  2532. package/scripts/postinstall.js +300 -0
  2533. package/scripts/setup-git-hooks.js +96 -0
  2534. package/skills/1password/SKILL.md +53 -0
  2535. package/skills/1password/references/cli-examples.md +29 -0
  2536. package/skills/1password/references/get-started.md +17 -0
  2537. package/skills/apple-notes/SKILL.md +50 -0
  2538. package/skills/apple-reminders/SKILL.md +67 -0
  2539. package/skills/bear-notes/SKILL.md +79 -0
  2540. package/skills/bird/SKILL.md +197 -0
  2541. package/skills/blogwatcher/SKILL.md +46 -0
  2542. package/skills/blucli/SKILL.md +27 -0
  2543. package/skills/bluebubbles/SKILL.md +39 -0
  2544. package/skills/camsnap/SKILL.md +25 -0
  2545. package/skills/canvas/SKILL.md +189 -0
  2546. package/skills/clawdhub/SKILL.md +53 -0
  2547. package/skills/coding-agent/SKILL.md +278 -0
  2548. package/skills/discord/SKILL.md +475 -0
  2549. package/skills/eightctl/SKILL.md +29 -0
  2550. package/skills/food-order/SKILL.md +41 -0
  2551. package/skills/gemini/SKILL.md +23 -0
  2552. package/skills/gifgrep/SKILL.md +47 -0
  2553. package/skills/github/SKILL.md +48 -0
  2554. package/skills/gog/SKILL.md +92 -0
  2555. package/skills/goplaces/SKILL.md +30 -0
  2556. package/skills/himalaya/SKILL.md +217 -0
  2557. package/skills/himalaya/references/configuration.md +174 -0
  2558. package/skills/himalaya/references/message-composition.md +182 -0
  2559. package/skills/imsg/SKILL.md +25 -0
  2560. package/skills/local-places/SERVER_README.md +101 -0
  2561. package/skills/local-places/SKILL.md +91 -0
  2562. package/skills/local-places/pyproject.toml +27 -0
  2563. package/skills/local-places/src/local_places/__init__.py +2 -0
  2564. package/skills/local-places/src/local_places/google_places.py +314 -0
  2565. package/skills/local-places/src/local_places/main.py +65 -0
  2566. package/skills/local-places/src/local_places/schemas.py +107 -0
  2567. package/skills/mcporter/SKILL.md +38 -0
  2568. package/skills/model-usage/SKILL.md +45 -0
  2569. package/skills/model-usage/references/codexbar-cli.md +28 -0
  2570. package/skills/model-usage/scripts/model_usage.py +310 -0
  2571. package/skills/nano-banana-pro/SKILL.md +35 -0
  2572. package/skills/nano-banana-pro/scripts/generate_image.py +184 -0
  2573. package/skills/nano-pdf/SKILL.md +20 -0
  2574. package/skills/notion/SKILL.md +156 -0
  2575. package/skills/obsidian/SKILL.md +55 -0
  2576. package/skills/openai-image-gen/SKILL.md +71 -0
  2577. package/skills/openai-image-gen/scripts/gen.py +240 -0
  2578. package/skills/openai-whisper/SKILL.md +19 -0
  2579. package/skills/openai-whisper-api/SKILL.md +43 -0
  2580. package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
  2581. package/skills/openhue/SKILL.md +30 -0
  2582. package/skills/oracle/SKILL.md +105 -0
  2583. package/skills/ordercli/SKILL.md +47 -0
  2584. package/skills/peekaboo/SKILL.md +153 -0
  2585. package/skills/sag/SKILL.md +62 -0
  2586. package/skills/session-logs/SKILL.md +105 -0
  2587. package/skills/sherpa-onnx-tts/SKILL.md +49 -0
  2588. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  2589. package/skills/skill-creator/SKILL.md +371 -0
  2590. package/skills/skill-creator/license.txt +202 -0
  2591. package/skills/skill-creator/scripts/init_skill.py +378 -0
  2592. package/skills/skill-creator/scripts/package_skill.py +111 -0
  2593. package/skills/skill-creator/scripts/quick_validate.py +101 -0
  2594. package/skills/slack/SKILL.md +144 -0
  2595. package/skills/songsee/SKILL.md +29 -0
  2596. package/skills/sonoscli/SKILL.md +26 -0
  2597. package/skills/spotify-player/SKILL.md +34 -0
  2598. package/skills/summarize/SKILL.md +67 -0
  2599. package/skills/things-mac/SKILL.md +61 -0
  2600. package/skills/tmux/SKILL.md +121 -0
  2601. package/skills/tmux/scripts/find-sessions.sh +112 -0
  2602. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  2603. package/skills/trello/SKILL.md +84 -0
  2604. package/skills/video-frames/SKILL.md +29 -0
  2605. package/skills/video-frames/scripts/frame.sh +81 -0
  2606. package/skills/voice-call/SKILL.md +35 -0
  2607. package/skills/wacli/SKILL.md +42 -0
  2608. package/skills/weather/SKILL.md +49 -0
@@ -0,0 +1,3252 @@
1
+ ---
2
+ summary: "All configuration options for ~/.clawdbot/moltbot.json with examples"
3
+ read_when:
4
+ - Adding or modifying config fields
5
+ ---
6
+ # Configuration 🔧
7
+
8
+ Moltbot reads an optional **JSON5** config from `~/.clawdbot/moltbot.json` (comments + trailing commas allowed).
9
+
10
+ If the file is missing, Moltbot uses safe-ish defaults (embedded Pi agent + per-sender sessions + workspace `~/clawd`). You usually only need a config to:
11
+ - restrict who can trigger the bot (`channels.whatsapp.allowFrom`, `channels.telegram.allowFrom`, etc.)
12
+ - control group allowlists + mention behavior (`channels.whatsapp.groups`, `channels.telegram.groups`, `channels.discord.guilds`, `agents.list[].groupChat`)
13
+ - customize message prefixes (`messages`)
14
+ - set the agent's workspace (`agents.defaults.workspace` or `agents.list[].workspace`)
15
+ - tune the embedded agent defaults (`agents.defaults`) and session behavior (`session`)
16
+ - set per-agent identity (`agents.list[].identity`)
17
+
18
+ > **New to configuration?** Check out the [Configuration Examples](/gateway/configuration-examples) guide for complete examples with detailed explanations!
19
+
20
+ ## Strict config validation
21
+
22
+ Moltbot only accepts configurations that fully match the schema.
23
+ Unknown keys, malformed types, or invalid values cause the Gateway to **refuse to start** for safety.
24
+
25
+ When validation fails:
26
+ - The Gateway does not boot.
27
+ - Only diagnostic commands are allowed (for example: `moltbot doctor`, `moltbot logs`, `moltbot health`, `moltbot status`, `moltbot service`, `moltbot help`).
28
+ - Run `moltbot doctor` to see the exact issues.
29
+ - Run `moltbot doctor --fix` (or `--yes`) to apply migrations/repairs.
30
+
31
+ Doctor never writes changes unless you explicitly opt into `--fix`/`--yes`.
32
+
33
+ ## Schema + UI hints
34
+
35
+ The Gateway exposes a JSON Schema representation of the config via `config.schema` for UI editors.
36
+ The Control UI renders a form from this schema, with a **Raw JSON** editor as an escape hatch.
37
+
38
+ Channel plugins and extensions can register schema + UI hints for their config, so channel settings
39
+ stay schema-driven across apps without hard-coded forms.
40
+
41
+ Hints (labels, grouping, sensitive fields) ship alongside the schema so clients can render
42
+ better forms without hard-coding config knowledge.
43
+
44
+ ## Apply + restart (RPC)
45
+
46
+ Use `config.apply` to validate + write the full config and restart the Gateway in one step.
47
+ It writes a restart sentinel and pings the last active session after the Gateway comes back.
48
+
49
+ Warning: `config.apply` replaces the **entire config**. If you want to change only a few keys,
50
+ use `config.patch` or `moltbot config set`. Keep a backup of `~/.clawdbot/moltbot.json`.
51
+
52
+ Params:
53
+ - `raw` (string) — JSON5 payload for the entire config
54
+ - `baseHash` (optional) — config hash from `config.get` (required when a config already exists)
55
+ - `sessionKey` (optional) — last active session key for the wake-up ping
56
+ - `note` (optional) — note to include in the restart sentinel
57
+ - `restartDelayMs` (optional) — delay before restart (default 2000)
58
+
59
+ Example (via `gateway call`):
60
+
61
+ ```bash
62
+ moltbot gateway call config.get --params '{}' # capture payload.hash
63
+ moltbot gateway call config.apply --params '{
64
+ "raw": "{\\n agents: { defaults: { workspace: \\"~/clawd\\" } }\\n}\\n",
65
+ "baseHash": "<hash-from-config.get>",
66
+ "sessionKey": "agent:main:whatsapp:dm:+15555550123",
67
+ "restartDelayMs": 1000
68
+ }'
69
+ ```
70
+
71
+ ## Partial updates (RPC)
72
+
73
+ Use `config.patch` to merge a partial update into the existing config without clobbering
74
+ unrelated keys. It applies JSON merge patch semantics:
75
+ - objects merge recursively
76
+ - `null` deletes a key
77
+ - arrays replace
78
+ Like `config.apply`, it validates, writes the config, stores a restart sentinel, and schedules
79
+ the Gateway restart (with an optional wake when `sessionKey` is provided).
80
+
81
+ Params:
82
+ - `raw` (string) — JSON5 payload containing just the keys to change
83
+ - `baseHash` (required) — config hash from `config.get`
84
+ - `sessionKey` (optional) — last active session key for the wake-up ping
85
+ - `note` (optional) — note to include in the restart sentinel
86
+ - `restartDelayMs` (optional) — delay before restart (default 2000)
87
+
88
+ Example:
89
+
90
+ ```bash
91
+ moltbot gateway call config.get --params '{}' # capture payload.hash
92
+ moltbot gateway call config.patch --params '{
93
+ "raw": "{\\n channels: { telegram: { groups: { \\"*\\": { requireMention: false } } } }\\n}\\n",
94
+ "baseHash": "<hash-from-config.get>",
95
+ "sessionKey": "agent:main:whatsapp:dm:+15555550123",
96
+ "restartDelayMs": 1000
97
+ }'
98
+ ```
99
+
100
+ ## Minimal config (recommended starting point)
101
+
102
+ ```json5
103
+ {
104
+ agents: { defaults: { workspace: "~/clawd" } },
105
+ channels: { whatsapp: { allowFrom: ["+15555550123"] } }
106
+ }
107
+ ```
108
+
109
+ Build the default image once with:
110
+ ```bash
111
+ scripts/sandbox-setup.sh
112
+ ```
113
+
114
+ ## Self-chat mode (recommended for group control)
115
+
116
+ To prevent the bot from responding to WhatsApp @-mentions in groups (only respond to specific text triggers):
117
+
118
+ ```json5
119
+ {
120
+ agents: {
121
+ defaults: { workspace: "~/clawd" },
122
+ list: [
123
+ {
124
+ id: "main",
125
+ groupChat: { mentionPatterns: ["@clawd", "reisponde"] }
126
+ }
127
+ ]
128
+ },
129
+ channels: {
130
+ whatsapp: {
131
+ // Allowlist is DMs only; including your own number enables self-chat mode.
132
+ allowFrom: ["+15555550123"],
133
+ groups: { "*": { requireMention: true } }
134
+ }
135
+ }
136
+ }
137
+ ```
138
+
139
+ ## Config Includes (`$include`)
140
+
141
+ Split your config into multiple files using the `$include` directive. This is useful for:
142
+ - Organizing large configs (e.g., per-client agent definitions)
143
+ - Sharing common settings across environments
144
+ - Keeping sensitive configs separate
145
+
146
+ ### Basic usage
147
+
148
+ ```json5
149
+ // ~/.clawdbot/moltbot.json
150
+ {
151
+ gateway: { port: 18789 },
152
+
153
+ // Include a single file (replaces the key's value)
154
+ agents: { "$include": "./agents.json5" },
155
+
156
+ // Include multiple files (deep-merged in order)
157
+ broadcast: {
158
+ "$include": [
159
+ "./clients/mueller.json5",
160
+ "./clients/schmidt.json5"
161
+ ]
162
+ }
163
+ }
164
+ ```
165
+
166
+ ```json5
167
+ // ~/.clawdbot/agents.json5
168
+ {
169
+ defaults: { sandbox: { mode: "all", scope: "session" } },
170
+ list: [
171
+ { id: "main", workspace: "~/clawd" }
172
+ ]
173
+ }
174
+ ```
175
+
176
+ ### Merge behavior
177
+
178
+ - **Single file**: Replaces the object containing `$include`
179
+ - **Array of files**: Deep-merges files in order (later files override earlier ones)
180
+ - **With sibling keys**: Sibling keys are merged after includes (override included values)
181
+ - **Sibling keys + arrays/primitives**: Not supported (included content must be an object)
182
+
183
+ ```json5
184
+ // Sibling keys override included values
185
+ {
186
+ "$include": "./base.json5", // { a: 1, b: 2 }
187
+ b: 99 // Result: { a: 1, b: 99 }
188
+ }
189
+ ```
190
+
191
+ ### Nested includes
192
+
193
+ Included files can themselves contain `$include` directives (up to 10 levels deep):
194
+
195
+ ```json5
196
+ // clients/mueller.json5
197
+ {
198
+ agents: { "$include": "./mueller/agents.json5" },
199
+ broadcast: { "$include": "./mueller/broadcast.json5" }
200
+ }
201
+ ```
202
+
203
+ ### Path resolution
204
+
205
+ - **Relative paths**: Resolved relative to the including file
206
+ - **Absolute paths**: Used as-is
207
+ - **Parent directories**: `../` references work as expected
208
+
209
+ ```json5
210
+ { "$include": "./sub/config.json5" } // relative
211
+ { "$include": "/etc/moltbot/base.json5" } // absolute
212
+ { "$include": "../shared/common.json5" } // parent dir
213
+ ```
214
+
215
+ ### Error handling
216
+
217
+ - **Missing file**: Clear error with resolved path
218
+ - **Parse error**: Shows which included file failed
219
+ - **Circular includes**: Detected and reported with include chain
220
+
221
+ ### Example: Multi-client legal setup
222
+
223
+ ```json5
224
+ // ~/.clawdbot/moltbot.json
225
+ {
226
+ gateway: { port: 18789, auth: { token: "secret" } },
227
+
228
+ // Common agent defaults
229
+ agents: {
230
+ defaults: {
231
+ sandbox: { mode: "all", scope: "session" }
232
+ },
233
+ // Merge agent lists from all clients
234
+ list: { "$include": [
235
+ "./clients/mueller/agents.json5",
236
+ "./clients/schmidt/agents.json5"
237
+ ]}
238
+ },
239
+
240
+ // Merge broadcast configs
241
+ broadcast: { "$include": [
242
+ "./clients/mueller/broadcast.json5",
243
+ "./clients/schmidt/broadcast.json5"
244
+ ]},
245
+
246
+ channels: { whatsapp: { groupPolicy: "allowlist" } }
247
+ }
248
+ ```
249
+
250
+ ```json5
251
+ // ~/.clawdbot/clients/mueller/agents.json5
252
+ [
253
+ { id: "mueller-transcribe", workspace: "~/clients/mueller/transcribe" },
254
+ { id: "mueller-docs", workspace: "~/clients/mueller/docs" }
255
+ ]
256
+ ```
257
+
258
+ ```json5
259
+ // ~/.clawdbot/clients/mueller/broadcast.json5
260
+ {
261
+ "120363403215116621@g.us": ["mueller-transcribe", "mueller-docs"]
262
+ }
263
+ ```
264
+
265
+ ## Common options
266
+
267
+ ### Env vars + `.env`
268
+
269
+ Moltbot reads env vars from the parent process (shell, launchd/systemd, CI, etc.).
270
+
271
+ Additionally, it loads:
272
+ - `.env` from the current working directory (if present)
273
+ - a global fallback `.env` from `~/.clawdbot/.env` (aka `$CLAWDBOT_STATE_DIR/.env`)
274
+
275
+ Neither `.env` file overrides existing env vars.
276
+
277
+ You can also provide inline env vars in config. These are only applied if the
278
+ process env is missing the key (same non-overriding rule):
279
+
280
+ ```json5
281
+ {
282
+ env: {
283
+ OPENROUTER_API_KEY: "sk-or-...",
284
+ vars: {
285
+ GROQ_API_KEY: "gsk-..."
286
+ }
287
+ }
288
+ }
289
+ ```
290
+
291
+ See [/environment](/environment) for full precedence and sources.
292
+
293
+ ### `env.shellEnv` (optional)
294
+
295
+ Opt-in convenience: if enabled and none of the expected keys are set yet, Moltbot runs your login shell and imports only the missing expected keys (never overrides).
296
+ This effectively sources your shell profile.
297
+
298
+ ```json5
299
+ {
300
+ env: {
301
+ shellEnv: {
302
+ enabled: true,
303
+ timeoutMs: 15000
304
+ }
305
+ }
306
+ }
307
+ ```
308
+
309
+ Env var equivalent:
310
+ - `CLAWDBOT_LOAD_SHELL_ENV=1`
311
+ - `CLAWDBOT_SHELL_ENV_TIMEOUT_MS=15000`
312
+
313
+ ### Env var substitution in config
314
+
315
+ You can reference environment variables directly in any config string value using
316
+ `${VAR_NAME}` syntax. Variables are substituted at config load time, before validation.
317
+
318
+ ```json5
319
+ {
320
+ models: {
321
+ providers: {
322
+ "vercel-gateway": {
323
+ apiKey: "${VERCEL_GATEWAY_API_KEY}"
324
+ }
325
+ }
326
+ },
327
+ gateway: {
328
+ auth: {
329
+ token: "${CLAWDBOT_GATEWAY_TOKEN}"
330
+ }
331
+ }
332
+ }
333
+ ```
334
+
335
+ **Rules:**
336
+ - Only uppercase env var names are matched: `[A-Z_][A-Z0-9_]*`
337
+ - Missing or empty env vars throw an error at config load
338
+ - Escape with `$${VAR}` to output a literal `${VAR}`
339
+ - Works with `$include` (included files also get substitution)
340
+
341
+ **Inline substitution:**
342
+
343
+ ```json5
344
+ {
345
+ models: {
346
+ providers: {
347
+ custom: {
348
+ baseUrl: "${CUSTOM_API_BASE}/v1" // → "https://api.example.com/v1"
349
+ }
350
+ }
351
+ }
352
+ }
353
+ ```
354
+
355
+ ### Auth storage (OAuth + API keys)
356
+
357
+ Moltbot stores **per-agent** auth profiles (OAuth + API keys) in:
358
+ - `<agentDir>/auth-profiles.json` (default: `~/.clawdbot/agents/<agentId>/agent/auth-profiles.json`)
359
+
360
+ See also: [/concepts/oauth](/concepts/oauth)
361
+
362
+ Legacy OAuth imports:
363
+ - `~/.clawdbot/credentials/oauth.json` (or `$CLAWDBOT_STATE_DIR/credentials/oauth.json`)
364
+
365
+ The embedded Pi agent maintains a runtime cache at:
366
+ - `<agentDir>/auth.json` (managed automatically; don’t edit manually)
367
+
368
+ Legacy agent dir (pre multi-agent):
369
+ - `~/.clawdbot/agent/*` (migrated by `moltbot doctor` into `~/.clawdbot/agents/<defaultAgentId>/agent/*`)
370
+
371
+ Overrides:
372
+ - OAuth dir (legacy import only): `CLAWDBOT_OAUTH_DIR`
373
+ - Agent dir (default agent root override): `CLAWDBOT_AGENT_DIR` (preferred), `PI_CODING_AGENT_DIR` (legacy)
374
+
375
+ On first use, Moltbot imports `oauth.json` entries into `auth-profiles.json`.
376
+
377
+ ### `auth`
378
+
379
+ Optional metadata for auth profiles. This does **not** store secrets; it maps
380
+ profile IDs to a provider + mode (and optional email) and defines the provider
381
+ rotation order used for failover.
382
+
383
+ ```json5
384
+ {
385
+ auth: {
386
+ profiles: {
387
+ "anthropic:me@example.com": { provider: "anthropic", mode: "oauth", email: "me@example.com" },
388
+ "anthropic:work": { provider: "anthropic", mode: "api_key" }
389
+ },
390
+ order: {
391
+ anthropic: ["anthropic:me@example.com", "anthropic:work"]
392
+ }
393
+ }
394
+ }
395
+ ```
396
+
397
+ ### `agents.list[].identity`
398
+
399
+ Optional per-agent identity used for defaults and UX. This is written by the macOS onboarding assistant.
400
+
401
+ If set, Moltbot derives defaults (only when you haven’t set them explicitly):
402
+ - `messages.ackReaction` from the **active agent**’s `identity.emoji` (falls back to 👀)
403
+ - `agents.list[].groupChat.mentionPatterns` from the agent’s `identity.name`/`identity.emoji` (so “@Samantha” works in groups across Telegram/Slack/Discord/Google Chat/iMessage/WhatsApp)
404
+ - `identity.avatar` accepts a workspace-relative image path or a remote URL/data URL. Local files must live inside the agent workspace.
405
+
406
+ `identity.avatar` accepts:
407
+ - Workspace-relative path (must stay within the agent workspace)
408
+ - `http(s)` URL
409
+ - `data:` URI
410
+
411
+ ```json5
412
+ {
413
+ agents: {
414
+ list: [
415
+ {
416
+ id: "main",
417
+ identity: {
418
+ name: "Samantha",
419
+ theme: "helpful sloth",
420
+ emoji: "🦥",
421
+ avatar: "avatars/samantha.png"
422
+ }
423
+ }
424
+ ]
425
+ }
426
+ }
427
+ ```
428
+
429
+ ### `wizard`
430
+
431
+ Metadata written by CLI wizards (`onboard`, `configure`, `doctor`).
432
+
433
+ ```json5
434
+ {
435
+ wizard: {
436
+ lastRunAt: "2026-01-01T00:00:00.000Z",
437
+ lastRunVersion: "2026.1.4",
438
+ lastRunCommit: "abc1234",
439
+ lastRunCommand: "configure",
440
+ lastRunMode: "local"
441
+ }
442
+ }
443
+ ```
444
+
445
+ ### `logging`
446
+
447
+ - Default log file: `/tmp/moltbot/moltbot-YYYY-MM-DD.log`
448
+ - If you want a stable path, set `logging.file` to `/tmp/moltbot/moltbot.log`.
449
+ - Console output can be tuned separately via:
450
+ - `logging.consoleLevel` (defaults to `info`, bumps to `debug` when `--verbose`)
451
+ - `logging.consoleStyle` (`pretty` | `compact` | `json`)
452
+ - Tool summaries can be redacted to avoid leaking secrets:
453
+ - `logging.redactSensitive` (`off` | `tools`, default: `tools`)
454
+ - `logging.redactPatterns` (array of regex strings; overrides defaults)
455
+
456
+ ```json5
457
+ {
458
+ logging: {
459
+ level: "info",
460
+ file: "/tmp/moltbot/moltbot.log",
461
+ consoleLevel: "info",
462
+ consoleStyle: "pretty",
463
+ redactSensitive: "tools",
464
+ redactPatterns: [
465
+ // Example: override defaults with your own rules.
466
+ "\\bTOKEN\\b\\s*[=:]\\s*([\"']?)([^\\s\"']+)\\1",
467
+ "/\\bsk-[A-Za-z0-9_-]{8,}\\b/gi"
468
+ ]
469
+ }
470
+ }
471
+ ```
472
+
473
+ ### `channels.whatsapp.dmPolicy`
474
+
475
+ Controls how WhatsApp direct chats (DMs) are handled:
476
+ - `"pairing"` (default): unknown senders get a pairing code; owner must approve
477
+ - `"allowlist"`: only allow senders in `channels.whatsapp.allowFrom` (or paired allow store)
478
+ - `"open"`: allow all inbound DMs (**requires** `channels.whatsapp.allowFrom` to include `"*"`)
479
+ - `"disabled"`: ignore all inbound DMs
480
+
481
+ Pairing codes expire after 1 hour; the bot only sends a pairing code when a new request is created. Pending DM pairing requests are capped at **3 per channel** by default.
482
+
483
+ Pairing approvals:
484
+ - `moltbot pairing list whatsapp`
485
+ - `moltbot pairing approve whatsapp <code>`
486
+
487
+ ### `channels.whatsapp.allowFrom`
488
+
489
+ Allowlist of E.164 phone numbers that may trigger WhatsApp auto-replies (**DMs only**).
490
+ If empty and `channels.whatsapp.dmPolicy="pairing"`, unknown senders will receive a pairing code.
491
+ For groups, use `channels.whatsapp.groupPolicy` + `channels.whatsapp.groupAllowFrom`.
492
+
493
+ ```json5
494
+ {
495
+ channels: {
496
+ whatsapp: {
497
+ dmPolicy: "pairing", // pairing | allowlist | open | disabled
498
+ allowFrom: ["+15555550123", "+447700900123"],
499
+ textChunkLimit: 4000, // optional outbound chunk size (chars)
500
+ chunkMode: "length", // optional chunking mode (length | newline)
501
+ mediaMaxMb: 50 // optional inbound media cap (MB)
502
+ }
503
+ }
504
+ }
505
+ ```
506
+
507
+ ### `channels.whatsapp.sendReadReceipts`
508
+
509
+ Controls whether inbound WhatsApp messages are marked as read (blue ticks). Default: `true`.
510
+
511
+ Self-chat mode always skips read receipts, even when enabled.
512
+
513
+ Per-account override: `channels.whatsapp.accounts.<id>.sendReadReceipts`.
514
+
515
+ ```json5
516
+ {
517
+ channels: {
518
+ whatsapp: { sendReadReceipts: false }
519
+ }
520
+ }
521
+ ```
522
+
523
+ ### `channels.whatsapp.accounts` (multi-account)
524
+
525
+ Run multiple WhatsApp accounts in one gateway:
526
+
527
+ ```json5
528
+ {
529
+ channels: {
530
+ whatsapp: {
531
+ accounts: {
532
+ default: {}, // optional; keeps the default id stable
533
+ personal: {},
534
+ biz: {
535
+ // Optional override. Default: ~/.clawdbot/credentials/whatsapp/biz
536
+ // authDir: "~/.clawdbot/credentials/whatsapp/biz",
537
+ }
538
+ }
539
+ }
540
+ }
541
+ }
542
+ ```
543
+
544
+ Notes:
545
+ - Outbound commands default to account `default` if present; otherwise the first configured account id (sorted).
546
+ - The legacy single-account Baileys auth dir is migrated by `moltbot doctor` into `whatsapp/default`.
547
+
548
+ ### `channels.telegram.accounts` / `channels.discord.accounts` / `channels.googlechat.accounts` / `channels.slack.accounts` / `channels.mattermost.accounts` / `channels.signal.accounts` / `channels.imessage.accounts`
549
+
550
+ Run multiple accounts per channel (each account has its own `accountId` and optional `name`):
551
+
552
+ ```json5
553
+ {
554
+ channels: {
555
+ telegram: {
556
+ accounts: {
557
+ default: {
558
+ name: "Primary bot",
559
+ botToken: "123456:ABC..."
560
+ },
561
+ alerts: {
562
+ name: "Alerts bot",
563
+ botToken: "987654:XYZ..."
564
+ }
565
+ }
566
+ }
567
+ }
568
+ }
569
+ ```
570
+
571
+ Notes:
572
+ - `default` is used when `accountId` is omitted (CLI + routing).
573
+ - Env tokens only apply to the **default** account.
574
+ - Base channel settings (group policy, mention gating, etc.) apply to all accounts unless overridden per account.
575
+ - Use `bindings[].match.accountId` to route each account to a different agents.defaults.
576
+
577
+ ### Group chat mention gating (`agents.list[].groupChat` + `messages.groupChat`)
578
+
579
+ Group messages default to **require mention** (either metadata mention or regex patterns). Applies to WhatsApp, Telegram, Discord, Google Chat, and iMessage group chats.
580
+
581
+ **Mention types:**
582
+ - **Metadata mentions**: Native platform @-mentions (e.g., WhatsApp tap-to-mention). Ignored in WhatsApp self-chat mode (see `channels.whatsapp.allowFrom`).
583
+ - **Text patterns**: Regex patterns defined in `agents.list[].groupChat.mentionPatterns`. Always checked regardless of self-chat mode.
584
+ - Mention gating is enforced only when mention detection is possible (native mentions or at least one `mentionPattern`).
585
+
586
+ ```json5
587
+ {
588
+ messages: {
589
+ groupChat: { historyLimit: 50 }
590
+ },
591
+ agents: {
592
+ list: [
593
+ { id: "main", groupChat: { mentionPatterns: ["@clawd", "moltbot", "clawd"] } }
594
+ ]
595
+ }
596
+ }
597
+ ```
598
+
599
+ `messages.groupChat.historyLimit` sets the global default for group history context. Channels can override with `channels.<channel>.historyLimit` (or `channels.<channel>.accounts.*.historyLimit` for multi-account). Set `0` to disable history wrapping.
600
+
601
+ #### DM history limits
602
+
603
+ DM conversations use session-based history managed by the agent. You can limit the number of user turns retained per DM session:
604
+
605
+ ```json5
606
+ {
607
+ channels: {
608
+ telegram: {
609
+ dmHistoryLimit: 30, // limit DM sessions to 30 user turns
610
+ dms: {
611
+ "123456789": { historyLimit: 50 } // per-user override (user ID)
612
+ }
613
+ }
614
+ }
615
+ }
616
+ ```
617
+
618
+ Resolution order:
619
+ 1. Per-DM override: `channels.<provider>.dms[userId].historyLimit`
620
+ 2. Provider default: `channels.<provider>.dmHistoryLimit`
621
+ 3. No limit (all history retained)
622
+
623
+ Supported providers: `telegram`, `whatsapp`, `discord`, `slack`, `signal`, `imessage`, `msteams`.
624
+
625
+ Per-agent override (takes precedence when set, even `[]`):
626
+ ```json5
627
+ {
628
+ agents: {
629
+ list: [
630
+ { id: "work", groupChat: { mentionPatterns: ["@workbot", "\\+15555550123"] } },
631
+ { id: "personal", groupChat: { mentionPatterns: ["@homebot", "\\+15555550999"] } }
632
+ ]
633
+ }
634
+ }
635
+ ```
636
+
637
+ Mention gating defaults live per channel (`channels.whatsapp.groups`, `channels.telegram.groups`, `channels.imessage.groups`, `channels.discord.guilds`). When `*.groups` is set, it also acts as a group allowlist; include `"*"` to allow all groups.
638
+
639
+ To respond **only** to specific text triggers (ignoring native @-mentions):
640
+ ```json5
641
+ {
642
+ channels: {
643
+ whatsapp: {
644
+ // Include your own number to enable self-chat mode (ignore native @-mentions).
645
+ allowFrom: ["+15555550123"],
646
+ groups: { "*": { requireMention: true } }
647
+ }
648
+ },
649
+ agents: {
650
+ list: [
651
+ {
652
+ id: "main",
653
+ groupChat: {
654
+ // Only these text patterns will trigger responses
655
+ mentionPatterns: ["reisponde", "@clawd"]
656
+ }
657
+ }
658
+ ]
659
+ }
660
+ }
661
+ ```
662
+
663
+ ### Group policy (per channel)
664
+
665
+ Use `channels.*.groupPolicy` to control whether group/room messages are accepted at all:
666
+
667
+ ```json5
668
+ {
669
+ channels: {
670
+ whatsapp: {
671
+ groupPolicy: "allowlist",
672
+ groupAllowFrom: ["+15551234567"]
673
+ },
674
+ telegram: {
675
+ groupPolicy: "allowlist",
676
+ groupAllowFrom: ["tg:123456789", "@alice"]
677
+ },
678
+ signal: {
679
+ groupPolicy: "allowlist",
680
+ groupAllowFrom: ["+15551234567"]
681
+ },
682
+ imessage: {
683
+ groupPolicy: "allowlist",
684
+ groupAllowFrom: ["chat_id:123"]
685
+ },
686
+ msteams: {
687
+ groupPolicy: "allowlist",
688
+ groupAllowFrom: ["user@org.com"]
689
+ },
690
+ discord: {
691
+ groupPolicy: "allowlist",
692
+ guilds: {
693
+ "GUILD_ID": {
694
+ channels: { help: { allow: true } }
695
+ }
696
+ }
697
+ },
698
+ slack: {
699
+ groupPolicy: "allowlist",
700
+ channels: { "#general": { allow: true } }
701
+ }
702
+ }
703
+ }
704
+ ```
705
+
706
+ Notes:
707
+ - `"open"`: groups bypass allowlists; mention-gating still applies.
708
+ - `"disabled"`: block all group/room messages.
709
+ - `"allowlist"`: only allow groups/rooms that match the configured allowlist.
710
+ - `channels.defaults.groupPolicy` sets the default when a provider’s `groupPolicy` is unset.
711
+ - WhatsApp/Telegram/Signal/iMessage/Microsoft Teams use `groupAllowFrom` (fallback: explicit `allowFrom`).
712
+ - Discord/Slack use channel allowlists (`channels.discord.guilds.*.channels`, `channels.slack.channels`).
713
+ - Group DMs (Discord/Slack) are still controlled by `dm.groupEnabled` + `dm.groupChannels`.
714
+ - Default is `groupPolicy: "allowlist"` (unless overridden by `channels.defaults.groupPolicy`); if no allowlist is configured, group messages are blocked.
715
+
716
+ ### Multi-agent routing (`agents.list` + `bindings`)
717
+
718
+ Run multiple isolated agents (separate workspace, `agentDir`, sessions) inside one Gateway.
719
+ Inbound messages are routed to an agent via bindings.
720
+
721
+ - `agents.list[]`: per-agent overrides.
722
+ - `id`: stable agent id (required).
723
+ - `default`: optional; when multiple are set, the first wins and a warning is logged.
724
+ If none are set, the **first entry** in the list is the default agent.
725
+ - `name`: display name for the agent.
726
+ - `workspace`: default `~/clawd-<agentId>` (for `main`, falls back to `agents.defaults.workspace`).
727
+ - `agentDir`: default `~/.clawdbot/agents/<agentId>/agent`.
728
+ - `model`: per-agent default model, overrides `agents.defaults.model` for that agent.
729
+ - string form: `"provider/model"`, overrides only `agents.defaults.model.primary`
730
+ - object form: `{ primary, fallbacks }` (fallbacks override `agents.defaults.model.fallbacks`; `[]` disables global fallbacks for that agent)
731
+ - `identity`: per-agent name/theme/emoji (used for mention patterns + ack reactions).
732
+ - `groupChat`: per-agent mention-gating (`mentionPatterns`).
733
+ - `sandbox`: per-agent sandbox config (overrides `agents.defaults.sandbox`).
734
+ - `mode`: `"off"` | `"non-main"` | `"all"`
735
+ - `workspaceAccess`: `"none"` | `"ro"` | `"rw"`
736
+ - `scope`: `"session"` | `"agent"` | `"shared"`
737
+ - `workspaceRoot`: custom sandbox workspace root
738
+ - `docker`: per-agent docker overrides (e.g. `image`, `network`, `env`, `setupCommand`, limits; ignored when `scope: "shared"`)
739
+ - `browser`: per-agent sandboxed browser overrides (ignored when `scope: "shared"`)
740
+ - `prune`: per-agent sandbox pruning overrides (ignored when `scope: "shared"`)
741
+ - `subagents`: per-agent sub-agent defaults.
742
+ - `allowAgents`: allowlist of agent ids for `sessions_spawn` from this agent (`["*"]` = allow any; default: only same agent)
743
+ - `tools`: per-agent tool restrictions (applied before sandbox tool policy).
744
+ - `profile`: base tool profile (applied before allow/deny)
745
+ - `allow`: array of allowed tool names
746
+ - `deny`: array of denied tool names (deny wins)
747
+ - `agents.defaults`: shared agent defaults (model, workspace, sandbox, etc.).
748
+ - `bindings[]`: routes inbound messages to an `agentId`.
749
+ - `match.channel` (required)
750
+ - `match.accountId` (optional; `*` = any account; omitted = default account)
751
+ - `match.peer` (optional; `{ kind: dm|group|channel, id }`)
752
+ - `match.guildId` / `match.teamId` (optional; channel-specific)
753
+
754
+ Deterministic match order:
755
+ 1) `match.peer`
756
+ 2) `match.guildId`
757
+ 3) `match.teamId`
758
+ 4) `match.accountId` (exact, no peer/guild/team)
759
+ 5) `match.accountId: "*"` (channel-wide, no peer/guild/team)
760
+ 6) default agent (`agents.list[].default`, else first list entry, else `"main"`)
761
+
762
+ Within each match tier, the first matching entry in `bindings` wins.
763
+
764
+ #### Per-agent access profiles (multi-agent)
765
+
766
+ Each agent can carry its own sandbox + tool policy. Use this to mix access
767
+ levels in one gateway:
768
+ - **Full access** (personal agent)
769
+ - **Read-only** tools + workspace
770
+ - **No filesystem access** (messaging/session tools only)
771
+
772
+ See [Multi-Agent Sandbox & Tools](/multi-agent-sandbox-tools) for precedence and
773
+ additional examples.
774
+
775
+ Full access (no sandbox):
776
+ ```json5
777
+ {
778
+ agents: {
779
+ list: [
780
+ {
781
+ id: "personal",
782
+ workspace: "~/clawd-personal",
783
+ sandbox: { mode: "off" }
784
+ }
785
+ ]
786
+ }
787
+ }
788
+ ```
789
+
790
+ Read-only tools + read-only workspace:
791
+ ```json5
792
+ {
793
+ agents: {
794
+ list: [
795
+ {
796
+ id: "family",
797
+ workspace: "~/clawd-family",
798
+ sandbox: {
799
+ mode: "all",
800
+ scope: "agent",
801
+ workspaceAccess: "ro"
802
+ },
803
+ tools: {
804
+ allow: ["read", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status"],
805
+ deny: ["write", "edit", "apply_patch", "exec", "process", "browser"]
806
+ }
807
+ }
808
+ ]
809
+ }
810
+ }
811
+ ```
812
+
813
+ No filesystem access (messaging/session tools enabled):
814
+ ```json5
815
+ {
816
+ agents: {
817
+ list: [
818
+ {
819
+ id: "public",
820
+ workspace: "~/clawd-public",
821
+ sandbox: {
822
+ mode: "all",
823
+ scope: "agent",
824
+ workspaceAccess: "none"
825
+ },
826
+ tools: {
827
+ allow: ["sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status", "whatsapp", "telegram", "slack", "discord", "gateway"],
828
+ deny: ["read", "write", "edit", "apply_patch", "exec", "process", "browser", "canvas", "nodes", "cron", "gateway", "image"]
829
+ }
830
+ }
831
+ ]
832
+ }
833
+ }
834
+ ```
835
+
836
+ Example: two WhatsApp accounts → two agents:
837
+
838
+ ```json5
839
+ {
840
+ agents: {
841
+ list: [
842
+ { id: "home", default: true, workspace: "~/clawd-home" },
843
+ { id: "work", workspace: "~/clawd-work" }
844
+ ]
845
+ },
846
+ bindings: [
847
+ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
848
+ { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } }
849
+ ],
850
+ channels: {
851
+ whatsapp: {
852
+ accounts: {
853
+ personal: {},
854
+ biz: {},
855
+ }
856
+ }
857
+ }
858
+ }
859
+ ```
860
+
861
+ ### `tools.agentToAgent` (optional)
862
+
863
+ Agent-to-agent messaging is opt-in:
864
+
865
+ ```json5
866
+ {
867
+ tools: {
868
+ agentToAgent: {
869
+ enabled: false,
870
+ allow: ["home", "work"]
871
+ }
872
+ }
873
+ }
874
+ ```
875
+
876
+ ### `messages.queue`
877
+
878
+ Controls how inbound messages behave when an agent run is already active.
879
+
880
+ ```json5
881
+ {
882
+ messages: {
883
+ queue: {
884
+ mode: "collect", // steer | followup | collect | steer-backlog (steer+backlog ok) | interrupt (queue=steer legacy)
885
+ debounceMs: 1000,
886
+ cap: 20,
887
+ drop: "summarize", // old | new | summarize
888
+ byChannel: {
889
+ whatsapp: "collect",
890
+ telegram: "collect",
891
+ discord: "collect",
892
+ imessage: "collect",
893
+ webchat: "collect"
894
+ }
895
+ }
896
+ }
897
+ }
898
+ ```
899
+
900
+ ### `messages.inbound`
901
+
902
+ Debounce rapid inbound messages from the **same sender** so multiple back-to-back
903
+ messages become a single agent turn. Debouncing is scoped per channel + conversation
904
+ and uses the most recent message for reply threading/IDs.
905
+
906
+ ```json5
907
+ {
908
+ messages: {
909
+ inbound: {
910
+ debounceMs: 2000, // 0 disables
911
+ byChannel: {
912
+ whatsapp: 5000,
913
+ slack: 1500,
914
+ discord: 1500
915
+ }
916
+ }
917
+ }
918
+ }
919
+ ```
920
+
921
+ Notes:
922
+ - Debounce batches **text-only** messages; media/attachments flush immediately.
923
+ - Control commands (e.g. `/queue`, `/new`) bypass debouncing so they stay standalone.
924
+
925
+ ### `commands` (chat command handling)
926
+
927
+ Controls how chat commands are enabled across connectors.
928
+
929
+ ```json5
930
+ {
931
+ commands: {
932
+ native: "auto", // register native commands when supported (auto)
933
+ text: true, // parse slash commands in chat messages
934
+ bash: false, // allow ! (alias: /bash) (host-only; requires tools.elevated allowlists)
935
+ bashForegroundMs: 2000, // bash foreground window (0 backgrounds immediately)
936
+ config: false, // allow /config (writes to disk)
937
+ debug: false, // allow /debug (runtime-only overrides)
938
+ restart: false, // allow /restart + gateway restart tool
939
+ useAccessGroups: true // enforce access-group allowlists/policies for commands
940
+ }
941
+ }
942
+ ```
943
+
944
+ Notes:
945
+ - Text commands must be sent as a **standalone** message and use the leading `/` (no plain-text aliases).
946
+ - `commands.text: false` disables parsing chat messages for commands.
947
+ - `commands.native: "auto"` (default) turns on native commands for Discord/Telegram and leaves Slack off; unsupported channels stay text-only.
948
+ - Set `commands.native: true|false` to force all, or override per channel with `channels.discord.commands.native`, `channels.telegram.commands.native`, `channels.slack.commands.native` (bool or `"auto"`). `false` clears previously registered commands on Discord/Telegram at startup; Slack commands are managed in the Slack app.
949
+ - `channels.telegram.customCommands` adds extra Telegram bot menu entries. Names are normalized; conflicts with native commands are ignored.
950
+ - `commands.bash: true` enables `! <cmd>` to run host shell commands (`/bash <cmd>` also works as an alias). Requires `tools.elevated.enabled` and allowlisting the sender in `tools.elevated.allowFrom.<channel>`.
951
+ - `commands.bashForegroundMs` controls how long bash waits before backgrounding. While a bash job is running, new `! <cmd>` requests are rejected (one at a time).
952
+ - `commands.config: true` enables `/config` (reads/writes `moltbot.json`).
953
+ - `channels.<provider>.configWrites` gates config mutations initiated by that channel (default: true). This applies to `/config set|unset` plus provider-specific auto-migrations (Telegram supergroup ID changes, Slack channel ID changes).
954
+ - `commands.debug: true` enables `/debug` (runtime-only overrides).
955
+ - `commands.restart: true` enables `/restart` and the gateway tool restart action.
956
+ - `commands.useAccessGroups: false` allows commands to bypass access-group allowlists/policies.
957
+ - Slash commands and directives are only honored for **authorized senders**. Authorization is derived from
958
+ channel allowlists/pairing plus `commands.useAccessGroups`.
959
+
960
+ ### `web` (WhatsApp web channel runtime)
961
+
962
+ WhatsApp runs through the gateway’s web channel (Baileys Web). It starts automatically when a linked session exists.
963
+ Set `web.enabled: false` to keep it off by default.
964
+
965
+ ```json5
966
+ {
967
+ web: {
968
+ enabled: true,
969
+ heartbeatSeconds: 60,
970
+ reconnect: {
971
+ initialMs: 2000,
972
+ maxMs: 120000,
973
+ factor: 1.4,
974
+ jitter: 0.2,
975
+ maxAttempts: 0
976
+ }
977
+ }
978
+ }
979
+ ```
980
+
981
+ ### `channels.telegram` (bot transport)
982
+
983
+ Moltbot starts Telegram only when a `channels.telegram` config section exists. The bot token is resolved from `channels.telegram.botToken` (or `channels.telegram.tokenFile`), with `TELEGRAM_BOT_TOKEN` as a fallback for the default account.
984
+ Set `channels.telegram.enabled: false` to disable automatic startup.
985
+ Multi-account support lives under `channels.telegram.accounts` (see the multi-account section above). Env tokens only apply to the default account.
986
+ Set `channels.telegram.configWrites: false` to block Telegram-initiated config writes (including supergroup ID migrations and `/config set|unset`).
987
+
988
+ ```json5
989
+ {
990
+ channels: {
991
+ telegram: {
992
+ enabled: true,
993
+ botToken: "your-bot-token",
994
+ dmPolicy: "pairing", // pairing | allowlist | open | disabled
995
+ allowFrom: ["tg:123456789"], // optional; "open" requires ["*"]
996
+ groups: {
997
+ "*": { requireMention: true },
998
+ "-1001234567890": {
999
+ allowFrom: ["@admin"],
1000
+ systemPrompt: "Keep answers brief.",
1001
+ topics: {
1002
+ "99": {
1003
+ requireMention: false,
1004
+ skills: ["search"],
1005
+ systemPrompt: "Stay on topic."
1006
+ }
1007
+ }
1008
+ }
1009
+ },
1010
+ customCommands: [
1011
+ { command: "backup", description: "Git backup" },
1012
+ { command: "generate", description: "Create an image" }
1013
+ ],
1014
+ historyLimit: 50, // include last N group messages as context (0 disables)
1015
+ replyToMode: "first", // off | first | all
1016
+ linkPreview: true, // toggle outbound link previews
1017
+ streamMode: "partial", // off | partial | block (draft streaming; separate from block streaming)
1018
+ draftChunk: { // optional; only for streamMode=block
1019
+ minChars: 200,
1020
+ maxChars: 800,
1021
+ breakPreference: "paragraph" // paragraph | newline | sentence
1022
+ },
1023
+ actions: { reactions: true, sendMessage: true }, // tool action gates (false disables)
1024
+ reactionNotifications: "own", // off | own | all
1025
+ mediaMaxMb: 5,
1026
+ retry: { // outbound retry policy
1027
+ attempts: 3,
1028
+ minDelayMs: 400,
1029
+ maxDelayMs: 30000,
1030
+ jitter: 0.1
1031
+ },
1032
+ network: { // transport overrides
1033
+ autoSelectFamily: false
1034
+ },
1035
+ proxy: "socks5://localhost:9050",
1036
+ webhookUrl: "https://example.com/telegram-webhook",
1037
+ webhookSecret: "secret",
1038
+ webhookPath: "/telegram-webhook"
1039
+ }
1040
+ }
1041
+ }
1042
+ ```
1043
+
1044
+ Draft streaming notes:
1045
+ - Uses Telegram `sendMessageDraft` (draft bubble, not a real message).
1046
+ - Requires **private chat topics** (message_thread_id in DMs; bot has topics enabled).
1047
+ - `/reasoning stream` streams reasoning into the draft, then sends the final answer.
1048
+ Retry policy defaults and behavior are documented in [Retry policy](/concepts/retry).
1049
+
1050
+ ### `channels.discord` (bot transport)
1051
+
1052
+ Configure the Discord bot by setting the bot token and optional gating:
1053
+ Multi-account support lives under `channels.discord.accounts` (see the multi-account section above). Env tokens only apply to the default account.
1054
+
1055
+ ```json5
1056
+ {
1057
+ channels: {
1058
+ discord: {
1059
+ enabled: true,
1060
+ token: "your-bot-token",
1061
+ mediaMaxMb: 8, // clamp inbound media size
1062
+ allowBots: false, // allow bot-authored messages
1063
+ actions: { // tool action gates (false disables)
1064
+ reactions: true,
1065
+ stickers: true,
1066
+ polls: true,
1067
+ permissions: true,
1068
+ messages: true,
1069
+ threads: true,
1070
+ pins: true,
1071
+ search: true,
1072
+ memberInfo: true,
1073
+ roleInfo: true,
1074
+ roles: false,
1075
+ channelInfo: true,
1076
+ voiceStatus: true,
1077
+ events: true,
1078
+ moderation: false
1079
+ },
1080
+ replyToMode: "off", // off | first | all
1081
+ dm: {
1082
+ enabled: true, // disable all DMs when false
1083
+ policy: "pairing", // pairing | allowlist | open | disabled
1084
+ allowFrom: ["1234567890", "steipete"], // optional DM allowlist ("open" requires ["*"])
1085
+ groupEnabled: false, // enable group DMs
1086
+ groupChannels: ["clawd-dm"] // optional group DM allowlist
1087
+ },
1088
+ guilds: {
1089
+ "123456789012345678": { // guild id (preferred) or slug
1090
+ slug: "friends-of-clawd",
1091
+ requireMention: false, // per-guild default
1092
+ reactionNotifications: "own", // off | own | all | allowlist
1093
+ users: ["987654321098765432"], // optional per-guild user allowlist
1094
+ channels: {
1095
+ general: { allow: true },
1096
+ help: {
1097
+ allow: true,
1098
+ requireMention: true,
1099
+ users: ["987654321098765432"],
1100
+ skills: ["docs"],
1101
+ systemPrompt: "Short answers only."
1102
+ }
1103
+ }
1104
+ }
1105
+ },
1106
+ historyLimit: 20, // include last N guild messages as context
1107
+ textChunkLimit: 2000, // optional outbound text chunk size (chars)
1108
+ chunkMode: "length", // optional chunking mode (length | newline)
1109
+ maxLinesPerMessage: 17, // soft max lines per message (Discord UI clipping)
1110
+ retry: { // outbound retry policy
1111
+ attempts: 3,
1112
+ minDelayMs: 500,
1113
+ maxDelayMs: 30000,
1114
+ jitter: 0.1
1115
+ }
1116
+ }
1117
+ }
1118
+ }
1119
+ ```
1120
+
1121
+ Moltbot starts Discord only when a `channels.discord` config section exists. The token is resolved from `channels.discord.token`, with `DISCORD_BOT_TOKEN` as a fallback for the default account (unless `channels.discord.enabled` is `false`). Use `user:<id>` (DM) or `channel:<id>` (guild channel) when specifying delivery targets for cron/CLI commands; bare numeric IDs are ambiguous and rejected.
1122
+ Guild slugs are lowercase with spaces replaced by `-`; channel keys use the slugged channel name (no leading `#`). Prefer guild ids as keys to avoid rename ambiguity.
1123
+ Bot-authored messages are ignored by default. Enable with `channels.discord.allowBots` (own messages are still filtered to prevent self-reply loops).
1124
+ Reaction notification modes:
1125
+ - `off`: no reaction events.
1126
+ - `own`: reactions on the bot's own messages (default).
1127
+ - `all`: all reactions on all messages.
1128
+ - `allowlist`: reactions from `guilds.<id>.users` on all messages (empty list disables).
1129
+ Outbound text is chunked by `channels.discord.textChunkLimit` (default 2000). Set `channels.discord.chunkMode="newline"` to split on blank lines (paragraph boundaries) before length chunking. Discord clients can clip very tall messages, so `channels.discord.maxLinesPerMessage` (default 17) splits long multi-line replies even when under 2000 chars.
1130
+ Retry policy defaults and behavior are documented in [Retry policy](/concepts/retry).
1131
+
1132
+ ### `channels.googlechat` (Chat API webhook)
1133
+
1134
+ Google Chat runs over HTTP webhooks with app-level auth (service account).
1135
+ Multi-account support lives under `channels.googlechat.accounts` (see the multi-account section above). Env vars only apply to the default account.
1136
+
1137
+ ```json5
1138
+ {
1139
+ channels: {
1140
+ "googlechat": {
1141
+ enabled: true,
1142
+ serviceAccountFile: "/path/to/service-account.json",
1143
+ audienceType: "app-url", // app-url | project-number
1144
+ audience: "https://gateway.example.com/googlechat",
1145
+ webhookPath: "/googlechat",
1146
+ botUser: "users/1234567890", // optional; improves mention detection
1147
+ dm: {
1148
+ enabled: true,
1149
+ policy: "pairing", // pairing | allowlist | open | disabled
1150
+ allowFrom: ["users/1234567890"] // optional; "open" requires ["*"]
1151
+ },
1152
+ groupPolicy: "allowlist",
1153
+ groups: {
1154
+ "spaces/AAAA": { allow: true, requireMention: true }
1155
+ },
1156
+ actions: { reactions: true },
1157
+ typingIndicator: "message",
1158
+ mediaMaxMb: 20
1159
+ }
1160
+ }
1161
+ }
1162
+ ```
1163
+
1164
+ Notes:
1165
+ - Service account JSON can be inline (`serviceAccount`) or file-based (`serviceAccountFile`).
1166
+ - Env fallbacks for the default account: `GOOGLE_CHAT_SERVICE_ACCOUNT` or `GOOGLE_CHAT_SERVICE_ACCOUNT_FILE`.
1167
+ - `audienceType` + `audience` must match the Chat app’s webhook auth config.
1168
+ - Use `spaces/<spaceId>` or `users/<userId|email>` when setting delivery targets.
1169
+
1170
+ ### `channels.slack` (socket mode)
1171
+
1172
+ Slack runs in Socket Mode and requires both a bot token and app token:
1173
+
1174
+ ```json5
1175
+ {
1176
+ channels: {
1177
+ slack: {
1178
+ enabled: true,
1179
+ botToken: "xoxb-...",
1180
+ appToken: "xapp-...",
1181
+ dm: {
1182
+ enabled: true,
1183
+ policy: "pairing", // pairing | allowlist | open | disabled
1184
+ allowFrom: ["U123", "U456", "*"], // optional; "open" requires ["*"]
1185
+ groupEnabled: false,
1186
+ groupChannels: ["G123"]
1187
+ },
1188
+ channels: {
1189
+ C123: { allow: true, requireMention: true, allowBots: false },
1190
+ "#general": {
1191
+ allow: true,
1192
+ requireMention: true,
1193
+ allowBots: false,
1194
+ users: ["U123"],
1195
+ skills: ["docs"],
1196
+ systemPrompt: "Short answers only."
1197
+ }
1198
+ },
1199
+ historyLimit: 50, // include last N channel/group messages as context (0 disables)
1200
+ allowBots: false,
1201
+ reactionNotifications: "own", // off | own | all | allowlist
1202
+ reactionAllowlist: ["U123"],
1203
+ replyToMode: "off", // off | first | all
1204
+ thread: {
1205
+ historyScope: "thread", // thread | channel
1206
+ inheritParent: false
1207
+ },
1208
+ actions: {
1209
+ reactions: true,
1210
+ messages: true,
1211
+ pins: true,
1212
+ memberInfo: true,
1213
+ emojiList: true
1214
+ },
1215
+ slashCommand: {
1216
+ enabled: true,
1217
+ name: "clawd",
1218
+ sessionPrefix: "slack:slash",
1219
+ ephemeral: true
1220
+ },
1221
+ textChunkLimit: 4000,
1222
+ chunkMode: "length",
1223
+ mediaMaxMb: 20
1224
+ }
1225
+ }
1226
+ }
1227
+ ```
1228
+
1229
+ Multi-account support lives under `channels.slack.accounts` (see the multi-account section above). Env tokens only apply to the default account.
1230
+
1231
+ Moltbot starts Slack when the provider is enabled and both tokens are set (via config or `SLACK_BOT_TOKEN` + `SLACK_APP_TOKEN`). Use `user:<id>` (DM) or `channel:<id>` when specifying delivery targets for cron/CLI commands.
1232
+ Set `channels.slack.configWrites: false` to block Slack-initiated config writes (including channel ID migrations and `/config set|unset`).
1233
+
1234
+ Bot-authored messages are ignored by default. Enable with `channels.slack.allowBots` or `channels.slack.channels.<id>.allowBots`.
1235
+
1236
+ Reaction notification modes:
1237
+ - `off`: no reaction events.
1238
+ - `own`: reactions on the bot's own messages (default).
1239
+ - `all`: all reactions on all messages.
1240
+ - `allowlist`: reactions from `channels.slack.reactionAllowlist` on all messages (empty list disables).
1241
+
1242
+ Thread session isolation:
1243
+ - `channels.slack.thread.historyScope` controls whether thread history is per-thread (`thread`, default) or shared across the channel (`channel`).
1244
+ - `channels.slack.thread.inheritParent` controls whether new thread sessions inherit the parent channel transcript (default: false).
1245
+
1246
+ Slack action groups (gate `slack` tool actions):
1247
+ | Action group | Default | Notes |
1248
+ | --- | --- | --- |
1249
+ | reactions | enabled | React + list reactions |
1250
+ | messages | enabled | Read/send/edit/delete |
1251
+ | pins | enabled | Pin/unpin/list |
1252
+ | memberInfo | enabled | Member info |
1253
+ | emojiList | enabled | Custom emoji list |
1254
+
1255
+ ### `channels.mattermost` (bot token)
1256
+
1257
+ Mattermost ships as a plugin and is not bundled with the core install.
1258
+ Install it first: `moltbot plugins install @moltbot/mattermost` (or `./extensions/mattermost` from a git checkout).
1259
+
1260
+ Mattermost requires a bot token plus the base URL for your server:
1261
+
1262
+ ```json5
1263
+ {
1264
+ channels: {
1265
+ mattermost: {
1266
+ enabled: true,
1267
+ botToken: "mm-token",
1268
+ baseUrl: "https://chat.example.com",
1269
+ dmPolicy: "pairing",
1270
+ chatmode: "oncall", // oncall | onmessage | onchar
1271
+ oncharPrefixes: [">", "!"],
1272
+ textChunkLimit: 4000,
1273
+ chunkMode: "length"
1274
+ }
1275
+ }
1276
+ }
1277
+ ```
1278
+
1279
+ Moltbot starts Mattermost when the account is configured (bot token + base URL) and enabled. The token + base URL are resolved from `channels.mattermost.botToken` + `channels.mattermost.baseUrl` or `MATTERMOST_BOT_TOKEN` + `MATTERMOST_URL` for the default account (unless `channels.mattermost.enabled` is `false`).
1280
+
1281
+ Chat modes:
1282
+ - `oncall` (default): respond to channel messages only when @mentioned.
1283
+ - `onmessage`: respond to every channel message.
1284
+ - `onchar`: respond when a message starts with a trigger prefix (`channels.mattermost.oncharPrefixes`, default `[">", "!"]`).
1285
+
1286
+ Access control:
1287
+ - Default DMs: `channels.mattermost.dmPolicy="pairing"` (unknown senders get a pairing code).
1288
+ - Public DMs: `channels.mattermost.dmPolicy="open"` plus `channels.mattermost.allowFrom=["*"]`.
1289
+ - Groups: `channels.mattermost.groupPolicy="allowlist"` by default (mention-gated). Use `channels.mattermost.groupAllowFrom` to restrict senders.
1290
+
1291
+ Multi-account support lives under `channels.mattermost.accounts` (see the multi-account section above). Env vars only apply to the default account.
1292
+ Use `channel:<id>` or `user:<id>` (or `@username`) when specifying delivery targets; bare ids are treated as channel ids.
1293
+
1294
+ ### `channels.signal` (signal-cli)
1295
+
1296
+ Signal reactions can emit system events (shared reaction tooling):
1297
+
1298
+ ```json5
1299
+ {
1300
+ channels: {
1301
+ signal: {
1302
+ reactionNotifications: "own", // off | own | all | allowlist
1303
+ reactionAllowlist: ["+15551234567", "uuid:123e4567-e89b-12d3-a456-426614174000"],
1304
+ historyLimit: 50 // include last N group messages as context (0 disables)
1305
+ }
1306
+ }
1307
+ }
1308
+ ```
1309
+
1310
+ Reaction notification modes:
1311
+ - `off`: no reaction events.
1312
+ - `own`: reactions on the bot's own messages (default).
1313
+ - `all`: all reactions on all messages.
1314
+ - `allowlist`: reactions from `channels.signal.reactionAllowlist` on all messages (empty list disables).
1315
+
1316
+ ### `channels.imessage` (imsg CLI)
1317
+
1318
+ Moltbot spawns `imsg rpc` (JSON-RPC over stdio). No daemon or port required.
1319
+
1320
+ ```json5
1321
+ {
1322
+ channels: {
1323
+ imessage: {
1324
+ enabled: true,
1325
+ cliPath: "imsg",
1326
+ dbPath: "~/Library/Messages/chat.db",
1327
+ remoteHost: "user@gateway-host", // SCP for remote attachments when using SSH wrapper
1328
+ dmPolicy: "pairing", // pairing | allowlist | open | disabled
1329
+ allowFrom: ["+15555550123", "user@example.com", "chat_id:123"],
1330
+ historyLimit: 50, // include last N group messages as context (0 disables)
1331
+ includeAttachments: false,
1332
+ mediaMaxMb: 16,
1333
+ service: "auto",
1334
+ region: "US"
1335
+ }
1336
+ }
1337
+ }
1338
+ ```
1339
+
1340
+ Multi-account support lives under `channels.imessage.accounts` (see the multi-account section above).
1341
+
1342
+ Notes:
1343
+ - Requires Full Disk Access to the Messages DB.
1344
+ - The first send will prompt for Messages automation permission.
1345
+ - Prefer `chat_id:<id>` targets. Use `imsg chats --limit 20` to list chats.
1346
+ - `channels.imessage.cliPath` can point to a wrapper script (e.g. `ssh` to another Mac that runs `imsg rpc`); use SSH keys to avoid password prompts.
1347
+ - For remote SSH wrappers, set `channels.imessage.remoteHost` to fetch attachments via SCP when `includeAttachments` is enabled.
1348
+
1349
+ Example wrapper:
1350
+ ```bash
1351
+ #!/usr/bin/env bash
1352
+ exec ssh -T gateway-host imsg "$@"
1353
+ ```
1354
+
1355
+ ### `agents.defaults.workspace`
1356
+
1357
+ Sets the **single global workspace directory** used by the agent for file operations.
1358
+
1359
+ Default: `~/clawd`.
1360
+
1361
+ ```json5
1362
+ {
1363
+ agents: { defaults: { workspace: "~/clawd" } }
1364
+ }
1365
+ ```
1366
+
1367
+ If `agents.defaults.sandbox` is enabled, non-main sessions can override this with their
1368
+ own per-scope workspaces under `agents.defaults.sandbox.workspaceRoot`.
1369
+
1370
+ ### `agents.defaults.repoRoot`
1371
+
1372
+ Optional repository root to show in the system prompt’s Runtime line. If unset, Moltbot
1373
+ tries to detect a `.git` directory by walking upward from the workspace (and current
1374
+ working directory). The path must exist to be used.
1375
+
1376
+ ```json5
1377
+ {
1378
+ agents: { defaults: { repoRoot: "~/Projects/moltbot" } }
1379
+ }
1380
+ ```
1381
+
1382
+ ### `agents.defaults.skipBootstrap`
1383
+
1384
+ Disables automatic creation of the workspace bootstrap files (`AGENTS.md`, `SOUL.md`, `TOOLS.md`, `IDENTITY.md`, `USER.md`, and `BOOTSTRAP.md`).
1385
+
1386
+ Use this for pre-seeded deployments where your workspace files come from a repo.
1387
+
1388
+ ```json5
1389
+ {
1390
+ agents: { defaults: { skipBootstrap: true } }
1391
+ }
1392
+ ```
1393
+
1394
+ ### `agents.defaults.bootstrapMaxChars`
1395
+
1396
+ Max characters of each workspace bootstrap file injected into the system prompt
1397
+ before truncation. Default: `20000`.
1398
+
1399
+ When a file exceeds this limit, Moltbot logs a warning and injects a truncated
1400
+ head/tail with a marker.
1401
+
1402
+ ```json5
1403
+ {
1404
+ agents: { defaults: { bootstrapMaxChars: 20000 } }
1405
+ }
1406
+ ```
1407
+
1408
+ ### `agents.defaults.userTimezone`
1409
+
1410
+ Sets the user’s timezone for **system prompt context** (not for timestamps in
1411
+ message envelopes). If unset, Moltbot uses the host timezone at runtime.
1412
+
1413
+ ```json5
1414
+ {
1415
+ agents: { defaults: { userTimezone: "America/Chicago" } }
1416
+ }
1417
+ ```
1418
+
1419
+ ### `agents.defaults.timeFormat`
1420
+
1421
+ Controls the **time format** shown in the system prompt’s Current Date & Time section.
1422
+ Default: `auto` (OS preference).
1423
+
1424
+ ```json5
1425
+ {
1426
+ agents: { defaults: { timeFormat: "auto" } } // auto | 12 | 24
1427
+ }
1428
+ ```
1429
+
1430
+ ### `messages`
1431
+
1432
+ Controls inbound/outbound prefixes and optional ack reactions.
1433
+ See [Messages](/concepts/messages) for queueing, sessions, and streaming context.
1434
+
1435
+ ```json5
1436
+ {
1437
+ messages: {
1438
+ responsePrefix: "🦞", // or "auto"
1439
+ ackReaction: "👀",
1440
+ ackReactionScope: "group-mentions",
1441
+ removeAckAfterReply: false
1442
+ }
1443
+ }
1444
+ ```
1445
+
1446
+ `responsePrefix` is applied to **all outbound replies** (tool summaries, block
1447
+ streaming, final replies) across channels unless already present.
1448
+
1449
+ If `messages.responsePrefix` is unset, no prefix is applied by default. WhatsApp self-chat
1450
+ replies are the exception: they default to `[{identity.name}]` when set, otherwise
1451
+ `[moltbot]`, so same-phone conversations stay legible.
1452
+ Set it to `"auto"` to derive `[{identity.name}]` for the routed agent (when set).
1453
+
1454
+ #### Template variables
1455
+
1456
+ The `responsePrefix` string can include template variables that resolve dynamically:
1457
+
1458
+ | Variable | Description | Example |
1459
+ |----------|-------------|---------|
1460
+ | `{model}` | Short model name | `claude-opus-4-5`, `gpt-4o` |
1461
+ | `{modelFull}` | Full model identifier | `anthropic/claude-opus-4-5` |
1462
+ | `{provider}` | Provider name | `anthropic`, `openai` |
1463
+ | `{thinkingLevel}` | Current thinking level | `high`, `low`, `off` |
1464
+ | `{identity.name}` | Agent identity name | (same as `"auto"` mode) |
1465
+
1466
+ Variables are case-insensitive (`{MODEL}` = `{model}`). `{think}` is an alias for `{thinkingLevel}`.
1467
+ Unresolved variables remain as literal text.
1468
+
1469
+ ```json5
1470
+ {
1471
+ messages: {
1472
+ responsePrefix: "[{model} | think:{thinkingLevel}]"
1473
+ }
1474
+ }
1475
+ ```
1476
+
1477
+ Example output: `[claude-opus-4-5 | think:high] Here's my response...`
1478
+
1479
+ WhatsApp inbound prefix is configured via `channels.whatsapp.messagePrefix` (deprecated:
1480
+ `messages.messagePrefix`). Default stays **unchanged**: `"[moltbot]"` when
1481
+ `channels.whatsapp.allowFrom` is empty, otherwise `""` (no prefix). When using
1482
+ `"[moltbot]"`, Moltbot will instead use `[{identity.name}]` when the routed
1483
+ agent has `identity.name` set.
1484
+
1485
+ `ackReaction` sends a best-effort emoji reaction to acknowledge inbound messages
1486
+ on channels that support reactions (Slack/Discord/Telegram/Google Chat). Defaults to the
1487
+ active agent’s `identity.emoji` when set, otherwise `"👀"`. Set it to `""` to disable.
1488
+
1489
+ `ackReactionScope` controls when reactions fire:
1490
+ - `group-mentions` (default): only when a group/room requires mentions **and** the bot was mentioned
1491
+ - `group-all`: all group/room messages
1492
+ - `direct`: direct messages only
1493
+ - `all`: all messages
1494
+
1495
+ `removeAckAfterReply` removes the bot’s ack reaction after a reply is sent
1496
+ (Slack/Discord/Telegram/Google Chat only). Default: `false`.
1497
+
1498
+ #### `messages.tts`
1499
+
1500
+ Enable text-to-speech for outbound replies. When on, Moltbot generates audio
1501
+ using ElevenLabs or OpenAI and attaches it to responses. Telegram uses Opus
1502
+ voice notes; other channels send MP3 audio.
1503
+
1504
+ ```json5
1505
+ {
1506
+ messages: {
1507
+ tts: {
1508
+ auto: "always", // off | always | inbound | tagged
1509
+ mode: "final", // final | all (include tool/block replies)
1510
+ provider: "elevenlabs",
1511
+ summaryModel: "openai/gpt-4.1-mini",
1512
+ modelOverrides: {
1513
+ enabled: true
1514
+ },
1515
+ maxTextLength: 4000,
1516
+ timeoutMs: 30000,
1517
+ prefsPath: "~/.clawdbot/settings/tts.json",
1518
+ elevenlabs: {
1519
+ apiKey: "elevenlabs_api_key",
1520
+ baseUrl: "https://api.elevenlabs.io",
1521
+ voiceId: "voice_id",
1522
+ modelId: "eleven_multilingual_v2",
1523
+ seed: 42,
1524
+ applyTextNormalization: "auto",
1525
+ languageCode: "en",
1526
+ voiceSettings: {
1527
+ stability: 0.5,
1528
+ similarityBoost: 0.75,
1529
+ style: 0.0,
1530
+ useSpeakerBoost: true,
1531
+ speed: 1.0
1532
+ }
1533
+ },
1534
+ openai: {
1535
+ apiKey: "openai_api_key",
1536
+ model: "gpt-4o-mini-tts",
1537
+ voice: "alloy"
1538
+ }
1539
+ }
1540
+ }
1541
+ }
1542
+ ```
1543
+
1544
+ Notes:
1545
+ - `messages.tts.auto` controls auto‑TTS (`off`, `always`, `inbound`, `tagged`).
1546
+ - `/tts off|always|inbound|tagged` sets the per‑session auto mode (overrides config).
1547
+ - `messages.tts.enabled` is legacy; doctor migrates it to `messages.tts.auto`.
1548
+ - `prefsPath` stores local overrides (provider/limit/summarize).
1549
+ - `maxTextLength` is a hard cap for TTS input; summaries are truncated to fit.
1550
+ - `summaryModel` overrides `agents.defaults.model.primary` for auto-summary.
1551
+ - Accepts `provider/model` or an alias from `agents.defaults.models`.
1552
+ - `modelOverrides` enables model-driven overrides like `[[tts:...]]` tags (on by default).
1553
+ - `/tts limit` and `/tts summary` control per-user summarization settings.
1554
+ - `apiKey` values fall back to `ELEVENLABS_API_KEY`/`XI_API_KEY` and `OPENAI_API_KEY`.
1555
+ - `elevenlabs.baseUrl` overrides the ElevenLabs API base URL.
1556
+ - `elevenlabs.voiceSettings` supports `stability`/`similarityBoost`/`style` (0..1),
1557
+ `useSpeakerBoost`, and `speed` (0.5..2.0).
1558
+
1559
+ ### `talk`
1560
+
1561
+ Defaults for Talk mode (macOS/iOS/Android). Voice IDs fall back to `ELEVENLABS_VOICE_ID` or `SAG_VOICE_ID` when unset.
1562
+ `apiKey` falls back to `ELEVENLABS_API_KEY` (or the gateway’s shell profile) when unset.
1563
+ `voiceAliases` lets Talk directives use friendly names (e.g. `"voice":"Clawd"`).
1564
+
1565
+ ```json5
1566
+ {
1567
+ talk: {
1568
+ voiceId: "elevenlabs_voice_id",
1569
+ voiceAliases: {
1570
+ Clawd: "EXAVITQu4vr4xnSDxMaL",
1571
+ Roger: "CwhRBWXzGAHq8TQ4Fs17"
1572
+ },
1573
+ modelId: "eleven_v3",
1574
+ outputFormat: "mp3_44100_128",
1575
+ apiKey: "elevenlabs_api_key",
1576
+ interruptOnSpeech: true
1577
+ }
1578
+ }
1579
+ ```
1580
+
1581
+ ### `agents.defaults`
1582
+
1583
+ Controls the embedded agent runtime (model/thinking/verbose/timeouts).
1584
+ `agents.defaults.models` defines the configured model catalog (and acts as the allowlist for `/model`).
1585
+ `agents.defaults.model.primary` sets the default model; `agents.defaults.model.fallbacks` are global failovers.
1586
+ `agents.defaults.imageModel` is optional and is **only used if the primary model lacks image input**.
1587
+ Each `agents.defaults.models` entry can include:
1588
+ - `alias` (optional model shortcut, e.g. `/opus`).
1589
+ - `params` (optional provider-specific API params passed through to the model request).
1590
+
1591
+ `params` is also applied to streaming runs (embedded agent + compaction). Supported keys today: `temperature`, `maxTokens`. These merge with call-time options; caller-supplied values win. `temperature` is an advanced knob—leave unset unless you know the model’s defaults and need a change.
1592
+
1593
+ Example:
1594
+
1595
+ ```json5
1596
+ {
1597
+ agents: {
1598
+ defaults: {
1599
+ models: {
1600
+ "anthropic/claude-sonnet-4-5-20250929": {
1601
+ params: { temperature: 0.6 }
1602
+ },
1603
+ "openai/gpt-5.2": {
1604
+ params: { maxTokens: 8192 }
1605
+ }
1606
+ }
1607
+ }
1608
+ }
1609
+ }
1610
+ ```
1611
+
1612
+ Z.AI GLM-4.x models automatically enable thinking mode unless you:
1613
+ - set `--thinking off`, or
1614
+ - define `agents.defaults.models["zai/<model>"].params.thinking` yourself.
1615
+
1616
+ Moltbot also ships a few built-in alias shorthands. Defaults only apply when the model
1617
+ is already present in `agents.defaults.models`:
1618
+
1619
+ - `opus` -> `anthropic/claude-opus-4-5`
1620
+ - `sonnet` -> `anthropic/claude-sonnet-4-5`
1621
+ - `gpt` -> `openai/gpt-5.2`
1622
+ - `gpt-mini` -> `openai/gpt-5-mini`
1623
+ - `gemini` -> `google/gemini-3-pro-preview`
1624
+ - `gemini-flash` -> `google/gemini-3-flash-preview`
1625
+
1626
+ If you configure the same alias name (case-insensitive) yourself, your value wins (defaults never override).
1627
+
1628
+ Example: Opus 4.5 primary with MiniMax M2.1 fallback (hosted MiniMax):
1629
+
1630
+ ```json5
1631
+ {
1632
+ agents: {
1633
+ defaults: {
1634
+ models: {
1635
+ "anthropic/claude-opus-4-5": { alias: "opus" },
1636
+ "minimax/MiniMax-M2.1": { alias: "minimax" }
1637
+ },
1638
+ model: {
1639
+ primary: "anthropic/claude-opus-4-5",
1640
+ fallbacks: ["minimax/MiniMax-M2.1"]
1641
+ }
1642
+ }
1643
+ }
1644
+ }
1645
+ ```
1646
+
1647
+ MiniMax auth: set `MINIMAX_API_KEY` (env) or configure `models.providers.minimax`.
1648
+
1649
+ #### `agents.defaults.cliBackends` (CLI fallback)
1650
+
1651
+ Optional CLI backends for text-only fallback runs (no tool calls). These are useful as a
1652
+ backup path when API providers fail. Image pass-through is supported when you configure
1653
+ an `imageArg` that accepts file paths.
1654
+
1655
+ Notes:
1656
+ - CLI backends are **text-first**; tools are always disabled.
1657
+ - Sessions are supported when `sessionArg` is set; session ids are persisted per backend.
1658
+ - For `claude-cli`, defaults are wired in. Override the command path if PATH is minimal
1659
+ (launchd/systemd).
1660
+
1661
+ Example:
1662
+
1663
+ ```json5
1664
+ {
1665
+ agents: {
1666
+ defaults: {
1667
+ cliBackends: {
1668
+ "claude-cli": {
1669
+ command: "/opt/homebrew/bin/claude"
1670
+ },
1671
+ "my-cli": {
1672
+ command: "my-cli",
1673
+ args: ["--json"],
1674
+ output: "json",
1675
+ modelArg: "--model",
1676
+ sessionArg: "--session",
1677
+ sessionMode: "existing",
1678
+ systemPromptArg: "--system",
1679
+ systemPromptWhen: "first",
1680
+ imageArg: "--image",
1681
+ imageMode: "repeat"
1682
+ }
1683
+ }
1684
+ }
1685
+ }
1686
+ }
1687
+ ```
1688
+
1689
+ ```json5
1690
+ {
1691
+ agents: {
1692
+ defaults: {
1693
+ models: {
1694
+ "anthropic/claude-opus-4-5": { alias: "Opus" },
1695
+ "anthropic/claude-sonnet-4-1": { alias: "Sonnet" },
1696
+ "openrouter/deepseek/deepseek-r1:free": {},
1697
+ "zai/glm-4.7": {
1698
+ alias: "GLM",
1699
+ params: {
1700
+ thinking: {
1701
+ type: "enabled",
1702
+ clear_thinking: false
1703
+ }
1704
+ }
1705
+ }
1706
+ },
1707
+ model: {
1708
+ primary: "anthropic/claude-opus-4-5",
1709
+ fallbacks: [
1710
+ "openrouter/deepseek/deepseek-r1:free",
1711
+ "openrouter/meta-llama/llama-3.3-70b-instruct:free"
1712
+ ]
1713
+ },
1714
+ imageModel: {
1715
+ primary: "openrouter/qwen/qwen-2.5-vl-72b-instruct:free",
1716
+ fallbacks: [
1717
+ "openrouter/google/gemini-2.0-flash-vision:free"
1718
+ ]
1719
+ },
1720
+ thinkingDefault: "low",
1721
+ verboseDefault: "off",
1722
+ elevatedDefault: "on",
1723
+ timeoutSeconds: 600,
1724
+ mediaMaxMb: 5,
1725
+ heartbeat: {
1726
+ every: "30m",
1727
+ target: "last"
1728
+ },
1729
+ maxConcurrent: 3,
1730
+ subagents: {
1731
+ model: "minimax/MiniMax-M2.1",
1732
+ maxConcurrent: 1,
1733
+ archiveAfterMinutes: 60
1734
+ },
1735
+ exec: {
1736
+ backgroundMs: 10000,
1737
+ timeoutSec: 1800,
1738
+ cleanupMs: 1800000
1739
+ },
1740
+ contextTokens: 200000
1741
+ }
1742
+ }
1743
+ }
1744
+ ```
1745
+
1746
+ #### `agents.defaults.contextPruning` (tool-result pruning)
1747
+
1748
+ `agents.defaults.contextPruning` prunes **old tool results** from the in-memory context right before a request is sent to the LLM.
1749
+ It does **not** modify the session history on disk (`*.jsonl` remains complete).
1750
+
1751
+ This is intended to reduce token usage for chatty agents that accumulate large tool outputs over time.
1752
+
1753
+ High level:
1754
+ - Never touches user/assistant messages.
1755
+ - Protects the last `keepLastAssistants` assistant messages (no tool results after that point are pruned).
1756
+ - Protects the bootstrap prefix (nothing before the first user message is pruned).
1757
+ - Modes:
1758
+ - `adaptive`: soft-trims oversized tool results (keep head/tail) when the estimated context ratio crosses `softTrimRatio`.
1759
+ Then hard-clears the oldest eligible tool results when the estimated context ratio crosses `hardClearRatio` **and**
1760
+ there’s enough prunable tool-result bulk (`minPrunableToolChars`).
1761
+ - `aggressive`: always replaces eligible tool results before the cutoff with the `hardClear.placeholder` (no ratio checks).
1762
+
1763
+ Soft vs hard pruning (what changes in the context sent to the LLM):
1764
+ - **Soft-trim**: only for *oversized* tool results. Keeps the beginning + end and inserts `...` in the middle.
1765
+ - Before: `toolResult("…very long output…")`
1766
+ - After: `toolResult("HEAD…\n...\n…TAIL\n\n[Tool result trimmed: …]")`
1767
+ - **Hard-clear**: replaces the entire tool result with the placeholder.
1768
+ - Before: `toolResult("…very long output…")`
1769
+ - After: `toolResult("[Old tool result content cleared]")`
1770
+
1771
+ Notes / current limitations:
1772
+ - Tool results containing **image blocks are skipped** (never trimmed/cleared) right now.
1773
+ - The estimated “context ratio” is based on **characters** (approximate), not exact tokens.
1774
+ - If the session doesn’t contain at least `keepLastAssistants` assistant messages yet, pruning is skipped.
1775
+ - In `aggressive` mode, `hardClear.enabled` is ignored (eligible tool results are always replaced with `hardClear.placeholder`).
1776
+
1777
+ Default (adaptive):
1778
+ ```json5
1779
+ {
1780
+ agents: { defaults: { contextPruning: { mode: "adaptive" } } }
1781
+ }
1782
+ ```
1783
+
1784
+ To disable:
1785
+ ```json5
1786
+ {
1787
+ agents: { defaults: { contextPruning: { mode: "off" } } }
1788
+ }
1789
+ ```
1790
+
1791
+ Defaults (when `mode` is `"adaptive"` or `"aggressive"`):
1792
+ - `keepLastAssistants`: `3`
1793
+ - `softTrimRatio`: `0.3` (adaptive only)
1794
+ - `hardClearRatio`: `0.5` (adaptive only)
1795
+ - `minPrunableToolChars`: `50000` (adaptive only)
1796
+ - `softTrim`: `{ maxChars: 4000, headChars: 1500, tailChars: 1500 }` (adaptive only)
1797
+ - `hardClear`: `{ enabled: true, placeholder: "[Old tool result content cleared]" }`
1798
+
1799
+ Example (aggressive, minimal):
1800
+ ```json5
1801
+ {
1802
+ agents: { defaults: { contextPruning: { mode: "aggressive" } } }
1803
+ }
1804
+ ```
1805
+
1806
+ Example (adaptive tuned):
1807
+ ```json5
1808
+ {
1809
+ agents: {
1810
+ defaults: {
1811
+ contextPruning: {
1812
+ mode: "adaptive",
1813
+ keepLastAssistants: 3,
1814
+ softTrimRatio: 0.3,
1815
+ hardClearRatio: 0.5,
1816
+ minPrunableToolChars: 50000,
1817
+ softTrim: { maxChars: 4000, headChars: 1500, tailChars: 1500 },
1818
+ hardClear: { enabled: true, placeholder: "[Old tool result content cleared]" },
1819
+ // Optional: restrict pruning to specific tools (deny wins; supports "*" wildcards)
1820
+ tools: { deny: ["browser", "canvas"] },
1821
+ }
1822
+ }
1823
+ }
1824
+ }
1825
+ ```
1826
+
1827
+ See [/concepts/session-pruning](/concepts/session-pruning) for behavior details.
1828
+
1829
+ #### `agents.defaults.compaction` (reserve headroom + memory flush)
1830
+
1831
+ `agents.defaults.compaction.mode` selects the compaction summarization strategy. Defaults to `default`; set `safeguard` to enable chunked summarization for very long histories. See [/concepts/compaction](/concepts/compaction).
1832
+
1833
+ `agents.defaults.compaction.reserveTokensFloor` enforces a minimum `reserveTokens`
1834
+ value for Pi compaction (default: `20000`). Set it to `0` to disable the floor.
1835
+
1836
+ `agents.defaults.compaction.memoryFlush` runs a **silent** agentic turn before
1837
+ auto-compaction, instructing the model to store durable memories on disk (e.g.
1838
+ `memory/YYYY-MM-DD.md`). It triggers when the session token estimate crosses a
1839
+ soft threshold below the compaction limit.
1840
+
1841
+ Legacy defaults:
1842
+ - `memoryFlush.enabled`: `true`
1843
+ - `memoryFlush.softThresholdTokens`: `4000`
1844
+ - `memoryFlush.prompt` / `memoryFlush.systemPrompt`: built-in defaults with `NO_REPLY`
1845
+ - Note: memory flush is skipped when the session workspace is read-only
1846
+ (`agents.defaults.sandbox.workspaceAccess: "ro"` or `"none"`).
1847
+
1848
+ Example (tuned):
1849
+ ```json5
1850
+ {
1851
+ agents: {
1852
+ defaults: {
1853
+ compaction: {
1854
+ mode: "safeguard",
1855
+ reserveTokensFloor: 24000,
1856
+ memoryFlush: {
1857
+ enabled: true,
1858
+ softThresholdTokens: 6000,
1859
+ systemPrompt: "Session nearing compaction. Store durable memories now.",
1860
+ prompt: "Write any lasting notes to memory/YYYY-MM-DD.md; reply with NO_REPLY if nothing to store."
1861
+ }
1862
+ }
1863
+ }
1864
+ }
1865
+ }
1866
+ ```
1867
+
1868
+ Block streaming:
1869
+ - `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default off).
1870
+ - Channel overrides: `*.blockStreaming` (and per-account variants) to force block streaming on/off.
1871
+ Non-Telegram channels require an explicit `*.blockStreaming: true` to enable block replies.
1872
+ - `agents.defaults.blockStreamingBreak`: `"text_end"` or `"message_end"` (default: text_end).
1873
+ - `agents.defaults.blockStreamingChunk`: soft chunking for streamed blocks. Defaults to
1874
+ 800–1200 chars, prefers paragraph breaks (`\n\n`), then newlines, then sentences.
1875
+ Example:
1876
+ ```json5
1877
+ {
1878
+ agents: { defaults: { blockStreamingChunk: { minChars: 800, maxChars: 1200 } } }
1879
+ }
1880
+ ```
1881
+ - `agents.defaults.blockStreamingCoalesce`: merge streamed blocks before sending.
1882
+ Defaults to `{ idleMs: 1000 }` and inherits `minChars` from `blockStreamingChunk`
1883
+ with `maxChars` capped to the channel text limit. Signal/Slack/Discord/Google Chat default
1884
+ to `minChars: 1500` unless overridden.
1885
+ Channel overrides: `channels.whatsapp.blockStreamingCoalesce`, `channels.telegram.blockStreamingCoalesce`,
1886
+ `channels.discord.blockStreamingCoalesce`, `channels.slack.blockStreamingCoalesce`, `channels.mattermost.blockStreamingCoalesce`,
1887
+ `channels.signal.blockStreamingCoalesce`, `channels.imessage.blockStreamingCoalesce`, `channels.msteams.blockStreamingCoalesce`,
1888
+ `channels.googlechat.blockStreamingCoalesce`
1889
+ (and per-account variants).
1890
+ - `agents.defaults.humanDelay`: randomized pause between **block replies** after the first.
1891
+ Modes: `off` (default), `natural` (800–2500ms), `custom` (use `minMs`/`maxMs`).
1892
+ Per-agent override: `agents.list[].humanDelay`.
1893
+ Example:
1894
+ ```json5
1895
+ {
1896
+ agents: { defaults: { humanDelay: { mode: "natural" } } }
1897
+ }
1898
+ ```
1899
+ See [/concepts/streaming](/concepts/streaming) for behavior + chunking details.
1900
+
1901
+ Typing indicators:
1902
+ - `agents.defaults.typingMode`: `"never" | "instant" | "thinking" | "message"`. Defaults to
1903
+ `instant` for direct chats / mentions and `message` for unmentioned group chats.
1904
+ - `session.typingMode`: per-session override for the mode.
1905
+ - `agents.defaults.typingIntervalSeconds`: how often the typing signal is refreshed (default: 6s).
1906
+ - `session.typingIntervalSeconds`: per-session override for the refresh interval.
1907
+ See [/concepts/typing-indicators](/concepts/typing-indicators) for behavior details.
1908
+
1909
+ `agents.defaults.model.primary` should be set as `provider/model` (e.g. `anthropic/claude-opus-4-5`).
1910
+ Aliases come from `agents.defaults.models.*.alias` (e.g. `Opus`).
1911
+ If you omit the provider, Moltbot currently assumes `anthropic` as a temporary
1912
+ deprecation fallback.
1913
+ Z.AI models are available as `zai/<model>` (e.g. `zai/glm-4.7`) and require
1914
+ `ZAI_API_KEY` (or legacy `Z_AI_API_KEY`) in the environment.
1915
+
1916
+ `agents.defaults.heartbeat` configures periodic heartbeat runs:
1917
+ - `every`: duration string (`ms`, `s`, `m`, `h`); default unit minutes. Default:
1918
+ `30m`. Set `0m` to disable.
1919
+ - `model`: optional override model for heartbeat runs (`provider/model`).
1920
+ - `includeReasoning`: when `true`, heartbeats will also deliver the separate `Reasoning:` message when available (same shape as `/reasoning on`). Default: `false`.
1921
+ - `session`: optional session key to control which session the heartbeat runs in. Default: `main`.
1922
+ - `to`: optional recipient override (channel-specific id, e.g. E.164 for WhatsApp, chat id for Telegram).
1923
+ - `target`: optional delivery channel (`last`, `whatsapp`, `telegram`, `discord`, `slack`, `msteams`, `signal`, `imessage`, `none`). Default: `last`.
1924
+ - `prompt`: optional override for the heartbeat body (default: `Read HEARTBEAT.md if it exists (workspace context). Follow it strictly. Do not infer or repeat old tasks from prior chats. If nothing needs attention, reply HEARTBEAT_OK.`). Overrides are sent verbatim; include a `Read HEARTBEAT.md` line if you still want the file read.
1925
+ - `ackMaxChars`: max chars allowed after `HEARTBEAT_OK` before delivery (default: 300).
1926
+
1927
+ Per-agent heartbeats:
1928
+ - Set `agents.list[].heartbeat` to enable or override heartbeat settings for a specific agent.
1929
+ - If any agent entry defines `heartbeat`, **only those agents** run heartbeats; defaults
1930
+ become the shared baseline for those agents.
1931
+
1932
+ Heartbeats run full agent turns. Shorter intervals burn more tokens; be mindful
1933
+ of `every`, keep `HEARTBEAT.md` tiny, and/or choose a cheaper `model`.
1934
+
1935
+ `tools.exec` configures background exec defaults:
1936
+ - `backgroundMs`: time before auto-background (ms, default 10000)
1937
+ - `timeoutSec`: auto-kill after this runtime (seconds, default 1800)
1938
+ - `cleanupMs`: how long to keep finished sessions in memory (ms, default 1800000)
1939
+ - `notifyOnExit`: enqueue a system event + request heartbeat when backgrounded exec exits (default true)
1940
+ - `applyPatch.enabled`: enable experimental `apply_patch` (OpenAI/OpenAI Codex only; default false)
1941
+ - `applyPatch.allowModels`: optional allowlist of model ids (e.g. `gpt-5.2` or `openai/gpt-5.2`)
1942
+ Note: `applyPatch` is only under `tools.exec`.
1943
+
1944
+ `tools.web` configures web search + fetch tools:
1945
+ - `tools.web.search.enabled` (default: true when key is present)
1946
+ - `tools.web.search.apiKey` (recommended: set via `moltbot configure --section web`, or use `BRAVE_API_KEY` env var)
1947
+ - `tools.web.search.maxResults` (1–10, default 5)
1948
+ - `tools.web.search.timeoutSeconds` (default 30)
1949
+ - `tools.web.search.cacheTtlMinutes` (default 15)
1950
+ - `tools.web.fetch.enabled` (default true)
1951
+ - `tools.web.fetch.maxChars` (default 50000)
1952
+ - `tools.web.fetch.timeoutSeconds` (default 30)
1953
+ - `tools.web.fetch.cacheTtlMinutes` (default 15)
1954
+ - `tools.web.fetch.userAgent` (optional override)
1955
+ - `tools.web.fetch.readability` (default true; disable to use basic HTML cleanup only)
1956
+ - `tools.web.fetch.firecrawl.enabled` (default true when an API key is set)
1957
+ - `tools.web.fetch.firecrawl.apiKey` (optional; defaults to `FIRECRAWL_API_KEY`)
1958
+ - `tools.web.fetch.firecrawl.baseUrl` (default https://api.firecrawl.dev)
1959
+ - `tools.web.fetch.firecrawl.onlyMainContent` (default true)
1960
+ - `tools.web.fetch.firecrawl.maxAgeMs` (optional)
1961
+ - `tools.web.fetch.firecrawl.timeoutSeconds` (optional)
1962
+
1963
+ `tools.media` configures inbound media understanding (image/audio/video):
1964
+ - `tools.media.models`: shared model list (capability-tagged; used after per-cap lists).
1965
+ - `tools.media.concurrency`: max concurrent capability runs (default 2).
1966
+ - `tools.media.image` / `tools.media.audio` / `tools.media.video`:
1967
+ - `enabled`: opt-out switch (default true when models are configured).
1968
+ - `prompt`: optional prompt override (image/video append a `maxChars` hint automatically).
1969
+ - `maxChars`: max output characters (default 500 for image/video; unset for audio).
1970
+ - `maxBytes`: max media size to send (defaults: image 10MB, audio 20MB, video 50MB).
1971
+ - `timeoutSeconds`: request timeout (defaults: image 60s, audio 60s, video 120s).
1972
+ - `language`: optional audio hint.
1973
+ - `attachments`: attachment policy (`mode`, `maxAttachments`, `prefer`).
1974
+ - `scope`: optional gating (first match wins) with `match.channel`, `match.chatType`, or `match.keyPrefix`.
1975
+ - `models`: ordered list of model entries; failures or oversize media fall back to the next entry.
1976
+ - Each `models[]` entry:
1977
+ - Provider entry (`type: "provider"` or omitted):
1978
+ - `provider`: API provider id (`openai`, `anthropic`, `google`/`gemini`, `groq`, etc).
1979
+ - `model`: model id override (required for image; defaults to `gpt-4o-mini-transcribe`/`whisper-large-v3-turbo` for audio providers, and `gemini-3-flash-preview` for video).
1980
+ - `profile` / `preferredProfile`: auth profile selection.
1981
+ - CLI entry (`type: "cli"`):
1982
+ - `command`: executable to run.
1983
+ - `args`: templated args (supports `{{MediaPath}}`, `{{Prompt}}`, `{{MaxChars}}`, etc).
1984
+ - `capabilities`: optional list (`image`, `audio`, `video`) to gate a shared entry. Defaults when omitted: `openai`/`anthropic`/`minimax` → image, `google` → image+audio+video, `groq` → audio.
1985
+ - `prompt`, `maxChars`, `maxBytes`, `timeoutSeconds`, `language` can be overridden per entry.
1986
+
1987
+ If no models are configured (or `enabled: false`), understanding is skipped; the model still receives the original attachments.
1988
+
1989
+ Provider auth follows the standard model auth order (auth profiles, env vars like `OPENAI_API_KEY`/`GROQ_API_KEY`/`GEMINI_API_KEY`, or `models.providers.*.apiKey`).
1990
+
1991
+ Example:
1992
+ ```json5
1993
+ {
1994
+ tools: {
1995
+ media: {
1996
+ audio: {
1997
+ enabled: true,
1998
+ maxBytes: 20971520,
1999
+ scope: {
2000
+ default: "deny",
2001
+ rules: [{ action: "allow", match: { chatType: "direct" } }]
2002
+ },
2003
+ models: [
2004
+ { provider: "openai", model: "gpt-4o-mini-transcribe" },
2005
+ { type: "cli", command: "whisper", args: ["--model", "base", "{{MediaPath}}"] }
2006
+ ]
2007
+ },
2008
+ video: {
2009
+ enabled: true,
2010
+ maxBytes: 52428800,
2011
+ models: [{ provider: "google", model: "gemini-3-flash-preview" }]
2012
+ }
2013
+ }
2014
+ }
2015
+ }
2016
+ ```
2017
+
2018
+ `agents.defaults.subagents` configures sub-agent defaults:
2019
+ - `model`: default model for spawned sub-agents (string or `{ primary, fallbacks }`). If omitted, sub-agents inherit the caller’s model unless overridden per agent or per call.
2020
+ - `maxConcurrent`: max concurrent sub-agent runs (default 1)
2021
+ - `archiveAfterMinutes`: auto-archive sub-agent sessions after N minutes (default 60; set `0` to disable)
2022
+ - Per-subagent tool policy: `tools.subagents.tools.allow` / `tools.subagents.tools.deny` (deny wins)
2023
+
2024
+ `tools.profile` sets a **base tool allowlist** before `tools.allow`/`tools.deny`:
2025
+ - `minimal`: `session_status` only
2026
+ - `coding`: `group:fs`, `group:runtime`, `group:sessions`, `group:memory`, `image`
2027
+ - `messaging`: `group:messaging`, `sessions_list`, `sessions_history`, `sessions_send`, `session_status`
2028
+ - `full`: no restriction (same as unset)
2029
+
2030
+ Per-agent override: `agents.list[].tools.profile`.
2031
+
2032
+ Example (messaging-only by default, allow Slack + Discord tools too):
2033
+ ```json5
2034
+ {
2035
+ tools: {
2036
+ profile: "messaging",
2037
+ allow: ["slack", "discord"]
2038
+ }
2039
+ }
2040
+ ```
2041
+
2042
+ Example (coding profile, but deny exec/process everywhere):
2043
+ ```json5
2044
+ {
2045
+ tools: {
2046
+ profile: "coding",
2047
+ deny: ["group:runtime"]
2048
+ }
2049
+ }
2050
+ ```
2051
+
2052
+ `tools.byProvider` lets you **further restrict** tools for specific providers (or a single `provider/model`).
2053
+ Per-agent override: `agents.list[].tools.byProvider`.
2054
+
2055
+ Order: base profile → provider profile → allow/deny policies.
2056
+ Provider keys accept either `provider` (e.g. `google-antigravity`) or `provider/model`
2057
+ (e.g. `openai/gpt-5.2`).
2058
+
2059
+ Example (keep global coding profile, but minimal tools for Google Antigravity):
2060
+ ```json5
2061
+ {
2062
+ tools: {
2063
+ profile: "coding",
2064
+ byProvider: {
2065
+ "google-antigravity": { profile: "minimal" }
2066
+ }
2067
+ }
2068
+ }
2069
+ ```
2070
+
2071
+ Example (provider/model-specific allowlist):
2072
+ ```json5
2073
+ {
2074
+ tools: {
2075
+ allow: ["group:fs", "group:runtime", "sessions_list"],
2076
+ byProvider: {
2077
+ "openai/gpt-5.2": { allow: ["group:fs", "sessions_list"] }
2078
+ }
2079
+ }
2080
+ }
2081
+ ```
2082
+
2083
+ `tools.allow` / `tools.deny` configure a global tool allow/deny policy (deny wins).
2084
+ Matching is case-insensitive and supports `*` wildcards (`"*"` means all tools).
2085
+ This is applied even when the Docker sandbox is **off**.
2086
+
2087
+ Example (disable browser/canvas everywhere):
2088
+ ```json5
2089
+ {
2090
+ tools: { deny: ["browser", "canvas"] }
2091
+ }
2092
+ ```
2093
+
2094
+ Tool groups (shorthands) work in **global** and **per-agent** tool policies:
2095
+ - `group:runtime`: `exec`, `bash`, `process`
2096
+ - `group:fs`: `read`, `write`, `edit`, `apply_patch`
2097
+ - `group:sessions`: `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `session_status`
2098
+ - `group:memory`: `memory_search`, `memory_get`
2099
+ - `group:web`: `web_search`, `web_fetch`
2100
+ - `group:ui`: `browser`, `canvas`
2101
+ - `group:automation`: `cron`, `gateway`
2102
+ - `group:messaging`: `message`
2103
+ - `group:nodes`: `nodes`
2104
+ - `group:moltbot`: all built-in Moltbot tools (excludes provider plugins)
2105
+
2106
+ `tools.elevated` controls elevated (host) exec access:
2107
+ - `enabled`: allow elevated mode (default true)
2108
+ - `allowFrom`: per-channel allowlists (empty = disabled)
2109
+ - `whatsapp`: E.164 numbers
2110
+ - `telegram`: chat ids or usernames
2111
+ - `discord`: user ids or usernames (falls back to `channels.discord.dm.allowFrom` if omitted)
2112
+ - `signal`: E.164 numbers
2113
+ - `imessage`: handles/chat ids
2114
+ - `webchat`: session ids or usernames
2115
+
2116
+ Example:
2117
+ ```json5
2118
+ {
2119
+ tools: {
2120
+ elevated: {
2121
+ enabled: true,
2122
+ allowFrom: {
2123
+ whatsapp: ["+15555550123"],
2124
+ discord: ["steipete", "1234567890123"]
2125
+ }
2126
+ }
2127
+ }
2128
+ }
2129
+ ```
2130
+
2131
+ Per-agent override (further restrict):
2132
+ ```json5
2133
+ {
2134
+ agents: {
2135
+ list: [
2136
+ {
2137
+ id: "family",
2138
+ tools: {
2139
+ elevated: { enabled: false }
2140
+ }
2141
+ }
2142
+ ]
2143
+ }
2144
+ }
2145
+ ```
2146
+
2147
+ Notes:
2148
+ - `tools.elevated` is the global baseline. `agents.list[].tools.elevated` can only further restrict (both must allow).
2149
+ - `/elevated on|off|ask|full` stores state per session key; inline directives apply to a single message.
2150
+ - Elevated `exec` runs on the host and bypasses sandboxing.
2151
+ - Tool policy still applies; if `exec` is denied, elevated cannot be used.
2152
+
2153
+ `agents.defaults.maxConcurrent` sets the maximum number of embedded agent runs that can
2154
+ execute in parallel across sessions. Each session is still serialized (one run
2155
+ per session key at a time). Default: 1.
2156
+
2157
+ ### `agents.defaults.sandbox`
2158
+
2159
+ Optional **Docker sandboxing** for the embedded agent. Intended for non-main
2160
+ sessions so they cannot access your host system.
2161
+
2162
+ Details: [Sandboxing](/gateway/sandboxing)
2163
+
2164
+ Defaults (if enabled):
2165
+ - scope: `"agent"` (one container + workspace per agent)
2166
+ - Debian bookworm-slim based image
2167
+ - agent workspace access: `workspaceAccess: "none"` (default)
2168
+ - `"none"`: use a per-scope sandbox workspace under `~/.clawdbot/sandboxes`
2169
+ - `"ro"`: keep the sandbox workspace at `/workspace`, and mount the agent workspace read-only at `/agent` (disables `write`/`edit`/`apply_patch`)
2170
+ - `"rw"`: mount the agent workspace read/write at `/workspace`
2171
+ - auto-prune: idle > 24h OR age > 7d
2172
+ - tool policy: allow only `exec`, `process`, `read`, `write`, `edit`, `apply_patch`, `sessions_list`, `sessions_history`, `sessions_send`, `sessions_spawn`, `session_status` (deny wins)
2173
+ - configure via `tools.sandbox.tools`, override per-agent via `agents.list[].tools.sandbox.tools`
2174
+ - tool group shorthands supported in sandbox policy: `group:runtime`, `group:fs`, `group:sessions`, `group:memory` (see [Sandbox vs Tool Policy vs Elevated](/gateway/sandbox-vs-tool-policy-vs-elevated#tool-groups-shorthands))
2175
+ - optional sandboxed browser (Chromium + CDP, noVNC observer)
2176
+ - hardening knobs: `network`, `user`, `pidsLimit`, `memory`, `cpus`, `ulimits`, `seccompProfile`, `apparmorProfile`
2177
+
2178
+ Warning: `scope: "shared"` means a shared container and shared workspace. No
2179
+ cross-session isolation. Use `scope: "session"` for per-session isolation.
2180
+
2181
+ Legacy: `perSession` is still supported (`true` → `scope: "session"`,
2182
+ `false` → `scope: "shared"`).
2183
+
2184
+ `setupCommand` runs **once** after the container is created (inside the container via `sh -lc`).
2185
+ For package installs, ensure network egress, a writable root FS, and a root user.
2186
+
2187
+ ```json5
2188
+ {
2189
+ agents: {
2190
+ defaults: {
2191
+ sandbox: {
2192
+ mode: "non-main", // off | non-main | all
2193
+ scope: "agent", // session | agent | shared (agent is default)
2194
+ workspaceAccess: "none", // none | ro | rw
2195
+ workspaceRoot: "~/.clawdbot/sandboxes",
2196
+ docker: {
2197
+ image: "moltbot-sandbox:bookworm-slim",
2198
+ containerPrefix: "moltbot-sbx-",
2199
+ workdir: "/workspace",
2200
+ readOnlyRoot: true,
2201
+ tmpfs: ["/tmp", "/var/tmp", "/run"],
2202
+ network: "none",
2203
+ user: "1000:1000",
2204
+ capDrop: ["ALL"],
2205
+ env: { LANG: "C.UTF-8" },
2206
+ setupCommand: "apt-get update && apt-get install -y git curl jq",
2207
+ // Per-agent override (multi-agent): agents.list[].sandbox.docker.*
2208
+ pidsLimit: 256,
2209
+ memory: "1g",
2210
+ memorySwap: "2g",
2211
+ cpus: 1,
2212
+ ulimits: {
2213
+ nofile: { soft: 1024, hard: 2048 },
2214
+ nproc: 256
2215
+ },
2216
+ seccompProfile: "/path/to/seccomp.json",
2217
+ apparmorProfile: "moltbot-sandbox",
2218
+ dns: ["1.1.1.1", "8.8.8.8"],
2219
+ extraHosts: ["internal.service:10.0.0.5"],
2220
+ binds: ["/var/run/docker.sock:/var/run/docker.sock", "/home/user/source:/source:rw"]
2221
+ },
2222
+ browser: {
2223
+ enabled: false,
2224
+ image: "moltbot-sandbox-browser:bookworm-slim",
2225
+ containerPrefix: "moltbot-sbx-browser-",
2226
+ cdpPort: 9222,
2227
+ vncPort: 5900,
2228
+ noVncPort: 6080,
2229
+ headless: false,
2230
+ enableNoVnc: true,
2231
+ allowHostControl: false,
2232
+ allowedControlUrls: ["http://10.0.0.42:18791"],
2233
+ allowedControlHosts: ["browser.lab.local", "10.0.0.42"],
2234
+ allowedControlPorts: [18791],
2235
+ autoStart: true,
2236
+ autoStartTimeoutMs: 12000
2237
+ },
2238
+ prune: {
2239
+ idleHours: 24, // 0 disables idle pruning
2240
+ maxAgeDays: 7 // 0 disables max-age pruning
2241
+ }
2242
+ }
2243
+ }
2244
+ },
2245
+ tools: {
2246
+ sandbox: {
2247
+ tools: {
2248
+ allow: ["exec", "process", "read", "write", "edit", "apply_patch", "sessions_list", "sessions_history", "sessions_send", "sessions_spawn", "session_status"],
2249
+ deny: ["browser", "canvas", "nodes", "cron", "discord", "gateway"]
2250
+ }
2251
+ }
2252
+ }
2253
+ }
2254
+ ```
2255
+
2256
+ Build the default sandbox image once with:
2257
+ ```bash
2258
+ scripts/sandbox-setup.sh
2259
+ ```
2260
+
2261
+ Note: sandbox containers default to `network: "none"`; set `agents.defaults.sandbox.docker.network`
2262
+ to `"bridge"` (or your custom network) if the agent needs outbound access.
2263
+
2264
+ Note: inbound attachments are staged into the active workspace at `media/inbound/*`. With `workspaceAccess: "rw"`, that means files are written into the agent workspace.
2265
+
2266
+ Note: `docker.binds` mounts additional host directories; global and per-agent binds are merged.
2267
+
2268
+ Build the optional browser image with:
2269
+ ```bash
2270
+ scripts/sandbox-browser-setup.sh
2271
+ ```
2272
+
2273
+ When `agents.defaults.sandbox.browser.enabled=true`, the browser tool uses a sandboxed
2274
+ Chromium instance (CDP). If noVNC is enabled (default when headless=false),
2275
+ the noVNC URL is injected into the system prompt so the agent can reference it.
2276
+ This does not require `browser.enabled` in the main config; the sandbox control
2277
+ URL is injected per session.
2278
+
2279
+ `agents.defaults.sandbox.browser.allowHostControl` (default: false) allows
2280
+ sandboxed sessions to explicitly target the **host** browser control server
2281
+ via the browser tool (`target: "host"`). Leave this off if you want strict
2282
+ sandbox isolation.
2283
+
2284
+ Allowlists for remote control:
2285
+ - `allowedControlUrls`: exact control URLs permitted for `target: "custom"`.
2286
+ - `allowedControlHosts`: hostnames permitted (hostname only, no port).
2287
+ - `allowedControlPorts`: ports permitted (defaults: http=80, https=443).
2288
+ Defaults: all allowlists are unset (no restriction). `allowHostControl` defaults to false.
2289
+
2290
+ ### `models` (custom providers + base URLs)
2291
+
2292
+ Moltbot uses the **pi-coding-agent** model catalog. You can add custom providers
2293
+ (LiteLLM, local OpenAI-compatible servers, Anthropic proxies, etc.) by writing
2294
+ `~/.clawdbot/agents/<agentId>/agent/models.json` or by defining the same schema inside your
2295
+ Moltbot config under `models.providers`.
2296
+ Provider-by-provider overview + examples: [/concepts/model-providers](/concepts/model-providers).
2297
+
2298
+ When `models.providers` is present, Moltbot writes/merges a `models.json` into
2299
+ `~/.clawdbot/agents/<agentId>/agent/` on startup:
2300
+ - default behavior: **merge** (keeps existing providers, overrides on name)
2301
+ - set `models.mode: "replace"` to overwrite the file contents
2302
+
2303
+ Select the model via `agents.defaults.model.primary` (provider/model).
2304
+
2305
+ ```json5
2306
+ {
2307
+ agents: {
2308
+ defaults: {
2309
+ model: { primary: "custom-proxy/llama-3.1-8b" },
2310
+ models: {
2311
+ "custom-proxy/llama-3.1-8b": {}
2312
+ }
2313
+ }
2314
+ },
2315
+ models: {
2316
+ mode: "merge",
2317
+ providers: {
2318
+ "custom-proxy": {
2319
+ baseUrl: "http://localhost:4000/v1",
2320
+ apiKey: "LITELLM_KEY",
2321
+ api: "openai-completions",
2322
+ models: [
2323
+ {
2324
+ id: "llama-3.1-8b",
2325
+ name: "Llama 3.1 8B",
2326
+ reasoning: false,
2327
+ input: ["text"],
2328
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2329
+ contextWindow: 128000,
2330
+ maxTokens: 32000
2331
+ }
2332
+ ]
2333
+ }
2334
+ }
2335
+ }
2336
+ }
2337
+ ```
2338
+
2339
+ ### OpenCode Zen (multi-model proxy)
2340
+
2341
+ OpenCode Zen is a multi-model gateway with per-model endpoints. Moltbot uses
2342
+ the built-in `opencode` provider from pi-ai; set `OPENCODE_API_KEY` (or
2343
+ `OPENCODE_ZEN_API_KEY`) from https://opencode.ai/auth.
2344
+
2345
+ Notes:
2346
+ - Model refs use `opencode/<modelId>` (example: `opencode/claude-opus-4-5`).
2347
+ - If you enable an allowlist via `agents.defaults.models`, add each model you plan to use.
2348
+ - Shortcut: `moltbot onboard --auth-choice opencode-zen`.
2349
+
2350
+ ```json5
2351
+ {
2352
+ agents: {
2353
+ defaults: {
2354
+ model: { primary: "opencode/claude-opus-4-5" },
2355
+ models: { "opencode/claude-opus-4-5": { alias: "Opus" } }
2356
+ }
2357
+ }
2358
+ }
2359
+ ```
2360
+
2361
+ ### Z.AI (GLM-4.7) — provider alias support
2362
+
2363
+ Z.AI models are available via the built-in `zai` provider. Set `ZAI_API_KEY`
2364
+ in your environment and reference the model by provider/model.
2365
+
2366
+ Shortcut: `moltbot onboard --auth-choice zai-api-key`.
2367
+
2368
+ ```json5
2369
+ {
2370
+ agents: {
2371
+ defaults: {
2372
+ model: { primary: "zai/glm-4.7" },
2373
+ models: { "zai/glm-4.7": {} }
2374
+ }
2375
+ }
2376
+ }
2377
+ ```
2378
+
2379
+ Notes:
2380
+ - `z.ai/*` and `z-ai/*` are accepted aliases and normalize to `zai/*`.
2381
+ - If `ZAI_API_KEY` is missing, requests to `zai/*` will fail with an auth error at runtime.
2382
+ - Example error: `No API key found for provider "zai".`
2383
+ - Z.AI’s general API endpoint is `https://api.z.ai/api/paas/v4`. GLM coding
2384
+ requests use the dedicated Coding endpoint `https://api.z.ai/api/coding/paas/v4`.
2385
+ The built-in `zai` provider uses the Coding endpoint. If you need the general
2386
+ endpoint, define a custom provider in `models.providers` with the base URL
2387
+ override (see the custom providers section above).
2388
+ - Use a fake placeholder in docs/configs; never commit real API keys.
2389
+
2390
+ ### Moonshot AI (Kimi)
2391
+
2392
+ Use Moonshot's OpenAI-compatible endpoint:
2393
+
2394
+ ```json5
2395
+ {
2396
+ env: { MOONSHOT_API_KEY: "sk-..." },
2397
+ agents: {
2398
+ defaults: {
2399
+ model: { primary: "moonshot/kimi-k2-0905-preview" },
2400
+ models: { "moonshot/kimi-k2-0905-preview": { alias: "Kimi K2" } }
2401
+ }
2402
+ },
2403
+ models: {
2404
+ mode: "merge",
2405
+ providers: {
2406
+ moonshot: {
2407
+ baseUrl: "https://api.moonshot.ai/v1",
2408
+ apiKey: "${MOONSHOT_API_KEY}",
2409
+ api: "openai-completions",
2410
+ models: [
2411
+ {
2412
+ id: "kimi-k2-0905-preview",
2413
+ name: "Kimi K2 0905 Preview",
2414
+ reasoning: false,
2415
+ input: ["text"],
2416
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2417
+ contextWindow: 256000,
2418
+ maxTokens: 8192
2419
+ }
2420
+ ]
2421
+ }
2422
+ }
2423
+ }
2424
+ }
2425
+ ```
2426
+
2427
+ Notes:
2428
+ - Set `MOONSHOT_API_KEY` in the environment or use `moltbot onboard --auth-choice moonshot-api-key`.
2429
+ - Model ref: `moonshot/kimi-k2-0905-preview`.
2430
+ - Use `https://api.moonshot.cn/v1` if you need the China endpoint.
2431
+
2432
+ ### Kimi Code
2433
+
2434
+ Use Kimi Code's dedicated OpenAI-compatible endpoint (separate from Moonshot):
2435
+
2436
+ ```json5
2437
+ {
2438
+ env: { KIMICODE_API_KEY: "sk-..." },
2439
+ agents: {
2440
+ defaults: {
2441
+ model: { primary: "kimi-code/kimi-for-coding" },
2442
+ models: { "kimi-code/kimi-for-coding": { alias: "Kimi Code" } }
2443
+ }
2444
+ },
2445
+ models: {
2446
+ mode: "merge",
2447
+ providers: {
2448
+ "kimi-code": {
2449
+ baseUrl: "https://api.kimi.com/coding/v1",
2450
+ apiKey: "${KIMICODE_API_KEY}",
2451
+ api: "openai-completions",
2452
+ models: [
2453
+ {
2454
+ id: "kimi-for-coding",
2455
+ name: "Kimi For Coding",
2456
+ reasoning: true,
2457
+ input: ["text"],
2458
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2459
+ contextWindow: 262144,
2460
+ maxTokens: 32768,
2461
+ headers: { "User-Agent": "KimiCLI/0.77" },
2462
+ compat: { supportsDeveloperRole: false }
2463
+ }
2464
+ ]
2465
+ }
2466
+ }
2467
+ }
2468
+ }
2469
+ ```
2470
+
2471
+ Notes:
2472
+ - Set `KIMICODE_API_KEY` in the environment or use `moltbot onboard --auth-choice kimi-code-api-key`.
2473
+ - Model ref: `kimi-code/kimi-for-coding`.
2474
+
2475
+ ### Synthetic (Anthropic-compatible)
2476
+
2477
+ Use Synthetic's Anthropic-compatible endpoint:
2478
+
2479
+ ```json5
2480
+ {
2481
+ env: { SYNTHETIC_API_KEY: "sk-..." },
2482
+ agents: {
2483
+ defaults: {
2484
+ model: { primary: "synthetic/hf:MiniMaxAI/MiniMax-M2.1" },
2485
+ models: { "synthetic/hf:MiniMaxAI/MiniMax-M2.1": { alias: "MiniMax M2.1" } }
2486
+ }
2487
+ },
2488
+ models: {
2489
+ mode: "merge",
2490
+ providers: {
2491
+ synthetic: {
2492
+ baseUrl: "https://api.synthetic.new/anthropic",
2493
+ apiKey: "${SYNTHETIC_API_KEY}",
2494
+ api: "anthropic-messages",
2495
+ models: [
2496
+ {
2497
+ id: "hf:MiniMaxAI/MiniMax-M2.1",
2498
+ name: "MiniMax M2.1",
2499
+ reasoning: false,
2500
+ input: ["text"],
2501
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
2502
+ contextWindow: 192000,
2503
+ maxTokens: 65536
2504
+ }
2505
+ ]
2506
+ }
2507
+ }
2508
+ }
2509
+ }
2510
+ ```
2511
+
2512
+ Notes:
2513
+ - Set `SYNTHETIC_API_KEY` or use `moltbot onboard --auth-choice synthetic-api-key`.
2514
+ - Model ref: `synthetic/hf:MiniMaxAI/MiniMax-M2.1`.
2515
+ - Base URL should omit `/v1` because the Anthropic client appends it.
2516
+
2517
+ ### Local models (LM Studio) — recommended setup
2518
+
2519
+ See [/gateway/local-models](/gateway/local-models) for the current local guidance. TL;DR: run MiniMax M2.1 via LM Studio Responses API on serious hardware; keep hosted models merged for fallback.
2520
+
2521
+ ### MiniMax M2.1
2522
+
2523
+ Use MiniMax M2.1 directly without LM Studio:
2524
+
2525
+ ```json5
2526
+ {
2527
+ agent: {
2528
+ model: { primary: "minimax/MiniMax-M2.1" },
2529
+ models: {
2530
+ "anthropic/claude-opus-4-5": { alias: "Opus" },
2531
+ "minimax/MiniMax-M2.1": { alias: "Minimax" }
2532
+ }
2533
+ },
2534
+ models: {
2535
+ mode: "merge",
2536
+ providers: {
2537
+ minimax: {
2538
+ baseUrl: "https://api.minimax.io/anthropic",
2539
+ apiKey: "${MINIMAX_API_KEY}",
2540
+ api: "anthropic-messages",
2541
+ models: [
2542
+ {
2543
+ id: "MiniMax-M2.1",
2544
+ name: "MiniMax M2.1",
2545
+ reasoning: false,
2546
+ input: ["text"],
2547
+ // Pricing: update in models.json if you need exact cost tracking.
2548
+ cost: { input: 15, output: 60, cacheRead: 2, cacheWrite: 10 },
2549
+ contextWindow: 200000,
2550
+ maxTokens: 8192
2551
+ }
2552
+ ]
2553
+ }
2554
+ }
2555
+ }
2556
+ }
2557
+ ```
2558
+
2559
+ Notes:
2560
+ - Set `MINIMAX_API_KEY` environment variable or use `moltbot onboard --auth-choice minimax-api`.
2561
+ - Available model: `MiniMax-M2.1` (default).
2562
+ - Update pricing in `models.json` if you need exact cost tracking.
2563
+
2564
+ ### Cerebras (GLM 4.6 / 4.7)
2565
+
2566
+ Use Cerebras via their OpenAI-compatible endpoint:
2567
+
2568
+ ```json5
2569
+ {
2570
+ env: { CEREBRAS_API_KEY: "sk-..." },
2571
+ agents: {
2572
+ defaults: {
2573
+ model: {
2574
+ primary: "cerebras/zai-glm-4.7",
2575
+ fallbacks: ["cerebras/zai-glm-4.6"]
2576
+ },
2577
+ models: {
2578
+ "cerebras/zai-glm-4.7": { alias: "GLM 4.7 (Cerebras)" },
2579
+ "cerebras/zai-glm-4.6": { alias: "GLM 4.6 (Cerebras)" }
2580
+ }
2581
+ }
2582
+ },
2583
+ models: {
2584
+ mode: "merge",
2585
+ providers: {
2586
+ cerebras: {
2587
+ baseUrl: "https://api.cerebras.ai/v1",
2588
+ apiKey: "${CEREBRAS_API_KEY}",
2589
+ api: "openai-completions",
2590
+ models: [
2591
+ { id: "zai-glm-4.7", name: "GLM 4.7 (Cerebras)" },
2592
+ { id: "zai-glm-4.6", name: "GLM 4.6 (Cerebras)" }
2593
+ ]
2594
+ }
2595
+ }
2596
+ }
2597
+ }
2598
+ ```
2599
+
2600
+ Notes:
2601
+ - Use `cerebras/zai-glm-4.7` for Cerebras; use `zai/glm-4.7` for Z.AI direct.
2602
+ - Set `CEREBRAS_API_KEY` in the environment or config.
2603
+
2604
+ Notes:
2605
+ - Supported APIs: `openai-completions`, `openai-responses`, `anthropic-messages`,
2606
+ `google-generative-ai`
2607
+ - Use `authHeader: true` + `headers` for custom auth needs.
2608
+ - Override the agent config root with `CLAWDBOT_AGENT_DIR` (or `PI_CODING_AGENT_DIR`)
2609
+ if you want `models.json` stored elsewhere (default: `~/.clawdbot/agents/main/agent`).
2610
+
2611
+ ### `session`
2612
+
2613
+ Controls session scoping, reset policy, reset triggers, and where the session store is written.
2614
+
2615
+ ```json5
2616
+ {
2617
+ session: {
2618
+ scope: "per-sender",
2619
+ dmScope: "main",
2620
+ identityLinks: {
2621
+ alice: ["telegram:123456789", "discord:987654321012345678"]
2622
+ },
2623
+ reset: {
2624
+ mode: "daily",
2625
+ atHour: 4,
2626
+ idleMinutes: 60
2627
+ },
2628
+ resetByType: {
2629
+ thread: { mode: "daily", atHour: 4 },
2630
+ dm: { mode: "idle", idleMinutes: 240 },
2631
+ group: { mode: "idle", idleMinutes: 120 }
2632
+ },
2633
+ resetTriggers: ["/new", "/reset"],
2634
+ // Default is already per-agent under ~/.clawdbot/agents/<agentId>/sessions/sessions.json
2635
+ // You can override with {agentId} templating:
2636
+ store: "~/.clawdbot/agents/{agentId}/sessions/sessions.json",
2637
+ // Direct chats collapse to agent:<agentId>:<mainKey> (default: "main").
2638
+ mainKey: "main",
2639
+ agentToAgent: {
2640
+ // Max ping-pong reply turns between requester/target (0–5).
2641
+ maxPingPongTurns: 5
2642
+ },
2643
+ sendPolicy: {
2644
+ rules: [
2645
+ { action: "deny", match: { channel: "discord", chatType: "group" } }
2646
+ ],
2647
+ default: "allow"
2648
+ }
2649
+ }
2650
+ }
2651
+ ```
2652
+
2653
+ Fields:
2654
+ - `mainKey`: direct-chat bucket key (default: `"main"`). Useful when you want to “rename” the primary DM thread without changing `agentId`.
2655
+ - Sandbox note: `agents.defaults.sandbox.mode: "non-main"` uses this key to detect the main session. Any session key that does not match `mainKey` (groups/channels) is sandboxed.
2656
+ - `dmScope`: how DM sessions are grouped (default: `"main"`).
2657
+ - `main`: all DMs share the main session for continuity.
2658
+ - `per-peer`: isolate DMs by sender id across channels.
2659
+ - `per-channel-peer`: isolate DMs per channel + sender (recommended for multi-user inboxes).
2660
+ - `identityLinks`: map canonical ids to provider-prefixed peers so the same person shares a DM session across channels when using `per-peer` or `per-channel-peer`.
2661
+ - Example: `alice: ["telegram:123456789", "discord:987654321012345678"]`.
2662
+ - `reset`: primary reset policy. Defaults to daily resets at 4:00 AM local time on the gateway host.
2663
+ - `mode`: `daily` or `idle` (default: `daily` when `reset` is present).
2664
+ - `atHour`: local hour (0-23) for the daily reset boundary.
2665
+ - `idleMinutes`: sliding idle window in minutes. When daily + idle are both configured, whichever expires first wins.
2666
+ - `resetByType`: per-session overrides for `dm`, `group`, and `thread`.
2667
+ - If you only set legacy `session.idleMinutes` without any `reset`/`resetByType`, Moltbot stays in idle-only mode for backward compatibility.
2668
+ - `heartbeatIdleMinutes`: optional idle override for heartbeat checks (daily reset still applies when enabled).
2669
+ - `agentToAgent.maxPingPongTurns`: max reply-back turns between requester/target (0–5, default 5).
2670
+ - `sendPolicy.default`: `allow` or `deny` fallback when no rule matches.
2671
+ - `sendPolicy.rules[]`: match by `channel`, `chatType` (`direct|group|room`), or `keyPrefix` (e.g. `cron:`). First deny wins; otherwise allow.
2672
+
2673
+ ### `skills` (skills config)
2674
+
2675
+ Controls bundled allowlist, install preferences, extra skill folders, and per-skill
2676
+ overrides. Applies to **bundled** skills and `~/.clawdbot/skills` (workspace skills
2677
+ still win on name conflicts).
2678
+
2679
+ Fields:
2680
+ - `allowBundled`: optional allowlist for **bundled** skills only. If set, only those
2681
+ bundled skills are eligible (managed/workspace skills unaffected).
2682
+ - `load.extraDirs`: additional skill directories to scan (lowest precedence).
2683
+ - `install.preferBrew`: prefer brew installers when available (default: true).
2684
+ - `install.nodeManager`: node installer preference (`npm` | `pnpm` | `yarn`, default: npm).
2685
+ - `entries.<skillKey>`: per-skill config overrides.
2686
+
2687
+ Per-skill fields:
2688
+ - `enabled`: set `false` to disable a skill even if it’s bundled/installed.
2689
+ - `env`: environment variables injected for the agent run (only if not already set).
2690
+ - `apiKey`: optional convenience for skills that declare a primary env var (e.g. `nano-banana-pro` → `GEMINI_API_KEY`).
2691
+
2692
+ Example:
2693
+
2694
+ ```json5
2695
+ {
2696
+ skills: {
2697
+ allowBundled: ["gemini", "peekaboo"],
2698
+ load: {
2699
+ extraDirs: [
2700
+ "~/Projects/agent-scripts/skills",
2701
+ "~/Projects/oss/some-skill-pack/skills"
2702
+ ]
2703
+ },
2704
+ install: {
2705
+ preferBrew: true,
2706
+ nodeManager: "npm"
2707
+ },
2708
+ entries: {
2709
+ "nano-banana-pro": {
2710
+ apiKey: "GEMINI_KEY_HERE",
2711
+ env: {
2712
+ GEMINI_API_KEY: "GEMINI_KEY_HERE"
2713
+ }
2714
+ },
2715
+ peekaboo: { enabled: true },
2716
+ sag: { enabled: false }
2717
+ }
2718
+ }
2719
+ }
2720
+ ```
2721
+
2722
+ ### `plugins` (extensions)
2723
+
2724
+ Controls plugin discovery, allow/deny, and per-plugin config. Plugins are loaded
2725
+ from `~/.clawdbot/extensions`, `<workspace>/.clawdbot/extensions`, plus any
2726
+ `plugins.load.paths` entries. **Config changes require a gateway restart.**
2727
+ See [/plugin](/plugin) for full usage.
2728
+
2729
+ Fields:
2730
+ - `enabled`: master toggle for plugin loading (default: true).
2731
+ - `allow`: optional allowlist of plugin ids; when set, only listed plugins load.
2732
+ - `deny`: optional denylist of plugin ids (deny wins).
2733
+ - `load.paths`: extra plugin files or directories to load (absolute or `~`).
2734
+ - `entries.<pluginId>`: per-plugin overrides.
2735
+ - `enabled`: set `false` to disable.
2736
+ - `config`: plugin-specific config object (validated by the plugin if provided).
2737
+
2738
+ Example:
2739
+
2740
+ ```json5
2741
+ {
2742
+ plugins: {
2743
+ enabled: true,
2744
+ allow: ["voice-call"],
2745
+ load: {
2746
+ paths: ["~/Projects/oss/voice-call-extension"]
2747
+ },
2748
+ entries: {
2749
+ "voice-call": {
2750
+ enabled: true,
2751
+ config: {
2752
+ provider: "twilio"
2753
+ }
2754
+ }
2755
+ }
2756
+ }
2757
+ }
2758
+ ```
2759
+
2760
+ ### `browser` (clawd-managed browser)
2761
+
2762
+ Moltbot can start a **dedicated, isolated** Chrome/Brave/Edge/Chromium instance for clawd and expose a small loopback control service.
2763
+ Profiles can point at a **remote** Chromium-based browser via `profiles.<name>.cdpUrl`. Remote
2764
+ profiles are attach-only (start/stop/reset are disabled).
2765
+
2766
+ `browser.cdpUrl` remains for legacy single-profile configs and as the base
2767
+ scheme/host for profiles that only set `cdpPort`.
2768
+
2769
+ Defaults:
2770
+ - enabled: `true`
2771
+ - evaluateEnabled: `true` (set `false` to disable `act:evaluate` and `wait --fn`)
2772
+ - control service: loopback only (port derived from `gateway.port`, default `18791`)
2773
+ - CDP URL: `http://127.0.0.1:18792` (control service + 1, legacy single-profile)
2774
+ - profile color: `#FF4500` (lobster-orange)
2775
+ - Note: the control server is started by the running gateway (Moltbot.app menubar, or `moltbot gateway`).
2776
+ - Auto-detect order: default browser if Chromium-based; otherwise Chrome → Brave → Edge → Chromium → Chrome Canary.
2777
+
2778
+ ```json5
2779
+ {
2780
+ browser: {
2781
+ enabled: true,
2782
+ evaluateEnabled: true,
2783
+ // cdpUrl: "http://127.0.0.1:18792", // legacy single-profile override
2784
+ defaultProfile: "chrome",
2785
+ profiles: {
2786
+ clawd: { cdpPort: 18800, color: "#FF4500" },
2787
+ work: { cdpPort: 18801, color: "#0066CC" },
2788
+ remote: { cdpUrl: "http://10.0.0.42:9222", color: "#00AA00" }
2789
+ },
2790
+ color: "#FF4500",
2791
+ // Advanced:
2792
+ // headless: false,
2793
+ // noSandbox: false,
2794
+ // executablePath: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser",
2795
+ // attachOnly: false, // set true when tunneling a remote CDP to localhost
2796
+ }
2797
+ }
2798
+ ```
2799
+
2800
+ ### `ui` (Appearance)
2801
+
2802
+ Optional accent color used by the native apps for UI chrome (e.g. Talk Mode bubble tint).
2803
+
2804
+ If unset, clients fall back to a muted light-blue.
2805
+
2806
+ ```json5
2807
+ {
2808
+ ui: {
2809
+ seamColor: "#FF4500", // hex (RRGGBB or #RRGGBB)
2810
+ // Optional: Control UI assistant identity override.
2811
+ // If unset, the Control UI uses the active agent identity (config or IDENTITY.md).
2812
+ assistant: {
2813
+ name: "Moltbot",
2814
+ avatar: "CB" // emoji, short text, or image URL/data URI
2815
+ }
2816
+ }
2817
+ }
2818
+ ```
2819
+
2820
+ ### `gateway` (Gateway server mode + bind)
2821
+
2822
+ Use `gateway.mode` to explicitly declare whether this machine should run the Gateway.
2823
+
2824
+ Defaults:
2825
+ - mode: **unset** (treated as “do not auto-start”)
2826
+ - bind: `loopback`
2827
+ - port: `18789` (single port for WS + HTTP)
2828
+
2829
+ ```json5
2830
+ {
2831
+ gateway: {
2832
+ mode: "local", // or "remote"
2833
+ port: 18789, // WS + HTTP multiplex
2834
+ bind: "loopback",
2835
+ // controlUi: { enabled: true, basePath: "/moltbot" }
2836
+ // auth: { mode: "token", token: "your-token" } // token gates WS + Control UI access
2837
+ // tailscale: { mode: "off" | "serve" | "funnel" }
2838
+ }
2839
+ }
2840
+ ```
2841
+
2842
+ Control UI base path:
2843
+ - `gateway.controlUi.basePath` sets the URL prefix where the Control UI is served.
2844
+ - Examples: `"/ui"`, `"/moltbot"`, `"/apps/moltbot"`.
2845
+ - Default: root (`/`) (unchanged).
2846
+ - `gateway.controlUi.allowInsecureAuth` allows token-only auth for the Control UI when
2847
+ device identity is omitted (typically over HTTP). Default: `false`. Prefer HTTPS
2848
+ (Tailscale Serve) or `127.0.0.1`.
2849
+ - `gateway.controlUi.dangerouslyDisableDeviceAuth` disables device identity checks for the
2850
+ Control UI (token/password only). Default: `false`. Break-glass only.
2851
+
2852
+ Related docs:
2853
+ - [Control UI](/web/control-ui)
2854
+ - [Web overview](/web)
2855
+ - [Tailscale](/gateway/tailscale)
2856
+ - [Remote access](/gateway/remote)
2857
+
2858
+ Trusted proxies:
2859
+ - `gateway.trustedProxies`: list of reverse proxy IPs that terminate TLS in front of the Gateway.
2860
+ - When a connection comes from one of these IPs, Moltbot uses `x-forwarded-for` (or `x-real-ip`) to determine the client IP for local pairing checks and HTTP auth/local checks.
2861
+ - Only list proxies you fully control, and ensure they **overwrite** incoming `x-forwarded-for`.
2862
+
2863
+ Notes:
2864
+ - `moltbot gateway` refuses to start unless `gateway.mode` is set to `local` (or you pass the override flag).
2865
+ - `gateway.port` controls the single multiplexed port used for WebSocket + HTTP (control UI, hooks, A2UI).
2866
+ - OpenAI Chat Completions endpoint: **disabled by default**; enable with `gateway.http.endpoints.chatCompletions.enabled: true`.
2867
+ - Precedence: `--port` > `CLAWDBOT_GATEWAY_PORT` > `gateway.port` > default `18789`.
2868
+ - Gateway auth is required by default (token/password or Tailscale Serve identity). Non-loopback binds require a shared token/password.
2869
+ - The onboarding wizard generates a gateway token by default (even on loopback).
2870
+ - `gateway.remote.token` is **only** for remote CLI calls; it does not enable local gateway auth. `gateway.token` is ignored.
2871
+
2872
+ Auth and Tailscale:
2873
+ - `gateway.auth.mode` sets the handshake requirements (`token` or `password`). When unset, token auth is assumed.
2874
+ - `gateway.auth.token` stores the shared token for token auth (used by the CLI on the same machine).
2875
+ - When `gateway.auth.mode` is set, only that method is accepted (plus optional Tailscale headers).
2876
+ - `gateway.auth.password` can be set here, or via `CLAWDBOT_GATEWAY_PASSWORD` (recommended).
2877
+ - `gateway.auth.allowTailscale` allows Tailscale Serve identity headers
2878
+ (`tailscale-user-login`) to satisfy auth when the request arrives on loopback
2879
+ with `x-forwarded-for`, `x-forwarded-proto`, and `x-forwarded-host`. Moltbot
2880
+ verifies the identity by resolving the `x-forwarded-for` address via
2881
+ `tailscale whois` before accepting it. When `true`, Serve requests do not need
2882
+ a token/password; set `false` to require explicit credentials. Defaults to
2883
+ `true` when `tailscale.mode = "serve"` and auth mode is not `password`.
2884
+ - `gateway.tailscale.mode: "serve"` uses Tailscale Serve (tailnet only, loopback bind).
2885
+ - `gateway.tailscale.mode: "funnel"` exposes the dashboard publicly; requires auth.
2886
+ - `gateway.tailscale.resetOnExit` resets Serve/Funnel config on shutdown.
2887
+
2888
+ Remote client defaults (CLI):
2889
+ - `gateway.remote.url` sets the default Gateway WebSocket URL for CLI calls when `gateway.mode = "remote"`.
2890
+ - `gateway.remote.transport` selects the macOS remote transport (`ssh` default, `direct` for ws/wss). When `direct`, `gateway.remote.url` must be `ws://` or `wss://`. `ws://host` defaults to port `18789`.
2891
+ - `gateway.remote.token` supplies the token for remote calls (leave unset for no auth).
2892
+ - `gateway.remote.password` supplies the password for remote calls (leave unset for no auth).
2893
+
2894
+ macOS app behavior:
2895
+ - Moltbot.app watches `~/.clawdbot/moltbot.json` and switches modes live when `gateway.mode` or `gateway.remote.url` changes.
2896
+ - If `gateway.mode` is unset but `gateway.remote.url` is set, the macOS app treats it as remote mode.
2897
+ - When you change connection mode in the macOS app, it writes `gateway.mode` (and `gateway.remote.url` + `gateway.remote.transport` in remote mode) back to the config file.
2898
+
2899
+ ```json5
2900
+ {
2901
+ gateway: {
2902
+ mode: "remote",
2903
+ remote: {
2904
+ url: "ws://gateway.tailnet:18789",
2905
+ token: "your-token",
2906
+ password: "your-password"
2907
+ }
2908
+ }
2909
+ }
2910
+ ```
2911
+
2912
+ Direct transport example (macOS app):
2913
+
2914
+ ```json5
2915
+ {
2916
+ gateway: {
2917
+ mode: "remote",
2918
+ remote: {
2919
+ transport: "direct",
2920
+ url: "wss://gateway.example.ts.net",
2921
+ token: "your-token"
2922
+ }
2923
+ }
2924
+ }
2925
+ ```
2926
+
2927
+ ### `gateway.reload` (Config hot reload)
2928
+
2929
+ The Gateway watches `~/.clawdbot/moltbot.json` (or `CLAWDBOT_CONFIG_PATH`) and applies changes automatically.
2930
+
2931
+ Modes:
2932
+ - `hybrid` (default): hot-apply safe changes; restart the Gateway for critical changes.
2933
+ - `hot`: only apply hot-safe changes; log when a restart is required.
2934
+ - `restart`: restart the Gateway on any config change.
2935
+ - `off`: disable hot reload.
2936
+
2937
+ ```json5
2938
+ {
2939
+ gateway: {
2940
+ reload: {
2941
+ mode: "hybrid",
2942
+ debounceMs: 300
2943
+ }
2944
+ }
2945
+ }
2946
+ ```
2947
+
2948
+ #### Hot reload matrix (files + impact)
2949
+
2950
+ Files watched:
2951
+ - `~/.clawdbot/moltbot.json` (or `CLAWDBOT_CONFIG_PATH`)
2952
+
2953
+ Hot-applied (no full gateway restart):
2954
+ - `hooks` (webhook auth/path/mappings) + `hooks.gmail` (Gmail watcher restarted)
2955
+ - `browser` (browser control server restart)
2956
+ - `cron` (cron service restart + concurrency update)
2957
+ - `agents.defaults.heartbeat` (heartbeat runner restart)
2958
+ - `web` (WhatsApp web channel restart)
2959
+ - `telegram`, `discord`, `signal`, `imessage` (channel restarts)
2960
+ - `agent`, `models`, `routing`, `messages`, `session`, `whatsapp`, `logging`, `skills`, `ui`, `talk`, `identity`, `wizard` (dynamic reads)
2961
+
2962
+ Requires full Gateway restart:
2963
+ - `gateway` (port/bind/auth/control UI/tailscale)
2964
+ - `bridge` (legacy)
2965
+ - `discovery`
2966
+ - `canvasHost`
2967
+ - `plugins`
2968
+ - Any unknown/unsupported config path (defaults to restart for safety)
2969
+
2970
+ ### Multi-instance isolation
2971
+
2972
+ To run multiple gateways on one host (for redundancy or a rescue bot), isolate per-instance state + config and use unique ports:
2973
+ - `CLAWDBOT_CONFIG_PATH` (per-instance config)
2974
+ - `CLAWDBOT_STATE_DIR` (sessions/creds)
2975
+ - `agents.defaults.workspace` (memories)
2976
+ - `gateway.port` (unique per instance)
2977
+
2978
+ Convenience flags (CLI):
2979
+ - `moltbot --dev …` → uses `~/.clawdbot-dev` + shifts ports from base `19001`
2980
+ - `moltbot --profile <name> …` → uses `~/.clawdbot-<name>` (port via config/env/flags)
2981
+
2982
+ See [Gateway runbook](/gateway) for the derived port mapping (gateway/browser/canvas).
2983
+ See [Multiple gateways](/gateway/multiple-gateways) for browser/CDP port isolation details.
2984
+
2985
+ Example:
2986
+ ```bash
2987
+ CLAWDBOT_CONFIG_PATH=~/.clawdbot/a.json \
2988
+ CLAWDBOT_STATE_DIR=~/.clawdbot-a \
2989
+ moltbot gateway --port 19001
2990
+ ```
2991
+
2992
+ ### `hooks` (Gateway webhooks)
2993
+
2994
+ Enable a simple HTTP webhook endpoint on the Gateway HTTP server.
2995
+
2996
+ Defaults:
2997
+ - enabled: `false`
2998
+ - path: `/hooks`
2999
+ - maxBodyBytes: `262144` (256 KB)
3000
+
3001
+ ```json5
3002
+ {
3003
+ hooks: {
3004
+ enabled: true,
3005
+ token: "shared-secret",
3006
+ path: "/hooks",
3007
+ presets: ["gmail"],
3008
+ transformsDir: "~/.clawdbot/hooks",
3009
+ mappings: [
3010
+ {
3011
+ match: { path: "gmail" },
3012
+ action: "agent",
3013
+ wakeMode: "now",
3014
+ name: "Gmail",
3015
+ sessionKey: "hook:gmail:{{messages[0].id}}",
3016
+ messageTemplate:
3017
+ "From: {{messages[0].from}}\nSubject: {{messages[0].subject}}\n{{messages[0].snippet}}",
3018
+ deliver: true,
3019
+ channel: "last",
3020
+ model: "openai/gpt-5.2-mini",
3021
+ },
3022
+ ],
3023
+ }
3024
+ }
3025
+ ```
3026
+
3027
+ Requests must include the hook token:
3028
+ - `Authorization: Bearer <token>` **or**
3029
+ - `x-moltbot-token: <token>` **or**
3030
+ - `?token=<token>`
3031
+
3032
+ Endpoints:
3033
+ - `POST /hooks/wake` → `{ text, mode?: "now"|"next-heartbeat" }`
3034
+ - `POST /hooks/agent` → `{ message, name?, sessionKey?, wakeMode?, deliver?, channel?, to?, model?, thinking?, timeoutSeconds? }`
3035
+ - `POST /hooks/<name>` → resolved via `hooks.mappings`
3036
+
3037
+ `/hooks/agent` always posts a summary into the main session (and can optionally trigger an immediate heartbeat via `wakeMode: "now"`).
3038
+
3039
+ Mapping notes:
3040
+ - `match.path` matches the sub-path after `/hooks` (e.g. `/hooks/gmail` → `gmail`).
3041
+ - `match.source` matches a payload field (e.g. `{ source: "gmail" }`) so you can use a generic `/hooks/ingest` path.
3042
+ - Templates like `{{messages[0].subject}}` read from the payload.
3043
+ - `transform` can point to a JS/TS module that returns a hook action.
3044
+ - `deliver: true` sends the final reply to a channel; `channel` defaults to `last` (falls back to WhatsApp).
3045
+ - If there is no prior delivery route, set `channel` + `to` explicitly (required for Telegram/Discord/Google Chat/Slack/Signal/iMessage/MS Teams).
3046
+ - `model` overrides the LLM for this hook run (`provider/model` or alias; must be allowed if `agents.defaults.models` is set).
3047
+
3048
+ Gmail helper config (used by `moltbot webhooks gmail setup` / `run`):
3049
+
3050
+ ```json5
3051
+ {
3052
+ hooks: {
3053
+ gmail: {
3054
+ account: "moltbot@gmail.com",
3055
+ topic: "projects/<project-id>/topics/gog-gmail-watch",
3056
+ subscription: "gog-gmail-watch-push",
3057
+ pushToken: "shared-push-token",
3058
+ hookUrl: "http://127.0.0.1:18789/hooks/gmail",
3059
+ includeBody: true,
3060
+ maxBytes: 20000,
3061
+ renewEveryMinutes: 720,
3062
+ serve: { bind: "127.0.0.1", port: 8788, path: "/" },
3063
+ tailscale: { mode: "funnel", path: "/gmail-pubsub" },
3064
+
3065
+ // Optional: use a cheaper model for Gmail hook processing
3066
+ // Falls back to agents.defaults.model.fallbacks, then primary, on auth/rate-limit/timeout
3067
+ model: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
3068
+ // Optional: default thinking level for Gmail hooks
3069
+ thinking: "off",
3070
+ }
3071
+ }
3072
+ }
3073
+ ```
3074
+
3075
+ Model override for Gmail hooks:
3076
+ - `hooks.gmail.model` specifies a model to use for Gmail hook processing (defaults to session primary).
3077
+ - Accepts `provider/model` refs or aliases from `agents.defaults.models`.
3078
+ - Falls back to `agents.defaults.model.fallbacks`, then `agents.defaults.model.primary`, on auth/rate-limit/timeouts.
3079
+ - If `agents.defaults.models` is set, include the hooks model in the allowlist.
3080
+ - At startup, warns if the configured model is not in the model catalog or allowlist.
3081
+ - `hooks.gmail.thinking` sets the default thinking level for Gmail hooks and is overridden by per-hook `thinking`.
3082
+
3083
+ Gateway auto-start:
3084
+ - If `hooks.enabled=true` and `hooks.gmail.account` is set, the Gateway starts
3085
+ `gog gmail watch serve` on boot and auto-renews the watch.
3086
+ - Set `CLAWDBOT_SKIP_GMAIL_WATCHER=1` to disable the auto-start (for manual runs).
3087
+ - Avoid running a separate `gog gmail watch serve` alongside the Gateway; it will
3088
+ fail with `listen tcp 127.0.0.1:8788: bind: address already in use`.
3089
+
3090
+ Note: when `tailscale.mode` is on, Moltbot defaults `serve.path` to `/` so
3091
+ Tailscale can proxy `/gmail-pubsub` correctly (it strips the set-path prefix).
3092
+ If you need the backend to receive the prefixed path, set
3093
+ `hooks.gmail.tailscale.target` to a full URL (and align `serve.path`).
3094
+
3095
+ ### `canvasHost` (LAN/tailnet Canvas file server + live reload)
3096
+
3097
+ The Gateway serves a directory of HTML/CSS/JS over HTTP so iOS/Android nodes can simply `canvas.navigate` to it.
3098
+
3099
+ Default root: `~/clawd/canvas`
3100
+ Default port: `18793` (chosen to avoid the clawd browser CDP port `18792`)
3101
+ The server listens on the **gateway bind host** (LAN or Tailnet) so nodes can reach it.
3102
+
3103
+ The server:
3104
+ - serves files under `canvasHost.root`
3105
+ - injects a tiny live-reload client into served HTML
3106
+ - watches the directory and broadcasts reloads over a WebSocket endpoint at `/__moltbot/ws`
3107
+ - auto-creates a starter `index.html` when the directory is empty (so you see something immediately)
3108
+ - also serves A2UI at `/__moltbot__/a2ui/` and is advertised to nodes as `canvasHostUrl`
3109
+ (always used by nodes for Canvas/A2UI)
3110
+
3111
+ Disable live reload (and file watching) if the directory is large or you hit `EMFILE`:
3112
+ - config: `canvasHost: { liveReload: false }`
3113
+
3114
+ ```json5
3115
+ {
3116
+ canvasHost: {
3117
+ root: "~/clawd/canvas",
3118
+ port: 18793,
3119
+ liveReload: true
3120
+ }
3121
+ }
3122
+ ```
3123
+
3124
+ Changes to `canvasHost.*` require a gateway restart (config reload will restart).
3125
+
3126
+ Disable with:
3127
+ - config: `canvasHost: { enabled: false }`
3128
+ - env: `CLAWDBOT_SKIP_CANVAS_HOST=1`
3129
+
3130
+ ### `bridge` (legacy TCP bridge, removed)
3131
+
3132
+ Current builds no longer include the TCP bridge listener; `bridge.*` config keys are ignored.
3133
+ Nodes connect over the Gateway WebSocket. This section is kept for historical reference.
3134
+
3135
+ Legacy behavior:
3136
+ - The Gateway could expose a simple TCP bridge for nodes (iOS/Android), typically on port `18790`.
3137
+
3138
+ Defaults:
3139
+ - enabled: `true`
3140
+ - port: `18790`
3141
+ - bind: `lan` (binds to `0.0.0.0`)
3142
+
3143
+ Bind modes:
3144
+ - `lan`: `0.0.0.0` (reachable on any interface, including LAN/Wi‑Fi and Tailscale)
3145
+ - `tailnet`: bind only to the machine’s Tailscale IP (recommended for Vienna ⇄ London)
3146
+ - `loopback`: `127.0.0.1` (local only)
3147
+ - `auto`: prefer tailnet IP if present, else `lan`
3148
+
3149
+ TLS:
3150
+ - `bridge.tls.enabled`: enable TLS for bridge connections (TLS-only when enabled).
3151
+ - `bridge.tls.autoGenerate`: generate a self-signed cert when no cert/key are present (default: true).
3152
+ - `bridge.tls.certPath` / `bridge.tls.keyPath`: PEM paths for the bridge certificate + private key.
3153
+ - `bridge.tls.caPath`: optional PEM CA bundle (custom roots or future mTLS).
3154
+
3155
+ When TLS is enabled, the Gateway advertises `bridgeTls=1` and `bridgeTlsSha256` in discovery TXT
3156
+ records so nodes can pin the certificate. Manual connections use trust-on-first-use if no
3157
+ fingerprint is stored yet.
3158
+ Auto-generated certs require `openssl` on PATH; if generation fails, the bridge will not start.
3159
+
3160
+ ```json5
3161
+ {
3162
+ bridge: {
3163
+ enabled: true,
3164
+ port: 18790,
3165
+ bind: "tailnet",
3166
+ tls: {
3167
+ enabled: true,
3168
+ // Uses ~/.clawdbot/bridge/tls/bridge-{cert,key}.pem when omitted.
3169
+ // certPath: "~/.clawdbot/bridge/tls/bridge-cert.pem",
3170
+ // keyPath: "~/.clawdbot/bridge/tls/bridge-key.pem"
3171
+ }
3172
+ }
3173
+ }
3174
+ ```
3175
+
3176
+ ### `discovery.mdns` (Bonjour / mDNS broadcast mode)
3177
+
3178
+ Controls LAN mDNS discovery broadcasts (`_moltbot-gw._tcp`).
3179
+
3180
+ - `minimal` (default): omit `cliPath` + `sshPort` from TXT records
3181
+ - `full`: include `cliPath` + `sshPort` in TXT records
3182
+ - `off`: disable mDNS broadcasts entirely
3183
+
3184
+ ```json5
3185
+ {
3186
+ discovery: { mdns: { mode: "minimal" } }
3187
+ }
3188
+ ```
3189
+
3190
+ ### `discovery.wideArea` (Wide-Area Bonjour / unicast DNS‑SD)
3191
+
3192
+ When enabled, the Gateway writes a unicast DNS-SD zone for `_moltbot-bridge._tcp` under `~/.clawdbot/dns/` using the standard discovery domain `moltbot.internal.`
3193
+
3194
+ To make iOS/Android discover across networks (Vienna ⇄ London), pair this with:
3195
+ - a DNS server on the gateway host serving `moltbot.internal.` (CoreDNS is recommended)
3196
+ - Tailscale **split DNS** so clients resolve `moltbot.internal` via that server
3197
+
3198
+ One-time setup helper (gateway host):
3199
+
3200
+ ```bash
3201
+ moltbot dns setup --apply
3202
+ ```
3203
+
3204
+ ```json5
3205
+ {
3206
+ discovery: { wideArea: { enabled: true } }
3207
+ }
3208
+ ```
3209
+
3210
+ ## Template variables
3211
+
3212
+ Template placeholders are expanded in `tools.media.*.models[].args` and `tools.media.models[].args` (and any future templated argument fields).
3213
+
3214
+ | Variable | Description |
3215
+ |----------|-------------|
3216
+ | `{{Body}}` | Full inbound message body |
3217
+ | `{{RawBody}}` | Raw inbound message body (no history/sender wrappers; best for command parsing) |
3218
+ | `{{BodyStripped}}` | Body with group mentions stripped (best default for agents) |
3219
+ | `{{From}}` | Sender identifier (E.164 for WhatsApp; may differ per channel) |
3220
+ | `{{To}}` | Destination identifier |
3221
+ | `{{MessageSid}}` | Channel message id (when available) |
3222
+ | `{{SessionId}}` | Current session UUID |
3223
+ | `{{IsNewSession}}` | `"true"` when a new session was created |
3224
+ | `{{MediaUrl}}` | Inbound media pseudo-URL (if present) |
3225
+ | `{{MediaPath}}` | Local media path (if downloaded) |
3226
+ | `{{MediaType}}` | Media type (image/audio/document/…) |
3227
+ | `{{Transcript}}` | Audio transcript (when enabled) |
3228
+ | `{{Prompt}}` | Resolved media prompt for CLI entries |
3229
+ | `{{MaxChars}}` | Resolved max output chars for CLI entries |
3230
+ | `{{ChatType}}` | `"direct"` or `"group"` |
3231
+ | `{{GroupSubject}}` | Group subject (best effort) |
3232
+ | `{{GroupMembers}}` | Group members preview (best effort) |
3233
+ | `{{SenderName}}` | Sender display name (best effort) |
3234
+ | `{{SenderE164}}` | Sender phone number (best effort) |
3235
+ | `{{Provider}}` | Provider hint (whatsapp|telegram|discord|googlechat|slack|signal|imessage|msteams|webchat|…) |
3236
+
3237
+ ## Cron (Gateway scheduler)
3238
+
3239
+ Cron is a Gateway-owned scheduler for wakeups and scheduled jobs. See [Cron jobs](/automation/cron-jobs) for the feature overview and CLI examples.
3240
+
3241
+ ```json5
3242
+ {
3243
+ cron: {
3244
+ enabled: true,
3245
+ maxConcurrentRuns: 2
3246
+ }
3247
+ }
3248
+ ```
3249
+
3250
+ ---
3251
+
3252
+ *Next: [Agent Runtime](/concepts/agent)* 🦞