Skip to main content
Glama

squad-mcp

npm version ci license: Apache-2.0 website

Website: https://squad.devthinks.com.br/

MCP server that exposes the squad-dev workflow as deterministic tools, prompts, and resources. It classifies a task, scores its risk, picks an advisory squad of specialist reviewers, slices the changed files per agent, validates the plan, and consolidates the advisory verdicts. The host LLM (Claude Code, Cursor, Warp, Claude Desktop, …) orchestrates; squad-mcp provides the building blocks.

It also ships as a Claude Code plugin that bundles the MCP server, the slash commands (/squad:implement, /squad:review, /squad:question, /squad:debug, /squad:tasks, /squad:next, /squad:task, /squad:grillme, /squad:pipeline, /squad:inventory, /squad:stats, /brainstorm, /commit-suggest, /squad:enable-journaling), and the matching skills behind a single /plugin install.

Install

/plugin marketplace add ggemba/squad-mcp
/plugin install squad@gempack

The plugin bundles the MCP server plus the slash commands and skills (/squad:implement, /squad:review, /squad:question, /squad:debug, /squad:tasks, /squad:next, /squad:task, /squad:grillme, /squad:pipeline, /squad:inventory, /squad:stats, /brainstorm, /commit-suggest, /squad:enable-journaling). After install, restart Claude Code to pick up the new commands and the squad MCP server.

npm package (any MCP client)

npx -y @gempack/squad-mcp

The package exposes the squad-mcp binary and works with any MCP-capable client. Examples below.

Claude Desktop

%APPDATA%\Claude\claude_desktop_config.json (Windows) / ~/Library/Application Support/Claude/claude_desktop_config.json (macOS):

{
  "mcpServers": {
    "squad": {
      "command": "npx",
      "args": ["-y", "@gempack/squad-mcp"]
    }
  }
}

Cursor

.cursor/mcp.json (workspace-scoped) or global Cursor settings:

{
  "mcpServers": {
    "squad": {
      "command": "npx",
      "args": ["-y", "@gempack/squad-mcp"]
    }
  }
}

Warp

Settings → MCP servers → add. Command npx, args ["-y", "@gempack/squad-mcp"].

From source (development)

git clone https://github.com/ggemba/squad-mcp.git
cd squad-mcp
npm install
npm run build
node dist/index.js

Related MCP server: gitl

Your first /squad:implement in 60 seconds

After install, the plugin is silent until you invoke it. Drop into a repo with at least one staged or recently committed change and run:

/squad:implement add a /health endpoint that returns {"status":"ok"}

What happens, in order:

  1. Classification. compose_squad_workflow looks at your prompt + changed files and prints something like work_type: Feature, risk: Low, agents: [developer, qa].

  2. Depth resolution. It also picks an execution depth — quick, normal, or deep — and surfaces it as mode + mode_source on the output. Auto-detect rules: deep on risk == High / Security work / auth-money-migration signals; quick on Low-risk diffs with ≤5 files and no high-risk signals; normal otherwise. Pass --quick / --normal / --deep to override. If you force --quick on a high-risk diff, security is force-included and a structured mode_warning is set so the host can surface it.

  3. Plan. The skill drafts an implementation plan and sends it to tech-lead-planner for review (skipped in quick). You see the plan in chat.

  4. Gate 1. The skill stops and asks you to approve. Reply approved, go, or equivalent to proceed; anything else cancels.

  5. Implementation. After approval, the skill writes code. Never commits or pushes — that's your call.

  6. Advisory squad. In v1.5+ the advisory runs AFTER implementation against the actual diff, not a plan draft. Every selected agent (architect, dba, dev, qa, security, reviewer — depends on the selection; capped at 2 for quick, force-includes architect + security for deep) reviews in parallel and emits a findings list + a Score: NN/100.

  7. Consolidation. tech-lead-consolidator produces a verdict (APPROVED / CHANGES_REQUIRED / REJECTED) plus a scorecard like:

    SQUAD RUBRIC — weighted 82 / 100 (threshold 75)
    Application Code     ████████████████░░░░   82  ×18%  developer
    Testing & QA         ███████████████░░░░░   78  ×14%  qa

    The tech-lead-consolidator persona is skipped in quick mode; apply_consolidation_rules still runs to produce the verdict. If the verdict is CHANGES_REQUIRED / REJECTED, the reject-loop dispatches the implementer again against the delta.

Other commands to try once /squad:implement works:

  • /squad:review — same agents, but on an existing diff or PR (no implementation).

  • /squad:question <question> — fast read-only code Q&A. Spawns the code-explorer subagent to grep + excerpt the relevant lines and answers with file:line citations. Use it for "where is X defined?", "what calls Y?", "how does the auth flow work?". No plan, no gates, no implementation.

  • /squad:debug <issue> — read-only bug investigation. Takes a bug description + optional stack trace + repro steps, orients via code-explorer, then dispatches the debugger persona to emit N ranked hypotheses (1 on --quick, 3 on --normal, 5 with a cross-check pass on --deep) with file:line evidence and verification steps. The missing middle between /squad:question (lookup) and /squad:implement (fix).

  • /squad:tasks docs/prd.md — decompose a PRD into atomic tasks with confirmation before they land in .squad/tasks.json.

  • /squad:next — pick the next ready task; /squad:task 3 — work on a specific one.

  • /squad:grillme <plan> — Socratic plan validation. Grills your plan one question at a time against the project's domain language (CONTEXT.md) and prior decisions (ADRs in docs/adr/), and writes resolved terms back to both as it goes. Run it before /squad:implement to stress-test a plan; pass --no-write for a dry run.

  • /squad:pipeline <feature> — runs the six squad steps as one guided, human-gated sequence: brainstorm → grillme → tasks → next → implement → review. See Cradle-to-grave with /squad:pipeline below.

  • /squad:inventory <recipe> — codebase audit/inventory. Scans the repo for a named pattern (defined by a YAML "recipe pack") and emits a structured Markdown report cross-referenced with framework metadata (routes, handlers). Hybrid pipeline: a deterministic rg sweep does the file IO, then tiered LLM enrichment (Haiku tier-1, Sonnet escalation on requires_semantic rules or low confidence) classifies each finding. Bundled pack v1: php-inline-sql (inline SQL in PHP/Laravel). Writes one MD to ./docs/inventory/<recipe>-<date>.md by default; --out <path> overrides (accepts Obsidian vault paths). Reads source; never edits code.

  • /brainstorm <topic> — exploratory Q&A, no code.

  • /commit-suggest — generate a Conventional Commits message for staged changes.

  • /squad:stats — observability dashboard over .squad/runs.jsonl. Bar charts (verdict mix, score buckets), Unicode sparkline trend, per-agent breakdown of avg wall-clock and estimated tokens. Read-only; never writes. Flags: --quick (last 7d), --thorough (full history + health panel), --since <ISO>, --last <N>, --no-color. Token figures are estimates (chars ÷ 3.5).

Stuck? Check INSTALL.md → Troubleshooting. The most common failures (Failed to reconnect to plugin:squad:squad, marketplace cache, SSH key) all have entries.

How it works

squad-mcp is a deterministic server — it makes no LLM calls of its own. The host LLM does all the reasoning; the server hands it building blocks (tools, prompts, resources) and the skills wire them into a workflow.

flowchart LR
  subgraph Host["Host LLM · Claude Code / Cursor / Warp / Claude Desktop"]
    SK["Skills<br/>/squad:implement · /review<br/>/pipeline · /stats · ..."]
    SA["Subagents<br/>architect · developer<br/>security · qa · ..."]
  end
  subgraph Server["squad-mcp server · deterministic, no LLM calls"]
    T["Tools<br/>classify · score_risk<br/>select_squad · consolidate"]
    P["Prompts<br/>orchestration<br/>advisory · consolidator"]
    R["Resources<br/>agent://...<br/>severity://..."]
  end
  SK -->|invoke tools| T
  SK -->|load| P
  SA -->|read role def| R
  T -->|verdict + rubric scorecard| SK

A single /squad:implement run threads two human gates — plan approval and a Blocker halt — so the squad never writes code you did not sign off on:

flowchart TD
  A["/squad:implement &lt;task&gt;"] --> B["classify · score risk · select squad · pick depth"]
  B --> C{"Gate 1<br/>plan approved?"}
  C -->|no| X1["stop — nothing written"]
  C -->|yes| D["advisory squad runs in parallel<br/>each agent emits Score 0-100"]
  D --> E{"Gate 2<br/>any Blocker?"}
  E -->|yes| X2["halt — ask the user"]
  E -->|no| F["implement the approved plan"]
  F --> G["consolidate → verdict + rubric scorecard"]
  G --> H{"verdict"}
  H -->|APPROVED| I["done — committing is your call"]
  H -->|CHANGES_REQUIRED / REJECTED| J["reject loop → re-review the delta"]
  J --> G

Depth (quick / normal / deep) auto-scales the run: quick caps the squad at 2 agents and skips the planner + consolidator personas; deep force-includes architect + security and raises the reject-loop ceiling. See Your first /squad:implement for the auto-detect rules.

Examples in practice

Every example is a single line you type into the host. The squad sizes itself from the prompt + the changed files — you only reach for a flag to override.

Low-risk feature — auto-detected quick:

/squad:implement add a /health endpoint that returns {"status":"ok"}

work_type: Feature · risk: Low · mode: quick (auto) · agents: [developer, qa] Planner skipped, 2-agent advisory, sub-30s feedback. Stops at Gate 1 for your approval.

Auth refactor — auto-detected deep:

/squad:implement refactor src/auth/jwt-validator to rotate signing keys

work_type: Security · risk: High · mode: deep (auto) · agents: [architect, security, developer, qa, reviewer] touches_auth fires → deep. Planner + consolidator personas run, reject-loop ceiling raised to 3.

Forcing --quick on a risky diff — the safety override:

/squad:implement --quick patch the refund amount rounding in src/billing/ledger.ts

mode: quick (user) · mode_warning set--quick is honoured but security is force-included as one of the 2 agents because touches_money fired. The host surfaces the mode_warning so the downgrade is never silent.

Review an existing PR and post the verdict:

/squad:review #42

Runs the advisory on PR #42's diff, renders the scorecard, then dry-runs the PR post — shows the exact request and the markdown body it would post, and waits for your go.

Fast read-only code Q&A — no plan, no gates:

/squad:question where is the rubric weighted score computed?

Spawns code-explorer, answers with file:line citations. Sub-second on --quick.

See where your runs went:

/squad:stats

Reads .squad/runs.jsonl and renders a cyan ANSI panel — verdict mix, score buckets, sparkline trend, per-agent token + wall-clock breakdown.

Cradle-to-grave with /squad:pipeline

Each squad skill runs standalone. /squad:pipeline chains them into one guided sequence for a feature going from idea to verified change, so you never have to remember what comes next or how to wire one step's output into the next:

flowchart LR
  BS["/brainstorm<br/>decide what to build"] --> GM["/squad:grillme<br/>stress-test the plan"]
  GM --> TK["/squad:tasks<br/>decompose into tasks"]
  TK --> NX["/squad:next<br/>pick the next task"]
  NX --> IM["/squad:implement<br/>build it"]
  IM --> RV["/squad:review<br/>review the change"]
/squad:pipeline add multi-currency support to the checkout flow

The pipeline is an executor that auto-invokes each sub-skill and halts only at explicit user-decision gates (proceed / adjust / skip / exit). Each time you invoke it, it:

  1. Reconstructs how far the feature has progressed from the conversation context (or the .squad/pipeline-state.json resume cache).

  2. Dispatches the next sub-skill via the Skill tool with arguments pre-filled and depth flags forwarded.

  3. Stops at each inter-phase gate to explain the decision you are about to make.

Sub-skills' own internal gates (e.g. /squad:implement Gate 1 plan approval, Gate 2 Blocker halt) keep firing as before — those remain in-skill human checkpoints. Reserved interruption commands (pipeline stop, pipeline skip, pipeline redo, pipeline back) break the auto-flow at any gate. The pipeline records no telemetry of its own; each sub-skill still records its own run, so /squad:stats aggregates them normally.

Flag

Purpose

--from <phase>

Enter the pipeline mid-sequence (brainstorm / grillme / tasks / next / implement / review). Skip the phases you have already done.

--quick / --normal / --deep

Forwarded as-is to every step the pipeline recommends.

# already brainstormed — jump straight to stress-testing the plan
/squad:pipeline --from grillme add multi-currency support to the checkout flow

# take a small change cradle-to-grave at quick depth
/squad:pipeline --quick fix the timezone bug in the daily report job

What it provides

Tools (deterministic, pure functions)

Tool

Purpose

detect_changed_files

Hardened git diff --name-status --no-renames for a workspace. Allowlisted refs, 10s timeout, 1MB stdout cap.

classify_work_type

Heuristic WorkType from prompt + paths (Feature / Bug Fix / Refactor / Performance / Security / Business Rule) with Low/Medium/High confidence.

score_risk

Compute Low/Medium/High from boolean signals (auth, money, migration, files_count, new_module, api_change).

select_squad

Select advisory agents for a work type. Combines matrix + path hints + content sniff. Returns evidence per file.

slice_files_for_agent

Filter a file list to those owned by a single agent. Used to build sliced advisory prompts.

validate_plan_text

Advisory check for inviolable-rule violations in a plan (commit/push fences, emojis in code blocks, non-English identifiers, impl-before-approval).

compose_squad_workflow

One-call pipeline: detect_changed_filesclassify_work_typescore_riskselect_squad.

compose_advisory_bundle

One-call full bundle: compose_squad_workflow + slice_files_for_agent per selected agent + validate_plan_text.

apply_consolidation_rules

Aggregate advisory reports → final verdict (APPROVED / CHANGES_REQUIRED / REJECTED). Returns weighted rubric scorecard when reports carry per-dimension scores.

score_rubric

Pure rubric calculator. Takes per-agent scores (0-100) + optional weight overrides, returns weighted score, per-dimension breakdown, and pre-formatted ASCII scorecard.

read_squad_config

Read and resolve .squad.yaml (or .squad.yml) at workspace_root. Returns effective weights, threshold, min_score, skip_paths, disable_agents.

read_learnings

Load past accept/reject decisions from .squad/learnings.jsonl. Filters by agent / decision / changed-file scope. Returns entries plus a markdown block ready to inject into agent or consolidator prompts.

record_learning

Append one accept/reject decision to .squad/learnings.jsonl. Side-effecting; the skill (or CLI) is responsible for per-finding user authorisation.

prune_learnings

Lifecycle maintenance (v0.11.0+): mark entries older than max_age_days as archived and entries with ≥ min_recurrence accepts on the same canonicalised finding as promoted. Atomic rewrite under file lock. Never auto-runs.

compose_prd_parse

Build a prompt + JSON schema for the host LLM to decompose a PRD into atomic tasks. Pure-MCP: server does NO LLM calls. Caller (skill) feeds the prompt to its model, then calls record_tasks after user confirmation.

list_tasks

Read tasks from .squad/tasks.json. Filters: status, agent (matches agent_hints), changed_files (glob match against task scope).

next_task

Pick the next ready task: candidate status (default pending), all dependencies done, optional agent / changed_files filter. Tiebreak priority then id. Returns null + reason when none ready.

record_tasks

Bulk-create tasks. Allocates ids sequentially, validates dependencies resolve (forward refs in batch ok), rejects duplicates and self-deps. Atomic write.

update_task_status

Flip a task or subtask status: pending / in-progress / review / done / blocked / cancelled.

expand_task

Append subtasks to an existing task. Mechanical only — caller (skill or LLM) supplies the subtask inputs.

slice_files_for_task

Filter a file list to those matching a task's scope glob. Same glob primitive as skip_paths and learnings scope.

list_agents

List configured agents with role, ownership, naming conventions.

get_agent_definition

Return the full markdown system prompt for an agent (local override → embedded default).

init_local_config

Copy embedded defaults to the local override directory so they can be edited.

record_run

Append one RunRecord to .squad/runs.jsonl. Single-writer contract: only the squad skill calls this (Phase 1 in_flight + Phase 10 terminal). Validates against schema_version 1, enforces 4 KB per-record cap, file mode 0o600.

list_runs

Read-only journal read. Folds the two-row pair by id, filters (since / limit / agent / verdict / mode / invocation / work_type), and returns either the folded list or an aggregate bundle (outcomes + health + trend) when aggregate: true.

Prompts

  • squad_orchestration — full Phase 0–12 orchestration guide.

  • agent_advisory — sliced prompt for one advisory agent.

  • consolidator — final verdict prompt for TechLead-Consolidator.

Resources

  • agent://product-owner, agent://tech-lead-planner, agent://tech-lead-consolidator, agent://architect, agent://dba, agent://developer, agent://reviewer, agent://security, agent://qa. (Renamed from PascalCase / po in v0.6.0 — older 0.5.x consumers must use agent://po instead.)

  • severity://_severity-and-ownership — severity matrix + ownership rules.

  • severity://skill-squad-dev, severity://skill-squad-review — full skill specs.

Bundled skills

The plugin auto-registers these skills via skills/:

Skill

Trigger

Purpose

/squad:implement

implementation workflow

Single skill, two modes. /squad:implement <task> builds an approved plan, distributes work to specialist subagents in parallel, implements the change, consolidates via tech-lead. /squad:review [target] is the same skill in review mode — never implements, just produces an advisory verdict on an existing diff/branch/PR. Optional --codex second-opinion.

/squad:question

read-only code Q&A

Spawns the code-explorer subagent (Haiku-class, read-only) to grep, glob, and excerpt the codebase, then synthesizes a file:line-cited answer. No plan, no gates, no implementation. Designed to be fast — single dispatch on the default medium budget, sub-second on --quick.

/squad:debug

read-only bug investigation

Bridges /squad:question (lookup) and /squad:implement (fix). Takes a bug description + optional stack trace + repro steps; dispatches code-explorer to locate suspect code, then the new debugger persona to emit N ranked hypotheses (1 on --quick, 3 on --normal, 5 with a cross-check pass on --deep) with file:line evidence and verification steps. Read-only end-to-end.

/squad:grillme

Socratic plan validation

Grills your plan one question at a time against the project's domain language (CONTEXT.md) and prior decisions (ADRs in docs/adr/), updating both inline as terms resolve. Use before /squad:implement to stress-test a plan. Flags: --quick / --normal / --deep, --no-write for a dry run.

/brainstorm

pre-implementation research

Web research in parallel + specialist agent perspectives → options matrix with cited sources and a recommendation. Produces no code. Position: /brainstorm decides what to build, /squad:implement implements, /squad:review reviews.

/squad:pipeline

cradle-to-grave orchestration

Chains six squad steps — brainstorm → grillme → tasks → next → implement → review — into one guided sequence. Executor that auto-invokes each sub-skill via the Skill tool and halts only at explicit user-decision gates (proceed / adjust / skip / exit); sub-skills' internal gates (Gate 1 plan approval, Gate 2 Blocker halt) keep firing as before. Resume cache at .squad/pipeline-state.json survives context compaction. --from <phase> enters mid-sequence; --quick / --normal / --deep are forwarded to each step.

/squad:inventory

codebase audit / inventory

Scans the repo for a named pattern (defined by a YAML "recipe pack") and emits a structured Markdown report cross-referenced with framework metadata (routes, handlers). Hybrid pipeline: a deterministic rg sweep does the file IO, then tiered LLM enrichment (Haiku tier-1, Sonnet escalation on requires_semantic rules or low confidence) classifies findings; a pure renderer emits byte-stable MD. Bundled pack v1: php-inline-sql. Reads source; writes one MD report (default ./docs/inventory/<recipe>-<date>.md, --out overrides). Flags: --quick / --normal / --deep, --out <path>, --dry-run.

/commit-suggest

commit message generator

Read-only suggester for Conventional Commits messages. Runs only an allowlist of git commands; never executes mutations; never adds AI co-author trailers. The user runs the commit themselves.

/squad:stats

observability dashboard

Read .squad/runs.jsonl, render a single-screen ANSI panel: verdict mix, score buckets, sparkline trend (14 days default), per-agent avg wall-clock + estimated tokens. One accent colour (cyan), Unicode block bars at 1/8 granularity. Flags: --quick, --thorough, --since <ISO>, --last <N>, --no-color. Token figures are estimates (chars ÷ 3.5).

/squad:enable-journaling

auto-journaling opt-in

Copies the bundled PostToolUse hook scripts into .squad/hooks/ and prints the .claude/settings.json snippet to wire them up. Capture-only — squad behaviour is unchanged until journaling is set to opt-in in .squad.yaml.

Bundled subagents

The plugin's agents/ directory registers eleven native Claude Code subagents you can also dispatch directly via Task(subagent_type=…):

product-owner, architect, dba, developer, reviewer, security, qa, tech-lead-planner, tech-lead-consolidator, plus two utility roles: code-explorer (fast read-only code search; Haiku-class; dispatched by the planner for context gathering or by /squad:question for direct Q&A) and debugger (hypothesis-first bug investigation; Haiku-class; dispatched by /squad:debug to emit ranked root-cause hypotheses with file:line evidence and verification steps). Neither utility role scores the rubric or is auto-selected by the matrix.

The /squad:implement skill orchestrates them. For non-Claude-Code MCP clients (Cursor, Claude Desktop, Warp), the same role markdowns are accessible through the MCP agent://… resources and get_agent_definition tool.

Workflow positioning — each skill is standalone, and /squad:pipeline chains them:

flowchart LR
  BS["/brainstorm<br/>decide what to build"] --> IM["/squad:implement<br/>implement what was decided"]
  IM --> RV["/squad:review<br/>review what was implemented"]
  RV --> CM["/commit-suggest<br/>craft the commit message"]

/squad:pipeline wraps this whole sequence (with /squad:grillme and /squad:tasks in between) as one guided, human-gated flow — see Cradle-to-grave with /squad:pipeline.

See INSTALL.md for trigger examples and the optional commit-msg git hook + permissions.deny snippet that hard-enforce the read-only and no-AI-attribution invariants at the OS / Claude Code layer.

Repo configuration — .squad.yaml

Drop a .squad.yaml (or .squad.yml) at the repo root to override defaults per-project. Versioned with the code, picked up automatically by compose_squad_workflow and compose_advisory_bundle.

# .squad.yaml — example for a regulated fintech backend

# Rubric weights (must sum to 100 across the agents you list).
# Agents NOT listed are zeroed out — listing weights is an explicit choice
# of which dimensions count for this repo.
weights:
  security: 30 # PCI compliance — security weighted higher
  dba: 22 # double-entry ledger, money on the line
  developer: 20
  architect: 15
  qa: 13

# Per-dimension flag threshold (default 75). Below this, the dimension is
# marked with ⚠ in the scorecard.
threshold: 80

# Quality floor: APPROVED with weighted score below this becomes
# CHANGES_REQUIRED. Severity rules (Blocker/Major) take precedence.
min_score: 75

# Files excluded from advisory. Glob syntax: ** for any depth, * for one
# segment, ? for one char. Useful for docs-only or generated paths.
skip_paths:
  - "docs/**"
  - "**/*.md"
  - "**/generated/**"
  - "vendor/**"

# Agents not relevant for this repo (e.g. internal tool, no PO involved).
disable_agents:
  - product-owner

All keys are optional; partial files merge with package defaults. force_agents in tool calls still wins over disable_agents (config is a default policy, not a veto over explicit caller intent). Validation is strict: weights that don't sum to 100, unknown agent names, or invalid threshold ranges are rejected with a clear error.

The reader is cached by mtime — long-running MCP servers automatically pick up edits without a restart.

Learnings — persistent accept/reject memory

Each time the team accepts or rejects an advisory finding, the decision can be appended to .squad/learnings.jsonl. Future runs of the squad load recent decisions and inject them into per-agent and consolidator prompts so the squad stops re-raising findings the team has already considered.

{"ts":"2026-04-12T15:02:31Z","pr":42,"agent":"security","severity":"Major","finding":"missing CSRF on POST /api/refund","decision":"reject","reason":"CSRF terminated at API gateway, see infra/edge.tf","scope":"src/api/**"}
{"ts":"2026-04-15T09:18:11Z","pr":47,"agent":"architect","severity":"Major","finding":"cross-module coupling Auth → Billing","decision":"accept","reason":"refactored to event bus"}

The file lives in git. Decisions are auditable in PR diffs.

Recording decisions (v0.11.0+ Phase 12 prompt)

After /squad:review consolidates findings, the skill surfaces a single batched prompt at the end of the report. It groups the findings by agent + severity (Suggestion-level findings excluded) and asks one question:

Save which findings as precedents? Reply: accept N1,N2,N3 / reject N4 / all accept / skip / because <reason> to attach a rationale.

Each affirmative pick fires one record_learning call. Examples:

  • accept 1,2 because we ship this pattern across services

  • reject 3 (records the rejection without a reason; the squad will still suppress the same finding next run)

  • all accept (accepts every Blocker / Major / Minor in the report)

  • skip or empty response (records nothing)

Per-finding authorisation is required — silence or "thanks" is not authorisation. The skill never invents a reason; the text after because flows verbatim to record_learning.reason.

For non-MCP environments, use the CLI helper:

node tools/record-learning.mjs --reject \
  --agent security \
  --finding "missing CSRF on POST /api/refund" \
  --reason "CSRF terminated at API gateway" \
  --scope "src/api/**" \
  --pr 42

How the squad uses them

In Phase 5 (per-agent advisory) the skill calls read_learnings(workspace_root, agent, changed_files) and injects the rendered ## Past team decisions block into the agent's prompt. In Phase 10 (consolidator) it does the same without an agent filter — the consolidator sees the full picture across agents.

Each agent is told: when a current finding matches a previously rejected decision (similar agent + similar finding text + matching scope), suppress or downgrade severity unless the diff materially changes the rationale. When a finding contradicts a previously accepted decision, flag the contradiction explicitly.

Lifecycle (v0.11.0+): archive + promote

Two new optional fields on each entry let the journal age gracefully without manual surgery:

  • archived: true — the entry is past the team's age cutoff and is hidden from default read_learnings injection. The row stays on disk for forensics.

  • promoted: true — the same finding (matched by canonicalised title) has been accepted ≥ N times and now surfaces FIRST in the rendered block as ⭐ PROMOTED. Advisors are instructed to treat promoted entries as team policy, not ordinary precedent.

Both flags are set by the prune_learnings MCP tool:

prune_learnings({
  workspace_root: <repo>,
  max_age_days: 180,    // entries older than this get archived: true
  min_recurrence: 3,    // accept-decisions on the same finding ≥ 3× get promoted: true
  dry_run: false        // set true to inspect counts without mutating
})

prune_learnings never auto-runs. The defaults are max_age_days: 0 (= disabled) and min_recurrence: 3 — invoking with no arguments is a safe no-op. Wire it into a cron or pre-commit hook if you want regular housekeeping. Each non-no-op run produces an atomic rewrite of .squad/learnings.jsonl under the same file lock used by record_learning; concurrent readers either see the pre-rewrite or post-rewrite file in full, never a torn write. A .prev snapshot is kept alongside the file as the rollback point.

The v0.11.0 schema is additive and backward-compatible — a v0.10.x reader strips the unknown archived / promoted fields silently and continues. No schema_version bump.

Configuration

Override defaults via .squad.yaml:

learnings:
  path: .squad/learnings.jsonl # default
  max_recent: 50 # how many recent entries to inject (hard cap 200)
  enabled: true # set false to disable injection without deleting the journal

The store reader is mtime-cached. The journal is append-only by design — the skill never amends or deletes past entries; correcting a stale decision means appending a new one.

Tasks — PRD-decomposed atomic work units

The biggest source of token bloat in a long-running squad session is the squad re-analysing the whole repo for every prompt. The tasks store fixes that by decomposing a PRD into atomic tasks up front, then running the squad on ONE task's narrowed scope at a time.

// .squad/tasks.json (excerpt)
{
  "version": 1,
  "tasks": [
    {
      "id": 1,
      "title": "Add CSRF token to checkout flow",
      "status": "done",
      "dependencies": [],
      "priority": "high",
      "scope": "src/api/checkout/**",
      "agent_hints": ["security", "developer"],
      "test_strategy": "POST without token → 403; POST with token → 200.",
      "subtasks": [],
      "created_at": "2026-05-08T12:00:00Z",
      "updated_at": "2026-05-09T15:30:00Z"
    },
    {
      "id": 2,
      "title": "Wire CSRF middleware into refund endpoint",
      "status": "pending",
      "dependencies": [1],
      "priority": "high",
      "scope": "src/api/refund/**",
      "subtasks": [],
      ...
    }
  ]
}

scope (glob) and agent_hints are squad-mcp-specific additions on top of the claude-task-master shape — they let slice_files_for_task and compose_squad_workflow narrow the advisory automatically.

Decomposing a PRD

Inside Claude Code:

/squad:tasks docs/prd-payments-refactor.md

The skill (Phase 0.5):

  1. Calls compose_prd_parse with the PRD text.

  2. Receives a prompt + JSON schema and runs them through Claude.

  3. Shows you the parsed tasks — title, deps, priority, scope, agent_hints — for review.

  4. Calls record_tasks only after you say "record" / "go" / "yes".

The parse is pure-MCP: the squad-mcp server never makes LLM calls. The host (Claude Code, Cursor, Warp) does the inference. No provider keys in the server, no surprises for non-Claude clients.

Working tasks

/squad:next                # picks the highest-priority ready task
/squad:task 5              # explicit pick by id

For each task:

  • slice_files_for_task narrows the changed-files list to the task's scope.

  • compose_squad_workflow runs against that slice; if agent_hints is set, only those agents wake up.

  • Phase 1 onward proceeds normally, just with much less context.

  • When done, the skill flips status to done via update_task_status.

Configuration

Override defaults via .squad.yaml:

tasks:
  path: .squad/tasks.json # default
  enabled: true # set false to silence reads without deleting the file

Writes (record_tasks, update_task_status, expand_task) stay open even when reads are disabled — same policy as learnings. Disabling injection should not throw away the journal.

CLI for non-MCP environments

Mirroring the post-review and record-learning helpers:

# decompose offline (you generate the JSON yourself or via another tool)
echo '[{"title":"Add CSRF","scope":"src/api/**"}]' | node tools/record-tasks.mjs

# inspect
node tools/list-tasks.mjs --status pending
node tools/next-task.mjs --json

# flip status from CI
node tools/update-task-status.mjs --task 5 --status done

The CLIs share tools/_tasks-io.mjs for read/write and require only node 18+. Schema validation is lighter than the MCP tool — production use should prefer the MCP path.

Posting reviews to PRs (GitHub + Bitbucket Cloud)

Once the squad runs, you can post the verdict + scorecard as a PR review on GitHub or Bitbucket Cloud. The skill /squad:review #42 runs the advisory and offers to post the result; default behaviour is dry-run + confirmation — Claude shows the exact request and the markdown body, then waits for your "go" before posting.

# auto-detect platform from `git remote get-url origin`
echo '<consolidation JSON>' | node tools/post-review.mjs --pr 42 --dry-run
echo '<consolidation JSON>' | node tools/post-review.mjs --pr 42

# force a platform
echo '<consolidation JSON>' | node tools/post-review.mjs --pr 31 --platform bitbucket-cloud --repo repos_acgsa/some-repo

The CLI maps verdict → review action deterministically:

Verdict

Score signal

GitHub gh action

Bitbucket Cloud

REJECTED

--request-changes (blocks merge)

POST /comments + POST /request-changes

CHANGES_REQUIRED

--comment (advisory)

POST /comments only

APPROVED + downgraded_by_score: true

weighted < min_score

--comment

POST /comments only

APPROVED + score < request_changes_below_score

(opt-in floor)

--request-changes

POST /comments + POST /request-changes

APPROVED otherwise

passes threshold

--approve

POST /comments + POST /approve

Platform auto-detection

--platform auto (default) parses git remote get-url origin:

  • github.com/<owner>/<repo> → GitHub

  • bitbucket.org/<workspace>/<repo> → Bitbucket Cloud

  • Anything else → exit 6 with a clear error. Pass --platform <name> --repo <a>/<b> to override.

Bitbucket Server / Data Center (self-hosted) is not supported — it has a different REST API surface and would need a separate adapter.

Auth

Platform

Mechanism

GitHub

gh CLI on PATH + gh auth login. Exits 3 if missing.

Bitbucket Cloud

SQUAD_BITBUCKET_EMAIL + SQUAD_BITBUCKET_TOKEN env vars. Exits 5 if missing.

For Bitbucket Cloud, generate an API Token at https://id.atlassian.com/manage-profile/security/api-tokens with the pullrequest:write scope (App Passwords were deprecated by Atlassian in 2025). Auth is HTTP Basic with email:apiToken.

Severity budget (A.3, May 2026)

Cap how many findings get expanded inline in the PR body before collapsing the surplus into a footnote. Drops happen lowest-severity-first; Blockers are never silently dropped. Useful for big PRs and platforms with tight rate limits (Bitbucket Cloud is 1000 req/h per user).

CLI:

node tools/post-review.mjs --pr 42 --severity-cap 20 --drop-below Minor

Repo default via .squad.yaml:

pr_posting:
  severity_budget:
    per_pr_max: 20 # cap total expanded findings (Blockers exempt)
    drop_below: Minor # hard floor — anything strictly below this drops FIRST

When the budget hides anything, the body carries a footnote like _Severity budget hid 7 findings (4 minor, 3 suggestion). Tune pr_posting.severity_budget in .squad.yaml._ so it's never silent.

SARIF / JSON output (A.2, May 2026)

Emit a SARIF 2.1.0 artefact for CI gating, IDE annotations, and dedup with linters. Three modes:

# markdown only (default — historical behaviour)
node tools/post-review.mjs --pr 42

# SARIF only — writes .squad/last-review.sarif.json, SKIPS the PR post
node tools/post-review.mjs --output-format sarif

# both — SARIF + post to PR
node tools/post-review.mjs --pr 42 --output-format both

Override path with --sarif-path <file>. Each result carries a partialFingerprints.canonicalHash (16-char sha256) built from (agent, severity, normalized title) — stable across rebases, enables future dedup-on-rerun and cross-tool dedup with Sonar / CodeQL.

Repo default via .squad.yaml:

pr_posting:
  output_format: both # markdown | sarif | both (default markdown)

GitHub Code Scanning, GitLab SAST, Sonar, and most ingestion pipelines consume SARIF 2.1.0 directly.

Auto-post (opt-in)

If .squad.yaml has pr_posting.auto_post: true, the skill posts without the second confirmation prompt — but always shows the body first. Auto-post means "skip the second yes/no", not "skip the preview".

pr_posting:
  auto_post: true # default false — always asks
  request_changes_below_score: 50 # below this, post --request-changes instead of --approve
  omit_attribution_footer: false # default false — footer present

Detection strategy (select_squad / slice_files_for_agent)

Three layers, in order of strength:

  1. Content sniff — reads the first 16 KB of each file, matches token regexes (e.g. class : DbContext, [ApiController], services.AddScoped<>, from 'express', prisma.<model>.findMany, from sqlalchemy, gorm.Open, gin.New). Strong signal, name-agnostic. Patterns can be ext-gated (e.g. only .py for from sqlalchemy) to avoid cross-stack false positives.

  2. Path hint — file path regex (e.g. *Repository.cs, Migrations/, Controller.cs, api/, models/). Cheap, complementary.

  3. Conventions — each agent flags non-conformant naming as a finding so future detections improve over time.

Output of select_squad includes per-file evidence with confidence and low_confidence_files for unclassified files. Override via the force_agents parameter or by editing local agent definitions.

Local override of agent definitions

The loader picks ONE local override directory:

  • If SQUAD_AGENTS_DIR is set, that path is used exclusively (the platform default is not consulted).

  • Otherwise: %APPDATA%\squad-mcp\agents on Windows, $XDG_CONFIG_HOME/squad-mcp/agents on Unix (falls back to ~/.config/squad-mcp/agents if XDG_CONFIG_HOME is unset).

Per-file resolution: if the agent's *.md exists in the chosen local directory, it wins. Otherwise, the embedded default bundled in the package is used.

Override files are loaded verbatim and rendered into the LLM's context with full agent authority — treat the directory as code (user-only writable, not on shared volumes, never sourced from untrusted input).

Since v0.4.0, the override directory is validated against an allowlist (HOME, APPDATA, LOCALAPPDATA, XDG_CONFIG_HOME, process.cwd()); paths outside the allowlist are rejected with OVERRIDE_REJECTED. Set SQUAD_AGENTS_ALLOW_UNSAFE=1 to bypass for unusual setups (logs a warn banner). See INSTALL.md for the full security guidance.

Run the init_local_config tool once to seed the local directory with editable defaults.

Repo layout

squad-mcp/
├── .claude-plugin/             # Claude Code plugin manifest + marketplace
├── .github/workflows/          # CI + release workflows
├── agents/                     # Native subagents (one .md per subagent, kebab-case + frontmatter)
├── shared/                     # Severity matrix + skill specs (resources, not subagents — kept outside agents/ for the plugin manifest validator)
├── commands/                   # Slash commands (/squad:implement, /squad:review, /brainstorm, /commit-suggest)
├── skills/                     # Bundled skills
│   ├── squad/                  # single skill, two modes (implement | review)
│   ├── brainstorm/
│   └── commit-suggest/
├── src/
│   ├── index.ts                # stdio entry
│   ├── tools/                  # MCP tools (deterministic functions)
│   ├── resources/              # MCP resources + agent loader
│   ├── prompts/                # MCP prompt templates
│   ├── exec/git.ts             # hardened git execution layer
│   ├── observability/logger.ts # structured stderr JSON logs
│   ├── util/path-safety.ts     # path-traversal-safe resolution
│   └── config/
│       └── ownership-matrix.ts # agents, work types, content/path patterns
├── tests/                      # vitest unit + integration + stdio smoke
├── tools/
│   └── git-hooks/commit-msg    # opt-in hook rejecting AI-attribution trailers
└── dist/                       # compiled JS (gitignored, shipped via npm)

Tests

npm test                # vitest (unit + integration)
node tests/smoke.mjs    # stdio JSON-RPC smoke test (requires npm run build first)

Versioning + release

This project follows SemVer. Releases are tagged vX.Y.Z on main, which triggers the .github/workflows/release.yml workflow to publish @gempack/squad-mcp@X.Y.Z to npm with provenance. See CHANGELOG.md for the version history.

Contributing

Issues and PRs welcome at https://github.com/ggemba/squad-mcp. Run npm test && npm run build before opening a PR. CI runs on Linux + Windows on Node 22 and 24.

License

Apache-2.0. See NOTICE for attribution and third-party dependencies.

Available Tools

27 tools
apply_consolidation_rulesA

Aggregate advisory reports and emit a verdict per the rules in shared/_Severity-and-Ownership.md. Blocker -> REJECTED. Unjustified Major -> REJECTED. Otherwise CHANGES_REQUIRED or APPROVED. When reports carry per-dimension scores (0-100), also returns a weighted rubric scorecard (see score_rubric). Optional min_score downgrades APPROVED to CHANGES_REQUIRED if the weighted score is below the floor — useful for projects that want a quality bar beyond absence of blockers. Includes severity_counts and agents_involved for downstream summarization. Also returns arbitration_needed (true iff any blocker, unjustified major, or cross-agent forwarded finding) so callers can skip the consolidator persona when there is nothing to arbitrate; the verdict + rubric scorecard are produced regardless.

ParametersJSON Schema
NameRequiredDescriptionDefault
reportsYes
weightsNo
thresholdNo
min_scoreNo

TDQS

A3.7/5.0
Behavior4/5

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

Without annotations, the description bears full responsibility. It discloses the verdict logic (Blocker/Unjustified Major to REJECTED), the weighted rubric scorecard when scores are present, and the `arbitration_needed` flag. It does not cover side effects, authorization, or rate limits, but given the absence of annotations, the level of behavioral detail is strong.

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 and front-loaded with the main purpose. Each sentence adds distinct value (logic, optional parameters, output fields). Slightly verbose but not wasteful; good conciseness for the 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?

The tool has nested objects and no output schema. The description covers core verdict rules, optional parameters, and key outputs (`arbitration_needed`, `severity_counts`, `agents_involved`, rubric scorecard). It does not explain the `threshold` parameter or how `weights` map to scores, but references an external rule document and sibling `score_rubric` for additional context. Overall adequate for the complexity.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate. It explains the `reports` parameter implicitly and details the `min_score` behavior. However, it does not explain `weights` or `threshold`, leaving gaps. The mention of per-dimension scores and weighted rubric adds value beyond the raw 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 verb 'Aggregate and emit' and the resource 'advisory reports', and specifies the verdict logic. While it does not explicitly differentiate from sibling tools, the unique rule-based aggregation behavior is evident.

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 the optional `min_score` parameter and its use case for quality bars, and mentions `arbitration_needed` to signal when consolidation is unnecessary. However, it does not provide explicit guidance on when to avoid this tool or suggest alternatives among siblings.

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

classify_work_typeA

Heuristic classification of WorkType from user prompt and changed file paths. Returns top type with Low/Medium/High confidence. Treat as suggestion; allow override.

ParametersJSON Schema
NameRequiredDescriptionDefault
user_promptYes
filesNo

TDQS

A4.1/5.0
Behavior4/5

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

Discloses confidence levels and heuristic nature, plus suggestion guidance. Without annotations, description adds needed behavioral context beyond 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?

Two sentences pack all essential information: operation, input, output, and usage guidance. 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?

Covers input, output (with confidence levels), and behavior. No missing elements for a simple classification tool.

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

Parameters3/5

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

Adds meaning by clarifying that 'files' refers to changed file paths and that both prompt and files are used for classification. However, no detailed format or constraints provided.

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 performs heuristic classification of WorkType from user prompt and changed file paths. Distinguishes from sibling tools by its specific function.

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?

Implies use as a suggestion with 'Treat as suggestion; allow override' but does not explicitly state when to use vs alternatives or provide exclusion criteria.

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

compose_advisory_bundleB

End-to-end advisory dispatch bundle. Runs compose_squad_workflow, then slice_files_for_agent for each selected agent, then validate_plan_text on the supplied plan. Returns the union output ready for the host to dispatch parallel advisory reviews.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
user_promptYes
planYes
base_refNo
staged_onlyNo
working_treeNo
read_contentNo
modeNo
force_work_typeNo
force_agentsNo
risk_signalsNo
include_hunksNo
max_hunk_bytes_per_fileNo
include_language_supplementsNo
min_files_per_secondary_languageNo

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations provided, the description must cover behavioral traits. It discloses the sequence of sub-workflows and that the output is union-ready for dispatch. But it omits details on side effects, authorization needs, idempotency, or error handling – important for a composite 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 concise at two sentences and front-loaded with the main purpose. However, it omits parameter explanations, which are necessary for completeness, slightly reducing conciseness value.

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

Completeness2/5

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

Given the tool's complexity (15 parameters, nested objects, 3 required), no output schema, and no parameter descriptions, the description is incomplete. It does not provide enough context for an agent to use the tool correctly without referring to sub-tool definitions.

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

Parameters1/5

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

Schema description coverage is 0% and the description does not explain any of the 15 parameters. It fails to add meaning beyond the raw schema, which is inadequate given the high parameter count and nested structure. The description must compensate but does not.

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 is an end-to-end advisory dispatch bundle that orchestrates three specific sub-workflows (compose_squad_workflow, slice_files_for_agent, validate_plan_text) in sequence and returns the union output for parallel dispatch. This specific verb+resource+process distinguishes it from sibling tools that are its individual components.

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 this tool should be used when the full advisory dispatch pipeline is needed, as it bundles the sub-steps. However, it does not explicitly state when to prefer this over calling the sub-tools individually, leaving room for uncertainty.

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

compose_prd_parseA

Build a prompt + JSON schema for the host LLM to decompose a PRD into atomic tasks. Pure-MCP: does NOT call any LLM. Caller (skill/host) feeds the prompt to its LLM, receives JSON, then calls record_tasks with user confirmation. Includes existing tasks in the prompt to prevent duplication.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
prd_textYes
max_tasksNo
include_existingNo

TDQS

A4/5.0
Behavior4/5

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

With no annotations provided, the description carries full burden. It discloses that the tool does not call any LLM ('Pure-MCP'), that it builds a prompt and JSON schema, and includes existing tasks. It does not describe any side effects like file modifications or network calls, which is fine for a tool that only generates a prompt. However, it could be more explicit about whether it modifies any state.

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—only three sentences—yet conveys all essential information about purpose, non-LLM nature, workflow, and deduplication feature. Every sentence adds value, no fluff.

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 (4 parameters, no annotations, no output schema), the description lacks parameter explanations. It does well to explain the workflow and deduplication, but without parameter semantics, the agent may struggle to invoke it correctly. The description is incomplete for a tool with this many inputs.

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

Parameters2/5

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

Schema description coverage is 0% and the description does not explain any of the 4 parameters (workspace_root, prd_text, max_tasks, include_existing). The description provides context about the workflow but gives no details about what each parameter means or how they affect output. This is a significant 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 builds a prompt + JSON schema for decomposing a PRD into atomic tasks. It explicitly distinguishes itself from calling an LLM ('Pure-MCP: does NOT call any LLM') and differentiates from the sibling tool 'record_tasks' by describing the workflow where the host uses this tool's output then calls record_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?

The description provides clear guidance on when to use the tool: to decompose a PRD. It explains the workflow (caller feeds prompt to its LLM, then calls record_tasks). While it doesn't explicitly state when not to use it, the context is sufficient. The mention of 'includes existing tasks' prevents duplication, which is a usage hint.

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

compose_squad_workflowA

End-to-end deterministic pipeline: detect_changed_files -> read_squad_config -> classify_work_type -> score_risk -> select_squad. Returns the union output, the resolved .squad.yaml config (defaults if absent), and skipped_paths / disabled_agents when config.skip_paths or config.disable_agents narrowed things. Caller can override work_type, force agents, or supply explicit risk signals (force_agents wins over config.disable_agents — config is policy, not veto).

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
user_promptYes
base_refNo
staged_onlyNo
working_treeNo
read_contentNo
modeNo
run_modeNo
force_work_typeNo
force_agentsNo
risk_signalsNo

TDQS

A3.7/5.0
Behavior3/5

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

No annotations are provided, so the description carries full burden. It discloses that the pipeline is deterministic and describes output components (config, skipped_paths, disabled_agents). However, it does not state whether the tool modifies any state (read-only vs. write), which is important for safe invocation.

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 a single dense paragraph that front-loads the pipeline steps. It efficiently packs information without wasted words, though breaking into bullet points could improve readability.

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 11 parameters (2 required) with 0% schema coverage, nested objects, and no output schema, the description partially compensates by explaining the pipeline output layout. However, it lacks detailed descriptions for most input parameters and does not fully specify return value structure.

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

Parameters2/5

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

Schema description coverage is 0%. The description only mentions override parameters (force_work_type, force_agents, risk_signals) but fails to explain the other 8 parameters (e.g., workspace_root, user_prompt, base_ref, staged_only). This leaves the agent with limited guidance for correctly filling required fields.

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 is an 'end-to-end deterministic pipeline' listing specific steps (detect_changed_files -> ... -> select_squad). It differentiates from sibling tools (the individual steps) by being the composite workflow that returns the union output.

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 when to use overrides (force_agents, risk_signals, force_work_type) and explains priority (force_agents wins over config.disable_agents). It does not explicitly contrast with sibling step tools, but the composite nature is clear from the pipeline description.

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

detect_changed_filesA

Detect changed files in a git workspace via "git diff --name-status". Defaults to HEAD~1..HEAD; use base_ref to override or staged_only=true for index-staged changes. Allowlisted refs only (no leading "-", no ".." substring, no "@{", max 200 chars). 10s timeout, 1MB output cap.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
base_refNo
staged_onlyNo
working_treeNo
with_statsNo

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations provided, the description discloses key behavioral traits: the use of git diff, default ref range, constraints on refs (allowlist rules, 200 chars), timeout (10s), and output cap (1MB). This gives an agent sufficient understanding of the tool's behavior beyond just the schema.

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

Conciseness5/5

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

The description is highly concise with three sentences. It front-loads the main purpose and efficiently provides usage details and constraints without unnecessary words.

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 there is no output schema, the description could be more complete by explaining the return format (e.g., list of filenames with status codes). However, it does mention 'detect changed files' and the output cap, leaving some ambiguity but still functional. Additional detail on output would improve completeness.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must add meaning. It explains the use of base_ref and staged_only, but does not cover working_tree or with_stats. workspace_root is required but not described. The description adds partial value, compensating somewhat for the lack of schema descriptions.

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

Purpose5/5

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

The description clearly states the tool detects changed files in a git workspace using 'git diff --name-status'. It is a specific verb-resource combination that distinguishes this tool from siblings, which are unrelated to git diff.

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 the default behavior (HEAD~1..HEAD) and how to customize using base_ref or staged_only. While it doesn't explicitly state when not to use the tool, it provides clear context and constraints (allowlisted refs, timeout, output cap), guiding appropriate usage.

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

drain_journalA

Drain the auto-journaling staging buffer (.squad/pending-journal.jsonl) and return the de-duplicated set of file paths touched during the run, plus the raw breadcrumb count. No-op (returns empty) when .squad.yaml journaling is not opt-in. Side-effecting — atomically claims and clears the staging file. The squad skill calls this once in Phase 10 before the terminal record_run, folding touched_paths into the RunRecord.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes

TDQS

A4.1/5.0
Behavior5/5

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

Fully discloses side effects (atomically claims and clears the staging file), no-op behavior, and return values (deduplicated file paths and breadcrumb count). Since no annotations exist, the description compensates completely.

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?

Four sentences, front-loaded with main action. The last sentence about the squad skill context adds helpful usage detail without being overly verbose.

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?

Explains return values and side effects adequately. With no output schema, it covers essentials. Could be more precise about data types (e.g., list vs. set), but sufficient for most agents.

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

Parameters2/5

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

The only parameter `workspace_root` lacks schema description (0% coverage) and the tool description does not explain its purpose or expected format beyond the parameter name. This leaves ambiguity.

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 ('drain') and specific resource (`.squad/pending-journal.jsonl`), and distinguishes it from sibling tools like `record_run` by noting its role in Phase 10 before `record_run`.

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 usage context: called once in Phase 10 before `record_run`, and mentions the no-op condition when journaling is not `opt-in`. However, it does not explicitly state when not to use or offer alternatives.

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

expand_taskA

Append subtasks to an existing task. Mechanical only — the caller (skill or LLM) supplies the subtask inputs. Subtask ids allocated sequentially starting from max(existing.subtasks.id) + 1. Side-effecting, atomic write.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
task_idYes
subtasksYes

TDQS

A3.8/5.0
Behavior4/5

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

Discloses side-effecting atomic write, sequential ID allocation. Without annotations, description provides key 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?

Three-sentence description with no wasted words. Purpose, behavior, and ID allocation are concisely stated.

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?

No output schema, so description should hint at return value. It only says 'atomic write' but not what is returned. Parameter details are missing.

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

Parameters2/5

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

Schema parameters have 0% description coverage and description does not explain workspace_root or task_id meaning. Only 'subtask inputs' is vaguely referenced.

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 'Append subtasks to an existing task' with specific verb and resource. Distinct from sibling tools like 'update_task_status' or 'next_task'.

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?

Implies usage when caller has subtask inputs ready, but no explicit when-not-to-use or alternative tools mentioned.

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

get_agent_definitionC

Return the full markdown system prompt for a given agent. Resolves from local override → embedded default.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

C2.9/5.0
Behavior3/5

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

The description reveals the resolution order (local override first, then embedded default), which is helpful behavioral context. However, without annotations, it does not explicitly state that the operation is read-only or describe error handling (e.g., what happens if neither source exists).

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 with no wasted words. It immediately states the action and the resolution logic, which is well-structured and easy to parse.

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?

For a simple tool with one parameter and no output schema, the description is adequate but lacks details on edge cases (e.g., missing agent or fallback behavior). In the context of many sibling tools, it might benefit from more specificity about the output.

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

Parameters1/5

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

The input schema has a single enum parameter 'name' with no description, and the tool description adds no additional meaning beyond 'a given agent.' With 0% schema description coverage, more parameter context is expected but not provided.

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 returns the full markdown system prompt for a given agent and specifies the resolution order (local override → embedded default). However, it does not differentiate from sibling tools like 'list_agents' or 'read_squad_config', which could be confused but are distinct in functionality.

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, nor does it mention any context or prerequisites. For example, it doesn't specify that this tool is for retrieving prompt definitions or contrast it with similar tools.

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

init_local_configB

Copy embedded agent defaults to the local override directory ($SQUAD_AGENTS_DIR or %APPDATA%/squad-mcp/agents). Files locally edited override the bundled versions.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNo

TDQS

B3.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 discloses that the tool copies defaults to a specific directory and notes that locally edited files override bundled versions. However, it does not specify behavior regarding existing files, whether the directory is created if missing, or any side effects. The 'force' parameter hints at overwrite behavior but is not described.

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 a single sentence that conveys the core functionality without unnecessary words. It includes technical details like environment variables, which adds specificity. Slightly longer than necessary but efficient.

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

Completeness2/5

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

For a simple tool with one parameter and no output schema, the description misses key details: it does not explain the 'force' parameter, the return value or success indicator, or prerequisites (e.g., whether the directory must exist). The agent has insufficient information to call the tool correctly in all scenarios.

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

Parameters1/5

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

The single parameter 'force' (boolean) is not mentioned in the description, and the schema provides no description. With 0% schema description coverage, the description fails to add any meaning beyond the type. The agent cannot know what 'force' does without additional context.

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 action: copying embedded agent defaults to a local override directory. It specifies the verb 'Copy', the resource 'embedded agent defaults', and the destination with environment variable or default path. This distinguishes it from sibling tools which handle other configuration or task management operations.

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 this tool should be used to set up local overrides, but it does not explicitly state when to use it versus alternatives, nor does it mention prerequisites or the fact that it should be run before other tools. The guidance is minimal and relies on inference.

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

list_agentsA

List all configured agents with their roles, ownership, and naming conventions.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses that the tool returns agent roles, ownership, and naming conventions, implying a read-only operation. However, it does not explicitly state side effects, authorization requirements, or any other behavioral traits beyond the output content.

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

Conciseness5/5

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

The description is a single sentence that is front-loaded with the action and resource ('List all configured agents'). It is concise with no superfluous words.

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 has no parameters and no output schema, the description provides a basic understanding of what is listed. However, it lacks details on output structure (e.g., field names, types), potential pagination, or system scope (e.g., workspace vs global). It is minimally complete for a simple list tool but could be improved.

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 no parameters, so schema coverage is 100%. The description adds value beyond the empty schema by specifying what information the list will include (roles, ownership, naming conventions), which helps the user understand the output.

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 all configured agents and specifies the attributes returned (roles, ownership, naming conventions). This differentiates it from sibling tools like 'get_agent_definition' (single agent) and 'list_runs' (different entity).

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 when a need to see all agents and their key attributes, but does not explicitly state when not to use it or mention alternatives (e.g., 'get_agent_definition' for detailed info on a single agent). No exclusionary guidance is provided.

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

list_runsA

Read tool for .squad/runs.jsonl. Folds the two-phase (in_flight, terminal) row pair by id, applies filters (since / limit / agent / verdict / mode / invocation / work_type), and returns either the folded list (aggregate=false, default) or a precomputed aggregate bundle (outcomes + health + trend sparkline buckets) when aggregate=true. Missing-journal returns an empty result, not an error. Read-only — never writes.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
sinceNo
limitNo
agentNo
verdictNo
modeNo
invocationNo
work_typeNo
aggregateNo
trend_daysNo

TDQS

A4.6/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: it is read-only, folds row pairs, applies filters, returns list or aggregate, and handles missing journal gracefully. This is comprehensive and leaves no ambiguity about side effects.

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

Conciseness5/5

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

Three sentences, front-loaded with the core identity, then detailed behavior, then edge-case handling. Every sentence adds necessary information 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 10 parameters and no output schema, the description covers almost all relevant aspects: purpose, filters, output modes, and error handling. It lacks explicit description of the return format for the non-aggregate case, but the mention of 'folded list' gives a reasonable hint. Overall, it is sufficient for an AI agent to understand and invoke the tool correctly.

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

Parameters4/5

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

Schema coverage is 0%, so the description must explain parameters. It lists filter parameters (since, limit, agent, verdict, mode, invocation, work_type) and mentions aggregate and trend_days implicitly via 'aggregate bundle' and 'trend sparkline buckets'. It also clarifies default aggregate=false. However, it does not detail workspace_root or the exact format of parameters like since (but schema has enums for some).

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 is a read tool for `.squad/runs.jsonl`, describes the two-phase folding, and specifies the two output modes (list vs aggregate). The verb 'Read' and resource 'squad/runs.jsonl' provide a specific and distinct purpose.

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 the tool reads runs with filters and can return aggregates. It also notes that missing journal returns empty, not error, which guides usage expectations. However, it does not explicitly differentiate from sibling tools like list_tasks or record_run, which are other read/write tools for different resources.

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

list_tasksA

List tasks from .squad/tasks.json with optional filters (status, agent, changed_files glob match against task.scope). Returns the filtered tasks plus the total count in the store.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
statusNo
agentNo
changed_filesNo
limitNo

TDQS

A3.6/5.0
Behavior3/5

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

No annotations provided. Description discloses tool reads from a specific file and returns filtered tasks with count, which implies read-only behavior. However, it does not explicitly state it is read-only or discuss authorization, rate limits, or side effects.

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?

Single sentence conveys purpose, filters, and return value efficiently. Front-loaded with main action. Could be split for readability, but no wasted words.

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 5 parameters (1 required) and no output schema, description covers basic return (filtered tasks + count) but lacks details on task structure, pagination, error handling, or explanation of workspace_root. Adequate but not comprehensive.

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

Parameters3/5

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

Schema coverage 0% (no parameter descriptions). Description adds meaning for status (filters), agent, changed_files (glob match against task.scope), and limit. However, workspace_root is not explained. Description partially compensates for missing schema descriptions.

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

Purpose5/5

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

Description clearly states 'List tasks from `.squad/tasks.json`' indicating verb and resource. It specifies optional filters and return value (filtered tasks + count). This distinguishes it from sibling tools like update_task_status or expand_task.

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?

Description mentions optional filters but does not provide explicit guidance on when to use this tool vs alternatives like update_task_status or expand_task. No when-not-to-use or alternative references.

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

next_taskA

Pick the next ready task: candidate status (default pending), all dependencies done, optional agent / changed_files filter. Tiebreaker priority then id. Returns null with reason when none ready, plus the blocked list so callers can show 'X is next when Y completes'.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
agentNo
changed_filesNo
candidate_statusesNo
done_statusesNo

TDQS

A4.4/5.0
Behavior5/5

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

With no annotations provided, the description fully covers behavioral traits: it describes the selection logic, the default candidate status, the tiebreaker rule, and the edge case of returning null with a reason and a blocked list. This is comprehensive for an AI agent to understand the tool's behavior.

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

Conciseness5/5

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

The description is two sentences long, with key information front-loaded: the purpose and then details. Every sentence adds value without redundancy. This is an excellent example of conciseness.

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 5 parameters, 0% schema description coverage, and no output schema or annotations, the description is quite complete. It explains the core logic, tiebreaker, and error handling. It could be improved by describing the return object structure more explicitly, but it still provides sufficient context for an AI agent.

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

Parameters3/5

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

The description adds meaning beyond the input schema for three parameters: candidate_statuses (default pending), agent (optional filter), and changed_files (optional filter). It mentions 'dependencies done' which is not an explicit parameter but is implied behavior. However, it does not explain workspace_root (required) or done_statuses, and schema coverage is 0%, so the description only partially 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?

The description clearly states the tool's purpose: 'Pick the next ready task' with specific criteria (candidate status, dependencies done, optional filter). It differentiates itself from sibling tools by focusing on task scheduling and sequencing, which is distinct from other operations like listing, updating, or classifying 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?

The description provides clear context on when to use the tool (to get the next ready task) and what to expect (tiebreaker priority then id, returns null with reason). However, it does not explicitly state when not to use it or mention alternatives among the sibling tools, which would improve guidance.

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

prune_learningsA

Lifecycle maintenance for .squad/learnings.jsonl (v0.11.0+). Two passes: (1) entries older than max_age_days are marked archived: true and hidden from default read_learnings; (2) entries with ≥ min_recurrence accept decisions on the same normalised finding title get promoted: true on the most-recent matching entry — promoted entries surface first in advisory prompts regardless of scope match. Atomic rewrite under file lock. Never auto-runs (max_age_days defaults to 0). Use dry_run: true to inspect counts without mutating.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
max_age_daysNo
min_recurrenceNo
dry_runNo

TDQS

A4.6/5.0
Behavior5/5

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

No annotations provided, but description fully discloses archival, promotion, atomic rewrite, and auto-run behavior. No contradictions.

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 efficient paragraph front-loading purpose, then detailing passes, lock, and dry_run. No wasted 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?

Covers key behaviors and constraints. Lacks output format details, but acceptable for a maintenance tool with no output schema.

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 0%, but description explains max_age_days, min_recurrence, and dry_run in context. workspace_root not explained but self-evident.

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?

Describes specific lifecycle maintenance for .squad/learnings.jsonl with two clear passes, distinguishing it from reading/recording 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?

Provides usage context: never auto-runs by default, dry_run for inspection. Does not explicitly list alternatives but context is clear.

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

read_learningsA

Read recent team decisions from .squad/learnings.jsonl (path overridable via .squad.yaml.learnings.path). Returns the filtered entries plus a pre-rendered markdown block ready to inject into agent / consolidator prompts. Filters: agent, decision (accept|reject), changed_files (matches scoped entries against these paths). Used by the /squad:review skill in Phase 5 (advisory) and Phase 10 (consolidation) to make the squad less repetitive over time.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
limitNo
agentNo
decisionNo
changed_filesNo
include_renderedNo
include_archivedNo
include_summaryNo

TDQS

A4/5.0
Behavior4/5

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

Discloses return behavior: 'filtered entries plus a pre-rendered markdown block'. Mentions filters and purpose to reduce repetition. No annotations provided, but description adequately covers read-only nature and output.

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

Conciseness4/5

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

Front-loaded with core purpose, then details. Slightly long but every sentence adds value. Could be more concise but overall efficient.

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?

With 8 parameters and no output schema, the description lacks explanation for several parameters and return format details beyond markdown block. Adequate but incomplete.

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?

Description explains file path overridability and filters (agent, decision, changed_files), but misses details on limit, include_rendered, include_archived, include_summary. Schema coverage is 0%, so description partially 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 the action 'Read' and the resource 'recent team decisions from `.squad/learnings.jsonl`', with path overridability. Distinguishes from siblings like record_learning and prune_learnings.

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?

Specifies usage context: 'Used by the /squad:review skill in Phase 5 (advisory) and Phase 10 (consolidation)'. Provides filter options but no explicit when-not-to-use or alternatives.

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

read_squad_configA

Read and resolve .squad.yaml (or .squad.yml) at the given workspace_root. Returns effective weights (defaults merged), threshold, min_score, skip_paths, disable_agents, and the source path (or null if no file present). Composers (compose_squad_workflow, compose_advisory_bundle) read this automatically when they receive workspace_root; this tool is for explicit introspection and for clients that build their own bundle.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes

TDQS

A4.7/5.0
Behavior4/5

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

Describes return fields (effective weights, threshold, etc.) and that it returns null if no file. No annotations provided, but description provides adequate behavioral info for a read tool.

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

Conciseness5/5

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

Single paragraph, front-loaded with action, concise with no unnecessary 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?

Complete for a simple read tool: covers purpose, output, usage context. No missing details given no output schema.

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 one parameter workspace_root is explained in context ('at the given workspace_root'). Though schema coverage is 0%, the description adds sufficient meaning for this simple param.

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 it reads and resolves .squad.yaml at workspace_root. Distinguishes from sibling tools by noting that composers read it automatically.

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 this tool is for explicit introspection and for clients that build their own bundle, contrasting with composers that handle it automatically.

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

record_learningA

Append a team decision (accept | reject) on a finding to .squad/learnings.jsonl. Future runs of the squad will inject the most recent entries into agent / consolidator prompts so the squad stops re-suggesting things the team has already declined (with reason). Side-effecting — writes to disk. Caller (skill or CLI) is responsible for user confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
agentYes
findingNo
lessonNo
triggerNo
evidenceNo
decisionYes
severityNo
reasonNo
prNo
branchNo
scopeNo

TDQS

A3.7/5.0
Behavior4/5

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

The description discloses side-effects ('writes to disk') and explains the impact on future runs. Since no annotations are provided, the description carries full burden. It lacks details on permissions or error behavior but provides good context for a write operation.

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

Conciseness5/5

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

The description is concise with two sentences, front-loading the main action and including essential context about side-effects and future behavior. No unnecessary words.

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

Completeness2/5

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

Given 12 parameters and no output schema or annotations, the description is insufficient. It does not explain the parameters or return value, leaving the agent without critical information for correct invocation.

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

Parameters1/5

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

The description mentions 'team decision (accept | reject)' which maps to the 'decision' parameter, but does not explain any of the other 11 parameters. With 0% schema description coverage, the description fails to compensate for the missing parameter semantics.

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

Purpose5/5

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

The description clearly states the verb 'append' and the resource '.squad/learnings.jsonl', and specifies the action of recording a team decision (accept/reject). It distinguishes from sibling tools like prune_learnings and read_learnings by focusing on appending a decision.

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 the purpose: to prevent re-suggestion by injecting decisions into future prompts. It notes that the caller is responsible for user confirmation, implying appropriate usage. However, it does not explicitly differentiate from alternative sibling tools.

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

record_runA

Append one RunRecord to .squad/runs.jsonl. Single-writer contract: only the lifecycle-owning skills should call this — squad (Phase 1 + Phase 10), debug (Phase A + Phase C), question (Phase 1.5 + Phase 3.5), brainstorm (Step 1.5 + Step 5.5). Validates against the RunRecord schema_version:2 and enforces MAX_RECORD_BYTES (4000) via RECORD_TOO_LARGE on overflow. Caller is responsible for matching in_flight↔terminal rows by id. File mode is 0o600 (user-only) on first create. mode_warning.message is stripped of control chars at write time.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
recordYes

TDQS

A4.1/5.0
Behavior4/5

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

The description reveals several behavioral traits beyond the input schema, including validation against schema_version:2, size enforcement via MAX_RECORD_BYTES and RECORD_TOO_LARGE, file mode 0o600 on first create, and control character stripping. With no annotations provided, the description carries the full burden and covers important mutation and safety details, though it could mention error handling beyond overflow.

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 a single focused paragraph that front-loads the core action. Each sentence provides distinct value: purpose, contract, validation, size limit, caller responsibility, file mode, and string sanitization. It is concise and structured logically, though it could benefit from bullet points for readability.

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 complexity of the tool (nested record object, multiple validations, file operations), the description covers key aspects: action, constraints, single-writer model, and data integrity responsibilities. However, it lacks any mention of return values or success indicators, and no output schema is provided. This gap prevents a perfect score.

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

Parameters3/5

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

The input schema is extremely rich with many nested properties, so the schema itself explains parameters thoroughly. The description adds context about validation and constraints but does not explain individual parameters like workspace_root or record properties. With 0% schema description coverage, the description should ideally compensate more, but the schema's high detail keeps the baseline at 3.

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 ('Append one RunRecord'), resource ('RunRecord'), and target file ('.squad/runs.jsonl'), distinguishing it from sibling tools like 'list_runs' (listing) and 'record_learning' (other recording). It leaves no ambiguity about what the tool does.

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 defines a 'single-writer contract' and lists the allowed calling skills with phase contexts (e.g., squad Phase 1 + Phase 10). It also alerts the caller to match in_flight↔terminal rows by id. However, it does not explicitly state when not to use this tool compared to other recording tools, missing a full exclusion clause.

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

record_tasksA

Bulk-create tasks in .squad/tasks.json. Each task: id (optional, auto-allocated), title, description, dependencies, priority, details, test_strategy, scope (glob), agent_hints. Side-effecting — atomic write (tmp + rename). Validates: unique ids, all dependencies resolve, no self-deps. The host LLM is responsible for confirming with the user before bulk-recording from a parsed PRD.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
tasksYes

TDQS

A4.6/5.0
Behavior5/5

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

With no annotations, the description fully reveals side-effects (writes to file), atomic write method (tmp+rename), and validation rules (unique ids, dependency resolution, no self-deps). Also notes the host LLM responsibility for user confirmation.

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

Conciseness5/5

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

Three sentences, each adding critical information. No wasted words. The most important action and resource are 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?

The description covers purpose, parameters, behavior, and validation. However, it omits the return value or success indication, which is relevant since there is no output schema.

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%, so the description compensates well by listing the fields inside the 'tasks' array. However, it does not describe the 'workspace_root' parameter, leaving a minor 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 verb 'bulk-create' and the specific resource '.squad/tasks.json'. It lists the fields included in each task, distinguishing it from siblings like 'expand_task' (single task) or 'update_task_status'.

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

Usage Guidelines4/5

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

The description gives a usage context: 'after parsing a PRD' and a requirement to confirm with the user. It implies bulk creation rather than individual tasks, but does not explicitly state when not to use it or list alternatives.

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

score_riskA

Compute risk level (Low/Medium/High) from boolean signals. Pure function. 0-1=Low, 2-3=Medium, 4+=High.

ParametersJSON Schema
NameRequiredDescriptionDefault
touches_authNo
touches_moneyNo
touches_migrationNo
files_countNo
loc_changedNo
new_moduleNo
api_contract_changeNo

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations provided, the description must carry the burden of behavioral disclosure. It states 'Pure function' and gives the risk mapping, which is useful. However, it lacks details on error handling, input validation, or how numbers (files_count, loc_changed) are used despite mentioning only boolean signals. The description adds some transparency but is 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 extremely concise: three short sentences, each adding distinct information (purpose, property, mapping). No wasted words, front-loaded with the key purpose.

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

Completeness2/5

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

Given the tool has 7 parameters, no output schema, and no annotations, the description is insufficient. It does not explain how the risk score is computed from the parameters, leaving ambiguity (e.g., are boolean signals summed? How are numbers handled?). The agent lacks information to correctly invoke the tool without guessing.

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

Parameters2/5

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

The input schema has 7 parameters with 0% description coverage. The description only says 'from boolean signals', but the schema includes both boolean and number parameters. It does not explain how each parameter contributes to the risk score or how the count is computed from mixed types. The mapping given is vague regarding the role of numeric parameters, offering minimal semantic help.

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 'Compute' and the output 'risk level (Low/Medium/High)' from 'boolean signals'. It includes the mapping from score range to level, making the purpose very specific. While it doesn't explicitly differentiate from siblings like classify_work_type, the unique mapping and mention of boolean signals set it apart sufficiently.

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 says 'Pure function', implying it has no side effects and can be called freely. However, it does not provide explicit guidance on when to use this tool versus similar siblings (e.g., classify_work_type, score_rubric) or any exclusions. Usage context is implied but not fully explicit.

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

score_rubricA

Compute a weighted multi-dimensional rubric scorecard from per-agent advisory scores (0-100). Each agent represents one dimension (Architecture, Security, Testing, etc.) with a default weight; weights can be overridden per-repo via .squad.yaml. Returns weighted_score, per-dimension breakdown, pass/fail vs threshold (default 75), and a pre-formatted ASCII scorecard. Renormalises across agents that actually scored, so a partial advisory pass produces a meaningful score.

ParametersJSON Schema
NameRequiredDescriptionDefault
scoresYes
weightsNo
thresholdNo

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 behavioral traits: expects scores 0-100, default weights, renormalisation across active agents, returns weighted_score, per-dimension breakdown, pass/fail vs default threshold 75, and ASCII scorecard. No contradictions.

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

Conciseness5/5

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

Three sentences: first states core purpose, second adds weight/threshold details, third explains renormalisation and outputs. Every sentence adds value, no redundancy, 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?

Given 3 parameters, no output schema, and nested objects, the description covers inputs (scores, weights, threshold), behavior (weighting, renormalisation), and outputs (weighted_score, breakdown, pass/fail, ASCII card). It handles the partial advisory pass special case, making it complete for an agent selecting this 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?

Despite 0% schema description coverage, the description adds meaning by explaining each dimension corresponds to an agent, scores are 0-100, weights have defaults overridable via .squad.yaml, and threshold defaults to 75. It could detail the weights object structure (only allowed agent names) but provides substantial semantic value 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 the tool computes a weighted multi-dimensional rubric scorecard from per-agent advisory scores, distinguishing it from sibling tools like score_risk by focusing on rubric scoring with multiple dimensions and pass/fail threshold.

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 context on when to use (computing scorecard from per-agent scores) and explains key features like default weights, overridable weights, and renormalisation. However, it does not explicitly state when not to use or mention alternative tools, though the context is sufficient for most use cases.

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

select_squadA

Select agents for a work type given changed files. Combines core matrix with content sniff and path hints. Reads up to 16384 bytes per file when workspace_root is set; signals can be ext-gated to avoid cross-stack false positives.

ParametersJSON Schema
NameRequiredDescriptionDefault
work_typeYes
filesNo
read_contentNo
force_agentsNo
workspace_rootNo

TDQS

A3.7/5.0
Behavior4/5

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

Discloses reading up to 16384 bytes per file when workspace_root is set and ext-gating signals. With no annotations, description provides useful behavioral context beyond basic read traits.

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

Conciseness5/5

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

Two sentences, front-loaded with purpose, no unnecessary words.

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

Completeness2/5

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

With 5 parameters, no output schema, and no parameter descriptions, the description omits return values, algorithm details, and parameter semantics, leaving significant gaps for an agent to use the tool correctly.

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

Parameters2/5

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

Schema description coverage is 0% and description does not explain parameter meanings (e.g., files structure, read_content, force_agents). Only workspace_root and file reading are partially covered.

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 'Select agents for a work type given changed files', with specific verb and resource. Distinguishes from sibling tools like classify_work_type and slice_files_for_agent.

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?

Implies usage context (changed files, work type) but lacks explicit when-to-use or alternatives. Mentions ext-gating but no exclusions.

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

slice_files_for_agentB

Filter a file list to those owned by a specific agent. Uses path hints + content sniff. Reads up to 16384 bytes per file when workspace_root is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentYes
filesYes
read_contentNo
workspace_rootNo

TDQS

B3/5.0
Behavior2/5

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

With no annotations, the description must cover behavioral traits. It discloses the read limit (16384 bytes) and that it depends on workspace_root, but lacks information on whether the tool is read-only, what happens to the original files, or any side effects. This is insufficient for a tool that reads file content.

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 two sentences, front-loaded with the core purpose, and contains no fluff. It is concise but could benefit from a clearer separation of behavior and parameters.

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

Completeness2/5

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

Given the tool's complexity (filtering with content sniffing) and lack of output schema, the description is incomplete. It does not explain the return value, error conditions, or how the filtering logic works in detail. Significant gaps remain.

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

Parameters1/5

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

Schema coverage is 0%, so the description must explain parameters. It does not mention the meaning of 'agent', 'files', 'read_content', or 'workspace_root' except a brief note on workspace_root. No parameter-level detail is provided, leaving the agent without guidance on how to use the inputs.

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 'Filter' and the resource 'a file list to those owned by a specific agent'. This distinguishes it from the sibling 'slice_files_for_task' which likely filters by task. The purpose is specific and unambiguous.

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

Usage Guidelines3/5

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

The description provides some context on how it works ('Uses path hints + content sniff') but does not explicitly state when to use this tool over its siblings, nor does it mention any exclusions or prerequisites. Usage guidance 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.

slice_files_for_taskB

Filter a file list to those matching a task's scope glob. Without a scope, the task is repo-wide and all files match. Same glob primitive as skip_paths and learnings scope.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
task_idYes
filesYes

TDQS

B3.4/5.0
Behavior4/5

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

No annotations provided, so description carries full burden. It discloses that matching uses a glob primitive, and without scope all files match. Provides context about the glob being the same as skip_paths and learnings scope. Does not mention error states or side effects, but core behavior is clear.

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

Conciseness5/5

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

Two concise sentences front-loading the action, no extraneous words. Efficiently communicates the tool's core purpose and a key behavioral detail.

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

Completeness3/5

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

For a simple filter tool with 3 parameters and no output schema, the description explains the filtering logic but omits output format and error handling (e.g., what happens if task_id is invalid or glob malformed). Adequate but not fully complete.

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

Parameters1/5

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

Schema has 3 parameters with 0% description coverage. The description does not mention any parameter details, leaving the agent to infer from context. Fails to compensate 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.

Purpose4/5

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

Description clearly states the tool filters a file list based on a task's scope glob. It distinguishes from sibling tools by referencing the same glob primitive as skip_paths and learnings scope, but does not explicitly mention the sibling slice_files_for_agent.

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: use when needing to filter files by task scope. Explains behavior when no scope exists but lacks explicit when-not or alternative tool guidance.

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

update_task_statusA

Flip a task (or subtask) status: pending / in-progress / review / done / blocked / cancelled. Stamps updated_at. Atomic write. Throws when the task / subtask id is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
workspace_rootYes
task_idYes
subtask_idNo
statusYes

TDQS

A4/5.0
Behavior5/5

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

No annotations provided, so the description carries full burden. It explicitly states 'Stamps updated_at', 'Atomic write', and 'Throws when the task / subtask id is unknown', providing clear 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?

Two concise sentences: first defines the action and allowed values, second adds behavioral traits. No redundant phrases, front-loaded with key information.

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

Completeness4/5

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

Given 4 parameters, no output schema, the description covers the mutation, allowed values, atomicity, timestamp, and error condition. Missing success return behavior, but overall adequate.

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

Parameters3/5

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

Schema coverage is 0%, leaving parameter descriptions to the tool text. The description clarifies 'task (or subtask) status' implying task_id and optional subtask_id, and the status enum is listed. However, workspace_root is not explained.

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 specific verb 'Flip' with clear resource 'task (or subtask) status', lists all allowed statuses, and distinguishes itself from sibling tools like 'classify_work_type' or 'next_task' by focusing on direct status mutation.

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. It does not mention when not to use it or suggest other tools for similar purposes.

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

validate_plan_textA

Heuristic check for inviolable rule violations in a plan text: git commit/push fences, emojis in code blocks, non-English identifiers in code blocks, implementation-before-approval markers. Advisory only — never blocking.

ParametersJSON Schema
NameRequiredDescriptionDefault
planYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations provided. The description discloses it is heuristic and advisory, but lacks details on side effects, performance, or error behavior. With no annotations, the description carries moderate burden and provides some transparency.

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 pack the essential purpose and key behavioral note. No superfluous information; efficient and front-loaded.

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?

Core functionality is covered, but missing details on return value (no output schema) and parameter format. For a simple tool, this is adequate but not comprehensive.

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

Parameters2/5

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

Only one parameter 'plan' with no schema description coverage. The description calls it 'plan text' but does not explain format or expected content beyond the rule list. Insufficient guidance for the agent.

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 performs a heuristic check for inviolable rule violations in plan text, listing specific examples like git fences and emojis. It differentiates from sibling tools which handle different workflows.

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?

Declares the check is 'advisory only — never blocking,' which tells when to use it as a non-blocking validation. Does not explicitly compare to alternatives, but the context is implied.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 27 tool updatesv1.8.0
    • First observedapply_consolidation_rules
    • First observedclassify_work_type
    • First observedcompose_advisory_bundle
    • First observedcompose_prd_parse
    • First observedcompose_squad_workflow
    • First observeddetect_changed_files
    • First observeddrain_journal
    • First observedexpand_task
    • First observedget_agent_definition
    • First observedinit_local_config
    • First observedlist_agents
    • First observedlist_runs
    • First observedlist_tasks
    • First observednext_task
    • First observedprune_learnings
    • First observedread_learnings
    • First observedread_squad_config
    • First observedrecord_learning
    • First observedrecord_run
    • First observedrecord_tasks
    • First observedscore_risk
    • First observedscore_rubric
    • First observedselect_squad
    • First observedslice_files_for_agent
    • First observedslice_files_for_task
    • First observedupdate_task_status
    • First observedvalidate_plan_text

TDQS

A3.6/5.0

Scored across 27 tools

Disambiguation4/5

Tools are mostly distinct with detailed descriptions, but some orchestration tools like compose_squad_workflow and compose_advisory_bundle could be confused by an agent as they both aggregate pipelines. Overall, the purpose of each tool is well-defined.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (e.g., detect_changed_files, record_learning), with no mixing of conventions. Naming is predictable and intuitive.

Tool Count3/5

With 27 tools, the server is on the heavy side but justifiable given the complex domain of squad-based code review and workflow management. A smaller set could cover core functionality, but the current count reflects comprehensive coverage.

Completeness4/5

The tool surface covers nearly all aspects of the squad workflow: config, file detection, agent selection, task management, learning, run tracking, and advisory composition. Minor gaps like external notifications are acceptable given the scope.

Maintenance

ActivityInactive
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers