Skip to the content.

RFC 0016: Fleet Console and Status Surface

Summary

A single agent-readable status endpoint, a minimal HTML console, and a browser-friendly per-app verifier page — so the operator (and Claude) can see at a glance what is deployed, what version it is pinned to, whether it is actually running, and so an attested app can be shown to a relying party via a URL.

Problem

The pinning data already exists. proxy/projects.py records commit_sha, tree_hash, image_digest, deployed_at, source, ref, runtime, and mode per project in project.json. But the only way to read it is GET /_api/projects/<name>, which returns raw JSON behind the admin token, one project at a time. There is:

The result: the operator cannot answer “what do I have running and at what version” without curling per-project JSON, and cannot show an attested app to anyone without walking them through API calls.

Files to Modify

Implementation

  1. One liveness helper. Extract the logic GET /_api/routes uses to resolve a project to {running, container_id, backend} (the same check that emits “runtime not running”) into a function in runtimes.py. Both routes and status call it — no second copy of the liveness rule.
  2. GET /_api/status (authed, same gate as the GET /_api/projects list). For each project from ProjectStore.list(), return the manifest fields a human cares about — mode, runtime, source, ref, commit_sha, tree_hash, image_digest, deployed_at, port/listen — joined with the live {running, container_id, backend}. For attested projects, include the public verification URL.
  3. Console page (GET /_api/console, authed): a single static HTML page that fetches /_api/status and renders a table grouped by mode, with a health dot (running/stopped), short commit + short digest, relative deployed_at, and links to the app URL, the verification page (attested only), and the audit log. No framework — plain HTML + fetch, matching the existing app style.
  4. Per-app verifier page — the “show someone” deliverable. Add an HTML rendering of the existing RFC 0015 verification bundle, e.g. GET /_api/verification/<name>?format=html (public for attested, same rule as the JSON form). It renders manifest + quote + audit into a readable page: what commit is running, the tree hash to check against GitHub, the dstack quote, and the audit log since promotion. This adds no new trust data — it is a view over what 0015 already serves.

Testing & Validation Requirements

Report Requirements

Out of Scope