Skip to main content
reticle serve starts the daemon: the WebSocket bridge your app dials into, plus the tool engine behind it. It spawns a detached child and then waits for that child to answer /status before reporting success.
Most people never type this. Your agent runs reticle mcp, which starts a daemon itself if one is not already up.

Flags

What it prints

One structured line. When a daemon already owns the port, it says so and does nothing:
A successful spawn logs reticle_daemon_spawned with the port. A port held by something that is not a Reticle daemon is refused up front rather than spawned into:

Exit codes

serve reports the bind, not the spawn. It used to exit 0 the moment it forked, while the child died on an EADDRINUSE nobody joined back up. It now waits for the daemon to answer.

Worked example

What the daemon is

The bridge, the tool engine, and where .reticle/ lives.
Last modified on August 15, 2026