> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fermata.run/llms.txt
> Use this file to discover all available pages before exploring further.

# Review a Track, then approve or decline it

> Read a Track exactly as the agent will, edit it if it needs work, then approve it into a lane or decline it. Nothing reaches an agent before you approve.

> [!NOTE]
>
> Streams and Tracks are an Edge preview, part of **Loop intake**. Turn on Settings → Edge → **Enable Edge features**, then **Loop intake** in the "Features" card. See [Edge features](https://docs.fermata.run/configuration/edge.md).

A Stream decides which issues you see. You decide which ones become work. Nothing an issue says reaches an agent before you approve it: a Track carries no description and no comments until you open it, and approving is always your press.

## Open the review

Click a Track card in the Tracks column and its review opens in the inspector on the right, the way clicking a piece card does. The header has the key (click it to open the issue in the tracker), "Track · arrived 4m ago", the rule that matched it ("from Label fermata"), the title, and the author with their badge.

## What the agent reads

The middle of the inspector, "What the agent reads", is the issue as the agent will receive it. Fermata fetches it when you open the review ("Fetching the issue…"); if the tracker does not answer, "Couldn't fetch the issue" explains why and offers **Retry**.

It is the issue cleaned, not the issue raw. Text a person reading the issue in the tracker would never see is removed before anything reads it: HTML comments and markdown comments, zero-width and other invisible characters, and hidden labels such as image alt text, link titles, and HTML attributes. Those are the places a hostile issue hides instructions meant for an agent. When something was removed, a line above the description says what: "2 hidden blocks and 1 invisible character removed".

Under the description come the parent issue and the dependencies, then "Comments (N)" as the Stream's comments setting allows. If comments were left out, a closing line says why: "3 left out by the Stream's comments rule", or "2 older left out by the size limit" when a long thread was trimmed.

### Edit before you approve

**Edit** turns the text into an editor: "Edit the text the agent receives. The edit is what runs." Cut a misleading paragraph, add the decision the issue is missing, or tighten the ask. **Discard edit** goes back to the issue as the tracker gave it.

What runs is what you saw. Approving builds the piece's starting text from the fetch on your screen, or from your edit, never from a fresh fetch. An issue someone edits in the tracker after you read it cannot slip new text in at the last second.

## Approve

The bottom of the inspector sets how the piece will run:

* **Lane**: **Manual**, **Auto**, or **Loop**, pre-filled from the Stream's "Approve into". See [lanes](https://docs.fermata.run/control/lanes.md).
* **Model**: the model for the piece's spec, "fixed once the spec starts".
* **Configure…** opens the same flow configuration a draft has, for gates and passes on this piece only.

The approve button names what it will do:

| Lane | Button | What happens |
| - | - | - |
| Manual | **Approve and run spec** | The piece starts, opens, and writes its spec from the issue as the requirement. |
| Auto | **Approve and play** | The piece starts and runs on its own; you stay on the board. |
| Loop | **Approve to Loop** | The issue becomes a Loop draft in Backlog, which runs when the Loop is playing. |

Either way the piece keeps the link to its issue, exactly like one you [picked by hand](https://docs.fermata.run/loop/from-an-issue.md): the branch carries the key and the pull request closes the issue. You cannot approve until the issue has loaded, because nothing can be approved that was not shown.

When the issue has open blockers and you approve onto Manual or Auto, Fermata asks first: "Blocked by 1 open issue", "The agent may start on work that waits for another issue." Approving onto Loop does not ask.

## Decline and restore

**Decline…** asks for an optional reason ("Reason (optional, stays on this Mac)") and removes the Track. A declined issue stays declined: if it matches again, or gets labelled again, it does not come back. "A declined issue stays declined if it's labelled again. Only Restore brings it back."

Declined issues are listed under "N declined" at the foot of the Tracks column, and in the "Streams into" card in Settings → Streams. Each row reads the key, your reason, and when you declined it, with **Restore**. Restoring puts the Track back at the top of the column; if Fermata no longer has its details, the issue returns at the next check if it still matches.

## Keys

With a Track open in the inspector, the board takes three keys, shown under the buttons: "A approve · D decline · ↓ next track". After you approve onto Auto or Loop, or decline, the next Track opens on its own, so a run of reviews is a run of keystrokes. A blocked issue still asks before **A** approves it.

## Dragging into Backlog

You can drag a Track card onto the Backlog column. That opens the Track's review; it never approves it. Approving stays a press of the button or **A**, after you have seen what the agent will read.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.