clawdbot 2026.1.4-1
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 +120 -0
- package/LICENSE +21 -0
- package/README-header.png +0 -0
- package/README.md +297 -0
- package/dist/agents/agent-paths.js +17 -0
- package/dist/agents/bash-process-registry.js +126 -0
- package/dist/agents/bash-tools.js +837 -0
- package/dist/agents/clawdbot-tools.js +30 -0
- package/dist/agents/clawdis-tools.js +27 -0
- package/dist/agents/context.js +34 -0
- package/dist/agents/defaults.js +6 -0
- package/dist/agents/model-auth.js +112 -0
- package/dist/agents/model-catalog.js +55 -0
- package/dist/agents/model-fallback.js +191 -0
- package/dist/agents/model-scan.js +263 -0
- package/dist/agents/model-selection.js +116 -0
- package/dist/agents/models-config.js +49 -0
- package/dist/agents/pi-embedded-helpers.js +74 -0
- package/dist/agents/pi-embedded-runner.js +407 -0
- package/dist/agents/pi-embedded-subscribe.js +568 -0
- package/dist/agents/pi-embedded-utils.js +20 -0
- package/dist/agents/pi-embedded.js +1 -0
- package/dist/agents/pi-oauth.js +88 -0
- package/dist/agents/pi-tools.js +433 -0
- package/dist/agents/sandbox-paths.js +68 -0
- package/dist/agents/sandbox.js +644 -0
- package/dist/agents/shell-utils.js +53 -0
- package/dist/agents/skills-install.js +244 -0
- package/dist/agents/skills-status.js +157 -0
- package/dist/agents/skills.js +470 -0
- package/dist/agents/steerable-agent-loop.js +338 -0
- package/dist/agents/steerable-provider-transport.js +48 -0
- package/dist/agents/system-prompt.js +104 -0
- package/dist/agents/tool-display.js +162 -0
- package/dist/agents/tool-images.js +138 -0
- package/dist/agents/tools/browser-tool.js +339 -0
- package/dist/agents/tools/canvas-tool.js +193 -0
- package/dist/agents/tools/common.js +88 -0
- package/dist/agents/tools/cron-tool.js +124 -0
- package/dist/agents/tools/discord-actions-guild.js +186 -0
- package/dist/agents/tools/discord-actions-messaging.js +285 -0
- package/dist/agents/tools/discord-actions-moderation.js +70 -0
- package/dist/agents/tools/discord-actions.js +56 -0
- package/dist/agents/tools/discord-schema.js +199 -0
- package/dist/agents/tools/discord-tool.js +16 -0
- package/dist/agents/tools/gateway-tool.js +46 -0
- package/dist/agents/tools/gateway.js +27 -0
- package/dist/agents/tools/image-tool.js +132 -0
- package/dist/agents/tools/nodes-tool.js +413 -0
- package/dist/agents/tools/nodes-utils.js +92 -0
- package/dist/agents/tools/sessions-helpers.js +88 -0
- package/dist/agents/tools/sessions-history-tool.js +53 -0
- package/dist/agents/tools/sessions-list-tool.js +143 -0
- package/dist/agents/tools/sessions-send-helpers.js +100 -0
- package/dist/agents/tools/sessions-send-tool.js +347 -0
- package/dist/agents/tools/slack-actions.js +129 -0
- package/dist/agents/tools/slack-schema.js +59 -0
- package/dist/agents/tools/slack-tool.js +16 -0
- package/dist/agents/usage.js +39 -0
- package/dist/agents/workspace.js +241 -0
- package/dist/auto-reply/chunk.js +76 -0
- package/dist/auto-reply/envelope.js +38 -0
- package/dist/auto-reply/group-activation.js +20 -0
- package/dist/auto-reply/heartbeat.js +57 -0
- package/dist/auto-reply/model.js +14 -0
- package/dist/auto-reply/reply/abort.js +14 -0
- package/dist/auto-reply/reply/agent-runner.js +371 -0
- package/dist/auto-reply/reply/block-streaming.js +34 -0
- package/dist/auto-reply/reply/body.js +29 -0
- package/dist/auto-reply/reply/commands.js +207 -0
- package/dist/auto-reply/reply/directive-handling.js +361 -0
- package/dist/auto-reply/reply/directives.js +47 -0
- package/dist/auto-reply/reply/followup-runner.js +149 -0
- package/dist/auto-reply/reply/groups.js +91 -0
- package/dist/auto-reply/reply/mentions.js +38 -0
- package/dist/auto-reply/reply/model-selection.js +114 -0
- package/dist/auto-reply/reply/queue.js +399 -0
- package/dist/auto-reply/reply/reply-tags.js +26 -0
- package/dist/auto-reply/reply/session-updates.js +87 -0
- package/dist/auto-reply/reply/session.js +160 -0
- package/dist/auto-reply/reply/typing.js +75 -0
- package/dist/auto-reply/reply.js +535 -0
- package/dist/auto-reply/send-policy.js +28 -0
- package/dist/auto-reply/status.js +158 -0
- package/dist/auto-reply/templating.js +9 -0
- package/dist/auto-reply/thinking.js +49 -0
- package/dist/auto-reply/tokens.js +2 -0
- package/dist/auto-reply/tool-meta.js +74 -0
- package/dist/auto-reply/transcription.js +57 -0
- package/dist/auto-reply/types.js +1 -0
- package/dist/browser/bridge-server.js +37 -0
- package/dist/browser/cdp.js +382 -0
- package/dist/browser/chrome.js +432 -0
- package/dist/browser/client-actions-core.js +67 -0
- package/dist/browser/client-actions-observe.js +24 -0
- package/dist/browser/client-actions-types.js +1 -0
- package/dist/browser/client-actions.js +3 -0
- package/dist/browser/client-fetch.js +43 -0
- package/dist/browser/client.js +105 -0
- package/dist/browser/config.js +140 -0
- package/dist/browser/constants.js +4 -0
- package/dist/browser/profiles-service.js +122 -0
- package/dist/browser/profiles.js +85 -0
- package/dist/browser/pw-ai.js +2 -0
- package/dist/browser/pw-session.js +144 -0
- package/dist/browser/pw-tools-core.js +363 -0
- package/dist/browser/routes/agent.js +535 -0
- package/dist/browser/routes/basic.js +155 -0
- package/dist/browser/routes/index.js +8 -0
- package/dist/browser/routes/tabs.js +105 -0
- package/dist/browser/routes/utils.js +62 -0
- package/dist/browser/screenshot.js +40 -0
- package/dist/browser/server-context.js +377 -0
- package/dist/browser/server.js +81 -0
- package/dist/browser/target-id.js +18 -0
- package/dist/browser/trash.js +21 -0
- package/dist/canvas-host/a2ui/.bundle.hash +1 -0
- package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
- package/dist/canvas-host/a2ui/index.html +246 -0
- package/dist/canvas-host/a2ui.js +187 -0
- package/dist/canvas-host/server.js +382 -0
- package/dist/cli/browser-cli-actions-input.js +459 -0
- package/dist/cli/browser-cli-actions-observe.js +56 -0
- package/dist/cli/browser-cli-examples.js +31 -0
- package/dist/cli/browser-cli-inspect.js +97 -0
- package/dist/cli/browser-cli-manage.js +286 -0
- package/dist/cli/browser-cli-shared.js +1 -0
- package/dist/cli/browser-cli.js +26 -0
- package/dist/cli/canvas-cli.js +416 -0
- package/dist/cli/cron-cli.js +454 -0
- package/dist/cli/deps.js +17 -0
- package/dist/cli/dns-cli.js +180 -0
- package/dist/cli/gateway-cli.js +489 -0
- package/dist/cli/gateway-rpc.js +20 -0
- package/dist/cli/hooks-cli.js +135 -0
- package/dist/cli/models-cli.js +248 -0
- package/dist/cli/nodes-camera.js +57 -0
- package/dist/cli/nodes-canvas.js +26 -0
- package/dist/cli/nodes-cli.js +946 -0
- package/dist/cli/nodes-screen.js +37 -0
- package/dist/cli/parse-duration.js +20 -0
- package/dist/cli/ports.js +97 -0
- package/dist/cli/program.js +406 -0
- package/dist/cli/prompt.js +19 -0
- package/dist/cli/tui-cli.js +35 -0
- package/dist/cli/wait.js +8 -0
- package/dist/commands/agent.js +645 -0
- package/dist/commands/antigravity-oauth.js +327 -0
- package/dist/commands/configure.js +480 -0
- package/dist/commands/doctor.js +484 -0
- package/dist/commands/health.js +108 -0
- package/dist/commands/models/aliases.js +64 -0
- package/dist/commands/models/fallbacks.js +99 -0
- package/dist/commands/models/image-fallbacks.js +99 -0
- package/dist/commands/models/list.js +323 -0
- package/dist/commands/models/scan.js +266 -0
- package/dist/commands/models/set-image.js +23 -0
- package/dist/commands/models/set.js +23 -0
- package/dist/commands/models/shared.js +72 -0
- package/dist/commands/models.js +7 -0
- package/dist/commands/onboard-auth.js +70 -0
- package/dist/commands/onboard-helpers.js +295 -0
- package/dist/commands/onboard-interactive.js +17 -0
- package/dist/commands/onboard-non-interactive.js +202 -0
- package/dist/commands/onboard-providers.js +634 -0
- package/dist/commands/onboard-remote.js +120 -0
- package/dist/commands/onboard-skills.js +148 -0
- package/dist/commands/onboard-types.js +1 -0
- package/dist/commands/onboard.js +12 -0
- package/dist/commands/send.js +124 -0
- package/dist/commands/sessions.js +212 -0
- package/dist/commands/setup.js +58 -0
- package/dist/commands/signal-install.js +135 -0
- package/dist/commands/status.js +207 -0
- package/dist/commands/update.js +16 -0
- package/dist/config/config.js +6 -0
- package/dist/config/defaults.js +61 -0
- package/dist/config/io.js +147 -0
- package/dist/config/legacy-migrate.js +13 -0
- package/dist/config/legacy.js +159 -0
- package/dist/config/paths.js +71 -0
- package/dist/config/schema.js +150 -0
- package/dist/config/sessions.js +282 -0
- package/dist/config/talk.js +31 -0
- package/dist/config/types.js +1 -0
- package/dist/config/validation.js +29 -0
- package/dist/config/zod-schema.js +831 -0
- package/dist/control-ui/assets/index-BFID3yAA.css +1 -0
- package/dist/control-ui/assets/index-CE_axlTS.js +2235 -0
- package/dist/control-ui/assets/index-CE_axlTS.js.map +1 -0
- package/dist/control-ui/index.html +15 -0
- package/dist/cron/isolated-agent.js +499 -0
- package/dist/cron/run-log.js +72 -0
- package/dist/cron/schedule.js +24 -0
- package/dist/cron/service.js +471 -0
- package/dist/cron/store.js +43 -0
- package/dist/cron/types.js +1 -0
- package/dist/daemon/constants.js +10 -0
- package/dist/daemon/launchd.js +276 -0
- package/dist/daemon/legacy.js +63 -0
- package/dist/daemon/program-args.js +76 -0
- package/dist/daemon/schtasks.js +257 -0
- package/dist/daemon/service.js +60 -0
- package/dist/daemon/systemd.js +266 -0
- package/dist/discord/index.js +2 -0
- package/dist/discord/monitor.js +1188 -0
- package/dist/discord/probe.js +54 -0
- package/dist/discord/send.js +577 -0
- package/dist/discord/token.js +8 -0
- package/dist/gateway/auth.js +121 -0
- package/dist/gateway/call.js +94 -0
- package/dist/gateway/chat-attachments.js +41 -0
- package/dist/gateway/client.js +180 -0
- package/dist/gateway/config-reload.js +274 -0
- package/dist/gateway/control-ui.js +184 -0
- package/dist/gateway/hooks-mapping.js +282 -0
- package/dist/gateway/hooks.js +168 -0
- package/dist/gateway/net.js +29 -0
- package/dist/gateway/protocol/index.js +61 -0
- package/dist/gateway/protocol/schema.js +560 -0
- package/dist/gateway/server-bridge-subscriptions.js +93 -0
- package/dist/gateway/server-bridge.js +1013 -0
- package/dist/gateway/server-browser.js +12 -0
- package/dist/gateway/server-chat.js +159 -0
- package/dist/gateway/server-constants.js +8 -0
- package/dist/gateway/server-discovery.js +62 -0
- package/dist/gateway/server-http.js +165 -0
- package/dist/gateway/server-methods/agent-job.js +125 -0
- package/dist/gateway/server-methods/agent.js +250 -0
- package/dist/gateway/server-methods/chat.js +200 -0
- package/dist/gateway/server-methods/config.js +50 -0
- package/dist/gateway/server-methods/connect.js +6 -0
- package/dist/gateway/server-methods/cron.js +83 -0
- package/dist/gateway/server-methods/health.js +28 -0
- package/dist/gateway/server-methods/models.js +16 -0
- package/dist/gateway/server-methods/nodes.js +294 -0
- package/dist/gateway/server-methods/providers.js +217 -0
- package/dist/gateway/server-methods/send.js +166 -0
- package/dist/gateway/server-methods/sessions.js +305 -0
- package/dist/gateway/server-methods/skills.js +83 -0
- package/dist/gateway/server-methods/system.js +118 -0
- package/dist/gateway/server-methods/talk.js +22 -0
- package/dist/gateway/server-methods/types.js +1 -0
- package/dist/gateway/server-methods/voicewake.js +30 -0
- package/dist/gateway/server-methods/web.js +58 -0
- package/dist/gateway/server-methods/wizard.js +100 -0
- package/dist/gateway/server-methods.js +53 -0
- package/dist/gateway/server-providers.js +644 -0
- package/dist/gateway/server-shared.js +1 -0
- package/dist/gateway/server-utils.js +35 -0
- package/dist/gateway/server.js +1437 -0
- package/dist/gateway/session-utils.js +216 -0
- package/dist/gateway/ws-log.js +349 -0
- package/dist/gateway/ws-logging.js +8 -0
- package/dist/globals.js +41 -0
- package/dist/hooks/gmail-ops.js +236 -0
- package/dist/hooks/gmail-setup-utils.js +278 -0
- package/dist/hooks/gmail-watcher.js +175 -0
- package/dist/hooks/gmail.js +177 -0
- package/dist/imessage/client.js +165 -0
- package/dist/imessage/index.js +3 -0
- package/dist/imessage/monitor.js +272 -0
- package/dist/imessage/probe.js +26 -0
- package/dist/imessage/send.js +83 -0
- package/dist/imessage/targets.js +176 -0
- package/dist/index.js +50 -0
- package/dist/infra/agent-events.js +46 -0
- package/dist/infra/binaries.js +9 -0
- package/dist/infra/bonjour-discovery.js +163 -0
- package/dist/infra/bonjour.js +200 -0
- package/dist/infra/bridge/server.js +562 -0
- package/dist/infra/canvas-host-url.js +54 -0
- package/dist/infra/env.js +8 -0
- package/dist/infra/errors.js +28 -0
- package/dist/infra/gateway-lock.js +8 -0
- package/dist/infra/heartbeat-events.js +21 -0
- package/dist/infra/heartbeat-runner.js +453 -0
- package/dist/infra/heartbeat-wake.js +61 -0
- package/dist/infra/is-main.js +37 -0
- package/dist/infra/machine-name.js +40 -0
- package/dist/infra/node-pairing.js +211 -0
- package/dist/infra/pam.js +42 -0
- package/dist/infra/path-env.js +92 -0
- package/dist/infra/ports.js +87 -0
- package/dist/infra/provider-summary.js +80 -0
- package/dist/infra/restart.js +29 -0
- package/dist/infra/retry.js +16 -0
- package/dist/infra/runtime-guard.js +59 -0
- package/dist/infra/system-events.js +44 -0
- package/dist/infra/system-presence.js +216 -0
- package/dist/infra/tailnet.js +46 -0
- package/dist/infra/tailscale.js +149 -0
- package/dist/infra/voicewake.js +77 -0
- package/dist/infra/widearea-dns.js +123 -0
- package/dist/infra/ws.js +13 -0
- package/dist/logger.js +52 -0
- package/dist/logging.js +490 -0
- package/dist/macos/gateway-daemon.js +141 -0
- package/dist/macos/relay.js +46 -0
- package/dist/media/constants.js +33 -0
- package/dist/media/host.js +42 -0
- package/dist/media/image-ops.js +121 -0
- package/dist/media/mime.js +115 -0
- package/dist/media/parse.js +81 -0
- package/dist/media/server.js +64 -0
- package/dist/media/store.js +139 -0
- package/dist/process/command-queue.js +97 -0
- package/dist/process/exec.js +75 -0
- package/dist/protocol.schema.json +2918 -0
- package/dist/provider-web.js +8 -0
- package/dist/providers/web/index.js +2 -0
- package/dist/runtime.js +8 -0
- package/dist/sessions/send-policy.js +68 -0
- package/dist/signal/client.js +134 -0
- package/dist/signal/daemon.js +69 -0
- package/dist/signal/index.js +3 -0
- package/dist/signal/monitor.js +336 -0
- package/dist/signal/probe.js +46 -0
- package/dist/signal/send.js +91 -0
- package/dist/slack/actions.js +97 -0
- package/dist/slack/index.js +5 -0
- package/dist/slack/monitor.js +1029 -0
- package/dist/slack/probe.js +47 -0
- package/dist/slack/send.js +131 -0
- package/dist/slack/token.js +10 -0
- package/dist/telegram/bot.js +394 -0
- package/dist/telegram/download.js +34 -0
- package/dist/telegram/index.js +4 -0
- package/dist/telegram/monitor.js +47 -0
- package/dist/telegram/probe.js +63 -0
- package/dist/telegram/proxy.js +9 -0
- package/dist/telegram/send.js +138 -0
- package/dist/telegram/token.js +30 -0
- package/dist/telegram/webhook-set.js +12 -0
- package/dist/telegram/webhook.js +56 -0
- package/dist/tui/commands.js +74 -0
- package/dist/tui/components/assistant-message.js +16 -0
- package/dist/tui/components/chat-log.js +92 -0
- package/dist/tui/components/custom-editor.js +53 -0
- package/dist/tui/components/selectors.js +8 -0
- package/dist/tui/components/tool-execution.js +111 -0
- package/dist/tui/components/user-message.js +17 -0
- package/dist/tui/gateway-chat.js +140 -0
- package/dist/tui/layout.js +41 -0
- package/dist/tui/message-list.js +57 -0
- package/dist/tui/theme/theme.js +80 -0
- package/dist/tui/theme.js +25 -0
- package/dist/tui/tui.js +708 -0
- package/dist/utils.js +133 -0
- package/dist/version.js +18 -0
- package/dist/web/active-listener.js +7 -0
- package/dist/web/auto-reply.js +1203 -0
- package/dist/web/inbound.js +481 -0
- package/dist/web/login-qr.js +204 -0
- package/dist/web/login.js +59 -0
- package/dist/web/media.js +148 -0
- package/dist/web/outbound.js +67 -0
- package/dist/web/qr-image.js +97 -0
- package/dist/web/reconnect.js +60 -0
- package/dist/web/reply-heartbeat-wake.js +61 -0
- package/dist/web/session.js +346 -0
- package/dist/wizard/clack-prompter.js +56 -0
- package/dist/wizard/onboarding.js +452 -0
- package/dist/wizard/prompts.js +6 -0
- package/dist/wizard/session.js +203 -0
- package/docs/AGENTS.default.md +116 -0
- package/docs/CNAME +1 -0
- package/docs/RELEASING.md +64 -0
- package/docs/_config.yml +51 -0
- package/docs/_layouts/default.html +145 -0
- package/docs/agent-send.md +21 -0
- package/docs/agent.md +104 -0
- package/docs/android/connect.md +131 -0
- package/docs/architecture.md +89 -0
- package/docs/assets/markdown.css +130 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/terminal.css +497 -0
- package/docs/assets/theme.js +55 -0
- package/docs/audio.md +50 -0
- package/docs/background-process.md +74 -0
- package/docs/bash.md +32 -0
- package/docs/bonjour.md +159 -0
- package/docs/browser.md +289 -0
- package/docs/camera.md +152 -0
- package/docs/clawd.md +199 -0
- package/docs/clawdbot-mac.md +104 -0
- package/docs/configuration.md +1177 -0
- package/docs/control-api.md +49 -0
- package/docs/control-ui.md +83 -0
- package/docs/cron.md +374 -0
- package/docs/dashboard.md +17 -0
- package/docs/device-models.md +46 -0
- package/docs/discord.md +293 -0
- package/docs/discovery.md +112 -0
- package/docs/docker.md +251 -0
- package/docs/docs.json +86 -0
- package/docs/doctor.md +47 -0
- package/docs/elevated.md +31 -0
- package/docs/faq.md +640 -0
- package/docs/gateway/pairing.md +109 -0
- package/docs/gateway-lock.md +28 -0
- package/docs/gateway.md +174 -0
- package/docs/gmail-pubsub.md +191 -0
- package/docs/grammy.md +27 -0
- package/docs/group-messages.md +71 -0
- package/docs/groups.md +78 -0
- package/docs/health.md +28 -0
- package/docs/heartbeat.md +64 -0
- package/docs/images.md +52 -0
- package/docs/imessage.md +63 -0
- package/docs/index.md +182 -0
- package/docs/ios/connect.md +177 -0
- package/docs/ios/spec.md +236 -0
- package/docs/location-command.md +95 -0
- package/docs/logging.md +99 -0
- package/docs/lore.md +131 -0
- package/docs/mac/bun.md +133 -0
- package/docs/mac/canvas.md +161 -0
- package/docs/mac/child-process.md +72 -0
- package/docs/mac/dev-setup.md +81 -0
- package/docs/mac/health.md +28 -0
- package/docs/mac/icon.md +26 -0
- package/docs/mac/logging.md +51 -0
- package/docs/mac/menu-bar.md +69 -0
- package/docs/mac/peekaboo.md +170 -0
- package/docs/mac/permissions.md +40 -0
- package/docs/mac/release.md +76 -0
- package/docs/mac/remote.md +57 -0
- package/docs/mac/signing.md +41 -0
- package/docs/mac/skills.md +27 -0
- package/docs/mac/voice-overlay.md +52 -0
- package/docs/mac/voicewake.md +56 -0
- package/docs/mac/webchat.md +27 -0
- package/docs/mac/xpc.md +40 -0
- package/docs/models.md +90 -0
- package/docs/nix.md +49 -0
- package/docs/nodes.md +157 -0
- package/docs/onboarding-config-protocol.md +29 -0
- package/docs/onboarding.md +185 -0
- package/docs/presence.md +133 -0
- package/docs/queue.md +78 -0
- package/docs/refactor/browser-control-simplification.md +58 -0
- package/docs/refactor/canvas-a2ui.md +93 -0
- package/docs/refactor/cli-unification.md +64 -0
- package/docs/refactor/gateway-client.md +31 -0
- package/docs/refactor/gateway.md +99 -0
- package/docs/refactor/new-arch.md +171 -0
- package/docs/refactor/tui.md +26 -0
- package/docs/refactor/web-gateway-troubleshooting.md +37 -0
- package/docs/refactor/webagent-session.md +46 -0
- package/docs/remote-gateway-readme.md +148 -0
- package/docs/remote.md +66 -0
- package/docs/research/memory.md +227 -0
- package/docs/rpc.md +35 -0
- package/docs/security.md +168 -0
- package/docs/session-tool.md +119 -0
- package/docs/session.md +84 -0
- package/docs/sessions.md +8 -0
- package/docs/setup.md +118 -0
- package/docs/signal.md +113 -0
- package/docs/skills-config.md +58 -0
- package/docs/skills.md +149 -0
- package/docs/slack.md +158 -0
- package/docs/surface.md +20 -0
- package/docs/tailscale.md +71 -0
- package/docs/talk.md +79 -0
- package/docs/telegram.md +90 -0
- package/docs/templates/AGENTS.md +126 -0
- package/docs/templates/BOOTSTRAP.md +53 -0
- package/docs/templates/IDENTITY.md +17 -0
- package/docs/templates/SOUL.md +41 -0
- package/docs/templates/TOOLS.md +41 -0
- package/docs/templates/USER.md +22 -0
- package/docs/test.md +35 -0
- package/docs/thinking.md +46 -0
- package/docs/tools.md +248 -0
- package/docs/troubleshooting.md +227 -0
- package/docs/tui.md +69 -0
- package/docs/typebox.md +42 -0
- package/docs/voicewake.md +61 -0
- package/docs/web.md +115 -0
- package/docs/webchat.md +34 -0
- package/docs/webhook.md +132 -0
- package/docs/whatsapp-clawd.jpg +0 -0
- package/docs/whatsapp.md +142 -0
- package/docs/wizard.md +158 -0
- package/package.json +186 -0
- package/skills/apple-notes/SKILL.md +50 -0
- package/skills/apple-reminders/SKILL.md +67 -0
- package/skills/bear-notes/SKILL.md +79 -0
- package/skills/bird/SKILL.md +25 -0
- package/skills/blogwatcher/SKILL.md +46 -0
- package/skills/blucli/SKILL.md +27 -0
- package/skills/brave-search/SKILL.md +30 -0
- package/skills/brave-search/scripts/content.mjs +53 -0
- package/skills/brave-search/scripts/search.mjs +79 -0
- package/skills/camsnap/SKILL.md +25 -0
- package/skills/clawdhub/SKILL.md +53 -0
- package/skills/coding-agent/SKILL.md +275 -0
- package/skills/discord/SKILL.md +369 -0
- package/skills/eightctl/SKILL.md +29 -0
- package/skills/food-order/SKILL.md +41 -0
- package/skills/gemini/SKILL.md +23 -0
- package/skills/gifgrep/SKILL.md +47 -0
- package/skills/github/SKILL.md +47 -0
- package/skills/gog/SKILL.md +36 -0
- package/skills/goplaces/SKILL.md +30 -0
- package/skills/imsg/SKILL.md +25 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +91 -0
- package/skills/local-places/pyproject.toml +27 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +38 -0
- package/skills/nano-banana-pro/SKILL.md +29 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +167 -0
- package/skills/nano-pdf/SKILL.md +20 -0
- package/skills/notion/SKILL.md +156 -0
- package/skills/obsidian/SKILL.md +55 -0
- package/skills/openai-image-gen/SKILL.md +31 -0
- package/skills/openai-image-gen/scripts/gen.py +173 -0
- package/skills/openai-whisper/SKILL.md +19 -0
- package/skills/openai-whisper-api/SKILL.md +43 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +30 -0
- package/skills/oracle/SKILL.md +105 -0
- package/skills/ordercli/SKILL.md +47 -0
- package/skills/peekaboo/SKILL.md +153 -0
- package/skills/qmd/SKILL.md +26 -0
- package/skills/sag/SKILL.md +62 -0
- package/skills/slack/SKILL.md +143 -0
- package/skills/songsee/SKILL.md +29 -0
- package/skills/sonoscli/SKILL.md +26 -0
- package/skills/spotify-player/SKILL.md +34 -0
- package/skills/summarize/SKILL.md +49 -0
- package/skills/things-mac/SKILL.md +61 -0
- package/skills/tmux/SKILL.md +121 -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 +84 -0
- package/skills/video-frames/SKILL.md +29 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/wacli/SKILL.md +42 -0
- package/skills/weather/SKILL.md +49 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
**Why this looks different:** the project was renamed from **Clawdis → Clawdbot**. To make the transition clear, releases now use **date-based versions** (`YYYY.M.D`) and the changelog is **compressed** into milestone summaries. Full detail still lives in git history and the docs.
|
|
4
|
+
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
### Highlights
|
|
8
|
+
- Models: add image-specific model config (`agent.imageModel` + fallbacks) and scan support.
|
|
9
|
+
- Agent tools: new `image` tool routed to the image model (when configured).
|
|
10
|
+
|
|
11
|
+
### Fixes
|
|
12
|
+
- Android: tapping the foreground service notification brings the app to the front. (#179) — thanks @Syhids
|
|
13
|
+
- Cron tool passes `id` to the gateway for update/remove/run/runs (keeps `jobId` input). (#180) — thanks @adamgall
|
|
14
|
+
- macOS: treat location permission as always-only to avoid iOS-only enums. (#165) — thanks @Nachx639
|
|
15
|
+
|
|
16
|
+
## 2026.1.4-1
|
|
17
|
+
|
|
18
|
+
### Fixes
|
|
19
|
+
- npm package: include missing `dist/*` runtime modules (fixes `npx clawdbot@latest`).
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## 2026.1.4
|
|
23
|
+
|
|
24
|
+
### Highlights
|
|
25
|
+
- Rename completion: all CLIs, paths, bundle IDs, env vars, and docs standardized on **Clawdbot**.
|
|
26
|
+
- Agent-to-agent relay: `sessions_send` ping‑pong with `REPLY_SKIP` plus announce step with `ANNOUNCE_SKIP`.
|
|
27
|
+
- Gateway quality-of-life: config hot reload, port config support, and Control UI base paths.
|
|
28
|
+
- Sandbox additions: per-session Docker sandbox with hardened limits + optional sandboxed Chromium.
|
|
29
|
+
- New node capability: `location.get` across macOS/iOS/Android (CLI + tools).
|
|
30
|
+
- Models CLI: scan OpenRouter free models (tools/images), manage aliases/fallbacks, and show last-used model in status.
|
|
31
|
+
|
|
32
|
+
### Breaking
|
|
33
|
+
- Tool names drop the `clawdbot_` prefix (`browser`, `canvas`, `nodes`, `cron`, `gateway`).
|
|
34
|
+
- Bash tool removes node-pty `stdinMode: "pty"` support (use tmux for real TTYs).
|
|
35
|
+
- Primary session key is fixed to `main` (or `global` for global scope).
|
|
36
|
+
|
|
37
|
+
### Fixes
|
|
38
|
+
- Doctor migrates legacy Clawdis config/service installs and normalizes sandbox Docker names.
|
|
39
|
+
- Doctor checks sandbox image availability and offers to build or fall back to legacy images.
|
|
40
|
+
- Presence beacons keep node lists fresh; Instances view stays accurate.
|
|
41
|
+
- Block streaming/chunking reliability (Telegram/Discord ordering, fewer duplicates).
|
|
42
|
+
- WhatsApp GIF playback for MP4-based GIFs.
|
|
43
|
+
- Onboarding + Control UI basePath handling fixes and UI polish.
|
|
44
|
+
- Clearer tool summaries, reduced log noise, and safer watchdog/queue behavior.
|
|
45
|
+
- Canvas host watcher resilience; build and packaging edge cases cleaned up.
|
|
46
|
+
|
|
47
|
+
### Docs
|
|
48
|
+
- Sandbox setup, hot reload, port config, and session announce step coverage.
|
|
49
|
+
- Skills and onboarding clarifications + additional examples.
|
|
50
|
+
|
|
51
|
+
## 2026.1.3 (beta 5)
|
|
52
|
+
|
|
53
|
+
### Breaking
|
|
54
|
+
- Skills config moved under `skills.*` (new `skills.entries`, `skills.allowBundled`).
|
|
55
|
+
- Group session keys now `surface:group:<id>` / `surface:channel:<id>`; legacy `group:*` removed.
|
|
56
|
+
- Discord config refactor; `discord.allowFrom` + `discord.requireMention` removed.
|
|
57
|
+
- Discord/Telegram require `enabled: true` in config when using env tokens.
|
|
58
|
+
- Routing `allowFrom`/mention settings moved to per-surface group settings.
|
|
59
|
+
|
|
60
|
+
### Highlights
|
|
61
|
+
- Talk Mode (continuous voice) with ElevenLabs TTS on macOS/iOS/Android.
|
|
62
|
+
- Discord: expanded tool actions, richer routing, and threaded reply tags.
|
|
63
|
+
- Auto-reply queue modes + session model overrides; TUI upgrades.
|
|
64
|
+
- Nix mode (declarative config) and Docker setup flow.
|
|
65
|
+
- Onboarding wizard + configure/doctor/update flows.
|
|
66
|
+
- Signal + iMessage providers; new skills (Trello, Things, Notes/Reminders, tmux coding).
|
|
67
|
+
- Browser tooling upgrades (remote CDP, no-sandbox, profiles).
|
|
68
|
+
|
|
69
|
+
### Fixes
|
|
70
|
+
- macOS codesign/TCC hardening and menu/UI stability improvements.
|
|
71
|
+
- Streaming/typing fixes; per-provider chunk limit tuning.
|
|
72
|
+
- Remote gateway auth + token handling tightened.
|
|
73
|
+
- Camera capture reliability and media sizing fixes.
|
|
74
|
+
|
|
75
|
+
## 2025.12.27 (betas 3–4)
|
|
76
|
+
|
|
77
|
+
### Highlights
|
|
78
|
+
- First-class tools replace `clawdbot-*` skills (browser, canvas, nodes, cron).
|
|
79
|
+
- Per-session model selection and custom model providers.
|
|
80
|
+
- Group activation commands; Discord provider for DMs/guilds.
|
|
81
|
+
- Gateway webhooks + Gmail Pub/Sub hooks.
|
|
82
|
+
- Command queue modes + `agent.maxConcurrent` cap.
|
|
83
|
+
- Background bash tasks with `process` tool; gateway in-process restart.
|
|
84
|
+
|
|
85
|
+
### Fixes
|
|
86
|
+
- Packaging fixes, heartbeat cleanup, WhatsApp reconnect reliability.
|
|
87
|
+
- macOS menu/Chat UI polish and presence reporting fixes.
|
|
88
|
+
|
|
89
|
+
## 2025.12.21 (beta 2)
|
|
90
|
+
|
|
91
|
+
### Highlights
|
|
92
|
+
- Bundled gateway packaging + DMG distribution pipeline.
|
|
93
|
+
- Skills platform (bundled/managed/workspace) with install gating + UI.
|
|
94
|
+
- Onboarding polish and agent UX improvements.
|
|
95
|
+
- Canvas host served from Gateway; browser control simplification.
|
|
96
|
+
|
|
97
|
+
## 2025.12.19 (beta 1)
|
|
98
|
+
|
|
99
|
+
### Highlights
|
|
100
|
+
- First Clawdbot release: Gateway WS control plane + optional Bridge.
|
|
101
|
+
- macOS menu bar companion app with Voice Wake + WebChat.
|
|
102
|
+
- iOS node pairing with Canvas surface.
|
|
103
|
+
- WhatsApp groups, thinking/verbose directives, health/status tooling.
|
|
104
|
+
|
|
105
|
+
### Breaking
|
|
106
|
+
- Switched to Pi-only agent runtime; legacy providers removed.
|
|
107
|
+
- Gateway became the single source of truth (no ad-hoc direct sends).
|
|
108
|
+
|
|
109
|
+
## 2025.12.05–2025.12.03 (pre-Clawdbot)
|
|
110
|
+
|
|
111
|
+
### Highlights
|
|
112
|
+
- Pi-only agent path and web-only gateway workflow.
|
|
113
|
+
- Thinking/verbose directives, group chat support, and heartbeat controls.
|
|
114
|
+
- `clawdbot agent` CLI added; session tables and health reporting.
|
|
115
|
+
|
|
116
|
+
## 2025.11.28–2025.11.25 (early web-only)
|
|
117
|
+
|
|
118
|
+
- Heartbeat CLI + interval handling.
|
|
119
|
+
- Media MIME sniffing, size caps, and timeout fallbacks.
|
|
120
|
+
- Web provider reconnects and early stability fixes.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Peter Steinberger
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
Binary file
|
package/README.md
ADDED
|
@@ -0,0 +1,297 @@
|
|
|
1
|
+
# 🦞 CLAWDBOT — Personal AI Assistant
|
|
2
|
+
|
|
3
|
+
<p align="center">
|
|
4
|
+
<img src="https://raw.githubusercontent.com/clawdbot/clawdbot/main/docs/whatsapp-clawd.jpg" alt="CLAWDBOT" width="400">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>EXFOLIATE! EXFOLIATE!</strong>
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
<p align="center">
|
|
12
|
+
<a href="https://github.com/clawdbot/clawdbot/actions/workflows/ci.yml?branch=main"><img src="https://img.shields.io/github/actions/workflow/status/clawdbot/clawdbot/ci.yml?branch=main&style=for-the-badge" alt="CI status"></a>
|
|
13
|
+
<a href="https://github.com/clawdbot/clawdbot/releases"><img src="https://img.shields.io/github/v/release/clawdbot/clawdbot?include_prereleases&style=for-the-badge" alt="GitHub release"></a>
|
|
14
|
+
<a href="https://discord.gg/clawd"><img src="https://img.shields.io/discord/1456350064065904867?label=Discord&logo=discord&logoColor=white&color=5865F2&style=for-the-badge" alt="Discord"></a>
|
|
15
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg?style=for-the-badge" alt="MIT License"></a>
|
|
16
|
+
</p>
|
|
17
|
+
|
|
18
|
+
**Clawdbot** is a *personal AI assistant* you run on your own devices.
|
|
19
|
+
It answers you on the surfaces you already use (WhatsApp, Telegram, Discord, iMessage, WebChat), can speak and listen on macOS/iOS, and can render a live Canvas you control. The Gateway is just the control plane — the product is the assistant.
|
|
20
|
+
|
|
21
|
+
If you want a personal, single-user assistant that feels local, fast, and always-on, this is it.
|
|
22
|
+
|
|
23
|
+
Website: https://clawd.me · Docs: [`docs/index.md`](docs/index.md) · FAQ: [`docs/faq.md`](docs/faq.md) · Wizard: [`docs/wizard.md`](docs/wizard.md) · Docker (optional): [`docs/docker.md`](docs/docker.md) · Discord: https://discord.gg/clawd
|
|
24
|
+
|
|
25
|
+
Preferred setup: run the onboarding wizard (`clawdbot onboard`). It walks through gateway, workspace, providers, and skills. The CLI wizard is the recommended path and works on **macOS, Windows, and Linux**.
|
|
26
|
+
|
|
27
|
+
Using Claude Pro/Max subscription? See `docs/onboarding.md` for the Anthropic OAuth setup.
|
|
28
|
+
|
|
29
|
+
## Highlights
|
|
30
|
+
|
|
31
|
+
- **Local-first Gateway** — single control plane for sessions, providers, tools, and events.
|
|
32
|
+
- **Multi-surface inbox** — WhatsApp, Telegram, Discord, iMessage, WebChat, macOS, iOS/Android.
|
|
33
|
+
- **Voice Wake + Talk Mode** — always-on speech for macOS/iOS/Android with ElevenLabs.
|
|
34
|
+
- **Live Canvas** — agent-driven visual workspace with A2UI.
|
|
35
|
+
- **First-class tools** — browser, canvas, nodes, cron, sessions, and Discord actions.
|
|
36
|
+
- **Companion apps** — macOS menu bar app + iOS/Android nodes.
|
|
37
|
+
- **Onboarding + skills** — wizard-driven setup with bundled/managed/workspace skills.
|
|
38
|
+
|
|
39
|
+
## Everything we built so far
|
|
40
|
+
|
|
41
|
+
### Core platform
|
|
42
|
+
- Gateway WS control plane with sessions, presence, config, cron, webhooks, control UI, and Canvas host.
|
|
43
|
+
- CLI surface: gateway, agent, send, wizard, doctor/update, and TUI.
|
|
44
|
+
- Pi agent runtime in RPC mode with tool streaming and block streaming.
|
|
45
|
+
- Session model: `main` for direct chats, group isolation, activation modes, queue modes, reply-back.
|
|
46
|
+
- Media pipeline: images/audio/video, transcription hooks, size caps, temp file lifecycle.
|
|
47
|
+
|
|
48
|
+
### Surfaces + providers
|
|
49
|
+
- WhatsApp (Baileys), Telegram (grammY), Discord (discord.js), Signal (signal-cli), iMessage (imsg), WebChat.
|
|
50
|
+
- Group mention gating, reply tags, per-surface chunking and routing.
|
|
51
|
+
|
|
52
|
+
### Apps + nodes
|
|
53
|
+
- macOS app: menu bar control plane, Voice Wake/PTT, Talk Mode overlay, WebChat, Debug tools, SSH remote gateway control.
|
|
54
|
+
- iOS node: Canvas, Voice Wake, Talk Mode, camera, screen recording, Bonjour pairing.
|
|
55
|
+
- Android node: Canvas, Talk Mode, camera, screen recording, optional SMS.
|
|
56
|
+
- macOS node mode: system.run/notify + canvas/camera exposure.
|
|
57
|
+
|
|
58
|
+
### Tools + automation
|
|
59
|
+
- Browser control: dedicated clawd Chrome/Chromium, snapshots, actions, uploads, profiles.
|
|
60
|
+
- Canvas: A2UI push/reset, eval, snapshot.
|
|
61
|
+
- Nodes: camera snap/clip, screen record, location.get, notifications.
|
|
62
|
+
- Cron + wakeups; webhooks; Gmail Pub/Sub triggers.
|
|
63
|
+
- Skills platform: bundled, managed, and workspace skills with install gating + UI.
|
|
64
|
+
|
|
65
|
+
### Ops + packaging
|
|
66
|
+
- Control UI + WebChat served directly from the Gateway.
|
|
67
|
+
- Tailscale Serve/Funnel or SSH tunnels with token/password auth.
|
|
68
|
+
- Nix mode for declarative config; Docker-based installs.
|
|
69
|
+
- Health, doctor migrations, structured logging, release tooling.
|
|
70
|
+
|
|
71
|
+
## Changes since 2026.1.4 (2026-01-04)
|
|
72
|
+
|
|
73
|
+
### Highlights
|
|
74
|
+
- Project rename completed: CLIs, paths, bundle IDs, env vars, and docs unified on Clawdbot.
|
|
75
|
+
- Agent-to-agent relay: `sessions_send` ping‑pong with `REPLY_SKIP` plus announce step with `ANNOUNCE_SKIP`.
|
|
76
|
+
- Gateway config hot reload, configurable port, and Control UI base-path support.
|
|
77
|
+
- Sandbox options: per-session Docker sandbox with hardened limits + optional sandboxed Chromium.
|
|
78
|
+
- New node capability: `location.get` across macOS/iOS/Android (CLI + tools).
|
|
79
|
+
|
|
80
|
+
### Fixes
|
|
81
|
+
- Presence beacons keep node lists fresh; Instances view stays accurate.
|
|
82
|
+
- Block streaming + chunking reliability (Telegram/Discord ordering, fewer duplicates).
|
|
83
|
+
- WhatsApp GIF playback for MP4-based GIFs.
|
|
84
|
+
- Onboarding/Control UI basePath handling fixes + UI polish.
|
|
85
|
+
- Cleaner logging + clearer tool summaries.
|
|
86
|
+
|
|
87
|
+
### Breaking
|
|
88
|
+
- Tool names drop the `clawdbot_` prefix (`browser`, `canvas`, `nodes`, `cron`, `gateway`).
|
|
89
|
+
- Bash tool removed `stdinMode: "pty"` support (use tmux for real TTYs).
|
|
90
|
+
- Primary session key is fixed to `main` (or `global` for global scope).
|
|
91
|
+
|
|
92
|
+
## Project rename + changelog format
|
|
93
|
+
|
|
94
|
+
Clawdis → Clawdbot. The rename touched every surface, path, and bundle ID. To make that transition explicit, releases now use **date-based versions** (`YYYY.M.D`), and the changelog is compressed into milestone summaries instead of long semver trains. Full detail still lives in git history and the docs.
|
|
95
|
+
|
|
96
|
+
## How it works (short)
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
Your surfaces
|
|
100
|
+
│
|
|
101
|
+
▼
|
|
102
|
+
┌───────────────────────────────┐
|
|
103
|
+
│ Gateway │ ws://127.0.0.1:18789
|
|
104
|
+
│ (control plane) │ tcp://0.0.0.0:18790 (optional Bridge)
|
|
105
|
+
└──────────────┬────────────────┘
|
|
106
|
+
│
|
|
107
|
+
├─ Pi agent (RPC)
|
|
108
|
+
├─ CLI (clawdbot …)
|
|
109
|
+
├─ WebChat (browser)
|
|
110
|
+
├─ macOS app (Clawdbot.app)
|
|
111
|
+
└─ iOS node (Canvas + voice)
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Quick start (from source)
|
|
115
|
+
|
|
116
|
+
Runtime: **Node ≥22** + **pnpm**.
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
pnpm install
|
|
120
|
+
pnpm build
|
|
121
|
+
pnpm ui:build
|
|
122
|
+
|
|
123
|
+
# Recommended: run the onboarding wizard
|
|
124
|
+
pnpm clawdbot onboard
|
|
125
|
+
|
|
126
|
+
# Link WhatsApp (stores creds in ~/.clawdbot/credentials)
|
|
127
|
+
pnpm clawdbot login
|
|
128
|
+
|
|
129
|
+
# Start the gateway
|
|
130
|
+
pnpm clawdbot gateway --port 18789 --verbose
|
|
131
|
+
|
|
132
|
+
# Dev loop (auto-reload on TS changes)
|
|
133
|
+
pnpm gateway:watch
|
|
134
|
+
|
|
135
|
+
# Send a message
|
|
136
|
+
pnpm clawdbot send --to +1234567890 --message "Hello from Clawdbot"
|
|
137
|
+
|
|
138
|
+
# Talk to the assistant (optionally deliver back to WhatsApp/Telegram/Discord)
|
|
139
|
+
pnpm clawdbot agent --message "Ship checklist" --thinking high
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
If you run from source, prefer `pnpm clawdbot …` (not global `clawdbot`).
|
|
143
|
+
|
|
144
|
+
## Chat commands
|
|
145
|
+
|
|
146
|
+
Send these in WhatsApp/Telegram/WebChat (group commands are owner-only):
|
|
147
|
+
|
|
148
|
+
- `/status` — health + session info (group shows activation mode)
|
|
149
|
+
- `/new` or `/reset` — reset the session
|
|
150
|
+
- `/think <level>` — off|minimal|low|medium|high
|
|
151
|
+
- `/verbose on|off`
|
|
152
|
+
- `/restart` — restart the gateway (owner-only in groups)
|
|
153
|
+
- `/activation mention|always` — group activation toggle (groups only)
|
|
154
|
+
|
|
155
|
+
## Architecture
|
|
156
|
+
|
|
157
|
+
### TypeScript Gateway (src/gateway/server.ts)
|
|
158
|
+
- **Single HTTP+WS server** on `ws://127.0.0.1:18789` (bind policy: loopback/lan/tailnet/auto). The first frame must be `connect`; AJV validates frames against TypeBox schemas (`src/gateway/protocol`).
|
|
159
|
+
- **Single source of truth** for sessions, providers, cron, voice wake, and presence. Methods cover `send`, `agent`, `chat.*`, `sessions.*`, `config.*`, `cron.*`, `voicewake.*`, `node.*`, `system-*`, `wake`.
|
|
160
|
+
- **Events + snapshot**: handshake returns a snapshot (presence/health) and declares event types; runtime events include `agent`, `chat`, `presence`, `tick`, `health`, `heartbeat`, `cron`, `node.pair.*`, `voicewake.changed`, `shutdown`.
|
|
161
|
+
- **Idempotency & safety**: `send`/`agent`/`chat.send` require idempotency keys with a TTL cache (5 min, cap 1000) to avoid double‑sends on reconnects; payload sizes are capped per connection.
|
|
162
|
+
- **Bridge for nodes**: optional TCP bridge (`src/infra/bridge/server.ts`) is newline‑delimited JSON frames (`hello`, pairing, RPC, `invoke`); node connect/disconnect is surfaced into presence.
|
|
163
|
+
- **Control UI + Canvas Host**: HTTP serves Control UI assets (default `/`, optional base path) and can host a live‑reload Canvas host for nodes (`src/canvas-host/server.ts`), injecting the A2UI postMessage bridge.
|
|
164
|
+
|
|
165
|
+
### iOS app (apps/ios)
|
|
166
|
+
- **Discovery + pairing**: Bonjour discovery via `BridgeDiscoveryModel` (NWBrowser). `BridgeConnectionController` auto‑connects using Keychain token or allows manual host/port.
|
|
167
|
+
- **Node runtime**: `BridgeSession` (actor) maintains the `NWConnection`, hello handshake, ping/pong, RPC requests, and `invoke` callbacks.
|
|
168
|
+
- **Capabilities + commands**: advertises `canvas`, `screen`, `camera`, `voiceWake` (settings‑driven) and executes `canvas.*`, `canvas.a2ui.*`, `camera.*`, `screen.record` (`NodeAppModel.handleInvoke`).
|
|
169
|
+
- **Canvas**: `WKWebView` with bundled Canvas scaffold + A2UI, JS eval, snapshot capture, and `clawdbot://` deep‑link interception (`ScreenController`).
|
|
170
|
+
- **Voice + deep links**: voice wake sends `voice.transcript` events; `clawdbot://agent` links emit `agent.request`. Voice wake triggers sync via `voicewake.get` + `voicewake.changed`.
|
|
171
|
+
|
|
172
|
+
## Companion apps
|
|
173
|
+
|
|
174
|
+
The **macOS app is critical**: it runs the menu‑bar control plane, owns local permissions (TCC), hosts Voice Wake, exposes WebChat/debug tools, and coordinates local/remote gateway mode. Most “assistant” UX lives here.
|
|
175
|
+
|
|
176
|
+
### macOS (Clawdbot.app)
|
|
177
|
+
|
|
178
|
+
- Menu bar control for the Gateway and health.
|
|
179
|
+
- Voice Wake + push-to-talk overlay.
|
|
180
|
+
- WebChat + debug tools.
|
|
181
|
+
- Remote gateway control over SSH.
|
|
182
|
+
|
|
183
|
+
Build/run: `./scripts/restart-mac.sh` (packages + launches).
|
|
184
|
+
|
|
185
|
+
### iOS node (internal)
|
|
186
|
+
|
|
187
|
+
- Pairs as a node via the Bridge.
|
|
188
|
+
- Voice trigger forwarding + Canvas surface.
|
|
189
|
+
- Controlled via `clawdbot nodes …`.
|
|
190
|
+
|
|
191
|
+
Runbook: `docs/ios/connect.md`.
|
|
192
|
+
|
|
193
|
+
### Android node (internal)
|
|
194
|
+
|
|
195
|
+
- Pairs via the same Bridge + pairing flow as iOS.
|
|
196
|
+
- Exposes Canvas, Camera, and Screen capture commands.
|
|
197
|
+
- Runbook: `docs/android/connect.md`.
|
|
198
|
+
|
|
199
|
+
## Agent workspace + skills
|
|
200
|
+
|
|
201
|
+
- Workspace root: `~/clawd` (configurable via `agent.workspace`).
|
|
202
|
+
- Injected prompt files: `AGENTS.md`, `SOUL.md`, `TOOLS.md`.
|
|
203
|
+
- Skills: `~/clawd/skills/<skill>/SKILL.md`.
|
|
204
|
+
|
|
205
|
+
## Configuration
|
|
206
|
+
|
|
207
|
+
Minimal `~/.clawdbot/clawdbot.json`:
|
|
208
|
+
|
|
209
|
+
```json5
|
|
210
|
+
{
|
|
211
|
+
whatsapp: {
|
|
212
|
+
allowFrom: ["+1234567890"]
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
### WhatsApp
|
|
218
|
+
|
|
219
|
+
- Link the device: `pnpm clawdbot login` (stores creds in `~/.clawdbot/credentials`).
|
|
220
|
+
- Allowlist who can talk to the assistant via `whatsapp.allowFrom`.
|
|
221
|
+
|
|
222
|
+
### Telegram
|
|
223
|
+
|
|
224
|
+
- Set `TELEGRAM_BOT_TOKEN` or `telegram.botToken` (env wins).
|
|
225
|
+
- Optional: set `telegram.groups` (with `telegram.groups."*".requireMention`), `telegram.allowFrom`, or `telegram.webhookUrl` as needed.
|
|
226
|
+
|
|
227
|
+
```json5
|
|
228
|
+
{
|
|
229
|
+
telegram: {
|
|
230
|
+
botToken: "123456:ABCDEF"
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Discord
|
|
236
|
+
|
|
237
|
+
- Set `DISCORD_BOT_TOKEN` or `discord.token` (env wins).
|
|
238
|
+
- Optional: set `discord.slashCommand`, `discord.dm.allowFrom`, `discord.guilds`, or `discord.mediaMaxMb` as needed.
|
|
239
|
+
|
|
240
|
+
```json5
|
|
241
|
+
{
|
|
242
|
+
discord: {
|
|
243
|
+
token: "1234abcd"
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
```
|
|
247
|
+
|
|
248
|
+
Browser control (optional):
|
|
249
|
+
|
|
250
|
+
```json5
|
|
251
|
+
{
|
|
252
|
+
browser: {
|
|
253
|
+
enabled: true,
|
|
254
|
+
controlUrl: "http://127.0.0.1:18791",
|
|
255
|
+
color: "#FF4500"
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
## Docs
|
|
261
|
+
|
|
262
|
+
- [`docs/index.md`](docs/index.md) (overview)
|
|
263
|
+
- [`docs/configuration.md`](docs/configuration.md)
|
|
264
|
+
- [`docs/group-messages.md`](docs/group-messages.md)
|
|
265
|
+
- [`docs/gateway.md`](docs/gateway.md)
|
|
266
|
+
- [`docs/web.md`](docs/web.md)
|
|
267
|
+
- [`docs/discovery.md`](docs/discovery.md)
|
|
268
|
+
- [`docs/agent.md`](docs/agent.md)
|
|
269
|
+
- [`docs/discord.md`](docs/discord.md)
|
|
270
|
+
- [`docs/wizard.md`](docs/wizard.md)
|
|
271
|
+
- Webhooks + external triggers: [`docs/webhook.md`](docs/webhook.md)
|
|
272
|
+
- Gmail hooks (email → wake): [`docs/gmail-pubsub.md`](docs/gmail-pubsub.md)
|
|
273
|
+
|
|
274
|
+
## Email hooks (Gmail)
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
clawdbot hooks gmail setup --account you@gmail.com
|
|
278
|
+
clawdbot hooks gmail run
|
|
279
|
+
```
|
|
280
|
+
- [`docs/security.md`](docs/security.md)
|
|
281
|
+
- [`docs/troubleshooting.md`](docs/troubleshooting.md)
|
|
282
|
+
- [`docs/ios/connect.md`](docs/ios/connect.md)
|
|
283
|
+
- [`docs/clawdbot-mac.md`](docs/clawdbot-mac.md)
|
|
284
|
+
|
|
285
|
+
## Contributing
|
|
286
|
+
|
|
287
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines, maintainers, and how to submit PRs.
|
|
288
|
+
|
|
289
|
+
AI/vibe-coded PRs welcome! 🤖
|
|
290
|
+
|
|
291
|
+
## Clawd
|
|
292
|
+
|
|
293
|
+
Clawdbot was built for **Clawd**, a space lobster AI assistant.
|
|
294
|
+
|
|
295
|
+
- https://clawd.me
|
|
296
|
+
- https://soul.md
|
|
297
|
+
- https://steipete.me
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { CONFIG_DIR, resolveUserPath } from "../utils.js";
|
|
3
|
+
const DEFAULT_AGENT_DIR = path.join(CONFIG_DIR, "agent");
|
|
4
|
+
export function resolveClawdbotAgentDir() {
|
|
5
|
+
const override = process.env.CLAWDBOT_AGENT_DIR?.trim() ||
|
|
6
|
+
process.env.PI_CODING_AGENT_DIR?.trim() ||
|
|
7
|
+
DEFAULT_AGENT_DIR;
|
|
8
|
+
return resolveUserPath(override);
|
|
9
|
+
}
|
|
10
|
+
export function ensureClawdbotAgentEnv() {
|
|
11
|
+
const dir = resolveClawdbotAgentDir();
|
|
12
|
+
if (!process.env.CLAWDBOT_AGENT_DIR)
|
|
13
|
+
process.env.CLAWDBOT_AGENT_DIR = dir;
|
|
14
|
+
if (!process.env.PI_CODING_AGENT_DIR)
|
|
15
|
+
process.env.PI_CODING_AGENT_DIR = dir;
|
|
16
|
+
return dir;
|
|
17
|
+
}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
const DEFAULT_JOB_TTL_MS = 30 * 60 * 1000; // 30 minutes
|
|
2
|
+
const MIN_JOB_TTL_MS = 60 * 1000; // 1 minute
|
|
3
|
+
const MAX_JOB_TTL_MS = 3 * 60 * 60 * 1000; // 3 hours
|
|
4
|
+
function clampTtl(value) {
|
|
5
|
+
if (!value || Number.isNaN(value))
|
|
6
|
+
return DEFAULT_JOB_TTL_MS;
|
|
7
|
+
return Math.min(Math.max(value, MIN_JOB_TTL_MS), MAX_JOB_TTL_MS);
|
|
8
|
+
}
|
|
9
|
+
let jobTtlMs = clampTtl(Number.parseInt(process.env.PI_BASH_JOB_TTL_MS ?? "", 10));
|
|
10
|
+
const runningSessions = new Map();
|
|
11
|
+
const finishedSessions = new Map();
|
|
12
|
+
let sweeper = null;
|
|
13
|
+
export function addSession(session) {
|
|
14
|
+
runningSessions.set(session.id, session);
|
|
15
|
+
startSweeper();
|
|
16
|
+
}
|
|
17
|
+
export function getSession(id) {
|
|
18
|
+
return runningSessions.get(id);
|
|
19
|
+
}
|
|
20
|
+
export function getFinishedSession(id) {
|
|
21
|
+
return finishedSessions.get(id);
|
|
22
|
+
}
|
|
23
|
+
export function deleteSession(id) {
|
|
24
|
+
runningSessions.delete(id);
|
|
25
|
+
finishedSessions.delete(id);
|
|
26
|
+
}
|
|
27
|
+
export function appendOutput(session, stream, chunk) {
|
|
28
|
+
session.pendingStdout ??= [];
|
|
29
|
+
session.pendingStderr ??= [];
|
|
30
|
+
const buffer = stream === "stdout" ? session.pendingStdout : session.pendingStderr;
|
|
31
|
+
buffer.push(chunk);
|
|
32
|
+
session.totalOutputChars += chunk.length;
|
|
33
|
+
const aggregated = trimWithCap(session.aggregated + chunk, session.maxOutputChars);
|
|
34
|
+
session.truncated =
|
|
35
|
+
session.truncated ||
|
|
36
|
+
aggregated.length < session.aggregated.length + chunk.length;
|
|
37
|
+
session.aggregated = aggregated;
|
|
38
|
+
session.tail = tail(session.aggregated, 2000);
|
|
39
|
+
}
|
|
40
|
+
export function drainSession(session) {
|
|
41
|
+
const stdout = session.pendingStdout.join("");
|
|
42
|
+
const stderr = session.pendingStderr.join("");
|
|
43
|
+
session.pendingStdout = [];
|
|
44
|
+
session.pendingStderr = [];
|
|
45
|
+
return { stdout, stderr };
|
|
46
|
+
}
|
|
47
|
+
export function markExited(session, exitCode, exitSignal, status) {
|
|
48
|
+
session.exited = true;
|
|
49
|
+
session.exitCode = exitCode;
|
|
50
|
+
session.exitSignal = exitSignal;
|
|
51
|
+
session.tail = tail(session.aggregated, 2000);
|
|
52
|
+
moveToFinished(session, status);
|
|
53
|
+
}
|
|
54
|
+
export function markBackgrounded(session) {
|
|
55
|
+
session.backgrounded = true;
|
|
56
|
+
}
|
|
57
|
+
function moveToFinished(session, status) {
|
|
58
|
+
runningSessions.delete(session.id);
|
|
59
|
+
if (!session.backgrounded)
|
|
60
|
+
return;
|
|
61
|
+
finishedSessions.set(session.id, {
|
|
62
|
+
id: session.id,
|
|
63
|
+
command: session.command,
|
|
64
|
+
startedAt: session.startedAt,
|
|
65
|
+
endedAt: Date.now(),
|
|
66
|
+
cwd: session.cwd,
|
|
67
|
+
status,
|
|
68
|
+
exitCode: session.exitCode,
|
|
69
|
+
exitSignal: session.exitSignal,
|
|
70
|
+
aggregated: session.aggregated,
|
|
71
|
+
tail: session.tail,
|
|
72
|
+
truncated: session.truncated,
|
|
73
|
+
totalOutputChars: session.totalOutputChars,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
export function tail(text, max = 2000) {
|
|
77
|
+
if (text.length <= max)
|
|
78
|
+
return text;
|
|
79
|
+
return text.slice(text.length - max);
|
|
80
|
+
}
|
|
81
|
+
export function trimWithCap(text, max) {
|
|
82
|
+
if (text.length <= max)
|
|
83
|
+
return text;
|
|
84
|
+
return text.slice(text.length - max);
|
|
85
|
+
}
|
|
86
|
+
export function listRunningSessions() {
|
|
87
|
+
return Array.from(runningSessions.values()).filter((s) => s.backgrounded);
|
|
88
|
+
}
|
|
89
|
+
export function listFinishedSessions() {
|
|
90
|
+
return Array.from(finishedSessions.values());
|
|
91
|
+
}
|
|
92
|
+
export function clearFinished() {
|
|
93
|
+
finishedSessions.clear();
|
|
94
|
+
}
|
|
95
|
+
export function resetProcessRegistryForTests() {
|
|
96
|
+
runningSessions.clear();
|
|
97
|
+
finishedSessions.clear();
|
|
98
|
+
stopSweeper();
|
|
99
|
+
}
|
|
100
|
+
export function setJobTtlMs(value) {
|
|
101
|
+
if (value === undefined || Number.isNaN(value))
|
|
102
|
+
return;
|
|
103
|
+
jobTtlMs = clampTtl(value);
|
|
104
|
+
stopSweeper();
|
|
105
|
+
startSweeper();
|
|
106
|
+
}
|
|
107
|
+
function pruneFinishedSessions() {
|
|
108
|
+
const cutoff = Date.now() - jobTtlMs;
|
|
109
|
+
for (const [id, session] of finishedSessions.entries()) {
|
|
110
|
+
if (session.endedAt < cutoff) {
|
|
111
|
+
finishedSessions.delete(id);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function startSweeper() {
|
|
116
|
+
if (sweeper)
|
|
117
|
+
return;
|
|
118
|
+
sweeper = setInterval(pruneFinishedSessions, Math.max(30_000, jobTtlMs / 6));
|
|
119
|
+
sweeper.unref?.();
|
|
120
|
+
}
|
|
121
|
+
function stopSweeper() {
|
|
122
|
+
if (!sweeper)
|
|
123
|
+
return;
|
|
124
|
+
clearInterval(sweeper);
|
|
125
|
+
sweeper = null;
|
|
126
|
+
}
|