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,149 @@
1
+ ---
2
+ summary: "Nextcloud Talk support status, capabilities, and configuration"
3
+ read_when:
4
+ - Working on Nextcloud Talk channel features
5
+ title: "Nextcloud Talk"
6
+ ---
7
+
8
+ # Nextcloud Talk
9
+
10
+ Status: bundled plugin (webhook bot). Direct messages, rooms, reactions, and markdown messages are supported.
11
+
12
+ ## Bundled plugin
13
+
14
+ Nextcloud Talk ships as a bundled plugin in current Durar releases, so
15
+ normal packaged builds do not need a separate install.
16
+
17
+ If you are on an older build or a custom install that excludes Nextcloud Talk,
18
+ install it manually:
19
+
20
+ Install via CLI (npm registry):
21
+
22
+ ```bash
23
+ Durar plugins install @Durar/nextcloud-talk
24
+ ```
25
+
26
+ Local checkout (when running from a git repo):
27
+
28
+ ```bash
29
+ Durar plugins install ./path/to/local/nextcloud-talk-plugin
30
+ ```
31
+
32
+ Details: [Plugins](/tools/plugin)
33
+
34
+ ## Quick setup (beginner)
35
+
36
+ 1. Ensure the Nextcloud Talk plugin is available.
37
+ - Current packaged Durar releases already bundle it.
38
+ - Older/custom installs can add it manually with the commands above.
39
+ 2. On your Nextcloud server, create a bot:
40
+
41
+ ```bash
42
+ ./occ talk:bot:install "Durar" "<shared-secret>" "<webhook-url>" --feature reaction
43
+ ```
44
+
45
+ 3. Enable the bot in the target room settings.
46
+ 4. Configure Durar:
47
+ - Config: `channels.nextcloud-talk.baseUrl` + `channels.nextcloud-talk.botSecret`
48
+ - Or env: `NEXTCLOUD_TALK_BOT_SECRET` (default account only)
49
+ 5. Restart the gateway (or finish setup).
50
+
51
+ Minimal config:
52
+
53
+ ```json5
54
+ {
55
+ channels: {
56
+ "nextcloud-talk": {
57
+ enabled: true,
58
+ baseUrl: "https://cloud.example.com",
59
+ botSecret: "shared-secret",
60
+ dmPolicy: "pairing",
61
+ },
62
+ },
63
+ }
64
+ ```
65
+
66
+ ## Notes
67
+
68
+ - Bots cannot initiate DMs. The user must message the bot first.
69
+ - Webhook URL must be reachable by the Gateway; set `webhookPublicUrl` if behind a proxy.
70
+ - Media uploads are not supported by the bot API; media is sent as URLs.
71
+ - The webhook payload does not distinguish DMs vs rooms; set `apiUser` + `apiPassword` to enable room-type lookups (otherwise DMs are treated as rooms).
72
+
73
+ ## Access control (DMs)
74
+
75
+ - Default: `channels.nextcloud-talk.dmPolicy = "pairing"`. Unknown senders get a pairing code.
76
+ - Approve via:
77
+ - `Durar pairing list nextcloud-talk`
78
+ - `Durar pairing approve nextcloud-talk <CODE>`
79
+ - Public DMs: `channels.nextcloud-talk.dmPolicy="open"` plus `channels.nextcloud-talk.allowFrom=["*"]`.
80
+ - `allowFrom` matches Nextcloud user IDs only; display names are ignored.
81
+
82
+ ## Rooms (groups)
83
+
84
+ - Default: `channels.nextcloud-talk.groupPolicy = "allowlist"` (mention-gated).
85
+ - Allowlist rooms with `channels.nextcloud-talk.rooms`:
86
+
87
+ ```json5
88
+ {
89
+ channels: {
90
+ "nextcloud-talk": {
91
+ rooms: {
92
+ "room-token": { requireMention: true },
93
+ },
94
+ },
95
+ },
96
+ }
97
+ ```
98
+
99
+ - To allow no rooms, keep the allowlist empty or set `channels.nextcloud-talk.groupPolicy="disabled"`.
100
+
101
+ ## Capabilities
102
+
103
+ | Feature | Status |
104
+ | --------------- | ------------- |
105
+ | Direct messages | Supported |
106
+ | Rooms | Supported |
107
+ | Threads | Not supported |
108
+ | Media | URL-only |
109
+ | Reactions | Supported |
110
+ | Native commands | Not supported |
111
+
112
+ ## Configuration reference (Nextcloud Talk)
113
+
114
+ Full configuration: [Configuration](/gateway/configuration)
115
+
116
+ Provider options:
117
+
118
+ - `channels.nextcloud-talk.enabled`: enable/disable channel startup.
119
+ - `channels.nextcloud-talk.baseUrl`: Nextcloud instance URL.
120
+ - `channels.nextcloud-talk.botSecret`: bot shared secret.
121
+ - `channels.nextcloud-talk.botSecretFile`: regular-file secret path. Symlinks are rejected.
122
+ - `channels.nextcloud-talk.apiUser`: API user for room lookups (DM detection).
123
+ - `channels.nextcloud-talk.apiPassword`: API/app password for room lookups.
124
+ - `channels.nextcloud-talk.apiPasswordFile`: API password file path.
125
+ - `channels.nextcloud-talk.webhookPort`: webhook listener port (default: 8788).
126
+ - `channels.nextcloud-talk.webhookHost`: webhook host (default: 0.0.0.0).
127
+ - `channels.nextcloud-talk.webhookPath`: webhook path (default: /nextcloud-talk-webhook).
128
+ - `channels.nextcloud-talk.webhookPublicUrl`: externally reachable webhook URL.
129
+ - `channels.nextcloud-talk.dmPolicy`: `pairing | allowlist | open | disabled`.
130
+ - `channels.nextcloud-talk.allowFrom`: DM allowlist (user IDs). `open` requires `"*"`.
131
+ - `channels.nextcloud-talk.groupPolicy`: `allowlist | open | disabled`.
132
+ - `channels.nextcloud-talk.groupAllowFrom`: group allowlist (user IDs).
133
+ - `channels.nextcloud-talk.rooms`: per-room settings and allowlist.
134
+ - `channels.nextcloud-talk.historyLimit`: group history limit (0 disables).
135
+ - `channels.nextcloud-talk.dmHistoryLimit`: DM history limit (0 disables).
136
+ - `channels.nextcloud-talk.dms`: per-DM overrides (historyLimit).
137
+ - `channels.nextcloud-talk.textChunkLimit`: outbound text chunk size (chars).
138
+ - `channels.nextcloud-talk.chunkMode`: `length` (default) or `newline` to split on blank lines (paragraph boundaries) before length chunking.
139
+ - `channels.nextcloud-talk.blockStreaming`: disable block streaming for this channel.
140
+ - `channels.nextcloud-talk.blockStreamingCoalesce`: block streaming coalesce tuning.
141
+ - `channels.nextcloud-talk.mediaMaxMb`: inbound media cap (MB).
142
+
143
+ ## Related
144
+
145
+ - [Channels Overview](/channels) — all supported channels
146
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
147
+ - [Groups](/channels/groups) — group chat behavior and mention gating
148
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
149
+ - [Security](/gateway/security) — access model and hardening
@@ -0,0 +1,252 @@
1
+ ---
2
+ summary: "Nostr DM channel via NIP-04 encrypted messages"
3
+ read_when:
4
+ - You want Durar to receive DMs via Nostr
5
+ - You're setting up decentralized messaging
6
+ title: "Nostr"
7
+ ---
8
+
9
+ # Nostr
10
+
11
+ **Status:** Optional bundled plugin (disabled by default until configured).
12
+
13
+ Nostr is a decentralized protocol for social networking. This channel enables Durar to receive and respond to encrypted direct messages (DMs) via NIP-04.
14
+
15
+ ## Bundled plugin
16
+
17
+ Current Durar releases ship Nostr as a bundled plugin, so normal packaged
18
+ builds do not need a separate install.
19
+
20
+ ### Older/custom installs
21
+
22
+ - Onboarding (`Durar onboard`) and `Durar channels add` still surface
23
+ Nostr from the shared channel catalog.
24
+ - If your build excludes bundled Nostr, install it manually.
25
+
26
+ ```bash
27
+ Durar plugins install @Durar/nostr
28
+ ```
29
+
30
+ Use a local checkout (dev workflows):
31
+
32
+ ```bash
33
+ Durar plugins install --link <path-to-local-nostr-plugin>
34
+ ```
35
+
36
+ Restart the Gateway after installing or enabling plugins.
37
+
38
+ ### Non-interactive setup
39
+
40
+ ```bash
41
+ Durar channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY"
42
+ Durar channels add --channel nostr --private-key "$NOSTR_PRIVATE_KEY" --relay-urls "wss://relay.damus.io,wss://relay.primal.net"
43
+ ```
44
+
45
+ Use `--use-env` to keep `NOSTR_PRIVATE_KEY` in the environment instead of storing the key in config.
46
+
47
+ ## Quick setup
48
+
49
+ 1. Generate a Nostr keypair (if needed):
50
+
51
+ ```bash
52
+ # Using nak
53
+ nak key generate
54
+ ```
55
+
56
+ 2. Add to config:
57
+
58
+ ```json5
59
+ {
60
+ channels: {
61
+ nostr: {
62
+ privateKey: "${NOSTR_PRIVATE_KEY}",
63
+ },
64
+ },
65
+ }
66
+ ```
67
+
68
+ 3. Export the key:
69
+
70
+ ```bash
71
+ export NOSTR_PRIVATE_KEY="nsec1..."
72
+ ```
73
+
74
+ 4. Restart the Gateway.
75
+
76
+ ## Configuration reference
77
+
78
+ | Key | Type | Default | Description |
79
+ | ------------ | -------- | ------------------------------------------- | ----------------------------------- |
80
+ | `privateKey` | string | required | Private key in `nsec` or hex format |
81
+ | `relays` | string[] | `['wss://relay.damus.io', 'wss://nos.lol']` | Relay URLs (WebSocket) |
82
+ | `dmPolicy` | string | `pairing` | DM access policy |
83
+ | `allowFrom` | string[] | `[]` | Allowed sender pubkeys |
84
+ | `enabled` | boolean | `true` | Enable/disable channel |
85
+ | `name` | string | - | Display name |
86
+ | `profile` | object | - | NIP-01 profile metadata |
87
+
88
+ ## Profile metadata
89
+
90
+ Profile data is published as a NIP-01 `kind:0` event. You can manage it from the Control UI (Channels -> Nostr -> Profile) or set it directly in config.
91
+
92
+ Example:
93
+
94
+ ```json5
95
+ {
96
+ channels: {
97
+ nostr: {
98
+ privateKey: "${NOSTR_PRIVATE_KEY}",
99
+ profile: {
100
+ name: "Durar",
101
+ displayName: "Durar",
102
+ about: "Personal assistant DM bot",
103
+ picture: "https://example.com/avatar.png",
104
+ banner: "https://example.com/banner.png",
105
+ website: "https://example.com",
106
+ nip05: "Durar@example.com",
107
+ lud16: "Durar@example.com",
108
+ },
109
+ },
110
+ },
111
+ }
112
+ ```
113
+
114
+ Notes:
115
+
116
+ - Profile URLs must use `https://`.
117
+ - Importing from relays merges fields and preserves local overrides.
118
+
119
+ ## Access control
120
+
121
+ ### DM policies
122
+
123
+ - **pairing** (default): unknown senders get a pairing code.
124
+ - **allowlist**: only pubkeys in `allowFrom` can DM.
125
+ - **open**: public inbound DMs (requires `allowFrom: ["*"]`).
126
+ - **disabled**: ignore inbound DMs.
127
+
128
+ Enforcement notes:
129
+
130
+ - Inbound event signatures are verified before sender policy and NIP-04 decryption, so forged events are rejected early.
131
+ - Pairing replies are sent without processing the original DM body.
132
+ - Inbound DMs are rate-limited and oversized payloads are dropped before decrypt.
133
+
134
+ ### Allowlist example
135
+
136
+ ```json5
137
+ {
138
+ channels: {
139
+ nostr: {
140
+ privateKey: "${NOSTR_PRIVATE_KEY}",
141
+ dmPolicy: "allowlist",
142
+ allowFrom: ["npub1abc...", "npub1xyz..."],
143
+ },
144
+ },
145
+ }
146
+ ```
147
+
148
+ ## Key formats
149
+
150
+ Accepted formats:
151
+
152
+ - **Private key:** `nsec...` or 64-char hex
153
+ - **Pubkeys (`allowFrom`):** `npub...` or hex
154
+
155
+ ## Relays
156
+
157
+ Defaults: `relay.damus.io` and `nos.lol`.
158
+
159
+ ```json5
160
+ {
161
+ channels: {
162
+ nostr: {
163
+ privateKey: "${NOSTR_PRIVATE_KEY}",
164
+ relays: ["wss://relay.damus.io", "wss://relay.primal.net", "wss://nostr.wine"],
165
+ },
166
+ },
167
+ }
168
+ ```
169
+
170
+ Tips:
171
+
172
+ - Use 2-3 relays for redundancy.
173
+ - Avoid too many relays (latency, duplication).
174
+ - Paid relays can improve reliability.
175
+ - Local relays are fine for testing (`ws://localhost:7777`).
176
+
177
+ ## Protocol support
178
+
179
+ | NIP | Status | Description |
180
+ | ------ | --------- | ------------------------------------- |
181
+ | NIP-01 | Supported | Basic event format + profile metadata |
182
+ | NIP-04 | Supported | Encrypted DMs (`kind:4`) |
183
+ | NIP-17 | Planned | Gift-wrapped DMs |
184
+ | NIP-44 | Planned | Versioned encryption |
185
+
186
+ ## Testing
187
+
188
+ ### Local relay
189
+
190
+ ```bash
191
+ # Start strfry
192
+ docker run -p 7777:7777 ghcr.io/hoytech/strfry
193
+ ```
194
+
195
+ ```json5
196
+ {
197
+ channels: {
198
+ nostr: {
199
+ privateKey: "${NOSTR_PRIVATE_KEY}",
200
+ relays: ["ws://localhost:7777"],
201
+ },
202
+ },
203
+ }
204
+ ```
205
+
206
+ ### Manual test
207
+
208
+ 1. Note the bot pubkey (npub) from logs.
209
+ 2. Open a Nostr client (Damus, Amethyst, etc.).
210
+ 3. DM the bot pubkey.
211
+ 4. Verify the response.
212
+
213
+ ## Troubleshooting
214
+
215
+ ### Not receiving messages
216
+
217
+ - Verify the private key is valid.
218
+ - Ensure relay URLs are reachable and use `wss://` (or `ws://` for local).
219
+ - Confirm `enabled` is not `false`.
220
+ - Check Gateway logs for relay connection errors.
221
+
222
+ ### Not sending responses
223
+
224
+ - Check relay accepts writes.
225
+ - Verify outbound connectivity.
226
+ - Watch for relay rate limits.
227
+
228
+ ### Duplicate responses
229
+
230
+ - Expected when using multiple relays.
231
+ - Messages are deduplicated by event ID; only the first delivery triggers a response.
232
+
233
+ ## Security
234
+
235
+ - Never commit private keys.
236
+ - Use environment variables for keys.
237
+ - Consider `allowlist` for production bots.
238
+ - Signatures are verified before sender policy, and sender policy is enforced before decrypt, so forged events are rejected early and unknown senders cannot force full crypto work.
239
+
240
+ ## Limitations (MVP)
241
+
242
+ - Direct messages only (no group chats).
243
+ - No media attachments.
244
+ - NIP-04 only (NIP-17 gift-wrap planned).
245
+
246
+ ## Related
247
+
248
+ - [Channels Overview](/channels) — all supported channels
249
+ - [Pairing](/channels/pairing) — DM authentication and pairing flow
250
+ - [Groups](/channels/groups) — group chat behavior and mention gating
251
+ - [Channel Routing](/channels/channel-routing) — session routing for messages
252
+ - [Security](/gateway/security) — access model and hardening
@@ -0,0 +1,129 @@
1
+ ---
2
+ summary: "Pairing overview: approve who can DM you + which nodes can join"
3
+ read_when:
4
+ - Setting up DM access control
5
+ - Pairing a new iOS/Android node
6
+ - Reviewing Durar security posture
7
+ title: "Pairing"
8
+ ---
9
+
10
+ # Pairing
11
+
12
+ “Pairing” is Durar’s explicit **owner approval** step.
13
+ It is used in two places:
14
+
15
+ 1. **DM pairing** (who is allowed to talk to the bot)
16
+ 2. **Node pairing** (which devices/nodes are allowed to join the gateway network)
17
+
18
+ Security context: [Security](/gateway/security)
19
+
20
+ ## 1) DM pairing (inbound chat access)
21
+
22
+ When a channel is configured with DM policy `pairing`, unknown senders get a short code and their message is **not processed** until you approve.
23
+
24
+ Default DM policies are documented in: [Security](/gateway/security)
25
+
26
+ Pairing codes:
27
+
28
+ - 8 characters, uppercase, no ambiguous chars (`0O1I`).
29
+ - **Expire after 1 hour**. The bot only sends the pairing message when a new request is created (roughly once per hour per sender).
30
+ - Pending DM pairing requests are capped at **3 per channel** by default; additional requests are ignored until one expires or is approved.
31
+
32
+ ### Approve a sender
33
+
34
+ ```bash
35
+ Durar pairing list telegram
36
+ Durar pairing approve telegram <CODE>
37
+ ```
38
+
39
+ Supported channels: `bluebubbles`, `discord`, `feishu`, `googlechat`, `imessage`, `irc`, `line`, `matrix`, `mattermost`, `msteams`, `nextcloud-talk`, `nostr`, `Durar-weixin`, `signal`, `slack`, `synology-chat`, `telegram`, `twitch`, `whatsapp`, `zalo`, `zalouser`.
40
+
41
+ ### Where the state lives
42
+
43
+ Stored under `~/.Durar/credentials/`:
44
+
45
+ - Pending requests: `<channel>-pairing.json`
46
+ - Approved allowlist store:
47
+ - Default account: `<channel>-allowFrom.json`
48
+ - Non-default account: `<channel>-<accountId>-allowFrom.json`
49
+
50
+ Account scoping behavior:
51
+
52
+ - Non-default accounts read/write only their scoped allowlist file.
53
+ - Default account uses the channel-scoped unscoped allowlist file.
54
+
55
+ Treat these as sensitive (they gate access to your assistant).
56
+
57
+ Important: this store is for DM access. Group authorization is separate.
58
+ Approving a DM pairing code does not automatically allow that sender to run group commands or control the bot in groups. For group access, configure the channel's explicit group allowlists (for example `groupAllowFrom`, `groups`, or per-group/per-topic overrides depending on the channel).
59
+
60
+ ## 2) Node device pairing (iOS/Android/macOS/headless nodes)
61
+
62
+ Nodes connect to the Gateway as **devices** with `role: node`. The Gateway
63
+ creates a device pairing request that must be approved.
64
+
65
+ ### Pair via Telegram (recommended for iOS)
66
+
67
+ If you use the `device-pair` plugin, you can do first-time device pairing entirely from Telegram:
68
+
69
+ 1. In Telegram, message your bot: `/pair`
70
+ 2. The bot replies with two messages: an instruction message and a separate **setup code** message (easy to copy/paste in Telegram).
71
+ 3. On your phone, open the Durar iOS app → Settings → Gateway.
72
+ 4. Paste the setup code and connect.
73
+ 5. Back in Telegram: `/pair pending` (review request IDs, role, and scopes), then approve.
74
+
75
+ The setup code is a base64-encoded JSON payload that contains:
76
+
77
+ - `url`: the Gateway WebSocket URL (`ws://...` or `wss://...`)
78
+ - `bootstrapToken`: a short-lived single-device bootstrap token used for the initial pairing handshake
79
+
80
+ That bootstrap token carries the built-in pairing bootstrap profile:
81
+
82
+ - primary handed-off `node` token stays `scopes: []`
83
+ - any handed-off `operator` token stays bounded to the bootstrap allowlist:
84
+ `operator.approvals`, `operator.read`, `operator.talk.secrets`, `operator.write`
85
+ - bootstrap scope checks are role-prefixed, not one flat scope pool:
86
+ operator scope entries only satisfy operator requests, and non-operator roles
87
+ must still request scopes under their own role prefix
88
+
89
+ Treat the setup code like a password while it is valid.
90
+
91
+ ### Approve a node device
92
+
93
+ ```bash
94
+ Durar devices list
95
+ Durar devices approve <requestId>
96
+ Durar devices reject <requestId>
97
+ ```
98
+
99
+ If the same device retries with different auth details (for example different
100
+ role/scopes/public key), the previous pending request is superseded and a new
101
+ `requestId` is created.
102
+
103
+ ### Node pairing state storage
104
+
105
+ Stored under `~/.Durar/devices/`:
106
+
107
+ - `pending.json` (short-lived; pending requests expire)
108
+ - `paired.json` (paired devices + tokens)
109
+
110
+ ### Notes
111
+
112
+ - The legacy `node.pair.*` API (CLI: `Durar nodes pending|approve|reject|rename`) is a
113
+ separate gateway-owned pairing store. WS nodes still require device pairing.
114
+ - The pairing record is the durable source of truth for approved roles. Active
115
+ device tokens stay bounded to that approved role set; a stray token entry
116
+ outside the approved roles does not create new access.
117
+
118
+ ## Related docs
119
+
120
+ - Security model + prompt injection: [Security](/gateway/security)
121
+ - Updating safely (run doctor): [Updating](/install/updating)
122
+ - Channel configs:
123
+ - Telegram: [Telegram](/channels/telegram)
124
+ - WhatsApp: [WhatsApp](/channels/whatsapp)
125
+ - Signal: [Signal](/channels/signal)
126
+ - BlueBubbles (iMessage): [BlueBubbles](/channels/bluebubbles)
127
+ - iMessage (legacy): [iMessage](/channels/imessage)
128
+ - Discord: [Discord](/channels/discord)
129
+ - Slack: [Slack](/channels/slack)