# Limits and defaults

Every number a Borago Board user can hit, with its default and where it applies. Runs, the queue, history, dictation, recovery, accounts and containers.

These numbers are ceilings the app applies on its own, and the defaults are the values the desktop app uses with nothing changed. Where a number can be changed in the app, the row says where. The cloud runs no agent, so the run and queue tables apply only to the machine that runs the container.

## During a run

A run is one execution of a task by the agent inside the project's container. These limits shape what the agent can do inside one run.

| Limit | Default | Applies to |
|---|---|---|
| Idle ceiling per command | 5 minutes of no output | One command in the agent's shell. Commands that print as they go (installs, builds, test suites) reset it. A silent command is stopped when it expires |
| Hard ceiling per command | 15 minutes of wall-clock time | One command in the agent's shell, however much it prints |
| What a stopped command returns | The output so far | It comes back as an ordinary result with a notice saying how long the command ran, that the shell was restarted so its working directory and environment are reset, and that a server or watcher should be started in the background and polled. Background processes survive from one command to the next |
| Stall watchdog, hosted providers | 10 minutes with no activity at all | A run on Claude, OpenAI, Gemini or Grok. No model output, no command output and no finished tool call for this long ends the run. The task moves to Blocked with a comment saying it stalled |
| Stall watchdog, self-hosted | 20 minutes with no output | A run on a self-hosted server, once its first token has arrived |
| First token, self-hosted | 5 minutes | A run on a self-hosted server before the first token arrives. Separate from the stall watchdog so a cold server loading a large model is not stopped |
| Whole-run time limit, self-hosted | 120 minutes | A run on a self-hosted server. The service's **Time limit per task (min)** field in Settings replaces it when filled in |
| Image the agent may view | About 3.5 MB | A picture the agent opens from the container, on every provider. Over the cap the agent is told the size and asked to resize the image first |
| Document the agent may view | About 8 MB | A PDF the agent opens from the container on Claude, OpenAI, Gemini or Grok. A self-hosted model is told the document cannot be shown and reads it with a command instead. Over the cap the agent is told to extract the part it needs first |

### Web search and page fetch

Both are hosted by the provider and on by default.

| Limit | Default | Applies to |
|---|---|---|
| Web searches per run | 8 | Claude, OpenAI and Gemini runs. Gemini needs a Gemini 3 or newer model. Grok and self-hosted runs have no web search. Each search the provider reports is added to the run's cost estimate |
| Page fetches per run | 5 | Claude and Gemini runs (Gemini 3 or newer). OpenAI, Grok and self-hosted runs have no hosted fetch tool and read a known page with a command in the container instead |

### Attachments

| Limit | Default | Applies to |
|---|---|---|
| Attachment size | 10 MB per file | A file attached to a task from any surface, and a file the agent attaches from the container |
| Attachment kinds | Images, plain text, source code and web files | What the board accepts. Office documents, executables, media and archives are refused by default. Another category can be allowed on the machine running the app, see [Attachments, screenshots, paint and camera](/docs/guides/attachments-and-screenshots/) |

## The queue

| Limit | Default | Applies to |
|---|---|---|
| Runs at once per project | 1 | Every surface. A second Run while a run is executing is refused and the task is queued to To Do instead. The check reads whether a run is executing, not the column, so a task paused on a question does not count |
| Retry delays after a failed run | 1, 3, 5, 10 and 30 seconds | The first five failures of one task. From the second failure the app may stop the retries early and move the task to Blocked with the reason |
| Failures before the task is blocked | 6 | One task. The sixth consecutive failure moves it to Blocked with a comment holding the last error |
| Wait after a provider rate limit | The provider's stated reset time plus 5 minutes | The whole project queue. When the provider states no reset time the wait grows from 5 minutes to a ceiling of 60 |
| Tasks a run may create | 8 per run | The tasks a run proposes. Extras are dropped and the task's history says how many |
| Tasks in one breakdown family | 20 | Everything split out of one root task, however many rounds it took. Proposals over the cap are declined and noted in the history |
| Title and description of a created task | 200 and 4,000 characters | A task the agent creates. Longer text is cut |
| Cost budget | None | Per project and per provider, on the machine that runs the container. Set in the project's **AI Auth** tab. When set, the queue holds when the recorded spend reaches it, until the spend is reset |

## History

| Limit | Default | Applies to |
|---|---|---|
| Runs kept per task | 100 | The run archive. The newest are kept and older runs lose their output |
| Output kept per run | 1,000,000 characters | One archived run. Above the cap the start and the end are kept, the middle is dropped, and the archive says how many characters are missing and the true length |
| Run summary kept | 6,000 characters | The summary a run writes at its end. Longer text is cut |
| Previous output sent to the next run | The latest run only | A retry reads the previous attempt's output. Older archived runs' transcripts are never sent to a model. The review after a run is told only that they happened, how each ended and one line of summary |

## Notifications

| Limit | Default | Applies to |
|---|---|---|
| Notifications kept | 300 | The account's notification list, on every surface |
| Repeats folded into one notification | 200 | A repeat of a condition-shaped notice (rate limited, queue held, sign-in failed, git sign-in failed, firewall blocked, container rebuild needed, container notice, weak credential storage) for the same project updates the unread notice in place and records the repeat. An update-available and an update-ready notice replace each other |

## Dictation

| Limit | Default | Applies to |
|---|---|---|
| Length of one recording | 2 minutes | One dictation into the chat composer or a note, in the desktop app or a browser at its localhost address. At the limit the recording stops by itself and all of it is turned into text |

## Recovery

| Limit | Default | Applies to |
|---|---|---|
| Recycle bin | 30 days | A deleted project, on the desktop and on the cloud. After that its rows and its attachment files are purged. Tasks are closed, never deleted |
| Restore points kept | 2 | Whole-board copies taken before a new version is allowed to change the database. Desktop only |
| Secret versions kept | 10 per project and field | The earlier values of a credential, kept on the desktop. Desktop only |

## Accounts

These apply to the cloud account only. A desktop that never signs in has no session, no trial and no plan.

| Limit | Default | Applies to |
|---|---|---|
| Session length | 30 days, renewing while in use | Every signed-in client. A client that keeps talking to the cloud never signs in again. One offline for more than half the length may, and one offline for the whole length does |
| Trial | 30 days, on Max | A new cloud account, with no card. A trial with no plan bought ends at its expiry with no grace. A plan bought during it is first billed when the trial ends and starts once that payment is collected. Until then the account has the trial's plan |
| Second trial month | 30 days, on Max | Optional, once per account, for a one-off payment that saves the card and renews nothing. It starts when the free trial ends. The price is on the [pricing page](/pricing/) |
| Attachment storage | None on Basic, 10 GB on Pro, 40 GB on Max and the trial | Per account. A paid Max plan can add blocks of 40 GB or 200 GB, up to 5 of each. Notices at 80, 90, 95 and 99% and when full. At the limit new uploads are refused and nothing is deleted |
| Attachment hold | 90 days | Attachments of an account that moved to a plan without attachments and chose to hold them, or whose trial ended with no plan bought. Restored on a move to a plan with attachments in that time, then deleted |
| Payment grace | 30 days | A paid plan whose renewal failed. Banners warn during the window. After it, sync and the cloud board close until the plan is renewed |
| First payment grace | 7 days | A plan bought during the trial, once the trial has ended and its first payment has not been collected yet. The account keeps the trial's plan, not the bought one, for these days. After them, sync and the cloud board close until the payment is collected |

## Containers

| Limit | Default | Applies to |
|---|---|---|
| Memory cap, automatic | The machine's memory minus a reserve for the machine itself | Every project container, including one started from a user-supplied Compose file. The project dialog shows the resulting figure. When the host's memory is unknown no cap is applied |
| Memory cap, set by hand | 256 MiB at the lowest | The **Container memory limit** field in the project settings when **Automatic** is unticked. Capped at the host total memory |
| Published ports | Bound to this computer only | Every port a project publishes, unless the port is marked for the local network. A Docker-published port bypasses the host firewall, so the default keeps it on the machine |

Related: [How a run works](/docs/reference/how-a-run-works/), [The queue and its holds](/docs/reference/queue-and-holds/), [Recovery](/docs/reference/recovery/), [Accounts](/docs/reference/accounts/), [Containers](/docs/reference/containers/).
