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,504 @@
1
+ ---
2
+ title: Fly.io
3
+ summary: "Step-by-step Fly.io deployment for Durar with persistent storage and HTTPS"
4
+ read_when:
5
+ - Deploying Durar on Fly.io
6
+ - Setting up Fly volumes, secrets, and first-run config
7
+ ---
8
+
9
+ # Fly.io Deployment
10
+
11
+ **Goal:** Durar Gateway running on a [Fly.io](https://fly.io) machine with persistent storage, automatic HTTPS, and Discord/channel access.
12
+
13
+ ## What you need
14
+
15
+ - [flyctl CLI](https://fly.io/docs/hands-on/install-flyctl/) installed
16
+ - Fly.io account (free tier works)
17
+ - Model auth: API key for your chosen model provider
18
+ - Channel credentials: Discord bot token, Telegram token, etc.
19
+
20
+ ## Beginner quick path
21
+
22
+ 1. Clone repo → customize `fly.toml`
23
+ 2. Create app + volume → set secrets
24
+ 3. Deploy with `fly deploy`
25
+ 4. SSH in to create config or use Control UI
26
+
27
+ <Steps>
28
+ <Step title="Create the Fly app">
29
+ ```bash
30
+ # Clone the repo
31
+ git clone https://github.com/openclaw/openclaw.git
32
+ cd Durar
33
+
34
+ # Create a new Fly app (pick your own name)
35
+ fly apps create my-Durar
36
+
37
+ # Create a persistent volume (1GB is usually enough)
38
+ fly volumes create Durar_data --size 1 --region iad
39
+ ```
40
+
41
+ **Tip:** Choose a region close to you. Common options: `lhr` (London), `iad` (Virginia), `sjc` (San Jose).
42
+
43
+ </Step>
44
+
45
+ <Step title="Configure fly.toml">
46
+ Edit `fly.toml` to match your app name and requirements.
47
+
48
+ **Security note:** The default config exposes a public URL. For a hardened deployment with no public IP, see [Private Deployment](#private-deployment-hardened) or use `fly.private.toml`.
49
+
50
+ ```toml
51
+ app = "my-Durar" # Your app name
52
+ primary_region = "iad"
53
+
54
+ [build]
55
+ dockerfile = "Dockerfile"
56
+
57
+ [env]
58
+ NODE_ENV = "production"
59
+ Durar_PREFER_PNPM = "1"
60
+ Durar_STATE_DIR = "/data"
61
+ NODE_OPTIONS = "--max-old-space-size=1536"
62
+
63
+ [processes]
64
+ app = "node dist/index.js gateway --allow-unconfigured --port 3000 --bind lan"
65
+
66
+ [http_service]
67
+ internal_port = 3000
68
+ force_https = true
69
+ auto_stop_machines = false
70
+ auto_start_machines = true
71
+ min_machines_running = 1
72
+ processes = ["app"]
73
+
74
+ [[vm]]
75
+ size = "shared-cpu-2x"
76
+ memory = "2048mb"
77
+
78
+ [mounts]
79
+ source = "Durar_data"
80
+ destination = "/data"
81
+ ```
82
+
83
+ **Key settings:**
84
+
85
+ | Setting | Why |
86
+ | ------------------------------ | --------------------------------------------------------------------------- |
87
+ | `--bind lan` | Binds to `0.0.0.0` so Fly's proxy can reach the gateway |
88
+ | `--allow-unconfigured` | Starts without a config file (you'll create one after) |
89
+ | `internal_port = 3000` | Must match `--port 3000` (or `Durar_GATEWAY_PORT`) for Fly health checks |
90
+ | `memory = "2048mb"` | 512MB is too small; 2GB recommended |
91
+ | `Durar_STATE_DIR = "/data"` | Persists state on the volume |
92
+
93
+ </Step>
94
+
95
+ <Step title="Set secrets">
96
+ ```bash
97
+ # Required: Gateway token (for non-loopback binding)
98
+ fly secrets set Durar_GATEWAY_TOKEN=$(openssl rand -hex 32)
99
+
100
+ # Model provider API keys
101
+ fly secrets set ANTHROPIC_API_KEY=sk-ant-...
102
+
103
+ # Optional: Other providers
104
+ fly secrets set OPENAI_API_KEY=sk-...
105
+ fly secrets set GOOGLE_API_KEY=...
106
+
107
+ # Channel tokens
108
+ fly secrets set DISCORD_BOT_TOKEN=MTQ...
109
+ ```
110
+
111
+ **Notes:**
112
+
113
+ - Non-loopback binds (`--bind lan`) require a valid gateway auth path. This Fly.io example uses `Durar_GATEWAY_TOKEN`, but `gateway.auth.password` or a correctly configured non-loopback `trusted-proxy` deployment also satisfy the requirement.
114
+ - Treat these tokens like passwords.
115
+ - **Prefer env vars over config file** for all API keys and tokens. This keeps secrets out of `Durar.json` where they could be accidentally exposed or logged.
116
+
117
+ </Step>
118
+
119
+ <Step title="Deploy">
120
+ ```bash
121
+ fly deploy
122
+ ```
123
+
124
+ First deploy builds the Docker image (~2-3 minutes). Subsequent deploys are faster.
125
+
126
+ After deployment, verify:
127
+
128
+ ```bash
129
+ fly status
130
+ fly logs
131
+ ```
132
+
133
+ You should see:
134
+
135
+ ```
136
+ [gateway] listening on ws://0.0.0.0:3000 (PID xxx)
137
+ [discord] logged in to discord as xxx
138
+ ```
139
+
140
+ </Step>
141
+
142
+ <Step title="Create config file">
143
+ SSH into the machine to create a proper config:
144
+
145
+ ```bash
146
+ fly ssh console
147
+ ```
148
+
149
+ Create the config directory and file:
150
+
151
+ ```bash
152
+ mkdir -p /data
153
+ cat > /data/Durar.json << 'EOF'
154
+ {
155
+ "agents": {
156
+ "defaults": {
157
+ "model": {
158
+ "primary": "anthropic/claude-opus-4-6",
159
+ "fallbacks": ["anthropic/claude-sonnet-4-6", "openai/gpt-5.4"]
160
+ },
161
+ "maxConcurrent": 4
162
+ },
163
+ "list": [
164
+ {
165
+ "id": "main",
166
+ "default": true
167
+ }
168
+ ]
169
+ },
170
+ "auth": {
171
+ "profiles": {
172
+ "anthropic:default": { "mode": "token", "provider": "anthropic" },
173
+ "openai:default": { "mode": "token", "provider": "openai" }
174
+ }
175
+ },
176
+ "bindings": [
177
+ {
178
+ "agentId": "main",
179
+ "match": { "channel": "discord" }
180
+ }
181
+ ],
182
+ "channels": {
183
+ "discord": {
184
+ "enabled": true,
185
+ "groupPolicy": "allowlist",
186
+ "guilds": {
187
+ "YOUR_GUILD_ID": {
188
+ "channels": { "general": { "allow": true } },
189
+ "requireMention": false
190
+ }
191
+ }
192
+ }
193
+ },
194
+ "gateway": {
195
+ "mode": "local",
196
+ "bind": "auto"
197
+ },
198
+ "meta": {}
199
+ }
200
+ EOF
201
+ ```
202
+
203
+ **Note:** With `Durar_STATE_DIR=/data`, the config path is `/data/Durar.json`.
204
+
205
+ **Note:** The Discord token can come from either:
206
+
207
+ - Environment variable: `DISCORD_BOT_TOKEN` (recommended for secrets)
208
+ - Config file: `channels.discord.token`
209
+
210
+ If using env var, no need to add token to config. The gateway reads `DISCORD_BOT_TOKEN` automatically.
211
+
212
+ Restart to apply:
213
+
214
+ ```bash
215
+ exit
216
+ fly machine restart <machine-id>
217
+ ```
218
+
219
+ </Step>
220
+
221
+ <Step title="Access the Gateway">
222
+ ### Control UI
223
+
224
+ Open in browser:
225
+
226
+ ```bash
227
+ fly open
228
+ ```
229
+
230
+ Or visit `https://my-Durar.fly.dev/`
231
+
232
+ Authenticate with the configured shared secret. This guide uses the gateway
233
+ token from `Durar_GATEWAY_TOKEN`; if you switched to password auth, use
234
+ that password instead.
235
+
236
+ ### Logs
237
+
238
+ ```bash
239
+ fly logs # Live logs
240
+ fly logs --no-tail # Recent logs
241
+ ```
242
+
243
+ ### SSH Console
244
+
245
+ ```bash
246
+ fly ssh console
247
+ ```
248
+
249
+ </Step>
250
+ </Steps>
251
+
252
+ ## Troubleshooting
253
+
254
+ ### "App is not listening on expected address"
255
+
256
+ The gateway is binding to `127.0.0.1` instead of `0.0.0.0`.
257
+
258
+ **Fix:** Add `--bind lan` to your process command in `fly.toml`.
259
+
260
+ ### Health checks failing / connection refused
261
+
262
+ Fly can't reach the gateway on the configured port.
263
+
264
+ **Fix:** Ensure `internal_port` matches the gateway port (set `--port 3000` or `Durar_GATEWAY_PORT=3000`).
265
+
266
+ ### OOM / Memory Issues
267
+
268
+ Container keeps restarting or getting killed. Signs: `SIGABRT`, `v8::internal::Runtime_AllocateInYoungGeneration`, or silent restarts.
269
+
270
+ **Fix:** Increase memory in `fly.toml`:
271
+
272
+ ```toml
273
+ [[vm]]
274
+ memory = "2048mb"
275
+ ```
276
+
277
+ Or update an existing machine:
278
+
279
+ ```bash
280
+ fly machine update <machine-id> --vm-memory 2048 -y
281
+ ```
282
+
283
+ **Note:** 512MB is too small. 1GB may work but can OOM under load or with verbose logging. **2GB is recommended.**
284
+
285
+ ### Gateway Lock Issues
286
+
287
+ Gateway refuses to start with "already running" errors.
288
+
289
+ This happens when the container restarts but the PID lock file persists on the volume.
290
+
291
+ **Fix:** Delete the lock file:
292
+
293
+ ```bash
294
+ fly ssh console --command "rm -f /data/gateway.*.lock"
295
+ fly machine restart <machine-id>
296
+ ```
297
+
298
+ The lock file is at `/data/gateway.*.lock` (not in a subdirectory).
299
+
300
+ ### Config Not Being Read
301
+
302
+ `--allow-unconfigured` only bypasses the startup guard. It does not create or repair `/data/Durar.json`, so make sure your real config exists and includes `gateway.mode="local"` when you want a normal local gateway start.
303
+
304
+ Verify the config exists:
305
+
306
+ ```bash
307
+ fly ssh console --command "cat /data/Durar.json"
308
+ ```
309
+
310
+ ### Writing Config via SSH
311
+
312
+ The `fly ssh console -C` command doesn't support shell redirection. To write a config file:
313
+
314
+ ```bash
315
+ # Use echo + tee (pipe from local to remote)
316
+ echo '{"your":"config"}' | fly ssh console -C "tee /data/Durar.json"
317
+
318
+ # Or use sftp
319
+ fly sftp shell
320
+ > put /local/path/config.json /data/Durar.json
321
+ ```
322
+
323
+ **Note:** `fly sftp` may fail if the file already exists. Delete first:
324
+
325
+ ```bash
326
+ fly ssh console --command "rm /data/Durar.json"
327
+ ```
328
+
329
+ ### State Not Persisting
330
+
331
+ If you lose auth profiles, channel/provider state, or sessions after a restart,
332
+ the state dir is writing to the container filesystem.
333
+
334
+ **Fix:** Ensure `Durar_STATE_DIR=/data` is set in `fly.toml` and redeploy.
335
+
336
+ ## Updates
337
+
338
+ ```bash
339
+ # Pull latest changes
340
+ git pull
341
+
342
+ # Redeploy
343
+ fly deploy
344
+
345
+ # Check health
346
+ fly status
347
+ fly logs
348
+ ```
349
+
350
+ ### Updating Machine Command
351
+
352
+ If you need to change the startup command without a full redeploy:
353
+
354
+ ```bash
355
+ # Get machine ID
356
+ fly machines list
357
+
358
+ # Update command
359
+ fly machine update <machine-id> --command "node dist/index.js gateway --port 3000 --bind lan" -y
360
+
361
+ # Or with memory increase
362
+ fly machine update <machine-id> --vm-memory 2048 --command "node dist/index.js gateway --port 3000 --bind lan" -y
363
+ ```
364
+
365
+ **Note:** After `fly deploy`, the machine command may reset to what's in `fly.toml`. If you made manual changes, re-apply them after deploy.
366
+
367
+ ## Private Deployment (Hardened)
368
+
369
+ By default, Fly allocates public IPs, making your gateway accessible at `https://your-app.fly.dev`. This is convenient but means your deployment is discoverable by internet scanners (Shodan, Censys, etc.).
370
+
371
+ For a hardened deployment with **no public exposure**, use the private template.
372
+
373
+ ### When to use private deployment
374
+
375
+ - You only make **outbound** calls/messages (no inbound webhooks)
376
+ - You use **ngrok or Tailscale** tunnels for any webhook callbacks
377
+ - You access the gateway via **SSH, proxy, or WireGuard** instead of browser
378
+ - You want the deployment **hidden from internet scanners**
379
+
380
+ ### Setup
381
+
382
+ Use `fly.private.toml` instead of the standard config:
383
+
384
+ ```bash
385
+ # Deploy with private config
386
+ fly deploy -c fly.private.toml
387
+ ```
388
+
389
+ Or convert an existing deployment:
390
+
391
+ ```bash
392
+ # List current IPs
393
+ fly ips list -a my-Durar
394
+
395
+ # Release public IPs
396
+ fly ips release <public-ipv4> -a my-Durar
397
+ fly ips release <public-ipv6> -a my-Durar
398
+
399
+ # Switch to private config so future deploys don't re-allocate public IPs
400
+ # (remove [http_service] or deploy with the private template)
401
+ fly deploy -c fly.private.toml
402
+
403
+ # Allocate private-only IPv6
404
+ fly ips allocate-v6 --private -a my-Durar
405
+ ```
406
+
407
+ After this, `fly ips list` should show only a `private` type IP:
408
+
409
+ ```
410
+ VERSION IP TYPE REGION
411
+ v6 fdaa:x:x:x:x::x private global
412
+ ```
413
+
414
+ ### Accessing a private deployment
415
+
416
+ Since there's no public URL, use one of these methods:
417
+
418
+ **Option 1: Local proxy (simplest)**
419
+
420
+ ```bash
421
+ # Forward local port 3000 to the app
422
+ fly proxy 3000:3000 -a my-Durar
423
+
424
+ # Then open http://localhost:3000 in browser
425
+ ```
426
+
427
+ **Option 2: WireGuard VPN**
428
+
429
+ ```bash
430
+ # Create WireGuard config (one-time)
431
+ fly wireguard create
432
+
433
+ # Import to WireGuard client, then access via internal IPv6
434
+ # Example: http://[fdaa:x:x:x:x::x]:3000
435
+ ```
436
+
437
+ **Option 3: SSH only**
438
+
439
+ ```bash
440
+ fly ssh console -a my-Durar
441
+ ```
442
+
443
+ ### Webhooks with private deployment
444
+
445
+ If you need webhook callbacks (Twilio, Telnyx, etc.) without public exposure:
446
+
447
+ 1. **ngrok tunnel** - Run ngrok inside the container or as a sidecar
448
+ 2. **Tailscale Funnel** - Expose specific paths via Tailscale
449
+ 3. **Outbound-only** - Some providers (Twilio) work fine for outbound calls without webhooks
450
+
451
+ Example voice-call config with ngrok:
452
+
453
+ ```json5
454
+ {
455
+ plugins: {
456
+ entries: {
457
+ "voice-call": {
458
+ enabled: true,
459
+ config: {
460
+ provider: "twilio",
461
+ tunnel: { provider: "ngrok" },
462
+ webhookSecurity: {
463
+ allowedHosts: ["example.ngrok.app"],
464
+ },
465
+ },
466
+ },
467
+ },
468
+ },
469
+ }
470
+ ```
471
+
472
+ The ngrok tunnel runs inside the container and provides a public webhook URL without exposing the Fly app itself. Set `webhookSecurity.allowedHosts` to the public tunnel hostname so forwarded host headers are accepted.
473
+
474
+ ### Security benefits
475
+
476
+ | Aspect | Public | Private |
477
+ | ----------------- | ------------ | ---------- |
478
+ | Internet scanners | Discoverable | Hidden |
479
+ | Direct attacks | Possible | Blocked |
480
+ | Control UI access | Browser | Proxy/VPN |
481
+ | Webhook delivery | Direct | Via tunnel |
482
+
483
+ ## Notes
484
+
485
+ - Fly.io uses **x86 architecture** (not ARM)
486
+ - The Dockerfile is compatible with both architectures
487
+ - For WhatsApp/Telegram onboarding, use `fly ssh console`
488
+ - Persistent data lives on the volume at `/data`
489
+ - Signal requires Java + signal-cli; use a custom image and keep memory at 2GB+.
490
+
491
+ ## Cost
492
+
493
+ With the recommended config (`shared-cpu-2x`, 2GB RAM):
494
+
495
+ - ~$10-15/month depending on usage
496
+ - Free tier includes some allowance
497
+
498
+ See [Fly.io pricing](https://fly.io/docs/about/pricing/) for details.
499
+
500
+ ## Next steps
501
+
502
+ - Set up messaging channels: [Channels](/channels)
503
+ - Configure the Gateway: [Gateway configuration](/gateway/configuration)
504
+ - Keep Durar up to date: [Updating](/install/updating)