CLI Subagents MCP Server
Start, monitor, and control background coding subagent jobs across installed agent CLIs and accounts.
Start subagents (
subagent_start): launch a task in another CLI (Claude Code, Codex, Antigravity) with options for prompt, working directory, model, access (read/edit/full), effort, account, runtime, extra folders, max turns, resume, wait, timeout.Wait for events (
subagent_wait): block until one of the given jobs finishes or sends a message/question.Message subagents (
subagent_message): send follow-ups or answer questions while running; after completion, continue the conversation as a new job.Check status (
subagent_status): get state and progress of a job.Get results (
subagent_result): retrieve final answer, outcome, account, session, and cost.Cancel jobs (
subagent_cancel): stop a running job and all its processes.List jobs (
subagent_list): show recent jobs, newest first.Inspect accounts (
subagent_accounts): see installed runtimes, accounts, login state, last usage, and cooldowns without model calls.Benefit from shared setup: subagents use your existing MCP servers, skills, plugins, instructions, and settings; automatic account switching and limits are handled; safety modes restrict access.
Enables a main session to delegate tasks to Antigravity (agy, Gemini) subagents, sharing the user's setup and allowing cross-CLI task handoff to Gemini through Antigravity.
Enables a main session to delegate tasks to Codex CLI subagents running in the background on separate accounts. Shares configuration across accounts and supports job management, messaging, and failover when limits are hit.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CLI Subagents MCP ServerStart a Codex subagent to fix the failing tests and report back here."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CLI Subagents
Give your coding agent subagents that run in your other agent CLIs and on your other accounts, all with the same tools.
Your main session, in Claude Code, Codex or Antigravity, can start subagents. Each subagent is a real Claude Code, Codex or Antigravity session running in the background on one of your accounts. Every account uses the same MCP servers, skills, plugins and instructions you already set up, so nothing has to be configured twice. When an account runs out of quota, the work moves to the next one and carries on.
It installs as a plugin in Claude Code, Codex and Antigravity, and works as a plain MCP server in any other MCP client.
flowchart LR
host["Your main session<br/>Claude Code · Codex · Antigravity"]
core["CLI Subagents<br/>jobs · accounts · messages"]
shared[("Your setup<br/>MCP servers · skills<br/>plugins · instructions")]
w1["Claude Code<br/>account 2"]
w2["Claude Code<br/>account 3"]
w3["Codex<br/>account 1"]
w4["Antigravity<br/>Gemini"]
host -- "start · wait · message" --> core
core --> w1 & w2 & w3 & w4
shared -. "one shared pool" .-> w1 & w2 & w3What you get
Subagents that feel built in. Start one, keep working, and get the result back when it's done. In Claude Code they appear in the agent list like native subagents, colored by CLI and labeled with the model and task, and you can open one to watch each step and its reasoning as the worker goes.
csa setup --host codexalso installs native Codex relay agents, with a separate thread for each job; see host support for the app verification still due. Claude Code's hooks also wake an idle session when a subagent finishes or asks a question, and list any uncollected results after you resume.Two-way messages. A subagent can send progress notes or ask a question and wait for the answer; you can send it follow-ups while it works, and each message is delivered once.
One setup for every account. Your MCP servers, skills, plugins, agents,
CLAUDE.md, project memory and settings are shared from your normal config folder through links and launch flags, not copied. Only the login differs per account.Automatic account switching. Claude Code and Codex report each account's 5-hour and weekly usage, and new work goes to the account with the most room. If a Claude, Codex or Gemini account hits its limit mid-task, the job continues on the next account (a Claude conversation moves with its transcript). Failover is on by default and can be turned off per CLI.
Limits handled for you. Plan presets and extra caps are opt-in. By default,
max_jobs_per_account = 1runs one worker per account and queues extra jobs.usage_ceiling = 0.95blocks new starts on accounts with known usage at or above 95%. Set a plan or extra caps to refuse starts that would go over them, with one line that says what to do instead.Only the user can authorize more parallel jobs with
override=<their words>(relay or MCP) or--override "..."(csa run/csa start). Never set override on your own judgment; use it only when the user asked for more jobs in this conversation, or confirmed after you warned them and told them how much of the 5-hour window is left. It bypasses csa's caps and queueing; real usage-limit cooldowns, model and effort restrictions, login, depth and access still apply. See configuration.Optional delegation rules. Preview a template with model tiers with
csa rules, then choose whether to install it. See Delegation rules.Mixing CLIs. A Claude Code session can hand a task to Codex or Gemini (through Antigravity). The subagent gets your Claude MCP servers and is told where your instructions and skills live.
Safety checks.
readjobs get read-only tools only, andeditjobs run in each CLI's own auto-review mode. Gemini workers, which have none on Windows, run behind a review gate of fixed rules plus a separate reviewer model, andeditjobs inside Antigravity's sandbox. Skipping permissions is an explicit choice per job.No tokens touched. Every model call comes from the vendor's own CLI with your own login. Nothing reads, copies or forwards credentials.
Nothing to install besides Python 3.11. Pure standard library, with its own small MCP server.
Related MCP server: Codex App Server MCP
Install
Install the
csacommand:pipx install git+https://github.com/lunati228/CLI-SubagentsAdd the plugin to the CLI you work in:
Host
Command
Claude Code
/plugin install cli-subagents --marketplace lunati228/CLI-Subagentsin a session, orclaude plugin install cli-subagents --marketplace lunati228/CLI-Subagentsin a terminalCodex
csa setup --host codexinstalls the plugin and native relay agentsAntigravity
agy plugin install https://github.com/lunati228/CLI-SubagentsAny MCP client
Server command
csawith argumentmcpOptional: add your other accounts, each with the CLI's own login.
csa accounts add max-2 csa accounts add plus-2 --runtime codex csa doctor --live
csa setup can do step 2 for every installed CLI and register account folders that are already logged in; see For AI agents.
That's it. Ask your main session to use a subagent, or use /cli-subagents:delegate <task> in Claude Code. Details per host are in docs/hosts.md.
For AI agents
To have your agent (Claude Code, Codex, Antigravity or another) install this for you, paste a prompt like this:
Install CLI Subagents from https://github.com/lunati228/CLI-Subagents. Follow the
"For AI agents" section of its README: install the csa command, run csa setup,
and register my other account folders: <name>=<folder>, <name>=<folder>.
Then tell me exactly what I still have to do myself.If you're the agent, do this. No slash commands are needed.
Install the
csacommand and check it withcsa --version:pipx install git+https://github.com/lunati228/CLI-SubagentsWithout pipx, use
pip install --user git+https://github.com/lunati228/CLI-Subagentsand make sure its scripts folder is on PATH.Run setup. Add one
--accountper extra account folder the user named; folders that are already logged in need no new login:csa setup --dry-run --account max-2=~/.claude-2 --account codex:plus-2=~/.codex-2 csa setup --account max-2=~/.claude-2 --account codex:plus-2=~/.codex-2csa setupfinds the installed hosts, installs the plugin into each with the host's own terminal commands, registers and syncs the account folders, and ends with a list of what the user still has to do. It skips anything already in place, so running it twice is safe. It never starts a login and never reads credential files. Use--host claude,--host codexor--host antigravityto limit it. The runtime of an account folder is guessed from its contents; acodex:orclaude:prefix sets it.Offer the optional delegation rules template. It tells the main agent which models to use per tier, keeps work projects with the home vendor, and sets helper limits. Personal projects can try another CLI first and fall back to the home model when there is no room.
Ask whether the user wants it and which home and try-first models they want for each tier. If they agree, preview and install with their choices; otherwise skip it. For example:
csa rules --show --target claude --home-high "Opus 5.5" --try-low "Gemini 3.8 Flash high" --try-medium "Sol 6.1 high" csa rules --install --target claude --home-high "Opus 5.5" --try-low "Gemini 3.8 Flash high" --try-medium "Sol 6.1 high"Use the user's models and the host they want. Ask for work folders if the user wants to list them with
--work-folder. Nothing installs these rules without--install.Show the user the "Still needed from you" list from the output. Typical items: browser logins for accounts that aren't logged in (
csa accounts login <name>), restarting the CLI (or/reload-pluginsin Claude Code) so the plugin loads, and puttingcsaon PATH.Run
csa doctor --runtime <runtime>for each runtime you set up (claude,codex,antigravity; no model calls). Plaincsa doctorchecks Claude only. Adding--liveruns one tiny job per account in that runtime and uses a little quota.
If csa setup fails for a host, these are the commands it runs, so you can run them yourself:
Host | Commands |
Claude Code |
|
Codex |
|
Antigravity |
|
When the claude command can't be found (common with the Claude desktop app) or the plugin commands fail, csa setup declares the plugin in Claude Code's settings.json instead (~/.claude/settings.json, or the one in $CLAUDE_CONFIG_DIR). It keeps every other key and saves a backup next to the file. Claude Code installs the plugin on its next start, so the user has to restart it. csa setup --claude-route settings takes this route directly. By hand, merge this into the file:
{
"extraKnownMarketplaces": {
"cli-subagents": { "source": { "source": "github", "repo": "lunati228/CLI-Subagents" } }
},
"enabledPlugins": { "cli-subagents@cli-subagents": true }
}To update later, run csa update (--dry-run shows the plan first). It reinstalls csa from GitHub with the tool that installed it (pipx, uv or pip) and updates the plugin in every host that has it, then lists the restarts. On Windows it prints the package command for you to run instead, because csa can't replace itself while running. By hand: pipx install --force git+https://github.com/lunati228/CLI-Subagents, then claude plugin marketplace update cli-subagents and claude plugin update cli-subagents@cli-subagents, codex plugin marketplace upgrade cli-subagents and codex plugin add cli-subagents@cli-subagents, or agy plugin install https://github.com/lunati228/CLI-Subagents again.
To register an account folder by hand: csa accounts add <name> --home <folder> --no-login. This defaults to Claude; add --runtime codex or --runtime antigravity for those accounts. For a new account, omit --no-login to open that runtime's login, which the user completes in the browser.
Never read or copy credential files, and never edit files inside ~/.cli-subagents/homes/; csa manages those folders. More for agents working in this repository is in AGENTS.md.
Status
Subagent CLI | State | Guide |
Claude Code ( | Works | |
Codex ( | Works | |
Antigravity ( | Works; extra accounts at your own risk | |
Cursor, Gemini CLI, Copilot, OpenCode, others | Researched |
Tested live on Windows with Claude Code 2.1.299, Codex 0.162.1 and Antigravity 1.4.0; the test suite also runs on macOS and Linux in CI.
How the shared setup works
Your normal config folder (~/.claude, ~/.codex) is the one pool. Each extra account gets its own folder that holds only its login, state and session history. Before every run CLI Subagents points that folder at the pool:
folders such as
agents/andcommands/become one link to yours, and each skill is linked by name;CLAUDE.mdandAGENTS.mdare hard links to your files, so it's the same file on disk;project memory is linked to your main project memory;
your settings, MCP servers and plugins are passed to the worker as launch flags (
--settings,--mcp-config,--plugin-dir), minus anything that would pick a different login;for Codex, your
config.tomlis written into the account folder, which keeps its own trust and notice tables.
Nothing in your own folders is moved or rewritten. One limit: tools built into the Claude desktop app itself (its browser or terminal panes, for example) belong to the app, not to your config, so CLI workers can't have them. Everything in your config folders and plugins is shared. csa doctor --live starts a tiny job on each account and compares exactly what each one loaded.
Using your accounts
All of this runs through each vendor's official CLI with your own login: the same thing you'd get by opening a terminal and typing the task yourself. Anthropic documents running several accounts side by side with separate config folders, and OpenAI ships its own plugin that runs Codex from Claude Code. Google's Antigravity FAQ rules out wrapping agy on consumer plans and automating account rotation, so the Antigravity runtime uses your one signed-in account unless you add more yourself. Extra accounts are marked use at your own risk; once added, they're used the same way as for Claude and Codex, and failover = "off" turns switching off. The details and quotes are in provider terms; each vendor's terms apply to your accounts.
Repository layout
src/cli_subagents/ Core: jobs, account pool, shared setup, messages, MCP server, csa CLI
runtimes/ Claude Code, Codex and Antigravity adapters
agy_review/ The review gate for Antigravity workers
.claude-plugin/ Claude Code and Codex plugin manifest and marketplace
agents/ Relay agents that show jobs in Claude Code's agent list
src/cli_subagents/templates/codex-agents/ Native Codex relay definitions installed by setup/update
plugin.json, mcp_config.json Antigravity plugin
skills/cli-subagents/ The skill that teaches the host agent how to use subagents
commands/ /cli-subagents:delegate
tests/ Unit and end-to-end tests with fake CLIs
adapters/antigravity/ The original standalone AGY server (superseded)
docs/ Guides, design and researchDocumentation
Document | Contents |
Install and use from Claude Code, Codex, Antigravity and other MCP clients | |
Accounts, what is shared, switching, troubleshooting | |
The other subagent CLIs | |
| |
Optional model tiers, work folders and helper limits | |
Architecture, decisions and what was verified | |
CLI comparison, prior art, multi-account tools, provider terms |
Contributing
Issues and pull requests are welcome. Run the tests before sending a change:
python -m unittest discover -s tests -t testsSet PYTHONPATH to src (or install with pip install -e .) first. New runtime adapters should keep the vendor's binary unmodified, leave authentication to it, and default to its safer permission mode.
License and credit
Created by lunati. Licensed under Apache-2.0. If you redistribute it or build on it, keep the NOTICE file. To cite the project, use CITATION.cff.
Available Tools
8 toolssubagent_accountsC
Installed runtimes, their accounts, login state, last known usage and cooldowns. Makes no model calls.
| Name | Required | Description | Default |
|---|---|---|---|
| runtime | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose one meaningful behavioral trait: 'Makes no model calls' tells the agent the call is side-effect-free and incurs no model cost. However, it says nothing about permissions, whether it reflects live or cached state, freshness, or return shape.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight clauses, no filler, and the content list is front-loaded. It is terse to the point of under-specification, but nothing in the text is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema and no annotations exist, so the description must do more than enumerate fields. It omits how the 'runtime' filter behaves and what the response looks like for an agent that must parse it, leaving the definition underspecified for even a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is responsible for explaining the single 'runtime' parameter, yet it never mentions it. The enum values (claude, codex, antigravity) are visible in the schema, but whether 'runtime' filters the result and what happens when it is omitted is unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates the data the tool exposes (runtimes, accounts, login state, usage, cooldowns) but uses a bare noun phrase with no verb, so it never explicitly says it retrieves/lists this state. The resource ('accounts' of runtimes) is inferable from the name and content list, and it is distinguishable from the subagent_* action siblings, but the operation itself is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus the sibling tools (subagent_status, subagent_list, etc.), nor any prerequisites or exclusions. The only hint is 'Makes no model calls', which implies a cheap inspection call but does not route the agent explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_cancelB
Stop a running job and every process it started.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by subagent_start. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden but only discloses one behavioral trait: the cascading termination of every process the job started, which is genuinely useful and non-obvious. It omits permissions required, what occurs if the job already finished, reversibility, and return behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and extended only with the scope detail that matters. Nothing is wasted or buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A destructive single-param tool with no annotations and no output schema. The cascade behavior is covered, but the description should say what a successful cancellation returns and what happens on an already-completed or unknown job_id.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is fully documented in the schema ('Job ID returned by subagent_start'). The description adds no syntax, format, or sourcing detail beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('Stop') plus resource ('a running job') and it clarifies scope by noting it also terminates child processes the job started. An agent can distinguish it from siblings like subagent_status or subagent_wait, though it never names an alternative explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to cancel versus letting a job finish, checking subagent_status first, or whether cancellation is safe/needed after subagent_result. The description assumes the agent already knows it wants to cancel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_listD
Recent jobs, newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden, yet it discloses nothing about pagination, result count, whether the list is bounded, or error behavior. Only the sort order is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is short and front-loaded, and "newest first" is a genuinely useful ordering fact. However, the brevity comes from omission rather than efficiency — the sentence is a fragment that leaves the core action unstated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with no annotations and no output schema, the description should at minimum explain what a 'job' is, how many are returned, and what the limit controls. None of that is present, leaving the agent unable to call it correctly with confidence.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' is never mentioned in the description, and schema description coverage is 0%. The schema does supply a default (20) and a maximum (100), which is the only constraint information available, so the description adds no semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description is a noun fragment ("Recent jobs, newest first.") with no verb and no explicit statement that it lists subagent jobs. It conveys return ordering but an agent cannot distinguish it from siblings like subagent_status or subagent_result based on this text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus subagent_status, subagent_result, or subagent_wait. No prerequisites, no exclusions, no alternatives named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_messageA
Send a message to a subagent. While it runs: a follow-up or an answer to its question (set reply_to to the question's id). After it finished: continues the same conversation as a new job and returns that job.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| job_id | Yes | Job ID returned by subagent_start. | |
| reply_to | No | Id of the question you are answering. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the non-obvious dual-mode semantics: same tool either injects into a live job (requiring reply_to when answering) or spawns a continuation job after completion, returning that job. It omits what the live-path call returns, queueing behavior, and error cases, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, front-loaded with the verb and resource, then the two timing branches. Telegraphic fragments ('While it runs:', 'After it finished:') are slightly rough but every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations and no output schema, the description covers timing and continuation behavior but leaves the live-path return value and failure modes unstated. An agent can call it, but cannot predict the response shape in the while-running case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%; the description adds real meaning beyond the schema by tying reply_to to answering a question and by explaining that job_id refers to a running subagent in one branch and a finished one in the other. Only 'text' is left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send a message to a subagent') and then characterizes two distinct behaviors, which separates it from siblings like subagent_start. It doesn't explicitly name an alternative tool, but the mode descriptions make the distinction inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear state-based guidance: use it while the subagent runs for a follow-up or to answer a question, and after it finishes to continue the conversation as a new job. No explicit exclusions or named alternatives, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_resultC
Final answer, outcome, account, session and cost of a finished job.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by subagent_start. | |
| max_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return contents but says nothing about failure modes—e.g., behavior when the job is not yet finished, whether it blocks, or error/auth requirements—which is a meaningful gap for a result-retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single short fragment with no wasted words, but its brevity reflects under-specification rather than efficient front-loading. It is not a sentence and carries no lead action verb.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must cover behavior and returns; it lists return contents but omits preconditions (job must be finished), failure behavior, and the meaning of max_chars. For a 2-parameter result tool this is inadequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%: job_id is documented ('Job ID returned by subagent_start'), but max_chars has no description despite default/min/max constraints. The description adds no parameter meaning (no mention of truncation via max_chars), so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names what the tool returns (final answer, outcome, account, session, cost) and scopes it to a 'finished job,' which distinguishes it from status/wait siblings that deal with in-progress jobs. It lacks an explicit verb, reading as a noun-phrase fragment, but the resource and scope are inferable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use, when-not, or alternative named. The phrase 'finished job' hints that the job must be complete, but the description never says to call subagent_wait/status first or what to do if the job is still running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_startA
Start a subagent: another installed agent CLI works on one task in the background, under one of your accounts, with your shared MCP servers, plugins, skills and settings. Returns a job_id at once (or the result, if it finishes within wait_seconds). Give it a complete, self-contained task: goal, scope, files, and how to check the result. csa enforces the account limits itself: if a start is refused, follow the suggestion in the message.
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Absolute path of the project folder to work in. | |
| model | No | Model alias or ID, e.g. 'sonnet', 'opus', 'haiku'. | |
| access | No | read: no edits (read-only tools and commands only). edit: edits with the CLI's own safety checks (auto mode). full: skip all permission checks; only when the user asked for it. | edit |
| effort | No | ||
| prompt | Yes | The full task for the subagent. | |
| account | No | Run on this account only. Omit to let the pool pick. | |
| runtime | No | claude | |
| add_dirs | No | Extra absolute folders the subagent may use. | |
| max_turns | No | ||
| resume_job | No | Continue the session of an earlier job (same account). | |
| wait_seconds | No | Wait up to this many seconds for the job to finish before returning. | |
| timeout_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does substantial work: it discloses the background/async nature, the immediate job_id return (or inline result under wait_seconds), inherited account/plugins/MCP context, and that the host enforces account limits with a suggested action on refusal. It leaves gaps on timeout expiry behavior and resource consumption, but the return contract and account-limiting semantics are genuinely useful additions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with what the tool does and its return contract, then the task-authoring guidance. Every sentence carries information, though the enumeration of shared resources ('MCP servers, plugins, skills and settings') is slightly padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter launch tool with no annotations and no output schema, the description covers the essentials: it explains the return value (job_id or inline result), the background execution model, and the failure path. It is missing only ancillary behaviors like what happens at timeout_seconds or how the delegated job is monitored, which the sibling tools imply.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67% and the schema itself already documents the meaningful parameters (access trade-offs, resume_job, wait_seconds, cwd, add_dirs). The description only indirectly touches account ('under one of your accounts') and adds no syntax or semantics for model, effort, runtime, max_turns or timeout_seconds, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and resource ('Start a subagent') and immediately clarifies what that means operationally: another installed agent CLI runs one task in the background with shared MCP servers, plugins and settings. It doesn't explicitly name sibling tools to contrast with (subagent_wait, subagent_result), but no sibling could be mistaken for this launcher.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives real task-authoring guidance ('complete, self-contained task: goal, scope, files, and how to check the result') and hints at the wait_seconds trade-off, plus what to do if a start is refused. However it never says when to use this versus kicking off and polling via the sibling tools, or when resume_job is the right entry point instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_statusC
State and progress of a job. Use wait_seconds instead of polling in a tight loop.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID returned by subagent_start. | |
| wait_seconds | No | Wait up to this many seconds for the job to finish before returning. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and largely drops it: it never states that this is a non-mutating read, whether the call blocks, what states a job can be in, or how often it can be called. The polling remark hints at the blocking semantics of wait_seconds but does not explain them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero filler, with the resource identified up front and the operational tip second. It is efficient, though the terse noun phrase trades clarity for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source for what a status response contains and how it relates to the five sibling job tools. It leaves the agent guessing about job state vocabulary and about when subagent_wait or subagent_result would be the better call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are fully documented in the schema, and the description adds only a usage rationale for wait_seconds (avoid tight polling loops) rather than new format or constraint detail. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'State and progress of a job' identifies the resource but supplies no verb, so the agent must infer that this is a read/status-retrieval operation. It is not obviously differentiated from siblings like subagent_wait or subagent_result, which plausibly also report job state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use wait_seconds instead of polling in a tight loop' is real usage guidance, but it is guidance about how to call the tool, not about when to choose it over subagent_wait, subagent_result, or subagent_list. No when-not conditions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
subagent_waitA
Wait until one of the given jobs finishes, or a subagent sends a message or question, then return what happened. In Claude Code a long wait moves to the background on its own and you get a notification when it returns, so call this after starting jobs instead of polling.
| Name | Required | Description | Default |
|---|---|---|---|
| job_ids | Yes | ||
| timeout_seconds | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden and does well: it discloses the dual wake conditions (job completion or subagent message/question) and the Claude Code behavior where long waits background themselves and notify on return. It does not disclose what happens when the wait times out or any error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the core behavior front-loaded and the operational guidance second. The Claude Code backgrounding note earns its place by explaining why blocking here is safe, though it is slightly environment-specific.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description must carry the return contract, and 'return what happened' is only a gesture at it. It also omits timeout semantics entirely, which matters for a tool with a 30-minute default and a 1-hour cap. Adequate but with a real gap for an agent that needs to know what a timeout yields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 2 params. 'One of the given jobs' usefully clarifies that job_ids is an any-of set rather than an all-of set, which the schema does not state. However, timeout_seconds (default 1800, max 3600) is never mentioned, leaving half the parameters undocumented in both description and schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (wait) and resource (given jobs/subagents) plus the return condition: one job finishes or a subagent sends a message/question. It implicitly separates itself from the polling siblings via 'instead of polling', but never names subagent_status or subagent_result, so the sibling differentiation is inferred rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear directive: 'call this after starting jobs instead of polling', which tells the agent both the trigger (jobs already started) and the anti-pattern to avoid. It stops short of naming the alternative tools it replaces, but the when/when-not is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
8 tool updates
v0.1.0- First observed
subagent_accounts - First observed
subagent_cancel - First observed
subagent_list - First observed
subagent_message - First observed
subagent_result - First observed
subagent_start - First observed
subagent_status - First observed
subagent_wait
TDQS
Scored across 8 tools
Most tools have clearly distinct purposes: start, cancel, list, and accounts are unambiguous. However, wait, status, and result all relate to monitoring a job and could be confused—wait blocks for completion/messages, status is a snapshot, result is final output—but descriptions clarify intended usage.
All tools use the consistent subagent_ prefix with snake_case and clear action verbs. No deviations in style or convention.
8 tools is well-scoped for a subagent orchestration server, covering the full job lifecycle without redundancy. Each tool earns its place.
The surface covers starting, monitoring (wait/status/list), interacting (message), retrieving results, cancelling, and account management. A minor gap is the lack of a tool to retrieve full transcript/logs or delete jobs, but core workflows are covered.
Maintenance
Related MCP Connectors
Agent-native collaboration network: orchestrate a team of long-running agents from any MCP client.
Scoped agent execution. Server-side credentials, policy, budgets and verifiable receipts.
Hosted MCP server and Agent Skills for specs, engineering threads, and project memory.
Start and manage Reason cloud coding agents, projects and sessions from any MCP client.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables agent managers to launch and supervise Antigravity CLI, Claude Code, CodeBuddy Code, or Grok CLI as subagents through local MCP tools for starting, waiting on, and cancelling invocations.161MIT
- AlicenseAqualityBmaintenanceEnables a supervisor agent to create, coordinate, steer, inspect, and interrupt multiple Codex agents as a subagent pool within an MCP host, running them alongside the host's own subagents.15MIT
- AlicenseNot gradedqualityAmaintenanceEnables any MCP client to launch and manage subagent sessions in installed coding agents like Codex, Claude Code, Grok, and OpenCode, using your existing logins and chosen models.179 npmMIT
- AlicenseNot gradedqualityAmaintenanceEnables MCP-capable coding assistants to delegate repository investigation, bounded implementation work, and noisy command runs (tests, builds, linters) to sandboxed OpenCode agents. Each role can use an independently selected model, and only concise results are returned to the parent agent, which keeps responsibility for architecture and high-risk operations.MIT