The Web Dashboard
The web dashboard is a React single-page app served by a local Hono server bound to
127.0.0.1 (port 5173 by default). It is a view onto the same on-disk substrate the CLI reads —
state.json, events.ndjson, iteration-status.json, and rauf.log — so it reports the same status
for any loop in a project, including loops it did not start. A loop you launch in a terminal with
rauf loop run shows up in the dashboard with no extra wiring, because both surfaces reconstruct their
view from the same files.
Starting and stopping the server
Run the server with rauf server start. In a TTY it runs in the foreground; pass --daemon to
background it. Override the port with --port N.
rauf server start # foreground (default in a TTY)rauf server start --daemon # background itrauf server start --port 8080On start it prints:
Rauf server running at http://localhost:5173Open that URL to reach the dashboard.
The rest of the lifecycle is managed with the rauf server subcommands:
rauf server status # is it running? (--json for machine output)rauf server logs # tail the server log (--tail N)rauf server restart # restart in placerauf server stop # stop itrauf server stop is loop-aware: it refuses to stop while loops are in flight, so you don’t pull
the server out from under a running loop by accident. Pass --force to stop anyway.
Discovering projects
The first thing the dashboard shows is the projects view: a card for every rauf-enabled project
found under your root directory, each with its stack, loop-state badge, and backlog summary. This is
the web equivalent of rauf projects status — the same scan, rendered as a grid you can click into.
Managing the backlog
Open a project and you get full backlog CRUD from the browser: add, edit, delete, and list items,
filtered and sorted in the UI. This is the same data as rauf backlog … operating on the same
backlog.json — change it in the browser and the next CLI read sees it, and vice versa.
Live status and events
Loop status in the dashboard is rendered from the one shared label map that the CLI uses, so every surface names a state identically. Two states that used to render as if the loop were idle now have their own badges:
| Raw state | Label |
|---|---|
PAUSED_HUMAN | Needs Human |
REVIEWING | Reviewing |
PAUSED_USAGE_LIMIT | Usage Limit (Paused) |
Alongside the badge, a live event timeline reconstructs the loop’s activity from events.ndjson,
streamed over SSE so it updates as the loop runs. For the full status vocabulary and how each surface
derives state from the substrate, see the Monitoring guide.
Recovery actions
The dashboard exposes the same five recovery actions as the CLI, as buttons on the project status page:
- Reset — clear loop state and reset stalled items.
- Resume — reconcile committed work and relaunch the loop.
- Review — start a standalone review pass over completed items.
- Unblock — requeue blocked items.
- Validate — check the backlog for structural problems.
This is the CLI↔web parity group: anything you can recover from the terminal, you can recover from the browser. The full action-by-action walkthrough, with request/response shapes, lives in the Recovery & Troubleshooting guide.
The security model
The recovery endpoints split along read vs. write:
- Mutating actions (Reset, Resume, Review, Unblock) are
POSTs. Every one requires the headerX-Rauf-Request: true; a request without it gets403. This is the dashboard’s CSRF guard — the frontend’s fetch wrapper sets the header on every mutation. - Validate is a read-only
GET. It needs no header and no lock, and is safe to call during a live run.
A mutating action against a project with a live loop is rejected with 409 LOCK_CONFLICT —
stop the loop first. The full error surface:
| HTTP | When |
|---|---|
400 | bad project id, sandbox-escaping path, or malformed body |
403 | missing X-Rauf-Request: true on a POST |
404 | no state/backlog file for the resolved root |
409 | a loop is live (LOCK_CONFLICT) |
500 | filesystem failure (IO_ERROR) |
Targeting a non-default backlog root
Projects with more than one backlog root are supported in the UI: a backlog-root selector points the
dashboard at a non-default root, the web counterpart of the CLI’s --backlog <dir> flag. See the
Multi-backlog guide for how multiple roots work.
Further reading
- Web API Reference — the full API surface, route by route, plus the frontend architecture.
- Recovery & Troubleshooting — the five recovery actions in detail.
- Monitoring — status vocabulary and reading the event timeline.
- Multi-backlog — targeting more than one backlog root.