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.
- package/CHANGELOG.md +5497 -0
- package/LICENSE +21 -0
- package/README.md +614 -0
- package/assets/avatar-placeholder.svg +19 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/dmg-background-small.png +0 -0
- package/assets/dmg-background.png +0 -0
- package/docs/.i18n/README.md +72 -0
- package/docs/.i18n/ar-navigation.json +18 -0
- package/docs/.i18n/de-navigation.json +18 -0
- package/docs/.i18n/es-navigation.json +18 -0
- package/docs/.i18n/fr-navigation.json +18 -0
- package/docs/.i18n/glossary.ar.json +5 -0
- package/docs/.i18n/glossary.de.json +5 -0
- package/docs/.i18n/glossary.es.json +5 -0
- package/docs/.i18n/glossary.fr.json +5 -0
- package/docs/.i18n/glossary.id.json +5 -0
- package/docs/.i18n/glossary.it.json +5 -0
- package/docs/.i18n/glossary.ja-JP.json +14 -0
- package/docs/.i18n/glossary.ko.json +5 -0
- package/docs/.i18n/glossary.pl.json +5 -0
- package/docs/.i18n/glossary.pt-BR.json +5 -0
- package/docs/.i18n/glossary.tr.json +5 -0
- package/docs/.i18n/glossary.zh-CN.json +358 -0
- package/docs/.i18n/id-navigation.json +18 -0
- package/docs/.i18n/it-navigation.json +18 -0
- package/docs/.i18n/ja-navigation.json +18 -0
- package/docs/.i18n/ko-navigation.json +18 -0
- package/docs/.i18n/pl-navigation.json +18 -0
- package/docs/.i18n/pt-BR-navigation.json +18 -0
- package/docs/.i18n/tr-navigation.json +18 -0
- package/docs/.i18n/zh-Hans-navigation.json +544 -0
- package/docs/assets/install-script.svg +1 -0
- package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
- package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
- package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
- package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
- package/docs/assets/macos-onboarding/05-permissions.png +0 -0
- package/docs/assets/openclaw-logo-text-dark.png +0 -0
- package/docs/assets/openclaw-logo-text-dark.svg +418 -0
- package/docs/assets/openclaw-logo-text.png +0 -0
- package/docs/assets/openclaw-logo-text.svg +418 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/showcase/agents-ui.jpg +0 -0
- package/docs/assets/showcase/bambu-cli.png +0 -0
- package/docs/assets/showcase/codexmonitor.png +0 -0
- package/docs/assets/showcase/gohome-grafana.png +0 -0
- package/docs/assets/showcase/ios-testflight.jpg +0 -0
- package/docs/assets/showcase/oura-health.png +0 -0
- package/docs/assets/showcase/padel-cli.svg +11 -0
- package/docs/assets/showcase/padel-screenshot.jpg +0 -0
- package/docs/assets/showcase/papla-tts.jpg +0 -0
- package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
- package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
- package/docs/assets/showcase/roborock-status.svg +13 -0
- package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
- package/docs/assets/showcase/snag.png +0 -0
- package/docs/assets/showcase/tesco-shop.jpg +0 -0
- package/docs/assets/showcase/wienerlinien.png +0 -0
- package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
- package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
- package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
- package/docs/assets/sponsors/blacksmith-light.svg +14 -0
- package/docs/assets/sponsors/blacksmith.svg +14 -0
- package/docs/assets/sponsors/convex-light.svg +16 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/github-light.svg +3 -0
- package/docs/assets/sponsors/github.svg +3 -0
- package/docs/assets/sponsors/nvidia-dark.svg +9 -0
- package/docs/assets/sponsors/nvidia.svg +9 -0
- package/docs/assets/sponsors/openai-light.svg +3 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel-light.svg +5 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +80 -0
- package/docs/automation/auth-monitoring.md +8 -0
- package/docs/automation/clawflow.md +8 -0
- package/docs/automation/cron-jobs.md +410 -0
- package/docs/automation/cron-vs-heartbeat.md +8 -0
- package/docs/automation/gmail-pubsub.md +8 -0
- package/docs/automation/hooks.md +303 -0
- package/docs/automation/index.md +115 -0
- package/docs/automation/poll.md +8 -0
- package/docs/automation/standing-orders.md +254 -0
- package/docs/automation/taskflow.md +82 -0
- package/docs/automation/tasks.md +323 -0
- package/docs/automation/troubleshooting.md +8 -0
- package/docs/automation/webhook.md +8 -0
- package/docs/brave-search.md +103 -0
- package/docs/channels/bluebubbles.md +435 -0
- package/docs/channels/broadcast-groups.md +442 -0
- package/docs/channels/channel-routing.md +139 -0
- package/docs/channels/discord.md +1254 -0
- package/docs/channels/feishu.md +793 -0
- package/docs/channels/googlechat.md +270 -0
- package/docs/channels/group-messages.md +84 -0
- package/docs/channels/groups.md +410 -0
- package/docs/channels/imessage.md +427 -0
- package/docs/channels/index.md +50 -0
- package/docs/channels/irc.md +252 -0
- package/docs/channels/line.md +225 -0
- package/docs/channels/location.md +56 -0
- package/docs/channels/matrix.md +869 -0
- package/docs/channels/mattermost.md +472 -0
- package/docs/channels/msteams.md +805 -0
- package/docs/channels/nextcloud-talk.md +149 -0
- package/docs/channels/nostr.md +252 -0
- package/docs/channels/pairing.md +129 -0
- package/docs/channels/qqbot.md +193 -0
- package/docs/channels/signal.md +337 -0
- package/docs/channels/slack.md +681 -0
- package/docs/channels/synology-chat.md +185 -0
- package/docs/channels/telegram.md +1072 -0
- package/docs/channels/tlon.md +290 -0
- package/docs/channels/troubleshooting.md +133 -0
- package/docs/channels/twitch.md +394 -0
- package/docs/channels/whatsapp.md +488 -0
- package/docs/channels/zalo.md +254 -0
- package/docs/channels/zalouser.md +195 -0
- package/docs/ci.md +66 -0
- package/docs/cli/acp.md +316 -0
- package/docs/cli/agent.md +57 -0
- package/docs/cli/agents.md +220 -0
- package/docs/cli/approvals.md +136 -0
- package/docs/cli/backup.md +84 -0
- package/docs/cli/browser.md +233 -0
- package/docs/cli/channels.md +131 -0
- package/docs/cli/clawbot.md +21 -0
- package/docs/cli/completion.md +35 -0
- package/docs/cli/config.md +353 -0
- package/docs/cli/configure.md +70 -0
- package/docs/cli/cron.md +167 -0
- package/docs/cli/daemon.md +57 -0
- package/docs/cli/dashboard.md +22 -0
- package/docs/cli/devices.md +171 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +48 -0
- package/docs/cli/docs.md +28 -0
- package/docs/cli/doctor.md +63 -0
- package/docs/cli/flows.md +18 -0
- package/docs/cli/gateway.md +307 -0
- package/docs/cli/health.md +36 -0
- package/docs/cli/hooks.md +337 -0
- package/docs/cli/index.md +1836 -0
- package/docs/cli/logs.md +59 -0
- package/docs/cli/mcp.md +505 -0
- package/docs/cli/memory.md +139 -0
- package/docs/cli/message.md +300 -0
- package/docs/cli/models.md +136 -0
- package/docs/cli/node.md +137 -0
- package/docs/cli/nodes.md +66 -0
- package/docs/cli/onboard.md +171 -0
- package/docs/cli/pairing.md +65 -0
- package/docs/cli/plugins.md +305 -0
- package/docs/cli/qr.md +52 -0
- package/docs/cli/reset.md +35 -0
- package/docs/cli/sandbox.md +197 -0
- package/docs/cli/secrets.md +197 -0
- package/docs/cli/security.md +86 -0
- package/docs/cli/sessions.md +113 -0
- package/docs/cli/setup.md +45 -0
- package/docs/cli/skills.md +59 -0
- package/docs/cli/status.md +35 -0
- package/docs/cli/system.md +71 -0
- package/docs/cli/tui.md +30 -0
- package/docs/cli/uninstall.md +39 -0
- package/docs/cli/update.md +113 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +91 -0
- package/docs/concepts/agent-loop.md +168 -0
- package/docs/concepts/agent-workspace.md +246 -0
- package/docs/concepts/agent.md +129 -0
- package/docs/concepts/architecture.md +156 -0
- package/docs/concepts/compaction.md +122 -0
- package/docs/concepts/context-engine.md +274 -0
- package/docs/concepts/context.md +179 -0
- package/docs/concepts/delegate-architecture.md +307 -0
- package/docs/concepts/dreaming.md +173 -0
- package/docs/concepts/features.md +76 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory-builtin.md +105 -0
- package/docs/concepts/memory-honcho.md +140 -0
- package/docs/concepts/memory-qmd.md +163 -0
- package/docs/concepts/memory-search.md +141 -0
- package/docs/concepts/memory.md +121 -0
- package/docs/concepts/messages.md +161 -0
- package/docs/concepts/model-failover.md +349 -0
- package/docs/concepts/model-providers.md +799 -0
- package/docs/concepts/models.md +255 -0
- package/docs/concepts/multi-agent.md +615 -0
- package/docs/concepts/oauth.md +225 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/session-pruning.md +92 -0
- package/docs/concepts/session-tool.md +141 -0
- package/docs/concepts/session.md +116 -0
- package/docs/concepts/soul.md +110 -0
- package/docs/concepts/streaming.md +161 -0
- package/docs/concepts/system-prompt.md +182 -0
- package/docs/concepts/timezone.md +97 -0
- package/docs/concepts/typebox.md +307 -0
- package/docs/concepts/typing-indicators.md +69 -0
- package/docs/concepts/usage-tracking.md +59 -0
- package/docs/date-time.md +128 -0
- package/docs/debug/node-issue.md +85 -0
- package/docs/diagnostics/flags.md +91 -0
- package/docs/docs.json +1601 -0
- package/docs/gateway/authentication.md +218 -0
- package/docs/gateway/background-process.md +131 -0
- package/docs/gateway/bonjour.md +179 -0
- package/docs/gateway/bridge-protocol.md +89 -0
- package/docs/gateway/cli-backends.md +310 -0
- package/docs/gateway/configuration-examples.md +631 -0
- package/docs/gateway/configuration-reference.md +3618 -0
- package/docs/gateway/configuration.md +698 -0
- package/docs/gateway/discovery.md +141 -0
- package/docs/gateway/doctor.md +494 -0
- package/docs/gateway/gateway-lock.md +37 -0
- package/docs/gateway/health.md +61 -0
- package/docs/gateway/heartbeat.md +443 -0
- package/docs/gateway/index.md +367 -0
- package/docs/gateway/local-models.md +163 -0
- package/docs/gateway/logging.md +113 -0
- package/docs/gateway/multiple-gateways.md +120 -0
- package/docs/gateway/network-model.md +25 -0
- package/docs/gateway/openai-http-api.md +280 -0
- package/docs/gateway/openresponses-http-api.md +340 -0
- package/docs/gateway/openshell.md +307 -0
- package/docs/gateway/pairing.md +138 -0
- package/docs/gateway/protocol.md +588 -0
- package/docs/gateway/remote-gateway-readme.md +164 -0
- package/docs/gateway/remote.md +251 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +141 -0
- package/docs/gateway/sandboxing.md +473 -0
- package/docs/gateway/secrets-plan-contract.md +116 -0
- package/docs/gateway/secrets.md +541 -0
- package/docs/gateway/security/index.md +1362 -0
- package/docs/gateway/tailscale.md +136 -0
- package/docs/gateway/tools-invoke-http-api.md +161 -0
- package/docs/gateway/troubleshooting.md +451 -0
- package/docs/gateway/trusted-proxy-auth.md +399 -0
- package/docs/help/debugging.md +168 -0
- package/docs/help/environment.md +165 -0
- package/docs/help/faq.md +3244 -0
- package/docs/help/index.md +28 -0
- package/docs/help/scripts.md +27 -0
- package/docs/help/testing.md +640 -0
- package/docs/help/troubleshooting.md +372 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/feishu-verification-token.png +0 -0
- package/docs/images/groups-flow.svg +52 -0
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +196 -0
- package/docs/install/ansible.md +230 -0
- package/docs/install/azure.md +311 -0
- package/docs/install/bun.md +55 -0
- package/docs/install/clawdock.md +106 -0
- package/docs/install/development-channels.md +131 -0
- package/docs/install/digitalocean.md +129 -0
- package/docs/install/docker-vm-runtime.md +142 -0
- package/docs/install/docker.md +412 -0
- package/docs/install/exe-dev.md +133 -0
- package/docs/install/fly.md +504 -0
- package/docs/install/gcp.md +412 -0
- package/docs/install/hetzner.md +259 -0
- package/docs/install/index.md +212 -0
- package/docs/install/installer.md +443 -0
- package/docs/install/kubernetes.md +192 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-matrix.md +349 -0
- package/docs/install/migrating.md +112 -0
- package/docs/install/nix.md +89 -0
- package/docs/install/node.md +144 -0
- package/docs/install/northflank.mdx +42 -0
- package/docs/install/oracle.md +158 -0
- package/docs/install/podman.md +210 -0
- package/docs/install/railway.mdx +90 -0
- package/docs/install/raspberry-pi.md +159 -0
- package/docs/install/render.mdx +165 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +142 -0
- package/docs/logging.md +389 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +69 -0
- package/docs/nodes/audio.md +191 -0
- package/docs/nodes/camera.md +162 -0
- package/docs/nodes/images.md +73 -0
- package/docs/nodes/index.md +408 -0
- package/docs/nodes/location-command.md +98 -0
- package/docs/nodes/media-understanding.md +432 -0
- package/docs/nodes/talk.md +92 -0
- package/docs/nodes/troubleshooting.md +123 -0
- package/docs/nodes/voicewake.md +66 -0
- package/docs/perplexity.md +181 -0
- package/docs/pi-dev.md +80 -0
- package/docs/pi.md +570 -0
- package/docs/platforms/android.md +244 -0
- package/docs/platforms/digitalocean.md +266 -0
- package/docs/platforms/index.md +55 -0
- package/docs/platforms/ios.md +223 -0
- package/docs/platforms/linux.md +100 -0
- package/docs/platforms/mac/bundled-gateway.md +75 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +107 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +50 -0
- package/docs/platforms/mac/remote.md +84 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +40 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +51 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos.md +229 -0
- package/docs/platforms/oracle.md +305 -0
- package/docs/platforms/raspberry-pi.md +420 -0
- package/docs/platforms/windows.md +241 -0
- package/docs/plugins/agent-tools.md +10 -0
- package/docs/plugins/architecture.md +1609 -0
- package/docs/plugins/building-extensions.md +10 -0
- package/docs/plugins/building-plugins.md +319 -0
- package/docs/plugins/bundles.md +292 -0
- package/docs/plugins/community.md +149 -0
- package/docs/plugins/manifest.md +412 -0
- package/docs/plugins/sdk-channel-plugins.md +508 -0
- package/docs/plugins/sdk-entrypoints.md +210 -0
- package/docs/plugins/sdk-migration.md +359 -0
- package/docs/plugins/sdk-overview.md +475 -0
- package/docs/plugins/sdk-provider-plugins.md +712 -0
- package/docs/plugins/sdk-runtime.md +381 -0
- package/docs/plugins/sdk-setup.md +516 -0
- package/docs/plugins/sdk-testing.md +263 -0
- package/docs/plugins/voice-call.md +466 -0
- package/docs/plugins/zalouser.md +78 -0
- package/docs/prose.md +134 -0
- package/docs/providers/anthropic.md +402 -0
- package/docs/providers/bedrock-mantle.md +91 -0
- package/docs/providers/bedrock.md +273 -0
- package/docs/providers/chutes.md +103 -0
- package/docs/providers/claude-max-api-proxy.md +163 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/deepseek.md +53 -0
- package/docs/providers/fireworks.md +69 -0
- package/docs/providers/github-copilot.md +80 -0
- package/docs/providers/glm.md +68 -0
- package/docs/providers/google.md +149 -0
- package/docs/providers/groq.md +105 -0
- package/docs/providers/huggingface.md +193 -0
- package/docs/providers/index.md +81 -0
- package/docs/providers/kilocode.md +89 -0
- package/docs/providers/litellm.md +159 -0
- package/docs/providers/minimax.md +281 -0
- package/docs/providers/mistral.md +68 -0
- package/docs/providers/models.md +56 -0
- package/docs/providers/moonshot.md +224 -0
- package/docs/providers/nvidia.md +58 -0
- package/docs/providers/ollama.md +379 -0
- package/docs/providers/openai.md +472 -0
- package/docs/providers/opencode-go.md +45 -0
- package/docs/providers/opencode.md +68 -0
- package/docs/providers/openrouter.md +59 -0
- package/docs/providers/perplexity-provider.md +62 -0
- package/docs/providers/qianfan.md +90 -0
- package/docs/providers/qwen.md +128 -0
- package/docs/providers/qwen_modelstudio.md +137 -0
- package/docs/providers/sglang.md +115 -0
- package/docs/providers/stepfun.md +152 -0
- package/docs/providers/synthetic.md +101 -0
- package/docs/providers/together.md +70 -0
- package/docs/providers/venice.md +282 -0
- package/docs/providers/vercel-ai-gateway.md +60 -0
- package/docs/providers/vllm.md +103 -0
- package/docs/providers/volcengine.md +94 -0
- package/docs/providers/xai.md +94 -0
- package/docs/providers/xiaomi.md +89 -0
- package/docs/providers/zai.md +75 -0
- package/docs/reference/AGENTS.default.md +126 -0
- package/docs/reference/RELEASING.md +138 -0
- package/docs/reference/api-usage-costs.md +198 -0
- package/docs/reference/credits.md +30 -0
- package/docs/reference/device-models.md +47 -0
- package/docs/reference/memory-config.md +421 -0
- package/docs/reference/prompt-caching.md +344 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +148 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +607 -0
- package/docs/reference/session-management-compaction.md +352 -0
- package/docs/reference/templates/AGENTS.dev.md +84 -0
- package/docs/reference/templates/AGENTS.md +219 -0
- package/docs/reference/templates/BOOT.md +12 -0
- package/docs/reference/templates/BOOTSTRAP.md +62 -0
- package/docs/reference/templates/CLAUDE.md +1 -0
- package/docs/reference/templates/HEARTBEAT.md +14 -0
- package/docs/reference/templates/IDENTITY.dev.md +48 -0
- package/docs/reference/templates/IDENTITY.md +30 -0
- package/docs/reference/templates/SOUL.dev.md +77 -0
- package/docs/reference/templates/SOUL.md +45 -0
- package/docs/reference/templates/TOOLS.dev.md +25 -0
- package/docs/reference/templates/TOOLS.md +47 -0
- package/docs/reference/templates/USER.dev.md +19 -0
- package/docs/reference/templates/USER.md +24 -0
- package/docs/reference/test.md +119 -0
- package/docs/reference/token-use.md +197 -0
- package/docs/reference/transcript-hygiene.md +151 -0
- package/docs/reference/wizard.md +245 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +608 -0
- package/docs/security/formal-verification.md +167 -0
- package/docs/snippets/plugin-publish/minimal-openclaw.plugin.json +9 -0
- package/docs/snippets/plugin-publish/minimal-package.json +16 -0
- package/docs/start/bootstrapping.md +41 -0
- package/docs/start/docs-directory.md +67 -0
- package/docs/start/getting-started.md +148 -0
- package/docs/start/hubs.md +199 -0
- package/docs/start/lore.md +219 -0
- package/docs/start/onboarding-overview.md +69 -0
- package/docs/start/onboarding.md +92 -0
- package/docs/start/openclaw.md +225 -0
- package/docs/start/quickstart.md +22 -0
- package/docs/start/setup.md +172 -0
- package/docs/start/showcase.md +418 -0
- package/docs/start/wizard-cli-automation.md +233 -0
- package/docs/start/wizard-cli-reference.md +324 -0
- package/docs/start/wizard.md +127 -0
- package/docs/style.css +37 -0
- package/docs/tools/acp-agents.md +837 -0
- package/docs/tools/agent-send.md +100 -0
- package/docs/tools/apply-patch.md +52 -0
- package/docs/tools/brave-search.md +107 -0
- package/docs/tools/browser-linux-troubleshooting.md +145 -0
- package/docs/tools/browser-login.md +73 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +221 -0
- package/docs/tools/browser.md +890 -0
- package/docs/tools/btw.md +142 -0
- package/docs/tools/capability-cookbook.md +119 -0
- package/docs/tools/clawhub.md +348 -0
- package/docs/tools/code-execution.md +90 -0
- package/docs/tools/creating-skills.md +119 -0
- package/docs/tools/diffs.md +434 -0
- package/docs/tools/duckduckgo-search.md +102 -0
- package/docs/tools/elevated.md +116 -0
- package/docs/tools/exa-search.md +127 -0
- package/docs/tools/exec-approvals.md +635 -0
- package/docs/tools/exec.md +237 -0
- package/docs/tools/firecrawl.md +147 -0
- package/docs/tools/gemini-search.md +98 -0
- package/docs/tools/grok-search.md +102 -0
- package/docs/tools/image-generation.md +139 -0
- package/docs/tools/index.md +174 -0
- package/docs/tools/kimi-search.md +98 -0
- package/docs/tools/llm-task.md +119 -0
- package/docs/tools/lobster.md +348 -0
- package/docs/tools/loop-detection.md +100 -0
- package/docs/tools/minimax-search.md +99 -0
- package/docs/tools/multi-agent-sandbox-tools.md +373 -0
- package/docs/tools/ollama-search.md +100 -0
- package/docs/tools/pdf.md +176 -0
- package/docs/tools/perplexity-search.md +185 -0
- package/docs/tools/plugin.md +348 -0
- package/docs/tools/reactions.md +78 -0
- package/docs/tools/searxng-search.md +132 -0
- package/docs/tools/skills-config.md +133 -0
- package/docs/tools/skills.md +377 -0
- package/docs/tools/slash-commands.md +322 -0
- package/docs/tools/subagents.md +341 -0
- package/docs/tools/tavily.md +129 -0
- package/docs/tools/thinking.md +102 -0
- package/docs/tools/tts.md +452 -0
- package/docs/tools/web-fetch.md +159 -0
- package/docs/tools/web.md +417 -0
- package/docs/tts.md +452 -0
- package/docs/vps.md +115 -0
- package/docs/web/control-ui.md +318 -0
- package/docs/web/dashboard.md +93 -0
- package/docs/web/index.md +126 -0
- package/docs/web/tui.md +176 -0
- package/docs/web/webchat.md +77 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/durar.mjs +180 -0
- package/package.json +1259 -0
- package/scripts/npm-runner.mjs +111 -0
- package/scripts/postinstall-bundled-plugins.mjs +188 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +199 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +316 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +885 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +320 -0
- package/skills/model-usage/scripts/test_model_usage.py +40 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/node-connect/SKILL.md +142 -0
- package/skills/notion/SKILL.md +174 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +62 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +88 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +151 -0
- package/skills/sherpa-onnx-tts/SKILL.md +109 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +372 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +139 -0
- package/skills/skill-creator/scripts/quick_validate.py +159 -0
- package/skills/skill-creator/scripts/test_package_skill.py +160 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/taskflow/SKILL.md +149 -0
- package/skills/taskflow/examples/inbox-triage.lobster +33 -0
- package/skills/taskflow/examples/pr-intake.lobster +32 -0
- package/skills/taskflow-inbox-triage/SKILL.md +119 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +170 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +108 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +129 -0
- 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
|