Appearance
CLI — qd
The full vocabulary, scriptable. A table on a TTY, --json when piped.
Alpha
The CLI is in alpha — command shapes may still change. See Availability.
Install & sign in
Terminal · qd
1. Install the CLI.
bash
npm install -g @quietdesk/cli2. Sign in — prints a short code and opens the browser; approve and you’re in.
bash
qd login3. You’re set — try:
bash
qd whoami · qd boards · qd guide✓ Check it worked
The approved key appears in API keys as “CLI · device login”. Local MCP over stdio: qd mcp.
Environment (CI & scripts)
| Variable | Purpose |
|---|---|
QD_TOKEN | your API key — a user key (ptl_u_…) or an org key (ptl_o_…). Or run qd login. |
QD_ORG | org slug for a user key that spans orgs (else your default org). Same as --org. |
QD_API_URL | API base URL (defaults to https://api.quietdesk.dev). |
Exit codes
0 ok · 1 error · 2 auth (401/403) · 3 not found (404) · 4 validation (422)
The key qd login mints lands in Settings → Developer — revoke it there any time.
Working with Claude Code
qd skill install writes a Quietdesk skill into ~/.claude/skills/, so Claude knows this desk's conventions — where notes belong, what the pipeline actually enforces, and when to filter server-side rather than page-and-grep. It ships inside this package, so it always matches your qd.
The full surface
Run qd guide for the complete cheatsheet — auth, the output contract, pagination, and one example per resource. Every command maps 1:1 onto an API operation; the CLI has no private endpoints. Output is JSON when piped (agents/CI) and a table on a TTY — --json / --plain to force it.
Boards & columns
A card always lands in a column, so a board with no lists can't hold one. Seed the columns in the same call that creates the board:
bash
qd boards create --name "Ops" --prefix OPS --lists "To Do,Doing,Done"--lists is optional — up to 20 comma-separated names, created in order, in one transaction.
Reshape the columns later. All four need admin:
| Command | Does |
|---|---|
qd boards lists add <board> --name "In Review" [--wip N] [--status in_review] | Append a column |
qd boards lists rename <board> <listId> --name <new> [--wip N|null] [--status <s>] | Rename, or change the WIP limit / mapped status |
qd boards lists reorder <board> --ids <id1,id2,id3> | Reorder — --ids must name exactly the board's current lists |
qd boards lists rm <board> <listId> --confirm | Delete — refused while the list still holds cards |
List ids come from qd boards get <board> or qd boards context <board>.