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,322 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Slash commands: text vs native, config, and supported commands"
|
|
3
|
+
read_when:
|
|
4
|
+
- Using or configuring chat commands
|
|
5
|
+
- Debugging command routing or permissions
|
|
6
|
+
title: "Slash Commands"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Slash commands
|
|
10
|
+
|
|
11
|
+
Commands are handled by the Gateway. Most commands must be sent as a **standalone** message that starts with `/`.
|
|
12
|
+
The host-only bash chat command uses `! <cmd>` (with `/bash <cmd>` as an alias).
|
|
13
|
+
|
|
14
|
+
There are two related systems:
|
|
15
|
+
|
|
16
|
+
- **Commands**: standalone `/...` messages.
|
|
17
|
+
- **Directives**: `/think`, `/fast`, `/verbose`, `/reasoning`, `/elevated`, `/exec`, `/model`, `/queue`.
|
|
18
|
+
- Directives are stripped from the message before the model sees it.
|
|
19
|
+
- In normal chat messages (not directive-only), they are treated as “inline hints” and do **not** persist session settings.
|
|
20
|
+
- In directive-only messages (the message contains only directives), they persist to the session and reply with an acknowledgement.
|
|
21
|
+
- Directives are only applied for **authorized senders**. If `commands.allowFrom` is set, it is the only
|
|
22
|
+
allowlist used; otherwise authorization comes from channel allowlists/pairing plus `commands.useAccessGroups`.
|
|
23
|
+
Unauthorized senders see directives treated as plain text.
|
|
24
|
+
|
|
25
|
+
There are also a few **inline shortcuts** (allowlisted/authorized senders only): `/help`, `/commands`, `/status`, `/whoami` (`/id`).
|
|
26
|
+
They run immediately, are stripped before the model sees the message, and the remaining text continues through the normal flow.
|
|
27
|
+
|
|
28
|
+
## Config
|
|
29
|
+
|
|
30
|
+
```json5
|
|
31
|
+
{
|
|
32
|
+
commands: {
|
|
33
|
+
native: "auto",
|
|
34
|
+
nativeSkills: "auto",
|
|
35
|
+
text: true,
|
|
36
|
+
bash: false,
|
|
37
|
+
bashForegroundMs: 2000,
|
|
38
|
+
config: false,
|
|
39
|
+
mcp: false,
|
|
40
|
+
plugins: false,
|
|
41
|
+
debug: false,
|
|
42
|
+
restart: false,
|
|
43
|
+
allowFrom: {
|
|
44
|
+
"*": ["user1"],
|
|
45
|
+
discord: ["user:123"],
|
|
46
|
+
},
|
|
47
|
+
useAccessGroups: true,
|
|
48
|
+
},
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
- `commands.text` (default `true`) enables parsing `/...` in chat messages.
|
|
53
|
+
- On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), text commands still work even if you set this to `false`.
|
|
54
|
+
- `commands.native` (default `"auto"`) registers native commands.
|
|
55
|
+
- Auto: on for Discord/Telegram; off for Slack (until you add slash commands); ignored for providers without native support.
|
|
56
|
+
- Set `channels.discord.commands.native`, `channels.telegram.commands.native`, or `channels.slack.commands.native` to override per provider (bool or `"auto"`).
|
|
57
|
+
- `false` clears previously registered commands on Discord/Telegram at startup. Slack commands are managed in the Slack app and are not removed automatically.
|
|
58
|
+
- `commands.nativeSkills` (default `"auto"`) registers **skill** commands natively when supported.
|
|
59
|
+
- Auto: on for Discord/Telegram; off for Slack (Slack requires creating a slash command per skill).
|
|
60
|
+
- Set `channels.discord.commands.nativeSkills`, `channels.telegram.commands.nativeSkills`, or `channels.slack.commands.nativeSkills` to override per provider (bool or `"auto"`).
|
|
61
|
+
- `commands.bash` (default `false`) enables `! <cmd>` to run host shell commands (`/bash <cmd>` is an alias; requires `tools.elevated` allowlists).
|
|
62
|
+
- `commands.bashForegroundMs` (default `2000`) controls how long bash waits before switching to background mode (`0` backgrounds immediately).
|
|
63
|
+
- `commands.config` (default `false`) enables `/config` (reads/writes `Durar.json`).
|
|
64
|
+
- `commands.mcp` (default `false`) enables `/mcp` (reads/writes Durar-managed MCP config under `mcp.servers`).
|
|
65
|
+
- `commands.plugins` (default `false`) enables `/plugins` (plugin discovery/status plus install + enable/disable controls).
|
|
66
|
+
- `commands.debug` (default `false`) enables `/debug` (runtime-only overrides).
|
|
67
|
+
- `commands.allowFrom` (optional) sets a per-provider allowlist for command authorization. When configured, it is the
|
|
68
|
+
only authorization source for commands and directives (channel allowlists/pairing and `commands.useAccessGroups`
|
|
69
|
+
are ignored). Use `"*"` for a global default; provider-specific keys override it.
|
|
70
|
+
- `commands.useAccessGroups` (default `true`) enforces allowlists/policies for commands when `commands.allowFrom` is not set.
|
|
71
|
+
|
|
72
|
+
## Command list
|
|
73
|
+
|
|
74
|
+
Text + native (when enabled):
|
|
75
|
+
|
|
76
|
+
- `/help`
|
|
77
|
+
- `/commands`
|
|
78
|
+
- `/tools [compact|verbose]` (show what the current agent can use right now; `verbose` adds descriptions)
|
|
79
|
+
- `/skill <name> [input]` (run a skill by name)
|
|
80
|
+
- `/status` (show current status; includes provider usage/quota for the current model provider when available)
|
|
81
|
+
- `/tasks` (list background tasks for the current session; shows active and recent task details with agent-local fallback counts)
|
|
82
|
+
- `/allowlist` (list/add/remove allowlist entries)
|
|
83
|
+
- `/approve <id> <decision>` (resolve exec approval prompts; use the pending approval message for the available decisions)
|
|
84
|
+
- `/context [list|detail|json]` (explain “context”; `detail` shows per-file + per-tool + per-skill + system prompt size)
|
|
85
|
+
- `/btw <question>` (ask an ephemeral side question about the current session without changing future session context; see [/tools/btw](/tools/btw))
|
|
86
|
+
- `/export-session [path]` (alias: `/export`) (export current session to HTML with full system prompt)
|
|
87
|
+
- `/whoami` (show your sender id; alias: `/id`)
|
|
88
|
+
- `/session idle <duration|off>` (manage inactivity auto-unfocus for focused thread bindings)
|
|
89
|
+
- `/session max-age <duration|off>` (manage hard max-age auto-unfocus for focused thread bindings)
|
|
90
|
+
- `/subagents list|kill|log|info|send|steer|spawn` (inspect, control, or spawn sub-agent runs for the current session)
|
|
91
|
+
- `/acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions` (inspect and control ACP runtime sessions)
|
|
92
|
+
- `/agents` (list thread-bound agents for this session)
|
|
93
|
+
- `/focus <target>` (Discord: bind this thread, or a new thread, to a session/subagent target)
|
|
94
|
+
- `/unfocus` (Discord: remove the current thread binding)
|
|
95
|
+
- `/kill <id|#|all>` (immediately abort one or all running sub-agents for this session; no confirmation message)
|
|
96
|
+
- `/steer <id|#> <message>` (steer a running sub-agent immediately: in-run when possible, otherwise abort current work and restart on the steer message)
|
|
97
|
+
- `/tell <id|#> <message>` (alias for `/steer`)
|
|
98
|
+
- `/config show|get|set|unset` (persist config to disk, owner-only; requires `commands.config: true`)
|
|
99
|
+
- `/mcp show|get|set|unset` (manage Durar MCP server config, owner-only; requires `commands.mcp: true`)
|
|
100
|
+
- `/plugins list|show|get|install|enable|disable` (inspect discovered plugins, install new ones, and toggle enablement; owner-only for writes; requires `commands.plugins: true`)
|
|
101
|
+
- `/plugin` is an alias for `/plugins`.
|
|
102
|
+
- `/plugin install <spec>` accepts the same plugin specs as `Durar plugins install`: local path/archive, npm package, or `Durar Gateway:<pkg>`.
|
|
103
|
+
- Enable/disable writes still reply with a restart hint. On a watched foreground gateway, Durar may perform that restart automatically right after the write.
|
|
104
|
+
- `/debug show|set|unset|reset` (runtime overrides, owner-only; requires `commands.debug: true`)
|
|
105
|
+
- `/usage off|tokens|full|cost` (per-response usage footer or local cost summary)
|
|
106
|
+
- `/tts off|always|inbound|tagged|status|provider|limit|summary|audio` (control TTS; see [/tts](/tools/tts))
|
|
107
|
+
- Discord: native command is `/voice` (Discord reserves `/tts`); text `/tts` still works.
|
|
108
|
+
- `/stop`
|
|
109
|
+
- `/restart`
|
|
110
|
+
- `/dock-telegram` (alias: `/dock_telegram`) (switch replies to Telegram)
|
|
111
|
+
- `/dock-discord` (alias: `/dock_discord`) (switch replies to Discord)
|
|
112
|
+
- `/dock-slack` (alias: `/dock_slack`) (switch replies to Slack)
|
|
113
|
+
- `/activation mention|always` (groups only)
|
|
114
|
+
- `/send on|off|inherit` (owner-only)
|
|
115
|
+
- `/reset` or `/new [model]` (optional model hint; remainder is passed through)
|
|
116
|
+
- `/think <off|minimal|low|medium|high|xhigh>` (dynamic choices by model/provider; aliases: `/thinking`, `/t`)
|
|
117
|
+
- `/fast status|on|off` (omitting the arg shows the current effective fast-mode state)
|
|
118
|
+
- `/verbose on|full|off` (alias: `/v`)
|
|
119
|
+
- `/reasoning on|off|stream` (alias: `/reason`; when on, sends a separate message prefixed `Reasoning:`; `stream` = Telegram draft only)
|
|
120
|
+
- `/elevated on|off|ask|full` (alias: `/elev`; `full` skips exec approvals)
|
|
121
|
+
- `/exec host=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` (send `/exec` to show current)
|
|
122
|
+
- `/model <name>` (alias: `/models`; or `/<alias>` from `agents.defaults.models.*.alias`)
|
|
123
|
+
- `/queue <mode>` (plus options like `debounce:2s cap:25 drop:summarize`; send `/queue` to see current settings)
|
|
124
|
+
- `/bash <command>` (host-only; alias for `! <command>`; requires `commands.bash: true` + `tools.elevated` allowlists)
|
|
125
|
+
- `/dreaming [off|core|rem|deep|status|help]` (toggle dreaming mode or show status; see [Dreaming](/concepts/dreaming))
|
|
126
|
+
|
|
127
|
+
Text-only:
|
|
128
|
+
|
|
129
|
+
- `/compact [instructions]` (see [/concepts/compaction](/concepts/compaction))
|
|
130
|
+
- `! <command>` (host-only; one at a time; use `!poll` + `!stop` for long-running jobs)
|
|
131
|
+
- `!poll` (check output / status; accepts optional `sessionId`; `/bash poll` also works)
|
|
132
|
+
- `!stop` (stop the running bash job; accepts optional `sessionId`; `/bash stop` also works)
|
|
133
|
+
|
|
134
|
+
Notes:
|
|
135
|
+
|
|
136
|
+
- Commands accept an optional `:` between the command and args (e.g. `/think: high`, `/send: on`, `/help:`).
|
|
137
|
+
- `/new <model>` accepts a model alias, `provider/model`, or a provider name (fuzzy match); if no match, the text is treated as the message body.
|
|
138
|
+
- For full provider usage breakdown, use `Durar status --usage`.
|
|
139
|
+
- `/allowlist add|remove` requires `commands.config=true` and honors channel `configWrites`.
|
|
140
|
+
- In multi-account channels, config-targeted `/allowlist --account <id>` and `/config set channels.<provider>.accounts.<id>...` also honor the target account's `configWrites`.
|
|
141
|
+
- `/usage` controls the per-response usage footer; `/usage cost` prints a local cost summary from Durar session logs.
|
|
142
|
+
- `/restart` is enabled by default; set `commands.restart: false` to disable it.
|
|
143
|
+
- Discord-only native command: `/vc join|leave|status` controls voice channels (requires `channels.discord.voice` and native commands; not available as text).
|
|
144
|
+
- Discord thread-binding commands (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`) require effective thread bindings to be enabled (`session.threadBindings.enabled` and/or `channels.discord.threadBindings.enabled`).
|
|
145
|
+
- ACP command reference and runtime behavior: [ACP Agents](/tools/acp-agents).
|
|
146
|
+
- `/verbose` is meant for debugging and extra visibility; keep it **off** in normal use.
|
|
147
|
+
- `/fast on|off` persists a session override. Use the Sessions UI `inherit` option to clear it and fall back to config defaults.
|
|
148
|
+
- `/fast` is provider-specific: OpenAI/OpenAI Codex map it to `service_tier=priority` on native Responses endpoints, while direct public Anthropic requests, including OAuth-authenticated traffic sent to `api.anthropic.com`, map it to `service_tier=auto` or `standard_only`. See [OpenAI](/providers/openai) and [Anthropic](/providers/anthropic).
|
|
149
|
+
- Tool failure summaries are still shown when relevant, but detailed failure text is only included when `/verbose` is `on` or `full`.
|
|
150
|
+
- `/reasoning` (and `/verbose`) are risky in group settings: they may reveal internal reasoning or tool output you did not intend to expose. Prefer leaving them off, especially in group chats.
|
|
151
|
+
- `/model` persists the new session model immediately.
|
|
152
|
+
- If the agent is idle, the next run uses it right away.
|
|
153
|
+
- If a run is already active, Durar marks a live switch as pending and only restarts into the new model at a clean retry point.
|
|
154
|
+
- If tool activity or reply output has already started, the pending switch can stay queued until a later retry opportunity or the next user turn.
|
|
155
|
+
- **Fast path:** command-only messages from allowlisted senders are handled immediately (bypass queue + model).
|
|
156
|
+
- **Group mention gating:** command-only messages from allowlisted senders bypass mention requirements.
|
|
157
|
+
- **Inline shortcuts (allowlisted senders only):** certain commands also work when embedded in a normal message and are stripped before the model sees the remaining text.
|
|
158
|
+
- Example: `hey /status` triggers a status reply, and the remaining text continues through the normal flow.
|
|
159
|
+
- Currently: `/help`, `/commands`, `/status`, `/whoami` (`/id`).
|
|
160
|
+
- Unauthorized command-only messages are silently ignored, and inline `/...` tokens are treated as plain text.
|
|
161
|
+
- **Skill commands:** `user-invocable` skills are exposed as slash commands. Names are sanitized to `a-z0-9_` (max 32 chars); collisions get numeric suffixes (e.g. `_2`).
|
|
162
|
+
- `/skill <name> [input]` runs a skill by name (useful when native command limits prevent per-skill commands).
|
|
163
|
+
- By default, skill commands are forwarded to the model as a normal request.
|
|
164
|
+
- Skills may optionally declare `command-dispatch: tool` to route the command directly to a tool (deterministic, no model).
|
|
165
|
+
- Example: `/prose` (OpenProse plugin) — see [OpenProse](/prose).
|
|
166
|
+
- **Native command arguments:** Discord uses autocomplete for dynamic options (and button menus when you omit required args). Telegram and Slack show a button menu when a command supports choices and you omit the arg.
|
|
167
|
+
|
|
168
|
+
## `/tools`
|
|
169
|
+
|
|
170
|
+
`/tools` answers a runtime question, not a config question: **what this agent can use right now in
|
|
171
|
+
this conversation**.
|
|
172
|
+
|
|
173
|
+
- Default `/tools` is compact and optimized for quick scanning.
|
|
174
|
+
- `/tools verbose` adds short descriptions.
|
|
175
|
+
- Native-command surfaces that support arguments expose the same mode switch as `compact|verbose`.
|
|
176
|
+
- Results are session-scoped, so changing agent, channel, thread, sender authorization, or model can
|
|
177
|
+
change the output.
|
|
178
|
+
- `/tools` includes tools that are actually reachable at runtime, including core tools, connected
|
|
179
|
+
plugin tools, and channel-owned tools.
|
|
180
|
+
|
|
181
|
+
For profile and override editing, use the Control UI Tools panel or config/catalog surfaces instead
|
|
182
|
+
of treating `/tools` as a static catalog.
|
|
183
|
+
|
|
184
|
+
## Usage surfaces (what shows where)
|
|
185
|
+
|
|
186
|
+
- **Provider usage/quota** (example: “Claude 80% left”) shows up in `/status` for the current model provider when usage tracking is enabled. Durar normalizes provider windows to `% left`; for MiniMax, remaining-only percent fields are inverted before display, and `model_remains` responses prefer the chat-model entry plus a model-tagged plan label.
|
|
187
|
+
- **Token/cache lines** in `/status` can fall back to the latest transcript usage entry when the live session snapshot is sparse. Existing nonzero live values still win, and transcript fallback can also recover the active runtime model label plus a larger prompt-oriented total when stored totals are missing or smaller.
|
|
188
|
+
- **Per-response tokens/cost** is controlled by `/usage off|tokens|full` (appended to normal replies).
|
|
189
|
+
- `/model status` is about **models/auth/endpoints**, not usage.
|
|
190
|
+
|
|
191
|
+
## Model selection (`/model`)
|
|
192
|
+
|
|
193
|
+
`/model` is implemented as a directive.
|
|
194
|
+
|
|
195
|
+
Examples:
|
|
196
|
+
|
|
197
|
+
```
|
|
198
|
+
/model
|
|
199
|
+
/model list
|
|
200
|
+
/model 3
|
|
201
|
+
/model openai/gpt-5.4
|
|
202
|
+
/model opus@anthropic:default
|
|
203
|
+
/model status
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Notes:
|
|
207
|
+
|
|
208
|
+
- `/model` and `/model list` show a compact, numbered picker (model family + available providers).
|
|
209
|
+
- On Discord, `/model` and `/models` open an interactive picker with provider and model dropdowns plus a Submit step.
|
|
210
|
+
- `/model <#>` selects from that picker (and prefers the current provider when possible).
|
|
211
|
+
- `/model status` shows the detailed view, including configured provider endpoint (`baseUrl`) and API mode (`api`) when available.
|
|
212
|
+
|
|
213
|
+
## Debug overrides
|
|
214
|
+
|
|
215
|
+
`/debug` lets you set **runtime-only** config overrides (memory, not disk). Owner-only. Disabled by default; enable with `commands.debug: true`.
|
|
216
|
+
|
|
217
|
+
Examples:
|
|
218
|
+
|
|
219
|
+
```
|
|
220
|
+
/debug show
|
|
221
|
+
/debug set messages.responsePrefix="[Durar]"
|
|
222
|
+
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
|
|
223
|
+
/debug unset messages.responsePrefix
|
|
224
|
+
/debug reset
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Notes:
|
|
228
|
+
|
|
229
|
+
- Overrides apply immediately to new config reads, but do **not** write to `Durar.json`.
|
|
230
|
+
- Use `/debug reset` to clear all overrides and return to the on-disk config.
|
|
231
|
+
|
|
232
|
+
## Config updates
|
|
233
|
+
|
|
234
|
+
`/config` writes to your on-disk config (`Durar.json`). Owner-only. Disabled by default; enable with `commands.config: true`.
|
|
235
|
+
|
|
236
|
+
Examples:
|
|
237
|
+
|
|
238
|
+
```
|
|
239
|
+
/config show
|
|
240
|
+
/config show messages.responsePrefix
|
|
241
|
+
/config get messages.responsePrefix
|
|
242
|
+
/config set messages.responsePrefix="[Durar]"
|
|
243
|
+
/config unset messages.responsePrefix
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Notes:
|
|
247
|
+
|
|
248
|
+
- Config is validated before write; invalid changes are rejected.
|
|
249
|
+
- `/config` updates persist across restarts.
|
|
250
|
+
|
|
251
|
+
## MCP updates
|
|
252
|
+
|
|
253
|
+
`/mcp` writes Durar-managed MCP server definitions under `mcp.servers`. Owner-only. Disabled by default; enable with `commands.mcp: true`.
|
|
254
|
+
|
|
255
|
+
Examples:
|
|
256
|
+
|
|
257
|
+
```text
|
|
258
|
+
/mcp show
|
|
259
|
+
/mcp show context7
|
|
260
|
+
/mcp set context7={"command":"uvx","args":["context7-mcp"]}
|
|
261
|
+
/mcp unset context7
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
Notes:
|
|
265
|
+
|
|
266
|
+
- `/mcp` stores config in Durar config, not Pi-owned project settings.
|
|
267
|
+
- Runtime adapters decide which transports are actually executable.
|
|
268
|
+
|
|
269
|
+
## Plugin updates
|
|
270
|
+
|
|
271
|
+
`/plugins` lets operators inspect discovered plugins and toggle enablement in config. Read-only flows can use `/plugin` as an alias. Disabled by default; enable with `commands.plugins: true`.
|
|
272
|
+
|
|
273
|
+
Examples:
|
|
274
|
+
|
|
275
|
+
```text
|
|
276
|
+
/plugins
|
|
277
|
+
/plugins list
|
|
278
|
+
/plugin show context7
|
|
279
|
+
/plugins enable context7
|
|
280
|
+
/plugins disable context7
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
Notes:
|
|
284
|
+
|
|
285
|
+
- `/plugins list` and `/plugins show` use real plugin discovery against the current workspace plus on-disk config.
|
|
286
|
+
- `/plugins enable|disable` updates plugin config only; it does not install or uninstall plugins.
|
|
287
|
+
- After enable/disable changes, restart the gateway to apply them.
|
|
288
|
+
|
|
289
|
+
## Surface notes
|
|
290
|
+
|
|
291
|
+
- **Text commands** run in the normal chat session (DMs share `main`, groups have their own session).
|
|
292
|
+
- **Native commands** use isolated sessions:
|
|
293
|
+
- Discord: `agent:<agentId>:discord:slash:<userId>`
|
|
294
|
+
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefix configurable via `channels.slack.slashCommand.sessionPrefix`)
|
|
295
|
+
- Telegram: `telegram:slash:<userId>` (targets the chat session via `CommandTargetSessionKey`)
|
|
296
|
+
- **`/stop`** targets the active chat session so it can abort the current run.
|
|
297
|
+
- **Slack:** `channels.slack.slashCommand` is still supported for a single `/Durar`-style command. If you enable `commands.native`, you must create one Slack slash command per built-in command (same names as `/help`). Command argument menus for Slack are delivered as ephemeral Block Kit buttons.
|
|
298
|
+
- Slack native exception: register `/agentstatus` (not `/status`) because Slack reserves `/status`. Text `/status` still works in Slack messages.
|
|
299
|
+
|
|
300
|
+
## BTW side questions
|
|
301
|
+
|
|
302
|
+
`/btw` is a quick **side question** about the current session.
|
|
303
|
+
|
|
304
|
+
Unlike normal chat:
|
|
305
|
+
|
|
306
|
+
- it uses the current session as background context,
|
|
307
|
+
- it runs as a separate **tool-less** one-shot call,
|
|
308
|
+
- it does not change future session context,
|
|
309
|
+
- it is not written to transcript history,
|
|
310
|
+
- it is delivered as a live side result instead of a normal assistant message.
|
|
311
|
+
|
|
312
|
+
That makes `/btw` useful when you want a temporary clarification while the main
|
|
313
|
+
task keeps going.
|
|
314
|
+
|
|
315
|
+
Example:
|
|
316
|
+
|
|
317
|
+
```text
|
|
318
|
+
/btw what are we doing right now?
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
See [BTW Side Questions](/tools/btw) for the full behavior and client UX
|
|
322
|
+
details.
|
|
@@ -0,0 +1,341 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Sub-agents: spawning isolated agent runs that announce results back to the requester chat"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want background/parallel work via the agent
|
|
5
|
+
- You are changing sessions_spawn or sub-agent tool policy
|
|
6
|
+
- You are implementing or troubleshooting thread-bound subagent sessions
|
|
7
|
+
title: "Sub-Agents"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Sub-agents
|
|
11
|
+
|
|
12
|
+
Sub-agents are background agent runs spawned from an existing agent run. They run in their own session (`agent:<agentId>:subagent:<uuid>`) and, when finished, **announce** their result back to the requester chat channel. Each sub-agent run is tracked as a [background task](/automation/tasks).
|
|
13
|
+
|
|
14
|
+
## Slash command
|
|
15
|
+
|
|
16
|
+
Use `/subagents` to inspect or control sub-agent runs for the **current session**:
|
|
17
|
+
|
|
18
|
+
- `/subagents list`
|
|
19
|
+
- `/subagents kill <id|#|all>`
|
|
20
|
+
- `/subagents log <id|#> [limit] [tools]`
|
|
21
|
+
- `/subagents info <id|#>`
|
|
22
|
+
- `/subagents send <id|#> <message>`
|
|
23
|
+
- `/subagents steer <id|#> <message>`
|
|
24
|
+
- `/subagents spawn <agentId> <task> [--model <model>] [--thinking <level>]`
|
|
25
|
+
|
|
26
|
+
Thread binding controls:
|
|
27
|
+
|
|
28
|
+
These commands work on channels that support persistent thread bindings. See **Thread supporting channels** below.
|
|
29
|
+
|
|
30
|
+
- `/focus <subagent-label|session-key|session-id|session-label>`
|
|
31
|
+
- `/unfocus`
|
|
32
|
+
- `/agents`
|
|
33
|
+
- `/session idle <duration|off>`
|
|
34
|
+
- `/session max-age <duration|off>`
|
|
35
|
+
|
|
36
|
+
`/subagents info` shows run metadata (status, timestamps, session id, transcript path, cleanup).
|
|
37
|
+
Use `sessions_history` for a bounded, safety-filtered recall view; inspect the
|
|
38
|
+
transcript path on disk when you need the raw full transcript.
|
|
39
|
+
|
|
40
|
+
### Spawn behavior
|
|
41
|
+
|
|
42
|
+
`/subagents spawn` starts a background sub-agent as a user command, not an internal relay, and it sends one final completion update back to the requester chat when the run finishes.
|
|
43
|
+
|
|
44
|
+
- The spawn command is non-blocking; it returns a run id immediately.
|
|
45
|
+
- On completion, the sub-agent announces a summary/result message back to the requester chat channel.
|
|
46
|
+
- Completion is push-based. Once spawned, do not poll `/subagents list`,
|
|
47
|
+
`sessions_list`, or `sessions_history` in a loop just to wait for it to
|
|
48
|
+
finish; inspect status only on-demand for debugging or intervention.
|
|
49
|
+
- On completion, Durar best-effort closes tracked browser tabs/processes opened by that sub-agent session before the announce cleanup flow continues.
|
|
50
|
+
- For manual spawns, delivery is resilient:
|
|
51
|
+
- Durar tries direct `agent` delivery first with a stable idempotency key.
|
|
52
|
+
- If direct delivery fails, it falls back to queue routing.
|
|
53
|
+
- If queue routing is still not available, the announce is retried with a short exponential backoff before final give-up.
|
|
54
|
+
- Completion delivery keeps the resolved requester route:
|
|
55
|
+
- thread-bound or conversation-bound completion routes win when available
|
|
56
|
+
- if the completion origin only provides a channel, Durar fills the missing target/account from the requester session's resolved route (`lastChannel` / `lastTo` / `lastAccountId`) so direct delivery still works
|
|
57
|
+
- The completion handoff to the requester session is runtime-generated internal context (not user-authored text) and includes:
|
|
58
|
+
- `Result` (latest visible `assistant` reply text, otherwise sanitized latest tool/toolResult text)
|
|
59
|
+
- `Status` (`completed successfully` / `failed` / `timed out` / `unknown`)
|
|
60
|
+
- compact runtime/token stats
|
|
61
|
+
- a delivery instruction telling the requester agent to rewrite in normal assistant voice (not forward raw internal metadata)
|
|
62
|
+
- `--model` and `--thinking` override defaults for that specific run.
|
|
63
|
+
- Use `info`/`log` to inspect details and output after completion.
|
|
64
|
+
- `/subagents spawn` is one-shot mode (`mode: "run"`). For persistent thread-bound sessions, use `sessions_spawn` with `thread: true` and `mode: "session"`.
|
|
65
|
+
- For ACP harness sessions (Codex, Claude Code, Gemini CLI), use `sessions_spawn` with `runtime: "acp"` and see [ACP Agents](/tools/acp-agents).
|
|
66
|
+
|
|
67
|
+
Primary goals:
|
|
68
|
+
|
|
69
|
+
- Parallelize "research / long task / slow tool" work without blocking the main run.
|
|
70
|
+
- Keep sub-agents isolated by default (session separation + optional sandboxing).
|
|
71
|
+
- Keep the tool surface hard to misuse: sub-agents do **not** get session tools by default.
|
|
72
|
+
- Support configurable nesting depth for orchestrator patterns.
|
|
73
|
+
|
|
74
|
+
Cost note: each sub-agent has its **own** context and token usage. For heavy or repetitive
|
|
75
|
+
tasks, set a cheaper model for sub-agents and keep your main agent on a higher-quality model.
|
|
76
|
+
You can configure this via `agents.defaults.subagents.model` or per-agent overrides.
|
|
77
|
+
|
|
78
|
+
## Tool
|
|
79
|
+
|
|
80
|
+
Use `sessions_spawn`:
|
|
81
|
+
|
|
82
|
+
- Starts a sub-agent run (`deliver: false`, global lane: `subagent`)
|
|
83
|
+
- Then runs an announce step and posts the announce reply to the requester chat channel
|
|
84
|
+
- Default model: inherits the caller unless you set `agents.defaults.subagents.model` (or per-agent `agents.list[].subagents.model`); an explicit `sessions_spawn.model` still wins.
|
|
85
|
+
- Default thinking: inherits the caller unless you set `agents.defaults.subagents.thinking` (or per-agent `agents.list[].subagents.thinking`); an explicit `sessions_spawn.thinking` still wins.
|
|
86
|
+
- Default run timeout: if `sessions_spawn.runTimeoutSeconds` is omitted, Durar uses `agents.defaults.subagents.runTimeoutSeconds` when set; otherwise it falls back to `0` (no timeout).
|
|
87
|
+
|
|
88
|
+
Tool params:
|
|
89
|
+
|
|
90
|
+
- `task` (required)
|
|
91
|
+
- `label?` (optional)
|
|
92
|
+
- `agentId?` (optional; spawn under another agent id if allowed)
|
|
93
|
+
- `model?` (optional; overrides the sub-agent model; invalid values are skipped and the sub-agent runs on the default model with a warning in the tool result)
|
|
94
|
+
- `thinking?` (optional; overrides thinking level for the sub-agent run)
|
|
95
|
+
- `runTimeoutSeconds?` (defaults to `agents.defaults.subagents.runTimeoutSeconds` when set, otherwise `0`; when set, the sub-agent run is aborted after N seconds)
|
|
96
|
+
- `thread?` (default `false`; when `true`, requests channel thread binding for this sub-agent session)
|
|
97
|
+
- `mode?` (`run|session`)
|
|
98
|
+
- default is `run`
|
|
99
|
+
- if `thread: true` and `mode` omitted, default becomes `session`
|
|
100
|
+
- `mode: "session"` requires `thread: true`
|
|
101
|
+
- `cleanup?` (`delete|keep`, default `keep`)
|
|
102
|
+
- `sandbox?` (`inherit|require`, default `inherit`; `require` rejects spawn unless target child runtime is sandboxed)
|
|
103
|
+
- `sessions_spawn` does **not** accept channel-delivery params (`target`, `channel`, `to`, `threadId`, `replyTo`, `transport`). For delivery, use `message`/`sessions_send` from the spawned run.
|
|
104
|
+
|
|
105
|
+
## Thread-bound sessions
|
|
106
|
+
|
|
107
|
+
When thread bindings are enabled for a channel, a sub-agent can stay bound to a thread so follow-up user messages in that thread keep routing to the same sub-agent session.
|
|
108
|
+
|
|
109
|
+
### Thread supporting channels
|
|
110
|
+
|
|
111
|
+
- Discord (currently the only supported channel): supports persistent thread-bound subagent sessions (`sessions_spawn` with `thread: true`), manual thread controls (`/focus`, `/unfocus`, `/agents`, `/session idle`, `/session max-age`), and adapter keys `channels.discord.threadBindings.enabled`, `channels.discord.threadBindings.idleHours`, `channels.discord.threadBindings.maxAgeHours`, and `channels.discord.threadBindings.spawnSubagentSessions`.
|
|
112
|
+
|
|
113
|
+
Quick flow:
|
|
114
|
+
|
|
115
|
+
1. Spawn with `sessions_spawn` using `thread: true` (and optionally `mode: "session"`).
|
|
116
|
+
2. Durar creates or binds a thread to that session target in the active channel.
|
|
117
|
+
3. Replies and follow-up messages in that thread route to the bound session.
|
|
118
|
+
4. Use `/session idle` to inspect/update inactivity auto-unfocus and `/session max-age` to control the hard cap.
|
|
119
|
+
5. Use `/unfocus` to detach manually.
|
|
120
|
+
|
|
121
|
+
Manual controls:
|
|
122
|
+
|
|
123
|
+
- `/focus <target>` binds the current thread (or creates one) to a sub-agent/session target.
|
|
124
|
+
- `/unfocus` removes the binding for the current bound thread.
|
|
125
|
+
- `/agents` lists active runs and binding state (`thread:<id>` or `unbound`).
|
|
126
|
+
- `/session idle` and `/session max-age` only work for focused bound threads.
|
|
127
|
+
|
|
128
|
+
Config switches:
|
|
129
|
+
|
|
130
|
+
- Global default: `session.threadBindings.enabled`, `session.threadBindings.idleHours`, `session.threadBindings.maxAgeHours`
|
|
131
|
+
- Channel override and spawn auto-bind keys are adapter-specific. See **Thread supporting channels** above.
|
|
132
|
+
|
|
133
|
+
See [Configuration Reference](/gateway/configuration-reference) and [Slash commands](/tools/slash-commands) for current adapter details.
|
|
134
|
+
|
|
135
|
+
Allowlist:
|
|
136
|
+
|
|
137
|
+
- `agents.list[].subagents.allowAgents`: list of agent ids that can be targeted via `agentId` (`["*"]` to allow any). Default: only the requester agent.
|
|
138
|
+
- `agents.defaults.subagents.allowAgents`: default target-agent allowlist used when the requester agent does not set its own `subagents.allowAgents`.
|
|
139
|
+
- Sandbox inheritance guard: if the requester session is sandboxed, `sessions_spawn` rejects targets that would run unsandboxed.
|
|
140
|
+
- `agents.defaults.subagents.requireAgentId` / `agents.list[].subagents.requireAgentId`: when true, block `sessions_spawn` calls that omit `agentId` (forces explicit profile selection). Default: false.
|
|
141
|
+
|
|
142
|
+
Discovery:
|
|
143
|
+
|
|
144
|
+
- Use `agents_list` to see which agent ids are currently allowed for `sessions_spawn`.
|
|
145
|
+
|
|
146
|
+
Auto-archive:
|
|
147
|
+
|
|
148
|
+
- Sub-agent sessions are automatically archived after `agents.defaults.subagents.archiveAfterMinutes` (default: 60).
|
|
149
|
+
- Archive uses `sessions.delete` and renames the transcript to `*.deleted.<timestamp>` (same folder).
|
|
150
|
+
- `cleanup: "delete"` archives immediately after announce (still keeps the transcript via rename).
|
|
151
|
+
- Auto-archive is best-effort; pending timers are lost if the gateway restarts.
|
|
152
|
+
- `runTimeoutSeconds` does **not** auto-archive; it only stops the run. The session remains until auto-archive.
|
|
153
|
+
- Auto-archive applies equally to depth-1 and depth-2 sessions.
|
|
154
|
+
- Browser cleanup is separate from archive cleanup: tracked browser tabs/processes are best-effort closed when the run finishes, even if the transcript/session record is kept.
|
|
155
|
+
|
|
156
|
+
## Nested Sub-Agents
|
|
157
|
+
|
|
158
|
+
By default, sub-agents cannot spawn their own sub-agents (`maxSpawnDepth: 1`). You can enable one level of nesting by setting `maxSpawnDepth: 2`, which allows the **orchestrator pattern**: main → orchestrator sub-agent → worker sub-sub-agents.
|
|
159
|
+
|
|
160
|
+
### How to enable
|
|
161
|
+
|
|
162
|
+
```json5
|
|
163
|
+
{
|
|
164
|
+
agents: {
|
|
165
|
+
defaults: {
|
|
166
|
+
subagents: {
|
|
167
|
+
maxSpawnDepth: 2, // allow sub-agents to spawn children (default: 1)
|
|
168
|
+
maxChildrenPerAgent: 5, // max active children per agent session (default: 5)
|
|
169
|
+
maxConcurrent: 8, // global concurrency lane cap (default: 8)
|
|
170
|
+
runTimeoutSeconds: 900, // default timeout for sessions_spawn when omitted (0 = no timeout)
|
|
171
|
+
},
|
|
172
|
+
},
|
|
173
|
+
},
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Depth levels
|
|
178
|
+
|
|
179
|
+
| Depth | Session key shape | Role | Can spawn? |
|
|
180
|
+
| ----- | -------------------------------------------- | --------------------------------------------- | ---------------------------- |
|
|
181
|
+
| 0 | `agent:<id>:main` | Main agent | Always |
|
|
182
|
+
| 1 | `agent:<id>:subagent:<uuid>` | Sub-agent (orchestrator when depth 2 allowed) | Only if `maxSpawnDepth >= 2` |
|
|
183
|
+
| 2 | `agent:<id>:subagent:<uuid>:subagent:<uuid>` | Sub-sub-agent (leaf worker) | Never |
|
|
184
|
+
|
|
185
|
+
### Announce chain
|
|
186
|
+
|
|
187
|
+
Results flow back up the chain:
|
|
188
|
+
|
|
189
|
+
1. Depth-2 worker finishes → announces to its parent (depth-1 orchestrator)
|
|
190
|
+
2. Depth-1 orchestrator receives the announce, synthesizes results, finishes → announces to main
|
|
191
|
+
3. Main agent receives the announce and delivers to the user
|
|
192
|
+
|
|
193
|
+
Each level only sees announces from its direct children.
|
|
194
|
+
|
|
195
|
+
Operational guidance:
|
|
196
|
+
|
|
197
|
+
- Start child work once and wait for completion events instead of building poll
|
|
198
|
+
loops around `sessions_list`, `sessions_history`, `/subagents list`, or
|
|
199
|
+
`exec` sleep commands.
|
|
200
|
+
- If a child completion event arrives after you already sent the final answer,
|
|
201
|
+
the correct follow-up is the exact silent token `NO_REPLY` / `no_reply`.
|
|
202
|
+
|
|
203
|
+
### Tool policy by depth
|
|
204
|
+
|
|
205
|
+
- Role and control scope are written into session metadata at spawn time. That keeps flat or restored session keys from accidentally regaining orchestrator privileges.
|
|
206
|
+
- **Depth 1 (orchestrator, when `maxSpawnDepth >= 2`)**: Gets `sessions_spawn`, `subagents`, `sessions_list`, `sessions_history` so it can manage its children. Other session/system tools remain denied.
|
|
207
|
+
- **Depth 1 (leaf, when `maxSpawnDepth == 1`)**: No session tools (current default behavior).
|
|
208
|
+
- **Depth 2 (leaf worker)**: No session tools — `sessions_spawn` is always denied at depth 2. Cannot spawn further children.
|
|
209
|
+
|
|
210
|
+
### Per-agent spawn limit
|
|
211
|
+
|
|
212
|
+
Each agent session (at any depth) can have at most `maxChildrenPerAgent` (default: 5) active children at a time. This prevents runaway fan-out from a single orchestrator.
|
|
213
|
+
|
|
214
|
+
### Cascade stop
|
|
215
|
+
|
|
216
|
+
Stopping a depth-1 orchestrator automatically stops all its depth-2 children:
|
|
217
|
+
|
|
218
|
+
- `/stop` in the main chat stops all depth-1 agents and cascades to their depth-2 children.
|
|
219
|
+
- `/subagents kill <id>` stops a specific sub-agent and cascades to its children.
|
|
220
|
+
- `/subagents kill all` stops all sub-agents for the requester and cascades.
|
|
221
|
+
|
|
222
|
+
## Authentication
|
|
223
|
+
|
|
224
|
+
Sub-agent auth is resolved by **agent id**, not by session type:
|
|
225
|
+
|
|
226
|
+
- The sub-agent session key is `agent:<agentId>:subagent:<uuid>`.
|
|
227
|
+
- The auth store is loaded from that agent's `agentDir`.
|
|
228
|
+
- The main agent's auth profiles are merged in as a **fallback**; agent profiles override main profiles on conflicts.
|
|
229
|
+
|
|
230
|
+
Note: the merge is additive, so main profiles are always available as fallbacks. Fully isolated auth per agent is not supported yet.
|
|
231
|
+
|
|
232
|
+
## Announce
|
|
233
|
+
|
|
234
|
+
Sub-agents report back via an announce step:
|
|
235
|
+
|
|
236
|
+
- The announce step runs inside the sub-agent session (not the requester session).
|
|
237
|
+
- If the sub-agent replies exactly `ANNOUNCE_SKIP`, nothing is posted.
|
|
238
|
+
- If the latest assistant text is the exact silent token `NO_REPLY` / `no_reply`,
|
|
239
|
+
announce output is suppressed even if earlier visible progress existed.
|
|
240
|
+
- Otherwise delivery depends on requester depth:
|
|
241
|
+
- top-level requester sessions use a follow-up `agent` call with external delivery (`deliver=true`)
|
|
242
|
+
- nested requester subagent sessions receive an internal follow-up injection (`deliver=false`) so the orchestrator can synthesize child results in-session
|
|
243
|
+
- if a nested requester subagent session is gone, Durar falls back to that session's requester when available
|
|
244
|
+
- For top-level requester sessions, completion-mode direct delivery first resolves any bound conversation/thread route and hook override, then fills missing channel-target fields from the requester session's stored route. That keeps completions on the right chat/topic even when the completion origin only identifies the channel.
|
|
245
|
+
- Child completion aggregation is scoped to the current requester run when building nested completion findings, preventing stale prior-run child outputs from leaking into the current announce.
|
|
246
|
+
- Announce replies preserve thread/topic routing when available on channel adapters.
|
|
247
|
+
- Announce context is normalized to a stable internal event block:
|
|
248
|
+
- source (`subagent` or `cron`)
|
|
249
|
+
- child session key/id
|
|
250
|
+
- announce type + task label
|
|
251
|
+
- status line derived from runtime outcome (`success`, `error`, `timeout`, or `unknown`)
|
|
252
|
+
- result content selected from the latest visible assistant text, otherwise sanitized latest tool/toolResult text
|
|
253
|
+
- a follow-up instruction describing when to reply vs. stay silent
|
|
254
|
+
- `Status` is not inferred from model output; it comes from runtime outcome signals.
|
|
255
|
+
- On timeout, if the child only got through tool calls, announce can collapse that history into a short partial-progress summary instead of replaying raw tool output.
|
|
256
|
+
|
|
257
|
+
Announce payloads include a stats line at the end (even when wrapped):
|
|
258
|
+
|
|
259
|
+
- Runtime (e.g., `runtime 5m12s`)
|
|
260
|
+
- Token usage (input/output/total)
|
|
261
|
+
- Estimated cost when model pricing is configured (`models.providers.*.models[].cost`)
|
|
262
|
+
- `sessionKey`, `sessionId`, and transcript path (so the main agent can fetch history via `sessions_history` or inspect the file on disk)
|
|
263
|
+
- Internal metadata is meant for orchestration only; user-facing replies should be rewritten in normal assistant voice.
|
|
264
|
+
|
|
265
|
+
`sessions_history` is the safer orchestration path:
|
|
266
|
+
|
|
267
|
+
- assistant recall is normalized first:
|
|
268
|
+
- thinking tags are stripped
|
|
269
|
+
- `<relevant-memories>` / `<relevant_memories>` scaffolding blocks are stripped
|
|
270
|
+
- plain-text tool-call XML payload blocks such as `<tool_call>...</tool_call>`,
|
|
271
|
+
`<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, and
|
|
272
|
+
`<function_calls>...</function_calls>` are stripped, including truncated
|
|
273
|
+
payloads that never close cleanly
|
|
274
|
+
- downgraded tool-call/result scaffolding and historical-context markers are stripped
|
|
275
|
+
- leaked model control tokens such as `<|assistant|>`, other ASCII
|
|
276
|
+
`<|...|>` tokens, and full-width `<|...|>` variants are stripped
|
|
277
|
+
- malformed MiniMax tool-call XML is stripped
|
|
278
|
+
- credential/token-like text is redacted
|
|
279
|
+
- long blocks can be truncated
|
|
280
|
+
- very large histories can drop older rows or replace an oversized row with
|
|
281
|
+
`[sessions_history omitted: message too large]`
|
|
282
|
+
- raw on-disk transcript inspection is the fallback when you need the full byte-for-byte transcript
|
|
283
|
+
|
|
284
|
+
## Tool Policy (sub-agent tools)
|
|
285
|
+
|
|
286
|
+
By default, sub-agents get **all tools except session tools** and system tools:
|
|
287
|
+
|
|
288
|
+
- `sessions_list`
|
|
289
|
+
- `sessions_history`
|
|
290
|
+
- `sessions_send`
|
|
291
|
+
- `sessions_spawn`
|
|
292
|
+
|
|
293
|
+
`sessions_history` remains a bounded, sanitized recall view here too; it is not
|
|
294
|
+
a raw transcript dump.
|
|
295
|
+
|
|
296
|
+
When `maxSpawnDepth >= 2`, depth-1 orchestrator sub-agents additionally receive `sessions_spawn`, `subagents`, `sessions_list`, and `sessions_history` so they can manage their children.
|
|
297
|
+
|
|
298
|
+
Override via config:
|
|
299
|
+
|
|
300
|
+
```json5
|
|
301
|
+
{
|
|
302
|
+
agents: {
|
|
303
|
+
defaults: {
|
|
304
|
+
subagents: {
|
|
305
|
+
maxConcurrent: 1,
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
},
|
|
309
|
+
tools: {
|
|
310
|
+
subagents: {
|
|
311
|
+
tools: {
|
|
312
|
+
// deny wins
|
|
313
|
+
deny: ["gateway", "cron"],
|
|
314
|
+
// if allow is set, it becomes allow-only (deny still wins)
|
|
315
|
+
// allow: ["read", "exec", "process"]
|
|
316
|
+
},
|
|
317
|
+
},
|
|
318
|
+
},
|
|
319
|
+
}
|
|
320
|
+
```
|
|
321
|
+
|
|
322
|
+
## Concurrency
|
|
323
|
+
|
|
324
|
+
Sub-agents use a dedicated in-process queue lane:
|
|
325
|
+
|
|
326
|
+
- Lane name: `subagent`
|
|
327
|
+
- Concurrency: `agents.defaults.subagents.maxConcurrent` (default `8`)
|
|
328
|
+
|
|
329
|
+
## Stopping
|
|
330
|
+
|
|
331
|
+
- Sending `/stop` in the requester chat aborts the requester session and stops any active sub-agent runs spawned from it, cascading to nested children.
|
|
332
|
+
- `/subagents kill <id>` stops a specific sub-agent and cascades to its children.
|
|
333
|
+
|
|
334
|
+
## Limitations
|
|
335
|
+
|
|
336
|
+
- Sub-agent announce is **best-effort**. If the gateway restarts, pending "announce back" work is lost.
|
|
337
|
+
- Sub-agents still share the same gateway process resources; treat `maxConcurrent` as a safety valve.
|
|
338
|
+
- `sessions_spawn` is always non-blocking: it returns `{ status: "accepted", runId, childSessionKey }` immediately.
|
|
339
|
+
- Sub-agent context only injects `AGENTS.md` + `TOOLS.md` (no `SOUL.md`, `IDENTITY.md`, `USER.md`, `HEARTBEAT.md`, or `BOOTSTRAP.md`).
|
|
340
|
+
- Maximum nesting depth is 5 (`maxSpawnDepth` range: 1–5). Depth 2 is recommended for most use cases.
|
|
341
|
+
- `maxChildrenPerAgent` caps active children per session (default: 5, range: 1–20).
|