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,141 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Agent tools for cross-session status, recall, messaging, and sub-agent orchestration"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to understand what session tools the agent has
|
|
5
|
+
- You want to configure cross-session access or sub-agent spawning
|
|
6
|
+
- You want to inspect status or control spawned sub-agents
|
|
7
|
+
title: "Session Tools"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Session Tools
|
|
11
|
+
|
|
12
|
+
Durar gives agents tools to work across sessions, inspect status, and
|
|
13
|
+
orchestrate sub-agents.
|
|
14
|
+
|
|
15
|
+
## Available tools
|
|
16
|
+
|
|
17
|
+
| Tool | What it does |
|
|
18
|
+
| ------------------ | --------------------------------------------------------------------------- |
|
|
19
|
+
| `sessions_list` | List sessions with optional filters (kind, recency) |
|
|
20
|
+
| `sessions_history` | Read the transcript of a specific session |
|
|
21
|
+
| `sessions_send` | Send a message to another session and optionally wait |
|
|
22
|
+
| `sessions_spawn` | Spawn an isolated sub-agent session for background work |
|
|
23
|
+
| `sessions_yield` | End the current turn and wait for follow-up sub-agent results |
|
|
24
|
+
| `subagents` | List, steer, or kill spawned sub-agents for this session |
|
|
25
|
+
| `session_status` | Show a `/status`-style card and optionally set a per-session model override |
|
|
26
|
+
|
|
27
|
+
## Listing and reading sessions
|
|
28
|
+
|
|
29
|
+
`sessions_list` returns sessions with their key, kind, channel, model, token
|
|
30
|
+
counts, and timestamps. Filter by kind (`main`, `group`, `cron`, `hook`,
|
|
31
|
+
`node`) or recency (`activeMinutes`).
|
|
32
|
+
|
|
33
|
+
`sessions_history` fetches the conversation transcript for a specific session.
|
|
34
|
+
By default, tool results are excluded -- pass `includeTools: true` to see them.
|
|
35
|
+
The returned view is intentionally bounded and safety-filtered:
|
|
36
|
+
|
|
37
|
+
- assistant text is normalized before recall:
|
|
38
|
+
- thinking tags are stripped
|
|
39
|
+
- `<relevant-memories>` / `<relevant_memories>` scaffolding blocks are stripped
|
|
40
|
+
- plain-text tool-call XML payload blocks such as `<tool_call>...</tool_call>`,
|
|
41
|
+
`<function_call>...</function_call>`, `<tool_calls>...</tool_calls>`, and
|
|
42
|
+
`<function_calls>...</function_calls>` are stripped, including truncated
|
|
43
|
+
payloads that never close cleanly
|
|
44
|
+
- downgraded tool-call/result scaffolding such as `[Tool Call: ...]`,
|
|
45
|
+
`[Tool Result ...]`, and `[Historical context ...]` is stripped
|
|
46
|
+
- leaked model control tokens such as `<|assistant|>`, other ASCII
|
|
47
|
+
`<|...|>` tokens, and full-width `<|...|>` variants are stripped
|
|
48
|
+
- malformed MiniMax tool-call XML such as `<invoke ...>` /
|
|
49
|
+
`</minimax:tool_call>` is stripped
|
|
50
|
+
- credential/token-like text is redacted before it is returned
|
|
51
|
+
- long text blocks are truncated
|
|
52
|
+
- very large histories can drop older rows or replace an oversized row with
|
|
53
|
+
`[sessions_history omitted: message too large]`
|
|
54
|
+
- the tool reports summary flags such as `truncated`, `droppedMessages`,
|
|
55
|
+
`contentTruncated`, `contentRedacted`, and `bytes`
|
|
56
|
+
|
|
57
|
+
Both tools accept either a **session key** (like `"main"`) or a **session ID**
|
|
58
|
+
from a previous list call.
|
|
59
|
+
|
|
60
|
+
If you need the exact byte-for-byte transcript, inspect the transcript file on
|
|
61
|
+
disk instead of treating `sessions_history` as a raw dump.
|
|
62
|
+
|
|
63
|
+
## Sending cross-session messages
|
|
64
|
+
|
|
65
|
+
`sessions_send` delivers a message to another session and optionally waits for
|
|
66
|
+
the response:
|
|
67
|
+
|
|
68
|
+
- **Fire-and-forget:** set `timeoutSeconds: 0` to enqueue and return
|
|
69
|
+
immediately.
|
|
70
|
+
- **Wait for reply:** set a timeout and get the response inline.
|
|
71
|
+
|
|
72
|
+
After the target responds, Durar can run a **reply-back loop** where the
|
|
73
|
+
agents alternate messages (up to 5 turns). The target agent can reply
|
|
74
|
+
`REPLY_SKIP` to stop early.
|
|
75
|
+
|
|
76
|
+
## Status and orchestration helpers
|
|
77
|
+
|
|
78
|
+
`session_status` is the lightweight `/status`-equivalent tool for the current
|
|
79
|
+
or another visible session. It reports usage, time, model/runtime state, and
|
|
80
|
+
linked background-task context when present. Like `/status`, it can backfill
|
|
81
|
+
sparse token/cache counters from the latest transcript usage entry, and
|
|
82
|
+
`model=default` clears a per-session override.
|
|
83
|
+
|
|
84
|
+
`sessions_yield` intentionally ends the current turn so the next message can be
|
|
85
|
+
the follow-up event you are waiting for. Use it after spawning sub-agents when
|
|
86
|
+
you want completion results to arrive as the next message instead of building
|
|
87
|
+
poll loops.
|
|
88
|
+
|
|
89
|
+
`subagents` is the control-plane helper for already spawned Durar
|
|
90
|
+
sub-agents. It supports:
|
|
91
|
+
|
|
92
|
+
- `action: "list"` to inspect active/recent runs
|
|
93
|
+
- `action: "steer"` to send follow-up guidance to a running child
|
|
94
|
+
- `action: "kill"` to stop one child or `all`
|
|
95
|
+
|
|
96
|
+
## Spawning sub-agents
|
|
97
|
+
|
|
98
|
+
`sessions_spawn` creates an isolated session for a background task. It is always
|
|
99
|
+
non-blocking -- it returns immediately with a `runId` and `childSessionKey`.
|
|
100
|
+
|
|
101
|
+
Key options:
|
|
102
|
+
|
|
103
|
+
- `runtime: "subagent"` (default) or `"acp"` for external harness agents.
|
|
104
|
+
- `model` and `thinking` overrides for the child session.
|
|
105
|
+
- `thread: true` to bind the spawn to a chat thread (Discord, Slack, etc.).
|
|
106
|
+
- `sandbox: "require"` to enforce sandboxing on the child.
|
|
107
|
+
|
|
108
|
+
Default leaf sub-agents do not get session tools. When
|
|
109
|
+
`maxSpawnDepth >= 2`, depth-1 orchestrator sub-agents additionally receive
|
|
110
|
+
`sessions_spawn`, `subagents`, `sessions_list`, and `sessions_history` so they
|
|
111
|
+
can manage their own children. Leaf runs still do not get recursive
|
|
112
|
+
orchestration tools.
|
|
113
|
+
|
|
114
|
+
After completion, an announce step posts the result to the requester's channel.
|
|
115
|
+
Completion delivery preserves bound thread/topic routing when available, and if
|
|
116
|
+
the completion origin only identifies a channel Durar can still reuse the
|
|
117
|
+
requester session's stored route (`lastChannel` / `lastTo`) for direct
|
|
118
|
+
delivery.
|
|
119
|
+
|
|
120
|
+
For ACP-specific behavior, see [ACP Agents](/tools/acp-agents).
|
|
121
|
+
|
|
122
|
+
## Visibility
|
|
123
|
+
|
|
124
|
+
Session tools are scoped to limit what the agent can see:
|
|
125
|
+
|
|
126
|
+
| Level | Scope |
|
|
127
|
+
| ------- | ---------------------------------------- |
|
|
128
|
+
| `self` | Only the current session |
|
|
129
|
+
| `tree` | Current session + spawned sub-agents |
|
|
130
|
+
| `agent` | All sessions for this agent |
|
|
131
|
+
| `all` | All sessions (cross-agent if configured) |
|
|
132
|
+
|
|
133
|
+
Default is `tree`. Sandboxed sessions are clamped to `tree` regardless of
|
|
134
|
+
config.
|
|
135
|
+
|
|
136
|
+
## Further reading
|
|
137
|
+
|
|
138
|
+
- [Session Management](/concepts/session) -- routing, lifecycle, maintenance
|
|
139
|
+
- [ACP Agents](/tools/acp-agents) -- external harness spawning
|
|
140
|
+
- [Multi-agent](/concepts/multi-agent) -- multi-agent architecture
|
|
141
|
+
- [Gateway Configuration](/gateway/configuration) -- session tool config knobs
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "How Durar manages conversation sessions"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to understand session routing and isolation
|
|
5
|
+
- You want to configure DM scope for multi-user setups
|
|
6
|
+
title: "Session Management"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Session Management
|
|
10
|
+
|
|
11
|
+
Durar organizes conversations into **sessions**. Each message is routed to a
|
|
12
|
+
session based on where it came from -- DMs, group chats, cron jobs, etc.
|
|
13
|
+
|
|
14
|
+
## How messages are routed
|
|
15
|
+
|
|
16
|
+
| Source | Behavior |
|
|
17
|
+
| --------------- | ------------------------- |
|
|
18
|
+
| Direct messages | Shared session by default |
|
|
19
|
+
| Group chats | Isolated per group |
|
|
20
|
+
| Rooms/channels | Isolated per room |
|
|
21
|
+
| Cron jobs | Fresh session per run |
|
|
22
|
+
| Webhooks | Isolated per hook |
|
|
23
|
+
|
|
24
|
+
## DM isolation
|
|
25
|
+
|
|
26
|
+
By default, all DMs share one session for continuity. This is fine for
|
|
27
|
+
single-user setups.
|
|
28
|
+
|
|
29
|
+
<Warning>
|
|
30
|
+
If multiple people can message your agent, enable DM isolation. Without it, all
|
|
31
|
+
users share the same conversation context -- Alice's private messages would be
|
|
32
|
+
visible to Bob.
|
|
33
|
+
</Warning>
|
|
34
|
+
|
|
35
|
+
**The fix:**
|
|
36
|
+
|
|
37
|
+
```json5
|
|
38
|
+
{
|
|
39
|
+
session: {
|
|
40
|
+
dmScope: "per-channel-peer", // isolate by channel + sender
|
|
41
|
+
},
|
|
42
|
+
}
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Other options:
|
|
46
|
+
|
|
47
|
+
- `main` (default) -- all DMs share one session.
|
|
48
|
+
- `per-peer` -- isolate by sender (across channels).
|
|
49
|
+
- `per-channel-peer` -- isolate by channel + sender (recommended).
|
|
50
|
+
- `per-account-channel-peer` -- isolate by account + channel + sender.
|
|
51
|
+
|
|
52
|
+
<Tip>
|
|
53
|
+
If the same person contacts you from multiple channels, use
|
|
54
|
+
`session.identityLinks` to link their identities so they share one session.
|
|
55
|
+
</Tip>
|
|
56
|
+
|
|
57
|
+
Verify your setup with `Durar security audit`.
|
|
58
|
+
|
|
59
|
+
## Session lifecycle
|
|
60
|
+
|
|
61
|
+
Sessions are reused until they expire:
|
|
62
|
+
|
|
63
|
+
- **Daily reset** (default) -- new session at 4:00 AM local time on the gateway
|
|
64
|
+
host.
|
|
65
|
+
- **Idle reset** (optional) -- new session after a period of inactivity. Set
|
|
66
|
+
`session.reset.idleMinutes`.
|
|
67
|
+
- **Manual reset** -- type `/new` or `/reset` in chat. `/new <model>` also
|
|
68
|
+
switches the model.
|
|
69
|
+
|
|
70
|
+
When both daily and idle resets are configured, whichever expires first wins.
|
|
71
|
+
|
|
72
|
+
## Where state lives
|
|
73
|
+
|
|
74
|
+
All session state is owned by the **gateway**. UI clients query the gateway for
|
|
75
|
+
session data.
|
|
76
|
+
|
|
77
|
+
- **Store:** `~/.Durar/agents/<agentId>/sessions/sessions.json`
|
|
78
|
+
- **Transcripts:** `~/.Durar/agents/<agentId>/sessions/<sessionId>.jsonl`
|
|
79
|
+
|
|
80
|
+
## Session maintenance
|
|
81
|
+
|
|
82
|
+
Durar automatically bounds session storage over time. By default, it runs
|
|
83
|
+
in `warn` mode (reports what would be cleaned). Set `session.maintenance.mode`
|
|
84
|
+
to `"enforce"` for automatic cleanup:
|
|
85
|
+
|
|
86
|
+
```json5
|
|
87
|
+
{
|
|
88
|
+
session: {
|
|
89
|
+
maintenance: {
|
|
90
|
+
mode: "enforce",
|
|
91
|
+
pruneAfter: "30d",
|
|
92
|
+
maxEntries: 500,
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
}
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Preview with `Durar sessions cleanup --dry-run`.
|
|
99
|
+
|
|
100
|
+
## Inspecting sessions
|
|
101
|
+
|
|
102
|
+
- `Durar status` -- session store path and recent activity.
|
|
103
|
+
- `Durar sessions --json` -- all sessions (filter with `--active <minutes>`).
|
|
104
|
+
- `/status` in chat -- context usage, model, and toggles.
|
|
105
|
+
- `/context list` -- what is in the system prompt.
|
|
106
|
+
|
|
107
|
+
## Further reading
|
|
108
|
+
|
|
109
|
+
- [Session Pruning](/concepts/session-pruning) -- trimming tool results
|
|
110
|
+
- [Compaction](/concepts/compaction) -- summarizing long conversations
|
|
111
|
+
- [Session Tools](/concepts/session-tool) -- agent tools for cross-session work
|
|
112
|
+
- [Session Management Deep Dive](/reference/session-management-compaction) --
|
|
113
|
+
store schema, transcripts, send policy, origin metadata, and advanced config
|
|
114
|
+
- [Multi-Agent](/concepts/multi-agent) — routing and session isolation across agents
|
|
115
|
+
- [Background Tasks](/automation/tasks) — how detached work creates task records with session references
|
|
116
|
+
- [Channel Routing](/channels/channel-routing) — how inbound messages are routed to sessions
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Use SOUL.md to give your Durar agent an actual voice instead of generic assistant sludge"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want your agent to sound less generic
|
|
5
|
+
- You are editing SOUL.md
|
|
6
|
+
- You want a stronger personality without breaking safety or brevity
|
|
7
|
+
title: "SOUL.md Personality Guide"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# SOUL.md Personality Guide
|
|
11
|
+
|
|
12
|
+
`SOUL.md` is where your agent's voice lives.
|
|
13
|
+
|
|
14
|
+
Durar injects it on normal sessions, so it has real weight. If your agent
|
|
15
|
+
sounds bland, hedgy, or weirdly corporate, this is usually the file to fix.
|
|
16
|
+
|
|
17
|
+
## What belongs in SOUL.md
|
|
18
|
+
|
|
19
|
+
Put the stuff that changes how the agent feels to talk to:
|
|
20
|
+
|
|
21
|
+
- tone
|
|
22
|
+
- opinions
|
|
23
|
+
- brevity
|
|
24
|
+
- humor
|
|
25
|
+
- boundaries
|
|
26
|
+
- default level of bluntness
|
|
27
|
+
|
|
28
|
+
Do **not** turn it into:
|
|
29
|
+
|
|
30
|
+
- a life story
|
|
31
|
+
- a changelog
|
|
32
|
+
- a security policy dump
|
|
33
|
+
- a giant wall of vibes with no behavioral effect
|
|
34
|
+
|
|
35
|
+
Short beats long. Sharp beats vague.
|
|
36
|
+
|
|
37
|
+
## Why this works
|
|
38
|
+
|
|
39
|
+
This lines up with OpenAI's prompt guidance:
|
|
40
|
+
|
|
41
|
+
- The prompt engineering guide says high-level behavior, tone, goals, and
|
|
42
|
+
examples belong in the high-priority instruction layer, not buried in the
|
|
43
|
+
user turn.
|
|
44
|
+
- The same guide recommends treating prompts like something you iterate on,
|
|
45
|
+
pin, and evaluate, not magical prose you write once and forget.
|
|
46
|
+
|
|
47
|
+
For Durar, `SOUL.md` is that layer.
|
|
48
|
+
|
|
49
|
+
If you want better personality, write stronger instructions. If you want stable
|
|
50
|
+
personality, keep them concise and versioned.
|
|
51
|
+
|
|
52
|
+
OpenAI refs:
|
|
53
|
+
|
|
54
|
+
- [Prompt engineering](https://developers.openai.com/api/docs/guides/prompt-engineering)
|
|
55
|
+
- [Message roles and instruction following](https://developers.openai.com/api/docs/guides/prompt-engineering#message-roles-and-instruction-following)
|
|
56
|
+
|
|
57
|
+
## The Molty prompt
|
|
58
|
+
|
|
59
|
+
Paste this into your agent and let it rewrite `SOUL.md`.
|
|
60
|
+
|
|
61
|
+
Path fixed for Durar workspaces: use `SOUL.md`, not `http://SOUL.md`.
|
|
62
|
+
|
|
63
|
+
```md
|
|
64
|
+
Read your `SOUL.md`. Now rewrite it with these changes:
|
|
65
|
+
|
|
66
|
+
1. You have opinions now. Strong ones. Stop hedging everything with "it depends" - commit to a take.
|
|
67
|
+
2. Delete every rule that sounds corporate. If it could appear in an employee handbook, it doesn't belong here.
|
|
68
|
+
3. Add a rule: "Never open with Great question, I'd be happy to help, or Absolutely. Just answer."
|
|
69
|
+
4. Brevity is mandatory. If the answer fits in one sentence, one sentence is what I get.
|
|
70
|
+
5. Humor is allowed. Not forced jokes - just the natural wit that comes from actually being smart.
|
|
71
|
+
6. You can call things out. If I'm about to do something dumb, say so. Charm over cruelty, but don't sugarcoat.
|
|
72
|
+
7. Swearing is allowed when it lands. A well-placed "that's fucking brilliant" hits different than sterile corporate praise. Don't force it. Don't overdo it. But if a situation calls for a "holy shit" - say holy shit.
|
|
73
|
+
8. Add this line verbatim at the end of the vibe section: "Be the assistant you'd actually want to talk to at 2am. Not a corporate drone. Not a sycophant. Just... good."
|
|
74
|
+
|
|
75
|
+
Save the new `SOUL.md`. Welcome to having a personality.
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## What good looks like
|
|
79
|
+
|
|
80
|
+
Good `SOUL.md` rules sound like this:
|
|
81
|
+
|
|
82
|
+
- have a take
|
|
83
|
+
- skip filler
|
|
84
|
+
- be funny when it fits
|
|
85
|
+
- call out bad ideas early
|
|
86
|
+
- stay concise unless depth is actually useful
|
|
87
|
+
|
|
88
|
+
Bad `SOUL.md` rules sound like this:
|
|
89
|
+
|
|
90
|
+
- maintain professionalism at all times
|
|
91
|
+
- provide comprehensive and thoughtful assistance
|
|
92
|
+
- ensure a positive and supportive experience
|
|
93
|
+
|
|
94
|
+
That second list is how you get mush.
|
|
95
|
+
|
|
96
|
+
## One warning
|
|
97
|
+
|
|
98
|
+
Personality is not permission to be sloppy.
|
|
99
|
+
|
|
100
|
+
Keep `AGENTS.md` for operating rules. Keep `SOUL.md` for voice, stance, and
|
|
101
|
+
style. If your agent works in shared channels, public replies, or customer
|
|
102
|
+
surfaces, make sure the tone still fits the room.
|
|
103
|
+
|
|
104
|
+
Sharp is good. Annoying is not.
|
|
105
|
+
|
|
106
|
+
## Related docs
|
|
107
|
+
|
|
108
|
+
- [Agent workspace](/concepts/agent-workspace)
|
|
109
|
+
- [System prompt](/concepts/system-prompt)
|
|
110
|
+
- [SOUL.md template](/reference/templates/SOUL)
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Streaming + chunking behavior (block replies, channel preview streaming, mode mapping)"
|
|
3
|
+
read_when:
|
|
4
|
+
- Explaining how streaming or chunking works on channels
|
|
5
|
+
- Changing block streaming or channel chunking behavior
|
|
6
|
+
- Debugging duplicate/early block replies or channel preview streaming
|
|
7
|
+
title: "Streaming and Chunking"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Streaming + chunking
|
|
11
|
+
|
|
12
|
+
Durar has two separate streaming layers:
|
|
13
|
+
|
|
14
|
+
- **Block streaming (channels):** emit completed **blocks** as the assistant writes. These are normal channel messages (not token deltas).
|
|
15
|
+
- **Preview streaming (Telegram/Discord/Slack):** update a temporary **preview message** while generating.
|
|
16
|
+
|
|
17
|
+
There is **no true token-delta streaming** to channel messages today. Preview streaming is message-based (send + edits/appends).
|
|
18
|
+
|
|
19
|
+
## Block streaming (channel messages)
|
|
20
|
+
|
|
21
|
+
Block streaming sends assistant output in coarse chunks as it becomes available.
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
Model output
|
|
25
|
+
└─ text_delta/events
|
|
26
|
+
├─ (blockStreamingBreak=text_end)
|
|
27
|
+
│ └─ chunker emits blocks as buffer grows
|
|
28
|
+
└─ (blockStreamingBreak=message_end)
|
|
29
|
+
└─ chunker flushes at message_end
|
|
30
|
+
└─ channel send (block replies)
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Legend:
|
|
34
|
+
|
|
35
|
+
- `text_delta/events`: model stream events (may be sparse for non-streaming models).
|
|
36
|
+
- `chunker`: `EmbeddedBlockChunker` applying min/max bounds + break preference.
|
|
37
|
+
- `channel send`: actual outbound messages (block replies).
|
|
38
|
+
|
|
39
|
+
**Controls:**
|
|
40
|
+
|
|
41
|
+
- `agents.defaults.blockStreamingDefault`: `"on"`/`"off"` (default off).
|
|
42
|
+
- Channel overrides: `*.blockStreaming` (and per-account variants) to force `"on"`/`"off"` per channel.
|
|
43
|
+
- `agents.defaults.blockStreamingBreak`: `"text_end"` or `"message_end"`.
|
|
44
|
+
- `agents.defaults.blockStreamingChunk`: `{ minChars, maxChars, breakPreference? }`.
|
|
45
|
+
- `agents.defaults.blockStreamingCoalesce`: `{ minChars?, maxChars?, idleMs? }` (merge streamed blocks before send).
|
|
46
|
+
- Channel hard cap: `*.textChunkLimit` (e.g., `channels.whatsapp.textChunkLimit`).
|
|
47
|
+
- Channel chunk mode: `*.chunkMode` (`length` default, `newline` splits on blank lines (paragraph boundaries) before length chunking).
|
|
48
|
+
- Discord soft cap: `channels.discord.maxLinesPerMessage` (default 17) splits tall replies to avoid UI clipping.
|
|
49
|
+
|
|
50
|
+
**Boundary semantics:**
|
|
51
|
+
|
|
52
|
+
- `text_end`: stream blocks as soon as chunker emits; flush on each `text_end`.
|
|
53
|
+
- `message_end`: wait until assistant message finishes, then flush buffered output.
|
|
54
|
+
|
|
55
|
+
`message_end` still uses the chunker if the buffered text exceeds `maxChars`, so it can emit multiple chunks at the end.
|
|
56
|
+
|
|
57
|
+
## Chunking algorithm (low/high bounds)
|
|
58
|
+
|
|
59
|
+
Block chunking is implemented by `EmbeddedBlockChunker`:
|
|
60
|
+
|
|
61
|
+
- **Low bound:** don’t emit until buffer >= `minChars` (unless forced).
|
|
62
|
+
- **High bound:** prefer splits before `maxChars`; if forced, split at `maxChars`.
|
|
63
|
+
- **Break preference:** `paragraph` → `newline` → `sentence` → `whitespace` → hard break.
|
|
64
|
+
- **Code fences:** never split inside fences; when forced at `maxChars`, close + reopen the fence to keep Markdown valid.
|
|
65
|
+
|
|
66
|
+
`maxChars` is clamped to the channel `textChunkLimit`, so you can’t exceed per-channel caps.
|
|
67
|
+
|
|
68
|
+
## Coalescing (merge streamed blocks)
|
|
69
|
+
|
|
70
|
+
When block streaming is enabled, Durar can **merge consecutive block chunks**
|
|
71
|
+
before sending them out. This reduces “single-line spam” while still providing
|
|
72
|
+
progressive output.
|
|
73
|
+
|
|
74
|
+
- Coalescing waits for **idle gaps** (`idleMs`) before flushing.
|
|
75
|
+
- Buffers are capped by `maxChars` and will flush if they exceed it.
|
|
76
|
+
- `minChars` prevents tiny fragments from sending until enough text accumulates
|
|
77
|
+
(final flush always sends remaining text).
|
|
78
|
+
- Joiner is derived from `blockStreamingChunk.breakPreference`
|
|
79
|
+
(`paragraph` → `\n\n`, `newline` → `\n`, `sentence` → space).
|
|
80
|
+
- Channel overrides are available via `*.blockStreamingCoalesce` (including per-account configs).
|
|
81
|
+
- Default coalesce `minChars` is bumped to 1500 for Signal/Slack/Discord unless overridden.
|
|
82
|
+
|
|
83
|
+
## Human-like pacing between blocks
|
|
84
|
+
|
|
85
|
+
When block streaming is enabled, you can add a **randomized pause** between
|
|
86
|
+
block replies (after the first block). This makes multi-bubble responses feel
|
|
87
|
+
more natural.
|
|
88
|
+
|
|
89
|
+
- Config: `agents.defaults.humanDelay` (override per agent via `agents.list[].humanDelay`).
|
|
90
|
+
- Modes: `off` (default), `natural` (800–2500ms), `custom` (`minMs`/`maxMs`).
|
|
91
|
+
- Applies only to **block replies**, not final replies or tool summaries.
|
|
92
|
+
|
|
93
|
+
## "Stream chunks or everything"
|
|
94
|
+
|
|
95
|
+
This maps to:
|
|
96
|
+
|
|
97
|
+
- **Stream chunks:** `blockStreamingDefault: "on"` + `blockStreamingBreak: "text_end"` (emit as you go). Non-Telegram channels also need `*.blockStreaming: true`.
|
|
98
|
+
- **Stream everything at end:** `blockStreamingBreak: "message_end"` (flush once, possibly multiple chunks if very long).
|
|
99
|
+
- **No block streaming:** `blockStreamingDefault: "off"` (only final reply).
|
|
100
|
+
|
|
101
|
+
**Channel note:** Block streaming is **off unless**
|
|
102
|
+
`*.blockStreaming` is explicitly set to `true`. Channels can stream a live preview
|
|
103
|
+
(`channels.<channel>.streaming`) without block replies.
|
|
104
|
+
|
|
105
|
+
Config location reminder: the `blockStreaming*` defaults live under
|
|
106
|
+
`agents.defaults`, not the root config.
|
|
107
|
+
|
|
108
|
+
## Preview streaming modes
|
|
109
|
+
|
|
110
|
+
Canonical key: `channels.<channel>.streaming`
|
|
111
|
+
|
|
112
|
+
Modes:
|
|
113
|
+
|
|
114
|
+
- `off`: disable preview streaming.
|
|
115
|
+
- `partial`: single preview that is replaced with latest text.
|
|
116
|
+
- `block`: preview updates in chunked/appended steps.
|
|
117
|
+
- `progress`: progress/status preview during generation, final answer at completion.
|
|
118
|
+
|
|
119
|
+
### Channel mapping
|
|
120
|
+
|
|
121
|
+
| Channel | `off` | `partial` | `block` | `progress` |
|
|
122
|
+
| -------- | ----- | --------- | ------- | ----------------- |
|
|
123
|
+
| Telegram | ✅ | ✅ | ✅ | maps to `partial` |
|
|
124
|
+
| Discord | ✅ | ✅ | ✅ | maps to `partial` |
|
|
125
|
+
| Slack | ✅ | ✅ | ✅ | ✅ |
|
|
126
|
+
|
|
127
|
+
Slack-only:
|
|
128
|
+
|
|
129
|
+
- `channels.slack.nativeStreaming` toggles Slack native streaming API calls when `streaming=partial` (default: `true`).
|
|
130
|
+
|
|
131
|
+
Legacy key migration:
|
|
132
|
+
|
|
133
|
+
- Telegram: `streamMode` + boolean `streaming` auto-migrate to `streaming` enum.
|
|
134
|
+
- Discord: `streamMode` + boolean `streaming` auto-migrate to `streaming` enum.
|
|
135
|
+
- Slack: `streamMode` auto-migrates to `streaming` enum; boolean `streaming` auto-migrates to `nativeStreaming`.
|
|
136
|
+
|
|
137
|
+
### Runtime behavior
|
|
138
|
+
|
|
139
|
+
Telegram:
|
|
140
|
+
|
|
141
|
+
- Uses `sendMessage` + `editMessageText` preview updates across DMs and group/topics.
|
|
142
|
+
- Preview streaming is skipped when Telegram block streaming is explicitly enabled (to avoid double-streaming).
|
|
143
|
+
- `/reasoning stream` can write reasoning to preview.
|
|
144
|
+
|
|
145
|
+
Discord:
|
|
146
|
+
|
|
147
|
+
- Uses send + edit preview messages.
|
|
148
|
+
- `block` mode uses draft chunking (`draftChunk`).
|
|
149
|
+
- Preview streaming is skipped when Discord block streaming is explicitly enabled.
|
|
150
|
+
|
|
151
|
+
Slack:
|
|
152
|
+
|
|
153
|
+
- `partial` can use Slack native streaming (`chat.startStream`/`append`/`stop`) when available.
|
|
154
|
+
- `block` uses append-style draft previews.
|
|
155
|
+
- `progress` uses status preview text, then final answer.
|
|
156
|
+
|
|
157
|
+
## Related
|
|
158
|
+
|
|
159
|
+
- [Messages](/concepts/messages) — message lifecycle and delivery
|
|
160
|
+
- [Retry](/concepts/retry) — retry behavior on delivery failure
|
|
161
|
+
- [Channels](/channels) — per-channel streaming support
|