Documentation

Agents & autonomy

Your assistant can spin up sub-agents to work on parts of a task in parallel, and can pursue a goal across many turns on its own. None of it is a black box - you watch every sub-agent work in real time and can open any of them.

The agents drawer

Every chat has an Agents & background tasks panel - docked on the right on desktop, a bottom-nav tab on mobile. It lists every sub-agent the main agent has spawned in this chat, with:

  • a status icon - running, done or failed;
  • the agent’s kind (Research agent, Delegated agent, or a named custom agent) and the task it was given;
  • its token counts (↑ in / ↓ out), cost, tool count and duration;
  • a BG badge for background tasks.

A header strip summarizes how many agents are running and the running totals for the chat. Click any agent to open its run page.

Agent run pages

A sub-agent or background task has its own page - a chat-like transcript you can follow live, at its own URL (/chats/<chat>/agent/<run>). You see the task it was handed and its full work (reasoning, tool calls, result), with a status chip at the top. Because each run is its own page, you can bookmark it or leave it running and check back later without keeping the parent chat open.

Kinds of agent

  • Explore - a read-only research worker (knowledge base, documents, your workspace files read-only, and optionally the web). Use it to gather and summarize without any risk of changing anything.
  • Generic - a worker with the same tools as the chat, for offloading a self-contained chunk of work; it can act (edit files, run commands, call tools).
  • Named custom agents - specialist personas you (or your admin) define, each with its own instructions and tool profile. The main agent delegates to them by name when a task matches.

The main agent reaches all of these through a single delegate_to(agent, tasks) tool, where tasks is a list it can fan out in parallel. It also has a best_of_n tool that makes several diverse read-only attempts at one hard question and a judge picks the single best.

You manage your own specialists under Settings → Agents → Your agents: give each a name, a “when to use” hint, a persona, an optional required surface, an optional default model, and which capability groups it needs (Web / Devices / Documents / Memory / Coding / Workspace). Admins manage global agents available to everyone (see global agents).

!!! info “Workers stay in their lane” A worker runs strictly autonomously - it never asks you questions, and an approval-gated call is simply refused rather than waiting. It also inherits your chat’s governance, so it can never reach a provider your chat isn’t cleared for, and a worker’s tools and document access are gated by the model that actually runs it. Spawns can request a model by capability tag (e.g. fast, reasoning, coding); an uncleared provider is never picked, and an unmatched tag falls back to the chat’s model. Each delegate_to call fans out to at most eight parallel tasks, and your monthly budget is the real ceiling on total spend.

Sub-agents are also **strictly one level deep**: a worker can never spawn another worker.
The hierarchy is always *your chat → its sub-agents*, so a delegation can't fan out into
a runaway tree.

A sub-agent’s tokens and cost are tracked on its own run, and roll up into the chat’s session token total - where the context gauge breaks out the share attributed to sub-agents, so a delegated worker’s spend is never hidden.

The goal loop

Type /goal <objective> (in any session chat, not the main chat) to hand the assistant an objective it should pursue across multiple turns on its own. A banner appears above the composer showing the active goal with a live spinner and pause, resume, edit and stop controls. The agent keeps working - planning, acting, checking progress - until it decides the goal is complete (a strict, independent verifier has to agree) or you stop it. It’s the right tool for “keep going until it’s done” work rather than a single question.

The loop runs server-side as a durable workflow, so it keeps going with no open window needed. The goal survives a page reload - reopen the chat and the banner is right where you left it. Cancelling the active run auto-pauses the goal rather than silently abandoning it (resume picks it back up with a fresh budget), and the loop is bounded by an iteration cap so a stuck step can’t retry forever.

Background and durable runs

Long-running work doesn’t tie up your chat. A delegate_to call with background=true runs the sub-agents detached: the assistant answers you right away, and the findings are delivered automatically as a follow-up turn when they finish - you don’t wait or poll. Triggered workflows run in the background too and report by sending you a message. The goal loop and triggered workflows are durable runs that survive restarts and pick up where they left off, so you can close the tab and the work continues.