Subagents
A subagent is a second Circle with its own context: task starts one, it works alone, and only its report comes back to your conversation. Two ship with Circle — general-purpose and the read-only explore — extensions register more, and folders of markdown files define the rest. This page is about those.
A file per agent
One file is one agent: <name>.md in one of the folders below. The keys say what it is, and the text under them is the system prompt the agent works from.
---
name: migration-checker
description: Checks a migration against the schema before it is committed.
tools: read_file, grep, execute
model: gpt-5.4
---
Read the migration and the schema it changes. Report what would fail, naming
the file and the line. Change nothing.
| Key | Needed | What it does |
|---|---|---|
name |
no: the file name is used | how task calls it: letters, digits, _ and -, up to 64 |
description |
yes | the line the model reads to decide when to use the agent |
tools |
no | the exact tool names it may use; without the key it gets everything a subagent may have |
model |
no | an id on the same endpoint; without it the agent uses the conversation’s model |
Where the files live
Read in this order, lowest first, so a later folder replaces an earlier one of the same name:
| Folder | Who it is for |
|---|---|
~/.agents/agents |
shared with other agents |
~/.claude/agents |
the same files, kept for Claude Code |
~/.circle/agents |
yours, in every folder |
<workspace>/.agents/agents |
this project, shared |
<workspace>/.claude/agents |
this project, from Claude Code |
<workspace>/.circle/agents |
this project, Circle’s own |
An extension that registers the name wins over a file, and a file wins over a built-in: your explore.md replaces the shipped explore, and gets the tools its own keys name rather than the read-only set.
Seeing them: /agents
/agents lists what task can choose — the built-ins first, then the files and extensions — one line each, and under Not offered: every definition that could not be used, with the reason:
Not offered:
C:\work\proj\.circle\agents\broken.md: 'not a name' is not a name (letters, digits, _ and -, up to 64)
ghost names tools that do not exist: no_such_tool · not offered
/agents <name> shows one of them: the folder it came from, its model, and the tools it names. Nothing is passed over in silence, because a file that did not load is otherwise impossible to find.
The desktop application’s /agents opens the subagents panel, which lists the agents of this conversation; the definitions above are the terminal’s list.
What holds for every subagent
taskruns it to the end and returns its report. A subagent cannot start another: notask, nocompact_conversation, noplan_enterorplan_exit.- Approvals apply exactly as they do to the main agent: a write or a command asks you,
autoruns it,read-onlyrefuses it. See Security. - Its context is its own. It sees the description
taskgives it, not your conversation, and its work stays in its own record until it answers. See How Circle works. - With
background: trueit keeps running and its report arrives as a notice. See Background jobs. - A file naming a tool that does not exist is skipped rather than run with a broken set, so load the MCP server or the extension first.
The folders are read again with every rebuild of the system prompt — a new or resumed session, a model switch, /reload, /mcp reload, /extensions reload — so a file you have just written is in the next turn’s list.