Skip to content

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/cli

2. Sign in — prints a short code and opens the browser; approve and you’re in.

bash
qd login

3. 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)

VariablePurpose
QD_TOKENyour API key — a user key (ptl_u_…) or an org key (ptl_o_…). Or run qd login.
QD_ORGorg slug for a user key that spans orgs (else your default org). Same as --org.
QD_API_URLAPI 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:

CommandDoes
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> --confirmDelete — refused while the list still holds cards

List ids come from qd boards get <board> or qd boards context <board>.

One vocabulary, every door.