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.