Skip to main content
Glama
dofunc
by dofunc

subagent-cockpit-mcp

One MCP server, six coding agents from six vendors: OpenAI Codex, Claude Code, Grok, OpenCode, Google Antigravity and Pi.

Let the agent you already use (Claude Code, Codex CLI, Cursor, any MCP client) hand work to the other coding agents on your machine. One writes the code, the others review it, test it and draft the release notes.

  • Mix vendors. Each role gets the agent and model that suits it, all behind the same 17 tools.

  • Work in parallel. prompt(wait: false) sends tasks to several agents at once, status and output collect the results.

  • Keep context. Review findings go back to the session that wrote the code. Reconnect to a session by id days later.

  • Stay in charge. Approvals and questions come back to the main agent, and allow lasts for one session only.

  • No screen scraping. Every agent runs over the Agent Client Protocol (ACP).

  • Watch it live. A read-only page at http://127.0.0.1:7200 shows every session as it runs.

Web UI

Open http://127.0.0.1:7200 to watch the sessions: replies as they stream, tool calls with their diffs, plans, approvals and questions, plus a protocol log of every raw ACP message.

  • Read-only. The page watches and never acts. Approvals and answers still go through the tools.

  • Starts and stops by itself. The first MCP server that finds the port free starts it, and every server on the machine reports to the same page. It exits about 10 seconds after the last server goes away.

  • Memory only. Nothing is written to disk. A web UI started again shows the sessions that are still open, not the old messages.

  • Port. "webui": { "port": 7200 } in the config, or SUBAGENT_COCKPIT_WEBUI_PORT, which wins. 0 turns it off. When another program holds the port, the server says so on stderr and runs without the web UI.

  • Privacy. The page shows the ACP messages as sent, prompts and args included. It listens on 127.0.0.1 only, but other users of the same machine can open it.

  • Font. The conversation tab is monospace. Install Sarasa Mono SC (or Noto Sans Mono CJK SC) and Chinese lines up with Latin text at exactly two columns per character; without it Chinese falls back to the system font.

Related MCP server: subturn

Quick start

  1. Install Node.js 22+ and the agents you want, and log in to each. The server never downloads them.

    Agent

    Version

    Install

    OpenAI Codex

    0.160.1+

    brew install --cask codex or npm i -g @openai/codex

    Anthropic Claude Code

    2.1.292+

    brew install --cask claude-code or the official installer

    xAI Grok Build

    1.0.46+

    brew install --cask grok-build

    OpenCode

    2.0.30+

    brew install opencode (the 1.x opencode-ai on npm is not supported)

    Google Antigravity

    1.4.2+

    brew install --cask antigravity-cli, then run agy once to sign in

    Earendil Pi

    1.4.0+

    brew install pi-coding-agent or npm i -g @earendil-works/pi-coding-agent (Node 22.19+), then run pi and /login, or give it a provider key in env

  2. Add the server to your MCP client:

    claude mcp add subagent-cockpit -- npx -y subagent-cockpit-mcp

    Claude Code asks before each MCP tool call. To let it drive the subagents without asking, allow the whole server in ~/.claude/settings.json or the project's .claude/settings.json:

    { "permissions": { "allow": ["mcp__subagent-cockpit"] } }

    Codex CLI (~/.codex/config.toml):

    [mcp_servers.subagent-cockpit]
    command = "npx"
    args = ["-y", "subagent-cockpit-mcp"]
    tool_timeout_sec = 1800                  # default 60, longer means fewer status checks
    default_tools_approval_mode = "approve"  # needed for `codex exec`

    Cursor (.cursor/mcp.json or ~/.cursor/mcp.json):

    { "mcpServers": { "subagent-cockpit": { "command": "npx", "args": ["-y", "subagent-cockpit-mcp"] } } }
  3. Give each agent a role in ~/.subagent-cockpit/config.json (created on first start):

    "subagents": {
      "coder":    { "adapter": "codex",       "role": "You implement changes in this repository." },
      "reviewer": { "adapter": "claude",      "mode": "plan", "role": "You review diffs. Report findings, do not edit files." },
      "security": { "adapter": "grok",        "role": "You look for security issues in diffs. Do not edit files." },
      "tester":   { "adapter": "opencode",    "role": "You run the test suite and report failures." },
      "docs":     { "adapter": "antigravity", "model": "gemini-3.8-flash", "role": "You draft release notes as text. Do not edit files." },
      "unit":     { "adapter": "pi",          "model": "anthropic/claude-sonnet-5-5", "role": "You write unit tests for new code." }
    }
  4. Ask your main agent:

    Use subagent-cockpit. Have the coder add rate limiting to the API and the unit subagent write tests for it. Have the reviewer and the security subagent review the diff, and send their findings back to the coder until both pass. Then have the tester run npm test, ask the docs subagent for release notes, and report.

Supported agents

Agent

Connected through

Approvals

Questions

delete

Codex

bundled codex-acp

yes

in plan mode

archives

Claude Code

bundled claude-agent-acp

yes

AskUserQuestion

deletes the transcript

Grok Build

grok's own ACP

yes

plain text only

deletes the session files

OpenCode

opencode's own ACP

yes

question tool

deletes the session

Antigravity

bundled bridge over agy -p

denied by agy, see notes

skipped by agy

not supported

Pi

bundled bridge over pi --mode rpc

never asked, see notes

not asked

deletes the session file

Verified with codex 0.162.1, claude 2.1.292, grok 1.0.46, opencode 2.0.30, agy 1.4.3 and pi 1.4.0. There is no upper version bound. A release that breaks the protocol fails with AGENT_ERROR until the server is updated. This is the ACP rewrite of subagent-cli.

Tools

Group

Tools

Prompt

prompt sends a task, cancel stops the turn, output returns the last reply

Approvals

approve allows once, allow allows similar calls for the rest of the session, reject refuses

Questions

answer accepts, declines or cancels a question from the agent

Snapshot

status shows the state and what is pending, progress the agent's plan and context usage, snapshot the full conversation, item one item of it

Sessions

open creates, reuses or reconnects, close keeps the history, delete removes it, sessions lists them

Config

subagents lists the configured agents, set_config changes model, reasoning_effort or mode

prompt, approve, allow, reject and answer wait as long as the turn takes and return done with the output, approval_needed or question_needed. Pass wait: false to return right away. The server never times out a turn. If your client gives up first, the turn keeps running, and status and output pick it up.

open with reuse: true takes an idle session of this server with the same cwd and subagent, else reconnects the latest closed one on disk. If that one cannot be reconnected, you get a new session and a reuse_skipped note, and the broken one is not picked again.

snapshot returns the conversation exactly as the Web UI shows it: prompts, replies, thinking, tool calls with their input, output and diffs, plans, approvals, questions and agent-specific messages, one item each, plus every session's state and pending notifications. Narrow it down when you only need part of it:

{ "session": "codex_019a…", "types": ["tool"], "last": 5 }
{ "session": "codex_019a…", "exclude_types": ["thought", "raw"] }
{ "since": 1287, "server_id": "f3c1…" }

types keeps and exclude_types drops item kinds (prompt, message, thought, tool, plan, turn and the rest), last takes the last few, and since with the seq and server_id of the previous call returns only what changed. reset: true means start over from the items returned.

A UI client that polls passes simplify: true. Tool calls then come with their title, status and paths only, and each session without its slash commands. It fetches the rest of one item when the person opens it:

{ "simplify": true, "since": 1287, "server_id": "f3c1…" }
{ "session": "codex_019a…", "id": "tool:call_2" }

The second line is the item call. An item that is no longer kept fails with ITEM_NOT_FOUND.

Configuration

~/.subagent-cockpit/config.json is created on first start with one entry per agent. An entry using every field:

{
  "idle": { "timeout": 0 },
  "webui": { "port": 7200 },
  "subagents": {
    "reviewer": {
      "adapter": "claude",
      "description": "Reviews diffs",
      "role": "You review diffs. Report findings, do not edit files.",
      "model": "opus",
      "reasoning_effort": "high",
      "mode": "plan",
      "path": "/opt/homebrew/bin/claude",
      "args": ["--add-dir", "/data"],
      "env": { "CLAUDE_CONFIG_DIR": "/path/to/claude-config", "ANTHROPIC_API_KEY": "${ANTHROPIC_API_KEY}" }
    }
  }
}

A subagents object you write replaces the default entries as a whole. idle.timeout closes sessions idle that many seconds. The default 0 never closes them, since the server and its agents exit with your MCP client anyway. A session closed this way comes back by itself on the next prompt or set_config, settings included; status meanwhile reports it CLOSED. webui.port is the Web UI port, 0 for none. SUBAGENT_COCKPIT_HOME moves the whole ~/.subagent-cockpit directory.

The Web UI and snapshot keep the latest 5000 ACP messages per session, and show any message over 1 MB (1048576 bytes) as a truncation marker. Each has its own setting, in bytes and counts:

{
  "webui": { "port": 7200, "truncate_message_size": 1048576, "max_message_count": 5000 },
  "snapshot": { "truncate_message_size": 1048576, "max_message_count": 5000 }
}

Conversation items go with the messages behind them. The Web UI keeps the max_message_count of the server that started it.

Field

Meaning

adapter

codex, claude, grok, opencode, antigravity or pi

description

Shown by the subagents tool

role

Role prompt sent to every new session

model, reasoning_effort, mode

Initial settings for new sessions (Claude and OpenCode call the effort effort). A session keeps its settings, set_config changes included, and gets them back when you reconnect. open and snapshot list the values each agent accepts

path

The agent program. Empty means look it up in PATH

args, env

Extra command-line args and environment. ${VAR} reads the server's environment, "" or null removes a variable

profile

Settings shared by several subagents, see below

Agent

mode

args

Codex

read-only, workspace-write, agent, agent-full-access

ignored

Claude Code

default, acceptEdits, plan, auto, bypassPermissions

passed to claude, e.g. ["--add-dir", "/data"]

Grok

not supported

between grok agent --no-leader and stdio, e.g. ["--always-approve"]

OpenCode

build, plan

after opencode acp. Models are provider/model

Antigravity

accept-edits, plan, auto

on the agy command line. Don't pass --model, --effort, --mode, --conversation or -p

Pi

not supported

on the pi command line. Don't pass --mode, --session, --no-session or -p. Models are provider/id, and reasoning_effort takes pi's thinking levels

Clients started from a desktop app may hand the server a PATH without /opt/homebrew/bin. Set path then.

Profiles

A profile holds settings that several subagents share. A subagent names it in profile and overrides what it needs:

"profiles": {
  "gateway": { "env": { "ANTHROPIC_BASE_URL": "https://example.com", "ANTHROPIC_AUTH_TOKEN": "${GATEWAY_TOKEN}" } }
},
"subagents": {
  "claude":      { "adapter": "claude", "profile": "gateway" },
  "claude-fast": { "adapter": "claude", "profile": "gateway", "model": "haiku" }
}

Plain fields come from the subagent when set, else from the profile. env merges by name and args by --flag, with the subagent winning. A profile cannot name another profile, and a missing one fails with PROFILE_NOT_FOUND.

Credentials and gateways

The server never logs in and never stores credentials. Each agent uses its own login unless the subagent env says otherwise. On AUTH_REQUIRED, log in with the agent's CLI or fix env.

  • Claude Code: ANTHROPIC_API_KEY, or ANTHROPIC_BASE_URL with ANTHROPIC_AUTH_TOKEN. CLAUDE_CONFIG_DIR gives a subagent its own config directory.

  • Codex: a custom provider goes in the config.toml of a separate CODEX_HOME, with its key in env, e.g. { "CODEX_HOME": "/path/to/codex-home", "OPENAI_API_KEY": "${MY_KEY}" }. DEFAULT_AUTH_REQUEST makes codex-acp log in by itself and save the key in CODEX_HOME/auth.json.

  • Grok: a custom endpoint goes in the config.toml of a separate GROK_HOME, with XAI_API_KEY in env.

  • OpenCode: point OPENCODE_CONFIG at a config whose providers.openai.settings sets baseURL and apiKey ({env:VAR}). Add "transport": "http" if the gateway has no WebSocket.

  • Antigravity: signs in only from its own terminal UI. For a second account, set HOME in env and run HOME=/path/to/home agy once.

  • Pi: /login saves to auth.json under PI_CODING_AGENT_DIR (default ~/.pi/agent). A gateway goes in models.json in the same directory (baseUrl, api and an apiKey such as ${MY_KEY}), with the key in env. Set PI_CODING_AGENT_DIR in env to give a subagent its own config.

What the agents read from your machine

The server passes settings through and never isolates them.

  • Claude Code and Grok read your Claude Code settings (including permissions.defaultMode), plugins and hooks. Isolate Claude Code with CLAUDE_CONFIG_DIR, and Grok with another HOME plus an explicit GROK_HOME.

  • OpenCode reads your Claude Code skills and CLAUDE.md. OPENCODE_DISABLE_CLAUDE_CODE=1 turns that off.

  • Antigravity reads ~/.gemini/antigravity-cli/settings.json (including permissions.allow) under HOME.

  • Pi loads skills (also from ~/.agents/skills/ and .agents/skills/), extensions, MCP servers, AGENTS.md and CLAUDE.md. --no-skills, --no-extensions, --no-mcp and --no-context-files in args turn them off.

Notes

  • Questions. A question arrives as question_needed with the agent's own form in requested_schema. Field names differ per agent, so read them from the schema and reply with answer({ session, question_id, content: { question_0: "Red" } }). Approvals go first when both wait.

  • Approvals. An agent's own "don't ask again" option is usually saved for good, so allow never picks it. It allows the call once and keeps a rule in the server until the session closes. To have the agent remember it anyway, approve with that option: Codex accept_execpolicy_amendment, Claude Code allow-with-updates, Grok always-allow, OpenCode always.

  • Deleting. delete removes the server's session directory and the agent's own session. An open Claude Code session is closed first, which takes a few seconds. agy cannot delete a conversation, so it stays under ~/.gemini/antigravity-cli/.

  • Antigravity. agy -p is headless and never asks. A tool that needs a permission is denied, reading a file outside the session's cwd included, and the output ends with a note such as agy denied in headless mode: ReadFile. Either allow the action in permissions.allow of ~/.gemini/antigravity-cli/settings.json, in agy's own form such as read_file(<path>), or let that subagent skip agy's checks:

    "docs": { "adapter": "antigravity", "args": ["--dangerously-skip-permissions"] }
  • Pi. pi never asks for approval, so every tool it has runs straight away, bash, edit and write included. Limit the tools in args, e.g. ["--tools", "read,grep,find,ls"] for a read-only subagent.

  • Client timeouts. Codex CLI times out tool calls after 60 seconds unless tool_timeout_sec is set. Claude Code aborts a call after 30 minutes without progress, and the server sends progress every 60 seconds, so long turns survive.

Development

npm install
npm run build && npm run lint && npm test
npm run test:e2e:codex       # also :claude, :grok, :opencode, :antigravity, :pi, :concurrent
npm run check:deps           # bundled ACP adapters == verified versions

The diagram is hand-written SVG, assets/overview-light.svg and assets/overview-dark.svg. Keep the two in sync. Product names and logos belong to their owners.

License

Apache-2.0

Available Tools

17 tools
allowA

Allow and stop asking for similar calls in this session only. Uses the agent's session-scoped option when it offers one; otherwise this server allows once and answers matching requests itself until the session closes. Never writes a persistent agent rule. Blocks until the turn is done, needs an approval or asks a question; the server sets no time limit. If your client times out, the turn keeps running and the connection stays: call status for the state and output for the reply instead of sending the task again. Returns "approval_needed" with an approval to answer via approve / allow / reject, or "question_needed" with a question to answer via answer.

NameRequiredDescriptionDefault
waitNoWait for the result (default true). false returns right after sending.
sessionYesSession id returned by open
approval_idYesapproval_id from the approval_needed result

Output Schema

NameRequiredDescription
outputNo
statusYes
outcomeNo
turn_idNo
approvalNo
questionNo

TDQS

A4.4/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 thoroughly. It discloses session-only scope, that it never writes a persistent agent rule, that it blocks until the turn finishes or needs input, that the server imposes no time limit, and what happens if the client times out. It also states the possible result values and how to respond to them.

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 description is front-loaded with the core action and session-scoping rule, then proceeds to blocking behavior, timeout handling, and return values. It is information-dense and mostly earns its length, though a few clauses could be tightened without losing meaning.

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?

Given the absence of annotations, three parameters, and an output schema, the description is complete enough for correct invocation. It covers scope, blocking behavior, timeout recovery, and the approval/question result states, leaving no major operational gap.

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 100%, so the schema already documents session, approval_id, and wait in detail. The description adds some contextual meaning by explaining that approval_id comes from an approval_needed result, but it does not materially extend the parameters beyond what the schema already says. Baseline 3 is appropriate.

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 description states a specific verb and resource: allow an approval and stop asking for similar calls in the current session only. It directly distinguishes this session-scoped behavior from a persistent rule and names approve/reject/answer as related choices, so an agent can tell what this tool does 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?

It gives clear usage context: use this to answer an approval_needed result when you want matching requests allowed for the session, and it names approve / allow / reject as the approval alternatives. It also gives explicit timeout guidance to call status or output instead of resending the task. It stops short of explicitly contrasting allow with approve in a single routing sentence, so it is strong but not fully exhaustive.

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

answerA

Answer a question the agent asked (question_needed). requested_schema is the agent's own form, passed on as sent: with action "accept" (the default), give content as an object whose keys and values follow it. "decline" refuses to answer, "cancel" dismisses the question. Blocks until the turn is done, needs an approval or asks a question; the server sets no time limit. If your client times out, the turn keeps running and the connection stays: call status for the state and output for the reply instead of sending the task again. Returns "approval_needed" with an approval to answer via approve / allow / reject, or "question_needed" with a question to answer via answer.

NameRequiredDescriptionDefault
waitNoWait for the result (default true). false returns right after sending.
actionNoaccept (default), decline or cancel
contentNoField values for accept: string, number, boolean or an array of strings
sessionYesSession id returned by open
question_idYesquestion_id from the question_needed result

Output Schema

NameRequiredDescription
outputNo
statusYes
outcomeNo
turn_idNo
approvalNo
questionNo

TDQS

A4.8/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 well: it discloses blocking behavior, no server time limit, timeout resilience with running turn, and the return state that triggers approval vs question. This is rich behavioral context beyond the schema.

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?

Purpose is front-loaded and most sentences earn their place, but the final sentence repeats return-state information already implied and the blocking sentence is dense.

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?

Given 5 parameters, nested content, and an output schema, the description covers critical operational details: blocking, timeout recovery, action semantics, and return-state branching. Nothing essential is missing.

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 coverage is 100% (baseline 3), but the description adds meaning by linking content keys to requested_schema and clarifying action defaults and semantics beyond the schema's terse descriptions.

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+resource ('Answer a question the agent asked (question_needed)') and explicitly distinguishes itself from the approval flow (approve/allow/reject) and status/output alternatives for timeouts.

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 (question_needed), what each action does, and when to use alternatives (status/output on timeout instead of resending). Leaves no inference required.

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

approveA

Allow this one tool call (allow_once), or pick option_id explicitly. Blocks until the turn is done, needs an approval or asks a question; the server sets no time limit. If your client times out, the turn keeps running and the connection stays: call status for the state and output for the reply instead of sending the task again. Returns "approval_needed" with an approval to answer via approve / allow / reject, or "question_needed" with a question to answer via answer.

NameRequiredDescriptionDefault
waitNoWait for the result (default true). false returns right after sending.
sessionYesSession id returned by open
option_idNo
approval_idYesapproval_id from the approval_needed result

Output Schema

NameRequiredDescription
outputNo
statusYes
outcomeNo
turn_idNo
approvalNo
questionNo

TDQS

A4.1/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 behavioral burden and does so well: it discloses blocking until the turn finishes, no server-side time limit, and that timed-out turns continue running rather than failing. It also describes the two return states and the follow-up actions for each.

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 description is front-loaded with the core action and then adds blocking/timeout behavior, which are operationally important. It is dense but every sentence contributes useful information, with no obvious padding.

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?

Because an output schema exists, the description need not explain return values exhaustively, but it still covers the important states. The main remaining gaps are the semantics of option_id and the distinction between approve / allow / reject. For a blocking approval tool with no annotations, it is otherwise complete enough for correct invocation.

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 coverage is 75%, so the schema already documents wait, session, and approval_id. The description mentions option_id explicitly but does not explain its allowed values or where it comes from. The wait parameter is not discussed in the description at all.

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 action: allow a pending tool call or explicitly choose an option. It also names the related result states and sibling actions (approve / allow / reject / answer), making the tool's role reasonably clear. It stops short of sharply distinguishing approve from its siblings allow and reject.

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 description gives clear context: use it when a result is "approval_needed" or "question_needed". It also names alternatives for the timeout case (status and output instead of resending). It does not explain when to choose approve versus allow or reject.

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

cancelA

Cancel the current turn. Returns "cancelling" until the agent confirms, or "done" when already idle.

NameRequiredDescriptionDefault
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
statusYes

TDQS

A3.6/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 does disclose the return-state semantics ('cancelling' until the agent confirms, 'done' when already idle), which signals partial idempotence in the already-idle case. It says nothing about whether in-flight work is discarded, whether the call blocks, or what permissions are needed.

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: the operation and its scope come first, and the return-state detail follows. Nothing is padded or repeated.

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 and the sole parameter fully documented, this is close to complete; the description's return-value explanation is a small redundancy rather than a gap. What remains unstated, chiefly what cancel does to in-flight work and how it differs from close or reject, is minor for a one-parameter tool.

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 coverage is 100% and the single 'session' parameter is documented in the schema as the id returned by open. The description adds no meaning beyond that, so the baseline of 3 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?

The description uses a specific verb plus a scoped resource ('cancel the current turn'), which is far clearer than a bare 'cancel'. However, it doesn't distinguish itself from similarly named siblings such as reject or close, leaving the agent to infer the boundary.

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 current turn' implies usage context: you call it mid-turn, not against a whole session. That said, there is no explicit guidance on when to choose cancel over reject, close, or delete, so the selection logic remains inferential.

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

closeA

Close a session, or all sessions of this server when session is omitted. Session history is kept.

NameRequiredDescriptionDefault
sessionNoSession id returned by open

Output Schema

NameRequiredDescription
closedYes

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations provided, the description carries the full behavioral burden. It usefully discloses two consequences: omitting the session closes *all* sessions on this server, and session history is preserved. Still, it does not clarify whether closure is reversible, what happens to running work, or any permission requirements, leaving meaningful gaps for a potentially broad state-changing operation.

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?

The description is a single, front-loaded sentence with no wasted language. It states the core action, the omitted-parameter behavior, and the key side effect (history retained) efficiently.

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?

For a one-parameter tool with an output schema and full schema description coverage, the description covers the essential call semantics and a key side effect. It could be richer about permissions or the effect on active work, but it is largely complete for correct invocation.

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 coverage is 100%, so baseline would be 3. The description adds meaningful semantics beyond the schema by explaining that omitting the optional 'session' parameter closes every session on the server, whereas the schema only documents the parameter as a session id returned by 'open.'

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 clearly states a specific verb and resource: 'Close a session, or all sessions of this server when session is omitted.' This is unambiguous. It indirectly distinguishes itself from 'delete' by noting 'Session history is kept,' but does not explicitly name sibling alternatives such as 'cancel' or 'delete.'

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?

Usage is implied through the omission behavior: providing no session closes all sessions, while providing one closes that session. However, the description gives no explicit guidance on when to use this tool versus alternatives like 'cancel,' 'delete,' or 'open,' nor does it state exclusions or prerequisites.

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

deleteC

Delete a session and its native agent session (deleted / archived / unsupported).

NameRequiredDescriptionDefault
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
nativeYes
sessionYes

TDQS

C2.6/5.0
Behavior2/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 for a destructive tool. It hints at a cascade ('and its native agent session') but never says whether the delete is permanent or reversible, whether elevation/permission is required, or what happens when the session is 'archived' or 'unsupported'.

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?

A single front-loaded sentence with the core action first. The trailing parenthetical is the only part that does not clearly earn its place because its meaning is not resolvable from the text.

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

Completeness2/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. However, for a destructive single-target tool with zero annotations, the description leaves out irreversibility, the distinction from 'close', and failure behavior, which an agent needs before invoking.

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?

Only one parameter, and the schema documents it fully at 100% coverage ('Session id returned by open'). The description adds no meaning beyond the schema, so the baseline 3 applies.

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 a specific verb and resource (delete a session), and adds that the native agent session goes with it. But it never distinguishes itself from the sibling 'close', which for an agent could look like the same intent, and the parenthetical '(deleted / archived / unsupported)' is cryptic enough that the actual effect is unclear.

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 statement of when to use this versus 'close' or 'cancel', which are the obvious alternatives in the sibling list. No prerequisites, no confirmation guidance for a destructive operation.

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

itemA

One conversation item in full, by the id snapshot gave it: a tool call with its input, output and diffs, or any other item. For UI clients that poll snapshot with simplify and show details on demand.

NameRequiredDescriptionDefault
idYesItem id from snapshot
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
itemYes

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 behavioral burden. It discloses the return content (input, output, diffs) but does not state whether the operation is read-only, whether it requires specific permissions, or any rate limits for polling, leaving gaps for a read 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?

Two sentences, front-loaded with the purpose. The phrasing is efficient with no wasted words, though the first sentence is slightly complex due to the embedded return description.

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?

Given a simple 2-parameter tool with an output schema and full schema coverage, the description is nearly complete: it explains what it does and when to use it. The main missing element is explicit disclosure that it is a read-only operation, which would be helpful without annotations.

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 100%, so the schema already documents both parameters. The description adds minor context about the id coming from snapshot, but provides no additional meaning for the session parameter beyond 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?

States it retrieves one conversation item in full by id, and specifies the returned content (tool call with input, output, diffs, or any other item). It distinguishes from the sibling snapshot tool by clarifying it provides full details for on-demand viewing.

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?

Explicitly says it is for UI clients that poll snapshot with simplify and show details on demand, implying it should be used after obtaining an id from snapshot. The alternative (snapshot) is named in context, though not with an explicit 'use this instead' phrasing.

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

openA

Open a session: reconnect when session is given; with reuse, take this server's idle session with the same cwd and subagent, else reconnect the latest closed one on disk; otherwise create one. A reuse that cannot reconnect creates a new session and says why in reuse_skipped. Reconnecting puts back the config the session last had (the subagent config, or later set_config changes). Returns once the session is set up (role prompt included), with the session id and the full config_options. It takes no task: send tasks with prompt.

NameRequiredDescriptionDefault
cwdYesWorking directory of the agent
roleNoIdentity for the session. Avoid imperative verbs.
reuseNo
sessionNoSession id returned by open
subagentYes

Output Schema

NameRequiredDescription
outputNo
reusedYes
statusYes
outcomeNo
sessionYes
turn_idNo
approvalNo
questionNo
reuse_skippedNo
config_optionsYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses that creation has an on-disk dimension ('latest closed one on disk'), that reconnect restores prior config (subagent config or later set_config changes), and that a failed reuse silently creates a new session and reports `reuse_skipped`. It stops short of saying whether created sessions need explicit `close`/cleanup or what permissions are required.

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 action, then the mode branches, then the return contract, then the scope exclusion. It is dense but every clause carries information; the semicolon-chained first sentence is the only readability cost.

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?

For a 5-parameter tool with an output schema and no annotations, the description covers the mode logic, side effects, config restoration, failure fallback, and what is returned (session id plus config_options). Only the meaning of `subagent` and the contents/persistence implications of a created session are left unstated.

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 coverage is 60%, and the description compensates: it defines `reuse` semantics (idle session with same cwd and subagent, else latest closed on disk), clarifies the `session` id came from a prior open, and ties `role` to the role prompt included at setup. `subagent` itself is never explained, leaving one 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+resource ('Open a session') and immediately decomposes it into three distinct modes (reconnect by `session`, reuse idle/latest-closed, fresh create). It also explicitly distinguishes scope from the `prompt` sibling ('It takes no task: send tasks with `prompt`'), so an agent can separate it from the other session tools without opening a 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?

Each parameter combination is mapped to an action: pass `session` -> reconnect, pass `reuse` -> take this server's idle session with matching cwd/subagent else the latest closed one on disk, otherwise create. It also names the follow-up alternative for tasks ('send tasks with `prompt`') and explains the fallback when reuse fails.

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

outputC

Final reply of the most recent turn.

NameRequiredDescriptionDefault
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
outputYes
turn_idYes

TDQS

C2.6/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 burden, but it discloses almost nothing: whether the call blocks until a turn completes, what happens if no turn has occurred yet, or whether it is a pure read. Only the notion of 'most recent turn' hints at recency semantics.

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?

A single short sentence with no filler, front-loading the returned artifact. It is terse to the point of being a fragment, but nothing is wasted.

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

Completeness2/5

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

An output schema means return values need not be explained, but with 16 siblings and a generic name like 'output', the description should clarify retrieval semantics, blocking behavior, and error conditions. Too much is left to inference for an agent choosing among close alternatives.

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 100% and the single required 'session' parameter is documented in the schema as an id returned by open, so the schema does the heavy lifting. The description adds nothing about which session or how the parameter scopes the returned turn.

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 fragment 'Final reply of the most recent turn' implies a retrieval of the last assistant reply for a session, which is a discernible purpose. However it omits the verb entirely and gives no way to distinguish it from siblings like progress, status, item, or snapshot, which could all plausibly return per-session content.

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 statement of when to call this versus the many sibling read/monitoring tools. An agent must infer that this is the way to read the last reply, with no conditions or exclusions offered.

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

progressA

The agent's latest execution feedback: its plan, context usage, session title and slash commands. Not needed to run a task; call it only when you want to know. Cheap, never blocks.

NameRequiredDescriptionDefault
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
planYes
titleYes
usageYes
commandsYes

TDQS

A4/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose key traits: it is cheap, never blocks, and is non-essential to task execution. It does not state error behavior for an invalid session id or whether the snapshot is live or cached.

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, content listed first and the usage caveat plus cost note after. Every clause carries information; nothing is repeated from the schema.

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 further, and the one required parameter is fully documented in the schema. The description is sufficient for correct invocation, with only minor gaps around stale/error 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?

Schema coverage is 100% and the single parameter is documented as "Session id returned by open", so the schema does the work. The description adds nothing about the session parameter, which is acceptable at baseline 3.

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 names the resource precisely — plan, context usage, session title, slash commands — so an agent knows it retrieves execution progress for a session. It does not explicitly differentiate itself from siblings like status or output, which read as similar diagnostic tools.

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?

"Not needed to run a task; call it only when you want to know" gives a clear when-not-to-use rule, which is unusual and valuable. It stops short of naming an alternative sibling (status/output) for agents that need diagnostics.

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

promptA

Send a task to an IDLE session. In ASKING or QUESTIONING it returns the pending approval or question instead. A session closed for idleness is reopened first. Blocks until the turn is done, needs an approval or asks a question; the server sets no time limit. If your client times out, the turn keeps running and the connection stays: call status for the state and output for the reply instead of sending the task again. Returns "approval_needed" with an approval to answer via approve / allow / reject, or "question_needed" with a question to answer via answer.

NameRequiredDescriptionDefault
textYes
waitNoWait for the result (default true). false returns right after sending.
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
outputNo
statusYes
outcomeNo
turn_idNo
approvalNo
questionNo

TDQS

A4.6/5.0
Behavior5/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 and does so: it discloses blocking semantics, that the server imposes no time limit, what happens to the turn on client timeout, and the connection staying alive. It also names the two terminal return states ("approval_needed", "question_needed") and the tools that resolve them.

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 primary action and the exception states, and the timeout guidance is placed where it prevents a costly mistake. Slight redundancy in the closing sentence, which restates the approval/question return values already introduced in sentence two and partly covered by the output schema.

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, state-dependent tool with no annotations, this covers preconditions, failure mode, recovery path, and return states. An output schema exists, so the description needn't detail payload shape, and the named return markers are a helpful addition rather than a gap.

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 coverage is 67% — wait is documented in the schema and session points at open, but text has no description anywhere. The description implies the task content and that session is a live IDLE session, yet adds no format, size, or content guidance for text beyond what the schema already implies. Baseline 3 is appropriate at this coverage level.

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 ("Send a task to an IDLE session") and immediately distinguishes behavior from the approval/question path and from the sibling tools status/output/approve/answer. An agent can tell what this does versus open, status, and output 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?

Explicit preconditions (session must be IDLE; ASKING/QUESTIONING returns the pending approval instead; idly-closed sessions are reopened first) plus an explicit anti-pattern: on client timeout, do not resend — call status and output instead. Alternatives are named by name.

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

rejectA

Reject this tool call (reject_once). Codex and Claude Code continue the turn; Grok and OpenCode end it as cancelled. Blocks until the turn is done, needs an approval or asks a question; the server sets no time limit. If your client times out, the turn keeps running and the connection stays: call status for the state and output for the reply instead of sending the task again. Returns "approval_needed" with an approval to answer via approve / allow / reject, or "question_needed" with a question to answer via answer.

NameRequiredDescriptionDefault
waitNoWait for the result (default true). false returns right after sending.
sessionYesSession id returned by open
approval_idYesapproval_id from the approval_needed result

Output Schema

NameRequiredDescription
outputNo
statusYes
outcomeNo
turn_idNo
approvalNo
questionNo

TDQS

A4/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 so well: it discloses blocking behavior, no server time limit, client-specific turn outcomes, timeout behavior, connection persistence, and the approval_needed/question_needed return states. This is unusually rich behavioral context for an agent.

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 description is front-loaded with the core action and packs several important behavioral details without filler. It is dense and semicolon-heavy, but each clause conveys operational information.

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 action with no annotations and an output schema, the description is complete enough to invoke safely: it explains blocking behavior, timeout handling, return states, and what to do instead of retrying the task. No critical invocation context appears missing.

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 100%, and the schema already documents session, approval_id, and wait. The description adds workflow context around approval_id but does not materially extend the meaning of the individual parameters beyond what the schema provides.

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: "Reject this tool call." It also situates the action in the approval workflow by naming approve, allow, reject, and answer as related responses. It does not explicitly contrast with the sibling cancel tool, so sibling differentiation is useful but not complete.

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 names approve, allow, reject, and answer as alternatives, and says to call status/output after a client timeout instead of resending the task. However, it never explicitly says when to choose reject over approve/allow or cancel, so the selection guidance is mostly implied.

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

sessionsA

List sessions on disk, most recent first, with state, title, last_prompt and last_at. Use it to find a session id after an interrupted open.

NameRequiredDescriptionDefault
cwdNo
statusNoOPENING | IDLE | RUNNING | ASKING | QUESTIONING | CLOSED

Output Schema

NameRequiredDescription
sessionsYes

TDQS

A3.5/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 useful traits: the data source ("on disk"), sort order, and the returned fields. It omits pagination/result limits, whether this only sees sessions in the current directory, and any read-vs-mutation framing beyond the verb "List".

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 sentences, zero filler, with the output shape and ordering front-loaded before the usage hint. Nothing is repeated from the schema or restated from the title.

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 fields need not be spelled out, and the description is adequate for a simple list call. But with no annotations and an undocumented `cwd` parameter, it should say whether listing is scoped to a directory and whether results are capped.

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 only 50%: `status` is documented in the schema, but `cwd` has no description anywhere. More importantly, the description never mentions that the result set can be filtered by `cwd` or `status` at all, so an agent reading only the description would not know these filters exist.

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 on disk") plus ordering ("most recent first") and the fields returned, so the agent knows exactly what it gets back. It does not explicitly distinguish itself from the sibling `subagents`, which also enumerates things, so the differentiation is implied rather than stated.

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?

"Use it to find a session id after an interrupted open" gives a concrete triggering scenario, which is more than most list tools offer. It stops short of naming alternatives (e.g. `status` for a single session) or saying when not to use it.

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

set_configA

Change a session config option (model, reasoning_effort, mode, ...). Returns the full config_options. Unknown ids or values fail with the available choices. A session closed for idleness is reopened first.

NameRequiredDescriptionDefault
valueYes
sessionYesSession id returned by open
config_idYes

Output Schema

NameRequiredDescription
config_optionsYes

TDQS

A3.8/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 discloses the return value, failure behavior with available choices, and the side effect of reopening an idle session. It does not discuss permissions, reversibility, or persistence, so it is strong but not complete.

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?

The description is three tight sentences, front-loaded with the core action. Each sentence adds useful information: return value, validation failure, and idle-session reopening.

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?

Given an output schema and no annotations, the description covers the key mutation behavior, error handling, and reopening behavior. The remaining gap is fuller parameter semantics for config_id and value.

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 coverage is only 33%, so the description must compensate. It helps by naming example config ids and explaining that unknown ids or values fail with available choices, but it still leaves config_id and value formats somewhat implicit.

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 uses a specific verb, "Change," and a specific resource, "session config option," with examples like model, reasoning_effort, and mode. It is clearly distinct from sibling session lifecycle tools, though it does not explicitly route against any alternative.

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 implies when to use it: changing a session configuration option. It also explains error behavior and idle-session reopening, but gives no explicit when-not guidance or alternative comparison.

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

snapshotA

Full conversation of open sessions, the same as the webui shows: prompts, replies, thinking, tool calls with their input, output and diffs, plans, approvals, questions and agent-specific messages, plus each session's state and pending notifications. It can be large: pass session, and use last, types or exclude_types to keep it small. Pass back server_id and seq as since to get only what changed. ack is for UI clients that relay notifications. UI clients that poll: pass simplify to leave out tool call details (input, output, content) and session commands, and get one item in full with item.

NameRequiredDescriptionDefault
ackNoNotification keys already relayed
lastNoOnly the last n items, after the kind filters
sinceNoseq from the previous call: only items changed after it
typesNoOnly these item kinds
sessionNoOnly this session
simplifyNoTool items keep only their title, status and other header fields; commands are left out
server_idNoserver_id from the previous call; a different one resets
exclude_typesNoLeave these item kinds out

Output Schema

NameRequiredDescription
seqYes
resetYes
sessionsYes
server_idYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it discloses that output can be large, supports incremental retrieval via seq, has special behavior for ack and simplify, and can be reduced to header fields for polling clients. It does not discuss permissions or sensitivity, but the core behavioral traits are covered.

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 description is dense but front-loaded with what the tool returns, then immediately covers size, filtering, incremental retrieval, and UI-client patterns. Every sentence is relevant, though the paragraph is long and somewhat run-on.

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?

Given eight optional parameters, an output schema, and no annotations, the description provides enough context to call the tool correctly: it explains content scope, output size risk, filtering strategies, incremental updates, and polling-client behavior. No critical agent-facing information appears missing.

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 coverage is 100%, so the baseline is 3, but the description adds meaningful usage semantics beyond the schema: how to keep results small, how server_id and seq feed into since, and how ack/simplify are intended for UI polling clients. It does not explain every parameter individually, but it adds practical interpretation.

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 clearly states that this returns a full conversation snapshot for open sessions, including prompts, replies, thinking, tool calls, plans, approvals, and related state. It is specific about the resource and contents, but does not explicitly differentiate itself from most sibling tools; the reference to 'item' is the only routing signal.

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?

The description gives explicit usage guidance: pass session to narrow scope, use last/types/exclude_types to keep results small, use since with server_id and seq for incremental changes, ack for notification-relaying UI clients, and simplify plus item for polling UI clients. It names the alternative, item, for retrieving one full item.

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

statusA

Session state, cancelling flag, current config values, pending approvals and questions, and whether a blocking call is waiting. Cheap to call repeatedly; the config choices are in open, set_config and snapshot. A session closed for idleness reports CLOSED with its last values.

NameRequiredDescriptionDefault
sessionYesSession id returned by open

Output Schema

NameRequiredDescription
cwdYes
stateYes
configYes
sessionYes
waitingYes
subagentYes
approvalsYes
questionsYes
cancellingYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it discloses that calls are cheap, that closed sessions report CLOSED with last values, and that a blocking call may be waiting. It does not explicitly state that the operation is read-only or side-effect free, but the nature of status reporting makes that largely implicit.

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?

The description is compact and front-loaded: it first enumerates what status reveals, then notes polling cost, then points config decisions to siblings. Every sentence provides useful information with 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?

Given an output schema, the description need not explain return values. It still covers the important behavioral edge cases (closed sessions, blocking calls, repeated polling) and routes config-related needs away from this tool. For a one-parameter status tool, nothing essential is missing.

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?

The single 'session' parameter is fully described in the schema as the id returned by open. The description does not add syntax or format detail beyond the schema, so the baseline 3 applies for high schema coverage.

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 description states precisely what the tool reports: session state, cancelling flag, config values, pending approvals/questions, and blocking-call waits. It also distinguishes its scope from config-related siblings (open, set_config, snapshot). For a broadly named 'status' tool, this is specific and actionable.

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 clearly supports repeated polling ('Cheap to call repeatedly') and redirects config inspection to open, set_config, and snapshot. It does not explicitly route pending approvals/questions to approve, answer, or reject, so the alternative-selection guidance is strong but not exhaustive.

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

subagentsB

List configured subagents.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
subagentsYes

TDQS

B3.1/5.0
Behavior2/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 and does not meet it. It says "list" but never states whether disabled/unconfigured subagents are excluded, what ordering applies, or whether the call is side-effect free — all of which an agent must know before relying on the result.

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?

A single front-loaded sentence with no filler, which is the right shape for a no-argument listing tool. It is efficient rather than padded, though it is arguably too thin for a tool with no annotations.

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-value structure needn't be explained and there are no parameters to document. Still, with zero annotation coverage the description should say more about what "configured" means and what the list is scoped to, so it is only minimum viable.

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 of 4 applies. The description introduces no spurious parameter expectations 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?

The description gives a specific verb ("List") and resource ("configured subagents"), which is more than the bare noun in the tool name. It does not, however, distinguish this from siblings like sessions or status, so an agent must infer scope from the name alone.

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 guidance on when to call this versus reading status, sessions, or set_config. There are no exclusions or prerequisites, leaving the agent to guess whether this is the canonical way to discover available subagent names.

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. 17 tool updatesv0.2.1
    • First observedallow
    • First observedanswer
    • First observedapprove
    • First observedcancel
    • First observedclose
    • First observeddelete
    • First observeditem
    • First observedopen
    • First observedoutput
    • First observedprogress
    • First observedprompt
    • First observedreject
    • First observedsessions
    • First observedset_config
    • First observedsnapshot
    • First observedstatus
    • First observedsubagents

TDQS

A3.6/5.0

Scored across 17 tools

Disambiguation4/5

Most tools target clearly distinct lifecycle or interaction steps: open/close/delete sessions, prompt, approvals, questions, status, output, and snapshot. Two minor overlaps remain: approve vs allow both permit calls (differing only in one-time vs session scope), and item is essentially a detail view of snapshot. The descriptions do enough to separate them, but an agent could occasionally hesitate.

Naming Consistency4/5

Names are consistently lowercase snake_case, with only set_config using a multiword form and the rest single tokens. The set mixes action verbs (open, prompt, approve, cancel) with resource/state nouns (subagents, sessions, status, output, snapshot, item), but the style is uniform and readable. It is not a strict verb_noun convention, though it is internally consistent.

Tool Count4/5

Seventeen tools is slightly heavy but reasonable for a session cockpit covering lifecycle, prompts, approvals, questions, config, and conversation inspection. A few tools (progress, item) are optional or UI-polling helpers and could be consolidated, but each has a plausible role. This sits at the low end of the heavy range rather than being overstuffed.

Completeness4/5

The surface covers the main session lifecycle: list subagents/sessions, open, prompt, approve/allow/reject, answer questions, configure, cancel, inspect status/output/progress, snapshot conversation, and delete. Gaps are minor, such as no tool for defining or editing subagents and no session search/rename operation. Agents can work around these for the core cockpit purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables 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.
    33 npm
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables any MCP host to delegate work to multiple coding-agent CLIs such as Codex, Claude Code, and Antigravity as subagents, preserving native sessions and supporting team-based supervision and agent-to-agent messaging.
    17
    7 npm
    Apache 2.0
  • A
    license
    B
    quality
    B
    maintenance
    Enables a host coding agent to launch and coordinate real subagent sessions in other agent CLIs and accounts, sharing existing MCP servers, skills, plugins, and instructions. Supports two-way messaging, automatic account failover, and mixed-CLI delegation while leaving credentials with the vendor CLIs.
    8
    5
    Apache 2.0