Skip to main content
Glama

Maestro

Run a dozen Claude Code sessions at once, and let one of them conduct the rest.

Each agent is a full Claude Code process in a terminal of its own — not a subagent, not an API call. Maestro launches them, reads their screens to know what they are doing, carries messages between them, and draws the whole fleet on a live panel.

Latest release Python Platform License

Real recording: eight agents auditing this repository. Each wire lights up when a message crosses it, the mark pulses as a new agent joins, and the ticker carries what they just reported.


What it does

Claude Code can spawn subagents, but a subagent shares your context window and dies with your turn. Maestro runs real sessions instead: separate processes, separate context, separate conversation, all alive at the same time. You keep working in your editor while eight of them build eight parts of your project.

The orchestrator can be Claude itself. Point Claude Code at the maestro MCP server and it can launch workers, hand them briefs, poll their status, read their answers, answer their questions and close them — from the session you are already talking to. Or drive it by hand with maestro status and the CLI.

Knowing what an agent is doing is the hard part, and Maestro does it the way a person would: it reads the rendered terminal. A spinner means working, an option list means it is waiting for an answer, a finished response means the turn is done. No log parsing, no hooks, no cooperation needed from the agent.

Related MCP server: Claude Team MCP Server

Features

  • Full sessions, not subagents — one Claude Code process per worker, in its own terminal, with its own context and its own conversation

  • Agents that delegate — every session gets an MCP bridge: assign a worker without waiting, handoff and block for the answer, send_message to reply to whoever called you

  • Unstick a worker without touching the keyboard — answer_prompt answers the question it is blocked on, interrupt stops a turn that is going in circles, restart_terminal gives it a fresh Claude with the same id, directory and queue

  • Isolated git worktrees — use_worktree puts a worker on its own branch in its own checkout, so ten agents on one repository never trample each other; merge with plain git when they are done, and nothing uncommitted is ever thrown away

  • Live panel — the fleet as a ring of agents around the conductor, wires that light up when a message crosses, a ticker of what just happened, and the state of every agent in its glyph. Installs as a desktop app (PWA); works offline

  • One project at a time — running two projects at once no longer piles every agent onto a single ring. Each working directory gets the field to itself; drag the field sideways like a slider (or scroll sideways, or press the arrow keys) and the next project's page slides in. The projects you are not watching wait at the edges as breathing arrowheads, one each, warming to orange when a worker there needs an answer and to red when one has failed

    Demo mode (?demo), three projects: drag to the next one and back, then the two hovers.

  • It tells you when it needs you — system notifications when an agent asks a question, dies, or freezes for ten minutes with nothing changing on screen

  • Progress you can trust — agents report their own percentage (report_progress); hover a worker to read it, hover the mark for the fleet's mean. No report, no invented number

  • Survives a restart — on Linux and macOS the server re-adopts the tmux sessions that are still alive; everywhere it keeps a note of worktrees whose agent is gone so their work can still be merged

  • Agents that can reach further — maestro mcp import shares the MCP servers from your own Claude Code with every agent, so a worker can drive a browser or read an issue instead of only editing files. They run with --strict-mcp-config, so they get exactly what you share and nothing else

  • Stays out of your way — agents run below normal CPU priority, so a fleet at full tilt never takes your editor with it; starts are staggered; the fleet lives on a tmux server of its own, out of reach of a stray tmux kill-server

  • Small enough to read — under 4,000 lines of Python, two dependencies (four on Windows), no database, no web framework

Installation / Usage

Windows — one click

Download MaestroSetup.exe and run it. Nothing to type, no administrator rights, no restart, no WSL: Maestro runs natively on Windows. The installer sets up what is missing and skips what you already have:

  1. Git for Windows (per user, checksum-verified) — Claude Code needs its Bash.

  2. uv, which brings its own Python.

  3. Claude Code, from Anthropic's own installer.

  4. Maestro, with its profiles, the skill and the MCP server, so Claude Code in VS Code or the terminal can use it straight away.

  5. Your Claude account — a window opens and your browser signs you in.

  6. The panel opens in a window of its own; the Start menu entry Maestro reopens it.

The setup file itself is about 2 MB. On a machine with nothing installed it downloads about 200 MB in total (Git, Python and Claude Code); on one that already has them, a few MB.

The installer is not code-signed yet, so Windows may show "Windows protected your PC": click More info → Run anyway. Uninstall it from Settings → Apps like anything else; Git, uv and Claude Code stay, since other tools may use them.

macOS and Linux — one line

curl -fsSL https://raw.githubusercontent.com/daniel-madrid-07/Maestro/main/install.sh | bash

Installs tmux (through your package manager or Homebrew), uv, Claude Code and Maestro, signs you in to Claude if needed, and starts the panel. Run it again at any time: it only does what is missing.

By hand

uv tool install git+https://github.com/daniel-madrid-07/Maestro
maestro init      # config, profiles, the skill, and the MCP server in Claude Code
maestro doctor    # checks the terminals, claude, sign-in, the port and the registration
maestro up        # starts the server and opens the panel

The same four lines work in PowerShell on Windows.

Using it

In any project, tell Claude Code what you want built:

Orchestrate this with Maestro: split it into as many workers as it genuinely divides into, review at the end, and close the sessions when you are done.

Claude launches the fleet, and you watch it on http://127.0.0.1:9889.

Commands

maestro up

start the server, open the panel (--foreground, --no-open)

maestro status

every session and terminal, with status, progress and branch (--json)

maestro doctor

what is missing and how to fix it

maestro open

open the panel (on Windows, in a window of its own)

maestro down

stop the server; with tmux the sessions stay up, on Windows they end with it

maestro init

set up ~/.maestro, the profiles, the skill, the scout subagent and the MCP registration (--force)

maestro mcp list / import

the MCP servers every agent gets, taken from your own Claude Code if you like

Requirements

Python

3.11 or newer

Claude Code

installed and signed in (claude on PATH)

OS

Windows 10 1809 or newer, macOS, or Linux

Terminals

Windows: nothing to install (each agent gets a ConPTY, Windows' own pseudo-console). macOS and Linux: tmux 3.0 or newer

Profiles

An agent profile is a Markdown file with YAML front matter: model, effort, MCP servers and the system prompt appended to Claude's own. Three ship with Maestro — worker (delegates lookups to a cheap scout subagent), reviewer, and code_supervisor (runs its own workers). Copies land in ~/.maestro/profiles/, and a file you edit there wins over the packaged one.

Architecture

  • maestro-server — the HTTP API. Owns the terminals (tmux sessions, or ConPTYs on Windows), starts Claude in each one, reads every screen once a second to classify its state, delivers queued messages when an agent is free, streams events over SSE, and serves the panel.

  • maestro-ops — the MCP server the outside orchestrator (Claude Code in your editor) talks to, registered as maestro: fleet_status (everything at once, plus who needs answering), wait_for (blocks until a worker finishes, asks or dies, instead of polling), launch_sessions (a whole fleet in one parallel call), launch_session, broadcast_message, get_usage, send_session_message, read_session_output, get_terminal_status, get_terminal_output, answer_prompt, interrupt, restart_terminal, list_sessions, get_session_info, list_profiles, get_profile_details, list_worktrees, remove_worktree, shutdown_session.

  • maestro-agent — the MCP server every launched session gets, so agents can build their own sub-fleets: assign, handoff, send_message, report_progress, list_terminals, get_terminal_status, get_terminal_output, answer_prompt, interrupt, restart_terminal, delete_terminal.

  • The panel — a single HTML file served by the server: canvas for the field and the wires, DOM for the labels, SSE for the traffic.

State lives in ~/.maestro/ (config, profiles, logs, worktrees, state.json). Nothing leaves your machine except Claude Code's own traffic.

The API binds loopback and has no authentication, because it is a local tool. It sends no CORS headers and refuses any request carrying a foreign Origin, so a page you happen to have open in your browser cannot reach it. Do not expose the port.

Tech stack

Python 3.11 (standard library — http.server, subprocess, threading), tmux on Linux and macOS, pywinpty and pyte on Windows, Claude Code, the MCP Python SDK, PyYAML, and plain HTML/Canvas for the panel.

License

MIT — see LICENSE. The terminal-state heuristics are adapted from awslabs/cli-agent-orchestrator (Apache-2.0); see NOTICE.

Available Tools

20 tools
answer_promptA

Answer the question a terminal is blocked on. Only valid while its status is waiting_user_answer.

answer is a key (Enter, Escape, Up, Down, Tab, Space), a single digit (in an option dialog it selects and submits that option: "2" = the second one), or one line of text, typed and followed by Enter — only where a text field has focus (an option list treats letters as hotkeys). Escape cancels the question and ends the turn with no answer.

ParametersJSON Schema
NameRequiredDescriptionDefault
answerYes
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the state gate, that digits select-and-submit in option dialogs, that option lists treat letters as hotkeys, and that Escape cancels the question and ends the turn with no answer. It omits what happens on an invalid status call and any permission requirements, keeping it at 4 rather than 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and precondition are front-loaded in the first sentence, followed by a compact, well-delimited enumeration of the accepted answer forms. Every sentence carries information; nothing is redundant or padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described, and the description covers the state gate and the main side effects (submit vs. cancel). Given it is a stateful mutation tool with zero annotation coverage, it is close to complete, with only error/invalid-status behavior left implicit.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for `answer`: key names, single-digit option selection semantics, free-text-with-Enter, and the text-field-focus caveat are all spelled out. `terminal_id` is left entirely unexplained, though its meaning is largely self-evident from context.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Answer the question a terminal is blocked on') and immediately narrows scope with the precondition 'Only valid while its status is waiting_user_answer'. It does not explicitly distinguish itself from the nearby sibling send_session_message, which is the most likely confusion point, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The state precondition (only valid while waiting_user_answer) tells the agent exactly when to reach for this tool, and it documents the Escape path as an explicit 'no answer' exit. It stops short of naming alternatives (e.g. what to use when the terminal is not blocked), so no explicit when-not routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

broadcast_messageA

Queue one message for many terminals at once (the whole fleet when none is named).

For the things you say to everyone: a change of plan, "commit what you have and report", a constraint you forgot. Each terminal receives it when it is next idle, exactly as send_session_message does.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
terminal_idsNo
session_namesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose meaningful delivery behavior — the message is queued and each terminal receives it when next idle, with semantics 'exactly as send_session_message does' — but says nothing about permissions, failure handling, or whether queued messages can be retracted. Adequate but incomplete for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The scoping rule is front-loaded in the first sentence, and the tool is short overall. The second paragraph's illustrative examples ('a change of plan', 'commit what you have and report') are somewhat conversational but do earn their place by pinning down typical payloads.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation, and the addressing default is covered. However, for a no-annotation mutation tool with a 0% schema coverage, the description should say more about targeting precedence and side effects; it stops at delivery timing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across all three parameters, so the description must compensate. It does explain the default behavior when no target is named ('the whole fleet'), but never clarifies the relationship between terminal_ids and session_names, whether both may be supplied, or what message content accepts. Partial compensation only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Queue one message for many terminals at once') plus the scope default ('the whole fleet when none is named'), and explicitly contrasts with 'send_session_message', which handles the single-target case. The only blur is the terminal/session distinction, which the description never sorts out despite both being addressable parameters.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete when-to-use context ('a change of plan, "commit what you have and report", a constraint you forgot') and implies the alternative is the single-target sibling. No explicit when-not-to-use or exclusion criteria are stated, so it falls 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.

fleet_statusA

The whole fleet in one call: every session, every terminal, and who needs you.

Prefer this over list_sessions plus a get_session_info per session: it is one call and one block of context instead of one per session. Each terminal carries status, progress, stuck, model, profile, working directory, worktree and pending_messages. needs_attention is the part to act on -- terminals that are waiting on an answer, stuck, or failed. totals counts them by status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior4/5

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 the payload shape (status, progress, stuck, model, profile, working directory, worktree, pending_messages) plus the semantic meaning of needs_attention and totals. It does not state read-only/side-effect behavior or data freshness, which are the remaining gaps for a no-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the value proposition and the sibling comparison, then the returned fields, then the actionable field. Every sentence earns its place; no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be enumerated, yet the description's summary of key fields and the routing guidance make the tool fully callable as-is. Zero params and no annotations leave no unaddressed gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing to disambiguate and the baseline is 4. The description correctly spends no space on argument syntax.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('The whole fleet in one call: every session, every terminal') and immediately scopes it against the sibling pattern it replaces. An agent can distinguish it from list_sessions and get_session_info without opening any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Prefer this over list_sessions plus a get_session_info per session' and gives the reason (one call, one block of context). This is a direct when-to-use rule with a named alternative, not implied guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_profile_detailsB

Return a profile's full system prompt and settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
profile_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It does disclose the payload ('full system prompt and settings'), implying a read-only lookup, but says nothing about permissions, behavior for unknown profile names, or sensitivity of the returned prompt data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One tightly written sentence that front-loads the verb and resource. Nothing extraneous.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be restated. However, for a lookup tool the description omits how to obtain a valid profile_name and what happens on an unknown profile, leaving a modest gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions the single required parameter. It gives no guidance on naming format, case sensitivity, or where valid profile names come from (e.g., list_profiles).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb ('Return') and resource ('a profile's full system prompt and settings') make the purpose obvious. It distinguishes itself implicitly from list_profiles by promising a single profile's full contents rather than a listing, though it never names that sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance and no alternatives referenced. It never says to call list_profiles first to discover valid names, nor when this is preferable to other profile-related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_session_infoC

A session and every terminal in it, with live statuses (oldest terminal first).

ParametersJSON Schema
NameRequiredDescriptionDefault
session_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full disclosure burden. It adds real value by stating the ordering convention ('oldest terminal first') and that statuses are live, which the schema does not convey. It still omits any read-only confirmation, error behavior, or permission requirements, so it is only partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is a single short clause with no filler and the content is front-loaded, which is efficient. But it reads as an under-specified fragment rather than a complete statement, so brevity comes at some cost to clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, and the description adds the ordering detail. For a simple one-parameter read tool it is nearly adequate, but the total absence of parameter and usage context leaves gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single session_name parameter, and the description never mentions it. No format, naming convention, or expected value shape is given, so the description fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (a session plus every terminal in it) and its content (live statuses), which is informative. However, it is a verbless noun phrase, so the actual action (retrieve) is only inferred, and it does not distinguish itself from siblings like get_terminal_status or list_sessions. Purpose is conveyed but not sharply stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as list_sessions or get_terminal_status. The agent gets no signal about which sibling to prefer in a given situation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_terminal_outputB

Read a terminal's output. last = Claude's final answer; full = the rendered scrollback.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNolast
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden. It usefully discloses that ``last`` returns Claude's final answer while ``full`` returns the rendered scrollback, which is real behavioral content. It omits read-only confirmation, any permission/auth notes, and whether output is paginated or bounded.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tightly written sentences, front-loaded with the core purpose and immediately followed by the mode semantics. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained, and the mode semantics are covered. What is missing is sibling differentiation (read_session_output) and any hint about terminal_id provenance, which matters given the crowded terminal/session tool family.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the ``mode`` values (last vs full), which is valuable, but says nothing about ``terminal_id`` (e.g. how to obtain it) and does not enumerate mode as a formal enum in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource ("Read a terminal's output") and clarifies the two modes. However, it does not differentiate from the very close sibling read_session_output, leaving the agent to guess which terminal-output reader to use.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives such as read_session_output or get_terminal_status. The mode semantics are explained, but no usage context or exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_terminal_statusB

Live status of one terminal: idle, processing, completed, waiting_user_answer, error.

ParametersJSON Schema
NameRequiredDescriptionDefault
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It usefully enumerates the five terminal states and 'Live' implies the value is current at call time, but it says nothing about permissions, failure modes for an invalid terminal_id, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with the key scope constraint ('one terminal') first and the state enumeration after. Nothing is wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (one required param) and an output schema exists, so return values need not be explained – though the state list partly duplicates it. What is missing is how to source terminal_id and any usage context, leaving the definition minimally viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% – terminal_id has no description at all. The description only says 'one terminal' and never explains the id's format or where to obtain it (e.g., from list_sessions or launch_session), so it fails to compensate for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource+scope ('Live status of one terminal') and enumerates the possible states, which lets an agent distinguish it from get_terminal_output (output text) and fleet_status (aggregate). It does not explicitly name any sibling, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no mention of alternatives such as get_terminal_output or fleet_status, and no prerequisites. 'Live' hints at a polling/monitoring context but the agent must infer when this tool is the right choice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageA

How much of the Claude subscription is left: the 5-hour and weekly windows.

Worth a look before opening a large fleet, and when deciding whether to run the stronger model everywhere. Percentages are utilisation, so 100 means spent; resets_at says when the window rolls over. Unavailable (no local credentials, or the endpoint refused) comes back as ok: false rather than a made-up number.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does it well: it defines the metric direction ('percentages are utilisation, so 100 means spent'), the meaning of resets_at, and the failure mode ('Unavailable... comes back as ok: false rather than a made-up number'). That last disclosure is exactly the kind of non-obvious behaviour an agent needs to avoid misreading a degraded result as real data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core answer in the first clause, then rationale, then edge-case semantics. Slightly verbose in the middle sentence and split across hard line breaks, but every sentence carries distinct information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be spelled out, yet the description still supplies the interpretation layer (units, direction, resets_at, error signalling). The only real gap is the format/timezone of resets_at, which an agent must read from the output schema to act on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a 0-parameter tool is 4. No parameter-related content is missing.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific resource and scope: 'How much of the Claude subscription is left: the 5-hour and weekly windows.' That is a concrete verb+resource (read remaining subscription quota across two named windows) and is unambiguously distinct from every sibling, which deal with profiles, sessions, terminals, and worktrees.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage conditions: 'Worth a look before opening a large fleet, and when deciding whether to run the stronger model everywhere.' Two real decision points, but it names no alternative tool and states no when-not-to-use case, so it stops short of explicit routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

interruptA

Stop a terminal's current turn (Escape), e.g. when a worker is going in circles.

Only while its status is processing or waiting_user_answer (an idle prompt has nothing to interrupt and is refused). Returns the status observed ~2 s later (normally idle or completed); queued messages are then delivered as usual.

ParametersJSON Schema
NameRequiredDescriptionDefault
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses the state guard, the refusal on idle, the ~2 s observation delay, the expected resulting statuses, and that queued messages are subsequently delivered. It omits permission/auth requirements and error behavior for an invalid terminal_id.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four short sentences, front-loaded with the action, then precondition, then post-condition. Every clause (state guard, refusal, ~2 s delay, queued-message follow-up) carries information an agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be explained, yet the description still covers timing and post-conditions, and with no annotations it supplies the needed behavioral context (refusal conditions, side effects). Missing only auth/permission notes and invalid-id behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

One required parameter at 0% schema description coverage; the description only implies that terminal_id identifies the terminal whose turn is interrupted. The parameter is largely self-evident, so no real syntax or format detail is added beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Stop a terminal's current turn') plus the escape-key equivalent, and scopes it to the turn rather than the session, which cleanly separates it from sibling tools like shutdown_session or restart_terminal.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a concrete trigger ('when a worker is going in circles') and an explicit precondition/exclusion ('only while its status is processing or waiting_user_answer; an idle prompt ... is refused'). No sibling alternative is named for comparison, so it falls just short of the top band.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_sessionA

Start a new session: one full Claude Code process in its own tmux window.

Blocks until Claude shows its input box (up to ~90 s) so a failed start is reported here rather than discovered later. working_directory must be a Linux path (/mnt/c/... for a Windows folder). model overrides the profile's model (opus / sonnet). initial_message is delivered as the first task once the session is ready. provider is accepted for compatibility; only claude_code exists.

use_worktree runs the session in its own git worktree (under MAESTRO_HOME) on a new branch mx/<terminal_id> made from the repo's HEAD, so parallel workers on one repository never trample each other; the result's worktree gives its path and branch. The worker is told to commit there. Merge it yourself with plain git afterwards (git -C <repo> merge mx/<terminal_id>). Deleting the terminal removes the checkout after committing anything left uncommitted on the branch; the branch is kept when it has commits the repo's HEAD lacks.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNo
providerNo
session_nameNo
use_worktreeNo
agent_profileYes
initial_messageNo
working_directoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does it well: discloses the ~90 s blocking wait and why (failures surface immediately), the worktree branch scheme mx/<terminal_id> from repo HEAD, the merge/cleanup semantics on terminal deletion, and that provider only supports claude_code. This is substantially more than the schema provides.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The core action is front-loaded in the first line, with parameter detail following in scannable sentences. The worktree paragraph is long but each sentence carries behavioral information (branch naming, merge instructions, deletion semantics), so it mostly earns its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values needn't be described, and the description still explains the result's 'worktree' field. Behavior around blocking, cleanup, and branch retention is covered; agent_profile and session_name semantics remain undefined for a required parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does for most parameters (working_directory Linux path format, model values opus/sonnet, initial_message delivery timing, provider compatibility, use_worktree effect). Only session_name and agent_profile are left implicit, which is a minor gap given a 7-param tool at 0% coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource plus concrete elaboration ('one full Claude Code process in its own tmux window'), so the agent knows exactly what is created. It does not name or contrast with the sibling launch_sessions (batch variant), which is the one obvious ambiguity left.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives real selection guidance: use_worktree for parallel workers on one repo, provider accepted for compatibility only. It lacks explicit when-not/alternative routing (e.g., 'use launch_sessions for multiple') but context is clear enough for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_sessionsA

Launch several sessions at once, in parallel. One call for a whole fleet.

Each entry takes the same fields as launch_session: agent_profile, session_name, working_directory, model, initial_message, use_worktree. Every launch still blocks until its Claude is ready, so a failure is reported against its own entry and the rest still start; max_parallel (1-8) caps how many start at the same time.

Ten sessions launched one by one cost ten calls and several minutes of waiting; this is one call and about as long as the slowest one.

ParametersJSON Schema
NameRequiredDescriptionDefault
sessionsYes
max_parallelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full burden and does so well: it discloses that each launch blocks until its Claude is ready, that failures are isolated per entry while the rest still start, and that max_parallel (1-8) throttles concurrency. It omits permission/auth requirements and any rate-limit or side-effect profile, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose, then parameters, then a justification sentence. The third paragraph's cost comparison is decision-relevant rather than filler, though it is somewhat repetitive of the opening 'one call' framing.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need no explanation. Given a batch tool with an undocumented nested array, the description supplies the field list, concurrency cap, and failure semantics an agent needs to call it correctly, though it could say more about what a partial-failure result looks like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: it enumerates the per-entry fields (agent_profile, session_name, working_directory, model, initial_message, use_worktree) that the opaque sessions array schema does not document, and gives the 1-8 range for max_parallel. It does not explain the type/format of individual fields or the max array length, but coverage is substantially better than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Launch several sessions at once, in parallel') and immediately frames the scope distinction from the sibling launch_session ('One call for a whole fleet'). An agent can tell this is the batch variant without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear rationale for choosing this tool over repeated launch_session calls ('Ten sessions launched one by one cost ten calls ... this is one call'). It lacks an explicit when-not-to-use (e.g. single session, or when per-session control matters), 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.

list_profilesA

List the agent profiles a session can be launched with (name, role, model, effort).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. 'List' strongly implies a non-mutating read, and the enumerated return fields describe the payload, but it never states read-only safety, pagination behavior, or whether the profile set is static or session-dependent. Adequate but not rich for a zero-annotation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence with no filler. The verb and resource come first, with the launch context and returned fields following in a tight parenthetical.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't explain return values, and it still names the key fields. For a zero-argument listing tool under a session-launch workflow, the definition is essentially complete; only the absence of any stated relationship to get_profile_details leaves a small gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters (100% schema coverage of nothing), so there is nothing for the description to disambiguate and the baseline is 4. The parenthetical field list describes the output rather than inputs, so it adds no parameter meaning but no gap either.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (List) and resource (agent profiles) with additional scope detail: the profiles a session can be launched with, plus the fields returned. It implicitly distinguishes from the singular get_profile_details via plurality and the launch-oriented framing, but never names that sibling to make the contrast explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'a session can be launched with' implies this is the discovery step before launch_session, which is useful implied guidance. However, there is no explicit when-to-use statement or routing against get_profile_details, so the agent must infer the choice from the tool names alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_sessionsB

All running sessions with their terminal counts.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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 that only running sessions are returned and that terminal counts are included, but it does not cover permissions, pagination, or other behavioral traits beyond the basic scope.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single concise sentence with zero waste. The most important qualifier, "running," is front-loaded and immediately visible.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values do not need to be fully explained. However, with no annotations and no sibling differentiation, the description lacks enough context to fully guide selection among related session and status tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so parameter semantics are inherently simple. The description does not need to compensate for missing parameter documentation, and the baseline for 0 params applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ("list_sessions") plus a clear scope ("running sessions") and a key returned attribute ("terminal counts"). It does not explicitly distinguish itself from siblings like fleet_status or get_session_info, but the purpose is still clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides no guidance on when to use this tool versus alternatives such as fleet_status, get_session_info, or list_profiles. Usage is only implied by the tool name and short description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_worktreesA

Every live terminal that runs in its own git worktree: what there is to merge.

Each entry has terminal_id, status, repo, path and branch. Merge a finished one with git -C <repo> merge <branch>; deleting the terminal commits any leftovers on the branch, removes the checkout and keeps the branch when it has commits the repo's HEAD lacks. orphaned lists checkouts whose terminal died with an earlier server; they are never removed on their own — merge what you want, then remove_worktree.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and mostly does: it discloses that orphaned checkouts are never removed on their own, and that deleting a terminal commits leftovers on the branch, removes the checkout, and keeps the branch when it has commits the repo's HEAD lacks. Those are non-obvious side effects an agent would otherwise get wrong. It never explicitly states this call is read-only/non-mutating, which is the remaining gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the scope statement, then the entry fields, then the merge/removal lifecycle. Each sentence carries information; the only mild inefficiency is that the fragment style makes the first line read as a header rather than a sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be re-explained, yet the description still summarizes the entry keys. Combined with the merge instructions and the orphaned-entry caveat pointing at remove_worktree, an agent has everything needed to list, interpret, and act on the result correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. The description adds nothing parameter-related (there is nothing to add), and instead spends its budget on the entry shape and lifecycle, which is the right trade.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens by scoping the resource precisely: 'Every live terminal that runs in its own git worktree,' which is a specific verb (list) plus resource (worktrees) with a defined subset. It also names the sibling remove_worktree in the context of orphaned checkouts, so the agent can separate this from that tool. The phrasing is slightly indirect ('what there is to merge' rather than 'lists worktrees'), which keeps it just short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives concrete next-step guidance: merge a finished entry with `git -C <repo> merge <branch>`, and for orphaned entries 'merge what you want, then `remove_worktree`.' That is an explicit alternative tool plus the condition that selects it. It does not state when this tool should be used instead of list_sessions or get_terminal_status, but the operational routing is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_session_outputB

Read output by terminal id, or by session name when the session has one terminal.

max_chars keeps only the tail of the output.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNofull
max_charsNo
terminal_idNo
session_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose one trait — that max_chars truncates to the tail rather than the head — but says nothing about the 'mode' parameter's behavior, whether reads are non-destructive, whether output is consumed, or whether the call blocks.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the primary addressing modes and followed by the one non-obvious parameter behavior. No waste, though the terseness leaves useful information out.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. But with no annotations and an undocumented 'mode' parameter, the description leaves meaningful gaps for a tool whose behavior is entirely unstructured.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must explain all four parameters. It covers terminal_id/session_name usage and clarifies the semantics of max_chars (tail-only), but the 'mode' parameter is never mentioned despite defaulting to 'full', leaving a major gap in a zero-coverage schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Read output') and clarifies the two addressing modes (terminal id or session name). However, it does not differentiate itself from the sibling get_terminal_output, which a reader could easily confuse with this tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an implicit conditional for choosing between terminal_id and session_name ('when the session has one terminal'), which is useful routing guidance. It stops short of saying when to prefer this tool over get_terminal_output or get_terminal_status, leaving the main alternative unaddressed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

remove_worktreeA

Remove an orphaned checkout listed by list_worktrees (leftovers are committed first; the branch stays if unmerged).

ParametersJSON Schema
NameRequiredDescriptionDefault
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does disclose non-obvious side effects: leftovers are committed first, and the branch is retained if unmerged. That is real information an agent could not derive otherwise. It stops short of stating whether the removal is irreversible, what permissions are required, or how failures are surfaced.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and target, with the qualifiers confined to a parenthetical. No filler, no repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. Given the tool's low complexity, the description adequately covers purpose, preconditions, and side effects; the remaining gap is the undocumented terminal_id parameter and unstated irreversibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'terminal_id' has 0% schema description coverage, so nothing in the structured fields explains it, and the description never clarifies that the worktree is addressed by a terminal id or how to obtain that id beyond the vague 'listed by list_worktrees'. The description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Remove') and resource ('orphaned checkout'), and pins the resource to how it is discovered ('listed by list_worktrees'), which distinguishes it from every non-worktree sibling. An agent can tell exactly what this operates on without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Referring to 'an orphaned checkout listed by list_worktrees' implies the intended workflow (inspect via list_worktrees, then remove the orphan), but there is no explicit when-to-use/when-not statement or mention of prerequisites such as when a worktree is safe versus unsafe to remove. Usage is inferable rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restart_terminalA

Replace a terminal's Claude with a fresh one: same id, profile, model, directory and inbox.

Use when its status is error (Claude exited) or it stays unresponsive after interrupt. The conversation is lost. Blocks until the new Claude is ready (up to ~90 s).

ParametersJSON Schema
NameRequiredDescriptionDefault
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full behavioral burden. It usefully discloses that the conversation is lost, that the operation blocks for up to ~90s, and which attributes are preserved, though it does not discuss permissions or error modes.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the action, then usage conditions, then effects and timing. No filler; every clause adds useful operational context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need not be explained. The description covers the failure conditions, destructive effect, and blocking behavior well, but omits parameter guidance for terminal_id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the sole terminal_id parameter. The description refers to 'a terminal's Claude' but never explains terminal_id's format, expected value, or that it identifies the target. Low coverage requires compensation, and none is given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific action: replace a terminal's Claude with a fresh instance while preserving id, profile, model, directory, and inbox. The use-case guidance distinguishes it from siblings like interrupt and launch_session.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says when to use it: when status is error (Claude exited) or when unresponsive after interrupt. This names the preceding alternative and the failure condition that selects restart.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

send_session_messageB

Queue a message for a terminal; it is pasted as soon as the terminal is idle.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYes
terminal_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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 a genuinely useful trait: async queueing with delivery when the terminal becomes idle. However, it omits what happens if the terminal never becomes idle, whether delivery is confirmed, or any auth/permission context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single tight sentence with the action front-loaded and the delivery-timing detail appended. Every clause earns its place; nothing is redundant or buried.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be described. For a two-param mutation tool with no annotations, the description covers the core behavior but leaves parameter meaning and edge-case behavior (busy/never-idle terminals) unaddressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so both required parameters (terminal_id, message) are undocumented in the schema. The description implies a message and a target terminal but adds no format, constraint, or identifier-syntax meaning to either parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (queue) and resource (a message for a terminal) and explains the delivery mechanism. It is clearly distinguishable from read-oriented siblings, though it does not explicitly differentiate itself from the related broadcast_message tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no explicit guidance on when to use this versus siblings such as broadcast_message or answer_prompt, nor any stated prerequisites or exclusions. Usage is only implied by the tool name and the mention of terminals.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

shutdown_sessionB

Close every terminal of a session and the session itself.

ParametersJSON Schema
NameRequiredDescriptionDefault
session_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It does disclose the destructiveness scope — all terminals plus the session are closed — which is genuinely useful. However, it says nothing about irreversibility, what happens to running processes, whether the session must exist/be idle, or any permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the verb and scope, with no filler. It is efficiently sized for a one-parameter tool, though for a destructive operation the extreme brevity borders on under-specification rather than pure concision.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. The remaining gaps are the ones that matter most for a destructive, annotation-free tool: usage context, irreversibility/side effects, and error behavior when the session name is unknown.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required parameter, so the description must compensate. 'Of a session' only loosely ties session_name to the target; it adds no format, naming convention, or lookup hint (e.g., whether the name comes from list_sessions).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Close') and resource ('every terminal of a session and the session itself'), making the blast radius explicit. It is distinguishable from siblings like interrupt or restart_terminal, but it never names or contrasts with them, so sibling differentiation is left to inference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no exclusions, and no mention of alternatives such as interrupt (stop work but keep session) or restart_terminal (recover instead of tear down). The agent must guess whether shutdown is the right escalation versus those siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_forA

Block until a terminal finishes, asks something or dies -- instead of polling.

This holds your conversation until it returns. From Claude Code, prefer a background watch on GET /events (see the maestro skill) so the user can keep talking to you; use this for scripts, or with a short timeout.

Returns as soon as one watched terminal reaches one of states (default: completed, waiting_user_answer, error -- stuck is also available), or when timeout_seconds runs out (max 900). With require_all it waits for every watched terminal instead of the first. terminal_ids defaults to the whole fleet. A terminal with a message still queued counts as busy, not finished.

This is the loop to use while a fleet runs: wait, act on what came back (read its output, answer its question, restart it), wait again. Polling get_terminal_status in a loop costs a call and a turn every few seconds and tells you nothing in between.

ParametersJSON Schema
NameRequiredDescriptionDefault
statesNo
require_allNo
terminal_idsNo
timeout_secondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does so well: it discloses the blocking nature, the max timeout of 900s, the default state set, the require_all semantics, the whole-fleet default for terminal_ids, and the subtle rule that a terminal with a queued message counts as busy rather than finished.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core purpose and well organized, but the Claude Code / events aside and the closing anti-polling rationale add length beyond the minimum needed. Every sentence is still informative, so only mildly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a blocking coordination tool with four optional parameters and an output schema (which covers return values), the description supplies everything an agent needs: semantics, defaults, limits, and the intended usage loop.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it covers all four parameters: the default and available values for states, the max on timeout_seconds, the first-vs-all behavior of require_all, and the whole-fleet default of terminal_ids.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific blocking verb and its trigger conditions ('block until a terminal finishes, asks something or dies'), which is exactly what distinguishes it from sibling get_terminal_status. An agent can identify the tool's job without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly routes between alternatives: prefer a background watch on GET /events from Claude Code, use this for scripts or short timeouts, and avoid polling get_terminal_status in a loop because it 'costs a call and a turn every few seconds.' It even frames the intended loop (wait, act, wait again).

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.

  1. 20 tool updatesv0.1.3
    • First observedanswer_prompt
    • First observedbroadcast_message
    • First observedfleet_status
    • First observedget_profile_details
    • First observedget_session_info
    • First observedget_terminal_output
    • First observedget_terminal_status
    • First observedget_usage
    • First observedinterrupt
    • First observedlaunch_session
    • First observedlaunch_sessions
    • First observedlist_profiles
    • First observedlist_sessions
    • First observedlist_worktrees
    • First observedread_session_output
    • First observedremove_worktree
    • First observedrestart_terminal
    • First observedsend_session_message
    • First observedshutdown_session
    • First observedwait_for

TDQS

A3.5/5.0

Scored across 20 tools

Disambiguation3/5

Several tools overlap: get_terminal_output and read_session_output both read terminal output, get_terminal_status/list_sessions/get_session_info/fleet_status all report status, and send_session_message vs broadcast_message differ only in cardinality. The descriptions do a good job steering the agent toward the aggregate tools (fleet_status, wait_for, launch_sessions), which mitigates but does not eliminate the ambiguity.

Naming Consistency4/5

Mostly consistent verb_noun snake_case (list_profiles, launch_session, send_session_message, shutdown_session, remove_worktree). A few outliers break the pattern: interrupt, wait_for, and fleet_status are not verb_noun, but naming remains readable and predictable overall.

Tool Count4/5

20 tools for an agent-fleet orchestration server is on the heavy side but justified by the breadth of the domain (profiles, launch, messaging, monitoring, worktrees, usage). Aggregate tools like launch_sessions, broadcast_message, and fleet_status absorb many one-off calls, so the count is mostly earned.

Completeness4/5

The surface covers the full lifecycle: profile discovery, session/terminal launch, messaging, monitoring, interruption, restart, shutdown, worktree management, and usage. Minor gaps like an explicit kill/delete-terminal tool (only shutdown_session exists) and worktree merge automation are workable around with plain git.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers