Skip to main content
Run substrate serve to open the local web inspector for your project. It binds to 127.0.0.1 and prints the URL — nothing is exposed off the machine. The board auto-refreshes as agents write tasks and advance work, giving you a live view without touching anything. serve is also the default subcommand: running substrate with no arguments is identical to running substrate serve.

Usage

Port Selection

The preferred port is 7475. If that port is taken, serve scans upward through 7475–7499 for the first free port, so several projects’ inspectors can coexist. It prints the port it bound. Exhausting the entire range fails with a clear error. The bound port is recorded in .substrate/serve.json, so substrate diagnose can answer “which port is this project on?” without needing lsof.

Single-Owner Lock

serve takes a single-owner lock via .substrate/substrate.pid, created exclusively so two near-simultaneous starts cannot both win.
  • A live PID → the second serve refuses.
  • A stale PID from a crashed process → reclaimed automatically.
SIGINT and SIGTERM shut down cleanly: the HTTP server and database client are closed, and both the PID file and serve.json are cleared.

Read-Only

The UI observes and never writes — there is no drag-and-drop and no in-browser editing. See Web UI.
serve refuses if there is no .substrate/ in the current directory. Run substrate init first.