# Runs

> What a run is, how to read the tool calls as they happen, why a run stops, and what happens when you close the app mid-run.

A **run** is one turn of an agent actually working: it reads its context, decides, calls a tool, reads the result, and repeats until it has an answer or needs you.

## When to use it

You do not start a run directly — sending a message starts one. What this page is for is *reading* one: knowing what the agent did, why it stopped, and what to do about it.

## Reading a run

Each step appears in the conversation as it happens:

- **A tool call**, with the arguments the agent chose. This is the most informative thing on the screen. An agent that searched for the wrong thing tells you more than a bad final answer does.
- **The result** that came back, including errors. A failed call is not the end of a run — the agent sees the error and can try something else.
- **The agent's text**, streamed as it is produced.

If the final answer is wrong, scroll back through the tool calls. The mistake is almost always visible in one of them, and [what to change](/docs/build/iterating/#reading-a-run-to-diagnose-it) follows from which one.

## Why a run stops

| It stopped because | You see | What to do |
| --- | --- | --- |
| It finished | A final answer | Nothing |
| It needs information only you have | A [question](/docs/work/questions/) — options, a text field, or a set of preferences | Answer it; the run resumes |
| It wants to do something irreversible | An [approval](/docs/work/approvals/) request showing the exact action | Approve or reject |
| It wants a [skill](/docs/capabilities/skills/) it does not have | A request to grant the skill | Grant or decline |
| It hit a step limit | The run ends without a final answer | Ask it to continue, or narrow the task |
| It failed | An error | Retry, or fix what it was blocked on |

A paused run is holding its place, not starting over. Answering resumes it with everything it had already worked out.

## Background runs

Runs execute on Endue's servers, not in your browser tab. **Closing the app does not stop the work.**

Start a long task, close the tab, come back later — the run kept going and the result is in the thread. The conversation list marks threads that finished while you were away, so you do not have to remember which ones to check. This is also what makes [routines](/docs/automate/routines/) possible: a scheduled run does not need anyone to be watching.

<Aside type="note" title="One run at a time per conversation">
  A conversation runs one turn at a time. Sending a message while a run is in
  flight [steers](/docs/work/steering/) that run rather than starting a second one.
</Aside>

## Limits

- A run has a step limit. A task that needs more steps than the limit allows ends without a final answer — split it, or narrow it.
- A run keeps the configuration it started with: prompt revision, model, and bound tools. Changes made mid-run apply to the next one.
- You cannot edit a tool call the agent already made. You can [steer](/docs/work/steering/) what it does next, or reject an action at the [approval](/docs/work/approvals/) gate.
- There is no replay. Re-running a task starts a fresh run, and agents are not deterministic — the same request can take a different route.

## Related

<CardGrid>
  <LinkCard
    title="Steering a run"
    href="/docs/work/steering/"
    description="Correct a run while it is still going."
  />
  <LinkCard
    title="Approvals"
    href="/docs/work/approvals/"
    description="The gate in front of anything irreversible."
  />
  <LinkCard
    title="How Endue works"
    href="/docs/get-started/how-it-works/"
    description="The loop behind every run, in more detail."
  />
</CardGrid>
