@quantumclaw/quantumclaw 2026.3.22
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 +4601 -0
- package/LICENSE +21 -0
- package/README.md +559 -0
- package/assets/avatar-placeholder.svg +19 -0
- package/assets/chrome-extension/icons/icon128.png +0 -0
- package/assets/chrome-extension/icons/icon16.png +0 -0
- package/assets/chrome-extension/icons/icon32.png +0 -0
- package/assets/chrome-extension/icons/icon48.png +0 -0
- package/assets/dmg-background-small.png +0 -0
- package/assets/dmg-background.png +0 -0
- package/docs/.i18n/README.md +31 -0
- package/docs/.i18n/glossary.ja-JP.json +14 -0
- package/docs/.i18n/glossary.zh-CN.json +302 -0
- package/docs/.i18n/ja-JP.tm.jsonl +0 -0
- package/docs/assets/install-script.svg +1 -0
- package/docs/assets/macos-onboarding/01-macos-warning.jpeg +0 -0
- package/docs/assets/macos-onboarding/02-local-networks.jpeg +0 -0
- package/docs/assets/macos-onboarding/03-security-notice.png +0 -0
- package/docs/assets/macos-onboarding/04-choose-gateway.png +0 -0
- package/docs/assets/macos-onboarding/05-permissions.png +0 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/quantumclaw-logo-text-dark.png +0 -0
- package/docs/assets/quantumclaw-logo-text-dark.svg +418 -0
- package/docs/assets/quantumclaw-logo-text.png +0 -0
- package/docs/assets/quantumclaw-logo-text.svg +418 -0
- package/docs/assets/showcase/agents-ui.jpg +0 -0
- package/docs/assets/showcase/bambu-cli.png +0 -0
- package/docs/assets/showcase/codexmonitor.png +0 -0
- package/docs/assets/showcase/gohome-grafana.png +0 -0
- package/docs/assets/showcase/ios-testflight.jpg +0 -0
- package/docs/assets/showcase/oura-health.png +0 -0
- package/docs/assets/showcase/padel-cli.svg +11 -0
- package/docs/assets/showcase/padel-screenshot.jpg +0 -0
- package/docs/assets/showcase/papla-tts.jpg +0 -0
- package/docs/assets/showcase/pr-review-telegram.jpg +0 -0
- package/docs/assets/showcase/roborock-screenshot.jpg +0 -0
- package/docs/assets/showcase/roborock-status.svg +13 -0
- package/docs/assets/showcase/roof-camera-sky.jpg +0 -0
- package/docs/assets/showcase/snag.png +0 -0
- package/docs/assets/showcase/tesco-shop.jpg +0 -0
- package/docs/assets/showcase/wienerlinien.png +0 -0
- package/docs/assets/showcase/wine-cellar-skill.jpg +0 -0
- package/docs/assets/showcase/winix-air-purifier.jpg +0 -0
- package/docs/assets/showcase/xuezh-pronunciation.jpeg +0 -0
- package/docs/assets/sponsors/blacksmith.svg +14 -0
- package/docs/assets/sponsors/convex.svg +16 -0
- package/docs/assets/sponsors/openai.svg +3 -0
- package/docs/assets/sponsors/vercel.svg +5 -0
- package/docs/auth-credential-semantics.md +53 -0
- package/docs/automation/auth-monitoring.md +44 -0
- package/docs/automation/cron-jobs.md +727 -0
- package/docs/automation/cron-vs-heartbeat.md +286 -0
- package/docs/automation/gmail-pubsub.md +256 -0
- package/docs/automation/hooks.md +1056 -0
- package/docs/automation/poll.md +86 -0
- package/docs/automation/standing-orders.md +251 -0
- package/docs/automation/troubleshooting.md +122 -0
- package/docs/automation/webhook.md +217 -0
- package/docs/brave-search.md +93 -0
- package/docs/channels/bluebubbles.md +347 -0
- package/docs/channels/broadcast-groups.md +442 -0
- package/docs/channels/channel-routing.md +139 -0
- package/docs/channels/discord.md +1229 -0
- package/docs/channels/feishu.md +747 -0
- package/docs/channels/googlechat.md +261 -0
- package/docs/channels/group-messages.md +84 -0
- package/docs/channels/groups.md +379 -0
- package/docs/channels/imessage.md +367 -0
- package/docs/channels/index.md +47 -0
- package/docs/channels/irc.md +242 -0
- package/docs/channels/line.md +194 -0
- package/docs/channels/location.md +56 -0
- package/docs/channels/matrix.md +677 -0
- package/docs/channels/mattermost.md +427 -0
- package/docs/channels/msteams.md +780 -0
- package/docs/channels/nextcloud-talk.md +138 -0
- package/docs/channels/nostr.md +249 -0
- package/docs/channels/pairing.md +114 -0
- package/docs/channels/signal.md +329 -0
- package/docs/channels/slack.md +603 -0
- package/docs/channels/synology-chat.md +134 -0
- package/docs/channels/telegram.md +987 -0
- package/docs/channels/tlon.md +276 -0
- package/docs/channels/troubleshooting.md +118 -0
- package/docs/channels/twitch.md +379 -0
- package/docs/channels/whatsapp.md +460 -0
- package/docs/channels/zalo.md +243 -0
- package/docs/channels/zalouser.md +181 -0
- package/docs/ci.md +55 -0
- package/docs/cli/acp.md +288 -0
- package/docs/cli/agent.md +29 -0
- package/docs/cli/agents.md +123 -0
- package/docs/cli/approvals.md +50 -0
- package/docs/cli/backup.md +76 -0
- package/docs/cli/browser.md +106 -0
- package/docs/cli/channels.md +102 -0
- package/docs/cli/clawbot.md +21 -0
- package/docs/cli/completion.md +35 -0
- package/docs/cli/config.md +295 -0
- package/docs/cli/configure.md +36 -0
- package/docs/cli/cron.md +77 -0
- package/docs/cli/daemon.md +53 -0
- package/docs/cli/dashboard.md +22 -0
- package/docs/cli/devices.md +139 -0
- package/docs/cli/directory.md +63 -0
- package/docs/cli/dns.md +23 -0
- package/docs/cli/docs.md +15 -0
- package/docs/cli/doctor.md +48 -0
- package/docs/cli/gateway.md +235 -0
- package/docs/cli/health.md +21 -0
- package/docs/cli/hooks.md +329 -0
- package/docs/cli/index.md +1150 -0
- package/docs/cli/logs.md +28 -0
- package/docs/cli/memory.md +66 -0
- package/docs/cli/message.md +278 -0
- package/docs/cli/models.md +81 -0
- package/docs/cli/node.md +127 -0
- package/docs/cli/nodes.md +75 -0
- package/docs/cli/onboard.md +157 -0
- package/docs/cli/pairing.md +32 -0
- package/docs/cli/plugins.md +210 -0
- package/docs/cli/qr.md +46 -0
- package/docs/cli/reset.md +20 -0
- package/docs/cli/sandbox.md +197 -0
- package/docs/cli/secrets.md +188 -0
- package/docs/cli/security.md +79 -0
- package/docs/cli/sessions.md +110 -0
- package/docs/cli/setup.md +29 -0
- package/docs/cli/skills.md +36 -0
- package/docs/cli/status.md +30 -0
- package/docs/cli/system.md +60 -0
- package/docs/cli/tui.md +30 -0
- package/docs/cli/uninstall.md +20 -0
- package/docs/cli/update.md +103 -0
- package/docs/cli/voicecall.md +34 -0
- package/docs/cli/webhooks.md +25 -0
- package/docs/concepts/agent-loop.md +148 -0
- package/docs/concepts/agent-workspace.md +236 -0
- package/docs/concepts/agent.md +122 -0
- package/docs/concepts/architecture.md +137 -0
- package/docs/concepts/compaction.md +123 -0
- package/docs/concepts/context-engine.md +268 -0
- package/docs/concepts/context.md +172 -0
- package/docs/concepts/delegate-architecture.md +296 -0
- package/docs/concepts/features.md +73 -0
- package/docs/concepts/markdown-formatting.md +130 -0
- package/docs/concepts/memory.md +108 -0
- package/docs/concepts/messages.md +154 -0
- package/docs/concepts/model-failover.md +152 -0
- package/docs/concepts/model-providers.md +607 -0
- package/docs/concepts/models.md +225 -0
- package/docs/concepts/multi-agent.md +552 -0
- package/docs/concepts/oauth.md +158 -0
- package/docs/concepts/presence.md +102 -0
- package/docs/concepts/queue.md +89 -0
- package/docs/concepts/retry.md +69 -0
- package/docs/concepts/session-pruning.md +121 -0
- package/docs/concepts/session-tool.md +242 -0
- package/docs/concepts/session.md +310 -0
- package/docs/concepts/streaming.md +155 -0
- package/docs/concepts/system-prompt.md +132 -0
- package/docs/concepts/timezone.md +91 -0
- package/docs/concepts/typebox.md +291 -0
- package/docs/concepts/typing-indicators.md +68 -0
- package/docs/concepts/usage-tracking.md +35 -0
- package/docs/date-time.md +128 -0
- package/docs/debug/node-issue.md +85 -0
- package/docs/diagnostics/flags.md +91 -0
- package/docs/docs.json +2078 -0
- package/docs/gateway/authentication.md +179 -0
- package/docs/gateway/background-process.md +97 -0
- package/docs/gateway/bonjour.md +177 -0
- package/docs/gateway/bridge-protocol.md +91 -0
- package/docs/gateway/cli-backends.md +225 -0
- package/docs/gateway/configuration-examples.md +651 -0
- package/docs/gateway/configuration-reference.md +3123 -0
- package/docs/gateway/configuration.md +633 -0
- package/docs/gateway/discovery.md +123 -0
- package/docs/gateway/doctor.md +362 -0
- package/docs/gateway/gateway-lock.md +34 -0
- package/docs/gateway/health.md +44 -0
- package/docs/gateway/heartbeat.md +393 -0
- package/docs/gateway/index.md +261 -0
- package/docs/gateway/local-models.md +152 -0
- package/docs/gateway/logging.md +113 -0
- package/docs/gateway/multiple-gateways.md +112 -0
- package/docs/gateway/network-model.md +22 -0
- package/docs/gateway/openai-http-api.md +132 -0
- package/docs/gateway/openresponses-http-api.md +295 -0
- package/docs/gateway/openshell.md +307 -0
- package/docs/gateway/pairing.md +99 -0
- package/docs/gateway/protocol.md +267 -0
- package/docs/gateway/remote-gateway-readme.md +158 -0
- package/docs/gateway/remote.md +153 -0
- package/docs/gateway/sandbox-vs-tool-policy-vs-elevated.md +134 -0
- package/docs/gateway/sandboxing.md +469 -0
- package/docs/gateway/secrets-plan-contract.md +116 -0
- package/docs/gateway/secrets.md +503 -0
- package/docs/gateway/security/index.md +1220 -0
- package/docs/gateway/tailscale.md +132 -0
- package/docs/gateway/tools-invoke-http-api.md +118 -0
- package/docs/gateway/troubleshooting.md +378 -0
- package/docs/gateway/trusted-proxy-auth.md +330 -0
- package/docs/help/debugging.md +168 -0
- package/docs/help/environment.md +163 -0
- package/docs/help/faq.md +2997 -0
- package/docs/help/index.md +28 -0
- package/docs/help/scripts.md +28 -0
- package/docs/help/testing.md +526 -0
- package/docs/help/troubleshooting.md +297 -0
- package/docs/images/configure-model-picker-unsearchable.png +0 -0
- package/docs/images/feishu-step2-create-app.png +0 -0
- package/docs/images/feishu-step3-credentials.png +0 -0
- package/docs/images/feishu-step4-permissions.png +0 -0
- package/docs/images/feishu-step5-bot-capability.png +0 -0
- package/docs/images/feishu-step6-event-subscription.png +0 -0
- package/docs/images/feishu-verification-token.png +0 -0
- package/docs/images/groups-flow.svg +52 -0
- package/docs/images/mobile-ui-screenshot.png +0 -0
- package/docs/index.md +196 -0
- package/docs/install/ansible.md +230 -0
- package/docs/install/azure.md +311 -0
- package/docs/install/bun.md +55 -0
- package/docs/install/development-channels.md +120 -0
- package/docs/install/digitalocean.md +129 -0
- package/docs/install/docker-vm-runtime.md +142 -0
- package/docs/install/docker.md +375 -0
- package/docs/install/exe-dev.md +126 -0
- package/docs/install/fly.md +501 -0
- package/docs/install/gcp.md +402 -0
- package/docs/install/hetzner.md +251 -0
- package/docs/install/index.md +183 -0
- package/docs/install/installer.md +415 -0
- package/docs/install/kubernetes.md +191 -0
- package/docs/install/macos-vm.md +281 -0
- package/docs/install/migrating-matrix.md +346 -0
- package/docs/install/migrating.md +110 -0
- package/docs/install/nix.md +89 -0
- package/docs/install/node.md +138 -0
- package/docs/install/northflank.mdx +54 -0
- package/docs/install/oracle.md +156 -0
- package/docs/install/podman.md +133 -0
- package/docs/install/railway.mdx +100 -0
- package/docs/install/raspberry-pi.md +159 -0
- package/docs/install/render.mdx +169 -0
- package/docs/install/uninstall.md +128 -0
- package/docs/install/updating.md +128 -0
- package/docs/ja-JP/index.md +186 -0
- package/docs/ja-JP/start/getting-started.md +125 -0
- package/docs/ja-JP/start/wizard.md +77 -0
- package/docs/logging.md +352 -0
- package/docs/nav-tabs-underline.js +100 -0
- package/docs/network.md +54 -0
- package/docs/nodes/audio.md +187 -0
- package/docs/nodes/camera.md +162 -0
- package/docs/nodes/images.md +72 -0
- package/docs/nodes/index.md +393 -0
- package/docs/nodes/location-command.md +98 -0
- package/docs/nodes/media-understanding.md +394 -0
- package/docs/nodes/talk.md +92 -0
- package/docs/nodes/troubleshooting.md +114 -0
- package/docs/nodes/voicewake.md +66 -0
- package/docs/perplexity.md +174 -0
- package/docs/pi-dev.md +80 -0
- package/docs/pi.md +567 -0
- package/docs/platforms/android.md +168 -0
- package/docs/platforms/digitalocean.md +266 -0
- package/docs/platforms/index.md +54 -0
- package/docs/platforms/ios.md +220 -0
- package/docs/platforms/linux.md +94 -0
- package/docs/platforms/mac/bundled-gateway.md +73 -0
- package/docs/platforms/mac/canvas.md +125 -0
- package/docs/platforms/mac/child-process.md +69 -0
- package/docs/platforms/mac/dev-setup.md +104 -0
- package/docs/platforms/mac/health.md +34 -0
- package/docs/platforms/mac/icon.md +31 -0
- package/docs/platforms/mac/logging.md +57 -0
- package/docs/platforms/mac/menu-bar.md +81 -0
- package/docs/platforms/mac/peekaboo.md +65 -0
- package/docs/platforms/mac/permissions.md +50 -0
- package/docs/platforms/mac/remote.md +84 -0
- package/docs/platforms/mac/signing.md +47 -0
- package/docs/platforms/mac/skills.md +33 -0
- package/docs/platforms/mac/voice-overlay.md +60 -0
- package/docs/platforms/mac/voicewake.md +67 -0
- package/docs/platforms/mac/webchat.md +43 -0
- package/docs/platforms/mac/xpc.md +61 -0
- package/docs/platforms/macos.md +226 -0
- package/docs/platforms/oracle.md +303 -0
- package/docs/platforms/raspberry-pi.md +412 -0
- package/docs/platforms/windows.md +241 -0
- package/docs/plugins/agent-tools.md +10 -0
- package/docs/plugins/architecture.md +1366 -0
- package/docs/plugins/building-extensions.md +10 -0
- package/docs/plugins/building-plugins.md +239 -0
- package/docs/plugins/bundles.md +181 -0
- package/docs/plugins/community.md +145 -0
- package/docs/plugins/manifest.md +241 -0
- package/docs/plugins/sdk-channel-plugins.md +370 -0
- package/docs/plugins/sdk-entrypoints.md +161 -0
- package/docs/plugins/sdk-migration.md +172 -0
- package/docs/plugins/sdk-overview.md +196 -0
- package/docs/plugins/sdk-provider-plugins.md +370 -0
- package/docs/plugins/sdk-runtime.md +345 -0
- package/docs/plugins/sdk-setup.md +331 -0
- package/docs/plugins/sdk-testing.md +263 -0
- package/docs/plugins/voice-call.md +380 -0
- package/docs/plugins/zalouser.md +77 -0
- package/docs/prose.md +134 -0
- package/docs/providers/anthropic.md +259 -0
- package/docs/providers/bedrock.md +176 -0
- package/docs/providers/claude-max-api-proxy.md +154 -0
- package/docs/providers/cloudflare-ai-gateway.md +71 -0
- package/docs/providers/deepgram.md +93 -0
- package/docs/providers/github-copilot.md +72 -0
- package/docs/providers/glm.md +43 -0
- package/docs/providers/google.md +78 -0
- package/docs/providers/groq.md +96 -0
- package/docs/providers/huggingface.md +209 -0
- package/docs/providers/index.md +69 -0
- package/docs/providers/kilocode.md +74 -0
- package/docs/providers/litellm.md +154 -0
- package/docs/providers/minimax.md +224 -0
- package/docs/providers/mistral.md +54 -0
- package/docs/providers/models.md +45 -0
- package/docs/providers/modelstudio.md +66 -0
- package/docs/providers/moonshot.md +175 -0
- package/docs/providers/nvidia.md +55 -0
- package/docs/providers/ollama.md +352 -0
- package/docs/providers/openai.md +303 -0
- package/docs/providers/opencode-go.md +45 -0
- package/docs/providers/opencode.md +64 -0
- package/docs/providers/openrouter.md +37 -0
- package/docs/providers/perplexity-provider.md +62 -0
- package/docs/providers/qianfan.md +38 -0
- package/docs/providers/qwen.md +53 -0
- package/docs/providers/sglang.md +104 -0
- package/docs/providers/synthetic.md +99 -0
- package/docs/providers/together.md +66 -0
- package/docs/providers/venice.md +282 -0
- package/docs/providers/vercel-ai-gateway.md +60 -0
- package/docs/providers/vllm.md +92 -0
- package/docs/providers/volcengine.md +74 -0
- package/docs/providers/xai.md +60 -0
- package/docs/providers/xiaomi.md +86 -0
- package/docs/providers/zai.md +46 -0
- package/docs/reference/AGENTS.default.md +126 -0
- package/docs/reference/RELEASING.md +42 -0
- package/docs/reference/api-usage-costs.md +144 -0
- package/docs/reference/credits.md +30 -0
- package/docs/reference/device-models.md +47 -0
- package/docs/reference/memory-config.md +711 -0
- package/docs/reference/prompt-caching.md +185 -0
- package/docs/reference/rpc.md +43 -0
- package/docs/reference/secretref-credential-surface.md +140 -0
- package/docs/reference/secretref-user-supplied-credentials-matrix.json +563 -0
- package/docs/reference/session-management-compaction.md +324 -0
- package/docs/reference/templates/AGENTS.dev.md +83 -0
- package/docs/reference/templates/AGENTS.md +219 -0
- package/docs/reference/templates/BOOT.md +11 -0
- package/docs/reference/templates/BOOTSTRAP.md +62 -0
- package/docs/reference/templates/HEARTBEAT.md +14 -0
- package/docs/reference/templates/IDENTITY.dev.md +47 -0
- package/docs/reference/templates/IDENTITY.md +29 -0
- package/docs/reference/templates/SOUL.dev.md +76 -0
- package/docs/reference/templates/SOUL.md +43 -0
- package/docs/reference/templates/TOOLS.dev.md +24 -0
- package/docs/reference/templates/TOOLS.md +47 -0
- package/docs/reference/templates/USER.dev.md +18 -0
- package/docs/reference/templates/USER.md +23 -0
- package/docs/reference/test.md +90 -0
- package/docs/reference/token-use.md +175 -0
- package/docs/reference/transcript-hygiene.md +151 -0
- package/docs/reference/wizard.md +235 -0
- package/docs/security/CONTRIBUTING-THREAT-MODEL.md +98 -0
- package/docs/security/THREAT-MODEL-ATLAS.md +611 -0
- package/docs/security/formal-verification.md +167 -0
- package/docs/start/bootstrapping.md +41 -0
- package/docs/start/docs-directory.md +66 -0
- package/docs/start/getting-started.md +116 -0
- package/docs/start/hubs.md +198 -0
- package/docs/start/lore.md +219 -0
- package/docs/start/onboarding-overview.md +67 -0
- package/docs/start/onboarding.md +91 -0
- package/docs/start/openclaw.md +221 -0
- package/docs/start/quickstart.md +22 -0
- package/docs/start/setup.md +164 -0
- package/docs/start/showcase.md +418 -0
- package/docs/start/wizard-cli-automation.md +215 -0
- package/docs/start/wizard-cli-reference.md +299 -0
- package/docs/start/wizard.md +125 -0
- package/docs/style.css +37 -0
- package/docs/tools/acp-agents.md +623 -0
- package/docs/tools/agent-send.md +100 -0
- package/docs/tools/apply-patch.md +51 -0
- package/docs/tools/brave-search.md +93 -0
- package/docs/tools/browser-linux-troubleshooting.md +138 -0
- package/docs/tools/browser-login.md +73 -0
- package/docs/tools/browser-wsl2-windows-remote-cdp-troubleshooting.md +211 -0
- package/docs/tools/browser.md +731 -0
- package/docs/tools/btw.md +142 -0
- package/docs/tools/capability-cookbook.md +119 -0
- package/docs/tools/clawhub.md +298 -0
- package/docs/tools/creating-skills.md +117 -0
- package/docs/tools/diffs.md +386 -0
- package/docs/tools/elevated.md +114 -0
- package/docs/tools/exec-approvals.md +430 -0
- package/docs/tools/exec.md +207 -0
- package/docs/tools/firecrawl.md +140 -0
- package/docs/tools/index.md +137 -0
- package/docs/tools/llm-task.md +119 -0
- package/docs/tools/lobster.md +340 -0
- package/docs/tools/loop-detection.md +100 -0
- package/docs/tools/multi-agent-sandbox-tools.md +364 -0
- package/docs/tools/pdf.md +156 -0
- package/docs/tools/perplexity-search.md +174 -0
- package/docs/tools/plugin.md +255 -0
- package/docs/tools/reactions.md +64 -0
- package/docs/tools/skills-config.md +86 -0
- package/docs/tools/skills.md +309 -0
- package/docs/tools/slash-commands.md +294 -0
- package/docs/tools/subagents.md +295 -0
- package/docs/tools/tavily.md +125 -0
- package/docs/tools/thinking.md +96 -0
- package/docs/tools/tts.md +406 -0
- package/docs/tools/web.md +516 -0
- package/docs/tts.md +406 -0
- package/docs/vps.md +112 -0
- package/docs/web/control-ui.md +275 -0
- package/docs/web/dashboard.md +54 -0
- package/docs/web/index.md +120 -0
- package/docs/web/tui.md +170 -0
- package/docs/web/webchat.md +61 -0
- package/docs/whatsapp-openclaw-ai-zh.jpg +0 -0
- package/docs/whatsapp-openclaw.jpg +0 -0
- package/docs/zh-CN/AGENTS.md +61 -0
- package/docs/zh-CN/automation/auth-monitoring.md +47 -0
- package/docs/zh-CN/automation/cron-jobs.md +435 -0
- package/docs/zh-CN/automation/cron-vs-heartbeat.md +286 -0
- package/docs/zh-CN/automation/gmail-pubsub.md +249 -0
- package/docs/zh-CN/automation/hooks.md +1051 -0
- package/docs/zh-CN/automation/poll.md +76 -0
- package/docs/zh-CN/automation/troubleshooting.md +8 -0
- package/docs/zh-CN/automation/webhook.md +163 -0
- package/docs/zh-CN/brave-search.md +60 -0
- package/docs/zh-CN/channels/bluebubbles.md +354 -0
- package/docs/zh-CN/channels/broadcast-groups.md +449 -0
- package/docs/zh-CN/channels/channel-routing.md +117 -0
- package/docs/zh-CN/channels/discord.md +468 -0
- package/docs/zh-CN/channels/feishu.md +728 -0
- package/docs/zh-CN/channels/googlechat.md +257 -0
- package/docs/zh-CN/channels/grammy.md +38 -0
- package/docs/zh-CN/channels/group-messages.md +91 -0
- package/docs/zh-CN/channels/groups.md +379 -0
- package/docs/zh-CN/channels/imessage.md +302 -0
- package/docs/zh-CN/channels/index.md +53 -0
- package/docs/zh-CN/channels/line.md +180 -0
- package/docs/zh-CN/channels/location.md +63 -0
- package/docs/zh-CN/channels/matrix.md +221 -0
- package/docs/zh-CN/channels/mattermost.md +144 -0
- package/docs/zh-CN/channels/msteams.md +775 -0
- package/docs/zh-CN/channels/nextcloud-talk.md +142 -0
- package/docs/zh-CN/channels/nostr.md +249 -0
- package/docs/zh-CN/channels/pairing.md +89 -0
- package/docs/zh-CN/channels/signal.md +209 -0
- package/docs/zh-CN/channels/slack.md +531 -0
- package/docs/zh-CN/channels/synology-chat.md +138 -0
- package/docs/zh-CN/channels/telegram.md +751 -0
- package/docs/zh-CN/channels/tlon.md +136 -0
- package/docs/zh-CN/channels/troubleshooting.md +36 -0
- package/docs/zh-CN/channels/twitch.md +385 -0
- package/docs/zh-CN/channels/whatsapp.md +411 -0
- package/docs/zh-CN/channels/zalo.md +196 -0
- package/docs/zh-CN/channels/zalouser.md +147 -0
- package/docs/zh-CN/cli/acp.md +173 -0
- package/docs/zh-CN/cli/agent.md +30 -0
- package/docs/zh-CN/cli/agents.md +82 -0
- package/docs/zh-CN/cli/approvals.md +57 -0
- package/docs/zh-CN/cli/browser.md +114 -0
- package/docs/zh-CN/cli/channels.md +86 -0
- package/docs/zh-CN/cli/config.md +57 -0
- package/docs/zh-CN/cli/configure.md +38 -0
- package/docs/zh-CN/cli/cron.md +43 -0
- package/docs/zh-CN/cli/dashboard.md +23 -0
- package/docs/zh-CN/cli/devices.md +74 -0
- package/docs/zh-CN/cli/directory.md +70 -0
- package/docs/zh-CN/cli/dns.md +30 -0
- package/docs/zh-CN/cli/docs.md +22 -0
- package/docs/zh-CN/cli/doctor.md +48 -0
- package/docs/zh-CN/cli/gateway.md +206 -0
- package/docs/zh-CN/cli/health.md +28 -0
- package/docs/zh-CN/cli/hooks.md +298 -0
- package/docs/zh-CN/cli/index.md +1143 -0
- package/docs/zh-CN/cli/logs.md +31 -0
- package/docs/zh-CN/cli/memory.md +52 -0
- package/docs/zh-CN/cli/message.md +246 -0
- package/docs/zh-CN/cli/models.md +85 -0
- package/docs/zh-CN/cli/node.md +115 -0
- package/docs/zh-CN/cli/nodes.md +80 -0
- package/docs/zh-CN/cli/onboard.md +164 -0
- package/docs/zh-CN/cli/pairing.md +28 -0
- package/docs/zh-CN/cli/plugins.md +66 -0
- package/docs/zh-CN/cli/reset.md +24 -0
- package/docs/zh-CN/cli/sandbox.md +158 -0
- package/docs/zh-CN/cli/security.md +33 -0
- package/docs/zh-CN/cli/sessions.md +23 -0
- package/docs/zh-CN/cli/setup.md +36 -0
- package/docs/zh-CN/cli/skills.md +33 -0
- package/docs/zh-CN/cli/status.md +33 -0
- package/docs/zh-CN/cli/system.md +63 -0
- package/docs/zh-CN/cli/tui.md +30 -0
- package/docs/zh-CN/cli/uninstall.md +24 -0
- package/docs/zh-CN/cli/update.md +101 -0
- package/docs/zh-CN/cli/voicecall.md +41 -0
- package/docs/zh-CN/cli/webhooks.md +32 -0
- package/docs/zh-CN/concepts/agent-loop.md +146 -0
- package/docs/zh-CN/concepts/agent-workspace.md +219 -0
- package/docs/zh-CN/concepts/agent.md +115 -0
- package/docs/zh-CN/concepts/architecture.md +123 -0
- package/docs/zh-CN/concepts/compaction.md +67 -0
- package/docs/zh-CN/concepts/context.md +168 -0
- package/docs/zh-CN/concepts/features.md +59 -0
- package/docs/zh-CN/concepts/markdown-formatting.md +117 -0
- package/docs/zh-CN/concepts/memory.md +412 -0
- package/docs/zh-CN/concepts/messages.md +141 -0
- package/docs/zh-CN/concepts/model-failover.md +145 -0
- package/docs/zh-CN/concepts/model-providers.md +606 -0
- package/docs/zh-CN/concepts/models.md +225 -0
- package/docs/zh-CN/concepts/multi-agent.md +372 -0
- package/docs/zh-CN/concepts/oauth.md +164 -0
- package/docs/zh-CN/concepts/presence.md +99 -0
- package/docs/zh-CN/concepts/queue.md +94 -0
- package/docs/zh-CN/concepts/retry.md +76 -0
- package/docs/zh-CN/concepts/session-pruning.md +129 -0
- package/docs/zh-CN/concepts/session-tool.md +200 -0
- package/docs/zh-CN/concepts/session.md +166 -0
- package/docs/zh-CN/concepts/streaming.md +133 -0
- package/docs/zh-CN/concepts/system-prompt.md +101 -0
- package/docs/zh-CN/concepts/timezone.md +96 -0
- package/docs/zh-CN/concepts/typebox.md +284 -0
- package/docs/zh-CN/concepts/typing-indicators.md +74 -0
- package/docs/zh-CN/concepts/usage-tracking.md +42 -0
- package/docs/zh-CN/date-time.md +129 -0
- package/docs/zh-CN/debug/node-issue.md +90 -0
- package/docs/zh-CN/diagnostics/flags.md +98 -0
- package/docs/zh-CN/gateway/authentication.md +184 -0
- package/docs/zh-CN/gateway/background-process.md +100 -0
- package/docs/zh-CN/gateway/bonjour.md +174 -0
- package/docs/zh-CN/gateway/bridge-protocol.md +86 -0
- package/docs/zh-CN/gateway/cli-backends.md +213 -0
- package/docs/zh-CN/gateway/configuration-examples.md +587 -0
- package/docs/zh-CN/gateway/configuration-reference.md +3103 -0
- package/docs/zh-CN/gateway/configuration.md +640 -0
- package/docs/zh-CN/gateway/discovery.md +123 -0
- package/docs/zh-CN/gateway/doctor.md +238 -0
- package/docs/zh-CN/gateway/gateway-lock.md +41 -0
- package/docs/zh-CN/gateway/health.md +42 -0
- package/docs/zh-CN/gateway/heartbeat.md +274 -0
- package/docs/zh-CN/gateway/index.md +335 -0
- package/docs/zh-CN/gateway/local-models.md +159 -0
- package/docs/zh-CN/gateway/logging.md +114 -0
- package/docs/zh-CN/gateway/multiple-gateways.md +119 -0
- package/docs/zh-CN/gateway/network-model.md +23 -0
- package/docs/zh-CN/gateway/openai-http-api.md +125 -0
- package/docs/zh-CN/gateway/openresponses-http-api.md +317 -0
- package/docs/zh-CN/gateway/pairing.md +99 -0
- package/docs/zh-CN/gateway/protocol.md +220 -0
- package/docs/zh-CN/gateway/remote-gateway-readme.md +164 -0
- package/docs/zh-CN/gateway/remote.md +133 -0
- package/docs/zh-CN/gateway/sandbox-vs-tool-policy-vs-elevated.md +135 -0
- package/docs/zh-CN/gateway/sandboxing.md +188 -0
- package/docs/zh-CN/gateway/security/index.md +777 -0
- package/docs/zh-CN/gateway/tailscale.md +124 -0
- package/docs/zh-CN/gateway/tools-invoke-http-api.md +92 -0
- package/docs/zh-CN/gateway/troubleshooting.md +771 -0
- package/docs/zh-CN/help/debugging.md +160 -0
- package/docs/zh-CN/help/environment.md +88 -0
- package/docs/zh-CN/help/faq.md +2640 -0
- package/docs/zh-CN/help/index.md +28 -0
- package/docs/zh-CN/help/scripts.md +35 -0
- package/docs/zh-CN/help/testing.md +375 -0
- package/docs/zh-CN/help/troubleshooting.md +104 -0
- package/docs/zh-CN/index.md +186 -0
- package/docs/zh-CN/install/ansible.md +215 -0
- package/docs/zh-CN/install/bun.md +65 -0
- package/docs/zh-CN/install/development-channels.md +81 -0
- package/docs/zh-CN/install/docker.md +532 -0
- package/docs/zh-CN/install/exe-dev.md +133 -0
- package/docs/zh-CN/install/fly.md +490 -0
- package/docs/zh-CN/install/gcp.md +510 -0
- package/docs/zh-CN/install/hetzner.md +337 -0
- package/docs/zh-CN/install/index.md +235 -0
- package/docs/zh-CN/install/installer.md +422 -0
- package/docs/zh-CN/install/macos-vm.md +288 -0
- package/docs/zh-CN/install/migrating.md +199 -0
- package/docs/zh-CN/install/nix.md +99 -0
- package/docs/zh-CN/install/node.md +8 -0
- package/docs/zh-CN/install/northflank.mdx +60 -0
- package/docs/zh-CN/install/railway.mdx +106 -0
- package/docs/zh-CN/install/render.mdx +169 -0
- package/docs/zh-CN/install/uninstall.md +135 -0
- package/docs/zh-CN/install/updating.md +233 -0
- package/docs/zh-CN/logging.md +329 -0
- package/docs/zh-CN/network.md +59 -0
- package/docs/zh-CN/nodes/audio.md +120 -0
- package/docs/zh-CN/nodes/camera.md +162 -0
- package/docs/zh-CN/nodes/images.md +79 -0
- package/docs/zh-CN/nodes/index.md +348 -0
- package/docs/zh-CN/nodes/location-command.md +120 -0
- package/docs/zh-CN/nodes/media-understanding.md +380 -0
- package/docs/zh-CN/nodes/talk.md +97 -0
- package/docs/zh-CN/nodes/troubleshooting.md +8 -0
- package/docs/zh-CN/nodes/voicewake.md +72 -0
- package/docs/zh-CN/perplexity.md +102 -0
- package/docs/zh-CN/pi-dev.md +77 -0
- package/docs/zh-CN/pi.md +619 -0
- package/docs/zh-CN/platforms/android.md +155 -0
- package/docs/zh-CN/platforms/digitalocean.md +273 -0
- package/docs/zh-CN/platforms/index.md +60 -0
- package/docs/zh-CN/platforms/ios.md +114 -0
- package/docs/zh-CN/platforms/linux.md +100 -0
- package/docs/zh-CN/platforms/mac/bundled-gateway.md +75 -0
- package/docs/zh-CN/platforms/mac/canvas.md +128 -0
- package/docs/zh-CN/platforms/mac/child-process.md +73 -0
- package/docs/zh-CN/platforms/mac/dev-setup.md +109 -0
- package/docs/zh-CN/platforms/mac/health.md +41 -0
- package/docs/zh-CN/platforms/mac/icon.md +38 -0
- package/docs/zh-CN/platforms/mac/logging.md +64 -0
- package/docs/zh-CN/platforms/mac/menu-bar.md +88 -0
- package/docs/zh-CN/platforms/mac/peekaboo.md +62 -0
- package/docs/zh-CN/platforms/mac/permissions.md +46 -0
- package/docs/zh-CN/platforms/mac/remote.md +90 -0
- package/docs/zh-CN/platforms/mac/signing.md +54 -0
- package/docs/zh-CN/platforms/mac/skills.md +40 -0
- package/docs/zh-CN/platforms/mac/voice-overlay.md +67 -0
- package/docs/zh-CN/platforms/mac/voicewake.md +74 -0
- package/docs/zh-CN/platforms/mac/webchat.md +43 -0
- package/docs/zh-CN/platforms/mac/xpc.md +68 -0
- package/docs/zh-CN/platforms/macos.md +193 -0
- package/docs/zh-CN/platforms/oracle.md +310 -0
- package/docs/zh-CN/platforms/raspberry-pi.md +416 -0
- package/docs/zh-CN/platforms/windows.md +247 -0
- package/docs/zh-CN/plugins/agent-tools.md +99 -0
- package/docs/zh-CN/plugins/manifest.md +68 -0
- package/docs/zh-CN/plugins/voice-call.md +250 -0
- package/docs/zh-CN/plugins/zalouser.md +88 -0
- package/docs/zh-CN/prose.md +141 -0
- package/docs/zh-CN/providers/anthropic.md +265 -0
- package/docs/zh-CN/providers/bedrock.md +170 -0
- package/docs/zh-CN/providers/claude-max-api-proxy.md +155 -0
- package/docs/zh-CN/providers/cloudflare-ai-gateway.md +78 -0
- package/docs/zh-CN/providers/deepgram.md +97 -0
- package/docs/zh-CN/providers/github-copilot.md +67 -0
- package/docs/zh-CN/providers/glm.md +50 -0
- package/docs/zh-CN/providers/huggingface.md +216 -0
- package/docs/zh-CN/providers/index.md +69 -0
- package/docs/zh-CN/providers/kilocode.md +80 -0
- package/docs/zh-CN/providers/litellm.md +160 -0
- package/docs/zh-CN/providers/minimax.md +222 -0
- package/docs/zh-CN/providers/mistral.md +61 -0
- package/docs/zh-CN/providers/models.md +51 -0
- package/docs/zh-CN/providers/moonshot.md +182 -0
- package/docs/zh-CN/providers/nvidia.md +62 -0
- package/docs/zh-CN/providers/ollama.md +359 -0
- package/docs/zh-CN/providers/openai.md +308 -0
- package/docs/zh-CN/providers/opencode-go.md +52 -0
- package/docs/zh-CN/providers/opencode.md +71 -0
- package/docs/zh-CN/providers/openrouter.md +44 -0
- package/docs/zh-CN/providers/qianfan.md +45 -0
- package/docs/zh-CN/providers/qwen.md +55 -0
- package/docs/zh-CN/providers/sglang.md +111 -0
- package/docs/zh-CN/providers/synthetic.md +106 -0
- package/docs/zh-CN/providers/together.md +72 -0
- package/docs/zh-CN/providers/venice.md +289 -0
- package/docs/zh-CN/providers/vercel-ai-gateway.md +66 -0
- package/docs/zh-CN/providers/xiaomi.md +93 -0
- package/docs/zh-CN/providers/zai.md +53 -0
- package/docs/zh-CN/reference/AGENTS.default.md +131 -0
- package/docs/zh-CN/reference/RELEASING.md +48 -0
- package/docs/zh-CN/reference/api-usage-costs.md +141 -0
- package/docs/zh-CN/reference/credits.md +34 -0
- package/docs/zh-CN/reference/device-models.md +54 -0
- package/docs/zh-CN/reference/rpc.md +48 -0
- package/docs/zh-CN/reference/session-management-compaction.md +287 -0
- package/docs/zh-CN/reference/templates/AGENTS.dev.md +89 -0
- package/docs/zh-CN/reference/templates/AGENTS.md +225 -0
- package/docs/zh-CN/reference/templates/BOOT.md +17 -0
- package/docs/zh-CN/reference/templates/BOOTSTRAP.md +68 -0
- package/docs/zh-CN/reference/templates/HEARTBEAT.md +18 -0
- package/docs/zh-CN/reference/templates/IDENTITY.dev.md +54 -0
- package/docs/zh-CN/reference/templates/IDENTITY.md +36 -0
- package/docs/zh-CN/reference/templates/SOUL.dev.md +83 -0
- package/docs/zh-CN/reference/templates/SOUL.md +49 -0
- package/docs/zh-CN/reference/templates/TOOLS.dev.md +31 -0
- package/docs/zh-CN/reference/templates/TOOLS.md +53 -0
- package/docs/zh-CN/reference/templates/USER.dev.md +25 -0
- package/docs/zh-CN/reference/templates/USER.md +30 -0
- package/docs/zh-CN/reference/test.md +57 -0
- package/docs/zh-CN/reference/token-use.md +119 -0
- package/docs/zh-CN/reference/transcript-hygiene.md +109 -0
- package/docs/zh-CN/reference/wizard.md +242 -0
- package/docs/zh-CN/security/formal-verification.md +171 -0
- package/docs/zh-CN/start/bootstrapping.md +9 -0
- package/docs/zh-CN/start/docs-directory.md +70 -0
- package/docs/zh-CN/start/getting-started.md +143 -0
- package/docs/zh-CN/start/hubs.md +194 -0
- package/docs/zh-CN/start/lore.md +226 -0
- package/docs/zh-CN/start/onboarding-overview.md +58 -0
- package/docs/zh-CN/start/onboarding.md +105 -0
- package/docs/zh-CN/start/openclaw.md +248 -0
- package/docs/zh-CN/start/quickstart.md +88 -0
- package/docs/zh-CN/start/setup.md +153 -0
- package/docs/zh-CN/start/showcase.md +423 -0
- package/docs/zh-CN/start/wizard-cli-automation.md +222 -0
- package/docs/zh-CN/start/wizard-cli-reference.md +306 -0
- package/docs/zh-CN/start/wizard.md +132 -0
- package/docs/zh-CN/tools/agent-send.md +59 -0
- package/docs/zh-CN/tools/apply-patch.md +57 -0
- package/docs/zh-CN/tools/browser-linux-troubleshooting.md +144 -0
- package/docs/zh-CN/tools/browser-login.md +75 -0
- package/docs/zh-CN/tools/browser.md +553 -0
- package/docs/zh-CN/tools/chrome-extension.md +183 -0
- package/docs/zh-CN/tools/clawhub.md +209 -0
- package/docs/zh-CN/tools/creating-skills.md +61 -0
- package/docs/zh-CN/tools/elevated.md +64 -0
- package/docs/zh-CN/tools/exec-approvals.md +234 -0
- package/docs/zh-CN/tools/exec.md +169 -0
- package/docs/zh-CN/tools/firecrawl.md +68 -0
- package/docs/zh-CN/tools/index.md +515 -0
- package/docs/zh-CN/tools/llm-task.md +117 -0
- package/docs/zh-CN/tools/lobster.md +349 -0
- package/docs/zh-CN/tools/multi-agent-sandbox-tools.md +401 -0
- package/docs/zh-CN/tools/plugin.md +1612 -0
- package/docs/zh-CN/tools/reactions.md +29 -0
- package/docs/zh-CN/tools/skills-config.md +78 -0
- package/docs/zh-CN/tools/skills.md +279 -0
- package/docs/zh-CN/tools/slash-commands.md +205 -0
- package/docs/zh-CN/tools/subagents.md +167 -0
- package/docs/zh-CN/tools/thinking.md +80 -0
- package/docs/zh-CN/tools/web.md +289 -0
- package/docs/zh-CN/tts.md +375 -0
- package/docs/zh-CN/vps.md +47 -0
- package/docs/zh-CN/web/control-ui.md +191 -0
- package/docs/zh-CN/web/dashboard.md +53 -0
- package/docs/zh-CN/web/index.md +118 -0
- package/docs/zh-CN/web/tui.md +166 -0
- package/docs/zh-CN/web/webchat.md +56 -0
- package/package.json +841 -0
- package/quantumclaw.mjs +135 -0
- package/skills/1password/SKILL.md +70 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/apple-notes/SKILL.md +77 -0
- package/skills/apple-reminders/SKILL.md +118 -0
- package/skills/bear-notes/SKILL.md +107 -0
- package/skills/blogwatcher/SKILL.md +69 -0
- package/skills/blucli/SKILL.md +47 -0
- package/skills/bluebubbles/SKILL.md +131 -0
- package/skills/camsnap/SKILL.md +45 -0
- package/skills/canvas/SKILL.md +198 -0
- package/skills/clawhub/SKILL.md +77 -0
- package/skills/coding-agent/SKILL.md +295 -0
- package/skills/discord/SKILL.md +197 -0
- package/skills/eightctl/SKILL.md +50 -0
- package/skills/gemini/SKILL.md +43 -0
- package/skills/gh-issues/SKILL.md +865 -0
- package/skills/gifgrep/SKILL.md +79 -0
- package/skills/github/SKILL.md +163 -0
- package/skills/gog/SKILL.md +116 -0
- package/skills/goplaces/SKILL.md +52 -0
- package/skills/healthcheck/SKILL.md +245 -0
- package/skills/himalaya/SKILL.md +257 -0
- package/skills/himalaya/references/configuration.md +184 -0
- package/skills/himalaya/references/message-composition.md +199 -0
- package/skills/imsg/SKILL.md +122 -0
- package/skills/mcporter/SKILL.md +61 -0
- package/skills/model-usage/SKILL.md +69 -0
- package/skills/model-usage/references/codexbar-cli.md +33 -0
- package/skills/model-usage/scripts/model_usage.py +320 -0
- package/skills/model-usage/scripts/test_model_usage.py +40 -0
- package/skills/nano-pdf/SKILL.md +38 -0
- package/skills/node-connect/SKILL.md +142 -0
- package/skills/notion/SKILL.md +174 -0
- package/skills/obsidian/SKILL.md +81 -0
- package/skills/openai-image-gen/SKILL.md +92 -0
- package/skills/openai-image-gen/scripts/gen.py +328 -0
- package/skills/openai-image-gen/scripts/test_gen.py +140 -0
- package/skills/openai-whisper/SKILL.md +38 -0
- package/skills/openai-whisper-api/SKILL.md +52 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +112 -0
- package/skills/oracle/SKILL.md +125 -0
- package/skills/ordercli/SKILL.md +78 -0
- package/skills/peekaboo/SKILL.md +190 -0
- package/skills/sag/SKILL.md +87 -0
- package/skills/session-logs/SKILL.md +115 -0
- package/skills/sherpa-onnx-tts/SKILL.md +103 -0
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +178 -0
- package/skills/skill-creator/SKILL.md +372 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/scripts/init_skill.py +378 -0
- package/skills/skill-creator/scripts/package_skill.py +139 -0
- package/skills/skill-creator/scripts/quick_validate.py +159 -0
- package/skills/skill-creator/scripts/test_package_skill.py +160 -0
- package/skills/skill-creator/scripts/test_quick_validate.py +72 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +49 -0
- package/skills/sonoscli/SKILL.md +65 -0
- package/skills/spotify-player/SKILL.md +64 -0
- package/skills/summarize/SKILL.md +87 -0
- package/skills/things-mac/SKILL.md +86 -0
- package/skills/tmux/SKILL.md +153 -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 +95 -0
- package/skills/video-frames/SKILL.md +46 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/voice-call/SKILL.md +45 -0
- package/skills/wacli/SKILL.md +72 -0
- package/skills/weather/SKILL.md +112 -0
- package/skills/xurl/SKILL.md +461 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: imsg
|
|
3
|
+
description: iMessage/SMS CLI for listing chats, history, and sending messages via Messages.app.
|
|
4
|
+
homepage: https://imsg.to
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"quantumclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "📨",
|
|
10
|
+
"os": ["darwin"],
|
|
11
|
+
"requires": { "bins": ["imsg"] },
|
|
12
|
+
"install":
|
|
13
|
+
[
|
|
14
|
+
{
|
|
15
|
+
"id": "brew",
|
|
16
|
+
"kind": "brew",
|
|
17
|
+
"formula": "steipete/tap/imsg",
|
|
18
|
+
"bins": ["imsg"],
|
|
19
|
+
"label": "Install imsg (brew)",
|
|
20
|
+
},
|
|
21
|
+
],
|
|
22
|
+
},
|
|
23
|
+
}
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
# imsg
|
|
27
|
+
|
|
28
|
+
Use `imsg` to read and send iMessage/SMS via macOS Messages.app.
|
|
29
|
+
|
|
30
|
+
## When to Use
|
|
31
|
+
|
|
32
|
+
✅ **USE this skill when:**
|
|
33
|
+
|
|
34
|
+
- User explicitly asks to send iMessage or SMS
|
|
35
|
+
- Reading iMessage conversation history
|
|
36
|
+
- Checking recent Messages.app chats
|
|
37
|
+
- Sending to phone numbers or Apple IDs
|
|
38
|
+
|
|
39
|
+
## When NOT to Use
|
|
40
|
+
|
|
41
|
+
❌ **DON'T use this skill when:**
|
|
42
|
+
|
|
43
|
+
- Telegram messages → use `message` tool with `channel:telegram`
|
|
44
|
+
- Signal messages → use Signal channel if configured
|
|
45
|
+
- WhatsApp messages → use WhatsApp channel if configured
|
|
46
|
+
- Discord messages → use `message` tool with `channel:discord`
|
|
47
|
+
- Slack messages → use `slack` skill
|
|
48
|
+
- Group chat management (adding/removing members) → not supported
|
|
49
|
+
- Bulk/mass messaging → always confirm with user first
|
|
50
|
+
- Replying in current conversation → just reply normally (QuantumClaw routes automatically)
|
|
51
|
+
|
|
52
|
+
## Requirements
|
|
53
|
+
|
|
54
|
+
- macOS with Messages.app signed in
|
|
55
|
+
- Full Disk Access for terminal
|
|
56
|
+
- Automation permission for Messages.app (for sending)
|
|
57
|
+
|
|
58
|
+
## Common Commands
|
|
59
|
+
|
|
60
|
+
### List Chats
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
imsg chats --limit 10 --json
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### View History
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# By chat ID
|
|
70
|
+
imsg history --chat-id 1 --limit 20 --json
|
|
71
|
+
|
|
72
|
+
# With attachments info
|
|
73
|
+
imsg history --chat-id 1 --limit 20 --attachments --json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Watch for New Messages
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
imsg watch --chat-id 1 --attachments
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Send Messages
|
|
83
|
+
|
|
84
|
+
```bash
|
|
85
|
+
# Text only
|
|
86
|
+
imsg send --to "+14155551212" --text "Hello!"
|
|
87
|
+
|
|
88
|
+
# With attachment
|
|
89
|
+
imsg send --to "+14155551212" --text "Check this out" --file /path/to/image.jpg
|
|
90
|
+
|
|
91
|
+
# Specify service
|
|
92
|
+
imsg send --to "+14155551212" --text "Hi" --service imessage
|
|
93
|
+
imsg send --to "+14155551212" --text "Hi" --service sms
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Service Options
|
|
97
|
+
|
|
98
|
+
- `--service imessage` — Force iMessage (requires recipient has iMessage)
|
|
99
|
+
- `--service sms` — Force SMS (green bubble)
|
|
100
|
+
- `--service auto` — Let Messages.app decide (default)
|
|
101
|
+
|
|
102
|
+
## Safety Rules
|
|
103
|
+
|
|
104
|
+
1. **Always confirm recipient and message content** before sending
|
|
105
|
+
2. **Never send to unknown numbers** without explicit user approval
|
|
106
|
+
3. **Be careful with attachments** — confirm file path exists
|
|
107
|
+
4. **Rate limit yourself** — don't spam
|
|
108
|
+
|
|
109
|
+
## Example Workflow
|
|
110
|
+
|
|
111
|
+
User: "Text mom that I'll be late"
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# 1. Find mom's chat
|
|
115
|
+
imsg chats --limit 20 --json | jq '.[] | select(.displayName | contains("Mom"))'
|
|
116
|
+
|
|
117
|
+
# 2. Confirm with user
|
|
118
|
+
# "Found Mom at +1555123456. Send 'I'll be late' via iMessage?"
|
|
119
|
+
|
|
120
|
+
# 3. Send after confirmation
|
|
121
|
+
imsg send --to "+1555123456" --text "I'll be late"
|
|
122
|
+
```
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mcporter
|
|
3
|
+
description: Use the mcporter CLI to list, configure, auth, and call MCP servers/tools directly (HTTP or stdio), including ad-hoc servers, config edits, and CLI/type generation.
|
|
4
|
+
homepage: http://mcporter.dev
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"quantumclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "📦",
|
|
10
|
+
"requires": { "bins": ["mcporter"] },
|
|
11
|
+
"install":
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
"id": "node",
|
|
15
|
+
"kind": "node",
|
|
16
|
+
"package": "mcporter",
|
|
17
|
+
"bins": ["mcporter"],
|
|
18
|
+
"label": "Install mcporter (node)",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# mcporter
|
|
26
|
+
|
|
27
|
+
Use `mcporter` to work with MCP servers directly.
|
|
28
|
+
|
|
29
|
+
Quick start
|
|
30
|
+
|
|
31
|
+
- `mcporter list`
|
|
32
|
+
- `mcporter list <server> --schema`
|
|
33
|
+
- `mcporter call <server.tool> key=value`
|
|
34
|
+
|
|
35
|
+
Call tools
|
|
36
|
+
|
|
37
|
+
- Selector: `mcporter call linear.list_issues team=ENG limit:5`
|
|
38
|
+
- Function syntax: `mcporter call "linear.create_issue(title: \"Bug\")"`
|
|
39
|
+
- Full URL: `mcporter call https://api.example.com/mcp.fetch url:https://example.com`
|
|
40
|
+
- Stdio: `mcporter call --stdio "bun run ./server.ts" scrape url=https://example.com`
|
|
41
|
+
- JSON payload: `mcporter call <server.tool> --args '{"limit":5}'`
|
|
42
|
+
|
|
43
|
+
Auth + config
|
|
44
|
+
|
|
45
|
+
- OAuth: `mcporter auth <server | url> [--reset]`
|
|
46
|
+
- Config: `mcporter config list|get|add|remove|import|login|logout`
|
|
47
|
+
|
|
48
|
+
Daemon
|
|
49
|
+
|
|
50
|
+
- `mcporter daemon start|status|stop|restart`
|
|
51
|
+
|
|
52
|
+
Codegen
|
|
53
|
+
|
|
54
|
+
- CLI: `mcporter generate-cli --server <name>` or `--command <url>`
|
|
55
|
+
- Inspect: `mcporter inspect-cli <path> [--json]`
|
|
56
|
+
- TS: `mcporter emit-ts <server> --mode client|types`
|
|
57
|
+
|
|
58
|
+
Notes
|
|
59
|
+
|
|
60
|
+
- Config default: `./config/mcporter.json` (override with `--config`).
|
|
61
|
+
- Prefer `--output json` for machine-readable results.
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: model-usage
|
|
3
|
+
description: Use CodexBar CLI local cost usage to summarize per-model usage for Codex or Claude, including the current (most recent) model or a full model breakdown. Trigger when asked for model-level usage/cost data from codexbar, or when you need a scriptable per-model summary from codexbar cost JSON.
|
|
4
|
+
metadata:
|
|
5
|
+
{
|
|
6
|
+
"quantumclaw":
|
|
7
|
+
{
|
|
8
|
+
"emoji": "📊",
|
|
9
|
+
"os": ["darwin"],
|
|
10
|
+
"requires": { "bins": ["codexbar"] },
|
|
11
|
+
"install":
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
"id": "brew-cask",
|
|
15
|
+
"kind": "brew",
|
|
16
|
+
"formula": "steipete/tap/codexbar",
|
|
17
|
+
"bins": ["codexbar"],
|
|
18
|
+
"label": "Install CodexBar (brew cask)",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# Model usage
|
|
26
|
+
|
|
27
|
+
## Overview
|
|
28
|
+
|
|
29
|
+
Get per-model usage cost from CodexBar's local cost logs. Supports "current model" (most recent daily entry) or "all models" summaries for Codex or Claude.
|
|
30
|
+
|
|
31
|
+
TODO: add Linux CLI support guidance once CodexBar CLI install path is documented for Linux.
|
|
32
|
+
|
|
33
|
+
## Quick start
|
|
34
|
+
|
|
35
|
+
1. Fetch cost JSON via CodexBar CLI or pass a JSON file.
|
|
36
|
+
2. Use the bundled script to summarize by model.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
python {baseDir}/scripts/model_usage.py --provider codex --mode current
|
|
40
|
+
python {baseDir}/scripts/model_usage.py --provider codex --mode all
|
|
41
|
+
python {baseDir}/scripts/model_usage.py --provider claude --mode all --format json --pretty
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Current model logic
|
|
45
|
+
|
|
46
|
+
- Uses the most recent daily row with `modelBreakdowns`.
|
|
47
|
+
- Picks the model with the highest cost in that row.
|
|
48
|
+
- Falls back to the last entry in `modelsUsed` when breakdowns are missing.
|
|
49
|
+
- Override with `--model <name>` when you need a specific model.
|
|
50
|
+
|
|
51
|
+
## Inputs
|
|
52
|
+
|
|
53
|
+
- Default: runs `codexbar cost --format json --provider <codex|claude>`.
|
|
54
|
+
- File or stdin:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
codexbar cost --provider codex --format json > /tmp/cost.json
|
|
58
|
+
python {baseDir}/scripts/model_usage.py --input /tmp/cost.json --mode all
|
|
59
|
+
cat /tmp/cost.json | python {baseDir}/scripts/model_usage.py --input - --mode current
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Output
|
|
63
|
+
|
|
64
|
+
- Text (default) or JSON (`--format json --pretty`).
|
|
65
|
+
- Values are cost-only per model; tokens are not split by model in CodexBar output.
|
|
66
|
+
|
|
67
|
+
## References
|
|
68
|
+
|
|
69
|
+
- Read `references/codexbar-cli.md` for CLI flags and cost JSON fields.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# CodexBar CLI quick ref (usage + cost)
|
|
2
|
+
|
|
3
|
+
## Install
|
|
4
|
+
|
|
5
|
+
- App: Preferences -> Advanced -> Install CLI
|
|
6
|
+
- Repo: ./bin/install-codexbar-cli.sh
|
|
7
|
+
|
|
8
|
+
## Commands
|
|
9
|
+
|
|
10
|
+
- Usage snapshot (web/cli sources):
|
|
11
|
+
- codexbar usage --format json --pretty
|
|
12
|
+
- codexbar --provider all --format json
|
|
13
|
+
- Local cost usage (Codex + Claude only):
|
|
14
|
+
- codexbar cost --format json --pretty
|
|
15
|
+
- codexbar cost --provider codex|claude --format json
|
|
16
|
+
|
|
17
|
+
## Cost JSON fields
|
|
18
|
+
|
|
19
|
+
The payload is an array (one per provider).
|
|
20
|
+
|
|
21
|
+
- provider, source, updatedAt
|
|
22
|
+
- sessionTokens, sessionCostUSD
|
|
23
|
+
- last30DaysTokens, last30DaysCostUSD
|
|
24
|
+
- daily[]: date, inputTokens, outputTokens, cacheReadTokens, cacheCreationTokens, totalTokens, totalCost, modelsUsed, modelBreakdowns[]
|
|
25
|
+
- modelBreakdowns[]: modelName, cost
|
|
26
|
+
- totals: totalInputTokens, totalOutputTokens, cacheReadTokens, cacheCreationTokens, totalTokens, totalCost
|
|
27
|
+
|
|
28
|
+
## Notes
|
|
29
|
+
|
|
30
|
+
- Cost usage is local-only. It reads JSONL logs under:
|
|
31
|
+
- Codex: ~/.codex/sessions/\*_/_.jsonl
|
|
32
|
+
- Claude: ~/.config/claude/projects/**/\*.jsonl or ~/.claude/projects/**/\*.jsonl
|
|
33
|
+
- If web usage is required (non-local), use codexbar usage (not cost).
|
|
@@ -0,0 +1,320 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Summarize CodexBar local cost usage by model.
|
|
4
|
+
|
|
5
|
+
Defaults to current model (most recent daily entry), or list all models.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import argparse
|
|
11
|
+
import json
|
|
12
|
+
import os
|
|
13
|
+
import subprocess
|
|
14
|
+
import sys
|
|
15
|
+
from dataclasses import dataclass
|
|
16
|
+
from datetime import date, datetime, timedelta
|
|
17
|
+
from typing import Any, Dict, Iterable, List, Optional, Tuple
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
def positive_int(value: str) -> int:
|
|
21
|
+
try:
|
|
22
|
+
parsed = int(value)
|
|
23
|
+
except ValueError as exc:
|
|
24
|
+
raise argparse.ArgumentTypeError("must be an integer") from exc
|
|
25
|
+
if parsed < 1:
|
|
26
|
+
raise argparse.ArgumentTypeError("must be >= 1")
|
|
27
|
+
return parsed
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def eprint(msg: str) -> None:
|
|
31
|
+
print(msg, file=sys.stderr)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def run_codexbar_cost(provider: str) -> List[Dict[str, Any]]:
|
|
35
|
+
cmd = ["codexbar", "cost", "--format", "json", "--provider", provider]
|
|
36
|
+
try:
|
|
37
|
+
output = subprocess.check_output(cmd, text=True)
|
|
38
|
+
except FileNotFoundError:
|
|
39
|
+
raise RuntimeError("codexbar not found on PATH. Install CodexBar CLI first.")
|
|
40
|
+
except subprocess.CalledProcessError as exc:
|
|
41
|
+
raise RuntimeError(f"codexbar cost failed (exit {exc.returncode}).")
|
|
42
|
+
try:
|
|
43
|
+
payload = json.loads(output)
|
|
44
|
+
except json.JSONDecodeError as exc:
|
|
45
|
+
raise RuntimeError(f"Failed to parse codexbar JSON output: {exc}")
|
|
46
|
+
if not isinstance(payload, list):
|
|
47
|
+
raise RuntimeError("Expected codexbar cost JSON array.")
|
|
48
|
+
return payload
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
def load_payload(input_path: Optional[str], provider: str) -> Dict[str, Any]:
|
|
52
|
+
if input_path:
|
|
53
|
+
if input_path == "-":
|
|
54
|
+
raw = sys.stdin.read()
|
|
55
|
+
else:
|
|
56
|
+
with open(input_path, "r", encoding="utf-8") as handle:
|
|
57
|
+
raw = handle.read()
|
|
58
|
+
data = json.loads(raw)
|
|
59
|
+
else:
|
|
60
|
+
data = run_codexbar_cost(provider)
|
|
61
|
+
|
|
62
|
+
if isinstance(data, dict):
|
|
63
|
+
return data
|
|
64
|
+
|
|
65
|
+
if isinstance(data, list):
|
|
66
|
+
for entry in data:
|
|
67
|
+
if isinstance(entry, dict) and entry.get("provider") == provider:
|
|
68
|
+
return entry
|
|
69
|
+
raise RuntimeError(f"Provider '{provider}' not found in codexbar payload.")
|
|
70
|
+
|
|
71
|
+
raise RuntimeError("Unsupported JSON input format.")
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass
|
|
75
|
+
class ModelCost:
|
|
76
|
+
model: str
|
|
77
|
+
cost: float
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def parse_daily_entries(payload: Dict[str, Any]) -> List[Dict[str, Any]]:
|
|
81
|
+
daily = payload.get("daily")
|
|
82
|
+
if not daily:
|
|
83
|
+
return []
|
|
84
|
+
if not isinstance(daily, list):
|
|
85
|
+
return []
|
|
86
|
+
return [entry for entry in daily if isinstance(entry, dict)]
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def parse_date(value: str) -> Optional[date]:
|
|
90
|
+
try:
|
|
91
|
+
return datetime.strptime(value, "%Y-%m-%d").date()
|
|
92
|
+
except Exception:
|
|
93
|
+
return None
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
def filter_by_days(entries: List[Dict[str, Any]], days: Optional[int]) -> List[Dict[str, Any]]:
|
|
97
|
+
if not days:
|
|
98
|
+
return entries
|
|
99
|
+
cutoff = date.today() - timedelta(days=days - 1)
|
|
100
|
+
filtered: List[Dict[str, Any]] = []
|
|
101
|
+
for entry in entries:
|
|
102
|
+
day = entry.get("date")
|
|
103
|
+
if not isinstance(day, str):
|
|
104
|
+
continue
|
|
105
|
+
parsed = parse_date(day)
|
|
106
|
+
if parsed and parsed >= cutoff:
|
|
107
|
+
filtered.append(entry)
|
|
108
|
+
return filtered
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def aggregate_costs(entries: Iterable[Dict[str, Any]]) -> Dict[str, float]:
|
|
112
|
+
totals: Dict[str, float] = {}
|
|
113
|
+
for entry in entries:
|
|
114
|
+
breakdowns = entry.get("modelBreakdowns")
|
|
115
|
+
if not breakdowns:
|
|
116
|
+
continue
|
|
117
|
+
if not isinstance(breakdowns, list):
|
|
118
|
+
continue
|
|
119
|
+
for item in breakdowns:
|
|
120
|
+
if not isinstance(item, dict):
|
|
121
|
+
continue
|
|
122
|
+
model = item.get("modelName")
|
|
123
|
+
cost = item.get("cost")
|
|
124
|
+
if not isinstance(model, str):
|
|
125
|
+
continue
|
|
126
|
+
if not isinstance(cost, (int, float)):
|
|
127
|
+
continue
|
|
128
|
+
totals[model] = totals.get(model, 0.0) + float(cost)
|
|
129
|
+
return totals
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def pick_current_model(entries: List[Dict[str, Any]]) -> Tuple[Optional[str], Optional[str]]:
|
|
133
|
+
if not entries:
|
|
134
|
+
return None, None
|
|
135
|
+
sorted_entries = sorted(
|
|
136
|
+
entries,
|
|
137
|
+
key=lambda entry: entry.get("date") or "",
|
|
138
|
+
)
|
|
139
|
+
for entry in reversed(sorted_entries):
|
|
140
|
+
breakdowns = entry.get("modelBreakdowns")
|
|
141
|
+
if isinstance(breakdowns, list) and breakdowns:
|
|
142
|
+
scored: List[ModelCost] = []
|
|
143
|
+
for item in breakdowns:
|
|
144
|
+
if not isinstance(item, dict):
|
|
145
|
+
continue
|
|
146
|
+
model = item.get("modelName")
|
|
147
|
+
cost = item.get("cost")
|
|
148
|
+
if isinstance(model, str) and isinstance(cost, (int, float)):
|
|
149
|
+
scored.append(ModelCost(model=model, cost=float(cost)))
|
|
150
|
+
if scored:
|
|
151
|
+
scored.sort(key=lambda item: item.cost, reverse=True)
|
|
152
|
+
return scored[0].model, entry.get("date") if isinstance(entry.get("date"), str) else None
|
|
153
|
+
models_used = entry.get("modelsUsed")
|
|
154
|
+
if isinstance(models_used, list) and models_used:
|
|
155
|
+
last = models_used[-1]
|
|
156
|
+
if isinstance(last, str):
|
|
157
|
+
return last, entry.get("date") if isinstance(entry.get("date"), str) else None
|
|
158
|
+
return None, None
|
|
159
|
+
|
|
160
|
+
|
|
161
|
+
def usd(value: Optional[float]) -> str:
|
|
162
|
+
if value is None:
|
|
163
|
+
return "—"
|
|
164
|
+
return f"${value:,.2f}"
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
def latest_day_cost(entries: List[Dict[str, Any]], model: str) -> Tuple[Optional[str], Optional[float]]:
|
|
168
|
+
if not entries:
|
|
169
|
+
return None, None
|
|
170
|
+
sorted_entries = sorted(
|
|
171
|
+
entries,
|
|
172
|
+
key=lambda entry: entry.get("date") or "",
|
|
173
|
+
)
|
|
174
|
+
for entry in reversed(sorted_entries):
|
|
175
|
+
breakdowns = entry.get("modelBreakdowns")
|
|
176
|
+
if not isinstance(breakdowns, list):
|
|
177
|
+
continue
|
|
178
|
+
for item in breakdowns:
|
|
179
|
+
if not isinstance(item, dict):
|
|
180
|
+
continue
|
|
181
|
+
if item.get("modelName") == model:
|
|
182
|
+
cost = item.get("cost") if isinstance(item.get("cost"), (int, float)) else None
|
|
183
|
+
day = entry.get("date") if isinstance(entry.get("date"), str) else None
|
|
184
|
+
return day, float(cost) if cost is not None else None
|
|
185
|
+
return None, None
|
|
186
|
+
|
|
187
|
+
|
|
188
|
+
def render_text_current(
|
|
189
|
+
provider: str,
|
|
190
|
+
model: str,
|
|
191
|
+
latest_date: Optional[str],
|
|
192
|
+
total_cost: Optional[float],
|
|
193
|
+
latest_cost: Optional[float],
|
|
194
|
+
latest_cost_date: Optional[str],
|
|
195
|
+
entry_count: int,
|
|
196
|
+
) -> str:
|
|
197
|
+
lines = [f"Provider: {provider}", f"Current model: {model}"]
|
|
198
|
+
if latest_date:
|
|
199
|
+
lines.append(f"Latest model date: {latest_date}")
|
|
200
|
+
lines.append(f"Total cost (rows): {usd(total_cost)}")
|
|
201
|
+
if latest_cost_date:
|
|
202
|
+
lines.append(f"Latest day cost: {usd(latest_cost)} ({latest_cost_date})")
|
|
203
|
+
lines.append(f"Daily rows: {entry_count}")
|
|
204
|
+
return "\n".join(lines)
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
def render_text_all(provider: str, totals: Dict[str, float]) -> str:
|
|
208
|
+
lines = [f"Provider: {provider}", "Models:"]
|
|
209
|
+
for model, cost in sorted(totals.items(), key=lambda item: item[1], reverse=True):
|
|
210
|
+
lines.append(f"- {model}: {usd(cost)}")
|
|
211
|
+
return "\n".join(lines)
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
def build_json_current(
|
|
215
|
+
provider: str,
|
|
216
|
+
model: str,
|
|
217
|
+
latest_date: Optional[str],
|
|
218
|
+
total_cost: Optional[float],
|
|
219
|
+
latest_cost: Optional[float],
|
|
220
|
+
latest_cost_date: Optional[str],
|
|
221
|
+
entry_count: int,
|
|
222
|
+
) -> Dict[str, Any]:
|
|
223
|
+
return {
|
|
224
|
+
"provider": provider,
|
|
225
|
+
"mode": "current",
|
|
226
|
+
"model": model,
|
|
227
|
+
"latestModelDate": latest_date,
|
|
228
|
+
"totalCostUSD": total_cost,
|
|
229
|
+
"latestDayCostUSD": latest_cost,
|
|
230
|
+
"latestDayCostDate": latest_cost_date,
|
|
231
|
+
"dailyRowCount": entry_count,
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def build_json_all(provider: str, totals: Dict[str, float]) -> Dict[str, Any]:
|
|
236
|
+
return {
|
|
237
|
+
"provider": provider,
|
|
238
|
+
"mode": "all",
|
|
239
|
+
"models": [
|
|
240
|
+
{"model": model, "totalCostUSD": cost}
|
|
241
|
+
for model, cost in sorted(totals.items(), key=lambda item: item[1], reverse=True)
|
|
242
|
+
],
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def main() -> int:
|
|
247
|
+
parser = argparse.ArgumentParser(description="Summarize CodexBar model usage from local cost logs.")
|
|
248
|
+
parser.add_argument("--provider", choices=["codex", "claude"], default="codex")
|
|
249
|
+
parser.add_argument("--mode", choices=["current", "all"], default="current")
|
|
250
|
+
parser.add_argument("--model", help="Explicit model name to report instead of auto-current.")
|
|
251
|
+
parser.add_argument("--input", help="Path to codexbar cost JSON (or '-' for stdin).")
|
|
252
|
+
parser.add_argument("--days", type=positive_int, help="Limit to last N days (based on daily rows).")
|
|
253
|
+
parser.add_argument("--format", choices=["text", "json"], default="text")
|
|
254
|
+
parser.add_argument("--pretty", action="store_true", help="Pretty-print JSON output.")
|
|
255
|
+
|
|
256
|
+
args = parser.parse_args()
|
|
257
|
+
|
|
258
|
+
try:
|
|
259
|
+
payload = load_payload(args.input, args.provider)
|
|
260
|
+
except Exception as exc:
|
|
261
|
+
eprint(str(exc))
|
|
262
|
+
return 1
|
|
263
|
+
|
|
264
|
+
entries = parse_daily_entries(payload)
|
|
265
|
+
entries = filter_by_days(entries, args.days)
|
|
266
|
+
|
|
267
|
+
if args.mode == "current":
|
|
268
|
+
model = args.model
|
|
269
|
+
latest_date = None
|
|
270
|
+
if not model:
|
|
271
|
+
model, latest_date = pick_current_model(entries)
|
|
272
|
+
if not model:
|
|
273
|
+
eprint("No model data found in codexbar cost payload.")
|
|
274
|
+
return 2
|
|
275
|
+
totals = aggregate_costs(entries)
|
|
276
|
+
total_cost = totals.get(model)
|
|
277
|
+
latest_cost_date, latest_cost = latest_day_cost(entries, model)
|
|
278
|
+
|
|
279
|
+
if args.format == "json":
|
|
280
|
+
payload_out = build_json_current(
|
|
281
|
+
provider=args.provider,
|
|
282
|
+
model=model,
|
|
283
|
+
latest_date=latest_date,
|
|
284
|
+
total_cost=total_cost,
|
|
285
|
+
latest_cost=latest_cost,
|
|
286
|
+
latest_cost_date=latest_cost_date,
|
|
287
|
+
entry_count=len(entries),
|
|
288
|
+
)
|
|
289
|
+
indent = 2 if args.pretty else None
|
|
290
|
+
print(json.dumps(payload_out, indent=indent, sort_keys=args.pretty))
|
|
291
|
+
else:
|
|
292
|
+
print(
|
|
293
|
+
render_text_current(
|
|
294
|
+
provider=args.provider,
|
|
295
|
+
model=model,
|
|
296
|
+
latest_date=latest_date,
|
|
297
|
+
total_cost=total_cost,
|
|
298
|
+
latest_cost=latest_cost,
|
|
299
|
+
latest_cost_date=latest_cost_date,
|
|
300
|
+
entry_count=len(entries),
|
|
301
|
+
)
|
|
302
|
+
)
|
|
303
|
+
return 0
|
|
304
|
+
|
|
305
|
+
totals = aggregate_costs(entries)
|
|
306
|
+
if not totals:
|
|
307
|
+
eprint("No model breakdowns found in codexbar cost payload.")
|
|
308
|
+
return 2
|
|
309
|
+
|
|
310
|
+
if args.format == "json":
|
|
311
|
+
payload_out = build_json_all(provider=args.provider, totals=totals)
|
|
312
|
+
indent = 2 if args.pretty else None
|
|
313
|
+
print(json.dumps(payload_out, indent=indent, sort_keys=args.pretty))
|
|
314
|
+
else:
|
|
315
|
+
print(render_text_all(provider=args.provider, totals=totals))
|
|
316
|
+
return 0
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
if __name__ == "__main__":
|
|
320
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Tests for model_usage helpers.
|
|
4
|
+
"""
|
|
5
|
+
|
|
6
|
+
import argparse
|
|
7
|
+
from datetime import date, timedelta
|
|
8
|
+
from unittest import TestCase, main
|
|
9
|
+
|
|
10
|
+
from model_usage import filter_by_days, positive_int
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class TestModelUsage(TestCase):
|
|
14
|
+
def test_positive_int_accepts_valid_numbers(self):
|
|
15
|
+
self.assertEqual(positive_int("1"), 1)
|
|
16
|
+
self.assertEqual(positive_int("7"), 7)
|
|
17
|
+
|
|
18
|
+
def test_positive_int_rejects_zero_and_negative(self):
|
|
19
|
+
with self.assertRaises(argparse.ArgumentTypeError):
|
|
20
|
+
positive_int("0")
|
|
21
|
+
with self.assertRaises(argparse.ArgumentTypeError):
|
|
22
|
+
positive_int("-3")
|
|
23
|
+
|
|
24
|
+
def test_filter_by_days_keeps_recent_entries(self):
|
|
25
|
+
today = date.today()
|
|
26
|
+
entries = [
|
|
27
|
+
{"date": (today - timedelta(days=5)).strftime("%Y-%m-%d"), "modelBreakdowns": []},
|
|
28
|
+
{"date": (today - timedelta(days=1)).strftime("%Y-%m-%d"), "modelBreakdowns": []},
|
|
29
|
+
{"date": today.strftime("%Y-%m-%d"), "modelBreakdowns": []},
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
filtered = filter_by_days(entries, 2)
|
|
33
|
+
|
|
34
|
+
self.assertEqual(len(filtered), 2)
|
|
35
|
+
self.assertEqual(filtered[0]["date"], (today - timedelta(days=1)).strftime("%Y-%m-%d"))
|
|
36
|
+
self.assertEqual(filtered[1]["date"], today.strftime("%Y-%m-%d"))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
if __name__ == "__main__":
|
|
40
|
+
main()
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: nano-pdf
|
|
3
|
+
description: Edit PDFs with natural-language instructions using the nano-pdf CLI.
|
|
4
|
+
homepage: https://pypi.org/project/nano-pdf/
|
|
5
|
+
metadata:
|
|
6
|
+
{
|
|
7
|
+
"quantumclaw":
|
|
8
|
+
{
|
|
9
|
+
"emoji": "📄",
|
|
10
|
+
"requires": { "bins": ["nano-pdf"] },
|
|
11
|
+
"install":
|
|
12
|
+
[
|
|
13
|
+
{
|
|
14
|
+
"id": "uv",
|
|
15
|
+
"kind": "uv",
|
|
16
|
+
"package": "nano-pdf",
|
|
17
|
+
"bins": ["nano-pdf"],
|
|
18
|
+
"label": "Install nano-pdf (uv)",
|
|
19
|
+
},
|
|
20
|
+
],
|
|
21
|
+
},
|
|
22
|
+
}
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
# nano-pdf
|
|
26
|
+
|
|
27
|
+
Use `nano-pdf` to apply edits to a specific page in a PDF using a natural-language instruction.
|
|
28
|
+
|
|
29
|
+
## Quick start
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
nano-pdf edit deck.pdf 1 "Change the title to 'Q3 Results' and fix the typo in the subtitle"
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Notes:
|
|
36
|
+
|
|
37
|
+
- Page numbers are 0-based or 1-based depending on the tool’s version/config; if the result looks off by one, retry with the other.
|
|
38
|
+
- Always sanity-check the output PDF before sending it out.
|