Skip to main content
Glama
Duro02
by Duro02

devin-subagents

简体中文: README_zh.md

Expose devin acp sessions as lifecycle-managed subagents over MCP: parallel dispatch, blocking coordination, mid-flight steering, permission adjudication, and crash-resilient session persistence.

MCP Host ──stdio/MCP──▶ devin-subagents ──stdio/ACP──▶ devin acp
  • Async dispatch: spawn starts a background Devin session and returns immediately ({status: "running"}).

  • Blocking coordination: wait blocks until the subagent completes, reports progress, requests permissions, or times out.

  • Direct delivery: wake="done" delivers the complete turn output directly in output.text—no secondary query needed.

  • Inbox piggybacking: Unread completion notices and report() checkpoints automatically ride along in the inbox field of subsequent MCP tool responses.

  • Hidden sessions: Subagent sessions are marked hidden by default to keep host session lists clutter-free.


Requirements

  • Node.js ≥ 20 (Session hiding requires node:sqlite in Node ≥ 22.5; older versions gracefully degrade without breaking core functionality).

  • Authenticated devin CLI (The bridge manages a background devin acp process).


Related MCP server: LightsOut

Installation

Standard Setup

  1. Register MCP Server: Add to your MCP host configuration:

    {
      "mcpServers": {
        "devin": {
          "command": "npx",
          "args": ["-y", "devin-subagents"]
        }
      }
    }

    Note: The server's cwd determines the resolution path for .devin-subagents.json (state persistence) and optional devin-subagents.config.json. If your host cannot pin cwd, pass --config /path/to/config.json in args and specify an absolute statePath in your config.

  2. Install Skill:

    npx skills add Duro02/devin-subagents -g -a <harness>

    Or manually copy or symlink skills/devin-subagents/ to your host's skills directory.

Paste this prompt directly to your host agent:

Install devin-subagents into this harness—both the stdio MCP server and the skill. Source: https://github.com/Duro02/devin-subagents (use an existing local clone if available).

1. Register a stdio MCP server named `devin` following this harness's conventions: `npx -y devin-subagents`.
2. Install the skill: `npx skills add Duro02/devin-subagents -g -a <this_harness>`; if that fails, copy or symlink `skills/devin-subagents/` into its user-level skill directory.
3. Verify the MCP server is registered and the skill is visible, then prompt me to restart or reload the harness.

Usage

spawn("coder-auth", "Implement JWT middleware in src/auth and add unit tests", cwd="/path/to/project")
  → returns immediately: {status: "running"}    # devin acp runs in the background

wait("coder-auth", 240000)                      # blocks until attention is needed
  → wake="done"        output.text = full turn output (deliverables here, no extra query)
  → wake="report"      subagent called report(message) checkpoint
  → wake="permission"  permission request pending → adjudicate with permission("coder-auth", optionId)
  → wake="timeout"     still running, returns live snapshot; call wait again to continue
  → wake="stopped"|"dead" subagent stopped or exited; revive with resume("coder-auth")
  → wake="cancelled"   wait aborted by cancellation signal; underlying turn continues

Coordination Patterns

  • Work remains: If the host supports background tasks, run wait in the background, or continue with other tasks—completion notices and report() updates will automatically arrive via the inbox field of subsequent tool results.

  • No work remains: Call wait directly to block until an event wakes it.

  • Timeout safety: Keep timeout_ms below your host's tool execution deadline (a host-level hard cutoff yields an unhandled error instead of a structured timeout snapshot).

  • Mid-flight steering: Use send to append instructions (queued in FIFO order during active turns, strictly serialized per session), interrupt to cancel the in-flight turn and clear the queue (retains the session), or stop / resume for lifecycle transitions.

  • Inspection over polling: Always use wait to wait—never poll in a loop with poll. Use poll solely for diagnostics: detail="inspect" provides a live snapshot with activeTools[].elapsedMs to spot stalled tools; detail="logs" retrieves the chronological event stream.

  • Session visibility: Subagents are marked hidden by default to avoid cluttering /resume, devin list, and ACP session/list (set hideFromSessionList: false to disable).


Tools

Tool

Description

spawn(name, task, cwd?, mode?, model?)

Launch a Devin subagent asynchronously; returns {status: "running"} immediately.

wait(name, timeout_ms?)

Block until attention is needed (done, report, permission, timeout, stopped, dead, cancelled). On done, carries full output text.

send(name, text)

Append follow-up instructions. Queued FIFO during an active turn; strictly serialized per session.

poll(name, wait_ms?, since?, detail?, limit?)

Inspect state: detail="inspect" (default) for persistent live snapshot; detail="logs" for paged chronological event stream.

permission(name, optionId?)

Adjudicate a pending permission request (provide optionId to approve, omit to deny).

interrupt(name)

Cancel the in-flight turn (session/cancel) and clear the pending FIFO queue; keeps session intact.

stop(name)

Interrupt running turn, clear queue, and mark the session stopped.

resume(name)

Re-activate a stopped, dead, or persisted session (survives bridge restarts).

list()

List all live, persisted, and agent-side sessions with status.

set_mode(name, mode)

Switch session permission mode (e.g. smart, bypass).

models(name?)

Query advertised models and modes (session-specific or bridge defaults).

set_model(name, model)

Switch the model for an idle session (e.g. swe-2-max, swe-2-high).


Configuration

Optional. Place devin-subagents.config.json in the server's working directory or specify via --config PATH. The configuration schema is strict: unknown keys will cause an error on startup.

Key

Default

Description

command

"devin"

Agent executable command (resolved via PATH or relative to config file).

args

["acp"]

Command-line arguments passed to the agent process.

statePath

".devin-subagents.json"

Path for name→sessionId persistence map (survives bridge restarts).

permission

"operator"

Permission policy: "auto"/"always" to auto-approve, or "operator" to hold for host decision.

mode

"smart"

Default permission mode for new sessions.

model

"swe-2-max"

Default model confirmed for new sessions.

rpcTimeoutMs

30000

Timeout in milliseconds for non-prompt ACP RPC calls.

bufferCap

500

Maximum capacity of each session's event ring buffer.

hideFromSessionList

true

Mark sessions with hidden=1 in Devin session database to hide from session lists.

reportTool

true

Inject report(message) checkpoint tool into subagents.

autoNotify

true

Automatically enqueue completion and permission events into the inbox field.

reportHint

true

Append a hint to the spawn prompt informing the subagent of the report tool.

Full example: devin-subagents.config.example.json.


Development

npm test         # Deterministic unit tests with built-in mock ACP agent (no external services needed)
npm run smoke    # Smoke handshake test against a real agent
npm run e2e      # End-to-end integration test (requires Devin credentials)

Available Tools

12 tools
interruptInterrupt a subagentA

Cancel the in-flight turn (ACP session/cancel) and drop queued messages. The session stays alive and resumable.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It transparently discloses that it cancels the in-flight turn, drops queued messages, and preserves session resumability. This goes beyond a simple action and gives clear behavioral context, though it omits potential side effects like partial results or error conditions.

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 sentence that front-loads the core action and then adds the key behavioral nuance about session persistence. Every word contributes value, and it is appropriately sized for a one-parameter tool.

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 simple tool with one parameter and no output schema or annotations, the description covers the essential behavior: what it cancels, what it drops, and the post-condition of resumability. It is sufficient for an agent to use correctly, though it could mention edge cases like interrupting an idle subagent.

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 input schema already documents the parameter fully (subagent handle returned by spawn) with 100% coverage. The description adds no additional semantic information about the parameter, so the baseline score 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 clearly states the tool cancels an in-flight turn and drops queued messages, with the session remaining alive and resumable. It is specific about the action and resource, though it does not explicitly name sibling alternatives, it implies a distinction from stop (which likely terminates).

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 this tool by noting the session stays alive and resumable, suggesting it is for temporary pauses. However, it does not explicitly compare with siblings like stop or resume, nor state when not to use it. Guidance is implied rather than explicit.

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

listList subagentsA

List live, persisted, and agent-side sessions with status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.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 burden of behavioral disclosure. It adds useful context by specifying the session categories and that status is included, but it does not mention return shape, ordering, pagination, or whether it is read-only. 'List' implies a non-mutating operation, but little else is disclosed.

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 that wastes no words. The key action and object appear immediately, and every phrase adds meaningful scope ('live, persisted, agent-side', 'with status').

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 zero-parameter list tool, the description is adequately complete: it identifies what is listed and the included status field. There is no output schema to reference, but the basic calling context is simple enough that the description does not leave a critical ambiguity.

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 and the schema coverage is 100%, so there is nothing for the description to add about parameter meanings. The description's mention of session categories and status is enough given the absence of parameters.

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 the verb ('List'), the resource ('live, persisted, and agent-side sessions'), and that status is included. It distinguishes itself from the action-oriented sibling tools (spawn, send, interrupt, etc.), though it doesn't explicitly name a sibling to differentiate from.

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 usage is implied: if you need to see existing sessions and their status, call this tool. However, there is no explicit guidance about when to use it versus other session-related operations, nor are alternatives or exclusions mentioned.

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

modelsReport advertised models/modesA

With 'name': the session's current model/mode and the agent-advertised available lists. Without: the bridge's configured defaults plus the last-advertised agent-level lists (null until the first session is created). Devin model ids are e.g. swe-2-medium / swe-2-high / swe-2-max.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSubagent handle returned by spawn, e.g. 'coder-auth'

TDQS

A4.4/5.0
Behavior4/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 discloses that the tool reports current/advertised values rather than modifying them, explains both parameter branches, and notes the null state until the first session exists. It stops short of explicitly stating side-effect-freedom, but 'report' and the conditional output semantics make the read-only nature reasonably clear.

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: two sentences plus a short example line. Every sentence earns its place, and the conditional behavior is front-loaded with the 'name' parameter case first. No filler or redundant restatement 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?

Given one optional parameter and no output schema, the description covers both invocation branches, the null edge case, and example model ids. It does not detail the exact structure of the returned lists, but for a reporting tool with simple inputs, the essential usage information is present.

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. The description adds value by explaining what happens with and without 'name', tying the parameter to the session's model/mode versus bridge-level defaults. This goes beyond the schema's simple 'Subagent handle returned by spawn' description.

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 precise verb-resource pairing: reporting the current model/mode and advertised lists. It clearly distinguishes two invocation modes (with and without 'name'), and the examples of Devin model ids add concrete specificity. This separates it from siblings like set_model and set_mode, which are change operations rather than reporting operations.

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 for when to include the optional 'name' parameter versus omitting it, including the null-before-first-session behavior. It does not explicitly name sibling alternatives or state when not to use this tool, but the conditional usage guidance is concrete and actionable.

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

permissionAnswer a permission requestA

Grant or deny a pending tool-permission request surfaced by poll (used when permission=operator — the calling agent decides). Pass optionId to approve, omit to deny.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'
optionIdNoThe optionId from pendingPermission.options to select

TDQS

A4.2/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 the core behavior (pass optionId to approve, omit to deny) but does not explain side effects, error conditions, or what happens if the request is already resolved. For a simple permission response this is adequate, but not exhaustive.

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 sentence that is concise and front-loaded. It states the purpose and the key action immediately, with no filler.

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?

The tool is simple with only two parameters and no output schema. The description covers the essential usage: how to approve/deny and the context of when it applies. It does not specify the response format, but that is not critical for a permission action.

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%, and the description adds important semantics: it explains that omitting optionId means deny, which is not in the schema. This clarifies the optional parameter's role beyond the schema description.

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 clearly states the action (grant or deny) and the resource (a pending tool-permission request), and it explicitly distinguishes this from sibling tools by tying it to the poll flow and the operator permission mode. It is specific and unambiguous.

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 explains that this tool is used when permission=operator and the calling agent decides, and mentions it is surfaced by poll. This gives clear context, though it does not explicitly say when NOT to use it (e.g., if permission is not operator). Still, the intended usage is clear.

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

pollInspect a subagent or read its event logA

Two observation modes. detail='inspect' (default): a persistent snapshot of what the subagent is doing — lifecycle fields, pending permission, current/latest turn timing and duration, last actual output, active tool calls (merged by id, with elapsed ms), current plan step, latest text, latest error, and last-activity/last-content ages. It is independent of the event log: unaffected by reads or by buffer eviction. detail='logs': the chronological normalized event log (message/thinking/tool/plan/usage/mode/queued/turn_start/turn_end/permission_*) with seq and bridge receipt timestamps, paged by an implicit read cursor; 'limit' bounds each page and nextCursor/hasMore continue it, droppedEvents counts buffer-evicted events. 'since': in inspect mode, a snapshot cursor — wait_ms blocks for events newer than it; in logs mode it replays events after that seq without moving the read cursor. wait_ms blocks briefly while a turn can still produce events.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'
limitNologs only: max buffered events consumed this call; page via nextCursor/hasMore
sinceNoinspect: wait_ms blocks for events newer than this snapshot cursor. logs: replay events after this seq without moving the read cursor
detailNoinspect (default): persistent snapshot; logs: paged event log
wait_msNoBlock up to this many ms for new events while a turn is active (default 0)

TDQS

A4.5/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 behavioral burden, and it delivers extensively: snapshot independence from reads and buffer eviction, merged tool calls by id with elapsed ms, lifecycle fields, last-activity/last-content ages, an implicit read cursor with nextCursor/hasMore continuation, droppedEvents counting buffer-evicted events, and mode-dependent since semantics. These are non-obvious behaviors an agent could not infer from the schema alone.

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 rather than concise, but every clause earns its place given the dual-mode, cursor-based, blocking complexity. It is front-loaded with the mode dichotomy and uses quoted parameter names as anchors. It loses a point only because the run-on, semicolon-heavy prose is harder to parse than shorter, sentence-per-concept structure would be.

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, dual-mode tool with no output schema and no annotations, the description is remarkably complete: return contents for both modes are enumerated, paging and cursor semantics are specified, and blocking behavior is bounded. Residual gaps are minor — end-of-life behavior of the inspect snapshot (does it persist after the subagent finishes?) and what an agent should do with a 'pending permission' field (pairing with the permission sibling) are not addressed.

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; the description then adds substantial meaning beyond the schema: the detailed contents of the inspect snapshot (lifecycle fields, pending permission, turn timing/duration, last output, active tool calls, plan step, latest text/error, ages), the 'implicit read cursor' model, droppedEvents semantics, and the distinction between inspect's snapshot cursor and logs' replay cursor. This meaningfully exceeds what the property descriptions provide.

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 names a specific verb-resource pair ('poll' a subagent, with two observation modes: 'inspect' snapshot and 'logs' event log), and the title reinforces the purpose. Against the sibling set (spawn, send, wait, interrupt, stop, resume, list, permission, models), it is unmistakably the observation/read tool, and the two modes are explicitly delineated from the opening sentence.

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 strong contextual guidance: it states the default mode, explains that inspect is independent of log reads and buffer eviction, clarifies that limit only applies to logs, and specifies the blocking semantics of wait_ms ('blocks briefly while a turn can still produce events'). However, it never explicitly contrasts with siblings — e.g., it doesn't say 'use wait for full turn completion instead of long wait_ms blocks' — so exclusion guidance versus the wait/list tools is left to inference.

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

resumeResume a subagentA

Re-activate a stopped/dead/persisted Devin session (survives bridge restarts). Safe no-op on already-running subagents.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral burden. It discloses persistence across bridge restarts and idempotent no-op behavior, which are important and non-obvious. It does not mention error behavior for unknown names, but the core invocation behavior is well covered.

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 focused sentence with no filler. The core purpose is front-loaded, and the two caveats about persistence and no-op behavior are concise and high-value.

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 a complete schema, the description covers the essential invocation context. Minor gaps include lack of detail about return values or behavior when the named subagent does not exist, but these are not critical for basic correct use.

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 single required parameter is already fully documented. The description adds no additional parameter semantics, and none are needed beyond what the schema provides.

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 clear verb, 'Re-activate', and a specific resource, 'stopped/dead/persisted Devin session'. It also distinguishes itself from lifecycle siblings by noting it survives bridge restarts and is a no-op on running subagents.

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 clearly implies when to use it: for sessions that are stopped, dead, or persisted. It also provides an explicit when-not condition by stating it is a safe no-op on already-running subagents, though it does not name alternative tools like spawn.

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

sendSend a message to a subagentA

Send a follow-up prompt to a subagent. While a turn is running the message is queued in FIFO order and starts as the next turn once the current one finishes (turns are strictly serialized per session). Stopped/dead subagents must be resumed first.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'
textYesMessage text

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It discloses queueing behavior, FIFO ordering, strict serialization, and the need to resume stopped/dead subagents, which goes well beyond the schema. It does not cover return values or failure behavior, but the core semantics are transparent.

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, front-loaded with the purpose, followed by behavioral details and a prerequisite. Every sentence earns its place and there is no filler.

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 simple two-parameter tool with no output schema and no annotations, the description covers the essential operational context: what it does, when messages are queued, serialization, and the resume prerequisite. It does not explicitly tell the agent to poll or wait for the result, but that is reasonable to infer from sibling tools.

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%, so the schema already documents both parameters. The description adds useful context about the name parameter (subagent handle validity and resume requirement), but does not add substantial new semantics for either parameter 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?

The description clearly states the tool sends a follow-up prompt to a subagent, using a specific verb and resource. It distinguishes itself from spawning by saying 'follow-up', but it does not explicitly name sibling tools like interrupt or resume, so differentiation relies on context.

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 provides clear usage context: messages queue in FIFO order and are serialized per session, and stopped/dead subagents must be resumed first. It does not explicitly mention alternatives or when-not-to-use, but the queueing and prerequisite guidance is strong.

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

set_modeChange a subagent's permission modeA

Switch the session's mode (e.g. 'bypass', 'smart'). Validated against the session's advertised availableModes when known.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeYesMode id from the session's availableModes
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'

TDQS

A3.5/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 burden of disclosing behavior. It mentions validation against availableModes, which is useful. However, it does not disclose the effects of mode change, side effects, or reversibility, which are important 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.

Conciseness5/5

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

The description is concise and front-loaded with the core purpose. It is one sentence that efficiently communicates action and validation, with no unnecessary detail.

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?

Given the tool is a mutation with no annotations and no output schema, the description is reasonably complete for basic usage, but lacks detail on side effects and error conditions. It covers the essentials but leaves room for improvement.

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%, so parameters are well-documented in the schema. The description adds context by mentioning 'name' as a subagent handle and 'mode' as a mode id, but the schema already provides this. Baseline 3 is appropriate.

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 the tool's purpose: switching the session's mode, with examples of modes. It is distinct from siblings like set_model, as it focuses on permission mode. However, it doesn't explicitly differentiate from the 'permission' sibling, leaving some ambiguity.

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 usage through the context of session modes and validation, but does not explicitly state when to use this tool versus alternatives. It lists example modes and validation against availableModes, but lacks clear when-to-use guidance.

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

set_modelChange a subagent's modelA

Switch an idle session's model via session/set_config_option and confirm the echoed value (e.g. 'swe-2-high'). Rejected while the session is starting/running/stopped/dead — resume or wait for idle first. Validated against the advertised model list when known.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'
modelYesModel id from the session's advertised list

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 disclosure burden and exceeds it: it discloses the underlying call (session/set_config_option), the verification behavior (confirms the echoed value), the failure conditions (rejected while not idle), and input validation (checked against the advertised model list). This is exemplary coverage for a tool with zero annotation support.

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 sentences, zero filler, with information front-loaded: action+mechanism+verification first, then failure conditions, then validation. Every sentence earns its place and no idea is 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?

For a 2-parameter config tool with no output schema and no annotations, the description covers purpose, preconditions, mechanism, verification, and validation — all core call decisions. The remaining gaps are minor: no explicit statement of the success/failure return shape beyond echoing the value, and no mention of whether the change persists or requires session restarts.

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 both parameters are already well-documented ('Subagent handle returned by spawn' and 'Model id from the session's advertised list'), so the baseline is 3. The description adds only marginal value — the worked example 'swe-2-high' and the validation behavior — rather than clarifying parameter meaning 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?

The description states a specific verb-resource pair ('Switch an idle session's model') plus the implementation mechanism ('via session/set_config_option') and a concrete example echo value ('swe-2-high'). This clearly distinguishes it from siblings like set_mode (mode changes), models (listing), and the lifecycle tools (interrupt/stop/resume).

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 explicit preconditions ('idle' session), explicit rejection states ('starting/running/stopped/dead'), and a concrete remedy ('resume or wait for idle first'). It stops short of naming sibling tools as alternatives — notably the models tool that would provide the advertised list — which is the only gap.

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

spawnSpawn a Devin subagentA

Create a new Devin session and start it on a task in the background. Returns immediately; use poll to watch progress. Multiple subagents can run in parallel.

ParametersJSON Schema
NameRequiredDescriptionDefault
cwdNoAbsolute working directory for the session (default: bridge cwd)
modeNoPermission mode to set (e.g. 'bypass'); default: config file 'mode' or 'smart'
nameYesUnique handle for this subagent ([A-Za-z0-9._-])
taskYesThe task prompt for the subagent
modelNoModel to confirm (e.g. 'swe-2-max'); default: config file 'model' or 'swe-2-max'

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the key behavioral traits: non-blocking (returns immediately), background execution, and parallel support. It does not mention failure modes or permissions, but for a spawn operation this is acceptable and provides useful 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.

Conciseness5/5

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

The description is two concise sentences that front-load the core purpose and immediately clarify the asynchronous nature and progress tracking. Every word serves a purpose, with no redundancy.

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 tool with five parameters and no output schema, the description provides sufficient context: what it does, that it is non-blocking, and how to monitor progress. It does not specify the return value format, but since no output schema exists and the name parameter serves as a handle, this is a minor 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?

The schema already documents all five parameters with descriptions (coverage 100%), so the description adds no additional meaning to them. It does not elaborate on parameter interactions or constraints, so a baseline of 3 is appropriate given the schema's thoroughness.

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 clearly states the action: 'Create a new Devin session and start it on a task in the background.' It identifies the resource (a Devin subagent) and the key behavior (asynchronous, parallel-capable), distinguishing it from sibling tools like poll and wait which are for monitoring or managing existing sessions.

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 practical guidance by noting it 'returns immediately; use poll to watch progress' and that 'multiple subagents can run in parallel.' This implies when to use it (to launch a new task) and how to follow up, though it does not explicitly name exclusions or alternatives beyond poll.

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

stopStop a subagentA

Interrupt any running turn, drop queued messages and mark the subagent stopped. The session is kept and can be continued later with resume.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'

TDQS

A4.5/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. It discloses all key side effects: interrupts running turn, drops queued messages, marks stopped, and preserves the session. This is transparent about both destructive and reversible aspects, leaving nothing ambiguous.

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, no fluff. The core action is front-loaded ('Interrupt any running turn...') and the session-retention detail is appended naturally. Every word earns its place.

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 single-parameter command with no output schema, the description is fully sufficient. It explains what happens, what persists, and how to resume. An agent can call it correctly with just this text and the schema.

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 input schema has 100% coverage: the only parameter 'name' is described as 'Subagent handle returned by spawn, e.g. coder-auth'. The description adds no extra parameter nuance, but none is needed; the baseline of 3 applies because the schema already handles it.

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 ('Interrupt'), the resource ('subagent'), and the concrete effects: drop queued messages, mark stopped, keep session. It clearly distinguishes from the sibling 'interrupt' by adding the drop-and-mark behavior, so an agent can tell them apart without reading either 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 explains that the session is kept and can be resumed later, giving a clear reason to choose 'stop' over a more permanent or lighter alternative. It does not explicitly name 'interrupt' as a when-not-to-use case, but the behavioral distinction is implicit and sufficient for basic routing.

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

waitWait until a subagent needs attentionA

Block until the subagent needs you, then return what happened. Wakes on: turn drained to idle (wake='done'), a pending permission request (wake='permission' — answer via the permission tool), a report() checkpoint from the subagent (wake='report' — a report is delivered once, even if it arrived before this call), terminal states (wake='stopped'/'dead'), or timeout (wake='timeout', snapshot shows live state). Already-attention states return immediately, so it doubles as 'is it done?'. On hosts supporting MCP tasks this runs as a background task; elsewhere it blocks.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesSubagent handle returned by spawn, e.g. 'coder-auth'
timeout_msNoBlock up to this many ms for attention (default 600000, max 3600000)

TDQS

A4.3/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 it delivers richly: five wake modes (done/permission/report/stopped/dead/timeout), report-once delivery even if arrived before the call, background-task vs. blocking execution depending on host MCP-task support, and timeout returning a live-state snapshot. This goes well beyond annotation-level disclosure.

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 purpose is front-loaded in the first sentence, and the remaining three sentences pack in essential behavioral detail with no filler. It is dense — the em-dash clauses are heavy — but every clause earns its place for a blocking tool whose wake semantics are the entire contract.

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 complex tool with no output schema and no annotations, the description covers wake modes, timeout behavior, report-delivery semantics, host-dependent execution, and the permission-tool routing. The only gap is that it never specifies the exact returned payload shape for each wake mode, which an agent would need since there is no output schema to fall back on.

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%, so the baseline is 3; both name and timeout_ms are already documented with defaults and bounds. The description adds some value beyond the schema by explaining what a timeout produces ('snapshot shows live state') and what a permission wake means, but it does not materially extend the parameter semantics.

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 opening clause 'Block until the subagent needs you, then return what happened' names a specific verb ('block'), resource (the subagent), and outcome. It differentiates from the sibling 'poll' by emphasizing blocking semantics and the immediate-return behavior for already-attention states, so an agent can tell them apart 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?

The description gives clear behavioral context: it enumerates when to use it (blocking for attention) and states that already-attention states return immediately 'so it doubles as is it done?'. It also routes permission wake-ups to the permission tool. However, it never explicitly names poll as the non-blocking alternative or states when not to use wait, leaving that contrast implicit.

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. 12 tool updatesv0.5.0
    • First observedinterrupt
    • First observedlist
    • First observedmodels
    • First observedpermission
    • First observedpoll
    • First observedresume
    • First observedsend
    • First observedset_mode
    • First observedset_model
    • First observedspawn
    • First observedstop
    • First observedwait

TDQS

A4/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have distinct purposes: spawn creates sessions, send queues prompts, poll and wait observe but in different modes (snapshot vs. event log vs. blocking on attention), interrupt/stop/resume manage lifecycle, list enumerates, permission handles approvals, set_mode/set_model configure. Minor overlap between poll and wait (both report on state) but their interfaces are distinct enough to disambiguate.

Naming Consistency3/5

Most are short imperative verbs (spawn, send, poll, wait, interrupt, stop, resume, list, permission) with a few two-word names (set_mode, set_model). The style is consistent (all lowercase, underscore for compound names), but the verbs are not a predictable verb_noun pattern (e.g., no create_session vs. list_sessions). Some naming like 'permission' is a noun rather than a verb (grant_permission would be clearer).

Tool Count5/5

Twelve tools is well-scoped for a subagent management server. Each tool addresses a distinct lifecycle aspect: creation, communication, observation, control, listing, permission, and configuration. No redundancy in count, and the size supports both granular control and ease of discovery.

Completeness5/5

The surface covers the full lifecycle: create (spawn), interact (send), observe (poll/wait), control (interrupt/stop/resume), enumerate (list), authorize (permission), and configure (set_mode/set_model). Missing features like killing without resume or session cleanup are not core gaps; they're likely handled via stop and resume. The tool set is comprehensive for subagent management.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    A
    maintenance
    Agent orchestration system that runs coding-agent sessions (Claude Code, Codex) with policy mediation and exposes tools via MCP.
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    A durable MCP control plane for starting, observing, steering, continuing, cancelling, and handing off long-running coding agents, with bounded MCP calls and persistent worktrees.
    5 npm
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An experimental MCP gateway for controlling durable DeepSeek Harness agent sessions from MCP clients, enabling session creation, observation, steering, and resumption across chat sessions.
    3
    MIT