Requirements, the repository, rapid setup, the plugin, and the daemon, by hand.
The install prompt has Claude Code run these steps and check each one. This is the same install by hand.
Requirements
| Need | Why | Check |
|---|---|---|
| macOS | built and measured on Apple silicon | uname -s prints Darwin |
| Node 24 or later | the daemon, CLI, and engine are TypeScript Node runs directly, no build step | node --version |
| pnpm | the repository is one pnpm workspace | pnpm --version |
| Git and Git LFS | the styles' proofs and the repository's videos are in LFS | git lfs version |
| Google Chrome | scenes render in headless Chrome, from /Applications/Google Chrome.app or CHROME_PATH | |
| ffmpeg and ffprobe | on PATH: encode, join, mix, measure | ffmpeg -version |
| Claude Code, signed in | drives the agents and shows the pane | claude --version |
Two more, each for one feature:
| Need | For | Check |
|---|---|---|
uv | videos cut to a track: it runs the listener, which brings its own Python and installs itself on first use (brew install uv) | uv --version |
| Blender | product shots from a 3D model: /Applications/Blender.app, or the binary in RAPID_BLENDER | /Applications/Blender.app/Contents/MacOS/Blender --version |
1. The repository
git lfs install
git clone https://github.com/fakeplant/rapid.git
cd rapid
pnpm install
Run git lfs install before the clone. A checkout cloned without it holds LFS pointers in place of the proofs' videos and frames, and their checks fail; git lfs pull fetches the files. file styles/swiss/proof/poster.png says PNG image data when they are there.
2. rapid setup
node daemon/bin/rapid.ts setup
Writes a shim, ~/.local/bin/rapid (--bin-dir <dir> for another folder), that runs this checkout's CLI, builds the screening page (screen/dist) if it is missing, and reports what the machine has. It never edits a shell profile or installs a tool. A file at the shim's path that isn't rapid's is left alone.
If it reports ~/.local/bin is not on PATH, add the line it prints to your shell profile and open a new shell:
export PATH="$HOME/.local/bin:$PATH"
3. rapid setup --check
rapid setup --check
Reports and writes nothing. One line per check, ok or missing with its fix; exits 1 until all pass:
ok rapid command: /Users/you/.local/bin/rapid is in place
ok Node 24 or newer: node v24.8.0
ok ffmpeg: ffmpeg version 7.1.1
ok ffprobe: ffprobe version 7.1.1
ok Google Chrome: /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
ok Claude Code: claude 2.1.280 (Claude Code)
ok Claude sign-in: signed in (claude.ai)
ok The page: built
ok uv (for music): uv 0.9.0
rapid is ready.
Without uv, its line reads optional and rapid is still ready. Setup doesn't check for Blender; a video that plans a shot fails at that node if it can't start it.
The sign-in check reads claude auth status --json, or passes when ANTHROPIC_API_KEY is set. Fix: run claude, then /login. A missing page: pnpm --filter @rapid/screen build in the checkout; rebuild it after pulling changes to screen/.
4. The plugin
In Claude Code:
/plugin marketplace add fakeplant/rapid
/plugin install rapid@rapid
From a shell: claude plugin marketplace add fakeplant/rapid, then claude plugin install rapid@rapid; claude plugin list lists rapid. The plugin loads in the next session. It brings the pane, /rapid, the agents and skills, and the MCP server, in the terminal and the desktop app alike.
To load a checkout's plugin without installing it:
claude --plugin-dir ./plugin
The plugin runs the rapid command. If it isn't on the PATH Claude Code sees, set the plugin's cli option to the command as words: node /Users/you/code/rapid/daemon/bin/rapid.ts. With cli left at rapid and no rapid on PATH, the MCP server falls back to the checkout the plugin sits in. /rapid setup prints the setup report inside Claude Code.
The daemon
The daemon owns the work: the job graph, the lanes, the event log, and the screening page, on http://127.0.0.1:4317. Starting it by hand is rarely needed: rapid video, rapid open, and the MCP tools that need it start it in the background, and the pane has a Start daemon button.
rapid daemon ensure # started: rapid daemon 0.1.0 at http://127.0.0.1:4317 (pid 4242)
rapid daemon status # whether it answers, and where its state and log are; exits 1 when none does
rapid daemon stop # stops the daemon ensure started
A background daemon logs to $RAPID_HOME/daemon.log and keeps its PID in $RAPID_HOME/daemon.pid (RAPID_HOME defaults to ~/.rapid). In the foreground:
rapid serve # rapid daemon on http://127.0.0.1:4317 (state in ~/.rapid); Ctrl-C stops it
| Option | Means |
|---|---|
--port <port> | another port; other commands then need RAPID_PORT=<port> or RAPID_URL |
--home <dir> | another state folder (also RAPID_HOME): the event log, installed packages, config.json |
--plugin <dir> | the plugin folder agent sessions load (default: the checkout's plugin/) |
--dev | serve the screening page from Vite's dev server, for work on screen/ |
Agent nodes run as Claude Agent SDK sessions on this machine, on Claude Code's sign-in or ANTHROPIC_API_KEY. One that can't sign in fails saying so.
Bare style names resolve against rapid's GitHub repository unless styles_repo in $RAPID_HOME/config.json names another; see sharing styles.
Next: your first video.