Skyvern Browser Automation
Skyvern-AI/skyvern
Picks the right Skyvern CLI command for a web task, from quick yes/no checks to reusable multi-page workflows, instead of falling back to plain page fetching.
Teaches an agent to control SwitchBot devices safely through the switchbot CLI: bootstrap first, query real device data, read policy.yaml and respect safety tiers.
The automated check flagged lines worth reading first. See the safety section below.
$ npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install OpenWonderLabs/switchbot-openapi-cli switchbot --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/OpenWonderLabs/switchbot-openapi-cli.git skills-src && mkdir -p .claude/skills && cp -r skills-src/packages/codex-plugin/skills/switchbot .claude/skills/switchbot && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "switchbot" agent skill from https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbot into .claude/skills/switchbot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "switchbot", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbotType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install OpenWonderLabs/switchbot-openapi-cli switchbot --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenWonderLabs/switchbot-openapi-cli.git skills-src && mkdir -p .agents/skills && cp -r skills-src/packages/codex-plugin/skills/switchbot .agents/skills/switchbot && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "switchbot" agent skill from https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbot into .agents/skills/switchbot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "switchbot", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install OpenWonderLabs/switchbot-openapi-cli switchbot --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenWonderLabs/switchbot-openapi-cli.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/packages/codex-plugin/skills/switchbot .cursor/skills/switchbot && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "switchbot" agent skill from https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbot into .cursor/skills/switchbot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "switchbot", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/OpenWonderLabs/switchbot-openapi-cli.git --path packages/codex-plugin/skills/switchbot--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install OpenWonderLabs/switchbot-openapi-cli switchbot --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenWonderLabs/switchbot-openapi-cli.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/packages/codex-plugin/skills/switchbot .gemini/skills/switchbot && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "switchbot" agent skill from https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbot into .gemini/skills/switchbot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "switchbot", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install OpenWonderLabs/switchbot-openapi-cli switchbotInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/OpenWonderLabs/switchbot-openapi-cli.git skills-src && mkdir -p .github/skills && cp -r skills-src/packages/codex-plugin/skills/switchbot .github/skills/switchbot && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "switchbot" agent skill from https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbot into .github/skills/switchbot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "switchbot", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install OpenWonderLabs/switchbot-openapi-cli switchbot --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/OpenWonderLabs/switchbot-openapi-cli.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/packages/codex-plugin/skills/switchbot .opencode/skills/switchbot && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "switchbot" agent skill from https://github.com/OpenWonderLabs/switchbot-openapi-cli/tree/main/packages/codex-plugin/skills/switchbot into .opencode/skills/switchbot/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "switchbot", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
switchbotTeaches an agent to control SwitchBot devices safely through the switchbot CLI: bootstrap first, query real device data, read policy.yaml and respect safety tiers.
The skill lets an agent drive a user's SwitchBot smart home, covering lights, locks, curtains, sensors, plugs and IR appliances such as TVs, air conditioners and fans, through the switchbot CLI. Its rule is to query the CLI for ground truth and never guess commands, device IDs or parameter values. A table maps each question to the authoritative command: agent-bootstrap, capabilities, devices list, status and describe, scenes list, quota status, doctor, rules list and lint, and the plan commands.
Before any action the agent runs switchbot agent-bootstrap --compact, which returns the CLI version, safety tiers, name strategies, profile, quota, cached devices, a catalog and hints. It then reads policy.yaml from ~/.config/openclaw/switchbot, proceeding with default safety tiers and suggesting switchbot policy new if the file is missing. Plans can be drafted from an intent and run with per-step approval, and automation rules can be suggested and added to the policy with a dry run.
It also covers reading the user's AI MindClip recordings, todos and summaries. Setting up for Codex needs outbound internet to the npm registry and GitHub, and a reference file explains the config.toml fix if that fails.
6 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 45f9a95. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npmFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
SwitchBot Smart Home CLI loads about 2.2k tokens when it runs, and up to ~2.5k if it reads all its reference files. Until then it costs about 79 tokens; SKILL.md has 907 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found patterns that need a careful read before installing.
- Suggest flags that bypass safety tiers (`--skip-confirmation`, `--force`) unless the user named them explicitly.Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from OpenWonderLabs/switchbot-openapi-cli at commit 45f9a95, republished under its MIT licence (© OpenWonderLabs). 907 words, ~2,156 tokens.
.claude/skills/switchbot/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.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.
| 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, todos, daily/weekly summaries)? | switchbot mindclip recordings/recording/summary/todos/daily/weekly/urgent-todos --json |
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) |
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.
Before any action, run:
switchbot agent-bootstrap --compactThe 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:
cat ~/.config/openclaw/switchbot/policy.yaml 2>/dev/nullIf the file doesn't exist, proceed with default safety tiers and tell the user once they can create one with switchbot policy new.
When the user says "bedroom light", resolve in this order:
policy.yaml alias map → <deviceId>. Most reliable.name == "bedroom light" (case-insensitive).| 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_validate (with live: true) once per device-control session.quiet_hours, always_confirm, and never_confirm from the validated policy.Never write to policy.yaml without showing a diff and getting explicit approval.
Use audit_query and audit_stats MCP tools to review past activity. For a full audit trail with CLI, use switchbot --audit-log devices command <id> <cmd>.
Always use --json when parsing output. Use --format=markdown for user-facing summaries. Never parse markdown or human tables programmatically — re-run with --json.
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.
When the user wants "when X, do Y", author a rule in policy.yaml instead of a shell loop. Check schema version first (head -1 policy.yaml, must be "0.2"; if "0.1" run switchbot policy migrate).
Start with dry_run: true:
automation:
enabled: true
rules:
- name: "hallway motion at night"
when: { source: mqtt, event: motion.detected, device: "hallway sensor" }
conditions:
- time_between: ["22:00", "07:00"]
then:
- { command: "devices command <id> turnOn", device: "hallway lamp" }
throttle: { max_per: "10m" }
dry_run: trueTrigger 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.
switchbot policy validate
switchbot rules lint && switchbot rules reloadplan suggest + --require-approvalswitchbot plan suggest --intent "turn off all lights" --device <id1> --device <id2>
# Review/edit the generated JSON
switchbot plan run plan.json --require-approvalNon-destructive steps run automatically; destructive steps prompt once. Via MCP: call plan_suggest, then have the user run --require-approval in a TTY session.
--help --json.--name picking one hit. Resolve the name yourself; pass deviceId directly.commands[] before calling a command. switchbot devices describe <id> --json — not every device supports every command.--json envelope — every response is {"schemaVersion":"1.1","data":...} or {"error":{...}}. Read .data, check .error first. Parsers that read top-level fields silently get undefined.{ "error": { "kind": "usage|auth|quota|network|upstream|internal", "message": "...", "hint": "..." } }usage → you called something wrong; re-read help and retry.auth → run switchbot doctor --section credentials.quota → stop; resets at midnight UTC.network → retry once, then surface.upstream → relay verbatim.internal → ask user to run switchbot doctor --json and file an issue.Never retry destructive actions automatically. For mutation retries, use a local fingerprint {deviceId, command, args, minute-bucket} as an idempotency gate.
--skip-confirmation, --force) unless the user named them explicitly.policy.yaml without showing a diff and getting explicit approval.then[].dry_run: false) on first author without the user confirming firings.automation.enabled: true without explicitly informing the user.switchbot doctor --fix --yes without the user asking.Targets @switchbot/openapi-cli ≥ 3.7.1. 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. -->
© OpenWonderLabs, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file (references) in packages/codex-plugin/skills/switchbot of OpenWonderLabs/switchbot-openapi-cli.
Open the folder on GitHubat commit 45f9a95
SwitchBot Smart Home CLI next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| SwitchBot Smart Home CLI this skillOpenWonderLabs/switchbot-openapi-cli | 133 | — | ~2.2k | Automated safety check: Warn | MIT | |
| Skyvern Browser AutomationSkyvern-AI/skyvern | 23k | — | ~2.9k | Automated safety check: Pass | AGPL-3.0 | |
| Feishu Bitable Managementop7418/CodePilot | 6.5k | 1 repos | ~1.7k | Automated safety check: Pass | Custom licence | |
| CUAWright Web Task Automationmicrosoft/CUAWright | 6k | — | ~2k | Automated safety check: Notes | MIT | |
| MoviePilot Downloader Operationjxxghp/MoviePilot | 12k | — | ~4.4k | Automated safety check: Pass | GPL-3.0 | |
| Refly Skill Runnerrefly-ai/refly | 7.5k | — | ~1.7k | Automated safety check: Pass | Custom licence |
Skyvern-AI/skyvern
Picks the right Skyvern CLI command for a web task, from quick yes/no checks to reusable multi-page workflows, instead of falling back to plain page fetching.
op7418/CodePilot
Creates, queries and edits Feishu Bitable tables through tool calls, covering records, fields, views and batch operations with the correct value format for each field type.
microsoft/CUAWright
Solves web tasks by driving a local Playwright browser one bash command at a time, saving a reusable script, screenshots and an action log for each run.
jxxghp/MoviePilot
Inspects, diagnoses and directly controls qBittorrent, Transmission or rTorrent downloaders configured in MoviePilot through a bundled Python helper.
refly-ai/refly
Base skill for the Refly ecosystem: finds, runs and monitors workflow-backed skills through the refly command line, with the actual work done on the Refly backend.
aardappel/treesheets
Runs Lobster scripts against the document open in a running TreeSheets instance through its local agent socket, and returns the results or errors.
Categories
Teaches an agent to control SwitchBot devices safely through the switchbot CLI: bootstrap first, query real device data, read policy.yaml and respect safety tiers. The skill lets an agent drive a user's SwitchBot smart home, covering lights, locks, curtains, sensors, plugs and IR appliances such as TVs, air conditioners and fans, through the switchbot CLI. Its rule is to query the CLI for ground truth and never guess commands, device IDs or parameter values.
SwitchBot Smart Home CLI fits situations like: turning lights, plugs or curtains on and off through SwitchBot; checking the status of a lock or sensor; controlling a TV, air conditioner or fan through an IR remote device; drafting and linting an automation rule for a device.
Run `npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a claude-code`. Or copy the skill folder (packages/codex-plugin/skills/switchbot in OpenWonderLabs/switchbot-openapi-cli) into .claude/skills/switchbot in your project. Claude Code loads it when a task matches its description.
Run `npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a codex`. Or copy the skill folder (packages/codex-plugin/skills/switchbot in OpenWonderLabs/switchbot-openapi-cli) into .agents/skills/switchbot in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add OpenWonderLabs/switchbot-openapi-cli --skill switchbot -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/switchbot, .gemini/skills/switchbot, .github/skills/switchbot and .opencode/skills/switchbot in your project.
Going by SKILL.md and its folder, SwitchBot Smart Home CLI needs the command-line tools its instructions call (npm). Our summary lists: The switchbot CLI; Outbound internet access to the npm registry and GitHub for switchbot codex setup.
SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md flagged 1 warning(s): contains instruction-override wording (e.g. “without asking the user”). Read the flagged lines before installing; the check is not a guarantee either way.
SwitchBot Smart Home CLI is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.6k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 302 tokens, read only when the agent opens those files.
Skills that share tags, products or a category with SwitchBot Smart Home CLI: Skyvern Browser Automation (Skyvern-AI/skyvern, 23k stars), Feishu Bitable Management (op7418/CodePilot, 6.5k stars), CUAWright Web Task Automation (microsoft/CUAWright, 6k stars) and MoviePilot Downloader Operation (jxxghp/MoviePilot, 12k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
OpenWonderLabs (a GitHub organization) maintains it in OpenWonderLabs/switchbot-openapi-cli, which has 133 GitHub stars. The repository was last updated on August 18, 2026.
Source: OpenWonderLabs/switchbot-openapi-cli on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.