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,435 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "iMessage via BlueBubbles macOS server (REST send/receive, typing, reactions, pairing, advanced actions)."
|
|
3
|
+
read_when:
|
|
4
|
+
- Setting up BlueBubbles channel
|
|
5
|
+
- Troubleshooting webhook pairing
|
|
6
|
+
- Configuring iMessage on macOS
|
|
7
|
+
title: "BlueBubbles"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# BlueBubbles (macOS REST)
|
|
11
|
+
|
|
12
|
+
Status: bundled plugin that talks to the BlueBubbles macOS server over HTTP. **Recommended for iMessage integration** due to its richer API and easier setup compared to the legacy imsg channel.
|
|
13
|
+
|
|
14
|
+
## Bundled plugin
|
|
15
|
+
|
|
16
|
+
Current Durar releases bundle BlueBubbles, so normal packaged builds do not
|
|
17
|
+
need a separate `Durar plugins install` step.
|
|
18
|
+
|
|
19
|
+
## Overview
|
|
20
|
+
|
|
21
|
+
- Runs on macOS via the BlueBubbles helper app ([bluebubbles.app](https://bluebubbles.app)).
|
|
22
|
+
- Recommended/tested: macOS Sequoia (15). macOS Tahoe (26) works; edit is currently broken on Tahoe, and group icon updates may report success but not sync.
|
|
23
|
+
- Durar talks to it through its REST API (`GET /api/v1/ping`, `POST /message/text`, `POST /chat/:id/*`).
|
|
24
|
+
- Incoming messages arrive via webhooks; outgoing replies, typing indicators, read receipts, and tapbacks are REST calls.
|
|
25
|
+
- Attachments and stickers are ingested as inbound media (and surfaced to the agent when possible).
|
|
26
|
+
- Pairing/allowlist works the same way as other channels (`/channels/pairing` etc) with `channels.bluebubbles.allowFrom` + pairing codes.
|
|
27
|
+
- Reactions are surfaced as system events just like Slack/Telegram so agents can "mention" them before replying.
|
|
28
|
+
- Advanced features: edit, unsend, reply threading, message effects, group management.
|
|
29
|
+
|
|
30
|
+
## Quick start
|
|
31
|
+
|
|
32
|
+
1. Install the BlueBubbles server on your Mac (follow the instructions at [bluebubbles.app/install](https://bluebubbles.app/install)).
|
|
33
|
+
2. In the BlueBubbles config, enable the web API and set a password.
|
|
34
|
+
3. Run `Durar onboard` and select BlueBubbles, or configure manually:
|
|
35
|
+
|
|
36
|
+
```json5
|
|
37
|
+
{
|
|
38
|
+
channels: {
|
|
39
|
+
bluebubbles: {
|
|
40
|
+
enabled: true,
|
|
41
|
+
serverUrl: "http://192.168.1.100:1234",
|
|
42
|
+
password: "example-password",
|
|
43
|
+
webhookPath: "/bluebubbles-webhook",
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
4. Point BlueBubbles webhooks to your gateway (example: `https://your-gateway-host:3000/bluebubbles-webhook?password=<password>`).
|
|
50
|
+
5. Start the gateway; it will register the webhook handler and start pairing.
|
|
51
|
+
|
|
52
|
+
Security note:
|
|
53
|
+
|
|
54
|
+
- Always set a webhook password.
|
|
55
|
+
- Webhook authentication is always required. Durar rejects BlueBubbles webhook requests unless they include a password/guid that matches `channels.bluebubbles.password` (for example `?password=<password>` or `x-password`), regardless of loopback/proxy topology.
|
|
56
|
+
- Password authentication is checked before reading/parsing full webhook bodies.
|
|
57
|
+
|
|
58
|
+
## Keeping Messages.app alive (VM / headless setups)
|
|
59
|
+
|
|
60
|
+
Some macOS VM / always-on setups can end up with Messages.app going “idle” (incoming events stop until the app is opened/foregrounded). A simple workaround is to **poke Messages every 5 minutes** using an AppleScript + LaunchAgent.
|
|
61
|
+
|
|
62
|
+
### 1) Save the AppleScript
|
|
63
|
+
|
|
64
|
+
Save this as:
|
|
65
|
+
|
|
66
|
+
- `~/Scripts/poke-messages.scpt`
|
|
67
|
+
|
|
68
|
+
Example script (non-interactive; does not steal focus):
|
|
69
|
+
|
|
70
|
+
```applescript
|
|
71
|
+
try
|
|
72
|
+
tell application "Messages"
|
|
73
|
+
if not running then
|
|
74
|
+
launch
|
|
75
|
+
end if
|
|
76
|
+
|
|
77
|
+
-- Touch the scripting interface to keep the process responsive.
|
|
78
|
+
set _chatCount to (count of chats)
|
|
79
|
+
end tell
|
|
80
|
+
on error
|
|
81
|
+
-- Ignore transient failures (first-run prompts, locked session, etc).
|
|
82
|
+
end try
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
### 2) Install a LaunchAgent
|
|
86
|
+
|
|
87
|
+
Save this as:
|
|
88
|
+
|
|
89
|
+
- `~/Library/LaunchAgents/com.user.poke-messages.plist`
|
|
90
|
+
|
|
91
|
+
```xml
|
|
92
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
93
|
+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
94
|
+
<plist version="1.0">
|
|
95
|
+
<dict>
|
|
96
|
+
<key>Label</key>
|
|
97
|
+
<string>com.user.poke-messages</string>
|
|
98
|
+
|
|
99
|
+
<key>ProgramArguments</key>
|
|
100
|
+
<array>
|
|
101
|
+
<string>/bin/bash</string>
|
|
102
|
+
<string>-lc</string>
|
|
103
|
+
<string>/usr/bin/osascript "$HOME/Scripts/poke-messages.scpt"</string>
|
|
104
|
+
</array>
|
|
105
|
+
|
|
106
|
+
<key>RunAtLoad</key>
|
|
107
|
+
<true/>
|
|
108
|
+
|
|
109
|
+
<key>StartInterval</key>
|
|
110
|
+
<integer>300</integer>
|
|
111
|
+
|
|
112
|
+
<key>StandardOutPath</key>
|
|
113
|
+
<string>/tmp/poke-messages.log</string>
|
|
114
|
+
<key>StandardErrorPath</key>
|
|
115
|
+
<string>/tmp/poke-messages.err</string>
|
|
116
|
+
</dict>
|
|
117
|
+
</plist>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
Notes:
|
|
121
|
+
|
|
122
|
+
- This runs **every 300 seconds** and **on login**.
|
|
123
|
+
- The first run may trigger macOS **Automation** prompts (`osascript` → Messages). Approve them in the same user session that runs the LaunchAgent.
|
|
124
|
+
|
|
125
|
+
Load it:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
launchctl unload ~/Library/LaunchAgents/com.user.poke-messages.plist 2>/dev/null || true
|
|
129
|
+
launchctl load ~/Library/LaunchAgents/com.user.poke-messages.plist
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Onboarding
|
|
133
|
+
|
|
134
|
+
BlueBubbles is available in interactive onboarding:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
Durar onboard
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
The wizard prompts for:
|
|
141
|
+
|
|
142
|
+
- **Server URL** (required): BlueBubbles server address (e.g., `http://192.168.1.100:1234`)
|
|
143
|
+
- **Password** (required): API password from BlueBubbles Server settings
|
|
144
|
+
- **Webhook path** (optional): Defaults to `/bluebubbles-webhook`
|
|
145
|
+
- **DM policy**: pairing, allowlist, open, or disabled
|
|
146
|
+
- **Allow list**: Phone numbers, emails, or chat targets
|
|
147
|
+
|
|
148
|
+
You can also add BlueBubbles via CLI:
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
Durar channels add bluebubbles --http-url http://192.168.1.100:1234 --password <password>
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## Access control (DMs + groups)
|
|
155
|
+
|
|
156
|
+
DMs:
|
|
157
|
+
|
|
158
|
+
- Default: `channels.bluebubbles.dmPolicy = "pairing"`.
|
|
159
|
+
- Unknown senders receive a pairing code; messages are ignored until approved (codes expire after 1 hour).
|
|
160
|
+
- Approve via:
|
|
161
|
+
- `Durar pairing list bluebubbles`
|
|
162
|
+
- `Durar pairing approve bluebubbles <CODE>`
|
|
163
|
+
- Pairing is the default token exchange. Details: [Pairing](/channels/pairing)
|
|
164
|
+
|
|
165
|
+
Groups:
|
|
166
|
+
|
|
167
|
+
- `channels.bluebubbles.groupPolicy = open | allowlist | disabled` (default: `allowlist`).
|
|
168
|
+
- `channels.bluebubbles.groupAllowFrom` controls who can trigger in groups when `allowlist` is set.
|
|
169
|
+
|
|
170
|
+
### Contact name enrichment (macOS, optional)
|
|
171
|
+
|
|
172
|
+
BlueBubbles group webhooks often only include raw participant addresses. If you want `GroupMembers` context to show local contact names instead, you can opt in to local Contacts enrichment on macOS:
|
|
173
|
+
|
|
174
|
+
- `channels.bluebubbles.enrichGroupParticipantsFromContacts = true` enables the lookup. Default: `false`.
|
|
175
|
+
- Lookups run only after group access, command authorization, and mention gating have allowed the message through.
|
|
176
|
+
- Only unnamed phone participants are enriched.
|
|
177
|
+
- Raw phone numbers remain as the fallback when no local match is found.
|
|
178
|
+
|
|
179
|
+
```json5
|
|
180
|
+
{
|
|
181
|
+
channels: {
|
|
182
|
+
bluebubbles: {
|
|
183
|
+
enrichGroupParticipantsFromContacts: true,
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### Mention gating (groups)
|
|
190
|
+
|
|
191
|
+
BlueBubbles supports mention gating for group chats, matching iMessage/WhatsApp behavior:
|
|
192
|
+
|
|
193
|
+
- Uses `agents.list[].groupChat.mentionPatterns` (or `messages.groupChat.mentionPatterns`) to detect mentions.
|
|
194
|
+
- When `requireMention` is enabled for a group, the agent only responds when mentioned.
|
|
195
|
+
- Control commands from authorized senders bypass mention gating.
|
|
196
|
+
|
|
197
|
+
Per-group configuration:
|
|
198
|
+
|
|
199
|
+
```json5
|
|
200
|
+
{
|
|
201
|
+
channels: {
|
|
202
|
+
bluebubbles: {
|
|
203
|
+
groupPolicy: "allowlist",
|
|
204
|
+
groupAllowFrom: ["+15555550123"],
|
|
205
|
+
groups: {
|
|
206
|
+
"*": { requireMention: true }, // default for all groups
|
|
207
|
+
"iMessage;-;chat123": { requireMention: false }, // override for specific group
|
|
208
|
+
},
|
|
209
|
+
},
|
|
210
|
+
},
|
|
211
|
+
}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### Command gating
|
|
215
|
+
|
|
216
|
+
- Control commands (e.g., `/config`, `/model`) require authorization.
|
|
217
|
+
- Uses `allowFrom` and `groupAllowFrom` to determine command authorization.
|
|
218
|
+
- Authorized senders can run control commands even without mentioning in groups.
|
|
219
|
+
|
|
220
|
+
## ACP conversation bindings
|
|
221
|
+
|
|
222
|
+
BlueBubbles chats can be turned into durable ACP workspaces without changing the transport layer.
|
|
223
|
+
|
|
224
|
+
Fast operator flow:
|
|
225
|
+
|
|
226
|
+
- Run `/acp spawn codex --bind here` inside the DM or allowed group chat.
|
|
227
|
+
- Future messages in that same BlueBubbles conversation route to the spawned ACP session.
|
|
228
|
+
- `/new` and `/reset` reset the same bound ACP session in place.
|
|
229
|
+
- `/acp close` closes the ACP session and removes the binding.
|
|
230
|
+
|
|
231
|
+
Configured persistent bindings are also supported through top-level `bindings[]` entries with `type: "acp"` and `match.channel: "bluebubbles"`.
|
|
232
|
+
|
|
233
|
+
`match.peer.id` can use any supported BlueBubbles target form:
|
|
234
|
+
|
|
235
|
+
- normalized DM handle such as `+15555550123` or `user@example.com`
|
|
236
|
+
- `chat_id:<id>`
|
|
237
|
+
- `chat_guid:<guid>`
|
|
238
|
+
- `chat_identifier:<identifier>`
|
|
239
|
+
|
|
240
|
+
For stable group bindings, prefer `chat_id:*` or `chat_identifier:*`.
|
|
241
|
+
|
|
242
|
+
Example:
|
|
243
|
+
|
|
244
|
+
```json5
|
|
245
|
+
{
|
|
246
|
+
agents: {
|
|
247
|
+
list: [
|
|
248
|
+
{
|
|
249
|
+
id: "codex",
|
|
250
|
+
runtime: {
|
|
251
|
+
type: "acp",
|
|
252
|
+
acp: { agent: "codex", backend: "acpx", mode: "persistent" },
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
],
|
|
256
|
+
},
|
|
257
|
+
bindings: [
|
|
258
|
+
{
|
|
259
|
+
type: "acp",
|
|
260
|
+
agentId: "codex",
|
|
261
|
+
match: {
|
|
262
|
+
channel: "bluebubbles",
|
|
263
|
+
accountId: "default",
|
|
264
|
+
peer: { kind: "dm", id: "+15555550123" },
|
|
265
|
+
},
|
|
266
|
+
acp: { label: "codex-imessage" },
|
|
267
|
+
},
|
|
268
|
+
],
|
|
269
|
+
}
|
|
270
|
+
```
|
|
271
|
+
|
|
272
|
+
See [ACP Agents](/tools/acp-agents) for shared ACP binding behavior.
|
|
273
|
+
|
|
274
|
+
## Typing + read receipts
|
|
275
|
+
|
|
276
|
+
- **Typing indicators**: Sent automatically before and during response generation.
|
|
277
|
+
- **Read receipts**: Controlled by `channels.bluebubbles.sendReadReceipts` (default: `true`).
|
|
278
|
+
- **Typing indicators**: Durar sends typing start events; BlueBubbles clears typing automatically on send or timeout (manual stop via DELETE is unreliable).
|
|
279
|
+
|
|
280
|
+
```json5
|
|
281
|
+
{
|
|
282
|
+
channels: {
|
|
283
|
+
bluebubbles: {
|
|
284
|
+
sendReadReceipts: false, // disable read receipts
|
|
285
|
+
},
|
|
286
|
+
},
|
|
287
|
+
}
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
## Advanced actions
|
|
291
|
+
|
|
292
|
+
BlueBubbles supports advanced message actions when enabled in config:
|
|
293
|
+
|
|
294
|
+
```json5
|
|
295
|
+
{
|
|
296
|
+
channels: {
|
|
297
|
+
bluebubbles: {
|
|
298
|
+
actions: {
|
|
299
|
+
reactions: true, // tapbacks (default: true)
|
|
300
|
+
edit: true, // edit sent messages (macOS 13+, broken on macOS 26 Tahoe)
|
|
301
|
+
unsend: true, // unsend messages (macOS 13+)
|
|
302
|
+
reply: true, // reply threading by message GUID
|
|
303
|
+
sendWithEffect: true, // message effects (slam, loud, etc.)
|
|
304
|
+
renameGroup: true, // rename group chats
|
|
305
|
+
setGroupIcon: true, // set group chat icon/photo (flaky on macOS 26 Tahoe)
|
|
306
|
+
addParticipant: true, // add participants to groups
|
|
307
|
+
removeParticipant: true, // remove participants from groups
|
|
308
|
+
leaveGroup: true, // leave group chats
|
|
309
|
+
sendAttachment: true, // send attachments/media
|
|
310
|
+
},
|
|
311
|
+
},
|
|
312
|
+
},
|
|
313
|
+
}
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Available actions:
|
|
317
|
+
|
|
318
|
+
- **react**: Add/remove tapback reactions (`messageId`, `emoji`, `remove`)
|
|
319
|
+
- **edit**: Edit a sent message (`messageId`, `text`)
|
|
320
|
+
- **unsend**: Unsend a message (`messageId`)
|
|
321
|
+
- **reply**: Reply to a specific message (`messageId`, `text`, `to`)
|
|
322
|
+
- **sendWithEffect**: Send with iMessage effect (`text`, `to`, `effectId`)
|
|
323
|
+
- **renameGroup**: Rename a group chat (`chatGuid`, `displayName`)
|
|
324
|
+
- **setGroupIcon**: Set a group chat's icon/photo (`chatGuid`, `media`) — flaky on macOS 26 Tahoe (API may return success but the icon does not sync).
|
|
325
|
+
- **addParticipant**: Add someone to a group (`chatGuid`, `address`)
|
|
326
|
+
- **removeParticipant**: Remove someone from a group (`chatGuid`, `address`)
|
|
327
|
+
- **leaveGroup**: Leave a group chat (`chatGuid`)
|
|
328
|
+
- **upload-file**: Send media/files (`to`, `buffer`, `filename`, `asVoice`)
|
|
329
|
+
- Voice memos: set `asVoice: true` with **MP3** or **CAF** audio to send as an iMessage voice message. BlueBubbles converts MP3 → CAF when sending voice memos.
|
|
330
|
+
- Legacy alias: `sendAttachment` still works, but `upload-file` is the canonical action name.
|
|
331
|
+
|
|
332
|
+
### Message IDs (short vs full)
|
|
333
|
+
|
|
334
|
+
Durar may surface _short_ message IDs (e.g., `1`, `2`) to save tokens.
|
|
335
|
+
|
|
336
|
+
- `MessageSid` / `ReplyToId` can be short IDs.
|
|
337
|
+
- `MessageSidFull` / `ReplyToIdFull` contain the provider full IDs.
|
|
338
|
+
- Short IDs are in-memory; they can expire on restart or cache eviction.
|
|
339
|
+
- Actions accept short or full `messageId`, but short IDs will error if no longer available.
|
|
340
|
+
|
|
341
|
+
Use full IDs for durable automations and storage:
|
|
342
|
+
|
|
343
|
+
- Templates: `{{MessageSidFull}}`, `{{ReplyToIdFull}}`
|
|
344
|
+
- Context: `MessageSidFull` / `ReplyToIdFull` in inbound payloads
|
|
345
|
+
|
|
346
|
+
See [Configuration](/gateway/configuration) for template variables.
|
|
347
|
+
|
|
348
|
+
## Block streaming
|
|
349
|
+
|
|
350
|
+
Control whether responses are sent as a single message or streamed in blocks:
|
|
351
|
+
|
|
352
|
+
```json5
|
|
353
|
+
{
|
|
354
|
+
channels: {
|
|
355
|
+
bluebubbles: {
|
|
356
|
+
blockStreaming: true, // enable block streaming (off by default)
|
|
357
|
+
},
|
|
358
|
+
},
|
|
359
|
+
}
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
## Media + limits
|
|
363
|
+
|
|
364
|
+
- Inbound attachments are downloaded and stored in the media cache.
|
|
365
|
+
- Media cap via `channels.bluebubbles.mediaMaxMb` for inbound and outbound media (default: 8 MB).
|
|
366
|
+
- Outbound text is chunked to `channels.bluebubbles.textChunkLimit` (default: 4000 chars).
|
|
367
|
+
|
|
368
|
+
## Configuration reference
|
|
369
|
+
|
|
370
|
+
Full configuration: [Configuration](/gateway/configuration)
|
|
371
|
+
|
|
372
|
+
Provider options:
|
|
373
|
+
|
|
374
|
+
- `channels.bluebubbles.enabled`: Enable/disable the channel.
|
|
375
|
+
- `channels.bluebubbles.serverUrl`: BlueBubbles REST API base URL.
|
|
376
|
+
- `channels.bluebubbles.password`: API password.
|
|
377
|
+
- `channels.bluebubbles.webhookPath`: Webhook endpoint path (default: `/bluebubbles-webhook`).
|
|
378
|
+
- `channels.bluebubbles.dmPolicy`: `pairing | allowlist | open | disabled` (default: `pairing`).
|
|
379
|
+
- `channels.bluebubbles.allowFrom`: DM allowlist (handles, emails, E.164 numbers, `chat_id:*`, `chat_guid:*`).
|
|
380
|
+
- `channels.bluebubbles.groupPolicy`: `open | allowlist | disabled` (default: `allowlist`).
|
|
381
|
+
- `channels.bluebubbles.groupAllowFrom`: Group sender allowlist.
|
|
382
|
+
- `channels.bluebubbles.enrichGroupParticipantsFromContacts`: On macOS, optionally enrich unnamed group participants from local Contacts after gating passes. Default: `false`.
|
|
383
|
+
- `channels.bluebubbles.groups`: Per-group config (`requireMention`, etc.).
|
|
384
|
+
- `channels.bluebubbles.sendReadReceipts`: Send read receipts (default: `true`).
|
|
385
|
+
- `channels.bluebubbles.blockStreaming`: Enable block streaming (default: `false`; required for streaming replies).
|
|
386
|
+
- `channels.bluebubbles.textChunkLimit`: Outbound chunk size in chars (default: 4000).
|
|
387
|
+
- `channels.bluebubbles.chunkMode`: `length` (default) splits only when exceeding `textChunkLimit`; `newline` splits on blank lines (paragraph boundaries) before length chunking.
|
|
388
|
+
- `channels.bluebubbles.mediaMaxMb`: Inbound/outbound media cap in MB (default: 8).
|
|
389
|
+
- `channels.bluebubbles.mediaLocalRoots`: Explicit allowlist of absolute local directories permitted for outbound local media paths. Local path sends are denied by default unless this is configured. Per-account override: `channels.bluebubbles.accounts.<accountId>.mediaLocalRoots`.
|
|
390
|
+
- `channels.bluebubbles.historyLimit`: Max group messages for context (0 disables).
|
|
391
|
+
- `channels.bluebubbles.dmHistoryLimit`: DM history limit.
|
|
392
|
+
- `channels.bluebubbles.actions`: Enable/disable specific actions.
|
|
393
|
+
- `channels.bluebubbles.accounts`: Multi-account configuration.
|
|
394
|
+
|
|
395
|
+
Related global options:
|
|
396
|
+
|
|
397
|
+
- `agents.list[].groupChat.mentionPatterns` (or `messages.groupChat.mentionPatterns`).
|
|
398
|
+
- `messages.responsePrefix`.
|
|
399
|
+
|
|
400
|
+
## Addressing / delivery targets
|
|
401
|
+
|
|
402
|
+
Prefer `chat_guid` for stable routing:
|
|
403
|
+
|
|
404
|
+
- `chat_guid:iMessage;-;+15555550123` (preferred for groups)
|
|
405
|
+
- `chat_id:123`
|
|
406
|
+
- `chat_identifier:...`
|
|
407
|
+
- Direct handles: `+15555550123`, `user@example.com`
|
|
408
|
+
- If a direct handle does not have an existing DM chat, Durar will create one via `POST /api/v1/chat/new`. This requires the BlueBubbles Private API to be enabled.
|
|
409
|
+
|
|
410
|
+
## Security
|
|
411
|
+
|
|
412
|
+
- Webhook requests are authenticated by comparing `guid`/`password` query params or headers against `channels.bluebubbles.password`.
|
|
413
|
+
- Keep the API password and webhook endpoint secret (treat them like credentials).
|
|
414
|
+
- There is no localhost bypass for BlueBubbles webhook auth. If you proxy webhook traffic, keep the BlueBubbles password on the request end-to-end. `gateway.trustedProxies` does not replace `channels.bluebubbles.password` here. See [Gateway security](/gateway/security#reverse-proxy-configuration).
|
|
415
|
+
- Enable HTTPS + firewall rules on the BlueBubbles server if exposing it outside your LAN.
|
|
416
|
+
|
|
417
|
+
## Troubleshooting
|
|
418
|
+
|
|
419
|
+
- If typing/read events stop working, check the BlueBubbles webhook logs and verify the gateway path matches `channels.bluebubbles.webhookPath`.
|
|
420
|
+
- Pairing codes expire after one hour; use `Durar pairing list bluebubbles` and `Durar pairing approve bluebubbles <code>`.
|
|
421
|
+
- Reactions require the BlueBubbles private API (`POST /api/v1/message/react`); ensure the server version exposes it.
|
|
422
|
+
- Edit/unsend require macOS 13+ and a compatible BlueBubbles server version. On macOS 26 (Tahoe), edit is currently broken due to private API changes.
|
|
423
|
+
- Group icon updates can be flaky on macOS 26 (Tahoe): the API may return success but the new icon does not sync.
|
|
424
|
+
- Durar auto-hides known-broken actions based on the BlueBubbles server's macOS version. If edit still appears on macOS 26 (Tahoe), disable it manually with `channels.bluebubbles.actions.edit=false`.
|
|
425
|
+
- For status/health info: `Durar status --all` or `Durar status --deep`.
|
|
426
|
+
|
|
427
|
+
For general channel workflow reference, see [Channels](/channels) and the [Plugins](/tools/plugin) guide.
|
|
428
|
+
|
|
429
|
+
## Related
|
|
430
|
+
|
|
431
|
+
- [Channels Overview](/channels) — all supported channels
|
|
432
|
+
- [Pairing](/channels/pairing) — DM authentication and pairing flow
|
|
433
|
+
- [Groups](/channels/groups) — group chat behavior and mention gating
|
|
434
|
+
- [Channel Routing](/channels/channel-routing) — session routing for messages
|
|
435
|
+
- [Security](/gateway/security) — access model and hardening
|