Dashboard
A local web app to run tests, watch them live, read every step's evidence, edit tests and settings, and follow trends.
The dashboard is a local web app for everything agent-qa records. It reads the same run store as the CLI and your coding agent, so every run shows up there, wherever it started.
Start it
npx agent-qa dashboard --openIt prints Dashboard running at and the address. The port comes from --port, then services.dashboard.port, then 3470, which is also what init writes. --db <path> points at another run store, and --open opens your browser, at a page when you name one, such as --open /config/models. npx agent-qa serve starts the same server with your config's settings and no flags.
An interactive npx agent-qa init ends by starting the dashboard, unless you pass --no-dashboard, and opens it on the model page while the model is not ready yet. Run again on a set-up project, init starts it only while the model is not ready.
The dashboard listens on your own machine only. It needs the project's .env, secrets file and hooks file to exist, like agent-qa run does.
Runs
The Runs page lists every run, newest first, with its verdict and timing. Open one to see:
- the verdict, and the status of post-run analysis and curation;
- every test and step, with the screenshots the model saw;
- where each test ran: this machine, or a remote by name, with the remote's server, Appium version and device type for a remote device, and a link to the session when a plugin returns one;
- the session video;
- a feedback panel to mark the run, with a preview of the fix;
- Re-run, or press R.
Each step has these tabs:
| Tab | Shows |
|---|---|
| Overview | What the step saw, decided, did and checked. |
| Variables | Variables at that step, with secrets masked. |
| Network | Requests and responses. |
| Console | Browser console messages, or the output of a hook. |
| ARIA Tree | The accessibility tree the agent read. |
| A11y | Accessibility check results. |
| Knowledge | What memidex gave the step, its effect, and what changed afterwards. |
Live view
A run started from the dashboard can be watched while it runs: a step list next to a live picture of the browser or device. A plugin's progress, such as a queue position or an upload, shows there while the session is being prepared. When the run ends, the page becomes the run's detail view. Runs started elsewhere, from a terminal or a coding agent, still appear in the list, but cannot be watched live.
Tests, suites and hooks
The Tests, Suites and Hooks pages list what your project has, with an editor for each that switches between a form and the YAML. New tests, suites and hooks get their IDs here. Listing tests also adds an ID to any test file that lacks one.
Insights
Insights charts pass rate, duration, token usage and the changes memidex made, over one day, seven days, 30 days or all time, with a breakdown per test. To count only some runs in the pass rate, label runs with --run-attr KEY=VALUE and filter on those labels with analytics.passRateScope.attributes in your config.
Config
Config edits agent-qa.config.yaml in five tabs: Models, Targets, Execution, Project and Advanced. Changes are written to your files, so review them with git diff like any other change. Credentials are not stored in the config; see Models and credentials.
The Config page lists your remotes read-only, by name, kind and origin or plugin package, and sets the project's default place for web tests. Each test's and suite's settings show where it runs. The dashboard never changes registry.remotes or a plugins entry; edit those in the file.
Runs queued from the dashboard
Runs started from the dashboard wait in its run queue, which runs as many at once as your machine has CPU cores. From a terminal, agent-qa queue list --server <dashboard address> shows the queue, and agent-qa queue cancel <runId> --server <dashboard address> stops a run.
Run service
The dashboard also serves a small HTTP interface on the same port, for scripts on your machine:
| Request | Does |
|---|---|
POST /run with {"patterns": ["tests/checkout.yaml"]} | Starts a run and answers with its ID. |
GET /run/<runId>/events | Streams the run's events as server-sent events. |
GET /ok | Reports whether the service is up. |
It accepts requests from your machine only and uses no tokens.