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
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Agent session tools for listing sessions, fetching history, and sending cross-session messages"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying session tools
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Session Tools
|
|
8
|
+
|
|
9
|
+
Goal: small, hard-to-misuse tool surface so agents can list sessions, fetch history, and send to another session.
|
|
10
|
+
|
|
11
|
+
## Tool Names
|
|
12
|
+
- `sessions_list`
|
|
13
|
+
- `sessions_history`
|
|
14
|
+
- `sessions_send`
|
|
15
|
+
|
|
16
|
+
## Key Model
|
|
17
|
+
- Main direct chat bucket is always the literal key `"main"`.
|
|
18
|
+
- Group chats use `surface:group:<id>` or `surface:channel:<id>`.
|
|
19
|
+
- Cron jobs use `cron:<job.id>`.
|
|
20
|
+
- Hooks use `hook:<uuid>` unless explicitly set.
|
|
21
|
+
- Node bridge uses `node-<nodeId>` unless explicitly set.
|
|
22
|
+
|
|
23
|
+
`global` and `unknown` are internal-only and never listed. If `session.scope = "global"`, we alias it to `main` for all tools so callers never see `global`.
|
|
24
|
+
|
|
25
|
+
## sessions_list
|
|
26
|
+
List sessions as an array of rows.
|
|
27
|
+
|
|
28
|
+
Parameters:
|
|
29
|
+
- `kinds?: string[]` filter: any of `"main" | "group" | "cron" | "hook" | "node" | "other"`
|
|
30
|
+
- `limit?: number` max rows (default: server default, clamp e.g. 200)
|
|
31
|
+
- `activeMinutes?: number` only sessions updated within N minutes
|
|
32
|
+
- `messageLimit?: number` 0 = no messages (default 0); >0 = include last N messages
|
|
33
|
+
|
|
34
|
+
Behavior:
|
|
35
|
+
- `messageLimit > 0` fetches `chat.history` per session and includes the last N messages.
|
|
36
|
+
- Tool results are filtered out in list output; use `sessions_history` for tool messages.
|
|
37
|
+
|
|
38
|
+
Row shape (JSON):
|
|
39
|
+
- `key`: session key (string)
|
|
40
|
+
- `kind`: `main | group | cron | hook | node | other`
|
|
41
|
+
- `provider`: `whatsapp | telegram | discord | signal | imessage | webchat | internal | unknown`
|
|
42
|
+
- `displayName` (group display label if available)
|
|
43
|
+
- `updatedAt` (ms)
|
|
44
|
+
- `sessionId`
|
|
45
|
+
- `model`, `contextTokens`, `totalTokens`
|
|
46
|
+
- `thinkingLevel`, `verboseLevel`, `systemSent`, `abortedLastRun`
|
|
47
|
+
- `sendPolicy` (session override if set)
|
|
48
|
+
- `lastChannel`, `lastTo`
|
|
49
|
+
- `transcriptPath` (best-effort path derived from store dir + sessionId)
|
|
50
|
+
- `messages?` (only when `messageLimit > 0`)
|
|
51
|
+
|
|
52
|
+
## sessions_history
|
|
53
|
+
Fetch transcript for one session.
|
|
54
|
+
|
|
55
|
+
Parameters:
|
|
56
|
+
- `sessionKey` (required)
|
|
57
|
+
- `limit?: number` max messages (server clamps)
|
|
58
|
+
- `includeTools?: boolean` (default false)
|
|
59
|
+
|
|
60
|
+
Behavior:
|
|
61
|
+
- `includeTools=false` filters `role: "toolResult"` messages.
|
|
62
|
+
- Returns messages array in the raw transcript format.
|
|
63
|
+
|
|
64
|
+
## sessions_send
|
|
65
|
+
Send a message into another session.
|
|
66
|
+
|
|
67
|
+
Parameters:
|
|
68
|
+
- `sessionKey` (required)
|
|
69
|
+
- `message` (required)
|
|
70
|
+
- `timeoutSeconds?: number` (default >0; 0 = fire-and-forget)
|
|
71
|
+
|
|
72
|
+
Behavior:
|
|
73
|
+
- `timeoutSeconds = 0`: enqueue and return `{ runId, status: "accepted" }`.
|
|
74
|
+
- `timeoutSeconds > 0`: wait up to N seconds for completion, then return `{ runId, status: "ok", reply }`.
|
|
75
|
+
- If wait times out: `{ runId, status: "timeout", error }`. Run continues; call `sessions_history` later.
|
|
76
|
+
- If the run fails: `{ runId, status: "error", error }`.
|
|
77
|
+
- Waits via gateway `agent.wait` (server-side) so reconnects don't drop the wait.
|
|
78
|
+
- Agent-to-agent message context is injected for the primary run.
|
|
79
|
+
- After the primary run completes, Clawdbot runs a **reply-back loop**:
|
|
80
|
+
- Round 2+ alternates between requester and target agents.
|
|
81
|
+
- Reply exactly `REPLY_SKIP` to stop the ping‑pong.
|
|
82
|
+
- Max turns is `session.agentToAgent.maxPingPongTurns` (0–5, default 5).
|
|
83
|
+
- Once the loop ends, Clawdbot runs the **agent‑to‑agent announce step** (target agent only):
|
|
84
|
+
- Reply exactly `ANNOUNCE_SKIP` to stay silent.
|
|
85
|
+
- Any other reply is sent to the target channel.
|
|
86
|
+
- Announce step includes the original request + round‑1 reply + latest ping‑pong reply.
|
|
87
|
+
|
|
88
|
+
## Provider Field
|
|
89
|
+
- For groups, `provider` is the `surface` recorded on the session entry.
|
|
90
|
+
- For direct chats, `provider` maps from `lastChannel`.
|
|
91
|
+
- For cron/hook/node, `provider` is `internal`.
|
|
92
|
+
- If missing, `provider` is `unknown`.
|
|
93
|
+
|
|
94
|
+
## Security / Send Policy
|
|
95
|
+
Policy-based blocking by surface/chat type (not per session id).
|
|
96
|
+
|
|
97
|
+
```json
|
|
98
|
+
{
|
|
99
|
+
"session": {
|
|
100
|
+
"sendPolicy": {
|
|
101
|
+
"rules": [
|
|
102
|
+
{
|
|
103
|
+
"match": { "surface": "discord", "chatType": "group" },
|
|
104
|
+
"action": "deny"
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"default": "allow"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Runtime override (per session entry):
|
|
114
|
+
- `sendPolicy: "allow" | "deny"` (unset = inherit config)
|
|
115
|
+
- Settable via `sessions.patch` or owner-only `/send on|off|inherit`.
|
|
116
|
+
|
|
117
|
+
Enforcement points:
|
|
118
|
+
- `chat.send` / `agent` (gateway)
|
|
119
|
+
- auto-reply delivery logic
|
package/docs/session.md
ADDED
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Session management rules, keys, and persistence for chats"
|
|
3
|
+
read_when:
|
|
4
|
+
- Modifying session handling or storage
|
|
5
|
+
---
|
|
6
|
+
# Session Management
|
|
7
|
+
|
|
8
|
+
Clawdbot treats **one session as primary**. The canonical key is fixed to `main` for direct chats (or `global` when scope is global); no configuration is required. `session.mainKey` is ignored. Older/local sessions can stay on disk, but only the primary key is used for desktop/web chat and direct agent calls.
|
|
9
|
+
|
|
10
|
+
## Gateway is the source of truth
|
|
11
|
+
All session state is **owned by the gateway** (the “master” Clawdbot). UI clients (macOS app, WebChat, etc.) must query the gateway for session lists and token counts instead of reading local files.
|
|
12
|
+
|
|
13
|
+
- In **remote mode**, the session store you care about lives on the remote gateway host, not your Mac.
|
|
14
|
+
- Token counts shown in UIs come from the gateway’s store fields (`inputTokens`, `outputTokens`, `totalTokens`, `contextTokens`). Clients do not parse JSONL transcripts to “fix up” totals.
|
|
15
|
+
|
|
16
|
+
## Where state lives
|
|
17
|
+
- On the **gateway host**:
|
|
18
|
+
- Store file: `~/.clawdbot/sessions/sessions.json` (legacy: `~/.clawdbot/sessions.json`).
|
|
19
|
+
- Transcripts: `~/.clawdbot/sessions/<SessionId>.jsonl` (one file per session id).
|
|
20
|
+
- The store is a map `sessionKey -> { sessionId, updatedAt, ... }`. Deleting entries is safe; they are recreated on demand.
|
|
21
|
+
- Group entries may include `displayName`, `surface`, `subject`, `room`, and `space` to label sessions in UIs.
|
|
22
|
+
- Clawdbot does **not** read legacy Pi/Tau session folders.
|
|
23
|
+
|
|
24
|
+
## Mapping transports → session keys
|
|
25
|
+
- Direct chats (WhatsApp, Telegram, Discord, desktop Web Chat) all collapse to the **primary key** so they share context.
|
|
26
|
+
- Multiple phone numbers can map to that same key; they act as transports into the same conversation.
|
|
27
|
+
- Group chats isolate state with `surface:group:<id>` keys (rooms/channels use `surface:channel:<id>`); do not reuse the primary key for groups. (Discord display names show `discord:<guildSlug>#<channelSlug>`.)
|
|
28
|
+
- Legacy `group:<surface>:<id>` and `group:<id>` keys are still recognized.
|
|
29
|
+
- Other sources:
|
|
30
|
+
- Cron jobs: `cron:<job.id>`
|
|
31
|
+
- Webhooks: `hook:<uuid>` (unless explicitly set by the hook)
|
|
32
|
+
- Node bridge runs: `node-<nodeId>`
|
|
33
|
+
|
|
34
|
+
## Lifecyle
|
|
35
|
+
- Idle expiry: `session.idleMinutes` (default 60). After the timeout a new `sessionId` is minted on the next message.
|
|
36
|
+
- Reset triggers: exact `/new` or `/reset` (plus any extras in `resetTriggers`) start a fresh session id and pass the remainder of the message through. If `/new` or `/reset` is sent alone, Clawdbot runs a short “hello” greeting turn to confirm the reset.
|
|
37
|
+
- Manual reset: delete specific keys from the store or remove the JSONL transcript; the next message recreates them.
|
|
38
|
+
|
|
39
|
+
## Send policy (optional)
|
|
40
|
+
Block delivery for specific session types without listing individual ids.
|
|
41
|
+
|
|
42
|
+
```json5
|
|
43
|
+
{
|
|
44
|
+
session: {
|
|
45
|
+
sendPolicy: {
|
|
46
|
+
rules: [
|
|
47
|
+
{ action: "deny", match: { surface: "discord", chatType: "group" } },
|
|
48
|
+
{ action: "deny", match: { keyPrefix: "cron:" } }
|
|
49
|
+
],
|
|
50
|
+
default: "allow"
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Runtime override (owner only):
|
|
57
|
+
- `/send on` → allow for this session
|
|
58
|
+
- `/send off` → deny for this session
|
|
59
|
+
- `/send inherit` → clear override and use config rules
|
|
60
|
+
|
|
61
|
+
## Configuration (optional rename example)
|
|
62
|
+
```json5
|
|
63
|
+
// ~/.clawdbot/clawdbot.json
|
|
64
|
+
{
|
|
65
|
+
session: {
|
|
66
|
+
scope: "per-sender", // keep group keys separate
|
|
67
|
+
idleMinutes: 120,
|
|
68
|
+
resetTriggers: ["/new", "/reset"],
|
|
69
|
+
store: "~/.clawdbot/sessions/sessions.json",
|
|
70
|
+
// mainKey is ignored; primary key is fixed to "main"
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Inspecting
|
|
76
|
+
- `pnpm clawdbot status` — shows store path and recent sessions.
|
|
77
|
+
- `pnpm clawdbot sessions --json` — dumps every entry (filter with `--active <minutes>`).
|
|
78
|
+
- `pnpm clawdbot gateway call sessions.list --params '{}'` — fetch sessions from the running gateway (use `--url`/`--token` for remote gateway access).
|
|
79
|
+
- Send `/status` in chat to see whether the agent is reachable, how much of the session context is used, current thinking/verbose toggles, and when your WhatsApp web creds were last refreshed (helps spot relink needs).
|
|
80
|
+
- JSONL transcripts can be opened directly to review full turns.
|
|
81
|
+
|
|
82
|
+
## Tips
|
|
83
|
+
- Keep the primary key dedicated to 1:1 traffic; let groups keep their own keys.
|
|
84
|
+
- When automating cleanup, delete individual keys instead of the whole store to preserve context elsewhere.
|
package/docs/sessions.md
ADDED
package/docs/setup.md
ADDED
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Setup guide: keep your Clawdbot setup tailored while staying up-to-date"
|
|
3
|
+
read_when:
|
|
4
|
+
- Setting up a new machine
|
|
5
|
+
- You want “latest + greatest” without breaking your personal setup
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Setup
|
|
9
|
+
|
|
10
|
+
Last updated: 2026-01-01
|
|
11
|
+
|
|
12
|
+
## TL;DR
|
|
13
|
+
- **Tailoring lives outside the repo:** `~/clawd` (workspace) + `~/.clawdbot/clawdbot.json` (config).
|
|
14
|
+
- **Stable workflow:** install the macOS app; let it run the bundled Gateway.
|
|
15
|
+
- **Bleeding edge workflow:** run the Gateway yourself via `pnpm gateway:watch`, then point the macOS app at it using **Debug Settings → Gateway → Attach only**.
|
|
16
|
+
|
|
17
|
+
## Prereqs (from source)
|
|
18
|
+
- Node `>=22`
|
|
19
|
+
- `pnpm`
|
|
20
|
+
- Docker (optional; only for containerized setup/e2e — see `docs/docker.md`)
|
|
21
|
+
|
|
22
|
+
## Tailoring strategy (so updates don’t hurt)
|
|
23
|
+
|
|
24
|
+
If you want “100% tailored to me” *and* easy updates, keep your customization in:
|
|
25
|
+
|
|
26
|
+
- **Config:** `~/.clawdbot/clawdbot.json` (JSON/JSON5-ish)
|
|
27
|
+
- **Workspace:** `~/clawd` (skills, prompts, memories; make it a private git repo)
|
|
28
|
+
|
|
29
|
+
Bootstrap once:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
clawdbot setup
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
From inside this repo, use the local CLI entry:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
pnpm clawdbot setup
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Stable workflow (macOS app first)
|
|
42
|
+
|
|
43
|
+
1) Install + launch **Clawdbot.app** (menu bar).
|
|
44
|
+
2) Complete the onboarding/permissions checklist (TCC prompts).
|
|
45
|
+
3) Ensure Gateway is **Local** and running (the app manages it).
|
|
46
|
+
4) Link surfaces (example: WhatsApp):
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
clawdbot login
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
5) Sanity check:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
clawdbot health
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
If onboarding is still WIP/broken on your build:
|
|
59
|
+
- Run `clawdbot setup`, then `clawdbot login`, then start the Gateway manually (`clawdbot gateway`).
|
|
60
|
+
|
|
61
|
+
## Bleeding edge workflow (Gateway in a terminal)
|
|
62
|
+
|
|
63
|
+
Goal: work on the TypeScript Gateway, get hot reload, keep the macOS app UI attached.
|
|
64
|
+
|
|
65
|
+
### 0) (Optional) Run the macOS app from source too
|
|
66
|
+
|
|
67
|
+
If you also want the macOS app on the bleeding edge:
|
|
68
|
+
|
|
69
|
+
```bash
|
|
70
|
+
./scripts/restart-mac.sh
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 1) Start the dev Gateway
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
pnpm install
|
|
77
|
+
pnpm gateway:watch
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
`gateway:watch` runs `src/index.ts gateway --force` and reloads on `src/**/*.ts` changes.
|
|
81
|
+
|
|
82
|
+
### 2) Point the macOS app at your running Gateway
|
|
83
|
+
|
|
84
|
+
In **Clawdbot.app**:
|
|
85
|
+
|
|
86
|
+
- Connection Mode: **Local**
|
|
87
|
+
- Settings → **Debug Settings** → **Gateway** → enable **Attach only**
|
|
88
|
+
|
|
89
|
+
This makes the app **only connect to an already-running gateway** and **never spawn** its own.
|
|
90
|
+
|
|
91
|
+
### 3) Verify
|
|
92
|
+
|
|
93
|
+
- In-app Gateway status should read **“Using existing gateway …”**
|
|
94
|
+
- Or via CLI:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
pnpm clawdbot health
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Common footguns
|
|
101
|
+
- **Attach only enabled, but nothing is running:** app shows “Attach-only enabled; no gateway to attach”.
|
|
102
|
+
- **Wrong port:** Gateway WS defaults to `ws://127.0.0.1:18789`; keep app + CLI on the same port.
|
|
103
|
+
- **Where state lives:**
|
|
104
|
+
- Credentials: `~/.clawdbot/credentials/`
|
|
105
|
+
- Sessions/logs: `~/.clawdbot/sessions/`
|
|
106
|
+
|
|
107
|
+
## Updating (without wrecking your setup)
|
|
108
|
+
|
|
109
|
+
- Keep `~/clawd` and `~/.clawdbot/` as “your stuff”; don’t put personal prompts/config into the `clawdbot` repo.
|
|
110
|
+
- Updating source: `git pull` + `pnpm install` (when lockfile changed) + keep using `pnpm gateway:watch`.
|
|
111
|
+
|
|
112
|
+
## Related docs
|
|
113
|
+
|
|
114
|
+
- `docs/gateway.md` (Gateway runbook; flags, supervision, ports)
|
|
115
|
+
- `docs/configuration.md` (config schema + examples)
|
|
116
|
+
- `docs/discord.md` and `docs/telegram.md` (reply tags + replyToMode settings)
|
|
117
|
+
- `docs/clawd.md` (personal assistant setup)
|
|
118
|
+
- `docs/clawdbot-mac.md` (macOS app behavior; gateway lifecycle + “Attach only”)
|
package/docs/signal.md
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Signal support via signal-cli (JSON-RPC + SSE), setup, and number model"
|
|
3
|
+
read_when:
|
|
4
|
+
- Setting up Signal support
|
|
5
|
+
- Debugging Signal send/receive
|
|
6
|
+
---
|
|
7
|
+
# Signal (signal-cli)
|
|
8
|
+
|
|
9
|
+
Status: external CLI integration only. No libsignal embedding.
|
|
10
|
+
|
|
11
|
+
## Why
|
|
12
|
+
- Signal OSS stack is GPL/AGPL; not compatible with Clawdbot MIT if bundled.
|
|
13
|
+
- signal-cli is unofficial; must stay up to date (Signal server churn).
|
|
14
|
+
|
|
15
|
+
## The “number model” (important)
|
|
16
|
+
- Clawdbot is a **device** connected via `signal-cli`.
|
|
17
|
+
- If you run `signal-cli` on **your personal Signal account**, Clawdbot will **not** respond to messages sent from that same account (loop protection: ignore sender==account).
|
|
18
|
+
- Result: you **cannot** “text yourself” to chat with the AI.
|
|
19
|
+
- For “I text her, she texts me back” you want a **separate Signal account/number for the bot**:
|
|
20
|
+
- Bot number runs `signal-cli` (linked device)
|
|
21
|
+
- Your personal number is in `signal.allowFrom`
|
|
22
|
+
- You DM the bot number; Clawdbot replies back to you
|
|
23
|
+
|
|
24
|
+
You can still run Clawdbot on your own Signal account if your goal is “respond to other people as me”, but not for self-chat.
|
|
25
|
+
|
|
26
|
+
## Model
|
|
27
|
+
- Run `signal-cli` as separate process (user-installed).
|
|
28
|
+
- Prefer `daemon --http=127.0.0.1:PORT` for JSON-RPC + SSE.
|
|
29
|
+
- Alternative: `jsonRpc` mode over stdin/stdout.
|
|
30
|
+
|
|
31
|
+
## Quickstart (bot number)
|
|
32
|
+
1) Install `signal-cli` (keep Java installed).
|
|
33
|
+
- If you use the CLI wizard, it can auto-install to `~/.clawdbot/tools/signal-cli/...`.
|
|
34
|
+
- If you want a pinned version (example: `v0.13.22`), install manually:
|
|
35
|
+
- Download the release asset for your platform from GitHub (tag `v0.13.22`).
|
|
36
|
+
- Extract it somewhere stable (example: `~/.clawdbot/tools/signal-cli/0.13.22/`).
|
|
37
|
+
- Set `signal.cliPath` to the extracted `signal-cli` binary path.
|
|
38
|
+
2) Link the bot account as a device:
|
|
39
|
+
- Run: `signal-cli link -n "Clawdbot"`
|
|
40
|
+
- Scan QR in Signal: Settings → Linked Devices → Link New Device
|
|
41
|
+
- Verify: `signal-cli listAccounts` includes the bot E.164
|
|
42
|
+
3) Configure `~/.clawdbot/clawdbot.json`:
|
|
43
|
+
```json5
|
|
44
|
+
{
|
|
45
|
+
signal: {
|
|
46
|
+
enabled: true,
|
|
47
|
+
account: "+15551234567", // bot number (recommended)
|
|
48
|
+
cliPath: "signal-cli",
|
|
49
|
+
autoStart: true,
|
|
50
|
+
httpHost: "127.0.0.1",
|
|
51
|
+
httpPort: 8080,
|
|
52
|
+
|
|
53
|
+
// Who is allowed to talk to the bot
|
|
54
|
+
allowFrom: ["+15557654321"] // your personal number (or "*")
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
4) Run gateway; sanity probe:
|
|
59
|
+
- `clawdbot gateway call providers.status --params '{"probe":true}'`
|
|
60
|
+
- Expect `signal.probe.ok=true` and `signal.probe.version`.
|
|
61
|
+
5) DM the bot number from your phone; Clawdbot replies.
|
|
62
|
+
|
|
63
|
+
## “Do I need a separate number?”
|
|
64
|
+
- If you want “I text her and she texts me back”, yes: **use a separate Signal account/number for the bot**.
|
|
65
|
+
- Your personal account can run `signal-cli`, but you can’t self-chat (Signal loop protection; Clawdbot ignores sender==account).
|
|
66
|
+
|
|
67
|
+
If you have a second phone:
|
|
68
|
+
- Create/activate the bot number on that phone.
|
|
69
|
+
- Run `signal-cli link -n "Clawdbot"` on your Mac, scan the QR on the bot phone.
|
|
70
|
+
- Put your personal number in `signal.allowFrom`, then DM the bot number from your personal phone.
|
|
71
|
+
|
|
72
|
+
## Endpoints (daemon --http)
|
|
73
|
+
- `POST /api/v1/rpc` JSON-RPC request (single or batch).
|
|
74
|
+
- `GET /api/v1/events` SSE stream of `receive` notifications.
|
|
75
|
+
- `GET /api/v1/check` health probe (200 = up).
|
|
76
|
+
|
|
77
|
+
## Multi-account
|
|
78
|
+
- Start daemon without `-a`.
|
|
79
|
+
- Include `params.account` (E164) on JSON-RPC calls.
|
|
80
|
+
- SSE `?account=+E164` filters events; no param = all accounts.
|
|
81
|
+
|
|
82
|
+
## Troubleshooting
|
|
83
|
+
- Gateway log coloring: `signal-cli: ...` lines are classified by severity; red means “treat this as an error”.
|
|
84
|
+
- `Failed to initialize HTTP Server` typically means the daemon can’t bind the HTTP port (already in use). Stop the other daemon or change `signal.httpPort`.
|
|
85
|
+
|
|
86
|
+
## Minimal RPC surface
|
|
87
|
+
- `send` (recipient/groupId/username, message, attachments).
|
|
88
|
+
- `listGroups` (map group IDs).
|
|
89
|
+
- `subscribeReceive` / `unsubscribeReceive` (if manual receive).
|
|
90
|
+
- `startLink` / `finishLink` (optional device link flow).
|
|
91
|
+
|
|
92
|
+
## Addressing (send targets)
|
|
93
|
+
- Direct: `signal:+15551234567` (or plain `+15551234567`)
|
|
94
|
+
- Groups: `signal:group:<groupId>`
|
|
95
|
+
- Usernames: `username:<name>` / `u:<name>`
|
|
96
|
+
|
|
97
|
+
## Process plan (Clawdbot adapter)
|
|
98
|
+
1) Detect `signal-cli` binary; refuse if missing.
|
|
99
|
+
2) Launch daemon (HTTP preferred), store PID.
|
|
100
|
+
3) Poll `/api/v1/check` until ready.
|
|
101
|
+
4) Open SSE stream; parse `event: receive`.
|
|
102
|
+
5) Translate receive payload into Clawdbot surface model.
|
|
103
|
+
6) On SSE disconnect, backoff + reconnect.
|
|
104
|
+
|
|
105
|
+
## Storage
|
|
106
|
+
- signal-cli data lives in `$XDG_DATA_HOME/signal-cli/data` or
|
|
107
|
+
`$HOME/.local/share/signal-cli/data`.
|
|
108
|
+
|
|
109
|
+
## References (local)
|
|
110
|
+
- `~/Projects/oss/signal-cli/README.md`
|
|
111
|
+
- `~/Projects/oss/signal-cli/man/signal-cli-jsonrpc.5.adoc`
|
|
112
|
+
- `~/Projects/oss/signal-cli/src/main/java/org/asamk/signal/http/HttpServerHandler.java`
|
|
113
|
+
- `~/Projects/oss/signal-cli/src/main/java/org/asamk/signal/jsonrpc/SignalJsonRpcDispatcherHandler.java`
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Skills config schema and examples"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying skills config
|
|
5
|
+
- Adjusting bundled allowlist or install behavior
|
|
6
|
+
---
|
|
7
|
+
# Skills Config
|
|
8
|
+
|
|
9
|
+
All skills-related configuration lives under `skills` in `~/.clawdbot/clawdbot.json`.
|
|
10
|
+
|
|
11
|
+
```json5
|
|
12
|
+
{
|
|
13
|
+
skills: {
|
|
14
|
+
allowBundled: ["brave-search", "gemini"],
|
|
15
|
+
load: {
|
|
16
|
+
extraDirs: [
|
|
17
|
+
"~/Projects/agent-scripts/skills",
|
|
18
|
+
"~/Projects/oss/some-skill-pack/skills"
|
|
19
|
+
]
|
|
20
|
+
},
|
|
21
|
+
install: {
|
|
22
|
+
preferBrew: true,
|
|
23
|
+
nodeManager: "npm" // npm | pnpm | yarn | bun
|
|
24
|
+
},
|
|
25
|
+
entries: {
|
|
26
|
+
"nano-banana-pro": {
|
|
27
|
+
enabled: true,
|
|
28
|
+
apiKey: "GEMINI_KEY_HERE",
|
|
29
|
+
env: {
|
|
30
|
+
GEMINI_API_KEY: "GEMINI_KEY_HERE"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
peekaboo: { enabled: true },
|
|
34
|
+
sag: { enabled: false }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Fields
|
|
41
|
+
|
|
42
|
+
- `allowBundled`: optional allowlist for **bundled** skills only. When set, only
|
|
43
|
+
bundled skills in the list are eligible (managed/workspace skills unaffected).
|
|
44
|
+
- `load.extraDirs`: additional skill directories to scan (lowest precedence).
|
|
45
|
+
- `install.preferBrew`: prefer brew installers when available (default: true).
|
|
46
|
+
- `install.nodeManager`: node installer preference (`npm` | `pnpm` | `yarn` | `bun`, default: npm).
|
|
47
|
+
- `entries.<skillKey>`: per-skill overrides.
|
|
48
|
+
|
|
49
|
+
Per-skill fields:
|
|
50
|
+
- `enabled`: set `false` to disable a skill even if it’s bundled/installed.
|
|
51
|
+
- `env`: environment variables injected for the agent run (only if not already set).
|
|
52
|
+
- `apiKey`: optional convenience for skills that declare a primary env var.
|
|
53
|
+
|
|
54
|
+
## Notes
|
|
55
|
+
|
|
56
|
+
- Keys under `entries` map to the skill name by default. If a skill defines
|
|
57
|
+
`metadata.clawdbot.skillKey`, use that key instead.
|
|
58
|
+
- Changes to skills are picked up on the next new session.
|
package/docs/skills.md
ADDED
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Skills: managed vs workspace, gating rules, and config/env wiring"
|
|
3
|
+
read_when:
|
|
4
|
+
- Adding or modifying skills
|
|
5
|
+
- Changing skill gating or load rules
|
|
6
|
+
---
|
|
7
|
+
<!-- {% raw %} -->
|
|
8
|
+
# Skills (Clawdbot)
|
|
9
|
+
|
|
10
|
+
Clawdbot uses **AgentSkills-compatible** skill folders to teach the agent how to use tools. Each skill is a directory containing a `SKILL.md` with YAML frontmatter and instructions. Clawdbot loads **bundled skills** plus optional local overrides, and filters them at load time based on environment, config, and binary presence.
|
|
11
|
+
|
|
12
|
+
## Locations and precedence
|
|
13
|
+
|
|
14
|
+
Skills are loaded from **three** places:
|
|
15
|
+
|
|
16
|
+
1) **Bundled skills**: shipped with the install (npm package or Clawdbot.app)
|
|
17
|
+
2) **Managed/local skills**: `~/.clawdbot/skills`
|
|
18
|
+
3) **Workspace skills**: `<workspace>/skills`
|
|
19
|
+
|
|
20
|
+
If a skill name conflicts, precedence is:
|
|
21
|
+
|
|
22
|
+
`<workspace>/skills` (highest) → `~/.clawdbot/skills` → bundled skills (lowest)
|
|
23
|
+
|
|
24
|
+
Additionally, you can configure extra skill folders (lowest precedence) via
|
|
25
|
+
`skills.load.extraDirs` in `~/.clawdbot/clawdbot.json`.
|
|
26
|
+
|
|
27
|
+
## Format (AgentSkills + Pi-compatible)
|
|
28
|
+
|
|
29
|
+
`SKILL.md` must include at least:
|
|
30
|
+
|
|
31
|
+
```markdown
|
|
32
|
+
---
|
|
33
|
+
name: nano-banana-pro
|
|
34
|
+
description: Generate or edit images via Gemini 3 Pro Image
|
|
35
|
+
---
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Notes:
|
|
39
|
+
- We follow the AgentSkills spec for layout/intent.
|
|
40
|
+
- The parser used by the embedded agent supports **single-line** frontmatter keys only.
|
|
41
|
+
- `metadata` should be a **single-line JSON object**.
|
|
42
|
+
- Use `{baseDir}` in instructions to reference the skill folder path.
|
|
43
|
+
- Optional frontmatter keys:
|
|
44
|
+
- `homepage` — URL surfaced as “Website” in the macOS Skills UI (also supported via `metadata.clawdbot.homepage`).
|
|
45
|
+
|
|
46
|
+
## Gating (load-time filters)
|
|
47
|
+
|
|
48
|
+
Clawdbot **filters skills at load time** using `metadata` (single-line JSON):
|
|
49
|
+
|
|
50
|
+
```markdown
|
|
51
|
+
---
|
|
52
|
+
name: nano-banana-pro
|
|
53
|
+
description: Generate or edit images via Gemini 3 Pro Image
|
|
54
|
+
metadata: {"clawdbot":{"requires":{"bins":["uv"],"env":["GEMINI_API_KEY"],"config":["browser.enabled"]},"primaryEnv":"GEMINI_API_KEY"}}
|
|
55
|
+
---
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Fields under `metadata.clawdbot`:
|
|
59
|
+
- `always: true` — always include the skill (skip other gates).
|
|
60
|
+
- `emoji` — optional emoji used by the macOS Skills UI.
|
|
61
|
+
- `homepage` — optional URL shown as “Website” in the macOS Skills UI.
|
|
62
|
+
- `os` — optional list of platforms (`darwin`, `linux`, `win32`). If set, the skill is only eligible on those OSes.
|
|
63
|
+
- `requires.bins` — list; each must exist on `PATH`.
|
|
64
|
+
- `requires.anyBins` — list; at least one must exist on `PATH`.
|
|
65
|
+
- `requires.env` — list; env var must exist **or** be provided in config.
|
|
66
|
+
- `requires.config` — list of `clawdbot.json` paths that must be truthy.
|
|
67
|
+
- `primaryEnv` — env var name associated with `skills.entries.<name>.apiKey`.
|
|
68
|
+
- `install` — optional array of installer specs used by the macOS Skills UI (brew/node/go/uv).
|
|
69
|
+
|
|
70
|
+
Installer example:
|
|
71
|
+
|
|
72
|
+
```markdown
|
|
73
|
+
---
|
|
74
|
+
name: gemini
|
|
75
|
+
description: Use Gemini CLI for coding assistance and Google search lookups.
|
|
76
|
+
metadata: {"clawdbot":{"emoji":"♊️","requires":{"bins":["gemini"]},"install":[{"id":"brew","kind":"brew","formula":"gemini-cli","bins":["gemini"],"label":"Install Gemini CLI (brew)"}]}}
|
|
77
|
+
---
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
Notes:
|
|
81
|
+
- If multiple installers are listed, the gateway picks a **single** preferred option (brew when available, otherwise node).
|
|
82
|
+
- Node installs honor `skills.install.nodeManager` in `clawdbot.json` (default: npm; options: npm/pnpm/yarn/bun).
|
|
83
|
+
- Go installs: if `go` is missing and `brew` is available, the gateway installs Go via Homebrew first and sets `GOBIN` to Homebrew’s `bin` when possible.
|
|
84
|
+
|
|
85
|
+
If no `metadata.clawdbot` is present, the skill is always eligible (unless
|
|
86
|
+
disabled in config or blocked by `skills.allowBundled` for bundled skills).
|
|
87
|
+
|
|
88
|
+
## Config overrides (`~/.clawdbot/clawdbot.json`)
|
|
89
|
+
|
|
90
|
+
Bundled/managed skills can be toggled and supplied with env values:
|
|
91
|
+
|
|
92
|
+
```json5
|
|
93
|
+
{
|
|
94
|
+
skills: {
|
|
95
|
+
entries: {
|
|
96
|
+
"nano-banana-pro": {
|
|
97
|
+
enabled: true,
|
|
98
|
+
apiKey: "GEMINI_KEY_HERE",
|
|
99
|
+
env: {
|
|
100
|
+
GEMINI_API_KEY: "GEMINI_KEY_HERE"
|
|
101
|
+
}
|
|
102
|
+
},
|
|
103
|
+
peekaboo: { enabled: true },
|
|
104
|
+
sag: { enabled: false }
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
Note: if the skill name contains hyphens, quote the key (JSON5 allows quoted keys).
|
|
111
|
+
|
|
112
|
+
Config keys match the **skill name** by default. If a skill defines
|
|
113
|
+
`metadata.clawdbot.skillKey`, use that key under `skills.entries`.
|
|
114
|
+
|
|
115
|
+
Rules:
|
|
116
|
+
- `enabled: false` disables the skill even if it’s bundled/installed.
|
|
117
|
+
- `env`: injected **only if** the variable isn’t already set in the process.
|
|
118
|
+
- `apiKey`: convenience for skills that declare `metadata.clawdbot.primaryEnv`.
|
|
119
|
+
- `allowBundled`: optional allowlist for **bundled** skills only. If set, only
|
|
120
|
+
bundled skills in the list are eligible (managed/workspace skills unaffected).
|
|
121
|
+
|
|
122
|
+
## Environment injection (per agent run)
|
|
123
|
+
|
|
124
|
+
When an agent run starts, Clawdbot:
|
|
125
|
+
1) Reads skill metadata.
|
|
126
|
+
2) Applies any `skills.entries.<key>.env` or `skills.entries.<key>.apiKey` to
|
|
127
|
+
`process.env`.
|
|
128
|
+
3) Builds the system prompt with **eligible** skills.
|
|
129
|
+
4) Restores the original environment after the run ends.
|
|
130
|
+
|
|
131
|
+
This is **scoped to the agent run**, not a global shell environment.
|
|
132
|
+
|
|
133
|
+
## Session snapshot (performance)
|
|
134
|
+
|
|
135
|
+
Clawdbot snapshots the eligible skills **when a session starts** and reuses that list for subsequent turns in the same session. Changes to skills or config take effect on the next new session.
|
|
136
|
+
|
|
137
|
+
## Managed skills lifecycle
|
|
138
|
+
|
|
139
|
+
Clawdbot ships a baseline set of skills as **bundled skills** as part of the
|
|
140
|
+
install (npm package or Clawdbot.app). `~/.clawdbot/skills` exists for local
|
|
141
|
+
overrides (for example, pinning/patching a skill without changing the bundled
|
|
142
|
+
copy). Workspace skills are user-owned and override both on name conflicts.
|
|
143
|
+
|
|
144
|
+
## Config reference
|
|
145
|
+
|
|
146
|
+
See `docs/skills-config.md` for the full configuration schema.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
<!-- {% endraw %} -->
|