---
title: "Run-aware Ask Fabro, stage timing, and context"
date: "2026-05-21"
---

<Warning>
**Generic agent sessions are now run-bound Ask Fabro sessions.** The standalone session surface has moved behind run-scoped sessions so questions always have a run to inspect.

To migrate:
1. Replace `fabro session -p "..."` with `fabro ask --prompt "..." <RUN>`.
2. Create API sessions through `POST /api/v1/runs/{id}/sessions`.
3. Read session detail, events, turns, and interrupts through the returned session ID.
</Warning>

<Warning>
**Timing fields now use `StageTiming`.** API clients that read old duration or elapsed fields should regenerate and use the new timing objects.

To migrate:
1. Regenerate clients from the current OpenAPI schema.
2. Read elapsed clock time from `wall_time_ms`.
3. Read summed stage work from `active_time_ms`; it can exceed wall time when parallel stages run.
</Warning>

## Ask Fabro understands runs

Ask Fabro now starts from a specific run instead of a free-floating chat session. The CLI can answer read-only questions about a run, and the web app has the run-scoped session APIs needed for the sidebar experience.

```bash
fabro ask --prompt "Why is this run blocked?" 01K...
```

Run-bound sessions give Ask Fabro direct access to run metadata, events, and controls while keeping the conversation attached to the run history. Session listings, details, event replay, streaming turns, and interrupt handling all use the owning run as the context boundary.

## Clearer stage timing and context

Run and stage timing now separates elapsed wall time from active work time. This makes parallel workflows easier to reason about: a run can spend ten seconds on the clock while accumulating more than ten seconds of active stage work across branches.

The Stages view also has a Context tab. You can inspect context values, stage notes, and structured stage output next to the thread or logs that produced them.

## More

<Accordion title="API">
- Added run-bound Ask Fabro session endpoints and session metadata on run summaries
- Added `StageTiming` objects with `wall_time_ms` and `active_time_ms`
- Pair sessions now target active stages and expose the `fabro_run_pair` MCP tool
</Accordion>

<Accordion title="CLI">
- Added `fabro ask --prompt <PROMPT> <RUN>` for run-scoped questions
</Accordion>

<Accordion title="Workflows">
- Added `[run.agent] fabro_tools = true` as the opt-in for built-in Fabro run-management tools
- Configured artifact globs are captured once per run so later config changes do not affect cleanup
- Artifact collection now follows symlinked artifact roots
</Accordion>

<Accordion title="Fixes">
- Fixed active stage duration displays measuring from the wrong timestamp
- Fixed Ask Fabro sidebar user bubbles and composer spacing
- Fixed Daytona network policies being derived from the wrong layer
</Accordion>

<Accordion title="Improvements">
- Run headers now include detail popovers for workflow, repository, and related metadata
- Billing views now compute in-flight LLM costs on read and show token cache breakdowns on hover
- Run overview shows a sandbox status dot
- Storage, models, and resources settings pages now keep related values grouped together
</Accordion>
