Skip to main content
Glama

swarm-mcp

Orchestrate parallel Claude agent workloads via Docker containers.

PyPI Python 3.12+ License: MIT Docker Required Documentation

swarm-mcp is an MCP server that lets your Claude session spawn other Claude agents — each in an isolated Docker container — and compose their results using functional combinators. Instead of one agent doing everything, you describe the work as run, par, map, chain, reduce, and pipeline calls, and swarm-mcp handles container lifecycle, resource scheduling, and result plumbing. The agent outputs are lazy refs (metadata on the wire, text on disk) so you never blow up the MCP protocol with megabytes of agent output.


Why swarm-mcp?

  • True Docker isolation per agent. Every agent gets its own container with its own filesystem, network policy, memory limit, and CPU quota. No shared state leaks between agents. A rogue rm -rf / in one container doesn't touch anything else.

  • Lazy refs (metadata on the wire, text on disk). Combinators return refs — small JSON objects with metadata (cost, duration, exit code, provenance hash). The actual text stays on disk in /tmp/swarm-mcp/{run_id}/{agent_id}/result.json. Call unwrap when you actually need the content. This keeps the MCP protocol fast and prevents context window bloat.

  • Data-driven pipelines. The pipeline tool interprets a JSON definition — steps with on_fail handlers, condition guards, retry_if loops, and next jumps. The pipeline definition is data: store it in git, version it, resume it from any step, generate it programmatically. The interpreter handles container lifecycle, budget tracking, and inter-step state via a shared /shared/ directory.

  • GPU and resource semaphores. Named resource pools (gpu, database, api, anything) are semaphores with configurable capacity. Agents queue for resources before execution. A single GPU doesn't get double-booked; a rate-limited API doesn't get hammered.

  • Natural language type contracts with validation. Types are markdown files that describe what an agent should produce. The validate tool spawns a validator agent that checks the output against the type definition. filter keeps only results that pass. retry re-runs until the output validates. Types reference each other with [type-name] syntax.

  • Agents can use your MCP servers. Set mcps: ["database-mcp"] in a sandbox spec and the agent gets access to your local knowledge base, Logseq graph, Google Workspace, or any other MCP server configured in your Claude settings. Data paths are mounted into the container at the same host path; network MCPs need no extra config. See the MCP Access guide.

  • Full artifact tracing. Every container runs a PostToolUse hook that logs MCP tool calls and file writes to artifacts.jsonl. inspect generates a post-mortem debug report from any ref. unwrap extracts output to a file you can Read() or Grep. Every ref carries a provenance hash and parent chain.


Related MCP server: Orchestrator MCP Server

Architecture

flowchart TB
    Claude["Claude Code<br/>(your session)"] -- "MCP" --> Server["swarm-mcp server<br/>run · par · map · chain · pipeline"]
    Server --> Pools["Semaphore + Resource Pools<br/>SWARM_MAX_CONCURRENT · SWARM_RESOURCE_gpu"]
    Pools --> Docker["Docker API"]
    Docker --> C0["Container 0<br/>claude --model sonnet"]
    Docker --> C1["Container 1<br/>claude --model opus"]
    Docker --> CN["Container N<br/>claude --model haiku"]
    C0 & C1 & CN --> Out["&nbsp;/tmp/swarm-mcp/{run}/{agent}/<br/>result.json · stream.jsonl · artifacts.jsonl"]
    Out -- "unwrap()" --> Text["output.md"]

Ref flow

flowchart LR
    A["run('Review code')"] --> R["ref: a1b2c3/agent-0<br/>exit_code: 0 · cost: $0.03<br/><i>metadata only — no text yet</i>"]
    R -- "unwrap()" --> F["/tmp/.../output.md"]
    R -- "inspect()" --> D["inspect.md<br/>debug report"]
    R -- "reduce([r1,r2,r3])" --> S["synthesis ref"]

Combinator composition

flowchart LR
    P["par(3 tasks)"] --> R3["3 refs"]
    R3 --> Re["reduce('Synthesise')"] --> Final["1 ref"] --> U["unwrap → text"]

    M["map(template, 5 inputs)"] --> R5["5 refs"]
    R5 --> Fi["filter('code-review')"] --> V["valid refs only"]

Installation

Prerequisites

  • Docker — containers are the execution substrate

  • Claude Code CLI — with OAuth configured (claude login)

  • uv — Python package manager

Install

# Run directly
uvx mcp-swarm

# Or install as a tool
uv tool install mcp-swarm

Configure Claude Code

Add to your Claude settings (~/.claude.json or project .claude.json):

{
  "mcpServers": {
    "swarm": {
      "command": "uvx",
      "args": ["mcp-swarm"]
    }
  }
}

Build the Docker image

The agent containers need a Docker image with Claude CLI and uv baked in. Clone the repo and build:

git clone https://github.com/stiege/swarm-mcp
cd swarm-mcp
docker build -t swarm-agent .

The Dockerfile installs Claude Code CLI and uv from their official sources during the build — no binaries to copy. The image is based on Ubuntu 24.04 with git, Python 3, and jq. It auto-builds on first use if missing, but pre-building avoids the startup delay.


Quick Start

1. Single agent — code review

Use run to review this file:

run(
  prompt: "Review the error handling in /workspace/src/api/auth.py. Flag any unhandled exceptions, missing input validation, or security issues. Be specific — line numbers and fix suggestions.",
  model: "sonnet",
  mounts: '[{"host_path": "/home/me/myproject", "container_path": "/workspace", "readonly": true}]',
  tools: "Read,Glob,Grep"
)

Returns a ref with metadata. Use unwrap on the ref to read the full review.

2. Parallel research — three topics at once

Use par to research these topics in parallel:

par(
  tasks: '[
    {"prompt": "Research the current state of WebTransport API browser support. What works, what doesn'\''t, what'\''s coming.", "model": "sonnet"},
    {"prompt": "Research QUIC protocol performance characteristics vs TCP for real-time applications. Include benchmarks if available.", "model": "sonnet"},
    {"prompt": "Research existing open-source WebTransport server implementations. Compare features, maturity, language.", "model": "sonnet"}
  ]',
  max_concurrency: 3
)

Three containers spin up simultaneously. Each gets its own network, filesystem, and execution context. Results come back as an array of refs with a summary showing succeeded/failed counts.

3. Pipeline — write, test, fix loop

Use pipeline to implement and test a feature:

pipeline(
  definition: '{
    "name": "implement-and-test",
    "steps": [
      {
        "id": "implement",
        "prompt": "Implement a rate limiter middleware for Express.js. Use a sliding window algorithm. Write to /shared/rate-limiter.js",
        "model": "sonnet",
        "tools": "Read,Write,Bash"
      },
      {
        "id": "test",
        "prompt": "Write tests for /shared/rate-limiter.js using Jest. Run them. Report pass/fail.",
        "model": "sonnet",
        "tools": "Read,Write,Bash",
        "on_fail": "fix"
      },
      {
        "id": "fix",
        "prompt": "Fix the failing tests. Read the error output and fix either the implementation or the tests.",
        "model": "sonnet",
        "tools": "Read,Write,Bash",
        "condition": "prev.error",
        "next": "test",
        "max_retries": 3
      }
    ]
  }'
)

The pipeline writes code in step 1, tests it in step 2, and if tests fail, loops through the fix step up to 3 times. All steps share the /shared/ directory for file passing.


Combinators Reference

Execution

Combinator

Pattern

Use when

run

1 prompt → 1 ref

Single agent task. The fundamental unit.

par

N prompts → N refs

Independent tasks that can run simultaneously.

map

1 template + N inputs → N refs

Same operation applied to many inputs (fan-out).

chain

N prompts → 1 final ref (sequential)

Each step needs the previous step's output as context.

reduce

N refs + synthesis prompt → 1 ref

Combine multiple results into a single synthesis.

map_reduce

map + reduce in one call

Fan-out then synthesize — no manual plumbing.

Control Flow

Combinator

Pattern

Use when

filter

N refs + type → valid refs

Keep only results that match a declared type.

race

N prompts → 1 winner ref

Multiple strategies, take the first success.

retry

1 prompt + max_attempts → 1 ref

Flaky task that may need multiple tries. Optionally validates against a type.

guard

1 ref + check → ref or error

Enforce constraints (validated, budget, classification, encrypted, exists) before passing downstream.

pipeline

JSON definition → execution trace

Multi-step workflow with conditions, retries, on_fail handlers, and budget/deadline tracking.

Observation

Tool

Pattern

Use when

unwrap

ref → file path

You need the actual text content. Writes to output.md.

inspect

ref → debug report

Post-mortem on a failed or slow agent. Shows tool calls, stream log, artifacts.

Security

Tool

Pattern

Use when

encrypt

ref → encrypted ref + key_id

Protect sensitive output at rest. Metadata stays readable; text is Fernet-encrypted on disk.

decrypt

encrypted ref + key_id → file path

Decrypt with the right key. Writes plaintext to output.md.

classify

ref + level → classified ref

Tag data sensitivity (public/internal/confidential/restricted). Controls which MCPs can access.

Types

Tool

Pattern

Use when

list_type_registry

→ list of types

See what types are defined.

get_type_definition

name → markdown content

Read a type definition, with [references] resolved.

validate

artifact + type → VALID/PARTIAL/INVALID

Check if an agent's output matches a declared type.

Configuration

Tool

Pattern

Use when

save_sandbox_spec

name + JSON → saved

Create a reusable sandbox configuration.

list_sandbox_specs

→ list of specs

See saved sandboxes.

wrap

file path → ref

Bring an external file/directory into the ref system.

wrap_project

project dir → registered resources

Register a project's pipelines/, sandboxes/, types/ directories.


Sandbox Configuration

A sandbox spec defines the environment for an agent container. Use inline on any combinator, or save with save_sandbox_spec for reuse.

Field

Type

Default

Description

model

string

"sonnet"

Claude model: haiku, sonnet, opus

tools

list[string]

["Read","Write","Glob","Grep","Bash"]

Allowed Claude tools

mcps

list[string]

[]

MCP servers to attach (by name from host ~/.claude.json). The server's code and config are mounted into the container; add data paths via mounts. See MCP Access.

system_prompt

string

null

System prompt injected via --system-prompt

claude_md

string

null

Written to workspace CLAUDE.md

output_schema

dict

null

JSON schema for structured output (--json-schema)

effort

string

null

Effort level: low, medium, high, max

max_budget

float

null

USD budget cap for the agent

input_type

string

null

Natural language type describing agent input

output_type

string

null

Natural language type describing expected output

mounts

list[dict]

[]

Volume mounts: {"host_path", "container_path", "readonly"}

workdir

string

"/workspace"

Container working directory

input_files

dict

{}

Files to inject: {"/path": "content"}

network

bool

true

Network access (needed for Anthropic API)

memory

string

null

Docker memory limit (e.g. "2g")

cpus

float

null

Docker CPU limit (e.g. 2.0)

gpu

bool

false

Pass --gpus all to Docker

resources

list[string]

[]

Named resource pools to acquire (e.g. ["gpu", "database"])

timeout

int

1800

Max execution time in seconds (30 min default)

env_vars

dict

{}

Environment variables: {"KEY": "value"}

Complete example

{
  "model": "sonnet",
  "tools": ["Read", "Write", "Glob", "Grep", "Bash"],
  "system_prompt": "You are a senior backend engineer. Write production-quality Go code.",
  "claude_md": "# Project\nThis is a Go microservice using chi router and pgx for Postgres.",
  "mounts": [
    {"host_path": "/home/me/myservice", "container_path": "/workspace", "readonly": false}
  ],
  "mcps": ["database-mcp"],
  "memory": "4g",
  "cpus": 2.0,
  "timeout": 600,
  "effort": "high",
  "env_vars": {"GOPATH": "/home/ubuntu/go"},
  "output_type": "[go-module]"
}

Save it:

save_sandbox_spec(name: "go-backend", spec: '<the JSON above>')

Then use it anywhere:

run(prompt: "Add pagination to the /users endpoint", sandbox: "go-backend")
par(tasks: '[{"prompt": "...", "sandbox": "go-backend"}, ...]')

Pipelines

A pipeline definition is a program expressed as data. The pipeline tool is the interpreter. You describe what should happen — steps, control flow, error handling — and the interpreter evaluates it, managing shared state and resource budgets.

The key property: the definition is a JSON value you can store, version, share, resume, and generate. It does nothing on its own. The interpreter handles all effects: spawning containers, tracking costs, enforcing deadlines, and routing control flow.

Complete pipeline example

{
  "name": "research-and-report",
  "budget": 2.00,
  "deadline_seconds": 1800,
  "classification": "internal",
  "steps": [
    {
      "id": "gather",
      "prompt": "Research the top 5 Rust web frameworks by GitHub stars. For each, note: name, stars, last commit date, key features. Write a JSON summary to /shared/frameworks.json",
      "model": "sonnet",
      "tools": "Read,Write,Bash"
    },
    {
      "id": "benchmark",
      "prompt": "Read /shared/frameworks.json. For each framework, find or estimate request throughput benchmarks. Write results to /shared/benchmarks.json",
      "model": "sonnet",
      "tools": "Read,Write,Bash"
    },
    {
      "id": "draft",
      "prompt": "Read /shared/frameworks.json and /shared/benchmarks.json. Write a comparative analysis report to /shared/report.md. Include a recommendation.",
      "model": "opus",
      "tools": "Read,Write",
      "on_fail": "fix-draft"
    },
    {
      "id": "fix-draft",
      "prompt": "The report draft failed. Read the error, fix the issues, and rewrite /shared/report.md",
      "model": "sonnet",
      "tools": "Read,Write",
      "condition": "prev.error",
      "next": "review",
      "max_retries": 2
    },
    {
      "id": "review",
      "prompt": "Read /shared/report.md. Check for factual accuracy, missing data, and unclear recommendations. Write feedback to /shared/review.md. If the report is good, just write 'APPROVED'.",
      "model": "opus",
      "tools": "Read,Write",
      "retry_if": {"draft": "NEEDS_REVISION"}
    }
  ]
}

Step fields

Field

Type

Description

id

string

Step identifier (used by on_fail, next, retry_if). Defaults to step-{i}.

prompt

string

The task prompt. Previous step's output is appended as context automatically.

on_fail

string | dict

Step ID to jump to on failure, or {"governor": "Name"} for LLM-governed decision.

on_success

dict

{"governor": "Name"} — LLM-governed decision evaluated after a successful step.

next

string

Step ID to jump to after success (instead of next sequential step).

condition

string

"prev.error" — only run this step if the previous step failed.

max_retries

int

Max times this step can be entered via on_fail/next jumps (default: 3).

retry_if

dict

{"target_step": "keyword"} — if output contains keyword, jump to target step.

+ any sandbox field

model, tools, system_prompt, timeout, etc.

Pipeline-level fields

Field

Type

Description

name

string

Pipeline name (optional).

sandbox

string

Default sandbox spec applied to all steps.

budget

float

Total USD budget. Pipeline stops if exceeded.

deadline_seconds

int

Wall-clock deadline. Pipeline stops if exceeded.

classification

string

Default data classification for the run.

governors

dict

Inline governor specs keyed by name. Per-project, version-controlled alongside the pipeline.

Pipeline status

The pipeline tool returns a status field: "done" (all steps completed) or "broken" (last result had an error, or a governor returned broken). A broken_reason field is included when applicable. Broken pipelines can be inspected via pipeline_status.

The /shared/ directory

Every step in a pipeline gets /shared/ mounted read-write. This is the inter-step communication channel. Step 1 writes /shared/data.json, step 2 reads it. No ref passing needed — just files.

Resuming

pipeline(definition: "research-and-report", resume: "a1b2c3d4e5f6")
pipeline(definition: "research-and-report", resume: "a1b2c3d4e5f6/benchmark")
  • resume: "run_id" — reuses the shared directory from a previous run, starts from step 0.

  • resume: "run_id/step_id" — skips to the named step, previous artifacts available in /shared/.


Governors

Governors are LLM-powered control-flow hooks evaluated at pipeline trigger points (on_fail, on_success). They replace hardcoded fallback logic with natural language policy — a Claude model reads the live pipeline state and decides what happens next.

Unlike the stamp layer (stamps.py — provenance, cost, classification, encryption), governors are about control flow.

Continuation algebra

Every governor returns one of five actions:

Action

Effect

next

Proceed to the next step normally

jump

Jump to a named step (target field)

halt

Stop the pipeline cleanly (status: done)

broken

Stop and mark pipeline as broken with a reason

patch_pipeline

Deep-merge patch the pipeline definition, then continue

The context dict is free-form, accumulates across the pipeline, and is written to /shared/governor-context.json after each evaluation so steps can read it.

Inline pipeline governors

Define governors directly in the pipeline JSON — version-controlled alongside the pipeline, no global registration needed:

{
  "name": "train-loop",
  "governors": {
    "TrainingFailure": {
      "description": "Governs QLoRA train step failures",
      "model": "claude-haiku-4-5-20251001",
      "spec": "You govern the train step of a QLoRA fine-tuning pipeline. OOM errors → broken. NaN/loss divergence → broken. Transient errors (disk, timeout) → jump to the step before train to retry data preparation. Inspect exit_code and error output."
    },
    "QualityGate": {
      "description": "Decides whether the current model iteration is good enough",
      "model": "claude-haiku-4-5-20251001",
      "spec": "You govern the evaluation step. If the pass rate is 5/5, return halt (we're done). If 3-4/5, jump to the training step for another iteration. If 0-2/5, return broken — the model is not converging."
    }
  },
  "steps": [
    {"id": "train",    "prompt": "...", "on_fail":    {"governor": "TrainingFailure"}},
    {"id": "evaluate", "prompt": "...", "on_success": {"governor": "QualityGate"}}
  ]
}

Global fallback: ~/.claude/governors/ (managed by save_governor_spec / list_governor_specs). Inline definitions take priority over global ones.

The patch_pipeline action

A governor can surgically modify the running pipeline definition. This uses JSON Merge Patch (RFC 7396) — null values delete keys, objects recurse, scalars/arrays replace:

{
  "action": "patch_pipeline",
  "pipeline_patch": {
    "steps": [
      {"id": "train", "prompt": "Run training with --batch-size 4 instead of 8"}
    ]
  },
  "context": {"adjusted_batch_size": true},
  "reason": "Detected instability in loss curve — reducing batch size"
}

governor_context

The context dict from each governor continuation is merged into a running governor_context that persists across the entire pipeline. Written to /shared/governor-context.json so steps can read it. Use it to pass structured observations between governors (e.g., iteration count, last loss value, retry history).


Type System

Types are natural language specifications stored as markdown files in a types/ directory. They describe what something is, what it should contain, and how to verify it.

Defining a type

Create types/code-review.md:

A code review document that covers:

1. **Summary** — one paragraph describing what the code does
2. **Issues** — numbered list of problems found, each with:
   - Severity (critical / warning / nit)
   - File and line number
   - Description of the problem
   - Suggested fix
3. **Security** — specific section for security concerns (XSS, injection, auth)
4. **Testing** — assessment of test coverage and suggestions

## Verification
- Has a Summary section
- Has at least one numbered issue with severity, location, and fix
- Has a Security section (even if "no issues found")
- Has a Testing section

Using types

Set input_type or output_type on any combinator to inject type context into the agent's prompt:

run(
  prompt: "Review the auth module",
  output_type: "code-review",
  mounts: '[{"host_path": "/home/me/project", "container_path": "/workspace", "readonly": true}]'
)

Validating

validate(artifact: '{"ref": "a1b2c3/agent-0"}', declared_type: "code-review")

Returns VALID, PARTIAL, or INVALID with per-criterion results.

Type references

Types can reference other types with [type-name] syntax:

# types/api-server.md
A REST API server that includes:
- Route handlers with input validation
- Error handling middleware
- [test-suite] with integration tests
- [dockerfile] for containerized deployment

References are resolved recursively (up to depth 3). Each referenced type is inlined once; subsequent references become "(see above)".

Registering types

wrap_project(project_dir: "/home/me/myproject")

This registers myproject/types/, myproject/sandboxes/, and myproject/pipelines/ as search paths. Types in the project take priority over global types in ~/.claude/types/.


Resource Pools & GPU

GPU access

run(
  prompt: "Fine-tune the sentiment classifier on the new dataset",
  gpu: true,
  mounts: '[{"host_path": "/data/models", "container_path": "/models", "readonly": false}]'
)

Setting gpu: true does two things:

  1. Passes --gpus all to the Docker container

  2. Acquires the "gpu" resource pool (capacity 1 by default)

If another agent is using the GPU, this one queues until the resource is free.

Named resource pools

Any string in the resources array becomes a semaphore. Configure capacity with environment variables:

# One GPU at a time (default)
export SWARM_RESOURCE_gpu=1

# Up to 3 concurrent database connections
export SWARM_RESOURCE_database=3

# Rate-limit external API access to 5 concurrent agents
export SWARM_RESOURCE_api=5

Use in a run call:

run(
  prompt: "Query the production database for user analytics",
  resources: '["database"]',
  mcps: '["database-mcp"]'
)

Queue semantics

Resource acquisition uses a separate timeout (SWARM_QUEUE_TIMEOUT, default 1 hour) from execution timeout. An agent waiting 10 minutes for a GPU still gets its full execution time once the GPU is available. The global concurrency limit (SWARM_MAX_CONCURRENT) is acquired first, then named resources.


Observability

unwrap — extract text to file

unwrap(ref: "a1b2c3/agent-0")

Writes the agent's full text output to /tmp/swarm-mcp/a1b2c3/agent-0/output.md and returns the path and size. Use Read() to view it. This is how you go from a lazy ref to actual content.

inspect — post-mortem debug

inspect(ref: "a1b2c3/agent-0")

Generates a debug report at inspect.md containing:

  • Result metadata (exit code, error, duration, cost)

  • Output text (first 2000 chars)

  • Stream log summary (tool calls made, thinking steps)

  • Artifacts logged by the PostToolUse hook

  • Files in the output directory

Artifact tracing

Every agent container runs a PostToolUse hook (hooks/log-artifacts.sh) that captures MCP tool calls and file writes to /output/artifacts.jsonl. Each entry records:

{
  "timestamp": "2025-01-15T10:30:00Z",
  "tool": "Write",
  "tool_use_id": "toolu_abc123",
  "input": {"file_path": "/workspace/src/main.py", "content": "..."},
  "response": {"success": true}
}

This gives you a complete audit trail of what every agent did inside its container.

Encrypted refs

The encrypt / decrypt flow protects sensitive outputs at rest:

run(prompt: "Extract PII from the uploaded documents")
  │
  ▼
encrypt(ref: "a1b2c3/agent-0")
  │
  ▼
{ "ref": "a1b2c3/agent-0",       ◄── metadata visible
  "key_id": "f9e8d7c6b5a4",      ◄── needed to decrypt
  "encrypted": {                   ◄── text is Fernet-encrypted on disk
    "key_id": "f9e8d7c6b5a4",
    "algorithm": "fernet"
  }}
  │
  ├── unwrap() ──► ERROR: "Ref is encrypted. Use decrypt tool."
  │
  └── decrypt(ref: "a1b2c3/agent-0", key_id: "f9e8d7c6b5a4") ──► output.md

The key is stored in /tmp/swarm-mcp/.keys/ with 0600 permissions. Only processes with the key_id can access the plaintext. The ciphertext stays in result.jsondecrypt writes the plaintext to a separate output.md without replacing the encrypted copy.

Classification flow

classify(ref: "a1b2c3/agent-0", level: "confidential", denied_mcps: '["whatsapp", "slack"]')
  │
  ▼
guard(ref: '<classified ref>', check: "classification", value: '["slack"]')
  │
  ▼
ERROR: "MCP 'slack' denied for classification 'confidential'"

Classification levels: public (0) → internal (1) → confidential (2) → restricted (3). Use guard with the "classification" check to enforce data flow policies before passing refs to downstream agents with MCP access.


On-Disk Layout

Every agent execution produces a directory under /tmp/swarm-mcp/:

/tmp/swarm-mcp/
└── a1b2c3d4e5f6/              ← run_id
    ├── agent-0/                ← agent_id
    │   ├── result.json         ← full output + metadata
    │   ├── stream.jsonl        ← raw stream-json from claude
    │   ├── artifacts.jsonl     ← PostToolUse hook log
    │   ├── output.md           ← created by unwrap()
    │   ├── inspect.md          ← created by inspect()
    │   ├── prompt.txt          ← the prompt sent to the agent
    │   ├── home/               ← staged HOME dir mounted into container
    │   │   ├── .claude/        ← claude config + settings + hooks
    │   │   └── .claude.json    ← oauth + mcp config
    │   └── workspace/          ← mounted as /workspace in container
    │       └── CLAUDE.md       ← injected from sandbox spec
    ├── agent-1/
    │   └── ...
    └── shared/                 ← pipeline shared directory (/shared/ in containers)
        ├── data.json
        └── report.md

Environment Variables

Variable

Default

Description

SWARM_MAX_CONCURRENT

10

Maximum agents running simultaneously across all combinators.

SWARM_QUEUE_TIMEOUT

3600

Seconds an agent will wait in the queue for an execution slot or resource pool.

SWARM_RESOURCE_<name>

1

Capacity of a named resource pool. e.g. SWARM_RESOURCE_gpu=1, SWARM_RESOURCE_database=3.

SWARM_PROJECT_DIR

unset

Project root containing pipelines/, sandboxes/, types/ directories. Added to search paths on startup.


Contributing

See CONTRIBUTING.md.


License

MIT

Available Tools

33 tools
beamA

Sample N candidates in parallel, score each, commit to the top-1.

The simplest search combinator: proposes width candidates via par, scores each with a cheap haiku evaluator, and returns the highest-scoring ref. Losing candidates are preserved on the winner's search.alternatives field (unless keep_losers is false). This is self-consistency / majority-vote with arbitrary scoring — the same shape as the governor beam search, but applied to arbitrary agent output.

Evaluator forms:

  • score:<criterion> — direct haiku call, returns a float in [0, 1] plus a reason string. Use for rubric-style scoring.

  • validate:<type> — runs the type validator; VALID=1.0, PARTIAL=0.5, INVALID=0.0. Use when the acceptance criterion is a registered type.

Budget semantics: a hard cap on total proposer spend. If exceeded, the winner's search stamp records prune_reason="budget exhausted" but the result is still returned — best-effort rather than abort. Evaluator cost is not counted against budget for phase 1; evaluators are already constrained to haiku.

Anti-pattern: the Tree Search paper flags evaluator-as-expensive-as-proposer as a non-starter. This combinator hardcodes haiku for scoring — if you need a stronger evaluator, lift that logic into a governor instead.

Args: prompt: Task prompt sent to every candidate agent. width: Number of parallel candidates (default: 3). evaluator: Scoring directive. Must start with score: or validate:. sandbox: Named sandbox spec or inline JSON for candidate agents. model: Candidate agent model (default: sonnet — the proposer). timeout: Per-candidate timeout in seconds. mcps: JSON array of MCP server names attached to candidates. keep_losers: Preserve losing candidates on winner search stamp (default: true — useful for inspection + future step-lookahead). budget: Total USD cap on proposer cost. Best-so-far semantics on breach. max_concurrency: Upper bound on concurrent candidate agents.

Returns: JSON with run_id, winner ref (search-stamped), scores, and total_cost. If all candidates scored 0, error is populated.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
widthNo
evaluatorNoscore:overall quality, rigour, and correctness
sandboxNo
modelNosonnet
timeoutNo
mcpsNo
keep_losersNo
budgetNo
max_concurrencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description fully discloses behavior: parallel execution, scoring, best-effort budget cap, preservation of losers, evaluator cost exclusion, and return format. It covers edge cases like budget exhaustion and all-zero scores, and explains the search stamp recording.

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 well-structured with a clear lead sentence, bullet points, and sections. It is thorough but not overly verbose; every sentence adds value. Minor conciseness could be improved by merging some explanations, but overall it is efficient.

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 ten parameters, no schema description coverage, and an output schema that exists, the description covers all aspects: input semantics, behavioral quirks, return schema, error handling, and anti-patterns. It leaves no obvious gaps for an agent to understand when and how to invoke the tool.

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

Parameters5/5

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

Schema coverage is 0%, so the description must compensate, and it does comprehensively. Every parameter is explained with context—e.g., evaluator must start with 'score:' or 'validate:', default values, and the effect of 'keep_losers' on preserving alternatives. This adds substantial meaning beyond the schema's basic type definitions.

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 opens with a specific verb and resource: 'Sample N candidates in parallel, score each, commit to the top-1.' It clearly distinguishes from sibling tools like 'par' and 'race' by explaining it's a search combinator with scoring, comparing to self-consistency/majority-vote.

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 provides explicit guidance on evaluator forms (score: vs validate:) and when to use each. It mentions an anti-pattern (expensive evaluator) and recommends using a governor instead. However, it does not explicitly contrast with all sibling tools like 'chain' or 'map', leaving some usage context implicit.

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

chainA

Run agents sequentially as a pipeline. Each stage receives the prior stage's output as context.

Args: stages: JSON array of stage objects. Each supports all sandbox fields (prompt, model, tools, sandbox, system_prompt, etc.).

ParametersJSON Schema
NameRequiredDescriptionDefault
stagesYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

Describes data flow (output as context) and that stages support sandbox fields, but lacks detail on error handling, resource usage, or execution semantics. With no annotations, more transparency would be beneficial.

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 for purpose and a clear explanation of stages format. No fluff, front-loaded, efficient.

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?

Covers input semantics and pipeline behavior adequately. Missing edge cases but output schema exists, so return values not needed. Good for a simple tool.

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 only parameter 'stages' is a string, but description clarifies it is a JSON array of stage objects and lists supported sandbox fields, adding significant 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?

Description clearly states the tool runs agents sequentially as a pipeline, and explains that each stage receives prior output as context. This distinguishes it from sibling tools like 'par' (parallel) and 'map_reduce'.

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?

Implied usage for sequential processing, but no explicit guidance on when to use vs alternatives or when not to use. Could mention that 'par' is for parallel execution.

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

classifyA

Set the classification level on a ref. Controls which MCPs can access the data.

Use for data sensitivity enforcement — e.g. mark original legal documents as 'confidential' (no WhatsApp MCP), mark synthetic outputs as 'public'.

Args: ref: A ref string or JSON object. level: Classification level: public, internal, confidential, restricted. allowed_mcps: JSON array of MCP names allowed to access this ref. denied_mcps: JSON array of MCP names denied access.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
levelYes
allowed_mcpsNo
denied_mcpsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

No annotations are provided, so the description must disclose all behavioral traits. It explains the effect on MCP access but does not address whether classification overwrites existing settings, if changes are reversible, or if there are authorization requirements.

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, with a clear first sentence stating purpose, followed by a usage example and parameter details. Every sentence adds value without redundancy or unnecessary fluff.

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 description covers purpose, parameters, and usage context adequately. It does not explain the return value, but an output schema exists, so the agent can infer that. Minor missing detail: what happens if both allowed and denied lists are provided.

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

Parameters5/5

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

The description adds significant meaning beyond the input schema by enumerating the classification levels (public, internal, confidential, restricted) and explaining that allowed_mcps and denied_mcps are JSON arrays of MCP names. The schema only shows types with no enums or descriptions, so the description fully compensates for the 0% 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 clearly states the verb 'Set' and the resource 'classification level on a ref', specifying that it controls MCP access. It distinguishes from siblings like 'encrypt' or 'wrap' by focusing on data sensitivity enforcement, which is unique among the listed 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?

The description provides concrete examples of when to use the tool, such as marking legal documents as confidential and synthetic outputs as public. However, it does not explicitly mention when not to use it or compare to alternatives, but the sibling tools are not in the same domain.

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

decryptA

Decrypt an encrypted ref's text. Writes the plaintext to output.md and returns the path.

You need the key_id that was returned when the ref was encrypted.

Args: ref: A ref string like "run_id/agent_id", or a JSON object with a "ref" field. key_id: The key ID returned by the encrypt tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
key_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Discloses side effect: writes to output.md and returns path. With no annotations, this covers critical behavioral traits, though error conditions are omitted.

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 concise paragraphs: main action first, then args list. No wasted words, front-loaded with purpose.

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 2-param tool with an output schema, description covers purpose, side effect, and parameter usage completely. No missing critical aspects.

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

Parameters5/5

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

Provides crucial detail beyond schema: ref can be a JSON object with 'ref' field, and key_id must come from encrypt tool. Schema coverage was 0%, so description fully compensates.

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?

Clearly states 'Decrypt an encrypted ref's text' with specific verb and resource. Distinguishes from sibling 'encrypt' tool by implying the inverse operation.

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 requires key_id from encrypt tool as prerequisite. No explicit when-not-to-use or alternatives, but context is clear for a simple decryption task.

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

encryptA

Encrypt a ref's text payload. Returns the ref with a key_id — only callers with the key can decrypt.

The ref metadata (provenance, classification, etc.) stays visible; only the text content is encrypted. Pass the key_id to specific agents or features that should be able to read the content.

Args: ref: A ref string like "run_id/agent_id", or a JSON object with a "ref" field.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description explains that metadata stays visible, only text is encrypted, and a key_id is returned. It does not cover error conditions or auth details, but provides sufficient behavioral context for a simple 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, front-loaded with the core purpose, and structured with an 'Args' section. Every sentence adds information without redundancy.

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 tool has one parameter and an output schema (not shown), the description explains input and outcome comprehensively. It covers encryption behavior, metadata visibility, and key usage, making it complete for its complexity.

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

Parameters5/5

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

The schema has no description for the 'ref' parameter (0% coverage). The description adds valuable semantics: it accepts a ref string like 'run_id/agent_id' or a JSON object with a 'ref' field, clarifying the input format.

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 tool encrypts a ref's text payload and explains the effect (returns ref with key_id, only callers with key can decrypt). It distinguishes from the sibling tool 'decrypt' by implication.

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 implies use for confidentiality of text content and mentions key-based access, but does not explicitly contrast with alternatives or provide when-not-to-use guidance.

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

filterA

Filter refs by type validation — keep only results that match the declared type.

Runs validate on each ref in parallel. Returns only refs with VALID verdict. This is the type-gated composition primitive: ensures only correct results flow downstream.

Args: refs: JSON array of ref objects: [{"ref": "run_id/agent_id"}, ...]. declared_type: Type name or description to validate against. model: Model for the validator agents (default: sonnet). timeout: Timeout per validation (default: 120).

ParametersJSON Schema
NameRequiredDescriptionDefault
refsYes
declared_typeYes
modelNosonnet
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 bears full burden. It discloses that validation runs in parallel on each ref, returns only valid results, and defines parameters. It does not mention side effects (likely none) or failure modes, but coverage is good.

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 highly conciseness: two short paragraphs plus an Args list. Front-loaded with main purpose, then details, then parameters. No unnecessary words.

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 the tool has 4 parameters and an output schema, the description adequately covers behavior (parallelism, return criterion) and parameter meanings. Minor gaps: no edge case handling (e.g., empty refs) but not critical.

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

Parameters5/5

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

Schema coverage is 0%, so description must compensate. It provides a clear Args section explaining each parameter: refs (JSON array), declared_type (type name), model (default), timeout (default). This adds significant 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 clearly states that the tool filters refs by type validation, keeping only those with a VALID verdict. It explicitly calls itself a 'type-gated composition primitive', making its purpose distinct from sibling tools like 'validate' or 'chain'.

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 (to filter valid refs) but does not explicitly compare to alternatives or state when not to use it. Given many sibling tools, more explicit guidance would improve usability.

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

get_type_definitionA

Get a type definition by name, optionally resolving [references] to other types.

Args: name: Type name (e.g. "mcp-server", "tarball", "code-review"). resolve_refs: Whether to inline [referenced] types (default: true).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
resolve_refsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description must disclose behavior. It mentions optional resolution of references, but does not explain error conditions, permissions, or return format beyond the output 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 very concise: two sentences plus a bullet list, with no unnecessary words. Information is front-loaded.

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 getter with few parameters and an output schema, the description covers the core purpose and parameter semantics. It lacks guidance on when to use versus related tools, but is otherwise sufficient.

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?

Despite 0% schema description coverage, the description adds examples for 'name' and clarifies the effect of 'resolve_refs' (inline references, default true), which goes beyond the bare 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 clearly states 'Get a type definition by name' with a specific verb and resource, and distinguishes itself from siblings like 'list_type_registry' which lists all types.

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 (e.g., when you need a single type definition) but does not explicitly state when to use this tool versus alternatives like 'list_type_registry' or 'validate'.

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

guardA

Check a monadic condition on a ref. Returns the ref if the guard passes, error if not.

Use to enforce constraints before passing refs to downstream combinators.

Args: ref: A ref string or JSON object. check: The guard to check — one of: "validated", "budget", "classification", "encrypted", "exists". value: Required for some checks — e.g. the type name for "validated", the classification level for "classification".

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes
checkYes
valueNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

With no annotations, the description must carry the full burden of behavioral disclosure. It states the outcome (returns ref or error) but does not disclose side effects, permissions, or whether the operation is read-only. The mention of 'monadic condition' is vague. This leaves ambiguity about non-obvious behaviors.

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 concise (4 lines plus Args block) and well-structured. It provides essential information without unnecessary verbosity. The use of an Args section clearly delineates parameter explanations.

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 the tool's moderate complexity (3 parameters, no annotations, output schema exists), the description covers purpose, parameters, and basic behavior. It mentions the output (ref or error) but does not detail the output schema structure. Still, this is sufficient for an agent to use the tool correctly in most scenarios.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must compensate. It explains the 'check' parameter's enum values explicitly and provides examples for 'value' (e.g., type name for validated). However, the description for 'ref' says 'string or JSON object' while the schema defines it as 'string', which creates a minor inconsistency.

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 it checks a monadic condition on a ref and returns the ref or an error. It names specific check types, which aids understanding. However, it does not explicitly differentiate from sibling tools like 'validate' or 'filter', which may have overlapping functionality.

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 explicitly states 'Use to enforce constraints before passing refs to downstream combinators.' This provides clear usage context. It does not mention when not to use or alternative tools, but the context is sufficient for basic guidance.

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

huntA

Run multiple (fetch → map → score) hunt strategies in parallel and merge.

Each strategy is an independent (fetch, plan, score) triple with its own seed prompt or explicit seeds, plan template, and rubric. Strategies run concurrently; a failure in one does not halt the others. All scored refs across all strategies are merged into a single globally-ranked leaderboard so you can see which strategy produced the highest-yield finding.

This is the compound combinator that makes "run all the hunt framings at once" tractable — rather than sequentially trying one hunt shape at a time, you parallelise across framings (problem-driven, gap-in-field, broken-claims, tool-landscape, connection) and let the scoring sort them.

Strategy dict fields:

  • name (required) — short label used for tagging and per-strategy reporting in the leaderboard.

  • seeds (optional) — pre-supplied list of seed strings (each becomes a map input). Exactly one of seeds or fetcher_prompt must be set.

  • fetcher_prompt (optional) — prompt sent to a single run call that must emit a JSON array of seed strings (or a JSON object with a seeds key). The agent runs with network enabled.

  • planner_template (required) — prompt template for the map step. Use {input} as the placeholder for each seed.

  • rubric (required) — evaluator directive for the score step. Any form accepted by _evaluate_node: validate:<type>, score:<criterion>, or exec:<cmd>.

  • top_k (optional, default 3) — how many winners this strategy contributes to the unified leaderboard.

  • model_planner (optional, default "haiku") — model for the map step.

  • model_fetcher (optional, default "haiku") — model for the fetch step.

  • timeout (optional) — per-agent timeout in seconds.

Args: strategies: JSON array of strategy dicts (or a Python list). max_parallel_strategies: Upper bound on strategies running at once (default: 5). Each strategy internally parallelises its map step. top_k_global: Size of the unified leaderboard across all strategies (default: 10).

Returns: JSON with run_id, strategies (per-strategy summary including name, error-if-any, total_cost, winner_ref, best_score), and leaderboard (globally-ranked list tagged by strategy). The full per-ref scoring trace lives at strategy_details[i].ranked.

ParametersJSON Schema
NameRequiredDescriptionDefault
strategiesYes
max_parallel_strategiesNo
top_k_globalNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully covers behavioral traits: concurrent execution, failure isolation, merging into a global leaderboard, default values for strategies (top_k, models, timeout), and detailed return structure (run_id, strategies, leaderboard, per-ref scoring trace).

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 somewhat lengthy but well-structured: it starts with the core purpose, then explains the strategy dict in detail, followed by args and returns. Every sentence earns its place, though some sections (like the extensive strategy fields) could be slightly more compressed without losing clarity.

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 tool's complexity (orchestrating multiple strategies), the description is complete. It covers usage, parameter details, defaults, failure behavior, merging logic, and return format. The output schema exists but the description also explains the return structure, so no gaps remain.

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

Parameters5/5

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

Schema description coverage is 0%, but the description compensates by exhaustively documenting the strategies parameter with required/optional fields, each field's meaning, and examples. It also explains max_parallel_strategies and top_k_global with defaults, adding all 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 clearly states the tool's purpose: 'Run multiple (fetch → map → score) hunt strategies in parallel and merge.' It further explains it's a 'compound combinator' for parallelizing hunt framings, distinguishing it from sibling tools like run, map, or chain that operate on single sequences.

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 explicitly indicates when to use this tool: 'makes run all the hunt framings at once tractable — rather than sequentially trying one hunt shape at a time.' It implies an alternative (sequential use) but does not explicitly list when not to use it. The parallel nature and failure isolation are well explained.

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

inspectA

Inspect an agent's full execution state — partial output, stream log, files produced.

Use after a timeout, crash, or unexpected result to understand what happened. Writes a human-readable debug report to output_dir/inspect.md.

Args: ref: A ref string like "run_id/agent_id".

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

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

Discloses the side effect of writing a debug report to output_dir/inspect.md. No annotations exist, so description carries full burden; additional details on read-only nature could improve score.

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 concise paragraphs with clear structure: first explains what the tool does, second gives usage guidance and parameter hint. No wasted words.

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 tool with an output schema, the description fully covers input purpose, output side effect, and usage scenario. No gaps remain.

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 description adds meaning to the 'ref' parameter beyond the schema by providing an example format 'run_id/agent_id'. With 0% schema coverage, this compensation is effective but still basic.

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 tool inspects an agent's full execution state, listing specific components (partial output, stream log, files produced). This distinguishes it from sibling tools that execute or manage agents.

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 'Use after a timeout, crash, or unexpected result to understand what happened', providing clear context for when to use this tool vs alternatives.

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

iterateA

Iteratively refine an agent's output until an evaluator is satisfied.

Runs the agent up to max_iterations times. Each iteration sees the prior attempts' outputs, scores, and issues injected into its prompt, so the agent can correct the specific shortcomings the evaluator called out on the last pass. Halts when any of these become true:

  • Evaluator score >= success_threshold (success).

  • patience iterations pass with no improvement to the best score.

  • Total agent cost exceeds max_budget (best-so-far).

  • Wall-time exceeds max_wall_time seconds (best-so-far).

  • max_iterations reached (best-so-far).

Evaluator forms (pass exactly one of target_type or evaluator):

  • target_type="some-type" — shorthand for evaluator="validate:some-type". LLM validator against a registered type. Best for text artifacts whose correctness is a matter of shape and content.

  • evaluator="validate:<type>" — explicit form of the above.

  • evaluator="exec:<shell cmd>" — ground-truth executor. The agent's output is written to a tempfile and the command runs with $ARTIFACT set to the path (and {artifact} substituted in the template). Exit 0 scores 1.0; non-zero scores 0.0 with stderr parsed into issues. Use for artifacts with compile/build/test semantics (docker build, pytest, etc.) — this is the only way to get ground-truth feedback.

  • evaluator="score:<criterion>" — ad-hoc LLM rubric scoring via haiku.

Args: prompt: Base task description sent to the agent on iteration 1; on subsequent iterations it is augmented with a "Prior attempts" section summarising previous outputs, scores, and issues. target_type: Shorthand for evaluator="validate:<target_type>". Also injects the type as output_type context on the agent prompt. evaluator: Full evaluator directive (validate:, exec:, or score:). Takes precedence over target_type if both given. max_iterations: Hard cap on iteration count (default: 10). success_threshold: Score at or above which we declare success (default: 0.9). Must be in [0.0, 1.0]. patience: Halt if patience consecutive iterations fail to improve on the best score so far (default: 3). max_budget: Optional USD cap on total agent (proposer) cost. Evaluator cost is not counted. Halts best-so-far on breach. max_wall_time: Optional wall-time cap in seconds. Halts best-so-far on breach. sandbox: Named sandbox spec or inline JSON for the agent. model: Agent (proposer) model (default: sonnet). timeout: Per-iteration agent timeout in seconds. mcps: JSON array of MCP server names attached to the agent.

Returns: JSON with run_id, iterations, halted_because, best_iteration, best_ref (validated-stamped), best_score, total_cost, and the full attempts trace with per-iteration ref / score / issues / cost.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
target_typeNo
evaluatorNo
max_iterationsNo
success_thresholdNo
patienceNo
max_budgetNo
max_wall_timeNo
sandboxNo
modelNosonnet
timeoutNo
mcpsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/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 full burden. It thoroughly covers the iterative behavior, halting conditions (success threshold, patience, budget, wall time, max iterations), evaluator forms, and how prior attempts are injected. This is comprehensive and transparent.

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 well-structured with sections for general behavior, evaluator forms, and arguments. It is front-loaded with the main purpose. While somewhat lengthy, it earns its sentences given the tool's complexity.

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?

Despite 12 parameters and 1 required, the description covers all aspects: behavior, halting conditions, evaluator variants, parameter details, and return value structure (output schema exists). It is complete and leaves no major gaps.

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

Parameters5/5

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

Schema description coverage is 0%, meaning the schema lacks parameter descriptions. The description compensates fully with detailed 'Args' section explaining each parameter, including defaults and behavior. This adds significant meaning beyond the bare 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 clearly states the tool's purpose: 'Iteratively refine an agent's output until an evaluator is satisfied.' It explains the iterative process and distinguishes it from siblings like chain or map by emphasizing evaluator-based refinement.

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 explicit guidance on when to use the tool (e.g., for iterative refinement with an evaluator) and describes evaluator forms and halting conditions. However, it does not explicitly state when not to use it or provide alternative tools.

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

list_governor_specsA

List all registered LLM-governed governors.

Returns each governor's name, description, model, and a preview of its spec.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 full burden. It states the return fields but does not explicitly mention read-only nature, pagination, or other behavioral traits. Inference is possible but not explicit.

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 with no fluff. First sentence clearly states purpose, second adds return details. Efficient and front-loaded.

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 parameterless list tool with an output schema, the description adequately explains the purpose and return. Could mention pagination or ordering but is generally complete.

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?

No parameters exist, so baseline is 4. Description adds value by specifying the return fields (name, description, model, preview), which goes 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?

Description explicitly states 'List all registered LLM-governed governors' with a clear verb and resource. It distinguishes from sibling 'list_sandbox_specs' by specifying 'governors' vs 'sandbox'.

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?

No explicit when-to-use or when-not-to-use guidance. While the purpose is clear, the description does not contrast with alternatives or provide context for when to choose this over sibling tools like 'save_governor_spec'.

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

list_pipelinesA

List recent pipeline runs and their current status.

Scans /tmp/swarm-mcp/ for pipeline-status.json files and returns a summary of all known runs, sorted by last_updated descending. Also annotates which runs have live threads in the current process.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description bears the full burden. It discloses scanning a specific directory, returning sorted summaries, and annotating live threads. It does not mention side effects or permissions, but for a read-only list tool, this is adequate.

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?

Three sentences covering purpose, source, and behavior. Front-loaded with main action. Could be slightly more concise, but no wasted words.

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 zero parameters and presence of an output schema (not shown but noted), the description covers all essential aspects: what it lists, how it retrieves data, sorting, and additional annotation. No gaps detected.

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?

There are zero parameters, so per guidelines baseline is 4. The description doesn't need to add parameter info, and it doesn't repeat anything from 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 clearly states it lists pipeline runs with status, specifies file source and sorting order, and distinguishes from siblings like pipeline_status by focusing on recent runs.

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 explains what the tool does but provides no guidance on when to use it versus alternatives like pipeline_status or pipeline_kill. Usage context is implied but not explicit.

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

list_sandbox_specsA

List all saved sandbox specs from ~/.claude/sandboxes/.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations exist, so description carries full burden. It only states the directory location, omitting behaviors like error handling, sorting, or symlink following. Minimal disclosure.

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?

Single sentence that is direct and front-loaded. Every word contributes meaning without 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?

Given no parameters and an existing output schema, the description is nearly complete. It could mention edge cases like missing directory, but overall adequate for a simple list tool.

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?

No parameters exist, and schema coverage is 100%. The description adds no parameter details, but with zero parameters the baseline expectation is met.

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 uses the specific verb 'list' and identifies the resource as 'saved sandbox specs' with an explicit file path. It clearly distinguishes from sibling tools like 'list_governor_specs' and 'save_sandbox_spec'.

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 use this tool versus alternatives (e.g., other list tools). No context on prerequisites or exclusions is provided.

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

list_type_registryA

List all registered types from ~/.claude/types/.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, and the description only states the action without disclosing behavioral traits like being read-only, permissions needed, or side effects. The simplicity of listing might imply low risk, but transparency is minimal.

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, efficient sentence with no wasted words. It is front-loaded and immediately communicates the tool's purpose.

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 simple list operation with no parameters and an existing output schema, the description is complete. It sufficiently explains the tool's action and source context.

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 no parameters, and the schema coverage is 100%. The description adds value by specifying what is listed (registered types) and the source directory, providing context beyond the empty 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 'List all registered types from ~/.claude/types/.' clearly states the action (list) and the resource (registered types from a specific path). It distinguishes itself from sibling tools that perform other operations like get_type_definition or inspect.

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 is provided on when to use this tool versus alternatives such as get_type_definition. The description lacks context about prerequisites or exclusions.

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

mapA

Apply a prompt template to each input in parallel. Use {input} as the placeholder.

Args: prompt_template: Prompt template with {input} placeholder(s). inputs: JSON array of input strings: ["input1", "input2", ...]. sandbox: Named sandbox spec or inline JSON. network: Whether containers have network access (default: true — needed for API calls). tools: Comma-separated list of allowed Claude tools. model: Claude model to use (default: sonnet). timeout: Max execution time per agent in seconds (default: 120). max_concurrency: Max agents running simultaneously (default: 5). system_prompt: System prompt injected via --system-prompt. claude_md: Project instructions written to workspace CLAUDE.md. output_schema: JSON schema string for structured output. mcps: JSON array of MCP server names to attach. effort: Effort level: low, medium, high, max.

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_templateYes
inputsYes
sandboxNo
networkNo
toolsNoRead,Write,Glob,Grep,Bash
modelNosonnet
timeoutNo
max_concurrencyNo
system_promptNo
claude_mdNo
output_schemaNo
mcpsNo
effortNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations exist, so the description carries full burden. It discloses key behaviors: parallel execution, defaults (model, network, tools, timeout, concurrency), and that network=true is needed for API calls. Lacks warnings about cost or resource implications.

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 begins with a concise one-sentence purpose, followed by a well-structured argument list. Every sentence adds value, with no redundancy or fluff.

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 13 parameters and an output schema, the description covers all necessary aspects: parallel execution, defaults, allowed tools, and optional settings. The output schema exists, so return values need not be explained. The tool's complexity is fully addressed.

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

Parameters5/5

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

Schema coverage is 0%, yet the description's 'Args' section explains every parameter with types, defaults, and context (e.g., 'inputs: JSON array of input strings', 'network: default: true — needed for API calls'). This adds substantial meaning beyond the raw 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 clearly states 'Apply a prompt template to each input in parallel' which is a specific verb+resource, and the placeholder '{input}' clarifies usage. This differentiates from siblings like chain and map_reduce.

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 parallel processing but does not explicitly contrast with alternatives like chain (sequential) or map_reduce (with reduction). No when-not-to-use guidance is given.

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

map_reduceA

Map a prompt over inputs in parallel, then reduce results into one — all in a single call. Fan-out then synthesise: map produces N results, reduce consumes them, no manual plumbing.

Args: prompt_template: Prompt template with {input} placeholder(s). inputs: JSON array of input strings: ["input1", "input2", ...]. synthesis_prompt: Instructions for how to synthesise the map results. sandbox: Named sandbox spec or inline JSON (used for map agents). network: Whether containers have network access (default: true — needed for API calls). tools: Comma-separated list of allowed Claude tools for map agents. model: Claude model for map agents (default: sonnet). reduce_model: Claude model for the reduce agent (default: same as model). timeout: Max execution time per agent in seconds (default: 120). max_concurrency: Max map agents running simultaneously (default: 5). system_prompt: System prompt for map agents. reduce_system_prompt: System prompt for the reduce agent. output_schema: JSON schema for structured reduce output. mcps: JSON array of MCP server names for map agents. effort: Effort level for map agents.

ParametersJSON Schema
NameRequiredDescriptionDefault
prompt_templateYes
inputsYes
synthesis_promptYes
sandboxNo
networkNo
toolsNoRead,Write,Glob,Grep,Bash
modelNosonnet
reduce_modelNo
timeoutNo
max_concurrencyNo
system_promptNo
reduce_system_promptNo
output_schemaNo
mcpsNo
effortNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

No annotations, but description covers parallel execution, defaults for various parameters, and output schema. Omits edge cases like agent failures or cancellation.

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?

Opening sentences are concise and front-loaded. Parameter list is clear but long; could be more structured (e.g., required first).

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?

Covers workflow, all parameters, defaults, and output schema. Lacks examples or error handling behavior, but sufficient for a complex tool with no annotations.

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?

All 15 parameters are described with one-line explanations adding meaning beyond names. Some descriptions are vague (e.g., effort) but overall good given 0% schema description 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 clearly states the tool combines map and reduce in one call, explaining the fan-out and synthesis process. It distinguishes from siblings like map or reduce alone.

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

Usage Guidelines4/5

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

Provides clear context for when to use (fan-out then synthesize) but lacks explicit when-not-to-use or direct comparison to separate map+reduce calls.

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

parA

Run multiple Claude agents in parallel. Each task can have its own config.

Args: tasks: JSON array of task objects. Each supports all sandbox fields (prompt, model, tools, sandbox, system_prompt, claude_md, output_schema, mcps, effort, etc.). max_concurrency: Max agents running simultaneously (default: 5).

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes
max_concurrencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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

No annotations exist, so the description must disclose behavior. It covers the core parallel execution and default concurrency, but lacks details on failure handling, timeouts, resource limits, or result aggregation, which are important for a parallel execution 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 very concise: a two-sentence overview followed by parameter descriptions. It is front-loaded with the main purpose and every sentence adds value without redundancy.

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's complexity (parallel execution) and that an output schema exists, the description should explain what the tool returns. It omits return value details, error behavior, and concurrency limits beyond the default, leaving gaps for an agent.

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 0%, but the description adds rich semantics: explains that 'tasks' is a JSON array supporting all sandbox fields and lists examples, and clarifies 'max_concurrency' default. This greatly exceeds the minimal schema.

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

Purpose4/5

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

The description clearly states the tool runs multiple Claude agents in parallel with independent configs. It distinguishes from siblings like 'chain' or 'map' through the parallel execution aspect, but does not explicitly contrast with similar tools.

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 for parallel tasks with custom configs but does not provide explicit guidance on when to use this tool versus alternatives like 'map' or 'race'. No when-not-to-use or preconditions are mentioned.

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

pipelineA

Launch a pipeline in the background and return immediately.

The pipeline runs asynchronously in a daemon thread. Use pipeline_status(run_id) to poll progress, and pipeline_kill(run_id) to stop it.

The definition is a JSON object or a pipeline name (loaded from registered project pipelines/ directories or ~/.claude/pipelines/).

Pipeline format: { "name": "optional-name", "sandbox": "optional-default-sandbox", "steps": [ {"id": "step-0", "prompt": "...", "model": "sonnet", "sandbox": "...", ...}, {"id": "test", "prompt": "Run tests", "tools": "Bash", "on_fail": "fix"}, {"id": "fix", "prompt": "Fix failing tests", "tools": "Read,Edit,Bash", "condition": "prev.error", "next": "test", "max_retries": 3} ] }

Step fields: prompt (required), plus any sandbox fields (model, tools, system_prompt, etc.). Control flow: on_fail (step id to jump to on error, or {"governor": "name"} for LLM-governed recovery — see save_governor_spec), on_success ({"governor": "name"} for LLM-governed continuation), next (jump after success), condition ("prev.error" = only run if previous failed), max_retries, retry_if ({target_step: keyword} — jump if output contains keyword). Any unhandled failure terminates the pipeline with status="broken".

Args: definition: Pipeline name (loaded from ~/.claude/pipelines/.json) or inline JSON definition. resume: Resume a previous run. Format: "run_id" or "run_id/step_id". Reuses the shared directory from the previous run. If step_id is given, skips to that step. If only run_id, resumes from the step that failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
definitionYes
resumeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

No annotations provided, so description fully covers behavior: asynchronous daemon thread, control flow fields (on_fail, condition, max_retries), resume semantics, and termination on unhandled failure. Comprehensive.

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?

Well-structured with clear sections, bullet points for pipeline format, and front-loaded summary. Slightly lengthy but justified by complexity.

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 complexity, no annotations, and presence of output schema, the description is thorough: covers input, async behavior, control flow, error handling, resume, and references to other tools. No gaps.

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

Parameters5/5

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

Schema coverage is 0%, but description richly explains both parameters: 'definition' can be name or inline JSON with detailed format; 'resume' format and behavior for resuming from run_id or step_id. Adds significant value.

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?

Clearly states the tool launches a pipeline asynchronously and returns immediately. Distinguishes from sibling tools like pipeline_status and pipeline_kill by referencing them for monitoring/stopping.

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 describes when to use (async launch), references complementary tools, and explains control flow behavior. Lacks explicit when-not-to-use or comparison with synchronous alternatives like 'run'.

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

pipeline_artifactsA

List artifacts produced by a pipeline run.

Without step_id: lists the /shared/ directory contents (inter-step files) plus a summary of each step's output directory.

With step_id: lists that specific step's output directory in detail, including file sizes. Use unwrap(ref) or Read() to view file contents.

Args: run_id: The pipeline run ID. step_id: Optional step ID to inspect. If omitted, lists shared/ and all steps.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes
step_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

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

No annotations exist, so the description should disclose behavioral traits. It explains the listing behavior (shared/ vs step outputs, file sizes) but does not explicitly state it is read-only, safe, or mention any side effects. The behavioral info 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 concise and well-structured: a single-sentence intro, followed by two clear paragraphs for the two usage modes. Every sentence adds value, and the structure is front-loaded and easy to parse.

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 tool's moderate complexity (two modes, output schema exists), the description covers all necessary aspects: parameters, usage modes, and hints for next steps. It does not need to detail the output schema since it is provided separately.

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

Parameters5/5

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

With 0% schema coverage, the description fully explains both parameters: run_id (required) and step_id (optional, with effects). It details the difference in behavior between providing and omitting step_id, adding significant 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 clearly states the tool lists artifacts from a pipeline run, with two distinct modes (with/without step_id). It distinguishes from sibling tools like pipeline_status and unwrap/Read, making its purpose 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 when to use each mode and suggests using unwrap(ref)/Read() to view contents. However, it does not explicitly state when not to use this tool or mention any prerequisites, though context is clear.

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

pipeline_killA

Kill a running pipeline and all its Docker containers.

Sets the pipeline's stop event (so the loop exits cleanly after the current step) and immediately kills all Docker containers associated with the run.

Args: run_id: The pipeline run ID to kill.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/5

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

Discloses important behavioral traits: sets a stop event for clean loop exit and kills all Docker containers. With no annotations, this bears the full burden of transparency and does so adequately, though it lacks detail on side effects like irreversible data loss.

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?

Concise and front-loaded with the main purpose. The Args section is structured but embedded in the description, making it slightly less clean. However, every sentence adds 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?

Given the simple action (kill) and availability of an output schema (not shown), the description covers the essential behavior and parameter. It does not need to explain return values.

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?

Only one parameter (run_id) with 0% schema coverage. The description adds meaning by stating 'The pipeline run ID to kill,' clarifying the purpose beyond the schema's type and title.

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 ('Kill') and the resource ('a running pipeline and all its Docker containers'). This is specific and distinguishes it from sibling tools like pipeline_status or pipeline_artifacts.

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 explicit guidance on when to use this tool versus alternatives. The description does not mention when not to use it or provide context for decision-making among related pipeline tools.

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

pipeline_statusA

Return the current status of a running or completed pipeline.

Reads /tmp/swarm-mcp//pipeline-status.json and returns its contents. The status file is written after each step completes.

Args: run_id: The pipeline run ID returned by the pipeline() tool.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries full burden and clearly explains it reads a file (non-destructive), specifies the file path, and notes when the file is updated. This provides sufficient behavioral context.

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

Conciseness5/5

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

The description is concise with three short sentences, front-loading the purpose, and provides necessary details without unnecessary fluff.

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 the tool's simplicity (1 param, output schema present), the description adequately covers purpose, behavior, and parameter meaning. Minor omission: no mention of possible errors, but not critical for a status check.

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

Parameters4/5

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

Schema description coverage is 0%, but the description explains the run_id parameter as 'The pipeline run ID returned by the pipeline() tool.', adding essential context beyond the schema's type-only definition.

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 tool returns the current status of a running or completed pipeline, using a specific verb ('Return') and resource ('status'). It distinguishes itself from sibling tools like pipeline_kill and pipeline_artifacts.

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 indicates the tool is used after starting a pipeline via the pipeline() tool, and mentions the status file is written after each step, implying polling usage. It does not explicitly state when not to use it, but context from sibling tools makes the use case clear.

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

raceA

Run multiple approaches in parallel, return the first to succeed.

All tasks start simultaneously. As soon as one completes without error, its ref is returned. Remaining tasks are abandoned (their containers are killed). Use for speculative execution or when multiple strategies might work.

Args: tasks: JSON array of task objects (same format as par). max_concurrency: Max agents running simultaneously (default: 5).

ParametersJSON Schema
NameRequiredDescriptionDefault
tasksYes
max_concurrencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Despite no annotations, the description discloses key behaviors: tasks run simultaneously, first success returns its ref, remaining tasks are abandoned and containers killed. This provides essential behavioral context.

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?

Well-structured with a clear summary line and bullet-list args. Every sentence adds value, though could be slightly more concise; overall efficient.

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-param tool with no enums, the description covers the race pattern, parallel execution, and abandonment. Output schema exists but is not shown; 'ref' is mentioned but could be clarified, but given sibling context it is acceptable.

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?

With 0% schema description coverage, the description adds meaning by referencing the task format from 'par' and explaining max_concurrency as controlling simultaneous agents. This compensates for the schema 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?

The description clearly states the tool runs multiple approaches in parallel and returns the first to succeed, with specific verbs and resource. It distinguishes from siblings like 'par' by highlighting the race condition and abandonment of remaining tasks.

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 recommends use for speculative execution or when multiple strategies might work. Implies not to use when all results are needed, but does not explicitly mention alternatives like 'par' for collecting all results, though the behavior difference is clear.

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

reduceA

Synthesise multiple results into one. Accepts plain strings or structured AgentResult objects (auto-extracts .text fields), so you can pipe par/map output directly without manual unwrapping.

Args: results: JSON array — either plain strings ["text1", "text2"] or AgentResult objects [{"text": "...", ...}]. synthesis_prompt: Instructions for how to synthesise the results. sandbox: Named sandbox spec or inline JSON. network: Whether the container has network access (default: true — needed for API calls). tools: Comma-separated list of allowed Claude tools. model: Claude model to use (default: sonnet). timeout: Max execution time in seconds (default: 120). mcps: JSON array of MCP server names to attach to the reducer agent. system_prompt: System prompt for the reducer agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
resultsYes
synthesis_promptYes
sandboxNo
networkNo
toolsNoRead,Write,Glob,Grep,Bash
modelNosonnet
timeoutNo
system_promptNo
mcpsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

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

Discloses auto-extraction of .text fields and input handling, but does not mention that it calls a language model or potential network usage (though parameter descriptions cover defaults). Without annotations, more explicit behavioral cues would help.

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?

Concise intro followed by a clear parameter list. No redundant sentences; efficiently front-loads purpose. Appropriate length for the tool's complexity.

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?

Covers all parameters and core behavior. With an output schema provided, return values are handled. Could explicitly note that output is a single synthesized string and that model usage may incur costs.

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

Parameters5/5

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

Schema has 0% description coverage, but the description provides thorough explanations for all 9 parameters, including format clarifications (e.g., results as JSON array, sandbox spec), defaults, and allowed values, fully compensating for schema gaps.

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?

Clearly describes the tool as synthesizing multiple results into one, specifying input types (plain strings or AgentResult objects) and noting it works with output from par/map, distinguishing it from siblings.

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?

Implies usage after par/map, but does not explicitly contrast with alternatives like map_reduce or state when not to use it. Provides clear context but no exclusions.

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

retryA

Run a single agent with automatic retries on failure.

If declared_type is set, retries until the output validates as that type (not just until exit code 0). Each attempt receives the prior error as context.

Args: prompt: The task prompt. max_attempts: Maximum number of attempts (default: 3). sandbox: Named sandbox spec or inline JSON. model: Claude model (default: sonnet). timeout: Timeout per attempt (default: 120). declared_type: If set, validates output and retries if not VALID. mcps: JSON array of MCP server names to attach.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
max_attemptsNo
sandboxNo
modelNosonnet
timeoutNo
declared_typeNo
mcpsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Discloses key behavioral traits: retries on failure, prior error as context, type validation retry logic. Lacks details on final failure behavior, side effects, or idempotency. With no annotations, description is decent but not fully comprehensive.

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 stated upfront, followed by a bullet-like Args list. No redundant sentences, but could be slightly more concise by integrating defaults inline.

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?

Covers main functionality but omits behavior after all retries exhausted, error handling, and does not reference output schema. For a 7-param tool with output schema, more completeness is expected.

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

Parameters3/5

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

Schema description coverage is 0%, but description provides brief explanations for each parameter, e.g., 'The task prompt' for prompt. Adds some meaning but lacks detail on constraints or formats.

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?

Clearly states the tool runs a single agent with automatic retries on failure, and explains the type validation retry condition. Distinguishes from siblings like 'run' (no retries) and 'chain' (multiple agents).

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

Usage Guidelines4/5

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

Provides clear context for usage: when retries are needed or type validation is desired. However, does not explicitly state when not to use or compare to alternatives like 'run' or 'beam'.

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

runA

Run a single Claude agent in a Docker container. Returns the agent's text output and metadata.

Args: prompt: The task prompt for the agent. sandbox: Named sandbox spec (from ~/.claude/sandboxes/) or inline JSON. Overrides below are merged on top. network: Whether the container has network access (default: true — needed for API calls). tools: Comma-separated list of allowed Claude tools (default: Read,Write,Glob,Grep,Bash). mounts: JSON array of mount specs: [{"host_path": "...", "container_path": "...", "readonly": true}]. model: Claude model to use (default: sonnet). Options: haiku, sonnet, opus. timeout: Max execution time in seconds (default: 120). system_prompt: System prompt injected via --system-prompt (role, persona, instructions). claude_md: Project instructions written to workspace CLAUDE.md. output_schema: JSON schema string for structured output (--json-schema). mcps: JSON array of MCP server names to attach: ["database-mcp", "whatsapp"]. effort: Effort level: low, medium, high, max. max_budget: Explicit USD budget cap. env_vars: JSON object of environment variables: {"KEY": "value"}. input_files: JSON object of files to inject: {"/path": "content"}. memory: Docker memory limit (e.g. "2g"). cpus: Docker CPU limit (e.g. 2.0). gpu: Pass --gpus all to Docker for GPU access (default: false). Acquires the "gpu" resource pool (capacity 1). resources: JSON array of named resource pools to acquire before execution (e.g. '["gpu", "database"]'). Agents wait for all resources. Configure capacity via SWARM_RESOURCE_= env vars. input_type: Natural language type describing what the agent receives (e.g. "research notes", "[code-review]"). output_type: Natural language type describing what the agent must produce (e.g. "[mcp-server] with [test-suite]").

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYes
sandboxNo
networkNo
toolsNoRead,Write,Glob,Grep,Bash
mountsNo[]
modelNosonnet
timeoutNo
system_promptNo
claude_mdNo
output_schemaNo
mcpsNo
effortNo
max_budgetNo
env_varsNo
input_filesNo
memoryNo
cpusNo
gpuNo
resourcesNo
input_typeNo
output_typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description must convey behavioral traits. It details resource acquisition, GPU access, and Docker limits, but does not explicitly state whether the operation is destructive or cleans up containers. It mentions returning 'text output and metadata' but not error handling or side effects like filesystem modifications.

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

Conciseness3/5

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

The description is verbose, spanning multiple paragraphs with per-parameter bullet points. While organized, it could be more concise by front-loading key behavioral traits and reducing parameter explanations that could be derived from defaults. It earns space but loses efficiency.

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 the tool's complexity (21 parameters, Docker orchestration), the description covers purpose, parameters, and resource management comprehensively. It lacks details on return format beyond 'text output and metadata' and does not address error or cancellation handling, but remains largely complete.

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

Parameters5/5

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

With 0% schema coverage, the description fully compensates by explaining each of the 21 parameters with default values, types, and examples (e.g., mcps: 'JSON array of MCP server names to attach: ["database-mcp", "whatsapp"]'). This adds significant meaning 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 'Run a single Claude agent in a Docker container.' indicating a specific verb and resource. The word 'single' hints at distinction from sibling tools like 'chain' or 'pipeline' that handle multi-step workflows, though it does not explicitly contrast them.

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?

The description provides no guidance on when to use this tool versus alternatives. It does not specify scenarios where 'run' is preferable (e.g., one-off tasks) or when to avoid it (e.g., multi-step orchestration). Sibling tools like 'chain', 'pipeline', or 'map' are not mentioned.

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

save_governor_specA

Register an LLM-governed governor for use in pipeline control flow.

Governors are evaluated at trigger points (on_fail, on_success) to decide the continuation. The spec is a natural language description of what the governor should decide. The governor LLM returns one of:

  • next — proceed normally

  • jump(target) — jump to a named step

  • halt — stop the pipeline cleanly

  • broken(reason) — stop and write broken status (visible via pipeline_status)

  • patch_pipeline — deep-merge patch the pipeline definition and continue

Each continuation also carries a free-form context dict that accumulates across the pipeline and is written to /shared/governor-context.json, plus a confidence score in [0.0, 1.0].

Reference a governor in a pipeline step: "on_fail": {"governor": "Failure"} "on_success": {"governor": "Validation"}

Args: name: Unique governor name used to reference it from pipeline steps. spec: Natural language description telling the LLM what to decide. description: One-line summary shown in list_governor_specs. model: Claude model for evaluation (default: haiku). beam_width: Self-consistency beam width. When >1 the harness samples the governor N times in parallel and commits to the confidence-weighted majority decision. Losing candidates are preserved on the winner's alternatives field for inspection. Default 1 (no beam).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
specYes
descriptionNo
modelNoclaude-haiku-4-5-20251001
beam_widthNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It details the beam_width behavior (parallel sampling, confidence-weighted majority, alternatives field) and mentions context dict accumulation. It does not specify overwrite behavior or error handling, but the core behavioral traits are 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 well-structured: a one-line purpose, followed by details on governor decisions, then a clear Args section for parameters. Every sentence adds value, and the most critical information is front-loaded. No unnecessary words or repetition.

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?

Despite the tool's complexity (5 parameters, beam_width behavior), the description omits the return value of the save operation and does not clarify whether re-registering an existing name overwrites or errors. With an output schema present (but not shown), the agent might infer the return type, but explicit mention would improve completeness.

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

Parameters5/5

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

Schema description coverage is 0%, but the description fully compensates by explaining each parameter in the Args section: name (unique reference), spec (natural language), description (one-line summary), model (Claude variant with default), beam_width (self-consistency with detailed behavior). This adds rich semantic meaning beyond the bare 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 clearly states the tool's purpose: 'Register an LLM-governed governor for use in pipeline control flow.' It explains what a governor does, lists possible continuations, and shows how to reference it in pipeline steps. This distinguishes it from sibling tools like list_governor_specs, making the purpose 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 provides clear context for when to use the tool (defining a governor for pipeline steps) and explains the parameters and behavior. It does not explicitly state when not to use it or compare with alternatives, but the context is sufficient for an AI agent to understand usage.

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

save_sandbox_specA

Save a reusable sandbox spec to ~/.claude/sandboxes/.json.

Args: name: Name for the sandbox spec (e.g. "web-researcher", "code-reviewer"). spec: JSON object with sandbox fields: model, tools, mcps, system_prompt, claude_md, output_schema, effort, max_budget, mounts, workdir, input_files, network, memory, cpus, timeout, env_vars.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
specYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Without annotations, the description carries the full burden. It discloses the save location and lists spec fields, but does not mention overwrite behavior, validation, permissions, or side effects. The behavioral disclosure is adequate but not comprehensive.

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 well-structured: a one-sentence purpose followed by a clear bullet-point list of arguments. Every sentence adds value, and the most important information is front-loaded.

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 an output schema (assumed to cover return values), the description covers the action and parameters well. It lacks details on file overwriting or error conditions, but the spec field listing is thorough. Overall, it provides sufficient context for an agent.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It fully explains both parameters: 'name' with an example, and 'spec' with a list of all expected fields. This adds essential meaning beyond the bare 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 clearly states the verb 'Save' and the resource 'sandbox spec', specifying the exact file location. It distinguishes from siblings like 'save_governor_spec' (different spec type) and 'list_sandbox_specs' (different action).

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 the tool is for saving reusable sandbox configurations but provides no explicit guidance on when to use versus alternatives, nor when not to use it. Siblings include many unrelated tools, but no when-to-use or when-not-to-use context.

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

score_listA

Score and rank a list of existing refs against an evaluator.

This is the missing piece for "generate N candidates, then pick the best" pipelines where the N candidates already exist as refs from an upstream combinator (map, par, etc.) — beam is the wrong shape because it fans out width-N proposers of the same prompt, whereas score_list takes N different outputs and ranks them.

The key infrastructure point: refs are resolved to their artifact text server-side, so callers do not need to pipe full artifact text through tool parameters. This clears the ~4KB param-size wall you would otherwise hit scoring 6+ medium-length artifacts through map.

Evaluator forms are the same as iterate / beam:

  • validate:<type> — LLM validator against a registered type

  • score:<criterion> — ad-hoc haiku rubric

  • exec:<shell-cmd> — ground-truth shell command (exit code scoring)

Each ref is tagged with a search stamp carrying its score and beam_rank. Refs outside the top-k are marked pruned=True with a reason pointing at the beam cut. top_k=0 means return all without pruning.

Args: refs: JSON array of refs — either ["run_id/agent_id", ...] or [{"ref": "run_id/agent_id"}, ...]. Both forms are accepted. evaluator: Scoring directive (validate:<type>, score:<criterion>, or exec:<cmd>). top_k: How many top-scoring refs to surface as winners. 0 means rank-only, no pruning stamp applied. max_concurrency: Upper bound on parallel evaluator calls (default: 5).

Returns: JSON with run_id, evaluator, total, top_k, winners (list of winning ref strings), and ranked (the full per-ref trace: rank, ref, score, verdict, issues, reason).

ParametersJSON Schema
NameRequiredDescriptionDefault
refsYes
evaluatorYes
top_kNo
max_concurrencyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A5/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. It discloses that refs are resolved server-side, each ref gets a 'search' stamp with score and 'beam_rank', and out-of-top-k refs are marked 'pruned=True'. It also describes the return structure including run_id, winners, and ranked trace. All behavioral traits are clearly explained.

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 well-structured and front-loaded: a one-sentence purpose, then context and infrastructure points, evaluator forms, args, and returns. Every sentence adds value, and there is no wasted text. It is appropriately sized for the tool's complexity.

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 that an output schema exists, the description does not need to elaborate on return values, but it still summarizes the return JSON. It covers purpose, usage contrast, behavioral details, parameter semantics, and returns. For a tool with this complexity and many siblings, it is complete and leaves no gaps.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must compensate. It explains each parameter in detail: 'refs' can be an array of strings or objects, 'evaluator' supports three forms, 'top_k' controls pruning (0 means rank-only), and 'max_concurrency' has a default of 5. This adds significant 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 clearly states the tool scores and ranks a list of existing refs against an evaluator. It distinguishes itself from sibling 'beam' by explaining that 'beam' fans out proposers for the same prompt, while 'score_list' handles different outputs. This provides specific verb+resource and differentiation.

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 explicitly tells when to use this tool: for pipelines where N candidates already exist as refs, and contrasts it with 'beam' as the wrong shape. It explains evaluator forms, top_k behavior, and server-side ref resolution to overcome parameter size limits. This provides clear context and alternatives.

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

unwrapA

Unwrap an agent result ref — writes the full text to a file and returns the path.

All combinators return refs (metadata without text). Use unwrap to extract the text when you need it. The text is written to a .md file alongside the result, so you can Read() it, Grep it, or pass it to other tools without bloating the MCP protocol.

Args: ref: A ref string like "run_id/agent_id", or a JSON object with a "ref" field.

ParametersJSON Schema
NameRequiredDescriptionDefault
refYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description covers key behaviors: writes text to a .md file, returns the path, and explains why (to avoid bloating MCP protocol). It does not mention error handling or permissions, but the main actions 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?

The description is concise and well-structured: a one-sentence summary in the first line, followed by context and parameter details. Every sentence adds value without redundancy.

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 tool's simplicity (one parameter, output schema exists), the description is complete. It explains the purpose, usage, behavior, and parameter format. The existence of an output schema means return values don't need elaboration.

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

Parameters5/5

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

Schema coverage is 0%, yet the description provides detailed semantics for the single parameter 'ref': 'A ref string like "run_id/agent_id", or a JSON object with a "ref" field.' This fully compensates for the schema's lack of 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: 'Unwrap an agent result ref — writes the full text to a file and returns the path.' It distinguishes from sibling tools like 'wrap' and 'run' by explaining that combinators return refs and unwrap extracts the text.

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 when to use this tool: after combinators that return refs. It says 'Use unwrap to extract the text when you need it,' implying alternatives like not unwrapping if text isn't needed. It could be more explicit about when not to use it, but the guidance is clear.

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

validateA

Validate an artifact against a declared type. Runs a type-checker agent that inspects the artifact and reports VALID/PARTIAL/INVALID with per-criterion results.

Use this after a pipeline step to verify the output matches expectations. If validation fails, you know which agent to blame and can retry.

Args: artifact: Description of what to validate — e.g. the agent's output text, a file path, or a ref {"ref": "run_id/agent_id"}. declared_type: The type to validate against — either a type name (e.g. "mcp-server") or inline natural language description. sandbox: Named sandbox spec or inline JSON for the validator agent. model: Model for the validator (default: sonnet — needs to be good at analysis). timeout: Timeout for the validation agent.

ParametersJSON Schema
NameRequiredDescriptionDefault
artifactYes
declared_typeYes
sandboxNo
modelNosonnet
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

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 full burden. It explains the tool runs an agent, returns per-criterion results, and mentions retry. However, it lacks details on side effects, auth requirements, rate limits, or resource usage, which is a gap for a validation tool.

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

Conciseness4/5

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

The description is moderately sized with a clear paragraph and a bulleted Args list. Every part adds value, though it could be slightly more concise by trimming redundant phrases like '— e.g.' examples.

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 the presence of an output schema (though not shown), the description need not repeat return values. It covers the essential context: when to use, what it does, and parameter semantics. It could mention error handling or edge cases for completeness.

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

Parameters5/5

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

The schema has 0% coverage, but the description compensates with a detailed Args section explaining each parameter: artifact (examples like text or file path), declared_type (type name or natural language), sandbox, model (with default), timeout. This adds significant 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 clearly states the tool's purpose: validate an artifact against a declared type, running a type-checker agent and returning VALID/PARTIAL/INVALID results. It includes a specific use case (after a pipeline step) and distinguishes from siblings implicitly by focusing on validation.

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 explicitly says 'Use this after a pipeline step to verify the output matches expectations' and advises what to do if validation fails. It does not provide direct comparison with sibling tools, but the usage context is clear.

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

wrapA

Wrap a file or directory into the swarm ref system.

This is how you bring external objects INTO the monadic context. The wrapped file gets a ref that can be passed to any combinator.

Args: path: Absolute path to a file or directory on the host.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description bears full transparency burden. It discloses that the wrapped file gets a ref and can be passed to combinators, but omits details like side effects, required permissions, or whether the original file is modified.

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 extremely concise—two sentences plus an Args line. The first sentence clearly states the purpose, and the second adds context. Every sentence is essential with no waste.

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 the tool's simplicity (one parameter) and the presence of an output schema (though not visible), the description covers the core behavior. It could mention what the ref looks like or that the original remains unchanged, but it is sufficient for most agents.

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 single parameter 'path' has no schema description (0% coverage). The description adds meaning by specifying it must be an absolute path to a file or directory, fully compensating for the schema gap.

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

Purpose4/5

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

The description clearly identifies the action (wrap a file/directory into the swarm ref system) and the resource (external objects). It implicitly distinguishes from siblings like 'unwrap' and 'wrap_project', but could be more precise about the monadic context.

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 statement 'This is how you bring external objects INTO the monadic context' provides clear context for when to use the tool. However, it does not explicitly state when not to use it or mention alternative tools, leaving some ambiguity.

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

wrap_projectA

Register a project directory's pipelines, sandboxes, and types with the swarm.

Looks for pipelines/, sandboxes/, types/ subdirectories and adds them to the search paths. After wrapping, named resources from the project are discoverable by all swarm tools (pipeline, run, validate, etc.).

Args: project_dir: Absolute path to a project root containing pipelines/, sandboxes/, and/or types/ directories.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_dirYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

Since no annotations are present, the description carries the full burden. It explicitly describes the side effect of adding subdirectories to search paths. It could mention potential overwrite behavior or authentication needs but is otherwise transparent.

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 concise and front-loaded with the main purpose. The args section adds clarity without redundancy. It could integrate the args inline but remains efficient.

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 the single parameter and presence of an output schema, the description covers the key aspects: what it does, what directories it looks for, and the outcome. It could mention validation of directory structure or prerequisites for completeness.

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 description includes an 'Args' section that fully documents the 'project_dir' parameter, specifying it must be an absolute path to a project root. This adds substantial meaning beyond the input schema which only provides a title and type.

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 tool registers a project directory's pipelines, sandboxes, and types with the swarm, specifying the action, resource, and effect. It distinguishes itself from siblings like 'wrap' by focusing on project directories.

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 after wrapping, resources become discoverable by all swarm tools, providing clear context for when to use it. However, it does not explicitly mention when not to use it or provide alternatives to siblings.

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. Dates show when Glama detected each change.

  1. 33 tool updatesv0.1.1
    • First observedbeam
    • First observedchain
    • First observedclassify
    • First observeddecrypt
    • First observedencrypt
    • First observedfilter
    • First observedget_type_definition
    • First observedguard
    • First observedhunt
    • First observedinspect
    • First observediterate
    • First observedlist_governor_specs
    • First observedlist_pipelines
    • First observedlist_sandbox_specs
    • First observedlist_type_registry
    • First observedmap
    • First observedmap_reduce
    • First observedpar
    • First observedpipeline
    • First observedpipeline_artifacts
    • First observedpipeline_kill
    • First observedpipeline_status
    • First observedrace
    • First observedreduce
    • First observedretry
    • First observedrun
    • First observedsave_governor_spec
    • First observedsave_sandbox_spec
    • First observedscore_list
    • First observedunwrap
    • First observedvalidate
    • First observedwrap
    • First observedwrap_project

TDQS

A3.8/5.0
Disambiguation4/5

Most tools have distinct purposes, but there are some overlaps that could cause confusion, such as 'chain' vs 'pipeline' and 'map' vs 'map_reduce'. Descriptions help differentiate them, but an agent might struggle to pick the right one in some cases.

Naming Consistency3/5

Names follow snake_case, but the pattern is inconsistent: some are verbs (run, validate, wrap), some are nouns (beam, chain, map), and some are abbreviations (par). This lack of a unified naming convention reduces predictability.

Tool Count3/5

With 33 tools, the server is on the larger side. While each tool serves a specific purpose in a complex orchestration system, the count exceeds the typical 3-15 range, making it feel heavy but not extreme.

Completeness4/5

The tool set covers execution, evaluation, state management, type system, pipeline management, and governance comprehensively. Minor gaps exist, such as lack of a general run listing tool, but overall the surface is broad and well-rounded.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/stiege/swarm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server