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,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: eightctl
|
|
3
|
+
description: Control Eight Sleep pods (status, temperature, alarms, schedules).
|
|
4
|
+
homepage: https://eightctl.sh
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"🎛️","requires":{"bins":["eightctl"]},"install":[{"id":"go","kind":"go","module":"github.com/steipete/eightctl/cmd/eightctl@latest","bins":["eightctl"],"label":"Install eightctl (go)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# eightctl
|
|
9
|
+
|
|
10
|
+
Use `eightctl` for Eight Sleep pod control. Requires auth.
|
|
11
|
+
|
|
12
|
+
Auth
|
|
13
|
+
- Config: `~/.config/eightctl/config.yaml`
|
|
14
|
+
- Env: `EIGHTCTL_EMAIL`, `EIGHTCTL_PASSWORD`
|
|
15
|
+
|
|
16
|
+
Quick start
|
|
17
|
+
- `eightctl status`
|
|
18
|
+
- `eightctl on|off`
|
|
19
|
+
- `eightctl temp 20`
|
|
20
|
+
|
|
21
|
+
Common tasks
|
|
22
|
+
- Alarms: `eightctl alarm list|create|dismiss`
|
|
23
|
+
- Schedules: `eightctl schedule list|create|update`
|
|
24
|
+
- Audio: `eightctl audio state|play|pause`
|
|
25
|
+
- Base: `eightctl base info|angle`
|
|
26
|
+
|
|
27
|
+
Notes
|
|
28
|
+
- API is unofficial and rate-limited; avoid repeated logins.
|
|
29
|
+
- Confirm before changing temperature or alarms.
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: food-order
|
|
3
|
+
description: Reorder Foodora orders + track ETA/status with ordercli. Never confirm without explicit user approval. Triggers: order food, reorder, track ETA.
|
|
4
|
+
homepage: https://ordercli.sh
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"🥡","requires":{"bins":["ordercli"]},"install":[{"id":"go","kind":"go","module":"github.com/steipete/ordercli/cmd/ordercli@latest","bins":["ordercli"],"label":"Install ordercli (go)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Food order (Foodora via ordercli)
|
|
9
|
+
|
|
10
|
+
Goal: reorder a previous Foodora order safely (preview first; confirm only on explicit user “yes/confirm/place the order”).
|
|
11
|
+
|
|
12
|
+
Hard safety rules
|
|
13
|
+
- Never run `ordercli foodora reorder ... --confirm` unless user explicitly confirms placing the order.
|
|
14
|
+
- Prefer preview-only steps first; show what will happen; ask for confirmation.
|
|
15
|
+
- If user is unsure: stop at preview and ask questions.
|
|
16
|
+
|
|
17
|
+
Setup (once)
|
|
18
|
+
- Country: `ordercli foodora countries` → `ordercli foodora config set --country AT`
|
|
19
|
+
- Login (password): `ordercli foodora login --email you@example.com --password-stdin`
|
|
20
|
+
- Login (no password, preferred): `ordercli foodora session chrome --url https://www.foodora.at/ --profile "Default"`
|
|
21
|
+
|
|
22
|
+
Find what to reorder
|
|
23
|
+
- Recent list: `ordercli foodora history --limit 10`
|
|
24
|
+
- Details: `ordercli foodora history show <orderCode>`
|
|
25
|
+
- If needed (machine-readable): `ordercli foodora history show <orderCode> --json`
|
|
26
|
+
|
|
27
|
+
Preview reorder (no cart changes)
|
|
28
|
+
- `ordercli foodora reorder <orderCode>`
|
|
29
|
+
|
|
30
|
+
Place reorder (cart change; explicit confirmation required)
|
|
31
|
+
- Confirm first, then run: `ordercli foodora reorder <orderCode> --confirm`
|
|
32
|
+
- Multiple addresses? Ask user for the right `--address-id` (take from their Foodora account / prior order data) and run:
|
|
33
|
+
- `ordercli foodora reorder <orderCode> --confirm --address-id <id>`
|
|
34
|
+
|
|
35
|
+
Track the order
|
|
36
|
+
- ETA/status (active list): `ordercli foodora orders`
|
|
37
|
+
- Live updates: `ordercli foodora orders --watch`
|
|
38
|
+
- Single order detail: `ordercli foodora order <orderCode>`
|
|
39
|
+
|
|
40
|
+
Debug / safe testing
|
|
41
|
+
- Use a throwaway config: `ordercli --config /tmp/ordercli.json ...`
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gemini
|
|
3
|
+
description: Gemini CLI for one-shot Q&A, summaries, and generation.
|
|
4
|
+
homepage: https://ai.google.dev/
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"♊️","requires":{"bins":["gemini"]},"install":[{"id":"brew","kind":"brew","formula":"gemini-cli","bins":["gemini"],"label":"Install Gemini CLI (brew)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Gemini CLI
|
|
9
|
+
|
|
10
|
+
Use Gemini in one-shot mode with a positional prompt (avoid interactive mode).
|
|
11
|
+
|
|
12
|
+
Quick start
|
|
13
|
+
- `gemini "Answer this question..."`
|
|
14
|
+
- `gemini --model <name> "Prompt..."`
|
|
15
|
+
- `gemini --output-format json "Return JSON"`
|
|
16
|
+
|
|
17
|
+
Extensions
|
|
18
|
+
- List: `gemini --list-extensions`
|
|
19
|
+
- Manage: `gemini extensions <command>`
|
|
20
|
+
|
|
21
|
+
Notes
|
|
22
|
+
- If auth is required, run `gemini` once interactively and follow the login flow.
|
|
23
|
+
- Avoid `--yolo` for safety.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gifgrep
|
|
3
|
+
description: Search GIF providers with CLI/TUI, download results, and extract stills/sheets.
|
|
4
|
+
homepage: https://gifgrep.com
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"🧲","requires":{"bins":["gifgrep"]},"install":[{"id":"brew","kind":"brew","formula":"steipete/tap/gifgrep","bins":["gifgrep"],"label":"Install gifgrep (brew)"},{"id":"go","kind":"go","module":"github.com/steipete/gifgrep/cmd/gifgrep@latest","bins":["gifgrep"],"label":"Install gifgrep (go)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# gifgrep
|
|
9
|
+
|
|
10
|
+
Use `gifgrep` to search GIF providers (Tenor/Giphy), browse in a TUI, download results, and extract stills or sheets.
|
|
11
|
+
|
|
12
|
+
GIF-Grab (gifgrep workflow)
|
|
13
|
+
- Search → preview → download → extract (still/sheet) for fast review and sharing.
|
|
14
|
+
|
|
15
|
+
Quick start
|
|
16
|
+
- `gifgrep cats --max 5`
|
|
17
|
+
- `gifgrep cats --format url | head -n 5`
|
|
18
|
+
- `gifgrep search --json cats | jq '.[0].url'`
|
|
19
|
+
- `gifgrep tui "office handshake"`
|
|
20
|
+
- `gifgrep cats --download --max 1 --format url`
|
|
21
|
+
|
|
22
|
+
TUI + previews
|
|
23
|
+
- TUI: `gifgrep tui "query"`
|
|
24
|
+
- CLI still previews: `--thumbs` (Kitty/Ghostty only; still frame)
|
|
25
|
+
|
|
26
|
+
Download + reveal
|
|
27
|
+
- `--download` saves to `~/Downloads`
|
|
28
|
+
- `--reveal` shows the last download in Finder
|
|
29
|
+
|
|
30
|
+
Stills + sheets
|
|
31
|
+
- `gifgrep still ./clip.gif --at 1.5s -o still.png`
|
|
32
|
+
- `gifgrep sheet ./clip.gif --frames 9 --cols 3 -o sheet.png`
|
|
33
|
+
- Sheets = single PNG grid of sampled frames (great for quick review, docs, PRs, chat).
|
|
34
|
+
- Tune: `--frames` (count), `--cols` (grid width), `--padding` (spacing).
|
|
35
|
+
|
|
36
|
+
Providers
|
|
37
|
+
- `--source auto|tenor|giphy`
|
|
38
|
+
- `GIPHY_API_KEY` required for `--source giphy`
|
|
39
|
+
- `TENOR_API_KEY` optional (Tenor demo key used if unset)
|
|
40
|
+
|
|
41
|
+
Output
|
|
42
|
+
- `--json` prints an array of results (`id`, `title`, `url`, `preview_url`, `tags`, `width`, `height`)
|
|
43
|
+
- `--format` for pipe-friendly fields (e.g., `url`)
|
|
44
|
+
|
|
45
|
+
Environment tweaks
|
|
46
|
+
- `GIFGREP_SOFTWARE_ANIM=1` to force software animation
|
|
47
|
+
- `GIFGREP_CELL_ASPECT=0.5` to tweak preview geometry
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: github
|
|
3
|
+
description: "Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# GitHub Skill
|
|
7
|
+
|
|
8
|
+
Use the `gh` CLI to interact with GitHub. Always specify `--repo owner/repo` when not in a git directory, or use URLs directly.
|
|
9
|
+
|
|
10
|
+
## Pull Requests
|
|
11
|
+
|
|
12
|
+
Check CI status on a PR:
|
|
13
|
+
```bash
|
|
14
|
+
gh pr checks 55 --repo owner/repo
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
List recent workflow runs:
|
|
18
|
+
```bash
|
|
19
|
+
gh run list --repo owner/repo --limit 10
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
View a run and see which steps failed:
|
|
23
|
+
```bash
|
|
24
|
+
gh run view <run-id> --repo owner/repo
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
View logs for failed steps only:
|
|
28
|
+
```bash
|
|
29
|
+
gh run view <run-id> --repo owner/repo --log-failed
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## API for Advanced Queries
|
|
33
|
+
|
|
34
|
+
The `gh api` command is useful for accessing data not available through other subcommands.
|
|
35
|
+
|
|
36
|
+
Get PR with specific fields:
|
|
37
|
+
```bash
|
|
38
|
+
gh api repos/owner/repo/pulls/55 --jq '.title, .state, .user.login'
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## JSON Output
|
|
42
|
+
|
|
43
|
+
Most commands support `--json` for structured output. You can use `--jq` to filter:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
gh issue list --repo owner/repo --json number,title --jq '.[] | "\(.number): \(.title)"'
|
|
47
|
+
```
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gog
|
|
3
|
+
description: Google Workspace CLI for Gmail, Calendar, Drive, Contacts, Sheets, and Docs.
|
|
4
|
+
homepage: https://gogcli.sh
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"🎮","requires":{"bins":["gog"]},"install":[{"id":"brew","kind":"brew","formula":"steipete/tap/gogcli","bins":["gog"],"label":"Install gog (brew)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# gog
|
|
9
|
+
|
|
10
|
+
Use `gog` for Gmail/Calendar/Drive/Contacts/Sheets/Docs. Requires OAuth setup.
|
|
11
|
+
|
|
12
|
+
Setup (once)
|
|
13
|
+
- `gog auth credentials /path/to/client_secret.json`
|
|
14
|
+
- `gog auth add you@gmail.com --services gmail,calendar,drive,contacts,sheets,docs`
|
|
15
|
+
- `gog auth list`
|
|
16
|
+
|
|
17
|
+
Common commands
|
|
18
|
+
- Gmail search: `gog gmail search 'newer_than:7d' --max 10`
|
|
19
|
+
- Gmail send: `gog gmail send --to a@b.com --subject "Hi" --body "Hello"`
|
|
20
|
+
- Calendar: `gog calendar events <calendarId> --from <iso> --to <iso>`
|
|
21
|
+
- Drive search: `gog drive search "query" --max 10`
|
|
22
|
+
- Contacts: `gog contacts list --max 20`
|
|
23
|
+
- Sheets get: `gog sheets get <sheetId> "Tab!A1:D10" --json`
|
|
24
|
+
- Sheets update: `gog sheets update <sheetId> "Tab!A1:B2" --values-json '[["A","B"],["1","2"]]' --input USER_ENTERED`
|
|
25
|
+
- Sheets append: `gog sheets append <sheetId> "Tab!A:C" --values-json '[["x","y","z"]]' --insert INSERT_ROWS`
|
|
26
|
+
- Sheets clear: `gog sheets clear <sheetId> "Tab!A2:Z"`
|
|
27
|
+
- Sheets metadata: `gog sheets metadata <sheetId> --json`
|
|
28
|
+
- Docs export: `gog docs export <docId> --format txt --out /tmp/doc.txt`
|
|
29
|
+
- Docs cat: `gog docs cat <docId>`
|
|
30
|
+
|
|
31
|
+
Notes
|
|
32
|
+
- Set `GOG_ACCOUNT=you@gmail.com` to avoid repeating `--account`.
|
|
33
|
+
- For scripting, prefer `--json` plus `--no-input`.
|
|
34
|
+
- Sheets values can be passed via `--values-json` (recommended) or as inline rows.
|
|
35
|
+
- Docs supports export/cat/copy. In-place edits require a Docs API client (not in gog).
|
|
36
|
+
- Confirm before sending mail or creating events.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: goplaces
|
|
3
|
+
description: Query Google Places API (New) via the goplaces CLI for text search, place details, resolve, and reviews. Use for human-friendly place lookup or JSON output for scripts.
|
|
4
|
+
homepage: https://github.com/steipete/goplaces
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"📍","requires":{"bins":["goplaces"],"env":["GOOGLE_PLACES_API_KEY"]},"primaryEnv":"GOOGLE_PLACES_API_KEY","install":[{"id":"brew","kind":"brew","formula":"steipete/tap/goplaces","bins":["goplaces"],"label":"Install goplaces (brew)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# goplaces
|
|
9
|
+
|
|
10
|
+
Modern Google Places API (New) CLI. Human output by default, `--json` for scripts.
|
|
11
|
+
|
|
12
|
+
Install
|
|
13
|
+
- Homebrew: `brew install steipete/tap/goplaces`
|
|
14
|
+
|
|
15
|
+
Config
|
|
16
|
+
- `GOOGLE_PLACES_API_KEY` required.
|
|
17
|
+
- Optional: `GOOGLE_PLACES_BASE_URL` for testing/proxying.
|
|
18
|
+
|
|
19
|
+
Common commands
|
|
20
|
+
- Search: `goplaces search "coffee" --open-now --min-rating 4 --limit 5`
|
|
21
|
+
- Bias: `goplaces search "pizza" --lat 40.8 --lng -73.9 --radius-m 3000`
|
|
22
|
+
- Pagination: `goplaces search "pizza" --page-token "NEXT_PAGE_TOKEN"`
|
|
23
|
+
- Resolve: `goplaces resolve "Soho, London" --limit 5`
|
|
24
|
+
- Details: `goplaces details <place_id> --reviews`
|
|
25
|
+
- JSON: `goplaces search "sushi" --json`
|
|
26
|
+
|
|
27
|
+
Notes
|
|
28
|
+
- `--no-color` or `NO_COLOR` disables ANSI color.
|
|
29
|
+
- Price levels: 0..4 (free → very expensive).
|
|
30
|
+
- Type filter sends only the first `--type` value (API accepts one).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: imsg
|
|
3
|
+
description: iMessage/SMS CLI for listing chats, history, watch, and sending.
|
|
4
|
+
homepage: https://imsg.to
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"📨","os":["darwin"],"requires":{"bins":["imsg"]},"install":[{"id":"brew","kind":"brew","formula":"steipete/tap/imsg","bins":["imsg"],"label":"Install imsg (brew)"}]}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# imsg
|
|
9
|
+
|
|
10
|
+
Use `imsg` to read and send Messages.app iMessage/SMS on macOS.
|
|
11
|
+
|
|
12
|
+
Requirements
|
|
13
|
+
- Messages.app signed in
|
|
14
|
+
- Full Disk Access for your terminal
|
|
15
|
+
- Automation permission to control Messages.app (for sending)
|
|
16
|
+
|
|
17
|
+
Common commands
|
|
18
|
+
- List chats: `imsg chats --limit 10 --json`
|
|
19
|
+
- History: `imsg history --chat-id 1 --limit 20 --attachments --json`
|
|
20
|
+
- Watch: `imsg watch --chat-id 1 --attachments`
|
|
21
|
+
- Send: `imsg send --to "+14155551212" --text "hi" --file /path/pic.jpg`
|
|
22
|
+
|
|
23
|
+
Notes
|
|
24
|
+
- `--service imessage|sms|auto` controls delivery.
|
|
25
|
+
- Confirm recipient + message before sending.
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
# Local Places
|
|
2
|
+
|
|
3
|
+
This repo is a fusion of two pieces:
|
|
4
|
+
|
|
5
|
+
- A FastAPI server that exposes endpoints for searching and resolving places via the Google Maps Places API.
|
|
6
|
+
- A companion agent skill that explains how to use the API and can call it to find places efficiently.
|
|
7
|
+
|
|
8
|
+
Together, the skill and server let an agent turn natural-language place queries into structured results quickly.
|
|
9
|
+
|
|
10
|
+
## Run locally
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
# copy skill definition into the relevant folder (where the agent looks for it)
|
|
14
|
+
# then run the server
|
|
15
|
+
|
|
16
|
+
uv venv
|
|
17
|
+
uv pip install -e ".[dev]"
|
|
18
|
+
uv run --env-file .env uvicorn local_places.main:app --host 0.0.0.0 --reload
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Open the API docs at http://127.0.0.1:8000/docs.
|
|
22
|
+
|
|
23
|
+
## Places API
|
|
24
|
+
|
|
25
|
+
Set the Google Places API key before running:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
export GOOGLE_PLACES_API_KEY="your-key"
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Endpoints:
|
|
32
|
+
|
|
33
|
+
- `POST /places/search` (free-text query + filters)
|
|
34
|
+
- `GET /places/{place_id}` (place details)
|
|
35
|
+
- `POST /locations/resolve` (resolve a user-provided location string)
|
|
36
|
+
|
|
37
|
+
Example search request:
|
|
38
|
+
|
|
39
|
+
```json
|
|
40
|
+
{
|
|
41
|
+
"query": "italian restaurant",
|
|
42
|
+
"filters": {
|
|
43
|
+
"types": ["restaurant"],
|
|
44
|
+
"open_now": true,
|
|
45
|
+
"min_rating": 4.0,
|
|
46
|
+
"price_levels": [1, 2]
|
|
47
|
+
},
|
|
48
|
+
"limit": 10
|
|
49
|
+
}
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Notes:
|
|
53
|
+
|
|
54
|
+
- `filters.types` supports a single type (mapped to Google `includedType`).
|
|
55
|
+
|
|
56
|
+
Example search request (curl):
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
curl -X POST http://127.0.0.1:8000/places/search \
|
|
60
|
+
-H "Content-Type: application/json" \
|
|
61
|
+
-d '{
|
|
62
|
+
"query": "italian restaurant",
|
|
63
|
+
"location_bias": {
|
|
64
|
+
"lat": 40.8065,
|
|
65
|
+
"lng": -73.9719,
|
|
66
|
+
"radius_m": 3000
|
|
67
|
+
},
|
|
68
|
+
"filters": {
|
|
69
|
+
"types": ["restaurant"],
|
|
70
|
+
"open_now": true,
|
|
71
|
+
"min_rating": 4.0,
|
|
72
|
+
"price_levels": [1, 2, 3]
|
|
73
|
+
},
|
|
74
|
+
"limit": 10
|
|
75
|
+
}'
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Example resolve request (curl):
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
curl -X POST http://127.0.0.1:8000/locations/resolve \
|
|
82
|
+
-H "Content-Type: application/json" \
|
|
83
|
+
-d '{
|
|
84
|
+
"location_text": "Riverside Park, New York",
|
|
85
|
+
"limit": 5
|
|
86
|
+
}'
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Test
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
uv run pytest
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## OpenAPI
|
|
96
|
+
|
|
97
|
+
Generate the OpenAPI schema:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
uv run python scripts/generate_openapi.py
|
|
101
|
+
```
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: local-places
|
|
3
|
+
description: Search for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
|
|
4
|
+
homepage: https://github.com/Hyaxia/local_places
|
|
5
|
+
metadata: {"clawdbot":{"emoji":"📍","requires":{"bins":["uv"],"env":["GOOGLE_PLACES_API_KEY"]},"primaryEnv":"GOOGLE_PLACES_API_KEY"}}
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 📍 Local Places
|
|
9
|
+
|
|
10
|
+
*Find places, Go fast*
|
|
11
|
+
|
|
12
|
+
Search for nearby places using a local Google Places API proxy. Two-step flow: resolve location first, then search.
|
|
13
|
+
|
|
14
|
+
## Setup
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
cd {baseDir}
|
|
18
|
+
echo "GOOGLE_PLACES_API_KEY=your-key" > .env
|
|
19
|
+
uv venv && uv pip install -e ".[dev]"
|
|
20
|
+
uv run --env-file .env uvicorn local_places.main:app --host 127.0.0.1 --port 8000
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Requires `GOOGLE_PLACES_API_KEY` in `.env` or environment.
|
|
24
|
+
|
|
25
|
+
## Quick Start
|
|
26
|
+
|
|
27
|
+
1. **Check server:** `curl http://127.0.0.1:8000/ping`
|
|
28
|
+
|
|
29
|
+
2. **Resolve location:**
|
|
30
|
+
```bash
|
|
31
|
+
curl -X POST http://127.0.0.1:8000/locations/resolve \
|
|
32
|
+
-H "Content-Type: application/json" \
|
|
33
|
+
-d '{"location_text": "Soho, London", "limit": 5}'
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
3. **Search places:**
|
|
37
|
+
```bash
|
|
38
|
+
curl -X POST http://127.0.0.1:8000/places/search \
|
|
39
|
+
-H "Content-Type: application/json" \
|
|
40
|
+
-d '{
|
|
41
|
+
"query": "coffee shop",
|
|
42
|
+
"location_bias": {"lat": 51.5137, "lng": -0.1366, "radius_m": 1000},
|
|
43
|
+
"filters": {"open_now": true, "min_rating": 4.0},
|
|
44
|
+
"limit": 10
|
|
45
|
+
}'
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
4. **Get details:**
|
|
49
|
+
```bash
|
|
50
|
+
curl http://127.0.0.1:8000/places/{place_id}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Conversation Flow
|
|
54
|
+
|
|
55
|
+
1. If user says "near me" or gives vague location → resolve it first
|
|
56
|
+
2. If multiple results → show numbered list, ask user to pick
|
|
57
|
+
3. Ask for preferences: type, open now, rating, price level
|
|
58
|
+
4. Search with `location_bias` from chosen location
|
|
59
|
+
5. Present results with name, rating, address, open status
|
|
60
|
+
6. Offer to fetch details or refine search
|
|
61
|
+
|
|
62
|
+
## Filter Constraints
|
|
63
|
+
|
|
64
|
+
- `filters.types`: exactly ONE type (e.g., "restaurant", "cafe", "gym")
|
|
65
|
+
- `filters.price_levels`: integers 0-4 (0=free, 4=very expensive)
|
|
66
|
+
- `filters.min_rating`: 0-5 in 0.5 increments
|
|
67
|
+
- `filters.open_now`: boolean
|
|
68
|
+
- `limit`: 1-20 for search, 1-10 for resolve
|
|
69
|
+
- `location_bias.radius_m`: must be > 0
|
|
70
|
+
|
|
71
|
+
## Response Format
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"results": [
|
|
76
|
+
{
|
|
77
|
+
"place_id": "ChIJ...",
|
|
78
|
+
"name": "Coffee Shop",
|
|
79
|
+
"address": "123 Main St",
|
|
80
|
+
"location": {"lat": 51.5, "lng": -0.1},
|
|
81
|
+
"rating": 4.6,
|
|
82
|
+
"price_level": 2,
|
|
83
|
+
"types": ["cafe", "food"],
|
|
84
|
+
"open_now": true
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"next_page_token": "..."
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Use `next_page_token` as `page_token` in next request for more results.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "my-api"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "FastAPI server"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.11"
|
|
7
|
+
dependencies = [
|
|
8
|
+
"fastapi>=0.110.0",
|
|
9
|
+
"httpx>=0.27.0",
|
|
10
|
+
"uvicorn[standard]>=0.29.0",
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
[project.optional-dependencies]
|
|
14
|
+
dev = [
|
|
15
|
+
"pytest>=8.0.0",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[build-system]
|
|
19
|
+
requires = ["hatchling"]
|
|
20
|
+
build-backend = "hatchling.build"
|
|
21
|
+
|
|
22
|
+
[tool.hatch.build.targets.wheel]
|
|
23
|
+
packages = ["src/local_places"]
|
|
24
|
+
|
|
25
|
+
[tool.pytest.ini_options]
|
|
26
|
+
addopts = "-q"
|
|
27
|
+
testpaths = ["tests"]
|
|
Binary file
|