Control a Xiaomi Robot Vacuum X20+ (model xiaomi.vacuum.c102gl) through the `xiao` CLI. Use this skill whenever the user mentions anything vacuum-related: robot vacuum, Xiaomi, Roborock, cleaning the house, mopping, sweeping, dock, base station, consumables (brush, filter, mop pad), rooms, map, zones, DND mode, fan speed, vacuum status, battery, cleaning schedule. Also trigger on Spanish equivalents (aspiradora, limpiar, trapear, cargar, habitaciones, cepillo, filtro, base, programar limpieza...
Scanned 5/27/2026
Install via CLI
openskills install dacrypt/xiao---
name: xiao
description: >
Control a Xiaomi Robot Vacuum X20+ (model xiaomi.vacuum.c102gl) through the `xiao`
CLI. Use this skill whenever the user mentions anything vacuum-related: robot
vacuum, Xiaomi, Roborock, cleaning the house, mopping, sweeping, dock, base
station, consumables (brush, filter, mop pad), rooms, map, zones, DND mode, fan
speed, vacuum status, battery, cleaning schedule. Also trigger on Spanish
equivalents (aspiradora, limpiar, trapear, cargar, habitaciones, cepillo,
filtro, base, programar limpieza) and casual phrasings (limpia la casa, pon la
aspiradora, qué batería tiene, mándala al dock). When in doubt, trigger — the
CLI handles all vacuum ops.
---
# xiao — Xiaomi Vacuum CLI Skill
The `xiao` CLI controls a Xiaomi Robot Vacuum X20+ via Xiaomi Cloud. Full
reference lives in [`AGENTS.md`](../../../AGENTS.md) at the repo root — **read
that first** for canonical commands, intent mapping, and error recovery.
## Prerequisites
Before any command will succeed:
1. `pip install xiao-cli && playwright install chromium` (once per machine).
2. `xiao setup cloud` completed — produces `config.toml`.
3. Chromium on port `18800` with an active `account.xiaomi.com` session:
```bash
chromium --remote-debugging-port=18800 --user-data-dir=~/.xiao-chromium
```
## Workflow for any user request
1. **Parse intent.** Check the "Intent mapping" table in `AGENTS.md`.
2. **Resolve room IDs** with `xiao map rooms` before any `xiao clean -r <id>`.
Never guess. IDs are per-vacuum and regenerate when the Xiaomi Home app
re-maps the house.
3. **Run the command.** Prefer `--json` for status-type commands so you can
parse deterministically:
```bash
xiao status --json
xiao consumables --json
```
4. **On error**, apply the recovery protocol in `AGENTS.md#error-recovery`
before asking the user:
- Exit `77` or stderr contains `token`/`401` → retry once; if still bad,
`xiao cloud-login` and retry.
- Exit `2` or stderr says "Cloud mode enabled but not configured" → guide
user through `xiao setup cloud`.
- `Cannot connect to browser CDP on port 18800` → launch the Chromium
instance described above and have the user log in once.
- State 21 / "WashingMopPause" → user must refill clean water / empty
dirty water, then `xiao start`.
## Exit codes (agent-meaningful)
| Code | Meaning | Action |
|---|---|---|
| `0` | Success | Continue |
| `2` | Not configured | Run `xiao setup cloud` |
| `77` | Cloud auth failed | Run `xiao cloud-login` |
| Other non-zero | Generic failure | Parse stderr / ask user |
## Hard rules
- **Never** print or commit the contents of `config.toml` — it holds the user's
Xiaomi password hash and service tokens.
- **Never** call `xiao raw` unless the user explicitly asks. It's an unchecked
escape hatch into MIoT that can brick settings.
- **Always** verify room IDs with `xiao map rooms` before using them in a
`clean -r` call.
- `xiao start` always triggers a mop wash first. Warn the user if they asked
for sweep-only; there's no flag to skip the wash.
No comments yet. Be the first to comment!