openwonderlabs/switchbot-openapi-cli/switchbot
Claude Code and agent skill by openwonderlabs/switchbot-openapi-cli
- community
Checking that the SKILL.md file is still in the repository.
Use when the user mentions SwitchBot devices, smart-home automation, or asks about controlling lights, locks, curtains, sensors, plugs, or IR appliances (TV/AC/fan). Teaches the agent how to drive the authoritative `switchbot` CLI safely, read user preferences from `policy.yaml`, and respect safety tiers.
Install
npx vskill@latest install openwonderlabs/switchbot-openapi-cli/switchbotSKILL.md
SwitchBot skill
Drive the user's SwitchBot smart home through the switchbot CLI. Always query the CLI for ground truth — never guess commands, deviceIds, or parameter values.
Authority chain
| Question | Authoritative command | |
|---|---|---|
| What can I do (cold start)? | switchbot agent-bootstrap --compact --json | |
| What commands exist? | switchbot capabilities --json | |
| What flags does this command take? | switchbot <cmd> --help --json | |
| What devices does the user have? | switchbot devices list --json | |
| What's this device doing right now? | switchbot devices status <id> --json | |
| What can I do with this specific device type? | switchbot devices describe <id> --json | |
| What scenes are configured? | switchbot scenes list --json | |
| What's on the user's AI MindClip (recordings, transcript, todos, summaries)? | switchbot mindclip recordings/recording/transcript/summary/todos/daily/weekly/urgent-todos --json | |
| What's in a Kata Friends diary? | switchbot devices diary <id> --start <unix-ms> --end <unix-ms> --json (up to 31 days) | |
What's in the user's policy.yaml? | cat ~/.config/openclaw/switchbot/policy.yaml | |
| Is my quota OK? | switchbot quota status --json | |
| Is the setup healthy? | switchbot doctor --json | |
| What automation rules are configured? | switchbot rules list --json | |
| Are the rules valid? | switchbot rules lint | |
| Draft an execution plan from intent | switchbot plan suggest --intent "..." --device <id> | |
| Run a plan with per-step approval | switchbot plan run <file> --require-approval | |
| Draft an automation rule from intent | switchbot rules suggest --intent "..." --device <id> | |
| Inject a rule into policy.yaml | switchbot policy add-rule [--dry-run] [--enable] (reads YAML from stdin) |
Network requirements
switchbot codex setup requires outbound internet (npm registry + GitHub). If it fails with a network error, read references/codex-network.md for the ~/.codex/config.toml fix.
Required bootstrap
Before any action, run:
The response contains: cliVersion, safetyTiers, nameStrategies, profile, quota, devices[] (cached, with deviceId/type/name/category/roomName), catalog, and hints[].
If devices look stale (user just added one), refresh with switchbot devices list --json.
Then read the user's policy:
If the file doesn't exist, proceed with default safety tiers and tell the user once they can create one with switchbot policy new.
Resolving a name to a device
When the user says "bedroom light", resolve in this order:
- alias —
policy.yamlalias map →<deviceId>. Most reliable. - exact — device
name == "bedroom light"(case-insensitive). - prefix — name starts with the phrase.
- substring — name contains the phrase.
- fuzzy — Levenshtein distance ≤ 2.
- require-unique — multiple matches at same tier → stop and ask. Never pick silently.
Safety gates
| Tier | Examples | Behaviour | |
|---|---|---|---|
read | status, list, quota | Run freely. | |
ir-fire-forget | IR power/AC/TV via Hub | Run; warn there is no device-side confirmation. | |
mutation | turnOn/Off, setBrightness, setColor | Run. Append to audit log. | |
destructive | lock, unlock, delete scenes/webhooks | Refuse by default. Confirm explicitly; prefer --dry-run first. | |
maintenance | (reserved) | Always confirm. |
Policy overrides: confirmations.always_confirm forces confirmation; confirmations.never_confirm pre-approves (never add destructive actions). quiet_hours requires confirmation even for mutation.
Policy compliance
- Run
switchbot policy validate --live --jsonthrough the CLI once per device-control session. Usepolicy_validate(live=true)only when a separately configured MCP server exposes it; the default profile does not. - Honour
quiet_hours,always_confirm, andnever_confirmfrom the validated policy. - No policy file → proceed with default tiers.
Never write to policy.yaml without showing a diff and getting explicit approval.
Audit logging
The default MCP profile does not expose audit administration. Review past activity with switchbot history show --json through the CLI, or use audit_query / audit_stats only when a separately configured server exposes those tools. Enable CLI mutation logging explicitly with switchbot --audit-log devices command <id> <cmd>.
Output modes
Always use --json when parsing output. Use --format=markdown for user-facing summaries. Never parse markdown or human tables programmatically — re-run with --json.
Credentials
First-time login: switchbot auth login (opens browser). Headless: add --no-open. Inspect the active keychain backend: switchbot auth keychain describe --json. Reset cache without touching credentials: switchbot reset [--all]. Never run auth login or auth keychain set on the user's behalf.
Declarative automations (CLI ≥ 3.9.0)
When the user wants "when X, do Y", author a rule in policy.yaml instead of a shell loop. Validate the policy through switchbot policy validate --json; CLI 3.9.0 requires "0.2". A legacy "0.1" file must be migrated with CLI ≤2.15 before returning to this CLI.
Start with dry_run: true:
Trigger kinds: source: mqtt (shadow events), source: cron (schedule + optional days:), source: webhook (bearer-token HTTP). Conditions: time_between, {device, field, op, value}, all:, any:, not:.
The validator rejects any rule with a destructive action in then[]. Always start dry, confirm firings via switchbot rules tail --follow, then remove dry_run.
Semi-autonomous workflow — plan suggest + --require-approval
Non-destructive steps run automatically; destructive steps prompt once. Via MCP: call plan_suggest, then have the user run --require-approval in a TTY session.
Common pitfalls
- Don't parse help text. Always
--help --json. - Don't rely on `--name` picking one hit. Resolve the name yourself; pass
deviceIddirectly. - Check `commands[]` before calling a command.
switchbot devices describe <id> --json— not every device supports every command. - Quota counts attempts, not successes. Above 80%, slow down and batch.
- `--json` envelope — every response is
{"schemaVersion":"1.2","data":...}or{"schemaVersion":"1.2","error":{...}}. Read.data, check.errorfirst. Parsers that read top-level fields silently getundefined.
Error handling
usage→ you called something wrong; re-read help and retry.auth→ runswitchbot doctor --section credentials.quota→ stop; resets at midnight UTC.network→ retry once, then surface.upstream→ relay verbatim.internal→ ask user to runswitchbot doctor --jsonand file an issue.
Never retry destructive actions automatically. For mutation retries, use a local fingerprint {deviceId, command, args, minute-bucket} as an idempotency gate.
Things to never do
- Ask the user for their SwitchBot token or secret.
- Suggest flags that bypass safety tiers (
--skip-confirmation,--force) unless the user named them explicitly. - Claim IR actions "succeeded" — IR is open-loop; say the signal was sent.
- Write to
policy.yamlwithout showing a diff and getting explicit approval. - Generate a rule with a destructive command in
then[]. - Arm a rule (
dry_run: false) on first author without the user confirming firings. - Set
automation.enabled: truewithout explicitly informing the user. - Run
switchbot doctor --fix --yeswithout the user asking.
Version
Targets @switchbot/openapi-cli ≥ 3.9.0. If switchbot --version is older: npm update -g @switchbot/openapi-cli.
<!-- MAINTENANCE: Identical copy at plugins/switchbot/skills/switchbot/SKILL.md — keep both in sync. -->
Security
- Security scanPassed, 95 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingpackages/codex-plugin/skills/switchbot/SKILL.md
Popularity
- Repository stars
- 119
- 7-day trend score
- 24
Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/openwonderlabs/switchbot-openapi-cli/switchbot)