durar-ai 2026.4.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (571) hide show
  1. package/CHANGELOG.md +5497 -0
  2. package/LICENSE +21 -0
  3. package/README.md +614 -0
  4. package/assets/avatar-placeholder.svg +19 -0
  5. package/assets/chrome-extension/icons/icon128.png +0 -0
  6. package/assets/chrome-extension/icons/icon16.png +0 -0
  7. package/assets/chrome-extension/icons/icon32.png +0 -0
  8. package/assets/chrome-extension/icons/icon48.png +0 -0
  9. package/assets/dmg-background-small.png +0 -0
  10. package/assets/dmg-background.png +0 -0
  11. package/docs/.i18n/README.md +72 -0
  12. package/docs/.i18n/ar-navigation.json +18 -0
  13. package/docs/.i18n/de-navigation.json +18 -0
  14. package/docs/.i18n/es-navigation.json +18 -0
  15. package/docs/.i18n/fr-navigation.json +18 -0
  16. package/docs/.i18n/glossary.ar.json +5 -0
  17. package/docs/.i18n/glossary.de.json +5 -0
  18. package/docs/.i18n/glossary.es.json +5 -0
  19. package/docs/.i18n/glossary.fr.json +5 -0
  20. package/docs/.i18n/glossary.id.json +5 -0
  21. package/docs/.i18n/glossary.it.json +5 -0
  22. package/docs/.i18n/glossary.ja-JP.json +14 -0
  23. package/docs/.i18n/glossary.ko.json +5 -0
  24. package/docs/.i18n/glossary.pl.json +5 -0
  25. package/docs/.i18n/glossary.pt-BR.json +5 -0
  26. package/docs/.i18n/glossary.tr.json +5 -0
  27. package/docs/.i18n/glossary.zh-CN.json +358 -0
  28. package/docs/.i18n/id-navigation.json +18 -0
  29. package/docs/.i18n/it-navigation.json +18 -0
  30. package/docs/.i18n/ja-navigation.json +18 -0
  31. package/docs/.i18n/ko-navigation.json +18 -0
  32. package/docs/.i18n/pl-navigation.json +18 -0
  33. package/docs/.i18n/pt-BR-navigation.json +18 -0
  34. package/docs/.i18n/tr-navigation.json +18 -0
  35. package/docs/.i18n/zh-Hans-navigation.json +544 -0
  36. package/docs/assets/install-script.svg +1 -0
  37. package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
  38. package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
  39. package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
  40. package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
  41. package/docs/assets/macos-onboarding/05-permissions.png +0 -0
  42. package/docs/assets/openclaw-logo-text-dark.png +0 -0
  43. package/docs/assets/openclaw-logo-text-dark.svg +418 -0
  44. package/docs/assets/openclaw-logo-text.png +0 -0
  45. package/docs/assets/openclaw-logo-text.svg +418 -0
  46. package/docs/assets/pixel-lobster.svg +60 -0
  47. package/docs/assets/showcase/agents-ui.jpg +0 -0
  48. package/docs/assets/showcase/bambu-cli.png +0 -0
  49. package/docs/assets/showcase/codexmonitor.png +0 -0
  50. package/docs/assets/showcase/gohome-grafana.png +0 -0
  51. package/docs/assets/showcase/ios-testflight.jpg +0 -0
  52. package/docs/assets/showcase/oura-health.png +0 -0
  53. package/docs/assets/showcase/padel-cli.svg +11 -0
  54. package/docs/assets/showcase/padel-screenshot.jpg +0 -0
  55. package/docs/assets/showcase/papla-tts.jpg +0 -0
  56. package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
  57. package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
  58. package/docs/assets/showcase/roborock-status.svg +13 -0
  59. package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
  60. package/docs/assets/showcase/snag.png +0 -0
  61. package/docs/assets/showcase/tesco-shop.jpg +0 -0
  62. package/docs/assets/showcase/wienerlinien.png +0 -0
  63. package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
  64. package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
  65. package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
  66. package/docs/assets/sponsors/blacksmith-light.svg +14 -0
  67. package/docs/assets/sponsors/blacksmith.svg +14 -0
  68. package/docs/assets/sponsors/convex-light.svg +16 -0
  69. package/docs/assets/sponsors/convex.svg +16 -0
  70. package/docs/assets/sponsors/github-light.svg +3 -0
  71. package/docs/assets/sponsors/github.svg +3 -0
  72. package/docs/assets/sponsors/nvidia-dark.svg +9 -0
  73. package/docs/assets/sponsors/nvidia.svg +9 -0
  74. package/docs/assets/sponsors/openai-light.svg +3 -0
  75. package/docs/assets/sponsors/openai.svg +3 -0
  76. package/docs/assets/sponsors/vercel-light.svg +5 -0
  77. package/docs/assets/sponsors/vercel.svg +5 -0
  78. package/docs/auth-credential-semantics.md +80 -0
  79. package/docs/automation/auth-monitoring.md +8 -0
  80. package/docs/automation/clawflow.md +8 -0
  81. package/docs/automation/cron-jobs.md +410 -0
  82. package/docs/automation/cron-vs-heartbeat.md +8 -0
  83. package/docs/automation/gmail-pubsub.md +8 -0
  84. package/docs/automation/hooks.md +303 -0
  85. package/docs/automation/index.md +115 -0
  86. package/docs/automation/poll.md +8 -0
  87. package/docs/automation/standing-orders.md +254 -0
  88. package/docs/automation/taskflow.md +82 -0
  89. package/docs/automation/tasks.md +323 -0
  90. package/docs/automation/troubleshooting.md +8 -0
  91. package/docs/automation/webhook.md +8 -0
  92. package/docs/brave-search.md +103 -0
  93. package/docs/channels/bluebubbles.md +435 -0
  94. package/docs/channels/broadcast-groups.md +442 -0
  95. package/docs/channels/channel-routing.md +139 -0
  96. package/docs/channels/discord.md +1254 -0
  97. package/docs/channels/feishu.md +793 -0
  98. package/docs/channels/googlechat.md +270 -0
  99. package/docs/channels/group-messages.md +84 -0
  100. package/docs/channels/groups.md +410 -0
  101. package/docs/channels/imessage.md +427 -0
  102. package/docs/channels/index.md +50 -0
  103. package/docs/channels/irc.md +252 -0
  104. package/docs/channels/line.md +225 -0
  105. package/docs/channels/location.md +56 -0
  106. package/docs/channels/matrix.md +869 -0
  107. package/docs/channels/mattermost.md +472 -0
  108. package/docs/channels/msteams.md +805 -0
  109. package/docs/channels/nextcloud-talk.md +149 -0
  110. package/docs/channels/nostr.md +252 -0
  111. package/docs/channels/pairing.md +129 -0
  112. package/docs/channels/qqbot.md +193 -0
  113. package/docs/channels/signal.md +337 -0
  114. package/docs/channels/slack.md +681 -0
  115. package/docs/channels/synology-chat.md +185 -0
  116. package/docs/channels/telegram.md +1072 -0
  117. package/docs/channels/tlon.md +290 -0
  118. package/docs/channels/troubleshooting.md +133 -0
  119. package/docs/channels/twitch.md +394 -0
  120. package/docs/channels/whatsapp.md +488 -0
  121. package/docs/channels/zalo.md +254 -0
  122. package/docs/channels/zalouser.md +195 -0
  123. package/docs/ci.md +66 -0
  124. package/docs/cli/acp.md +316 -0
  125. package/docs/cli/agent.md +57 -0
  126. package/docs/cli/agents.md +220 -0
  127. package/docs/cli/approvals.md +136 -0
  128. package/docs/cli/backup.md +84 -0
  129. package/docs/cli/browser.md +233 -0
  130. package/docs/cli/channels.md +131 -0
  131. package/docs/cli/clawbot.md +21 -0
  132. package/docs/cli/completion.md +35 -0
  133. package/docs/cli/config.md +353 -0
  134. package/docs/cli/configure.md +70 -0
  135. package/docs/cli/cron.md +167 -0
  136. package/docs/cli/daemon.md +57 -0
  137. package/docs/cli/dashboard.md +22 -0
  138. package/docs/cli/devices.md +171 -0
  139. package/docs/cli/directory.md +63 -0
  140. package/docs/cli/dns.md +48 -0
  141. package/docs/cli/docs.md +28 -0
  142. package/docs/cli/doctor.md +63 -0
  143. package/docs/cli/flows.md +18 -0
  144. package/docs/cli/gateway.md +307 -0
  145. package/docs/cli/health.md +36 -0
  146. package/docs/cli/hooks.md +337 -0
  147. package/docs/cli/index.md +1836 -0
  148. package/docs/cli/logs.md +59 -0
  149. package/docs/cli/mcp.md +505 -0
  150. package/docs/cli/memory.md +139 -0
  151. package/docs/cli/message.md +300 -0
  152. package/docs/cli/models.md +136 -0
  153. package/docs/cli/node.md +137 -0
  154. package/docs/cli/nodes.md +66 -0
  155. package/docs/cli/onboard.md +171 -0
  156. package/docs/cli/pairing.md +65 -0
  157. package/docs/cli/plugins.md +305 -0
  158. package/docs/cli/qr.md +52 -0
  159. package/docs/cli/reset.md +35 -0
  160. package/docs/cli/sandbox.md +197 -0
  161. package/docs/cli/secrets.md +197 -0
  162. package/docs/cli/security.md +86 -0
  163. package/docs/cli/sessions.md +113 -0
  164. package/docs/cli/setup.md +45 -0
  165. package/docs/cli/skills.md +59 -0
  166. package/docs/cli/status.md +35 -0
  167. package/docs/cli/system.md +71 -0
  168. package/docs/cli/tui.md +30 -0
  169. package/docs/cli/uninstall.md +39 -0
  170. package/docs/cli/update.md +113 -0
  171. package/docs/cli/voicecall.md +34 -0
  172. package/docs/cli/webhooks.md +91 -0
  173. package/docs/concepts/agent-loop.md +168 -0
  174. package/docs/concepts/agent-workspace.md +246 -0
  175. package/docs/concepts/agent.md +129 -0
  176. package/docs/concepts/architecture.md +156 -0
  177. package/docs/concepts/compaction.md +122 -0
  178. package/docs/concepts/context-engine.md +274 -0
  179. package/docs/concepts/context.md +179 -0
  180. package/docs/concepts/delegate-architecture.md +307 -0
  181. package/docs/concepts/dreaming.md +173 -0
  182. package/docs/concepts/features.md +76 -0
  183. package/docs/concepts/markdown-formatting.md +130 -0
  184. package/docs/concepts/memory-builtin.md +105 -0
  185. package/docs/concepts/memory-honcho.md +140 -0
  186. package/docs/concepts/memory-qmd.md +163 -0
  187. package/docs/concepts/memory-search.md +141 -0
  188. package/docs/concepts/memory.md +121 -0
  189. package/docs/concepts/messages.md +161 -0
  190. package/docs/concepts/model-failover.md +349 -0
  191. package/docs/concepts/model-providers.md +799 -0
  192. package/docs/concepts/models.md +255 -0
  193. package/docs/concepts/multi-agent.md +615 -0
  194. package/docs/concepts/oauth.md +225 -0
  195. package/docs/concepts/presence.md +102 -0
  196. package/docs/concepts/queue.md +89 -0
  197. package/docs/concepts/retry.md +69 -0
  198. package/docs/concepts/session-pruning.md +92 -0
  199. package/docs/concepts/session-tool.md +141 -0
  200. package/docs/concepts/session.md +116 -0
  201. package/docs/concepts/soul.md +110 -0
  202. package/docs/concepts/streaming.md +161 -0
  203. package/docs/concepts/system-prompt.md +182 -0
  204. package/docs/concepts/timezone.md +97 -0
  205. package/docs/concepts/typebox.md +307 -0
  206. package/docs/concepts/typing-indicators.md +69 -0
  207. package/docs/concepts/usage-tracking.md +59 -0
  208. package/docs/date-time.md +128 -0
  209. package/docs/debug/node-issue.md +85 -0
  210. package/docs/diagnostics/flags.md +91 -0
  211. package/docs/docs.json +1601 -0
  212. package/docs/gateway/authentication.md +218 -0
  213. package/docs/gateway/background-process.md +131 -0
  214. package/docs/gateway/bonjour.md +179 -0
  215. package/docs/gateway/bridge-protocol.md +89 -0
  216. package/docs/gateway/cli-backends.md +310 -0
  217. package/docs/gateway/configuration-examples.md +631 -0
  218. package/docs/gateway/configuration-reference.md +3618 -0
  219. package/docs/gateway/configuration.md +698 -0
  220. package/docs/gateway/discovery.md +141 -0
  221. package/docs/gateway/doctor.md +494 -0
  222. package/docs/gateway/gateway-lock.md +37 -0
  223. package/docs/gateway/health.md +61 -0
  224. package/docs/gateway/heartbeat.md +443 -0
  225. package/docs/gateway/index.md +367 -0
  226. package/docs/gateway/local-models.md +163 -0
  227. package/docs/gateway/logging.md +113 -0
  228. package/docs/gateway/multiple-gateways.md +120 -0
  229. package/docs/gateway/network-model.md +25 -0
  230. package/docs/gateway/openai-http-api.md +280 -0
  231. package/docs/gateway/openresponses-http-api.md +340 -0
  232. package/docs/gateway/openshell.md +307 -0
  233. package/docs/gateway/pairing.md +138 -0
  234. package/docs/gateway/protocol.md +588 -0
  235. package/docs/gateway/remote-gateway-readme.md +164 -0
  236. package/docs/gateway/remote.md +251 -0
  237. package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +141 -0
  238. package/docs/gateway/sandboxing.md +473 -0
  239. package/docs/gateway/secrets-plan-contract.md +116 -0
  240. package/docs/gateway/secrets.md +541 -0
  241. package/docs/gateway/security/index.md +1362 -0
  242. package/docs/gateway/tailscale.md +136 -0
  243. package/docs/gateway/tools-invoke-http-api.md +161 -0
  244. package/docs/gateway/troubleshooting.md +451 -0
  245. package/docs/gateway/trusted-proxy-auth.md +399 -0
  246. package/docs/help/debugging.md +168 -0
  247. package/docs/help/environment.md +165 -0
  248. package/docs/help/faq.md +3244 -0
  249. package/docs/help/index.md +28 -0
  250. package/docs/help/scripts.md +27 -0
  251. package/docs/help/testing.md +640 -0
  252. package/docs/help/troubleshooting.md +372 -0
  253. package/docs/images/configure-model-picker-unsearchable.png +0 -0
  254. package/docs/images/feishu-step2-create-app.png +0 -0
  255. package/docs/images/feishu-step3-credentials.png +0 -0
  256. package/docs/images/feishu-step4-permissions.png +0 -0
  257. package/docs/images/feishu-step5-bot-capability.png +0 -0
  258. package/docs/images/feishu-step6-event-subscription.png +0 -0
  259. package/docs/images/feishu-verification-token.png +0 -0
  260. package/docs/images/groups-flow.svg +52 -0
  261. package/docs/images/mobile-ui-screenshot.png +0 -0
  262. package/docs/index.md +196 -0
  263. package/docs/install/ansible.md +230 -0
  264. package/docs/install/azure.md +311 -0
  265. package/docs/install/bun.md +55 -0
  266. package/docs/install/clawdock.md +106 -0
  267. package/docs/install/development-channels.md +131 -0
  268. package/docs/install/digitalocean.md +129 -0
  269. package/docs/install/docker-vm-runtime.md +142 -0
  270. package/docs/install/docker.md +412 -0
  271. package/docs/install/exe-dev.md +133 -0
  272. package/docs/install/fly.md +504 -0
  273. package/docs/install/gcp.md +412 -0
  274. package/docs/install/hetzner.md +259 -0
  275. package/docs/install/index.md +212 -0
  276. package/docs/install/installer.md +443 -0
  277. package/docs/install/kubernetes.md +192 -0
  278. package/docs/install/macos-vm.md +281 -0
  279. package/docs/install/migrating-matrix.md +349 -0
  280. package/docs/install/migrating.md +112 -0
  281. package/docs/install/nix.md +89 -0
  282. package/docs/install/node.md +144 -0
  283. package/docs/install/northflank.mdx +42 -0
  284. package/docs/install/oracle.md +158 -0
  285. package/docs/install/podman.md +210 -0
  286. package/docs/install/railway.mdx +90 -0
  287. package/docs/install/raspberry-pi.md +159 -0
  288. package/docs/install/render.mdx +165 -0
  289. package/docs/install/uninstall.md +128 -0
  290. package/docs/install/updating.md +142 -0
  291. package/docs/logging.md +389 -0
  292. package/docs/nav-tabs-underline.js +100 -0
  293. package/docs/network.md +69 -0
  294. package/docs/nodes/audio.md +191 -0
  295. package/docs/nodes/camera.md +162 -0
  296. package/docs/nodes/images.md +73 -0
  297. package/docs/nodes/index.md +408 -0
  298. package/docs/nodes/location-command.md +98 -0
  299. package/docs/nodes/media-understanding.md +432 -0
  300. package/docs/nodes/talk.md +92 -0
  301. package/docs/nodes/troubleshooting.md +123 -0
  302. package/docs/nodes/voicewake.md +66 -0
  303. package/docs/perplexity.md +181 -0
  304. package/docs/pi-dev.md +80 -0
  305. package/docs/pi.md +570 -0
  306. package/docs/platforms/android.md +244 -0
  307. package/docs/platforms/digitalocean.md +266 -0
  308. package/docs/platforms/index.md +55 -0
  309. package/docs/platforms/ios.md +223 -0
  310. package/docs/platforms/linux.md +100 -0
  311. package/docs/platforms/mac/bundled-gateway.md +75 -0
  312. package/docs/platforms/mac/canvas.md +125 -0
  313. package/docs/platforms/mac/child-process.md +69 -0
  314. package/docs/platforms/mac/dev-setup.md +107 -0
  315. package/docs/platforms/mac/health.md +34 -0
  316. package/docs/platforms/mac/icon.md +31 -0
  317. package/docs/platforms/mac/logging.md +57 -0
  318. package/docs/platforms/mac/menu-bar.md +81 -0
  319. package/docs/platforms/mac/peekaboo.md +65 -0
  320. package/docs/platforms/mac/permissions.md +50 -0
  321. package/docs/platforms/mac/remote.md +84 -0
  322. package/docs/platforms/mac/signing.md +47 -0
  323. package/docs/platforms/mac/skills.md +40 -0
  324. package/docs/platforms/mac/voice-overlay.md +60 -0
  325. package/docs/platforms/mac/voicewake.md +67 -0
  326. package/docs/platforms/mac/webchat.md +51 -0
  327. package/docs/platforms/mac/xpc.md +61 -0
  328. package/docs/platforms/macos.md +229 -0
  329. package/docs/platforms/oracle.md +305 -0
  330. package/docs/platforms/raspberry-pi.md +420 -0
  331. package/docs/platforms/windows.md +241 -0
  332. package/docs/plugins/agent-tools.md +10 -0
  333. package/docs/plugins/architecture.md +1609 -0
  334. package/docs/plugins/building-extensions.md +10 -0
  335. package/docs/plugins/building-plugins.md +319 -0
  336. package/docs/plugins/bundles.md +292 -0
  337. package/docs/plugins/community.md +149 -0
  338. package/docs/plugins/manifest.md +412 -0
  339. package/docs/plugins/sdk-channel-plugins.md +508 -0
  340. package/docs/plugins/sdk-entrypoints.md +210 -0
  341. package/docs/plugins/sdk-migration.md +359 -0
  342. package/docs/plugins/sdk-overview.md +475 -0
  343. package/docs/plugins/sdk-provider-plugins.md +712 -0
  344. package/docs/plugins/sdk-runtime.md +381 -0
  345. package/docs/plugins/sdk-setup.md +516 -0
  346. package/docs/plugins/sdk-testing.md +263 -0
  347. package/docs/plugins/voice-call.md +466 -0
  348. package/docs/plugins/zalouser.md +78 -0
  349. package/docs/prose.md +134 -0
  350. package/docs/providers/anthropic.md +402 -0
  351. package/docs/providers/bedrock-mantle.md +91 -0
  352. package/docs/providers/bedrock.md +273 -0
  353. package/docs/providers/chutes.md +103 -0
  354. package/docs/providers/claude-max-api-proxy.md +163 -0
  355. package/docs/providers/cloudflare-ai-gateway.md +71 -0
  356. package/docs/providers/deepgram.md +93 -0
  357. package/docs/providers/deepseek.md +53 -0
  358. package/docs/providers/fireworks.md +69 -0
  359. package/docs/providers/github-copilot.md +80 -0
  360. package/docs/providers/glm.md +68 -0
  361. package/docs/providers/google.md +149 -0
  362. package/docs/providers/groq.md +105 -0
  363. package/docs/providers/huggingface.md +193 -0
  364. package/docs/providers/index.md +81 -0
  365. package/docs/providers/kilocode.md +89 -0
  366. package/docs/providers/litellm.md +159 -0
  367. package/docs/providers/minimax.md +281 -0
  368. package/docs/providers/mistral.md +68 -0
  369. package/docs/providers/models.md +56 -0
  370. package/docs/providers/moonshot.md +224 -0
  371. package/docs/providers/nvidia.md +58 -0
  372. package/docs/providers/ollama.md +379 -0
  373. package/docs/providers/openai.md +472 -0
  374. package/docs/providers/opencode-go.md +45 -0
  375. package/docs/providers/opencode.md +68 -0
  376. package/docs/providers/openrouter.md +59 -0
  377. package/docs/providers/perplexity-provider.md +62 -0
  378. package/docs/providers/qianfan.md +90 -0
  379. package/docs/providers/qwen.md +128 -0
  380. package/docs/providers/qwen_modelstudio.md +137 -0
  381. package/docs/providers/sglang.md +115 -0
  382. package/docs/providers/stepfun.md +152 -0
  383. package/docs/providers/synthetic.md +101 -0
  384. package/docs/providers/together.md +70 -0
  385. package/docs/providers/venice.md +282 -0
  386. package/docs/providers/vercel-ai-gateway.md +60 -0
  387. package/docs/providers/vllm.md +103 -0
  388. package/docs/providers/volcengine.md +94 -0
  389. package/docs/providers/xai.md +94 -0
  390. package/docs/providers/xiaomi.md +89 -0
  391. package/docs/providers/zai.md +75 -0
  392. package/docs/reference/AGENTS.default.md +126 -0
  393. package/docs/reference/RELEASING.md +138 -0
  394. package/docs/reference/api-usage-costs.md +198 -0
  395. package/docs/reference/credits.md +30 -0
  396. package/docs/reference/device-models.md +47 -0
  397. package/docs/reference/memory-config.md +421 -0
  398. package/docs/reference/prompt-caching.md +344 -0
  399. package/docs/reference/rpc.md +43 -0
  400. package/docs/reference/secretref-credential-surface.md +148 -0
  401. package/docs/reference/secretref-user-supplied-credentials-matrix.json +607 -0
  402. package/docs/reference/session-management-compaction.md +352 -0
  403. package/docs/reference/templates/AGENTS.dev.md +84 -0
  404. package/docs/reference/templates/AGENTS.md +219 -0
  405. package/docs/reference/templates/BOOT.md +12 -0
  406. package/docs/reference/templates/BOOTSTRAP.md +62 -0
  407. package/docs/reference/templates/CLAUDE.md +1 -0
  408. package/docs/reference/templates/HEARTBEAT.md +14 -0
  409. package/docs/reference/templates/IDENTITY.dev.md +48 -0
  410. package/docs/reference/templates/IDENTITY.md +30 -0
  411. package/docs/reference/templates/SOUL.dev.md +77 -0
  412. package/docs/reference/templates/SOUL.md +45 -0
  413. package/docs/reference/templates/TOOLS.dev.md +25 -0
  414. package/docs/reference/templates/TOOLS.md +47 -0
  415. package/docs/reference/templates/USER.dev.md +19 -0
  416. package/docs/reference/templates/USER.md +24 -0
  417. package/docs/reference/test.md +119 -0
  418. package/docs/reference/token-use.md +197 -0
  419. package/docs/reference/transcript-hygiene.md +151 -0
  420. package/docs/reference/wizard.md +245 -0
  421. package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
  422. package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
  423. package/docs/security/formal-verification.md +167 -0
  424. package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +9 -0
  425. package/docs/snippets/plugin-publish/minimal-package.json +16 -0
  426. package/docs/start/bootstrapping.md +41 -0
  427. package/docs/start/docs-directory.md +67 -0
  428. package/docs/start/getting-started.md +148 -0
  429. package/docs/start/hubs.md +199 -0
  430. package/docs/start/lore.md +219 -0
  431. package/docs/start/onboarding-overview.md +69 -0
  432. package/docs/start/onboarding.md +92 -0
  433. package/docs/start/openclaw.md +225 -0
  434. package/docs/start/quickstart.md +22 -0
  435. package/docs/start/setup.md +172 -0
  436. package/docs/start/showcase.md +418 -0
  437. package/docs/start/wizard-cli-automation.md +233 -0
  438. package/docs/start/wizard-cli-reference.md +324 -0
  439. package/docs/start/wizard.md +127 -0
  440. package/docs/style.css +37 -0
  441. package/docs/tools/acp-agents.md +837 -0
  442. package/docs/tools/agent-send.md +100 -0
  443. package/docs/tools/apply-patch.md +52 -0
  444. package/docs/tools/brave-search.md +107 -0
  445. package/docs/tools/browser-linux-troubleshooting.md +145 -0
  446. package/docs/tools/browser-login.md +73 -0
  447. package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +221 -0
  448. package/docs/tools/browser.md +890 -0
  449. package/docs/tools/btw.md +142 -0
  450. package/docs/tools/capability-cookbook.md +119 -0
  451. package/docs/tools/clawhub.md +348 -0
  452. package/docs/tools/code-execution.md +90 -0
  453. package/docs/tools/creating-skills.md +119 -0
  454. package/docs/tools/diffs.md +434 -0
  455. package/docs/tools/duckduckgo-search.md +102 -0
  456. package/docs/tools/elevated.md +116 -0
  457. package/docs/tools/exa-search.md +127 -0
  458. package/docs/tools/exec-approvals.md +635 -0
  459. package/docs/tools/exec.md +237 -0
  460. package/docs/tools/firecrawl.md +147 -0
  461. package/docs/tools/gemini-search.md +98 -0
  462. package/docs/tools/grok-search.md +102 -0
  463. package/docs/tools/image-generation.md +139 -0
  464. package/docs/tools/index.md +174 -0
  465. package/docs/tools/kimi-search.md +98 -0
  466. package/docs/tools/llm-task.md +119 -0
  467. package/docs/tools/lobster.md +348 -0
  468. package/docs/tools/loop-detection.md +100 -0
  469. package/docs/tools/minimax-search.md +99 -0
  470. package/docs/tools/multi-agent-sandbox-tools.md +373 -0
  471. package/docs/tools/ollama-search.md +100 -0
  472. package/docs/tools/pdf.md +176 -0
  473. package/docs/tools/perplexity-search.md +185 -0
  474. package/docs/tools/plugin.md +348 -0
  475. package/docs/tools/reactions.md +78 -0
  476. package/docs/tools/searxng-search.md +132 -0
  477. package/docs/tools/skills-config.md +133 -0
  478. package/docs/tools/skills.md +377 -0
  479. package/docs/tools/slash-commands.md +322 -0
  480. package/docs/tools/subagents.md +341 -0
  481. package/docs/tools/tavily.md +129 -0
  482. package/docs/tools/thinking.md +102 -0
  483. package/docs/tools/tts.md +452 -0
  484. package/docs/tools/web-fetch.md +159 -0
  485. package/docs/tools/web.md +417 -0
  486. package/docs/tts.md +452 -0
  487. package/docs/vps.md +115 -0
  488. package/docs/web/control-ui.md +318 -0
  489. package/docs/web/dashboard.md +93 -0
  490. package/docs/web/index.md +126 -0
  491. package/docs/web/tui.md +176 -0
  492. package/docs/web/webchat.md +77 -0
  493. package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
  494. package/docs/whatsapp-openclaw.jpg +0 -0
  495. package/durar.mjs +180 -0
  496. package/package.json +1259 -0
  497. package/scripts/npm-runner.mjs +111 -0
  498. package/scripts/postinstall-bundled-plugins.mjs +188 -0
  499. package/skills/1password/SKILL.md +70 -0
  500. package/skills/1password/references/cli-examples.md +29 -0
  501. package/skills/1password/references/get-started.md +17 -0
  502. package/skills/apple-notes/SKILL.md +77 -0
  503. package/skills/apple-reminders/SKILL.md +118 -0
  504. package/skills/bear-notes/SKILL.md +107 -0
  505. package/skills/blogwatcher/SKILL.md +69 -0
  506. package/skills/blucli/SKILL.md +47 -0
  507. package/skills/bluebubbles/SKILL.md +131 -0
  508. package/skills/camsnap/SKILL.md +45 -0
  509. package/skills/canvas/SKILL.md +199 -0
  510. package/skills/clawhub/SKILL.md +77 -0
  511. package/skills/coding-agent/SKILL.md +316 -0
  512. package/skills/discord/SKILL.md +197 -0
  513. package/skills/eightctl/SKILL.md +50 -0
  514. package/skills/gemini/SKILL.md +43 -0
  515. package/skills/gh-issues/SKILL.md +885 -0
  516. package/skills/gifgrep/SKILL.md +79 -0
  517. package/skills/github/SKILL.md +163 -0
  518. package/skills/gog/SKILL.md +116 -0
  519. package/skills/goplaces/SKILL.md +52 -0
  520. package/skills/healthcheck/SKILL.md +245 -0
  521. package/skills/himalaya/SKILL.md +257 -0
  522. package/skills/himalaya/references/configuration.md +184 -0
  523. package/skills/himalaya/references/message-composition.md +199 -0
  524. package/skills/imsg/SKILL.md +122 -0
  525. package/skills/mcporter/SKILL.md +61 -0
  526. package/skills/model-usage/SKILL.md +69 -0
  527. package/skills/model-usage/references/codexbar-cli.md +33 -0
  528. package/skills/model-usage/scripts/model_usage.py +320 -0
  529. package/skills/model-usage/scripts/test_model_usage.py +40 -0
  530. package/skills/nano-pdf/SKILL.md +38 -0
  531. package/skills/node-connect/SKILL.md +142 -0
  532. package/skills/notion/SKILL.md +174 -0
  533. package/skills/obsidian/SKILL.md +81 -0
  534. package/skills/openai-whisper/SKILL.md +38 -0
  535. package/skills/openai-whisper-api/SKILL.md +62 -0
  536. package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
  537. package/skills/openhue/SKILL.md +112 -0
  538. package/skills/oracle/SKILL.md +125 -0
  539. package/skills/ordercli/SKILL.md +78 -0
  540. package/skills/peekaboo/SKILL.md +190 -0
  541. package/skills/sag/SKILL.md +87 -0
  542. package/skills/session-logs/SKILL.md +151 -0
  543. package/skills/sherpa-onnx-tts/SKILL.md +109 -0
  544. package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
  545. package/skills/skill-creator/SKILL.md +372 -0
  546. package/skills/skill-creator/license.txt +202 -0
  547. package/skills/skill-creator/scripts/init_skill.py +378 -0
  548. package/skills/skill-creator/scripts/package_skill.py +139 -0
  549. package/skills/skill-creator/scripts/quick_validate.py +159 -0
  550. package/skills/skill-creator/scripts/test_package_skill.py +160 -0
  551. package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
  552. package/skills/slack/SKILL.md +144 -0
  553. package/skills/songsee/SKILL.md +49 -0
  554. package/skills/sonoscli/SKILL.md +65 -0
  555. package/skills/spotify-player/SKILL.md +64 -0
  556. package/skills/summarize/SKILL.md +87 -0
  557. package/skills/taskflow/SKILL.md +149 -0
  558. package/skills/taskflow/examples/inbox-triage.lobster +33 -0
  559. package/skills/taskflow/examples/pr-intake.lobster +32 -0
  560. package/skills/taskflow-inbox-triage/SKILL.md +119 -0
  561. package/skills/things-mac/SKILL.md +86 -0
  562. package/skills/tmux/SKILL.md +170 -0
  563. package/skills/tmux/scripts/find-sessions.sh +112 -0
  564. package/skills/tmux/scripts/wait-for-text.sh +83 -0
  565. package/skills/trello/SKILL.md +108 -0
  566. package/skills/video-frames/SKILL.md +46 -0
  567. package/skills/video-frames/scripts/frame.sh +81 -0
  568. package/skills/voice-call/SKILL.md +45 -0
  569. package/skills/wacli/SKILL.md +72 -0
  570. package/skills/weather/SKILL.md +129 -0
  571. package/skills/xurl/SKILL.md +461 -0
@@ -0,0 +1,129 @@
1
+ ---
2
+ summary: "Tavily search and extract tools"
3
+ read_when:
4
+ - You want Tavily-backed web search
5
+ - You need a Tavily API key
6
+ - You want Tavily as a web_search provider
7
+ - You want content extraction from URLs
8
+ title: "Tavily"
9
+ ---
10
+
11
+ # Tavily
12
+
13
+ Durar can use **Tavily** in two ways:
14
+
15
+ - as the `web_search` provider
16
+ - as explicit plugin tools: `tavily_search` and `tavily_extract`
17
+
18
+ Tavily is a search API designed for AI applications, returning structured results
19
+ optimized for LLM consumption. It supports configurable search depth, topic
20
+ filtering, domain filters, AI-generated answer summaries, and content extraction
21
+ from URLs (including JavaScript-rendered pages).
22
+
23
+ ## Get an API key
24
+
25
+ 1. Create a Tavily account at [tavily.com](https://tavily.com/).
26
+ 2. Generate an API key in the dashboard.
27
+ 3. Store it in config or set `TAVILY_API_KEY` in the gateway environment.
28
+
29
+ ## Configure Tavily search
30
+
31
+ ```json5
32
+ {
33
+ plugins: {
34
+ entries: {
35
+ tavily: {
36
+ enabled: true,
37
+ config: {
38
+ webSearch: {
39
+ apiKey: "tvly-...", // optional if TAVILY_API_KEY is set
40
+ baseUrl: "https://api.tavily.com",
41
+ },
42
+ },
43
+ },
44
+ },
45
+ },
46
+ tools: {
47
+ web: {
48
+ search: {
49
+ provider: "tavily",
50
+ },
51
+ },
52
+ },
53
+ }
54
+ ```
55
+
56
+ Notes:
57
+
58
+ - Choosing Tavily in onboarding or `Durar configure --section web` enables
59
+ the bundled Tavily plugin automatically.
60
+ - Store Tavily config under `plugins.entries.tavily.config.webSearch.*`.
61
+ - `web_search` with Tavily supports `query` and `count` (up to 20 results).
62
+ - For Tavily-specific controls like `search_depth`, `topic`, `include_answer`,
63
+ or domain filters, use `tavily_search`.
64
+
65
+ ## Tavily plugin tools
66
+
67
+ ### `tavily_search`
68
+
69
+ Use this when you want Tavily-specific search controls instead of generic
70
+ `web_search`.
71
+
72
+ | Parameter | Description |
73
+ | ----------------- | --------------------------------------------------------------------- |
74
+ | `query` | Search query string (keep under 400 characters) |
75
+ | `search_depth` | `basic` (default, balanced) or `advanced` (highest relevance, slower) |
76
+ | `topic` | `general` (default), `news` (real-time updates), or `finance` |
77
+ | `max_results` | Number of results, 1-20 (default: 5) |
78
+ | `include_answer` | Include an AI-generated answer summary (default: false) |
79
+ | `time_range` | Filter by recency: `day`, `week`, `month`, or `year` |
80
+ | `include_domains` | Array of domains to restrict results to |
81
+ | `exclude_domains` | Array of domains to exclude from results |
82
+
83
+ **Search depth:**
84
+
85
+ | Depth | Speed | Relevance | Best for |
86
+ | ---------- | ------ | --------- | ----------------------------------- |
87
+ | `basic` | Faster | High | General-purpose queries (default) |
88
+ | `advanced` | Slower | Highest | Precision, specific facts, research |
89
+
90
+ ### `tavily_extract`
91
+
92
+ Use this to extract clean content from one or more URLs. Handles
93
+ JavaScript-rendered pages and supports query-focused chunking for targeted
94
+ extraction.
95
+
96
+ | Parameter | Description |
97
+ | ------------------- | ---------------------------------------------------------- |
98
+ | `urls` | Array of URLs to extract (1-20 per request) |
99
+ | `query` | Rerank extracted chunks by relevance to this query |
100
+ | `extract_depth` | `basic` (default, fast) or `advanced` (for JS-heavy pages) |
101
+ | `chunks_per_source` | Chunks per URL, 1-5 (requires `query`) |
102
+ | `include_images` | Include image URLs in results (default: false) |
103
+
104
+ **Extract depth:**
105
+
106
+ | Depth | When to use |
107
+ | ---------- | ----------------------------------------- |
108
+ | `basic` | Simple pages - try this first |
109
+ | `advanced` | JS-rendered SPAs, dynamic content, tables |
110
+
111
+ Tips:
112
+
113
+ - Max 20 URLs per request. Batch larger lists into multiple calls.
114
+ - Use `query` + `chunks_per_source` to get only relevant content instead of full pages.
115
+ - Try `basic` first; fall back to `advanced` if content is missing or incomplete.
116
+
117
+ ## Choosing the right tool
118
+
119
+ | Need | Tool |
120
+ | ------------------------------------ | ---------------- |
121
+ | Quick web search, no special options | `web_search` |
122
+ | Search with depth, topic, AI answers | `tavily_search` |
123
+ | Extract content from specific URLs | `tavily_extract` |
124
+
125
+ ## Related
126
+
127
+ - [Web Search overview](/tools/web) -- all providers and auto-detection
128
+ - [Firecrawl](/tools/firecrawl) -- search + scraping with content extraction
129
+ - [Exa Search](/tools/exa-search) -- neural search with content extraction
@@ -0,0 +1,102 @@
1
+ ---
2
+ summary: "Directive syntax for /think, /fast, /verbose, and reasoning visibility"
3
+ read_when:
4
+ - Adjusting thinking, fast-mode, or verbose directive parsing or defaults
5
+ title: "Thinking Levels"
6
+ ---
7
+
8
+ # Thinking Levels (/think directives)
9
+
10
+ ## What it does
11
+
12
+ - Inline directive in any inbound body: `/t <level>`, `/think:<level>`, or `/thinking <level>`.
13
+ - Levels (aliases): `off | minimal | low | medium | high | xhigh | adaptive`
14
+ - minimal → “think”
15
+ - low → “think hard”
16
+ - medium → “think harder”
17
+ - high → “ultrathink” (max budget)
18
+ - xhigh → “ultrathink+” (GPT-5.2 + Codex models only)
19
+ - adaptive → provider-managed adaptive reasoning budget (supported for Anthropic Claude 4.6 model family)
20
+ - `x-high`, `x_high`, `extra-high`, `extra high`, and `extra_high` map to `xhigh`.
21
+ - `highest`, `max` map to `high`.
22
+ - Provider notes:
23
+ - Anthropic Claude 4.6 models default to `adaptive` when no explicit thinking level is set.
24
+ - MiniMax (`minimax/*`) on the Anthropic-compatible streaming path defaults to `thinking: { type: "disabled" }` unless you explicitly set thinking in model params or request params. This avoids leaked `reasoning_content` deltas from MiniMax's non-native Anthropic stream format.
25
+ - Z.AI (`zai/*`) only supports binary thinking (`on`/`off`). Any non-`off` level is treated as `on` (mapped to `low`).
26
+ - Moonshot (`moonshot/*`) maps `/think off` to `thinking: { type: "disabled" }` and any non-`off` level to `thinking: { type: "enabled" }`. When thinking is enabled, Moonshot only accepts `tool_choice` `auto|none`; Durar normalizes incompatible values to `auto`.
27
+
28
+ ## Resolution order
29
+
30
+ 1. Inline directive on the message (applies only to that message).
31
+ 2. Session override (set by sending a directive-only message).
32
+ 3. Per-agent default (`agents.list[].thinkingDefault` in config).
33
+ 4. Global default (`agents.defaults.thinkingDefault` in config).
34
+ 5. Fallback: `adaptive` for Anthropic Claude 4.6 models, `low` for other reasoning-capable models, `off` otherwise.
35
+
36
+ ## Setting a session default
37
+
38
+ - Send a message that is **only** the directive (whitespace allowed), e.g. `/think:medium` or `/t high`.
39
+ - That sticks for the current session (per-sender by default); cleared by `/think:off` or session idle reset.
40
+ - Confirmation reply is sent (`Thinking level set to high.` / `Thinking disabled.`). If the level is invalid (e.g. `/thinking big`), the command is rejected with a hint and the session state is left unchanged.
41
+ - Send `/think` (or `/think:`) with no argument to see the current thinking level.
42
+
43
+ ## Application by agent
44
+
45
+ - **Embedded Pi**: the resolved level is passed to the in-process Pi agent runtime.
46
+
47
+ ## Fast mode (/fast)
48
+
49
+ - Levels: `on|off`.
50
+ - Directive-only message toggles a session fast-mode override and replies `Fast mode enabled.` / `Fast mode disabled.`.
51
+ - Send `/fast` (or `/fast status`) with no mode to see the current effective fast-mode state.
52
+ - Durar resolves fast mode in this order:
53
+ 1. Inline/directive-only `/fast on|off`
54
+ 2. Session override
55
+ 3. Per-agent default (`agents.list[].fastModeDefault`)
56
+ 4. Per-model config: `agents.defaults.models["<provider>/<model>"].params.fastMode`
57
+ 5. Fallback: `off`
58
+ - For `openai/*`, fast mode maps to OpenAI priority processing by sending `service_tier=priority` on supported Responses requests.
59
+ - For `openai-codex/*`, fast mode sends the same `service_tier=priority` flag on Codex Responses. Durar keeps one shared `/fast` toggle across both auth paths.
60
+ - For direct public `anthropic/*` requests, including OAuth-authenticated traffic sent to `api.anthropic.com`, fast mode maps to Anthropic service tiers: `/fast on` sets `service_tier=auto`, `/fast off` sets `service_tier=standard_only`.
61
+ - For `minimax/*` on the Anthropic-compatible path, `/fast on` (or `params.fastMode: true`) rewrites `MiniMax-M2.7` to `MiniMax-M2.7-highspeed`.
62
+ - Explicit Anthropic `serviceTier` / `service_tier` model params override the fast-mode default when both are set. Durar still skips Anthropic service-tier injection for non-Anthropic proxy base URLs.
63
+
64
+ ## Verbose directives (/verbose or /v)
65
+
66
+ - Levels: `on` (minimal) | `full` | `off` (default).
67
+ - Directive-only message toggles session verbose and replies `Verbose logging enabled.` / `Verbose logging disabled.`; invalid levels return a hint without changing state.
68
+ - `/verbose off` stores an explicit session override; clear it via the Sessions UI by choosing `inherit`.
69
+ - Inline directive affects only that message; session/global defaults apply otherwise.
70
+ - Send `/verbose` (or `/verbose:`) with no argument to see the current verbose level.
71
+ - When verbose is on, agents that emit structured tool results (Pi, other JSON agents) send each tool call back as its own metadata-only message, prefixed with `<emoji> <tool-name>: <arg>` when available (path/command). These tool summaries are sent as soon as each tool starts (separate bubbles), not as streaming deltas.
72
+ - Tool failure summaries remain visible in normal mode, but raw error detail suffixes are hidden unless verbose is `on` or `full`.
73
+ - When verbose is `full`, tool outputs are also forwarded after completion (separate bubble, truncated to a safe length). If you toggle `/verbose on|full|off` while a run is in-flight, subsequent tool bubbles honor the new setting.
74
+
75
+ ## Reasoning visibility (/reasoning)
76
+
77
+ - Levels: `on|off|stream`.
78
+ - Directive-only message toggles whether thinking blocks are shown in replies.
79
+ - When enabled, reasoning is sent as a **separate message** prefixed with `Reasoning:`.
80
+ - `stream` (Telegram only): streams reasoning into the Telegram draft bubble while the reply is generating, then sends the final answer without reasoning.
81
+ - Alias: `/reason`.
82
+ - Send `/reasoning` (or `/reasoning:`) with no argument to see the current reasoning level.
83
+ - Resolution order: inline directive, then session override, then per-agent default (`agents.list[].reasoningDefault`), then fallback (`off`).
84
+
85
+ ## Related
86
+
87
+ - Elevated mode docs live in [Elevated mode](/tools/elevated).
88
+
89
+ ## Heartbeats
90
+
91
+ - Heartbeat probe body is the configured heartbeat prompt (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.`). Inline directives in a heartbeat message apply as usual (but avoid changing session defaults from heartbeats).
92
+ - Heartbeat delivery defaults to the final payload only. To also send the separate `Reasoning:` message (when available), set `agents.defaults.heartbeat.includeReasoning: true` or per-agent `agents.list[].heartbeat.includeReasoning: true`.
93
+
94
+ ## Web chat UI
95
+
96
+ - The web chat thinking selector mirrors the session's stored level from the inbound session store/config when the page loads.
97
+ - Picking another level writes the session override immediately via `sessions.patch`; it does not wait for the next send and it is not a one-shot `thinkingOnce` override.
98
+ - The first option is always `Default (<resolved level>)`, where the resolved default comes from the active session model: `adaptive` for Claude 4.6 on Anthropic/Bedrock, `low` for other reasoning-capable models, `off` otherwise.
99
+ - The picker stays provider-aware:
100
+ - most providers show `off | minimal | low | medium | high | adaptive`
101
+ - Z.AI shows binary `off | on`
102
+ - `/think:<level>` still works and updates the same stored session level, so chat directives and the picker stay in sync.
@@ -0,0 +1,452 @@
1
+ ---
2
+ summary: "Text-to-speech (TTS) for outbound replies"
3
+ read_when:
4
+ - Enabling text-to-speech for replies
5
+ - Configuring TTS providers or limits
6
+ - Using /tts commands
7
+ title: "Text-to-Speech"
8
+ ---
9
+
10
+ # Text-to-speech (TTS)
11
+
12
+ Durar can convert outbound replies into audio using ElevenLabs, Microsoft, MiniMax, or OpenAI.
13
+ It works anywhere Durar can send audio.
14
+
15
+ ## Supported services
16
+
17
+ - **ElevenLabs** (primary or fallback provider)
18
+ - **Microsoft** (primary or fallback provider; current bundled implementation uses `node-edge-tts`)
19
+ - **MiniMax** (primary or fallback provider; uses the T2A v2 API)
20
+ - **OpenAI** (primary or fallback provider; also used for summaries)
21
+
22
+ ### Microsoft speech notes
23
+
24
+ The bundled Microsoft speech provider currently uses Microsoft Edge's online
25
+ neural TTS service via the `node-edge-tts` library. It's a hosted service (not
26
+ local), uses Microsoft endpoints, and does not require an API key.
27
+ `node-edge-tts` exposes speech configuration options and output formats, but
28
+ not all options are supported by the service. Legacy config and directive input
29
+ using `edge` still works and is normalized to `microsoft`.
30
+
31
+ Because this path is a public web service without a published SLA or quota,
32
+ treat it as best-effort. If you need guaranteed limits and support, use OpenAI
33
+ or ElevenLabs.
34
+
35
+ ## Optional keys
36
+
37
+ If you want OpenAI, ElevenLabs, or MiniMax:
38
+
39
+ - `ELEVENLABS_API_KEY` (or `XI_API_KEY`)
40
+ - `MINIMAX_API_KEY`
41
+ - `OPENAI_API_KEY`
42
+
43
+ Microsoft speech does **not** require an API key.
44
+
45
+ If multiple providers are configured, the selected provider is used first and the others are fallback options.
46
+ Auto-summary uses the configured `summaryModel` (or `agents.defaults.model.primary`),
47
+ so that provider must also be authenticated if you enable summaries.
48
+
49
+ ## Service links
50
+
51
+ - [OpenAI Text-to-Speech guide](https://platform.openai.com/docs/guides/text-to-speech)
52
+ - [OpenAI Audio API reference](https://platform.openai.com/docs/api-reference/audio)
53
+ - [ElevenLabs Text to Speech](https://elevenlabs.io/docs/api-reference/text-to-speech)
54
+ - [ElevenLabs Authentication](https://elevenlabs.io/docs/api-reference/authentication)
55
+ - [MiniMax T2A v2 API](https://platform.minimaxi.com/document/T2A%20V2)
56
+ - [node-edge-tts](https://github.com/SchneeHertz/node-edge-tts)
57
+ - [Microsoft Speech output formats](https://learn.microsoft.com/azure/ai-services/speech-service/rest-text-to-speech#audio-outputs)
58
+
59
+ ## Is it enabled by default?
60
+
61
+ No. Auto‑TTS is **off** by default. Enable it in config with
62
+ `messages.tts.auto` or per session with `/tts always` (alias: `/tts on`).
63
+
64
+ When `messages.tts.provider` is unset, Durar picks the first configured
65
+ speech provider in registry auto-select order.
66
+
67
+ ## Config
68
+
69
+ TTS config lives under `messages.tts` in `Durar.json`.
70
+ Full schema is in [Gateway configuration](/gateway/configuration).
71
+
72
+ ### Minimal config (enable + provider)
73
+
74
+ ```json5
75
+ {
76
+ messages: {
77
+ tts: {
78
+ auto: "always",
79
+ provider: "elevenlabs",
80
+ },
81
+ },
82
+ }
83
+ ```
84
+
85
+ ### OpenAI primary with ElevenLabs fallback
86
+
87
+ ```json5
88
+ {
89
+ messages: {
90
+ tts: {
91
+ auto: "always",
92
+ provider: "openai",
93
+ summaryModel: "openai/gpt-4.1-mini",
94
+ modelOverrides: {
95
+ enabled: true,
96
+ },
97
+ providers: {
98
+ openai: {
99
+ apiKey: "openai_api_key",
100
+ baseUrl: "https://api.openai.com/v1",
101
+ model: "gpt-4o-mini-tts",
102
+ voice: "alloy",
103
+ },
104
+ elevenlabs: {
105
+ apiKey: "elevenlabs_api_key",
106
+ baseUrl: "https://api.elevenlabs.io",
107
+ voiceId: "voice_id",
108
+ modelId: "eleven_multilingual_v2",
109
+ seed: 42,
110
+ applyTextNormalization: "auto",
111
+ languageCode: "en",
112
+ voiceSettings: {
113
+ stability: 0.5,
114
+ similarityBoost: 0.75,
115
+ style: 0.0,
116
+ useSpeakerBoost: true,
117
+ speed: 1.0,
118
+ },
119
+ },
120
+ },
121
+ },
122
+ },
123
+ }
124
+ ```
125
+
126
+ ### Microsoft primary (no API key)
127
+
128
+ ```json5
129
+ {
130
+ messages: {
131
+ tts: {
132
+ auto: "always",
133
+ provider: "microsoft",
134
+ providers: {
135
+ microsoft: {
136
+ enabled: true,
137
+ voice: "en-US-MichelleNeural",
138
+ lang: "en-US",
139
+ outputFormat: "audio-24khz-48kbitrate-mono-mp3",
140
+ rate: "+10%",
141
+ pitch: "-5%",
142
+ },
143
+ },
144
+ },
145
+ },
146
+ }
147
+ ```
148
+
149
+ ### MiniMax primary
150
+
151
+ ```json5
152
+ {
153
+ messages: {
154
+ tts: {
155
+ auto: "always",
156
+ provider: "minimax",
157
+ providers: {
158
+ minimax: {
159
+ apiKey: "minimax_api_key",
160
+ baseUrl: "https://api.minimax.io",
161
+ model: "speech-2.8-hd",
162
+ voiceId: "English_expressive_narrator",
163
+ speed: 1.0,
164
+ vol: 1.0,
165
+ pitch: 0,
166
+ },
167
+ },
168
+ },
169
+ },
170
+ }
171
+ ```
172
+
173
+ ### Disable Microsoft speech
174
+
175
+ ```json5
176
+ {
177
+ messages: {
178
+ tts: {
179
+ providers: {
180
+ microsoft: {
181
+ enabled: false,
182
+ },
183
+ },
184
+ },
185
+ },
186
+ }
187
+ ```
188
+
189
+ ### Custom limits + prefs path
190
+
191
+ ```json5
192
+ {
193
+ messages: {
194
+ tts: {
195
+ auto: "always",
196
+ maxTextLength: 4000,
197
+ timeoutMs: 30000,
198
+ prefsPath: "~/.Durar/settings/tts.json",
199
+ },
200
+ },
201
+ }
202
+ ```
203
+
204
+ ### Only reply with audio after an inbound voice message
205
+
206
+ ```json5
207
+ {
208
+ messages: {
209
+ tts: {
210
+ auto: "inbound",
211
+ },
212
+ },
213
+ }
214
+ ```
215
+
216
+ ### Disable auto-summary for long replies
217
+
218
+ ```json5
219
+ {
220
+ messages: {
221
+ tts: {
222
+ auto: "always",
223
+ },
224
+ },
225
+ }
226
+ ```
227
+
228
+ Then run:
229
+
230
+ ```
231
+ /tts summary off
232
+ ```
233
+
234
+ ### Notes on fields
235
+
236
+ - `auto`: auto‑TTS mode (`off`, `always`, `inbound`, `tagged`).
237
+ - `inbound` only sends audio after an inbound voice message.
238
+ - `tagged` only sends audio when the reply includes `[[tts]]` tags.
239
+ - `enabled`: legacy toggle (doctor migrates this to `auto`).
240
+ - `mode`: `"final"` (default) or `"all"` (includes tool/block replies).
241
+ - `provider`: speech provider id such as `"elevenlabs"`, `"microsoft"`, `"minimax"`, or `"openai"` (fallback is automatic).
242
+ - If `provider` is **unset**, Durar uses the first configured speech provider in registry auto-select order.
243
+ - Legacy `provider: "edge"` still works and is normalized to `microsoft`.
244
+ - `summaryModel`: optional cheap model for auto-summary; defaults to `agents.defaults.model.primary`.
245
+ - Accepts `provider/model` or a configured model alias.
246
+ - `modelOverrides`: allow the model to emit TTS directives (on by default).
247
+ - `allowProvider` defaults to `false` (provider switching is opt-in).
248
+ - `providers.<id>`: provider-owned settings keyed by speech provider id.
249
+ - Legacy direct provider blocks (`messages.tts.openai`, `messages.tts.elevenlabs`, `messages.tts.microsoft`, `messages.tts.edge`) are auto-migrated to `messages.tts.providers.<id>` on load.
250
+ - `maxTextLength`: hard cap for TTS input (chars). `/tts audio` fails if exceeded.
251
+ - `timeoutMs`: request timeout (ms).
252
+ - `prefsPath`: override the local prefs JSON path (provider/limit/summary).
253
+ - `apiKey` values fall back to env vars (`ELEVENLABS_API_KEY`/`XI_API_KEY`, `MINIMAX_API_KEY`, `OPENAI_API_KEY`).
254
+ - `providers.elevenlabs.baseUrl`: override ElevenLabs API base URL.
255
+ - `providers.openai.baseUrl`: override the OpenAI TTS endpoint.
256
+ - Resolution order: `messages.tts.providers.openai.baseUrl` -> `OPENAI_TTS_BASE_URL` -> `https://api.openai.com/v1`
257
+ - Non-default values are treated as OpenAI-compatible TTS endpoints, so custom model and voice names are accepted.
258
+ - `providers.elevenlabs.voiceSettings`:
259
+ - `stability`, `similarityBoost`, `style`: `0..1`
260
+ - `useSpeakerBoost`: `true|false`
261
+ - `speed`: `0.5..2.0` (1.0 = normal)
262
+ - `providers.elevenlabs.applyTextNormalization`: `auto|on|off`
263
+ - `providers.elevenlabs.languageCode`: 2-letter ISO 639-1 (e.g. `en`, `de`)
264
+ - `providers.elevenlabs.seed`: integer `0..4294967295` (best-effort determinism)
265
+ - `providers.minimax.baseUrl`: override MiniMax API base URL (default `https://api.minimax.io`, env: `MINIMAX_API_HOST`).
266
+ - `providers.minimax.model`: TTS model (default `speech-2.8-hd`, env: `MINIMAX_TTS_MODEL`).
267
+ - `providers.minimax.voiceId`: voice identifier (default `English_expressive_narrator`, env: `MINIMAX_TTS_VOICE_ID`).
268
+ - `providers.minimax.speed`: playback speed `0.5..2.0` (default 1.0).
269
+ - `providers.minimax.vol`: volume `(0, 10]` (default 1.0; must be greater than 0).
270
+ - `providers.minimax.pitch`: pitch shift `-12..12` (default 0).
271
+ - `providers.microsoft.enabled`: allow Microsoft speech usage (default `true`; no API key).
272
+ - `providers.microsoft.voice`: Microsoft neural voice name (e.g. `en-US-MichelleNeural`).
273
+ - `providers.microsoft.lang`: language code (e.g. `en-US`).
274
+ - `providers.microsoft.outputFormat`: Microsoft output format (e.g. `audio-24khz-48kbitrate-mono-mp3`).
275
+ - See Microsoft Speech output formats for valid values; not all formats are supported by the bundled Edge-backed transport.
276
+ - `providers.microsoft.rate` / `providers.microsoft.pitch` / `providers.microsoft.volume`: percent strings (e.g. `+10%`, `-5%`).
277
+ - `providers.microsoft.saveSubtitles`: write JSON subtitles alongside the audio file.
278
+ - `providers.microsoft.proxy`: proxy URL for Microsoft speech requests.
279
+ - `providers.microsoft.timeoutMs`: request timeout override (ms).
280
+ - `edge.*`: legacy alias for the same Microsoft settings.
281
+
282
+ ## Model-driven overrides (default on)
283
+
284
+ By default, the model **can** emit TTS directives for a single reply.
285
+ When `messages.tts.auto` is `tagged`, these directives are required to trigger audio.
286
+
287
+ When enabled, the model can emit `[[tts:...]]` directives to override the voice
288
+ for a single reply, plus an optional `[[tts:text]]...[[/tts:text]]` block to
289
+ provide expressive tags (laughter, singing cues, etc) that should only appear in
290
+ the audio.
291
+
292
+ `provider=...` directives are ignored unless `modelOverrides.allowProvider: true`.
293
+
294
+ Example reply payload:
295
+
296
+ ```
297
+ Here you go.
298
+
299
+ [[tts:voiceId=pMsXgVXv3BLzUgSXRplE model=eleven_v3 speed=1.1]]
300
+ [[tts:text]](laughs) Read the song once more.[[/tts:text]]
301
+ ```
302
+
303
+ Available directive keys (when enabled):
304
+
305
+ - `provider` (registered speech provider id, for example `openai`, `elevenlabs`, `minimax`, or `microsoft`; requires `allowProvider: true`)
306
+ - `voice` (OpenAI voice) or `voiceId` (ElevenLabs / MiniMax)
307
+ - `model` (OpenAI TTS model, ElevenLabs model id, or MiniMax model)
308
+ - `stability`, `similarityBoost`, `style`, `speed`, `useSpeakerBoost`
309
+ - `vol` / `volume` (MiniMax volume, 0-10)
310
+ - `pitch` (MiniMax pitch, -12 to 12)
311
+ - `applyTextNormalization` (`auto|on|off`)
312
+ - `languageCode` (ISO 639-1)
313
+ - `seed`
314
+
315
+ Disable all model overrides:
316
+
317
+ ```json5
318
+ {
319
+ messages: {
320
+ tts: {
321
+ modelOverrides: {
322
+ enabled: false,
323
+ },
324
+ },
325
+ },
326
+ }
327
+ ```
328
+
329
+ Optional allowlist (enable provider switching while keeping other knobs configurable):
330
+
331
+ ```json5
332
+ {
333
+ messages: {
334
+ tts: {
335
+ modelOverrides: {
336
+ enabled: true,
337
+ allowProvider: true,
338
+ allowSeed: false,
339
+ },
340
+ },
341
+ },
342
+ }
343
+ ```
344
+
345
+ ## Per-user preferences
346
+
347
+ Slash commands write local overrides to `prefsPath` (default:
348
+ `~/.Durar/settings/tts.json`, override with `Durar_TTS_PREFS` or
349
+ `messages.tts.prefsPath`).
350
+
351
+ Stored fields:
352
+
353
+ - `enabled`
354
+ - `provider`
355
+ - `maxLength` (summary threshold; default 1500 chars)
356
+ - `summarize` (default `true`)
357
+
358
+ These override `messages.tts.*` for that host.
359
+
360
+ ## Output formats (fixed)
361
+
362
+ - **Feishu / Matrix / Telegram / WhatsApp**: Opus voice message (`opus_48000_64` from ElevenLabs, `opus` from OpenAI).
363
+ - 48kHz / 64kbps is a good voice message tradeoff.
364
+ - **Other channels**: MP3 (`mp3_44100_128` from ElevenLabs, `mp3` from OpenAI).
365
+ - 44.1kHz / 128kbps is the default balance for speech clarity.
366
+ - **MiniMax**: MP3 (`speech-2.8-hd` model, 32kHz sample rate). Voice-note format not natively supported; use OpenAI or ElevenLabs for guaranteed Opus voice messages.
367
+ - **Microsoft**: uses `microsoft.outputFormat` (default `audio-24khz-48kbitrate-mono-mp3`).
368
+ - The bundled transport accepts an `outputFormat`, but not all formats are available from the service.
369
+ - Output format values follow Microsoft Speech output formats (including Ogg/WebM Opus).
370
+ - Telegram `sendVoice` accepts OGG/MP3/M4A; use OpenAI/ElevenLabs if you need
371
+ guaranteed Opus voice messages.
372
+ - If the configured Microsoft output format fails, Durar retries with MP3.
373
+
374
+ OpenAI/ElevenLabs output formats are fixed per channel (see above).
375
+
376
+ ## Auto-TTS behavior
377
+
378
+ When enabled, Durar:
379
+
380
+ - skips TTS if the reply already contains media or a `MEDIA:` directive.
381
+ - skips very short replies (< 10 chars).
382
+ - summarizes long replies when enabled using `agents.defaults.model.primary` (or `summaryModel`).
383
+ - attaches the generated audio to the reply.
384
+
385
+ If the reply exceeds `maxLength` and summary is off (or no API key for the
386
+ summary model), audio
387
+ is skipped and the normal text reply is sent.
388
+
389
+ ## Flow diagram
390
+
391
+ ```
392
+ Reply -> TTS enabled?
393
+ no -> send text
394
+ yes -> has media / MEDIA: / short?
395
+ yes -> send text
396
+ no -> length > limit?
397
+ no -> TTS -> attach audio
398
+ yes -> summary enabled?
399
+ no -> send text
400
+ yes -> summarize (summaryModel or agents.defaults.model.primary)
401
+ -> TTS -> attach audio
402
+ ```
403
+
404
+ ## Slash command usage
405
+
406
+ There is a single command: `/tts`.
407
+ See [Slash commands](/tools/slash-commands) for enablement details.
408
+
409
+ Discord note: `/tts` is a built-in Discord command, so Durar registers
410
+ `/voice` as the native command there. Text `/tts ...` still works.
411
+
412
+ ```
413
+ /tts off
414
+ /tts always
415
+ /tts inbound
416
+ /tts tagged
417
+ /tts status
418
+ /tts provider openai
419
+ /tts limit 2000
420
+ /tts summary off
421
+ /tts audio Hello from Durar
422
+ ```
423
+
424
+ Notes:
425
+
426
+ - Commands require an authorized sender (allowlist/owner rules still apply).
427
+ - `commands.text` or native command registration must be enabled.
428
+ - `off|always|inbound|tagged` are per‑session toggles (`/tts on` is an alias for `/tts always`).
429
+ - `limit` and `summary` are stored in local prefs, not the main config.
430
+ - `/tts audio` generates a one-off audio reply (does not toggle TTS on).
431
+ - `/tts status` includes fallback visibility for the latest attempt:
432
+ - success fallback: `Fallback: <primary> -> <used>` plus `Attempts: ...`
433
+ - failure: `Error: ...` plus `Attempts: ...`
434
+ - detailed diagnostics: `Attempt details: provider:outcome(reasonCode) latency`
435
+ - OpenAI and ElevenLabs API failures now include parsed provider error detail and request id (when returned by the provider), which is surfaced in TTS errors/logs.
436
+
437
+ ## Agent tool
438
+
439
+ The `tts` tool converts text to speech and returns an audio attachment for
440
+ reply delivery. When the channel is Feishu, Matrix, Telegram, or WhatsApp,
441
+ the audio is delivered as a voice message rather than a file attachment.
442
+
443
+ ## Gateway RPC
444
+
445
+ Gateway methods:
446
+
447
+ - `tts.status`
448
+ - `tts.enable`
449
+ - `tts.disable`
450
+ - `tts.convert`
451
+ - `tts.setProvider`
452
+ - `tts.providers`