Skip to main content
A sub agent is a temporary worker the main Agent creates during a conversation. The main Agent hands it one independent task, it completes that task in its own context, and it returns the result. The pages it opened, the files it read and the commands it ran never enter the main conversation.
Sub agents are temporary. They have no identity, memory or channel of their own, and never appear in the Agent list.

Two Benefits

  • Isolated context: intermediate work does not consume the main conversation’s context, which saves tokens and keeps the model’s attention on what matters
  • Parallel execution: several sub agents can run at the same time, so the total time is that of the slowest one

Inherited and Isolated

A sub agent inherits part of the main Agent’s environment, but it is not a copy of it: A sub agent therefore knows only what the main Agent passes to it. It cannot see the conversation and cannot ask the user anything, so every path, identifier, constraint and settled decision it needs must be stated when the task is created.

When It Is Used

The main Agent decides on its own. There is nothing to configure and no command to run. A sub agent is created when:
  • Several unrelated things can be done at the same time, such as “research product A and product B separately”
  • A task produces a lot of intermediate output but only the conclusion is needed, such as “check whether this error has a known fix in the community”
A sub agent is not created when:
  • The main Agent needs the intermediate results to continue (reading a few files or running a few searches is ordinary work)
  • The task depends on earlier parts of the conversation, or needs the user to confirm something along the way
  • The task should run beyond this conversation, which is what scheduled tasks are for
To force delegation, just say so, for example “use sub agents to research these two directions separately”.

What You See

Each sub agent gets its own card in the web console and the desktop app. Expand it to see the tool it is calling and the steps it has taken; once it finishes, the card holds its full report. Sub agents start and finish independently, so it is clear which one is still running.

Built-in Types

Each sub agent is created with a type, which determines its system prompt and the tools it may use:

Custom Types

Add a .md file under subagents/ in the workspace to define a new type. The format is the same as skills:
Fields: Restricting tools is the most reliable constraint: a type with only read, ls, search_files cannot modify anything. On first start, README.md and example.md.template are created under subagents/. Copy the template to a .md file to enable it. Templates are re-read every turn, so a new file takes effect on the next message with no restart.
Tool names are matched exactly, so the tools allowlist does not cover MCP tools. Omit the field if the type needs them.

Blocked Tools

The following tools are unavailable to every sub agent:

Configuration

Sub agents are enabled by default. The switch is in “Config → Agent” in the web console and the desktop app, and takes effect on the next turn with no restart. Finer limits are set in config.json:

Design

  • Context isolation: a sub agent starts with an empty message history, loads no persona files and has no memory manager. The main conversation keeps only the call and the final conclusion.
  • Parallel execution: tasks within one call run on their own threads and share one time budget. Several calls issued in the same turn also start together.
  • Half the step budget: a sub agent gets half the main Agent’s maximum steps. Its task is already bounded, so it does not need the budget of a whole conversation. When it runs out, it is asked to summarize what it completed.
  • Traceable timeouts: a task that times out is cancelled and reported as such. The number of results always matches the number of tasks, so the main Agent can tell “found nothing” from “never finished”.
  • Display separated from context: the model receives structured data and the user sees a formatted report. Both come from the same result, and the displayed form never enters the model’s context.