demolab is one command runner wrapping uv (Python) and typst (publishing); you never call pip or python directly. Every command finds the lab by walking up from wherever you are, like git finding its root, so it works from any subdirectory. Run demolab with no arguments for the live catalog; this page mirrors its groups. Most of these are driven by a coding agent following a runbook. The four a human types daily are dev, run, build, and test.
init--force overrides both. Typically run once, by the agent, at the top of the GETTING-STARTED runbook.docsdemolab docs prints the agent manual plus the menu of runbooks and guides; demolab docs <NAME> prints that document’s path, and --print prints its contents instead. The menu also lists AGENT, CHANGELOG, DEMO, and STARTERS. This is the agent’s orientation command; a human rarely needs it.installuv sync). Rarely needed by hand: the commands that need the venv go through uv and create it on demand.versionAgent territory: these run inside runbooks, not day to day.
scaffoldwritings/, experiments/, tools/, artifacts/, plus config). Non-destructive: it never clobbers an existing file, so it doubles as a repair command. For a worked first experiment, model on a starter rather than installing bulk content: demolab docs STARTERS prints the dir (monte-carlo-pi is the canonical one).deploy-setupdeploy.yml (build main to the gh-pages branch) and preview.yml (per-PR previews) into .github/workflows/, then prints the remaining GitHub-UI clicks, which can’t be scripted.run command — invoke the runner directly. uv run python experiments/exp000.py executes experiments/exp000.py in the lab’s venv; the runner stages figures and a numbers.json under artifacts/data/exp000/. Daily driver.newdevServe the site with hot-reload and in-browser build errors. Takes an optional port (default: first free from 3000). --demo serves the packaged docs site from a scratch copy under temp/ instead of your lab; --landing (only with --demo) previews its landing page too. For your own landing page, put a landing.typ at the lab root and plain demolab dev renders it. The other daily driver:
demolab dev 4000 --demo --landingbuildartifacts/site/ and the PDFs plus the bound book into artifacts/pdfs/. What CI runs.slideswritings/*.typ without the meta+body shape) to artifacts/pdfs/.playgroundexperiments/playground.py), if it has one, at http://localhost:8501.testcleantemp/ and artifacts/site/. The committed record under artifacts/data/ and artifacts/pdfs/ is untouched.