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,615 @@
1
+ ---
2
+ summary: "Multi-agent routing: isolated agents, channel accounts, and bindings"
3
+ title: Multi-Agent Routing
4
+ read_when: "You want multiple isolated agents (workspaces + auth) in one gateway process."
5
+ status: active
6
+ ---
7
+
8
+ # Multi-Agent Routing
9
+
10
+ Goal: multiple _isolated_ agents (separate workspace + `agentDir` + sessions), plus multiple channel accounts (e.g. two WhatsApps) in one running Gateway. Inbound is routed to an agent via bindings.
11
+
12
+ ## What is "one agent"?
13
+
14
+ An **agent** is a fully scoped brain with its own:
15
+
16
+ - **Workspace** (files, AGENTS.md/SOUL.md/USER.md, local notes, persona rules).
17
+ - **State directory** (`agentDir`) for auth profiles, model registry, and per-agent config.
18
+ - **Session store** (chat history + routing state) under `~/.Durar/agents/<agentId>/sessions`.
19
+
20
+ Auth profiles are **per-agent**. Each agent reads from its own:
21
+
22
+ ```text
23
+ ~/.Durar/agents/<agentId>/agent/auth-profiles.json
24
+ ```
25
+
26
+ `sessions_history` is the safer cross-session recall path here too: it returns
27
+ a bounded, sanitized view, not a raw transcript dump. Assistant recall strips
28
+ thinking tags, `<relevant-memories>` scaffolding, plain-text tool-call XML
29
+ payloads (including `<tool_call>...</tool_call>`,
30
+ `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`,
31
+ `<function_calls>...</function_calls>`, and truncated tool-call blocks),
32
+ downgraded tool-call scaffolding, leaked ASCII/full-width model control
33
+ tokens, and malformed MiniMax tool-call XML before redaction/truncation.
34
+
35
+ Main agent credentials are **not** shared automatically. Never reuse `agentDir`
36
+ across agents (it causes auth/session collisions). If you want to share creds,
37
+ copy `auth-profiles.json` into the other agent's `agentDir`.
38
+
39
+ Skills are loaded from each agent workspace plus shared roots such as
40
+ `~/.Durar/skills`, then filtered by the effective agent skill allowlist when
41
+ configured. Use `agents.defaults.skills` for a shared baseline and
42
+ `agents.list[].skills` for per-agent replacement. See
43
+ [Skills: per-agent vs shared](/tools/skills#per-agent-vs-shared-skills) and
44
+ [Skills: agent skill allowlists](/tools/skills#agent-skill-allowlists).
45
+
46
+ The Gateway can host **one agent** (default) or **many agents** side-by-side.
47
+
48
+ **Workspace note:** each agent’s workspace is the **default cwd**, not a hard
49
+ sandbox. Relative paths resolve inside the workspace, but absolute paths can
50
+ reach other host locations unless sandboxing is enabled. See
51
+ [Sandboxing](/gateway/sandboxing).
52
+
53
+ ## Paths (quick map)
54
+
55
+ - Config: `~/.Durar/Durar.json` (or `Durar_CONFIG_PATH`)
56
+ - State dir: `~/.Durar` (or `Durar_STATE_DIR`)
57
+ - Workspace: `~/.Durar/workspace` (or `~/.Durar/workspace-<agentId>`)
58
+ - Agent dir: `~/.Durar/agents/<agentId>/agent` (or `agents.list[].agentDir`)
59
+ - Sessions: `~/.Durar/agents/<agentId>/sessions`
60
+
61
+ ### Single-agent mode (default)
62
+
63
+ If you do nothing, Durar runs a single agent:
64
+
65
+ - `agentId` defaults to **`main`**.
66
+ - Sessions are keyed as `agent:main:<mainKey>`.
67
+ - Workspace defaults to `~/.Durar/workspace` (or `~/.Durar/workspace-<profile>` when `Durar_PROFILE` is set).
68
+ - State defaults to `~/.Durar/agents/main/agent`.
69
+
70
+ ## Agent helper
71
+
72
+ Use the agent wizard to add a new isolated agent:
73
+
74
+ ```bash
75
+ Durar agents add work
76
+ ```
77
+
78
+ Then add `bindings` (or let the wizard do it) to route inbound messages.
79
+
80
+ Verify with:
81
+
82
+ ```bash
83
+ Durar agents list --bindings
84
+ ```
85
+
86
+ ## Quick start
87
+
88
+ <Steps>
89
+ <Step title="Create each agent workspace">
90
+
91
+ Use the wizard or create workspaces manually:
92
+
93
+ ```bash
94
+ Durar agents add coding
95
+ Durar agents add social
96
+ ```
97
+
98
+ Each agent gets its own workspace with `SOUL.md`, `AGENTS.md`, and optional `USER.md`, plus a dedicated `agentDir` and session store under `~/.Durar/agents/<agentId>`.
99
+
100
+ </Step>
101
+
102
+ <Step title="Create channel accounts">
103
+
104
+ Create one account per agent on your preferred channels:
105
+
106
+ - Discord: one bot per agent, enable Message Content Intent, copy each token.
107
+ - Telegram: one bot per agent via BotFather, copy each token.
108
+ - WhatsApp: link each phone number per account.
109
+
110
+ ```bash
111
+ Durar channels login --channel whatsapp --account work
112
+ ```
113
+
114
+ See channel guides: [Discord](/channels/discord), [Telegram](/channels/telegram), [WhatsApp](/channels/whatsapp).
115
+
116
+ </Step>
117
+
118
+ <Step title="Add agents, accounts, and bindings">
119
+
120
+ Add agents under `agents.list`, channel accounts under `channels.<channel>.accounts`, and connect them with `bindings` (examples below).
121
+
122
+ </Step>
123
+
124
+ <Step title="Restart and verify">
125
+
126
+ ```bash
127
+ Durar gateway restart
128
+ Durar agents list --bindings
129
+ Durar channels status --probe
130
+ ```
131
+
132
+ </Step>
133
+ </Steps>
134
+
135
+ ## Multiple agents = multiple people, multiple personalities
136
+
137
+ With **multiple agents**, each `agentId` becomes a **fully isolated persona**:
138
+
139
+ - **Different phone numbers/accounts** (per channel `accountId`).
140
+ - **Different personalities** (per-agent workspace files like `AGENTS.md` and `SOUL.md`).
141
+ - **Separate auth + sessions** (no cross-talk unless explicitly enabled).
142
+
143
+ This lets **multiple people** share one Gateway server while keeping their AI “brains” and data isolated.
144
+
145
+ ## Cross-agent QMD memory search
146
+
147
+ If one agent should search another agent's QMD session transcripts, add
148
+ extra collections under `agents.list[].memorySearch.qmd.extraCollections`.
149
+ Use `agents.defaults.memorySearch.qmd.extraCollections` only when every agent
150
+ should inherit the same shared transcript collections.
151
+
152
+ ```json5
153
+ {
154
+ agents: {
155
+ defaults: {
156
+ workspace: "~/workspaces/main",
157
+ memorySearch: {
158
+ qmd: {
159
+ extraCollections: [{ path: "~/agents/family/sessions", name: "family-sessions" }],
160
+ },
161
+ },
162
+ },
163
+ list: [
164
+ {
165
+ id: "main",
166
+ workspace: "~/workspaces/main",
167
+ memorySearch: {
168
+ qmd: {
169
+ extraCollections: [{ path: "notes" }], // resolves inside workspace -> collection named "notes-main"
170
+ },
171
+ },
172
+ },
173
+ { id: "family", workspace: "~/workspaces/family" },
174
+ ],
175
+ },
176
+ memory: {
177
+ backend: "qmd",
178
+ qmd: { includeDefaultMemory: false },
179
+ },
180
+ }
181
+ ```
182
+
183
+ The extra collection path can be shared across agents, but the collection name
184
+ stays explicit when the path is outside the agent workspace. Paths inside the
185
+ workspace remain agent-scoped so each agent keeps its own transcript search set.
186
+
187
+ ## One WhatsApp number, multiple people (DM split)
188
+
189
+ You can route **different WhatsApp DMs** to different agents while staying on **one WhatsApp account**. Match on sender E.164 (like `+15551234567`) with `peer.kind: "direct"`. Replies still come from the same WhatsApp number (no per‑agent sender identity).
190
+
191
+ Important detail: direct chats collapse to the agent’s **main session key**, so true isolation requires **one agent per person**.
192
+
193
+ Example:
194
+
195
+ ```json5
196
+ {
197
+ agents: {
198
+ list: [
199
+ { id: "alex", workspace: "~/.Durar/workspace-alex" },
200
+ { id: "mia", workspace: "~/.Durar/workspace-mia" },
201
+ ],
202
+ },
203
+ bindings: [
204
+ {
205
+ agentId: "alex",
206
+ match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230001" } },
207
+ },
208
+ {
209
+ agentId: "mia",
210
+ match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551230002" } },
211
+ },
212
+ ],
213
+ channels: {
214
+ whatsapp: {
215
+ dmPolicy: "allowlist",
216
+ allowFrom: ["+15551230001", "+15551230002"],
217
+ },
218
+ },
219
+ }
220
+ ```
221
+
222
+ Notes:
223
+
224
+ - DM access control is **global per WhatsApp account** (pairing/allowlist), not per agent.
225
+ - For shared groups, bind the group to one agent or use [Broadcast groups](/channels/broadcast-groups).
226
+
227
+ ## Routing rules (how messages pick an agent)
228
+
229
+ Bindings are **deterministic** and **most-specific wins**:
230
+
231
+ 1. `peer` match (exact DM/group/channel id)
232
+ 2. `parentPeer` match (thread inheritance)
233
+ 3. `guildId + roles` (Discord role routing)
234
+ 4. `guildId` (Discord)
235
+ 5. `teamId` (Slack)
236
+ 6. `accountId` match for a channel
237
+ 7. channel-level match (`accountId: "*"`)
238
+ 8. fallback to default agent (`agents.list[].default`, else first list entry, default: `main`)
239
+
240
+ If multiple bindings match in the same tier, the first one in config order wins.
241
+ If a binding sets multiple match fields (for example `peer` + `guildId`), all specified fields are required (`AND` semantics).
242
+
243
+ Important account-scope detail:
244
+
245
+ - A binding that omits `accountId` matches the default account only.
246
+ - Use `accountId: "*"` for a channel-wide fallback across all accounts.
247
+ - If you later add the same binding for the same agent with an explicit account id, Durar upgrades the existing channel-only binding to account-scoped instead of duplicating it.
248
+
249
+ ## Multiple accounts / phone numbers
250
+
251
+ Channels that support **multiple accounts** (e.g. WhatsApp) use `accountId` to identify
252
+ each login. Each `accountId` can be routed to a different agent, so one server can host
253
+ multiple phone numbers without mixing sessions.
254
+
255
+ If you want a channel-wide default account when `accountId` is omitted, set
256
+ `channels.<channel>.defaultAccount` (optional). When unset, Durar falls back
257
+ to `default` if present, otherwise the first configured account id (sorted).
258
+
259
+ Common channels supporting this pattern include:
260
+
261
+ - `whatsapp`, `telegram`, `discord`, `slack`, `signal`, `imessage`
262
+ - `irc`, `line`, `googlechat`, `mattermost`, `matrix`, `nextcloud-talk`
263
+ - `bluebubbles`, `zalo`, `zalouser`, `nostr`, `feishu`
264
+
265
+ ## Concepts
266
+
267
+ - `agentId`: one “brain” (workspace, per-agent auth, per-agent session store).
268
+ - `accountId`: one channel account instance (e.g. WhatsApp account `"personal"` vs `"biz"`).
269
+ - `binding`: routes inbound messages to an `agentId` by `(channel, accountId, peer)` and optionally guild/team ids.
270
+ - Direct chats collapse to `agent:<agentId>:<mainKey>` (per-agent “main”; `session.mainKey`).
271
+
272
+ ## Platform examples
273
+
274
+ ### Discord bots per agent
275
+
276
+ Each Discord bot account maps to a unique `accountId`. Bind each account to an agent and keep allowlists per bot.
277
+
278
+ ```json5
279
+ {
280
+ agents: {
281
+ list: [
282
+ { id: "main", workspace: "~/.Durar/workspace-main" },
283
+ { id: "coding", workspace: "~/.Durar/workspace-coding" },
284
+ ],
285
+ },
286
+ bindings: [
287
+ { agentId: "main", match: { channel: "discord", accountId: "default" } },
288
+ { agentId: "coding", match: { channel: "discord", accountId: "coding" } },
289
+ ],
290
+ channels: {
291
+ discord: {
292
+ groupPolicy: "allowlist",
293
+ accounts: {
294
+ default: {
295
+ token: "DISCORD_BOT_TOKEN_MAIN",
296
+ guilds: {
297
+ "123456789012345678": {
298
+ channels: {
299
+ "222222222222222222": { allow: true, requireMention: false },
300
+ },
301
+ },
302
+ },
303
+ },
304
+ coding: {
305
+ token: "DISCORD_BOT_TOKEN_CODING",
306
+ guilds: {
307
+ "123456789012345678": {
308
+ channels: {
309
+ "333333333333333333": { allow: true, requireMention: false },
310
+ },
311
+ },
312
+ },
313
+ },
314
+ },
315
+ },
316
+ },
317
+ }
318
+ ```
319
+
320
+ Notes:
321
+
322
+ - Invite each bot to the guild and enable Message Content Intent.
323
+ - Tokens live in `channels.discord.accounts.<id>.token` (default account can use `DISCORD_BOT_TOKEN`).
324
+
325
+ ### Telegram bots per agent
326
+
327
+ ```json5
328
+ {
329
+ agents: {
330
+ list: [
331
+ { id: "main", workspace: "~/.Durar/workspace-main" },
332
+ { id: "alerts", workspace: "~/.Durar/workspace-alerts" },
333
+ ],
334
+ },
335
+ bindings: [
336
+ { agentId: "main", match: { channel: "telegram", accountId: "default" } },
337
+ { agentId: "alerts", match: { channel: "telegram", accountId: "alerts" } },
338
+ ],
339
+ channels: {
340
+ telegram: {
341
+ accounts: {
342
+ default: {
343
+ botToken: "123456:ABC...",
344
+ dmPolicy: "pairing",
345
+ },
346
+ alerts: {
347
+ botToken: "987654:XYZ...",
348
+ dmPolicy: "allowlist",
349
+ allowFrom: ["tg:123456789"],
350
+ },
351
+ },
352
+ },
353
+ },
354
+ }
355
+ ```
356
+
357
+ Notes:
358
+
359
+ - Create one bot per agent with BotFather and copy each token.
360
+ - Tokens live in `channels.telegram.accounts.<id>.botToken` (default account can use `TELEGRAM_BOT_TOKEN`).
361
+
362
+ ### WhatsApp numbers per agent
363
+
364
+ Link each account before starting the gateway:
365
+
366
+ ```bash
367
+ Durar channels login --channel whatsapp --account personal
368
+ Durar channels login --channel whatsapp --account biz
369
+ ```
370
+
371
+ `~/.Durar/Durar.json` (JSON5):
372
+
373
+ ```js
374
+ {
375
+ agents: {
376
+ list: [
377
+ {
378
+ id: "home",
379
+ default: true,
380
+ name: "Home",
381
+ workspace: "~/.Durar/workspace-home",
382
+ agentDir: "~/.Durar/agents/home/agent",
383
+ },
384
+ {
385
+ id: "work",
386
+ name: "Work",
387
+ workspace: "~/.Durar/workspace-work",
388
+ agentDir: "~/.Durar/agents/work/agent",
389
+ },
390
+ ],
391
+ },
392
+
393
+ // Deterministic routing: first match wins (most-specific first).
394
+ bindings: [
395
+ { agentId: "home", match: { channel: "whatsapp", accountId: "personal" } },
396
+ { agentId: "work", match: { channel: "whatsapp", accountId: "biz" } },
397
+
398
+ // Optional per-peer override (example: send a specific group to work agent).
399
+ {
400
+ agentId: "work",
401
+ match: {
402
+ channel: "whatsapp",
403
+ accountId: "personal",
404
+ peer: { kind: "group", id: "1203630...@g.us" },
405
+ },
406
+ },
407
+ ],
408
+
409
+ // Off by default: agent-to-agent messaging must be explicitly enabled + allowlisted.
410
+ tools: {
411
+ agentToAgent: {
412
+ enabled: false,
413
+ allow: ["home", "work"],
414
+ },
415
+ },
416
+
417
+ channels: {
418
+ whatsapp: {
419
+ accounts: {
420
+ personal: {
421
+ // Optional override. Default: ~/.Durar/credentials/whatsapp/personal
422
+ // authDir: "~/.Durar/credentials/whatsapp/personal",
423
+ },
424
+ biz: {
425
+ // Optional override. Default: ~/.Durar/credentials/whatsapp/biz
426
+ // authDir: "~/.Durar/credentials/whatsapp/biz",
427
+ },
428
+ },
429
+ },
430
+ },
431
+ }
432
+ ```
433
+
434
+ ## Example: WhatsApp daily chat + Telegram deep work
435
+
436
+ Split by channel: route WhatsApp to a fast everyday agent and Telegram to an Opus agent.
437
+
438
+ ```json5
439
+ {
440
+ agents: {
441
+ list: [
442
+ {
443
+ id: "chat",
444
+ name: "Everyday",
445
+ workspace: "~/.Durar/workspace-chat",
446
+ model: "anthropic/claude-sonnet-4-6",
447
+ },
448
+ {
449
+ id: "opus",
450
+ name: "Deep Work",
451
+ workspace: "~/.Durar/workspace-opus",
452
+ model: "anthropic/claude-opus-4-6",
453
+ },
454
+ ],
455
+ },
456
+ bindings: [
457
+ { agentId: "chat", match: { channel: "whatsapp" } },
458
+ { agentId: "opus", match: { channel: "telegram" } },
459
+ ],
460
+ }
461
+ ```
462
+
463
+ Notes:
464
+
465
+ - If you have multiple accounts for a channel, add `accountId` to the binding (for example `{ channel: "whatsapp", accountId: "personal" }`).
466
+ - To route a single DM/group to Opus while keeping the rest on chat, add a `match.peer` binding for that peer; peer matches always win over channel-wide rules.
467
+
468
+ ## Example: same channel, one peer to Opus
469
+
470
+ Keep WhatsApp on the fast agent, but route one DM to Opus:
471
+
472
+ ```json5
473
+ {
474
+ agents: {
475
+ list: [
476
+ {
477
+ id: "chat",
478
+ name: "Everyday",
479
+ workspace: "~/.Durar/workspace-chat",
480
+ model: "anthropic/claude-sonnet-4-6",
481
+ },
482
+ {
483
+ id: "opus",
484
+ name: "Deep Work",
485
+ workspace: "~/.Durar/workspace-opus",
486
+ model: "anthropic/claude-opus-4-6",
487
+ },
488
+ ],
489
+ },
490
+ bindings: [
491
+ {
492
+ agentId: "opus",
493
+ match: { channel: "whatsapp", peer: { kind: "direct", id: "+15551234567" } },
494
+ },
495
+ { agentId: "chat", match: { channel: "whatsapp" } },
496
+ ],
497
+ }
498
+ ```
499
+
500
+ Peer bindings always win, so keep them above the channel-wide rule.
501
+
502
+ ## Family agent bound to a WhatsApp group
503
+
504
+ Bind a dedicated family agent to a single WhatsApp group, with mention gating
505
+ and a tighter tool policy:
506
+
507
+ ```json5
508
+ {
509
+ agents: {
510
+ list: [
511
+ {
512
+ id: "family",
513
+ name: "Family",
514
+ workspace: "~/.Durar/workspace-family",
515
+ identity: { name: "Family Bot" },
516
+ groupChat: {
517
+ mentionPatterns: ["@family", "@familybot", "@Family Bot"],
518
+ },
519
+ sandbox: {
520
+ mode: "all",
521
+ scope: "agent",
522
+ },
523
+ tools: {
524
+ allow: [
525
+ "exec",
526
+ "read",
527
+ "sessions_list",
528
+ "sessions_history",
529
+ "sessions_send",
530
+ "sessions_spawn",
531
+ "session_status",
532
+ ],
533
+ deny: ["write", "edit", "apply_patch", "browser", "canvas", "nodes", "cron"],
534
+ },
535
+ },
536
+ ],
537
+ },
538
+ bindings: [
539
+ {
540
+ agentId: "family",
541
+ match: {
542
+ channel: "whatsapp",
543
+ peer: { kind: "group", id: "120363999999999999@g.us" },
544
+ },
545
+ },
546
+ ],
547
+ }
548
+ ```
549
+
550
+ Notes:
551
+
552
+ - Tool allow/deny lists are **tools**, not skills. If a skill needs to run a
553
+ binary, ensure `exec` is allowed and the binary exists in the sandbox.
554
+ - For stricter gating, set `agents.list[].groupChat.mentionPatterns` and keep
555
+ group allowlists enabled for the channel.
556
+
557
+ ## Per-Agent Sandbox and Tool Configuration
558
+
559
+ Each agent can have its own sandbox and tool restrictions:
560
+
561
+ ```js
562
+ {
563
+ agents: {
564
+ list: [
565
+ {
566
+ id: "personal",
567
+ workspace: "~/.Durar/workspace-personal",
568
+ sandbox: {
569
+ mode: "off", // No sandbox for personal agent
570
+ },
571
+ // No tool restrictions - all tools available
572
+ },
573
+ {
574
+ id: "family",
575
+ workspace: "~/.Durar/workspace-family",
576
+ sandbox: {
577
+ mode: "all", // Always sandboxed
578
+ scope: "agent", // One container per agent
579
+ docker: {
580
+ // Optional one-time setup after container creation
581
+ setupCommand: "apt-get update && apt-get install -y git curl",
582
+ },
583
+ },
584
+ tools: {
585
+ allow: ["read"], // Only read tool
586
+ deny: ["exec", "write", "edit", "apply_patch"], // Deny others
587
+ },
588
+ },
589
+ ],
590
+ },
591
+ }
592
+ ```
593
+
594
+ Note: `setupCommand` lives under `sandbox.docker` and runs once on container creation.
595
+ Per-agent `sandbox.docker.*` overrides are ignored when the resolved scope is `"shared"`.
596
+
597
+ **Benefits:**
598
+
599
+ - **Security isolation**: Restrict tools for untrusted agents
600
+ - **Resource control**: Sandbox specific agents while keeping others on host
601
+ - **Flexible policies**: Different permissions per agent
602
+
603
+ Note: `tools.elevated` is **global** and sender-based; it is not configurable per agent.
604
+ If you need per-agent boundaries, use `agents.list[].tools` to deny `exec`.
605
+ For group targeting, use `agents.list[].groupChat.mentionPatterns` so @mentions map cleanly to the intended agent.
606
+
607
+ See [Multi-Agent Sandbox & Tools](/tools/multi-agent-sandbox-tools) for detailed examples.
608
+
609
+ ## Related
610
+
611
+ - [Channel Routing](/channels/channel-routing) — how messages route to agents
612
+ - [Sub-Agents](/tools/subagents) — spawning background agent runs
613
+ - [ACP Agents](/tools/acp-agents) — running external coding harnesses
614
+ - [Presence](/concepts/presence) — agent presence and availability
615
+ - [Session](/concepts/session) — session isolation and routing