The compiling CLI

The site is one half of the desk; this is the other. One npm package plays the catalog in your terminal, drives a parked browser tab, and chimes when something slow finishes.

npm i -g compiling

Node 18+, MIT, published to npm as compiling. npx compiling … works for a one-off, but the shell hook below wants it on your PATH.

The menu

compiling

An arrow-key menu of the whole catalog, grouped by where a game runs: Play right here (no browser needed), the ambience beds, and In your browser — with the order following whether a tab is linked. A quick-start row up top offers something sized for the wait (r re-rolls the pick).

  • plays the highlighted row — locally if it can, in the linked tab otherwise; p forces local.
  • /filters as you type, on the same fuzzy scorer as the site’s ⌘K palette — muscle memory carries between the two skins.
  • d plays a row’s daily; D shows only games that have one. Session-length views live on 2 / 5 / 3.
  • On an ambience row, starts the bed and + / - nudge the volume while the menu stays open. Quitting stops it — nothing is left running behind you.

Play in the terminal

compiling play snake
compiling play 2048
compiling play rain 40

No browser at all: the same rules modules the site runs, rendered in your terminal, with the recorded ambience beds looped locally. Wants a real terminal at least 60×18.

Drive the linked tab

With the relay running and a tab linked (setup takes a minute), anything else you type is forwarded to the site’s command palette — the parked tab switches games instead of minting a new one:

compiling snake            # the linked tab switches to Snake
compiling daily hive       # jump to a daily
compiling break 2m         # a random game sized for a 2-minute wait
compiling rain 40          # ambience, same "rain 40" as the palette
compiling theme dracula

The CLI carries no game list; the site resolves the words, so the vocabulary is always exactly the palette’s. With no linked tab it opens compiling.games in your browser instead — commands never dead-end. One honest limitation: the tab changes content, but browsers don’t let it steal focus, so alt-tab is still yours.

Chime for any slow command

The site is named for “my code’s compiling”, so builds, test suites and long installs count too. One line in ~/.zshrc:

eval "$(compiling hook zsh)"

Any foreground command running longer than 30 seconds fires the same done chime; faster ones produce no request at all. zsh only for now — bash and fish are planned.

Tuning, and what the hook sends

COMPILING_MIN_SECS=120 changes the threshold and COMPILING_HOOK_DISABLE=1mutes it — both take effect immediately, no re-init. Only the command’s first word ever leaves the shell, never arguments, which carry paths and the occasional secret — and only to loopback. The curl is backgrounded with a 0.2s cap, so a stopped relay never slows your prompt.

Set up the agent chime → the relay, the hooks, and linking a browser tab.