---
title: "Run links and Daytona scope checks"
date: "2026-05-03"
---

## Run web URLs in API and CLI output

Fabro now returns a run's web UI URL with run responses and stores the same URL on the `run.created` event. API clients and command output no longer have to reconstruct route shapes or guess which public web URL the server is using.

When the web UI is enabled, `fabro run` and `fabro attach` print the link from the run event stream:

```bash
Web UI: https://fabro.example.com/runs/01JNQVR7M0EJ5GKAT2SC4ERS1Z
```

Fresh runs and attached sessions use the same event-backed path, so replaying a run shows the same link that was available when it was created.

## Daytona scope validation

Fabro now checks Daytona API key scopes during install, `DAYTONA_API_KEY` secret updates, and `fabro doctor`. Operators see a precise missing-scope message before the first sandbox run fails.

The validation covers the snapshot and sandbox permissions Fabro needs to create and clean up Daytona environments. This turns what used to be a generic sandbox creation failure into an install-time or diagnostics-time fix.

## More

<Accordion title="API">
- `RunStatusResponse` and `run.created` now include `web_url` when server web UI settings are available
- Run billing responses now include non-LLM stages so the billing page can show the full run shape
</Accordion>

<Accordion title="CLI">
- `fabro run` and `fabro attach` print the run's Web UI URL when available
- Snapshot pull, create, ready, and failure events now render in run progress and logs
</Accordion>

<Accordion title="Fixes">
- Fixed failed exec stages losing their output tail diagnostics
- Fixed JSON redaction replacing sandbox names that users need for debugging
- Fixed archived run overview exit nodes losing their completion color
</Accordion>
