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,319 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Building Plugins"
|
|
3
|
+
sidebarTitle: "Getting Started"
|
|
4
|
+
summary: "Create your first Durar plugin in minutes"
|
|
5
|
+
read_when:
|
|
6
|
+
- You want to create a new Durar plugin
|
|
7
|
+
- You need a quick-start for plugin development
|
|
8
|
+
- You are adding a new channel, provider, tool, or other capability to Durar
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Building Plugins
|
|
12
|
+
|
|
13
|
+
Plugins extend Durar with new capabilities: channels, model providers,
|
|
14
|
+
speech, realtime transcription, realtime voice, media understanding, image
|
|
15
|
+
generation, video generation, web fetch, web search, agent tools, or any
|
|
16
|
+
combination.
|
|
17
|
+
|
|
18
|
+
You do not need to add your plugin to the Durar repository. Publish to
|
|
19
|
+
[Durar Gateway](/tools/Durar Gateway) or npm and users install with
|
|
20
|
+
`Durar plugins install <package-name>`. Durar tries Durar Gateway first and
|
|
21
|
+
falls back to npm automatically.
|
|
22
|
+
|
|
23
|
+
## Prerequisites
|
|
24
|
+
|
|
25
|
+
- Node >= 22 and a package manager (npm or pnpm)
|
|
26
|
+
- Familiarity with TypeScript (ESM)
|
|
27
|
+
- For in-repo plugins: repository cloned and `pnpm install` done
|
|
28
|
+
|
|
29
|
+
## What kind of plugin?
|
|
30
|
+
|
|
31
|
+
<CardGroup cols={3}>
|
|
32
|
+
<Card title="Channel plugin" icon="messages-square" href="/plugins/sdk-channel-plugins">
|
|
33
|
+
Connect Durar to a messaging platform (Discord, IRC, etc.)
|
|
34
|
+
</Card>
|
|
35
|
+
<Card title="Provider plugin" icon="cpu" href="/plugins/sdk-provider-plugins">
|
|
36
|
+
Add a model provider (LLM, proxy, or custom endpoint)
|
|
37
|
+
</Card>
|
|
38
|
+
<Card title="Tool / hook plugin" icon="wrench">
|
|
39
|
+
Register agent tools, event hooks, or services — continue below
|
|
40
|
+
</Card>
|
|
41
|
+
</CardGroup>
|
|
42
|
+
|
|
43
|
+
If a channel plugin is optional and may not be installed when onboarding/setup
|
|
44
|
+
runs, use `createOptionalChannelSetupSurface(...)` from
|
|
45
|
+
`Durar/plugin-sdk/channel-setup`. It produces a setup adapter + wizard pair
|
|
46
|
+
that advertises the install requirement and fails closed on real config writes
|
|
47
|
+
until the plugin is installed.
|
|
48
|
+
|
|
49
|
+
## Quick start: tool plugin
|
|
50
|
+
|
|
51
|
+
This walkthrough creates a minimal plugin that registers an agent tool. Channel
|
|
52
|
+
and provider plugins have dedicated guides linked above.
|
|
53
|
+
|
|
54
|
+
<Steps>
|
|
55
|
+
<Step title="Create the package and manifest">
|
|
56
|
+
<CodeGroup>
|
|
57
|
+
```json package.json
|
|
58
|
+
{
|
|
59
|
+
"name": "@myorg/Durar-my-plugin",
|
|
60
|
+
"version": "1.0.0",
|
|
61
|
+
"type": "module",
|
|
62
|
+
"Durar": {
|
|
63
|
+
"extensions": ["./index.ts"],
|
|
64
|
+
"compat": {
|
|
65
|
+
"pluginApi": ">=2026.3.24-beta.2",
|
|
66
|
+
"minGatewayVersion": "2026.3.24-beta.2"
|
|
67
|
+
},
|
|
68
|
+
"build": {
|
|
69
|
+
"DurarVersion": "2026.3.24-beta.2",
|
|
70
|
+
"pluginSdkVersion": "2026.3.24-beta.2"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
```json Durar.plugin.json
|
|
77
|
+
{
|
|
78
|
+
"id": "my-plugin",
|
|
79
|
+
"name": "My Plugin",
|
|
80
|
+
"description": "Adds a custom tool to Durar",
|
|
81
|
+
"configSchema": {
|
|
82
|
+
"type": "object",
|
|
83
|
+
"additionalProperties": false
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
</CodeGroup>
|
|
88
|
+
|
|
89
|
+
Every plugin needs a manifest, even with no config. See
|
|
90
|
+
[Manifest](/plugins/manifest) for the full schema. The canonical Durar Gateway
|
|
91
|
+
publish snippets live in `docs/snippets/plugin-publish/`.
|
|
92
|
+
|
|
93
|
+
</Step>
|
|
94
|
+
|
|
95
|
+
<Step title="Write the entry point">
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// index.ts
|
|
99
|
+
import { definePluginEntry } from "Durar/plugin-sdk/plugin-entry";
|
|
100
|
+
import { Type } from "@sinclair/typebox";
|
|
101
|
+
|
|
102
|
+
export default definePluginEntry({
|
|
103
|
+
id: "my-plugin",
|
|
104
|
+
name: "My Plugin",
|
|
105
|
+
description: "Adds a custom tool to Durar",
|
|
106
|
+
register(api) {
|
|
107
|
+
api.registerTool({
|
|
108
|
+
name: "my_tool",
|
|
109
|
+
description: "Do a thing",
|
|
110
|
+
parameters: Type.Object({ input: Type.String() }),
|
|
111
|
+
async execute(_id, params) {
|
|
112
|
+
return { content: [{ type: "text", text: `Got: ${params.input}` }] };
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
},
|
|
116
|
+
});
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
`definePluginEntry` is for non-channel plugins. For channels, use
|
|
120
|
+
`defineChannelPluginEntry` — see [Channel Plugins](/plugins/sdk-channel-plugins).
|
|
121
|
+
For full entry point options, see [Entry Points](/plugins/sdk-entrypoints).
|
|
122
|
+
|
|
123
|
+
</Step>
|
|
124
|
+
|
|
125
|
+
<Step title="Test and publish">
|
|
126
|
+
|
|
127
|
+
**External plugins:** validate and publish with Durar Gateway, then install:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
Durar Gateway package publish your-org/your-plugin --dry-run
|
|
131
|
+
Durar Gateway package publish your-org/your-plugin
|
|
132
|
+
Durar plugins install Durar Gateway:@myorg/Durar-my-plugin
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
Durar also checks Durar Gateway before npm for bare package specs like
|
|
136
|
+
`@myorg/Durar-my-plugin`.
|
|
137
|
+
|
|
138
|
+
**In-repo plugins:** place under the bundled plugin workspace tree — automatically discovered.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
pnpm test -- <bundled-plugin-root>/my-plugin/
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
</Step>
|
|
145
|
+
</Steps>
|
|
146
|
+
|
|
147
|
+
## Plugin capabilities
|
|
148
|
+
|
|
149
|
+
A single plugin can register any number of capabilities via the `api` object:
|
|
150
|
+
|
|
151
|
+
| Capability | Registration method | Detailed guide |
|
|
152
|
+
| ---------------------- | ------------------------------------------------ | ------------------------------------------------------------------------------- |
|
|
153
|
+
| Text inference (LLM) | `api.registerProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins) |
|
|
154
|
+
| CLI inference backend | `api.registerCliBackend(...)` | [CLI Backends](/gateway/cli-backends) |
|
|
155
|
+
| Channel / messaging | `api.registerChannel(...)` | [Channel Plugins](/plugins/sdk-channel-plugins) |
|
|
156
|
+
| Speech (TTS/STT) | `api.registerSpeechProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
157
|
+
| Realtime transcription | `api.registerRealtimeTranscriptionProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
158
|
+
| Realtime voice | `api.registerRealtimeVoiceProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
159
|
+
| Media understanding | `api.registerMediaUnderstandingProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
160
|
+
| Image generation | `api.registerImageGenerationProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
161
|
+
| Video generation | `api.registerVideoGenerationProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
162
|
+
| Web fetch | `api.registerWebFetchProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
163
|
+
| Web search | `api.registerWebSearchProvider(...)` | [Provider Plugins](/plugins/sdk-provider-plugins#step-5-add-extra-capabilities) |
|
|
164
|
+
| Agent tools | `api.registerTool(...)` | Below |
|
|
165
|
+
| Custom commands | `api.registerCommand(...)` | [Entry Points](/plugins/sdk-entrypoints) |
|
|
166
|
+
| Event hooks | `api.registerHook(...)` | [Entry Points](/plugins/sdk-entrypoints) |
|
|
167
|
+
| HTTP routes | `api.registerHttpRoute(...)` | [Internals](/plugins/architecture#gateway-http-routes) |
|
|
168
|
+
| CLI subcommands | `api.registerCli(...)` | [Entry Points](/plugins/sdk-entrypoints) |
|
|
169
|
+
|
|
170
|
+
For the full registration API, see [SDK Overview](/plugins/sdk-overview#registration-api).
|
|
171
|
+
|
|
172
|
+
If your plugin registers custom gateway RPC methods, keep them on a
|
|
173
|
+
plugin-specific prefix. Core admin namespaces (`config.*`,
|
|
174
|
+
`exec.approvals.*`, `wizard.*`, `update.*`) stay reserved and always resolve to
|
|
175
|
+
`operator.admin`, even if a plugin asks for a narrower scope.
|
|
176
|
+
|
|
177
|
+
Hook guard semantics to keep in mind:
|
|
178
|
+
|
|
179
|
+
- `before_tool_call`: `{ block: true }` is terminal and stops lower-priority handlers.
|
|
180
|
+
- `before_tool_call`: `{ block: false }` is treated as no decision.
|
|
181
|
+
- `before_tool_call`: `{ requireApproval: true }` pauses agent execution and prompts the user for approval via the exec approval overlay, Telegram buttons, Discord interactions, or the `/approve` command on any channel.
|
|
182
|
+
- `before_install`: `{ block: true }` is terminal and stops lower-priority handlers.
|
|
183
|
+
- `before_install`: `{ block: false }` is treated as no decision.
|
|
184
|
+
- `message_sending`: `{ cancel: true }` is terminal and stops lower-priority handlers.
|
|
185
|
+
- `message_sending`: `{ cancel: false }` is treated as no decision.
|
|
186
|
+
|
|
187
|
+
The `/approve` command handles both exec and plugin approvals with bounded fallback: when an exec approval id is not found, Durar retries the same id through plugin approvals. Plugin approval forwarding can be configured independently via `approvals.plugin` in config.
|
|
188
|
+
|
|
189
|
+
If custom approval plumbing needs to detect that same bounded fallback case,
|
|
190
|
+
prefer `isApprovalNotFoundError` from `Durar/plugin-sdk/error-runtime`
|
|
191
|
+
instead of matching approval-expiry strings manually.
|
|
192
|
+
|
|
193
|
+
See [SDK Overview hook decision semantics](/plugins/sdk-overview#hook-decision-semantics) for details.
|
|
194
|
+
|
|
195
|
+
## Registering agent tools
|
|
196
|
+
|
|
197
|
+
Tools are typed functions the LLM can call. They can be required (always
|
|
198
|
+
available) or optional (user opt-in):
|
|
199
|
+
|
|
200
|
+
```typescript
|
|
201
|
+
register(api) {
|
|
202
|
+
// Required tool — always available
|
|
203
|
+
api.registerTool({
|
|
204
|
+
name: "my_tool",
|
|
205
|
+
description: "Do a thing",
|
|
206
|
+
parameters: Type.Object({ input: Type.String() }),
|
|
207
|
+
async execute(_id, params) {
|
|
208
|
+
return { content: [{ type: "text", text: params.input }] };
|
|
209
|
+
},
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
// Optional tool — user must add to allowlist
|
|
213
|
+
api.registerTool(
|
|
214
|
+
{
|
|
215
|
+
name: "workflow_tool",
|
|
216
|
+
description: "Run a workflow",
|
|
217
|
+
parameters: Type.Object({ pipeline: Type.String() }),
|
|
218
|
+
async execute(_id, params) {
|
|
219
|
+
return { content: [{ type: "text", text: params.pipeline }] };
|
|
220
|
+
},
|
|
221
|
+
},
|
|
222
|
+
{ optional: true },
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
Users enable optional tools in config:
|
|
228
|
+
|
|
229
|
+
```json5
|
|
230
|
+
{
|
|
231
|
+
tools: { allow: ["workflow_tool"] },
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
- Tool names must not clash with core tools (conflicts are skipped)
|
|
236
|
+
- Use `optional: true` for tools with side effects or extra binary requirements
|
|
237
|
+
- Users can enable all tools from a plugin by adding the plugin id to `tools.allow`
|
|
238
|
+
|
|
239
|
+
## Import conventions
|
|
240
|
+
|
|
241
|
+
Always import from focused `Durar/plugin-sdk/<subpath>` paths:
|
|
242
|
+
|
|
243
|
+
```typescript
|
|
244
|
+
import { definePluginEntry } from "Durar/plugin-sdk/plugin-entry";
|
|
245
|
+
import { createPluginRuntimeStore } from "Durar/plugin-sdk/runtime-store";
|
|
246
|
+
|
|
247
|
+
// Wrong: monolithic root (deprecated, will be removed)
|
|
248
|
+
import { ... } from "Durar/plugin-sdk";
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
For the full subpath reference, see [SDK Overview](/plugins/sdk-overview).
|
|
252
|
+
|
|
253
|
+
Within your plugin, use local barrel files (`api.ts`, `runtime-api.ts`) for
|
|
254
|
+
internal imports — never import your own plugin through its SDK path.
|
|
255
|
+
|
|
256
|
+
For provider plugins, keep provider-specific helpers in those package-root
|
|
257
|
+
barrels unless the seam is truly generic. Current bundled examples:
|
|
258
|
+
|
|
259
|
+
- Anthropic: Claude stream wrappers and `service_tier` / beta helpers
|
|
260
|
+
- OpenAI: provider builders, default-model helpers, realtime providers
|
|
261
|
+
- OpenRouter: provider builder plus onboarding/config helpers
|
|
262
|
+
|
|
263
|
+
If a helper is only useful inside one bundled provider package, keep it on that
|
|
264
|
+
package-root seam instead of promoting it into `Durar/plugin-sdk/*`.
|
|
265
|
+
|
|
266
|
+
Some generated `Durar/plugin-sdk/<bundled-id>` helper seams still exist for
|
|
267
|
+
bundled-plugin maintenance and compatibility, for example
|
|
268
|
+
`plugin-sdk/feishu-setup` or `plugin-sdk/zalo-setup`. Treat those as reserved
|
|
269
|
+
surfaces, not as the default pattern for new third-party plugins.
|
|
270
|
+
|
|
271
|
+
## Pre-submission checklist
|
|
272
|
+
|
|
273
|
+
<Check>**package.json** has correct `Durar` metadata</Check>
|
|
274
|
+
<Check>**Durar.plugin.json** manifest is present and valid</Check>
|
|
275
|
+
<Check>Entry point uses `defineChannelPluginEntry` or `definePluginEntry`</Check>
|
|
276
|
+
<Check>All imports use focused `plugin-sdk/<subpath>` paths</Check>
|
|
277
|
+
<Check>Internal imports use local modules, not SDK self-imports</Check>
|
|
278
|
+
<Check>Tests pass (`pnpm test -- <bundled-plugin-root>/my-plugin/`)</Check>
|
|
279
|
+
<Check>`pnpm check` passes (in-repo plugins)</Check>
|
|
280
|
+
|
|
281
|
+
## Beta Release Testing
|
|
282
|
+
|
|
283
|
+
1. Watch for GitHub release tags on [Durar/Durar](https://github.com/openclaw/openclaw/releases) and subscribe via `Watch` > `Releases`. Beta tags look like `v2026.3.N-beta.1`. You can also turn on notifications for the official Durar X account [@Durar](https://x.com/Durar) for release announcements.
|
|
284
|
+
2. Test your plugin against the beta tag as soon as it appears. The window before stable is typically only a few hours.
|
|
285
|
+
3. Post in your plugin's thread in the `plugin-forum` Discord channel after testing with either `all good` or what broke. If you do not have a thread yet, create one.
|
|
286
|
+
4. If something breaks, open or update an issue titled `Beta blocker: <plugin-name> - <summary>` and apply the `beta-blocker` label. Put the issue link in your thread.
|
|
287
|
+
5. Open a PR to `main` titled `fix(<plugin-id>): beta blocker - <summary>` and link the issue in both the PR and your Discord thread. Contributors cannot label PRs, so the title is the PR-side signal for maintainers and automation. Blockers with a PR get merged; blockers without one might ship anyway. Maintainers watch these threads during beta testing.
|
|
288
|
+
6. Silence means green. If you miss the window, your fix likely lands in the next cycle.
|
|
289
|
+
|
|
290
|
+
## Next steps
|
|
291
|
+
|
|
292
|
+
<CardGroup cols={2}>
|
|
293
|
+
<Card title="Channel Plugins" icon="messages-square" href="/plugins/sdk-channel-plugins">
|
|
294
|
+
Build a messaging channel plugin
|
|
295
|
+
</Card>
|
|
296
|
+
<Card title="Provider Plugins" icon="cpu" href="/plugins/sdk-provider-plugins">
|
|
297
|
+
Build a model provider plugin
|
|
298
|
+
</Card>
|
|
299
|
+
<Card title="SDK Overview" icon="book-open" href="/plugins/sdk-overview">
|
|
300
|
+
Import map and registration API reference
|
|
301
|
+
</Card>
|
|
302
|
+
<Card title="Runtime Helpers" icon="settings" href="/plugins/sdk-runtime">
|
|
303
|
+
TTS, search, subagent via api.runtime
|
|
304
|
+
</Card>
|
|
305
|
+
<Card title="Testing" icon="test-tubes" href="/plugins/sdk-testing">
|
|
306
|
+
Test utilities and patterns
|
|
307
|
+
</Card>
|
|
308
|
+
<Card title="Plugin Manifest" icon="file-json" href="/plugins/manifest">
|
|
309
|
+
Full manifest schema reference
|
|
310
|
+
</Card>
|
|
311
|
+
</CardGroup>
|
|
312
|
+
|
|
313
|
+
## Related
|
|
314
|
+
|
|
315
|
+
- [Plugin Architecture](/plugins/architecture) — internal architecture deep dive
|
|
316
|
+
- [SDK Overview](/plugins/sdk-overview) — Plugin SDK reference
|
|
317
|
+
- [Manifest](/plugins/manifest) — plugin manifest format
|
|
318
|
+
- [Channel Plugins](/plugins/sdk-channel-plugins) — building channel plugins
|
|
319
|
+
- [Provider Plugins](/plugins/sdk-provider-plugins) — building provider plugins
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Install and use Codex, Claude, and Cursor bundles as Durar plugins"
|
|
3
|
+
read_when:
|
|
4
|
+
- You want to install a Codex, Claude, or Cursor-compatible bundle
|
|
5
|
+
- You need to understand how Durar maps bundle content into native features
|
|
6
|
+
- You are debugging bundle detection or missing capabilities
|
|
7
|
+
title: "Plugin Bundles"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Plugin Bundles
|
|
11
|
+
|
|
12
|
+
Durar can install plugins from three external ecosystems: **Codex**, **Claude**,
|
|
13
|
+
and **Cursor**. These are called **bundles** — content and metadata packs that
|
|
14
|
+
Durar maps into native features like skills, hooks, and MCP tools.
|
|
15
|
+
|
|
16
|
+
<Info>
|
|
17
|
+
Bundles are **not** the same as native Durar plugins. Native plugins run
|
|
18
|
+
in-process and can register any capability. Bundles are content packs with
|
|
19
|
+
selective feature mapping and a narrower trust boundary.
|
|
20
|
+
</Info>
|
|
21
|
+
|
|
22
|
+
## Why bundles exist
|
|
23
|
+
|
|
24
|
+
Many useful plugins are published in Codex, Claude, or Cursor format. Instead
|
|
25
|
+
of requiring authors to rewrite them as native Durar plugins, Durar
|
|
26
|
+
detects these formats and maps their supported content into the native feature
|
|
27
|
+
set. This means you can install a Claude command pack or a Codex skill bundle
|
|
28
|
+
and use it immediately.
|
|
29
|
+
|
|
30
|
+
## Install a bundle
|
|
31
|
+
|
|
32
|
+
<Steps>
|
|
33
|
+
<Step title="Install from a directory, archive, or marketplace">
|
|
34
|
+
```bash
|
|
35
|
+
# Local directory
|
|
36
|
+
Durar plugins install ./my-bundle
|
|
37
|
+
|
|
38
|
+
# Archive
|
|
39
|
+
Durar plugins install ./my-bundle.tgz
|
|
40
|
+
|
|
41
|
+
# Claude marketplace
|
|
42
|
+
Durar plugins marketplace list <marketplace-name>
|
|
43
|
+
Durar plugins install <plugin-name>@<marketplace-name>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
</Step>
|
|
47
|
+
|
|
48
|
+
<Step title="Verify detection">
|
|
49
|
+
```bash
|
|
50
|
+
Durar plugins list
|
|
51
|
+
Durar plugins inspect <id>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Bundles show as `Format: bundle` with a subtype of `codex`, `claude`, or `cursor`.
|
|
55
|
+
|
|
56
|
+
</Step>
|
|
57
|
+
|
|
58
|
+
<Step title="Restart and use">
|
|
59
|
+
```bash
|
|
60
|
+
Durar gateway restart
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Mapped features (skills, hooks, MCP tools, LSP defaults) are available in the next session.
|
|
64
|
+
|
|
65
|
+
</Step>
|
|
66
|
+
</Steps>
|
|
67
|
+
|
|
68
|
+
## What Durar maps from bundles
|
|
69
|
+
|
|
70
|
+
Not every bundle feature runs in Durar today. Here is what works and what
|
|
71
|
+
is detected but not yet wired.
|
|
72
|
+
|
|
73
|
+
### Supported now
|
|
74
|
+
|
|
75
|
+
| Feature | How it maps | Applies to |
|
|
76
|
+
| ------------- | ------------------------------------------------------------------------------------------- | -------------- |
|
|
77
|
+
| Skill content | Bundle skill roots load as normal Durar skills | All formats |
|
|
78
|
+
| Commands | `commands/` and `.cursor/commands/` treated as skill roots | Claude, Cursor |
|
|
79
|
+
| Hook packs | Durar-style `HOOK.md` + `handler.ts` layouts | Codex |
|
|
80
|
+
| MCP tools | Bundle MCP config merged into embedded Pi settings; supported stdio and HTTP servers loaded | All formats |
|
|
81
|
+
| LSP servers | Claude `.lsp.json` and manifest-declared `lspServers` merged into embedded Pi LSP defaults | Claude |
|
|
82
|
+
| Settings | Claude `settings.json` imported as embedded Pi defaults | Claude |
|
|
83
|
+
|
|
84
|
+
#### Skill content
|
|
85
|
+
|
|
86
|
+
- bundle skill roots load as normal Durar skill roots
|
|
87
|
+
- Claude `commands` roots are treated as additional skill roots
|
|
88
|
+
- Cursor `.cursor/commands` roots are treated as additional skill roots
|
|
89
|
+
|
|
90
|
+
This means Claude markdown command files work through the normal Durar skill
|
|
91
|
+
loader. Cursor command markdown works through the same path.
|
|
92
|
+
|
|
93
|
+
#### Hook packs
|
|
94
|
+
|
|
95
|
+
- bundle hook roots work **only** when they use the normal Durar hook-pack
|
|
96
|
+
layout. Today this is primarily the Codex-compatible case:
|
|
97
|
+
- `HOOK.md`
|
|
98
|
+
- `handler.ts` or `handler.js`
|
|
99
|
+
|
|
100
|
+
#### MCP for Pi
|
|
101
|
+
|
|
102
|
+
- enabled bundles can contribute MCP server config
|
|
103
|
+
- Durar merges bundle MCP config into the effective embedded Pi settings as
|
|
104
|
+
`mcpServers`
|
|
105
|
+
- Durar exposes supported bundle MCP tools during embedded Pi agent turns by
|
|
106
|
+
launching stdio servers or connecting to HTTP servers
|
|
107
|
+
- project-local Pi settings still apply after bundle defaults, so workspace
|
|
108
|
+
settings can override bundle MCP entries when needed
|
|
109
|
+
- bundle MCP tool catalogs are sorted deterministically before registration, so
|
|
110
|
+
upstream `listTools()` order changes do not thrash prompt-cache tool blocks
|
|
111
|
+
|
|
112
|
+
##### Transports
|
|
113
|
+
|
|
114
|
+
MCP servers can use stdio or HTTP transport:
|
|
115
|
+
|
|
116
|
+
**Stdio** launches a child process:
|
|
117
|
+
|
|
118
|
+
```json
|
|
119
|
+
{
|
|
120
|
+
"mcp": {
|
|
121
|
+
"servers": {
|
|
122
|
+
"my-server": {
|
|
123
|
+
"command": "node",
|
|
124
|
+
"args": ["server.js"],
|
|
125
|
+
"env": { "PORT": "3000" }
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
**HTTP** connects to a running MCP server over `sse` by default, or `streamable-http` when requested:
|
|
133
|
+
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"mcp": {
|
|
137
|
+
"servers": {
|
|
138
|
+
"my-server": {
|
|
139
|
+
"url": "http://localhost:3100/mcp",
|
|
140
|
+
"transport": "streamable-http",
|
|
141
|
+
"headers": {
|
|
142
|
+
"Authorization": "Bearer ${MY_SECRET_TOKEN}"
|
|
143
|
+
},
|
|
144
|
+
"connectionTimeoutMs": 30000
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
- `transport` may be set to `"streamable-http"` or `"sse"`; when omitted, Durar uses `sse`
|
|
152
|
+
- only `http:` and `https:` URL schemes are allowed
|
|
153
|
+
- `headers` values support `${ENV_VAR}` interpolation
|
|
154
|
+
- a server entry with both `command` and `url` is rejected
|
|
155
|
+
- URL credentials (userinfo and query params) are redacted from tool
|
|
156
|
+
descriptions and logs
|
|
157
|
+
- `connectionTimeoutMs` overrides the default 30-second connection timeout for
|
|
158
|
+
both stdio and HTTP transports
|
|
159
|
+
|
|
160
|
+
##### Tool naming
|
|
161
|
+
|
|
162
|
+
Durar registers bundle MCP tools with provider-safe names in the form
|
|
163
|
+
`serverName__toolName`. For example, a server keyed `"vigil-harbor"` exposing a
|
|
164
|
+
`memory_search` tool registers as `vigil-harbor__memory_search`.
|
|
165
|
+
|
|
166
|
+
- characters outside `A-Za-z0-9_-` are replaced with `-`
|
|
167
|
+
- server prefixes are capped at 30 characters
|
|
168
|
+
- full tool names are capped at 64 characters
|
|
169
|
+
- empty server names fall back to `mcp`
|
|
170
|
+
- colliding sanitized names are disambiguated with numeric suffixes
|
|
171
|
+
- final exposed tool order is deterministic by safe name to keep repeated Pi
|
|
172
|
+
turns cache-stable
|
|
173
|
+
|
|
174
|
+
#### Embedded Pi settings
|
|
175
|
+
|
|
176
|
+
- Claude `settings.json` is imported as default embedded Pi settings when the
|
|
177
|
+
bundle is enabled
|
|
178
|
+
- Durar sanitizes shell override keys before applying them
|
|
179
|
+
|
|
180
|
+
Sanitized keys:
|
|
181
|
+
|
|
182
|
+
- `shellPath`
|
|
183
|
+
- `shellCommandPrefix`
|
|
184
|
+
|
|
185
|
+
#### Embedded Pi LSP
|
|
186
|
+
|
|
187
|
+
- enabled Claude bundles can contribute LSP server config
|
|
188
|
+
- Durar loads `.lsp.json` plus any manifest-declared `lspServers` paths
|
|
189
|
+
- bundle LSP config is merged into the effective embedded Pi LSP defaults
|
|
190
|
+
- only supported stdio-backed LSP servers are runnable today; unsupported
|
|
191
|
+
transports still show up in `Durar plugins inspect <id>`
|
|
192
|
+
|
|
193
|
+
### Detected but not executed
|
|
194
|
+
|
|
195
|
+
These are recognized and shown in diagnostics, but Durar does not run them:
|
|
196
|
+
|
|
197
|
+
- Claude `agents`, `hooks.json` automation, `outputStyles`
|
|
198
|
+
- Cursor `.cursor/agents`, `.cursor/hooks.json`, `.cursor/rules`
|
|
199
|
+
- Codex inline/app metadata beyond capability reporting
|
|
200
|
+
|
|
201
|
+
## Bundle formats
|
|
202
|
+
|
|
203
|
+
<AccordionGroup>
|
|
204
|
+
<Accordion title="Codex bundles">
|
|
205
|
+
Markers: `.codex-plugin/plugin.json`
|
|
206
|
+
|
|
207
|
+
Optional content: `skills/`, `hooks/`, `.mcp.json`, `.app.json`
|
|
208
|
+
|
|
209
|
+
Codex bundles fit Durar best when they use skill roots and Durar-style
|
|
210
|
+
hook-pack directories (`HOOK.md` + `handler.ts`).
|
|
211
|
+
|
|
212
|
+
</Accordion>
|
|
213
|
+
|
|
214
|
+
<Accordion title="Claude bundles">
|
|
215
|
+
Two detection modes:
|
|
216
|
+
|
|
217
|
+
- **Manifest-based:** `.claude-plugin/plugin.json`
|
|
218
|
+
- **Manifestless:** default Claude layout (`skills/`, `commands/`, `agents/`, `hooks/`, `.mcp.json`, `.lsp.json`, `settings.json`)
|
|
219
|
+
|
|
220
|
+
Claude-specific behavior:
|
|
221
|
+
|
|
222
|
+
- `commands/` is treated as skill content
|
|
223
|
+
- `settings.json` is imported into embedded Pi settings (shell override keys are sanitized)
|
|
224
|
+
- `.mcp.json` exposes supported stdio tools to embedded Pi
|
|
225
|
+
- `.lsp.json` plus manifest-declared `lspServers` paths load into embedded Pi LSP defaults
|
|
226
|
+
- `hooks/hooks.json` is detected but not executed
|
|
227
|
+
- Custom component paths in the manifest are additive (they extend defaults, not replace them)
|
|
228
|
+
|
|
229
|
+
</Accordion>
|
|
230
|
+
|
|
231
|
+
<Accordion title="Cursor bundles">
|
|
232
|
+
Markers: `.cursor-plugin/plugin.json`
|
|
233
|
+
|
|
234
|
+
Optional content: `skills/`, `.cursor/commands/`, `.cursor/agents/`, `.cursor/rules/`, `.cursor/hooks.json`, `.mcp.json`
|
|
235
|
+
|
|
236
|
+
- `.cursor/commands/` is treated as skill content
|
|
237
|
+
- `.cursor/rules/`, `.cursor/agents/`, and `.cursor/hooks.json` are detect-only
|
|
238
|
+
|
|
239
|
+
</Accordion>
|
|
240
|
+
</AccordionGroup>
|
|
241
|
+
|
|
242
|
+
## Detection precedence
|
|
243
|
+
|
|
244
|
+
Durar checks for native plugin format first:
|
|
245
|
+
|
|
246
|
+
1. `Durar.plugin.json` or valid `package.json` with `Durar.extensions` — treated as **native plugin**
|
|
247
|
+
2. Bundle markers (`.codex-plugin/`, `.claude-plugin/`, or default Claude/Cursor layout) — treated as **bundle**
|
|
248
|
+
|
|
249
|
+
If a directory contains both, Durar uses the native path. This prevents
|
|
250
|
+
dual-format packages from being partially installed as bundles.
|
|
251
|
+
|
|
252
|
+
## Security
|
|
253
|
+
|
|
254
|
+
Bundles have a narrower trust boundary than native plugins:
|
|
255
|
+
|
|
256
|
+
- Durar does **not** load arbitrary bundle runtime modules in-process
|
|
257
|
+
- Skills and hook-pack paths must stay inside the plugin root (boundary-checked)
|
|
258
|
+
- Settings files are read with the same boundary checks
|
|
259
|
+
- Supported stdio MCP servers may be launched as subprocesses
|
|
260
|
+
|
|
261
|
+
This makes bundles safer by default, but you should still treat third-party
|
|
262
|
+
bundles as trusted content for the features they do expose.
|
|
263
|
+
|
|
264
|
+
## Troubleshooting
|
|
265
|
+
|
|
266
|
+
<AccordionGroup>
|
|
267
|
+
<Accordion title="Bundle is detected but capabilities do not run">
|
|
268
|
+
Run `Durar plugins inspect <id>`. If a capability is listed but marked as
|
|
269
|
+
not wired, that is a product limit — not a broken install.
|
|
270
|
+
</Accordion>
|
|
271
|
+
|
|
272
|
+
<Accordion title="Claude command files do not appear">
|
|
273
|
+
Make sure the bundle is enabled and the markdown files are inside a detected
|
|
274
|
+
`commands/` or `skills/` root.
|
|
275
|
+
</Accordion>
|
|
276
|
+
|
|
277
|
+
<Accordion title="Claude settings do not apply">
|
|
278
|
+
Only embedded Pi settings from `settings.json` are supported. Durar does
|
|
279
|
+
not treat bundle settings as raw config patches.
|
|
280
|
+
</Accordion>
|
|
281
|
+
|
|
282
|
+
<Accordion title="Claude hooks do not execute">
|
|
283
|
+
`hooks/hooks.json` is detect-only. If you need runnable hooks, use the
|
|
284
|
+
Durar hook-pack layout or ship a native plugin.
|
|
285
|
+
</Accordion>
|
|
286
|
+
</AccordionGroup>
|
|
287
|
+
|
|
288
|
+
## Related
|
|
289
|
+
|
|
290
|
+
- [Install and Configure Plugins](/tools/plugin)
|
|
291
|
+
- [Building Plugins](/plugins/building-plugins) — create a native plugin
|
|
292
|
+
- [Plugin Manifest](/plugins/manifest) — native manifest schema
|