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 compilingNode 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
compilingAn 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 40No 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 draculaThe 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.