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,373 @@
1
+ ---
2
+ summary: “Per-agent sandbox + tool restrictions, precedence, and examples”
3
+ title: Multi-Agent Sandbox & Tools
4
+ read_when: “You want per-agent sandboxing or per-agent tool allow/deny policies in a multi-agent gateway.”
5
+ status: active
6
+ ---
7
+
8
+ # Multi-Agent Sandbox & Tools Configuration
9
+
10
+ Each agent in a multi-agent setup can override the global sandbox and tool
11
+ policy. This page covers per-agent configuration, precedence rules, and
12
+ examples.
13
+
14
+ - **Sandbox backends and modes**: see [Sandboxing](/gateway/sandboxing).
15
+ - **Debugging blocked tools**: see [Sandbox vs Tool Policy vs Elevated](/gateway/sandbox-vs-tool-policy-vs-elevated) and `Durar sandbox explain`.
16
+ - **Elevated exec**: see [Elevated Mode](/tools/elevated).
17
+
18
+ Auth is per-agent: each agent reads from its own `agentDir` auth store at
19
+ `~/.Durar/agents/<agentId>/agent/auth-profiles.json`.
20
+ Credentials are **not** shared between agents. Never reuse `agentDir` across agents.
21
+ If you want to share creds, copy `auth-profiles.json` into the other agent's `agentDir`.
22
+
23
+ ---
24
+
25
+ ## Configuration Examples
26
+
27
+ ### Example 1: Personal + Restricted Family Agent
28
+
29
+ ```json
30
+ {
31
+ "agents": {
32
+ "list": [
33
+ {
34
+ "id": "main",
35
+ "default": true,
36
+ "name": "Personal Assistant",
37
+ "workspace": "~/.Durar/workspace",
38
+ "sandbox": { "mode": "off" }
39
+ },
40
+ {
41
+ "id": "family",
42
+ "name": "Family Bot",
43
+ "workspace": "~/.Durar/workspace-family",
44
+ "sandbox": {
45
+ "mode": "all",
46
+ "scope": "agent"
47
+ },
48
+ "tools": {
49
+ "allow": ["read"],
50
+ "deny": ["exec", "write", "edit", "apply_patch", "process", "browser"]
51
+ }
52
+ }
53
+ ]
54
+ },
55
+ "bindings": [
56
+ {
57
+ "agentId": "family",
58
+ "match": {
59
+ "provider": "whatsapp",
60
+ "accountId": "*",
61
+ "peer": {
62
+ "kind": "group",
63
+ "id": "120363424282127706@g.us"
64
+ }
65
+ }
66
+ }
67
+ ]
68
+ }
69
+ ```
70
+
71
+ **Result:**
72
+
73
+ - `main` agent: Runs on host, full tool access
74
+ - `family` agent: Runs in Docker (one container per agent), only `read` tool
75
+
76
+ ---
77
+
78
+ ### Example 2: Work Agent with Shared Sandbox
79
+
80
+ ```json
81
+ {
82
+ "agents": {
83
+ "list": [
84
+ {
85
+ "id": "personal",
86
+ "workspace": "~/.Durar/workspace-personal",
87
+ "sandbox": { "mode": "off" }
88
+ },
89
+ {
90
+ "id": "work",
91
+ "workspace": "~/.Durar/workspace-work",
92
+ "sandbox": {
93
+ "mode": "all",
94
+ "scope": "shared",
95
+ "workspaceRoot": "/tmp/work-sandboxes"
96
+ },
97
+ "tools": {
98
+ "allow": ["read", "write", "apply_patch", "exec"],
99
+ "deny": ["browser", "gateway", "discord"]
100
+ }
101
+ }
102
+ ]
103
+ }
104
+ }
105
+ ```
106
+
107
+ ---
108
+
109
+ ### Example 2b: Global coding profile + messaging-only agent
110
+
111
+ ```json
112
+ {
113
+ "tools": { "profile": "coding" },
114
+ "agents": {
115
+ "list": [
116
+ {
117
+ "id": "support",
118
+ "tools": { "profile": "messaging", "allow": ["slack"] }
119
+ }
120
+ ]
121
+ }
122
+ }
123
+ ```
124
+
125
+ **Result:**
126
+
127
+ - default agents get coding tools
128
+ - `support` agent is messaging-only (+ Slack tool)
129
+
130
+ ---
131
+
132
+ ### Example 3: Different Sandbox Modes per Agent
133
+
134
+ ```json
135
+ {
136
+ "agents": {
137
+ "defaults": {
138
+ "sandbox": {
139
+ "mode": "non-main", // Global default
140
+ "scope": "session"
141
+ }
142
+ },
143
+ "list": [
144
+ {
145
+ "id": "main",
146
+ "workspace": "~/.Durar/workspace",
147
+ "sandbox": {
148
+ "mode": "off" // Override: main never sandboxed
149
+ }
150
+ },
151
+ {
152
+ "id": "public",
153
+ "workspace": "~/.Durar/workspace-public",
154
+ "sandbox": {
155
+ "mode": "all", // Override: public always sandboxed
156
+ "scope": "agent"
157
+ },
158
+ "tools": {
159
+ "allow": ["read"],
160
+ "deny": ["exec", "write", "edit", "apply_patch"]
161
+ }
162
+ }
163
+ ]
164
+ }
165
+ }
166
+ ```
167
+
168
+ ---
169
+
170
+ ## Configuration Precedence
171
+
172
+ When both global (`agents.defaults.*`) and agent-specific (`agents.list[].*`) configs exist:
173
+
174
+ ### Sandbox Config
175
+
176
+ Agent-specific settings override global:
177
+
178
+ ```
179
+ agents.list[].sandbox.mode > agents.defaults.sandbox.mode
180
+ agents.list[].sandbox.scope > agents.defaults.sandbox.scope
181
+ agents.list[].sandbox.workspaceRoot > agents.defaults.sandbox.workspaceRoot
182
+ agents.list[].sandbox.workspaceAccess > agents.defaults.sandbox.workspaceAccess
183
+ agents.list[].sandbox.docker.* > agents.defaults.sandbox.docker.*
184
+ agents.list[].sandbox.browser.* > agents.defaults.sandbox.browser.*
185
+ agents.list[].sandbox.prune.* > agents.defaults.sandbox.prune.*
186
+ ```
187
+
188
+ **Notes:**
189
+
190
+ - `agents.list[].sandbox.{docker,browser,prune}.*` overrides `agents.defaults.sandbox.{docker,browser,prune}.*` for that agent (ignored when sandbox scope resolves to `"shared"`).
191
+
192
+ ### Tool Restrictions
193
+
194
+ The filtering order is:
195
+
196
+ 1. **Tool profile** (`tools.profile` or `agents.list[].tools.profile`)
197
+ 2. **Provider tool profile** (`tools.byProvider[provider].profile` or `agents.list[].tools.byProvider[provider].profile`)
198
+ 3. **Global tool policy** (`tools.allow` / `tools.deny`)
199
+ 4. **Provider tool policy** (`tools.byProvider[provider].allow/deny`)
200
+ 5. **Agent-specific tool policy** (`agents.list[].tools.allow/deny`)
201
+ 6. **Agent provider policy** (`agents.list[].tools.byProvider[provider].allow/deny`)
202
+ 7. **Sandbox tool policy** (`tools.sandbox.tools` or `agents.list[].tools.sandbox.tools`)
203
+ 8. **Subagent tool policy** (`tools.subagents.tools`, if applicable)
204
+
205
+ Each level can further restrict tools, but cannot grant back denied tools from earlier levels.
206
+ If `agents.list[].tools.sandbox.tools` is set, it replaces `tools.sandbox.tools` for that agent.
207
+ If `agents.list[].tools.profile` is set, it overrides `tools.profile` for that agent.
208
+ Provider tool keys accept either `provider` (e.g. `google-antigravity`) or `provider/model` (e.g. `openai/gpt-5.4`).
209
+
210
+ Tool policies support `group:*` shorthands that expand to multiple tools. See [Tool groups](/gateway/sandbox-vs-tool-policy-vs-elevated#tool-groups-shorthands) for the full list.
211
+
212
+ Per-agent elevated overrides (`agents.list[].tools.elevated`) can further restrict elevated exec for specific agents. See [Elevated Mode](/tools/elevated) for details.
213
+
214
+ ---
215
+
216
+ ## Migration from Single Agent
217
+
218
+ **Before (single agent):**
219
+
220
+ ```json
221
+ {
222
+ "agents": {
223
+ "defaults": {
224
+ "workspace": "~/.Durar/workspace",
225
+ "sandbox": {
226
+ "mode": "non-main"
227
+ }
228
+ }
229
+ },
230
+ "tools": {
231
+ "sandbox": {
232
+ "tools": {
233
+ "allow": ["read", "write", "apply_patch", "exec"],
234
+ "deny": []
235
+ }
236
+ }
237
+ }
238
+ }
239
+ ```
240
+
241
+ **After (multi-agent with different profiles):**
242
+
243
+ ```json
244
+ {
245
+ "agents": {
246
+ "list": [
247
+ {
248
+ "id": "main",
249
+ "default": true,
250
+ "workspace": "~/.Durar/workspace",
251
+ "sandbox": { "mode": "off" }
252
+ }
253
+ ]
254
+ }
255
+ }
256
+ ```
257
+
258
+ Legacy `agent.*` configs are migrated by `Durar doctor`; prefer `agents.defaults` + `agents.list` going forward.
259
+
260
+ ---
261
+
262
+ ## Tool Restriction Examples
263
+
264
+ ### Read-only Agent
265
+
266
+ ```json
267
+ {
268
+ "tools": {
269
+ "allow": ["read"],
270
+ "deny": ["exec", "write", "edit", "apply_patch", "process"]
271
+ }
272
+ }
273
+ ```
274
+
275
+ ### Safe Execution Agent (no file modifications)
276
+
277
+ ```json
278
+ {
279
+ "tools": {
280
+ "allow": ["read", "exec", "process"],
281
+ "deny": ["write", "edit", "apply_patch", "browser", "gateway"]
282
+ }
283
+ }
284
+ ```
285
+
286
+ ### Communication-only Agent
287
+
288
+ ```json
289
+ {
290
+ "tools": {
291
+ "sessions": { "visibility": "tree" },
292
+ "allow": ["sessions_list", "sessions_send", "sessions_history", "session_status"],
293
+ "deny": ["exec", "write", "edit", "apply_patch", "read", "browser"]
294
+ }
295
+ }
296
+ ```
297
+
298
+ `sessions_history` in this profile still returns a bounded, sanitized recall
299
+ view rather than a raw transcript dump. Assistant recall strips thinking tags,
300
+ `<relevant-memories>` scaffolding, plain-text tool-call XML payloads
301
+ (including `<tool_call>...</tool_call>`,
302
+ `<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`,
303
+ `<function_calls>...</function_calls>`, and truncated tool-call blocks),
304
+ downgraded tool-call scaffolding, leaked ASCII/full-width model control
305
+ tokens, and malformed MiniMax tool-call XML before redaction/truncation.
306
+
307
+ ---
308
+
309
+ ## Common Pitfall: "non-main"
310
+
311
+ `agents.defaults.sandbox.mode: "non-main"` is based on `session.mainKey` (default `"main"`),
312
+ not the agent id. Group/channel sessions always get their own keys, so they
313
+ are treated as non-main and will be sandboxed. If you want an agent to never
314
+ sandbox, set `agents.list[].sandbox.mode: "off"`.
315
+
316
+ ---
317
+
318
+ ## Testing
319
+
320
+ After configuring multi-agent sandbox and tools:
321
+
322
+ 1. **Check agent resolution:**
323
+
324
+ ```exec
325
+ Durar agents list --bindings
326
+ ```
327
+
328
+ 2. **Verify sandbox containers:**
329
+
330
+ ```exec
331
+ docker ps --filter "name=Durar-sbx-"
332
+ ```
333
+
334
+ 3. **Test tool restrictions:**
335
+ - Send a message requiring restricted tools
336
+ - Verify the agent cannot use denied tools
337
+
338
+ 4. **Monitor logs:**
339
+
340
+ ```exec
341
+ tail -f "${Durar_STATE_DIR:-$HOME/.Durar}/logs/gateway.log" | grep -E "routing|sandbox|tools"
342
+ ```
343
+
344
+ ---
345
+
346
+ ## Troubleshooting
347
+
348
+ ### Agent not sandboxed despite `mode: "all"`
349
+
350
+ - Check if there's a global `agents.defaults.sandbox.mode` that overrides it
351
+ - Agent-specific config takes precedence, so set `agents.list[].sandbox.mode: "all"`
352
+
353
+ ### Tools still available despite deny list
354
+
355
+ - Check tool filtering order: global → agent → sandbox → subagent
356
+ - Each level can only further restrict, not grant back
357
+ - Verify with logs: `[tools] filtering tools for agent:${agentId}`
358
+
359
+ ### Container not isolated per agent
360
+
361
+ - Set `scope: "agent"` in agent-specific sandbox config
362
+ - Default is `"session"` which creates one container per session
363
+
364
+ ---
365
+
366
+ ## See also
367
+
368
+ - [Sandboxing](/gateway/sandboxing) -- full sandbox reference (modes, scopes, backends, images)
369
+ - [Sandbox vs Tool Policy vs Elevated](/gateway/sandbox-vs-tool-policy-vs-elevated) -- debugging "why is this blocked?"
370
+ - [Elevated Mode](/tools/elevated)
371
+ - [Multi-Agent Routing](/concepts/multi-agent)
372
+ - [Sandbox Configuration](/gateway/configuration-reference#agentsdefaultssandbox)
373
+ - [Session Management](/concepts/session)
@@ -0,0 +1,100 @@
1
+ ---
2
+ summary: "Ollama Web Search via your configured Ollama host"
3
+ read_when:
4
+ - You want to use Ollama for web_search
5
+ - You want a key-free web_search provider
6
+ - You need Ollama Web Search setup guidance
7
+ title: "Ollama Web Search"
8
+ ---
9
+
10
+ # Ollama Web Search
11
+
12
+ Durar supports **Ollama Web Search** as a bundled `web_search` provider.
13
+ It uses Ollama's experimental web-search API and returns structured results
14
+ with titles, URLs, and snippets.
15
+
16
+ Unlike the Ollama model provider, this setup does not need an API key by
17
+ default. It does require:
18
+
19
+ - an Ollama host that is reachable from Durar
20
+ - `ollama signin`
21
+
22
+ ## Setup
23
+
24
+ <Steps>
25
+ <Step title="Start Ollama">
26
+ Make sure Ollama is installed and running.
27
+ </Step>
28
+ <Step title="Sign in">
29
+ Run:
30
+
31
+ ```bash
32
+ ollama signin
33
+ ```
34
+
35
+ </Step>
36
+ <Step title="Choose Ollama Web Search">
37
+ Run:
38
+
39
+ ```bash
40
+ Durar configure --section web
41
+ ```
42
+
43
+ Then select **Ollama Web Search** as the provider.
44
+
45
+ </Step>
46
+ </Steps>
47
+
48
+ If you already use Ollama for models, Ollama Web Search reuses the same
49
+ configured host.
50
+
51
+ ## Config
52
+
53
+ ```json5
54
+ {
55
+ tools: {
56
+ web: {
57
+ search: {
58
+ provider: "ollama",
59
+ },
60
+ },
61
+ },
62
+ }
63
+ ```
64
+
65
+ Optional Ollama host override:
66
+
67
+ ```json5
68
+ {
69
+ models: {
70
+ providers: {
71
+ ollama: {
72
+ baseUrl: "http://ollama-host:11434",
73
+ },
74
+ },
75
+ },
76
+ }
77
+ ```
78
+
79
+ If no explicit Ollama base URL is set, Durar uses `http://127.0.0.1:11434`.
80
+
81
+ If your Ollama host expects bearer auth, Durar reuses
82
+ `models.providers.ollama.apiKey` (or the matching env-backed provider auth)
83
+ for web-search requests too.
84
+
85
+ ## Notes
86
+
87
+ - No web-search-specific API key field is required for this provider.
88
+ - If the Ollama host is auth-protected, Durar reuses the normal Ollama
89
+ provider API key when present.
90
+ - Durar warns during setup if Ollama is unreachable or not signed in, but
91
+ it does not block selection.
92
+ - Runtime auto-detect can fall back to Ollama Web Search when no higher-priority
93
+ credentialed provider is configured.
94
+ - The provider uses Ollama's experimental `/api/experimental/web_search`
95
+ endpoint.
96
+
97
+ ## Related
98
+
99
+ - [Web Search overview](/tools/web) -- all providers and auto-detection
100
+ - [Ollama](/providers/ollama) -- Ollama model setup and cloud/local modes
@@ -0,0 +1,176 @@
1
+ ---
2
+ title: "PDF Tool"
3
+ summary: "Analyze one or more PDF documents with native provider support and extraction fallback"
4
+ read_when:
5
+ - You want to analyze PDFs from agents
6
+ - You need exact pdf tool parameters and limits
7
+ - You are debugging native PDF mode vs extraction fallback
8
+ ---
9
+
10
+ # PDF tool
11
+
12
+ `pdf` analyzes one or more PDF documents and returns text.
13
+
14
+ Quick behavior:
15
+
16
+ - Native provider mode for Anthropic and Google model providers.
17
+ - Extraction fallback mode for other providers (extract text first, then page images when needed).
18
+ - Supports single (`pdf`) or multi (`pdfs`) input, max 10 PDFs per call.
19
+
20
+ ## Availability
21
+
22
+ The tool is only registered when Durar can resolve a PDF-capable model config for the agent:
23
+
24
+ 1. `agents.defaults.pdfModel`
25
+ 2. fallback to `agents.defaults.imageModel`
26
+ 3. fallback to the agent's resolved session/default model
27
+ 4. if native-PDF providers are auth-backed, prefer them ahead of generic image fallback candidates
28
+
29
+ If no usable model can be resolved, the `pdf` tool is not exposed.
30
+
31
+ Availability notes:
32
+
33
+ - The fallback chain is auth-aware. A configured `provider/model` only counts if
34
+ Durar can actually authenticate that provider for the agent.
35
+ - Native PDF providers are currently **Anthropic** and **Google**.
36
+ - If the resolved session/default provider already has a configured vision/PDF
37
+ model, the PDF tool reuses that before falling back to other auth-backed
38
+ providers.
39
+
40
+ ## Input reference
41
+
42
+ - `pdf` (`string`): one PDF path or URL
43
+ - `pdfs` (`string[]`): multiple PDF paths or URLs, up to 10 total
44
+ - `prompt` (`string`): analysis prompt, default `Analyze this PDF document.`
45
+ - `pages` (`string`): page filter like `1-5` or `1,3,7-9`
46
+ - `model` (`string`): optional model override (`provider/model`)
47
+ - `maxBytesMb` (`number`): per-PDF size cap in MB
48
+
49
+ Input notes:
50
+
51
+ - `pdf` and `pdfs` are merged and deduplicated before loading.
52
+ - If no PDF input is provided, the tool errors.
53
+ - `pages` is parsed as 1-based page numbers, deduped, sorted, and clamped to the configured max pages.
54
+ - `maxBytesMb` defaults to `agents.defaults.pdfMaxBytesMb` or `10`.
55
+
56
+ ## Supported PDF references
57
+
58
+ - local file path (including `~` expansion)
59
+ - `file://` URL
60
+ - `http://` and `https://` URL
61
+
62
+ Reference notes:
63
+
64
+ - Other URI schemes (for example `ftp://`) are rejected with `unsupported_pdf_reference`.
65
+ - In sandbox mode, remote `http(s)` URLs are rejected.
66
+ - With workspace-only file policy enabled, local file paths outside allowed roots are rejected.
67
+
68
+ ## Execution modes
69
+
70
+ ### Native provider mode
71
+
72
+ Native mode is used for provider `anthropic` and `google`.
73
+ The tool sends raw PDF bytes directly to provider APIs.
74
+
75
+ Native mode limits:
76
+
77
+ - `pages` is not supported. If set, the tool returns an error.
78
+ - Multi-PDF input is supported; each PDF is sent as a native document block /
79
+ inline PDF part before the prompt.
80
+
81
+ ### Extraction fallback mode
82
+
83
+ Fallback mode is used for non-native providers.
84
+
85
+ Flow:
86
+
87
+ 1. Extract text from selected pages (up to `agents.defaults.pdfMaxPages`, default `20`).
88
+ 2. If extracted text length is below `200` chars, render selected pages to PNG images and include them.
89
+ 3. Send extracted content plus prompt to the selected model.
90
+
91
+ Fallback details:
92
+
93
+ - Page image extraction uses a pixel budget of `4,000,000`.
94
+ - If the target model does not support image input and there is no extractable text, the tool errors.
95
+ - If text extraction succeeds but image extraction would require vision on a
96
+ text-only model, Durar drops the rendered images and continues with the
97
+ extracted text.
98
+ - Extraction fallback requires `pdfjs-dist` (and `@napi-rs/canvas` for image rendering).
99
+
100
+ ## Config
101
+
102
+ ```json5
103
+ {
104
+ agents: {
105
+ defaults: {
106
+ pdfModel: {
107
+ primary: "anthropic/claude-opus-4-6",
108
+ fallbacks: ["openai/gpt-5.4-mini"],
109
+ },
110
+ pdfMaxBytesMb: 10,
111
+ pdfMaxPages: 20,
112
+ },
113
+ },
114
+ }
115
+ ```
116
+
117
+ See [Configuration Reference](/gateway/configuration-reference) for full field details.
118
+
119
+ ## Output details
120
+
121
+ The tool returns text in `content[0].text` and structured metadata in `details`.
122
+
123
+ Common `details` fields:
124
+
125
+ - `model`: resolved model ref (`provider/model`)
126
+ - `native`: `true` for native provider mode, `false` for fallback
127
+ - `attempts`: fallback attempts that failed before success
128
+
129
+ Path fields:
130
+
131
+ - single PDF input: `details.pdf`
132
+ - multiple PDF inputs: `details.pdfs[]` with `pdf` entries
133
+ - sandbox path rewrite metadata (when applicable): `rewrittenFrom`
134
+
135
+ ## Error behavior
136
+
137
+ - Missing PDF input: throws `pdf required: provide a path or URL to a PDF document`
138
+ - Too many PDFs: returns structured error in `details.error = "too_many_pdfs"`
139
+ - Unsupported reference scheme: returns `details.error = "unsupported_pdf_reference"`
140
+ - Native mode with `pages`: throws clear `pages is not supported with native PDF providers` error
141
+
142
+ ## Examples
143
+
144
+ Single PDF:
145
+
146
+ ```json
147
+ {
148
+ "pdf": "/tmp/report.pdf",
149
+ "prompt": "Summarize this report in 5 bullets"
150
+ }
151
+ ```
152
+
153
+ Multiple PDFs:
154
+
155
+ ```json
156
+ {
157
+ "pdfs": ["/tmp/q1.pdf", "/tmp/q2.pdf"],
158
+ "prompt": "Compare risks and timeline changes across both documents"
159
+ }
160
+ ```
161
+
162
+ Page-filtered fallback model:
163
+
164
+ ```json
165
+ {
166
+ "pdf": "https://example.com/report.pdf",
167
+ "pages": "1-3,7",
168
+ "model": "openai/gpt-5.4-mini",
169
+ "prompt": "Extract only customer-impacting incidents"
170
+ }
171
+ ```
172
+
173
+ ## Related
174
+
175
+ - [Tools Overview](/tools) — all available agent tools
176
+ - [Configuration Reference](/gateway/configuration-reference#agent-defaults) — pdfMaxBytesMb and pdfMaxPages config