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,111 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
const WINDOWS_UNSAFE_CMD_CHARS_RE = /[&|<>%\r\n]/;
|
|
5
|
+
|
|
6
|
+
function resolvePathEnvKey(env) {
|
|
7
|
+
return Object.keys(env).find((key) => key.toLowerCase() === "path") ?? "PATH";
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
function escapeForCmdExe(arg) {
|
|
11
|
+
if (WINDOWS_UNSAFE_CMD_CHARS_RE.test(arg)) {
|
|
12
|
+
throw new Error(`unsafe Windows cmd.exe argument detected: ${JSON.stringify(arg)}`);
|
|
13
|
+
}
|
|
14
|
+
const escaped = arg.replace(/\^/g, "^^");
|
|
15
|
+
if (!escaped.includes(" ") && !escaped.includes('"')) {
|
|
16
|
+
return escaped;
|
|
17
|
+
}
|
|
18
|
+
return `"${escaped.replace(/"/g, '""')}"`;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function buildCmdExeCommandLine(command, args) {
|
|
22
|
+
return [escapeForCmdExe(command), ...args.map(escapeForCmdExe)].join(" ");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function resolveToolchainNpmRunner(params) {
|
|
26
|
+
const npmCliCandidates = [
|
|
27
|
+
params.pathImpl.resolve(params.nodeDir, "../lib/node_modules/npm/bin/npm-cli.js"),
|
|
28
|
+
params.pathImpl.resolve(params.nodeDir, "node_modules/npm/bin/npm-cli.js"),
|
|
29
|
+
];
|
|
30
|
+
const npmCliPath = npmCliCandidates.find((candidate) => params.existsSync(candidate));
|
|
31
|
+
if (npmCliPath) {
|
|
32
|
+
return {
|
|
33
|
+
command:
|
|
34
|
+
params.platform === "win32"
|
|
35
|
+
? params.pathImpl.join(params.nodeDir, "node.exe")
|
|
36
|
+
: params.pathImpl.join(params.nodeDir, "node"),
|
|
37
|
+
args: [npmCliPath, ...params.npmArgs],
|
|
38
|
+
shell: false,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
if (params.platform !== "win32") {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const npmExePath = params.pathImpl.resolve(params.nodeDir, "npm.exe");
|
|
45
|
+
if (params.existsSync(npmExePath)) {
|
|
46
|
+
return {
|
|
47
|
+
command: npmExePath,
|
|
48
|
+
args: params.npmArgs,
|
|
49
|
+
shell: false,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
const npmCmdPath = params.pathImpl.resolve(params.nodeDir, "npm.cmd");
|
|
53
|
+
if (params.existsSync(npmCmdPath)) {
|
|
54
|
+
return {
|
|
55
|
+
command: params.comSpec,
|
|
56
|
+
args: ["/d", "/s", "/c", buildCmdExeCommandLine(npmCmdPath, params.npmArgs)],
|
|
57
|
+
shell: false,
|
|
58
|
+
windowsVerbatimArguments: true,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export function resolveNpmRunner(params = {}) {
|
|
65
|
+
const execPath = params.execPath ?? process.execPath;
|
|
66
|
+
const npmArgs = params.npmArgs ?? [];
|
|
67
|
+
const existsSync = params.existsSync ?? fs.existsSync;
|
|
68
|
+
const env = params.env ?? process.env;
|
|
69
|
+
const platform = params.platform ?? process.platform;
|
|
70
|
+
const comSpec = params.comSpec ?? env.ComSpec ?? "cmd.exe";
|
|
71
|
+
const pathImpl = platform === "win32" ? path.win32 : path.posix;
|
|
72
|
+
const nodeDir = pathImpl.dirname(execPath);
|
|
73
|
+
const npmToolchain = resolveToolchainNpmRunner({
|
|
74
|
+
comSpec,
|
|
75
|
+
existsSync,
|
|
76
|
+
nodeDir,
|
|
77
|
+
npmArgs,
|
|
78
|
+
pathImpl,
|
|
79
|
+
platform,
|
|
80
|
+
});
|
|
81
|
+
if (npmToolchain) {
|
|
82
|
+
return npmToolchain;
|
|
83
|
+
}
|
|
84
|
+
if (platform === "win32") {
|
|
85
|
+
const expectedPaths = [
|
|
86
|
+
pathImpl.resolve(nodeDir, "../lib/node_modules/npm/bin/npm-cli.js"),
|
|
87
|
+
pathImpl.resolve(nodeDir, "node_modules/npm/bin/npm-cli.js"),
|
|
88
|
+
pathImpl.resolve(nodeDir, "npm.exe"),
|
|
89
|
+
pathImpl.resolve(nodeDir, "npm.cmd"),
|
|
90
|
+
];
|
|
91
|
+
throw new Error(
|
|
92
|
+
`failed to resolve a toolchain-local npm next to ${execPath}. ` +
|
|
93
|
+
`Checked: ${expectedPaths.join(", ")}. ` +
|
|
94
|
+
"OpenClaw refuses to shell out to bare npm on Windows; install a Node.js toolchain that bundles npm or run with a matching Node installation.",
|
|
95
|
+
);
|
|
96
|
+
}
|
|
97
|
+
const pathKey = resolvePathEnvKey(env);
|
|
98
|
+
const currentPath = env[pathKey];
|
|
99
|
+
return {
|
|
100
|
+
command: "npm",
|
|
101
|
+
args: npmArgs,
|
|
102
|
+
shell: false,
|
|
103
|
+
env: {
|
|
104
|
+
...env,
|
|
105
|
+
[pathKey]:
|
|
106
|
+
typeof currentPath === "string" && currentPath.length > 0
|
|
107
|
+
? `${nodeDir}${path.delimiter}${currentPath}`
|
|
108
|
+
: nodeDir,
|
|
109
|
+
},
|
|
110
|
+
};
|
|
111
|
+
}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Runs after install to restore bundled extension runtime deps.
|
|
3
|
+
// Installed builds can lazy-load bundled plugin code through root dist chunks,
|
|
4
|
+
// so runtime dependencies declared in dist/extensions/*/package.json must also
|
|
5
|
+
// resolve from the package root node_modules. Skip source checkouts.
|
|
6
|
+
import { spawnSync } from "node:child_process";
|
|
7
|
+
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
|
8
|
+
import { dirname, join } from "node:path";
|
|
9
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
10
|
+
import { resolveNpmRunner } from "./npm-runner.mjs";
|
|
11
|
+
|
|
12
|
+
export const BUNDLED_PLUGIN_INSTALL_TARGETS = [];
|
|
13
|
+
|
|
14
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
15
|
+
const DEFAULT_EXTENSIONS_DIR = join(__dirname, "..", "dist", "extensions");
|
|
16
|
+
const DEFAULT_PACKAGE_ROOT = join(__dirname, "..");
|
|
17
|
+
const DISABLE_POSTINSTALL_ENV = "OPENCLAW_DISABLE_BUNDLED_PLUGIN_POSTINSTALL";
|
|
18
|
+
|
|
19
|
+
function readJson(filePath) {
|
|
20
|
+
return JSON.parse(readFileSync(filePath, "utf8"));
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function dependencySentinelPath(depName) {
|
|
24
|
+
return join("node_modules", ...depName.split("/"), "package.json");
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function collectRuntimeDeps(packageJson) {
|
|
28
|
+
return {
|
|
29
|
+
...packageJson.dependencies,
|
|
30
|
+
...packageJson.optionalDependencies,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function discoverBundledPluginRuntimeDeps(params = {}) {
|
|
35
|
+
const extensionsDir = params.extensionsDir ?? DEFAULT_EXTENSIONS_DIR;
|
|
36
|
+
const pathExists = params.existsSync ?? existsSync;
|
|
37
|
+
const readDir = params.readdirSync ?? readdirSync;
|
|
38
|
+
const readJsonFile = params.readJson ?? readJson;
|
|
39
|
+
const deps = new Map(
|
|
40
|
+
BUNDLED_PLUGIN_INSTALL_TARGETS.map((target) => [
|
|
41
|
+
target.name,
|
|
42
|
+
{
|
|
43
|
+
name: target.name,
|
|
44
|
+
version: target.version,
|
|
45
|
+
sentinelPath: dependencySentinelPath(target.name),
|
|
46
|
+
pluginIds: [...(target.pluginIds ?? [])],
|
|
47
|
+
},
|
|
48
|
+
]),
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
if (!pathExists(extensionsDir)) {
|
|
52
|
+
return [...deps.values()].toSorted((a, b) => a.name.localeCompare(b.name));
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
for (const entry of readDir(extensionsDir, { withFileTypes: true })) {
|
|
56
|
+
if (!entry.isDirectory()) {
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
const pluginId = entry.name;
|
|
60
|
+
const packageJsonPath = join(extensionsDir, pluginId, "package.json");
|
|
61
|
+
if (!pathExists(packageJsonPath)) {
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
try {
|
|
65
|
+
const packageJson = readJsonFile(packageJsonPath);
|
|
66
|
+
for (const [name, version] of Object.entries(collectRuntimeDeps(packageJson))) {
|
|
67
|
+
const existing = deps.get(name);
|
|
68
|
+
if (existing) {
|
|
69
|
+
if (existing.version !== version) {
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (!existing.pluginIds.includes(pluginId)) {
|
|
73
|
+
existing.pluginIds.push(pluginId);
|
|
74
|
+
}
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
deps.set(name, {
|
|
78
|
+
name,
|
|
79
|
+
version,
|
|
80
|
+
sentinelPath: dependencySentinelPath(name),
|
|
81
|
+
pluginIds: [pluginId],
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
} catch {
|
|
85
|
+
// Ignore malformed plugin manifests; runtime will surface those separately.
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return [...deps.values()]
|
|
90
|
+
.map((dep) => ({
|
|
91
|
+
...dep,
|
|
92
|
+
pluginIds: [...dep.pluginIds].toSorted((a, b) => a.localeCompare(b)),
|
|
93
|
+
}))
|
|
94
|
+
.toSorted((a, b) => a.name.localeCompare(b.name));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
export function createNestedNpmInstallEnv(env = process.env) {
|
|
98
|
+
const nextEnv = { ...env };
|
|
99
|
+
delete nextEnv.npm_config_global;
|
|
100
|
+
delete nextEnv.npm_config_location;
|
|
101
|
+
delete nextEnv.npm_config_prefix;
|
|
102
|
+
return nextEnv;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function isSourceCheckoutRoot(params) {
|
|
106
|
+
const pathExists = params.existsSync ?? existsSync;
|
|
107
|
+
return (
|
|
108
|
+
pathExists(join(params.packageRoot, ".git")) &&
|
|
109
|
+
pathExists(join(params.packageRoot, "src")) &&
|
|
110
|
+
pathExists(join(params.packageRoot, "extensions"))
|
|
111
|
+
);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
function shouldRunBundledPluginPostinstall(params) {
|
|
115
|
+
if (params.env?.[DISABLE_POSTINSTALL_ENV]?.trim()) {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
if (!params.existsSync(params.extensionsDir)) {
|
|
119
|
+
return false;
|
|
120
|
+
}
|
|
121
|
+
if (isSourceCheckoutRoot({ packageRoot: params.packageRoot, existsSync: params.existsSync })) {
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
return true;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export function runBundledPluginPostinstall(params = {}) {
|
|
128
|
+
const env = params.env ?? process.env;
|
|
129
|
+
const extensionsDir = params.extensionsDir ?? DEFAULT_EXTENSIONS_DIR;
|
|
130
|
+
const packageRoot = params.packageRoot ?? DEFAULT_PACKAGE_ROOT;
|
|
131
|
+
const spawn = params.spawnSync ?? spawnSync;
|
|
132
|
+
const pathExists = params.existsSync ?? existsSync;
|
|
133
|
+
const log = params.log ?? console;
|
|
134
|
+
if (
|
|
135
|
+
!shouldRunBundledPluginPostinstall({
|
|
136
|
+
env,
|
|
137
|
+
extensionsDir,
|
|
138
|
+
packageRoot,
|
|
139
|
+
existsSync: pathExists,
|
|
140
|
+
})
|
|
141
|
+
) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
144
|
+
const runtimeDeps =
|
|
145
|
+
params.runtimeDeps ??
|
|
146
|
+
discoverBundledPluginRuntimeDeps({ extensionsDir, existsSync: pathExists });
|
|
147
|
+
const missingSpecs = runtimeDeps
|
|
148
|
+
.filter((dep) => !pathExists(join(packageRoot, dep.sentinelPath)))
|
|
149
|
+
.map((dep) => `${dep.name}@${dep.version}`);
|
|
150
|
+
|
|
151
|
+
if (missingSpecs.length === 0) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
try {
|
|
156
|
+
const nestedEnv = createNestedNpmInstallEnv(env);
|
|
157
|
+
const npmRunner =
|
|
158
|
+
params.npmRunner ??
|
|
159
|
+
resolveNpmRunner({
|
|
160
|
+
env: nestedEnv,
|
|
161
|
+
execPath: params.execPath,
|
|
162
|
+
existsSync: pathExists,
|
|
163
|
+
platform: params.platform,
|
|
164
|
+
comSpec: params.comSpec,
|
|
165
|
+
npmArgs: ["install", "--omit=dev", "--no-save", "--package-lock=false", ...missingSpecs],
|
|
166
|
+
});
|
|
167
|
+
const result = spawn(npmRunner.command, npmRunner.args, {
|
|
168
|
+
cwd: packageRoot,
|
|
169
|
+
encoding: "utf8",
|
|
170
|
+
env: npmRunner.env ?? nestedEnv,
|
|
171
|
+
stdio: "pipe",
|
|
172
|
+
shell: npmRunner.shell,
|
|
173
|
+
windowsVerbatimArguments: npmRunner.windowsVerbatimArguments,
|
|
174
|
+
});
|
|
175
|
+
if (result.status !== 0) {
|
|
176
|
+
const output = [result.stderr, result.stdout].filter(Boolean).join("\n").trim();
|
|
177
|
+
throw new Error(output || "npm install failed");
|
|
178
|
+
}
|
|
179
|
+
log.log(`[postinstall] installed bundled plugin deps: ${missingSpecs.join(", ")}`);
|
|
180
|
+
} catch (e) {
|
|
181
|
+
// Non-fatal: gateway will surface the missing dep via doctor.
|
|
182
|
+
log.warn(`[postinstall] could not install bundled plugin deps: ${String(e)}`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (import.meta.url === pathToFileURL(process.argv[1] ?? "").href) {
|
|
187
|
+
runBundledPluginPostinstall();
|
|
188
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: 1password
|
|
3
|
+
description: Set up and use 1Password CLI (op). Use when installing the CLI, enabling desktop app integration, signing in (single or multi-account), or reading/injecting/running secrets via op.
|
|
4
|
+
homepage: https://developer.1password.com/docs/cli/get-started/
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"openclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "🔐",
|
|
10
|
+
"requires": { "bins": ["op"] },
|
|
11
|
+
"install":
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
"id": "brew",
|
|
15
|
+
"kind": "brew",
|
|
16
|
+
"formula": "1password-cli",
|
|
17
|
+
"bins": ["op"],
|
|
18
|
+
"label": "Install 1Password CLI (brew)",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# 1Password CLI
|
|
26
|
+
|
|
27
|
+
Follow the official CLI get-started steps. Don't guess install commands.
|
|
28
|
+
|
|
29
|
+
## References
|
|
30
|
+
|
|
31
|
+
- `references/get-started.md` (install + app integration + sign-in flow)
|
|
32
|
+
- `references/cli-examples.md` (real `op` examples)
|
|
33
|
+
|
|
34
|
+
## Workflow
|
|
35
|
+
|
|
36
|
+
1. Check OS + shell.
|
|
37
|
+
2. Verify CLI present: `op --version`.
|
|
38
|
+
3. Confirm desktop app integration is enabled (per get-started) and the app is unlocked.
|
|
39
|
+
4. REQUIRED: create a fresh tmux session for all `op` commands (no direct `op` calls outside tmux).
|
|
40
|
+
5. Sign in / authorize inside tmux: `op signin` (expect app prompt).
|
|
41
|
+
6. Verify access inside tmux: `op whoami` (must succeed before any secret read).
|
|
42
|
+
7. If multiple accounts: use `--account` or `OP_ACCOUNT`.
|
|
43
|
+
|
|
44
|
+
## REQUIRED tmux session (T-Max)
|
|
45
|
+
|
|
46
|
+
The shell tool uses a fresh TTY per command. To avoid re-prompts and failures, always run `op` inside a dedicated tmux session with a fresh socket/session name.
|
|
47
|
+
|
|
48
|
+
Example (see `tmux` skill for socket conventions, do not reuse old session names):
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
SOCKET_DIR="${OPENCLAW_TMUX_SOCKET_DIR:-${TMPDIR:-/tmp}/openclaw-tmux-sockets}"
|
|
52
|
+
mkdir -p "$SOCKET_DIR"
|
|
53
|
+
SOCKET="$SOCKET_DIR/openclaw-op.sock"
|
|
54
|
+
SESSION="op-auth-$(date +%Y%m%d-%H%M%S)"
|
|
55
|
+
|
|
56
|
+
tmux -S "$SOCKET" new -d -s "$SESSION" -n shell
|
|
57
|
+
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op signin --account my.1password.com" Enter
|
|
58
|
+
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op whoami" Enter
|
|
59
|
+
tmux -S "$SOCKET" send-keys -t "$SESSION":0.0 -- "op vault list" Enter
|
|
60
|
+
tmux -S "$SOCKET" capture-pane -p -J -t "$SESSION":0.0 -S -200
|
|
61
|
+
tmux -S "$SOCKET" kill-session -t "$SESSION"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Guardrails
|
|
65
|
+
|
|
66
|
+
- Never paste secrets into logs, chat, or code.
|
|
67
|
+
- Prefer `op run` / `op inject` over writing secrets to disk.
|
|
68
|
+
- If sign-in without app integration is needed, use `op account add`.
|
|
69
|
+
- If a command returns "account is not signed in", re-run `op signin` inside tmux and authorize in the app.
|
|
70
|
+
- Do not run `op` outside tmux; stop and ask if tmux is unavailable.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# op CLI examples (from op help)
|
|
2
|
+
|
|
3
|
+
## Sign in
|
|
4
|
+
|
|
5
|
+
- `op signin`
|
|
6
|
+
- `op signin --account <shorthand|signin-address|account-id|user-id>`
|
|
7
|
+
|
|
8
|
+
## Read
|
|
9
|
+
|
|
10
|
+
- `op read op://app-prod/db/password`
|
|
11
|
+
- `op read "op://app-prod/db/one-time password?attribute=otp"`
|
|
12
|
+
- `op read "op://app-prod/ssh key/private key?ssh-format=openssh"`
|
|
13
|
+
- `op read --out-file ./key.pem op://app-prod/server/ssh/key.pem`
|
|
14
|
+
|
|
15
|
+
## Run
|
|
16
|
+
|
|
17
|
+
- `export DB_PASSWORD="op://app-prod/db/password"`
|
|
18
|
+
- `op run --no-masking -- printenv DB_PASSWORD`
|
|
19
|
+
- `op run --env-file="./.env" -- printenv DB_PASSWORD`
|
|
20
|
+
|
|
21
|
+
## Inject
|
|
22
|
+
|
|
23
|
+
- `echo "db_password: {{ op://app-prod/db/password }}" | op inject`
|
|
24
|
+
- `op inject -i config.yml.tpl -o config.yml`
|
|
25
|
+
|
|
26
|
+
## Whoami / accounts
|
|
27
|
+
|
|
28
|
+
- `op whoami`
|
|
29
|
+
- `op account list`
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 1Password CLI get-started (summary)
|
|
2
|
+
|
|
3
|
+
- Works on macOS, Windows, and Linux.
|
|
4
|
+
- macOS/Linux shells: bash, zsh, sh, fish.
|
|
5
|
+
- Windows shell: PowerShell.
|
|
6
|
+
- Requires a 1Password subscription and the desktop app to use app integration.
|
|
7
|
+
- macOS requirement: Big Sur 11.0.0 or later.
|
|
8
|
+
- Linux app integration requires PolKit + an auth agent.
|
|
9
|
+
- Install the CLI per the official doc for your OS.
|
|
10
|
+
- Enable desktop app integration in the 1Password app:
|
|
11
|
+
- Open and unlock the app, then select your account/collection.
|
|
12
|
+
- macOS: Settings > Developer > Integrate with 1Password CLI (Touch ID optional).
|
|
13
|
+
- Windows: turn on Windows Hello, then Settings > Developer > Integrate.
|
|
14
|
+
- Linux: Settings > Security > Unlock using system authentication, then Settings > Developer > Integrate.
|
|
15
|
+
- After integration, run any command to sign in (example in docs: `op vault list`).
|
|
16
|
+
- If multiple accounts: use `op signin` to pick one, or `--account` / `OP_ACCOUNT`.
|
|
17
|
+
- For non-integration auth, use `op account add`.
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apple-notes
|
|
3
|
+
description: Manage Apple Notes via the `memo` CLI on macOS (create, view, edit, delete, search, move, and export notes). Use when a user asks OpenClaw to add a note, list notes, search notes, or manage note folders.
|
|
4
|
+
homepage: https://github.com/antoniorodr/memo
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"openclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "📝",
|
|
10
|
+
"os": ["darwin"],
|
|
11
|
+
"requires": { "bins": ["memo"] },
|
|
12
|
+
"install":
|
|
13
|
+
[
|
|
14
|
+
{
|
|
15
|
+
"id": "brew",
|
|
16
|
+
"kind": "brew",
|
|
17
|
+
"formula": "antoniorodr/memo/memo",
|
|
18
|
+
"bins": ["memo"],
|
|
19
|
+
"label": "Install memo via Homebrew",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Apple Notes CLI
|
|
27
|
+
|
|
28
|
+
Use `memo notes` to manage Apple Notes directly from the terminal. Create, view, edit, delete, search, move notes between folders, and export to HTML/Markdown.
|
|
29
|
+
|
|
30
|
+
Setup
|
|
31
|
+
|
|
32
|
+
- Install (Homebrew): `brew tap antoniorodr/memo && brew install antoniorodr/memo/memo`
|
|
33
|
+
- Manual (pip): `pip install .` (after cloning the repo)
|
|
34
|
+
- macOS-only; if prompted, grant Automation access to Notes.app.
|
|
35
|
+
|
|
36
|
+
View Notes
|
|
37
|
+
|
|
38
|
+
- List all notes: `memo notes`
|
|
39
|
+
- Filter by folder: `memo notes -f "Folder Name"`
|
|
40
|
+
- Search notes (fuzzy): `memo notes -s "query"`
|
|
41
|
+
|
|
42
|
+
Create Notes
|
|
43
|
+
|
|
44
|
+
- Add a new note: `memo notes -a`
|
|
45
|
+
- Opens an interactive editor to compose the note.
|
|
46
|
+
- Quick add with title: `memo notes -a "Note Title"`
|
|
47
|
+
|
|
48
|
+
Edit Notes
|
|
49
|
+
|
|
50
|
+
- Edit existing note: `memo notes -e`
|
|
51
|
+
- Interactive selection of note to edit.
|
|
52
|
+
|
|
53
|
+
Delete Notes
|
|
54
|
+
|
|
55
|
+
- Delete a note: `memo notes -d`
|
|
56
|
+
- Interactive selection of note to delete.
|
|
57
|
+
|
|
58
|
+
Move Notes
|
|
59
|
+
|
|
60
|
+
- Move note to folder: `memo notes -m`
|
|
61
|
+
- Interactive selection of note and destination folder.
|
|
62
|
+
|
|
63
|
+
Export Notes
|
|
64
|
+
|
|
65
|
+
- Export to HTML/Markdown: `memo notes -ex`
|
|
66
|
+
- Exports selected note; uses Mistune for markdown processing.
|
|
67
|
+
|
|
68
|
+
Limitations
|
|
69
|
+
|
|
70
|
+
- Cannot edit notes containing images or attachments.
|
|
71
|
+
- Interactive prompts may require terminal access.
|
|
72
|
+
|
|
73
|
+
Notes
|
|
74
|
+
|
|
75
|
+
- macOS-only.
|
|
76
|
+
- Requires Apple Notes.app to be accessible.
|
|
77
|
+
- For automation, grant permissions in System Settings > Privacy & Security > Automation.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: apple-reminders
|
|
3
|
+
description: Manage Apple Reminders via remindctl CLI (list, add, edit, complete, delete). Supports lists, date filters, and JSON/plain output.
|
|
4
|
+
homepage: https://github.com/steipete/remindctl
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"openclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "⏰",
|
|
10
|
+
"os": ["darwin"],
|
|
11
|
+
"requires": { "bins": ["remindctl"] },
|
|
12
|
+
"install":
|
|
13
|
+
[
|
|
14
|
+
{
|
|
15
|
+
"id": "brew",
|
|
16
|
+
"kind": "brew",
|
|
17
|
+
"formula": "steipete/tap/remindctl",
|
|
18
|
+
"bins": ["remindctl"],
|
|
19
|
+
"label": "Install remindctl via Homebrew",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# Apple Reminders CLI (remindctl)
|
|
27
|
+
|
|
28
|
+
Use `remindctl` to manage Apple Reminders directly from the terminal.
|
|
29
|
+
|
|
30
|
+
## When to Use
|
|
31
|
+
|
|
32
|
+
✅ **USE this skill when:**
|
|
33
|
+
|
|
34
|
+
- User explicitly mentions "reminder" or "Reminders app"
|
|
35
|
+
- Creating personal to-dos with due dates that sync to iOS
|
|
36
|
+
- Managing Apple Reminders lists
|
|
37
|
+
- User wants tasks to appear in their iPhone/iPad Reminders app
|
|
38
|
+
|
|
39
|
+
## When NOT to Use
|
|
40
|
+
|
|
41
|
+
❌ **DON'T use this skill when:**
|
|
42
|
+
|
|
43
|
+
- Scheduling OpenClaw tasks or alerts → use `cron` tool with systemEvent instead
|
|
44
|
+
- Calendar events or appointments → use Apple Calendar
|
|
45
|
+
- Project/work task management → use Notion, GitHub Issues, or task queue
|
|
46
|
+
- One-time notifications → use `cron` tool for timed alerts
|
|
47
|
+
- User says "remind me" but means an OpenClaw alert → clarify first
|
|
48
|
+
|
|
49
|
+
## Setup
|
|
50
|
+
|
|
51
|
+
- Install: `brew install steipete/tap/remindctl`
|
|
52
|
+
- macOS-only; grant Reminders permission when prompted
|
|
53
|
+
- Check status: `remindctl status`
|
|
54
|
+
- Request access: `remindctl authorize`
|
|
55
|
+
|
|
56
|
+
## Common Commands
|
|
57
|
+
|
|
58
|
+
### View Reminders
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
remindctl # Today's reminders
|
|
62
|
+
remindctl today # Today
|
|
63
|
+
remindctl tomorrow # Tomorrow
|
|
64
|
+
remindctl week # This week
|
|
65
|
+
remindctl overdue # Past due
|
|
66
|
+
remindctl all # Everything
|
|
67
|
+
remindctl 2026-01-04 # Specific date
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Manage Lists
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
remindctl list # List all lists
|
|
74
|
+
remindctl list Work # Show specific list
|
|
75
|
+
remindctl list Projects --create # Create list
|
|
76
|
+
remindctl list Work --delete # Delete list
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
### Create Reminders
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
remindctl add "Buy milk"
|
|
83
|
+
remindctl add --title "Call mom" --list Personal --due tomorrow
|
|
84
|
+
remindctl add --title "Meeting prep" --due "2026-02-15 09:00"
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### Complete/Delete
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
remindctl complete 1 2 3 # Complete by ID
|
|
91
|
+
remindctl delete 4A83 --force # Delete by ID
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Output Formats
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
remindctl today --json # JSON for scripting
|
|
98
|
+
remindctl today --plain # TSV format
|
|
99
|
+
remindctl today --quiet # Counts only
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Date Formats
|
|
103
|
+
|
|
104
|
+
Accepted by `--due` and date filters:
|
|
105
|
+
|
|
106
|
+
- `today`, `tomorrow`, `yesterday`
|
|
107
|
+
- `YYYY-MM-DD`
|
|
108
|
+
- `YYYY-MM-DD HH:mm`
|
|
109
|
+
- ISO 8601 (`2026-01-04T12:34:56Z`)
|
|
110
|
+
|
|
111
|
+
## Example: Clarifying User Intent
|
|
112
|
+
|
|
113
|
+
User: "Remind me to check on the deploy in 2 hours"
|
|
114
|
+
|
|
115
|
+
**Ask:** "Do you want this in Apple Reminders (syncs to your phone) or as an OpenClaw alert (I'll message you here)?"
|
|
116
|
+
|
|
117
|
+
- Apple Reminders → use this skill
|
|
118
|
+
- OpenClaw alert → use `cron` tool with systemEvent
|