wat is a small command-line tool that books WAT rooms by driving the same public API the web app uses. The command is wat; the package is @wat-toolbox/wat.
Install (or don’t)
Zero-install: every command runs on demand throughnpx, which is what agents should default to:
wat command is on your PATH:
The skills plugin shells out to
wat, so the skills require the global install. Login state is shared either way — both forms read the same ~/.config/wat/config.json, so you can log in via npx today and install globally later.Log in
NOT_AUTHORIZED and an access request is automatically filed with the WAT admins: you’ll receive an email if it’s approved, then log in again. It then mints an API key and stores it as your active profile in ~/.config/wat/config.json (mode 0600). Every later command reuses this key.
wat keys revoke <id> or use the API keys tab on the Account page in the web app.
Non-interactive login (two-step)
Scripts and agents log in without a TTY in two calls. First send the code, then complete with the code your human reads from their inbox:--code present, it doesn’t.
With
--json, wat login never prompts: a missing required flag fails fast with a structured MISSING_FLAG error instead of hanging on input. See Error codes, and the Agent playbook for the full conversational handoff.
Command reference
--room either a room name (case-insensitive) or a room id. Run wat rooms list to see both.
Availability is clipped to the opening hours (06:00 to 22:00 Europe/Brussels): time outside them never shows as free, and creating or editing a booking outside them is rejected with outside_hours.
Every command accepts --json for machine-readable output. The skills plugin relies on this; the envelope is { "success": true, "data": { ... } } or { "success": false, "error": { ... } }. The codes you can get back are listed on the Error codes page.
Choosing the environment
The CLI defaults to production (https://app.wat.com). Pass --env dev to target the staging deployment, which reads development data. Use it only when you mean to.
Overrides and precedence
Any command also takes a per-call--api-key <key> and --api-url <url>, and three environment variables cover scripted use: WAT_CLI_ENV (dev or prod), WAT_CLI_API_KEY, and WAT_CLI_API_BASE_URL.
The base URL resolves in this order (highest wins):
- The
--api-urlflag WAT_CLI_API_BASE_URL- The active profile’s stored base URL
--env dev|prod, orWAT_CLI_ENV- The production default
--api-key, then WAT_CLI_API_KEY, then the active profile. Run wat config show to see exactly which source each one resolved from.
Time and time zones
Bare datetimes such as2026-06-10T10:00 are read as Europe/Brussels wall-clock, matching the web app, then converted to UTC for the API. Pass --tz <IANA> to read bare times in another zone, or include an explicit offset (2026-06-10T10:00+02:00) to pin the exact instant. Times are printed back in the same zone you gave, so what you type and what you see always agree.
Need to book conversationally instead of by hand? Install the skills plugin and ask your agent. The skills wrap these same commands.