squad-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@squad-mcpReview the current changes with the advisory squad"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
squad-mcp
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
Claude Code plugin (recommended)
/plugin marketplace add ggemba/squad-mcp
/plugin install squad@gempackThe 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-mcpThe 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.jsRelated 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:
Classification.
compose_squad_workflowlooks at your prompt + changed files and prints something likework_type: Feature, risk: Low, agents: [developer, qa].Depth resolution. It also picks an execution depth —
quick,normal, ordeep— and surfaces it asmode+mode_sourceon the output. Auto-detect rules:deeponrisk == High/ Security work / auth-money-migration signals;quickon Low-risk diffs with ≤5 files and no high-risk signals;normalotherwise. Pass--quick/--normal/--deepto override. If you force--quickon a high-risk diff,securityis force-included and a structuredmode_warningis set so the host can surface it.Plan. The skill drafts an implementation plan and sends it to
tech-lead-plannerfor review (skipped inquick). You see the plan in chat.Gate 1. The skill stops and asks you to approve. Reply
approved,go, or equivalent to proceed; anything else cancels.Implementation. After approval, the skill writes code. Never commits or pushes — that's your call.
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-includesarchitect+securityfordeep) reviews in parallel and emits a findings list + aScore: NN/100.Consolidation.
tech-lead-consolidatorproduces 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% qaThe
tech-lead-consolidatorpersona is skipped inquickmode;apply_consolidation_rulesstill runs to produce the verdict. If the verdict isCHANGES_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 thecode-explorersubagent to grep + excerpt the relevant lines and answers withfile:linecitations. 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 viacode-explorer, then dispatches thedebuggerpersona to emit N ranked hypotheses (1 on--quick, 3 on--normal, 5 with a cross-check pass on--deep) withfile:lineevidence 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 indocs/adr/), and writes resolved terms back to both as it goes. Run it before/squad:implementto stress-test a plan; pass--no-writefor 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:pipelinebelow./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 deterministicrgsweep does the file IO, then tiered LLM enrichment (Haiku tier-1, Sonnet escalation onrequires_semanticrules 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>.mdby 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| SKA 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 <task>"] --> 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 --> GDepth (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_authfires →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—--quickis honoured butsecurityis force-included as one of the 2 agents becausetouches_moneyfired. The host surfaces themode_warningso the downgrade is never silent.
Review an existing PR and post the verdict:
/squad:review #42Runs 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 withfile:linecitations. Sub-second on--quick.
See where your runs went:
/squad:statsReads
.squad/runs.jsonland 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 flowThe 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:
Reconstructs how far the feature has progressed from the conversation context (or the
.squad/pipeline-state.jsonresume cache).Dispatches the next sub-skill via the
Skilltool with arguments pre-filled and depth flags forwarded.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 |
| Enter the pipeline mid-sequence ( |
| 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 jobWhat it provides
Tools (deterministic, pure functions)
Tool | Purpose |
| Hardened |
| Heuristic |
| Compute Low/Medium/High from boolean signals (auth, money, migration, files_count, new_module, api_change). |
| Select advisory agents for a work type. Combines matrix + path hints + content sniff. Returns evidence per file. |
| Filter a file list to those owned by a single agent. Used to build sliced advisory prompts. |
| Advisory check for inviolable-rule violations in a plan (commit/push fences, emojis in code blocks, non-English identifiers, impl-before-approval). |
| One-call pipeline: |
| One-call full bundle: |
| Aggregate advisory reports → final verdict (APPROVED / CHANGES_REQUIRED / REJECTED). Returns weighted rubric scorecard when reports carry per-dimension scores. |
| Pure rubric calculator. Takes per-agent scores (0-100) + optional weight overrides, returns weighted score, per-dimension breakdown, and pre-formatted ASCII scorecard. |
| Read and resolve |
| Load past accept/reject decisions from |
| Append one accept/reject decision to |
| Lifecycle maintenance (v0.11.0+): mark entries older than |
| 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 |
| Read tasks from |
| 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. |
| Bulk-create tasks. Allocates ids sequentially, validates dependencies resolve (forward refs in batch ok), rejects duplicates and self-deps. Atomic write. |
| Flip a task or subtask status: pending / in-progress / review / done / blocked / cancelled. |
| Append subtasks to an existing task. Mechanical only — caller (skill or LLM) supplies the subtask inputs. |
| Filter a file list to those matching a task's |
| List configured agents with role, ownership, naming conventions. |
| Return the full markdown system prompt for an agent (local override → embedded default). |
| Copy embedded defaults to the local override directory so they can be edited. |
| Append one |
| 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 |
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 /poin v0.6.0 — older 0.5.x consumers must useagent://poinstead.)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 |
| implementation workflow | Single skill, two modes. |
| read-only code Q&A | Spawns the |
| read-only bug investigation | Bridges |
| Socratic plan validation | Grills your plan one question at a time against the project's domain language ( |
| pre-implementation research | Web research in parallel + specialist agent perspectives → options matrix with cited sources and a recommendation. Produces no code. Position: |
| cradle-to-grave orchestration | Chains six squad steps — |
| 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 |
| 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. |
| observability dashboard | Read |
| auto-journaling opt-in | Copies the bundled |
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:pipelinewraps this whole sequence (with/squad:grillmeand/squad:tasksin 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-ownerAll 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 servicesreject 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)skipor 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 42How 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 defaultread_learningsinjection. 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 journalThe 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.mdThe skill (Phase 0.5):
Calls
compose_prd_parsewith the PRD text.Receives a prompt + JSON schema and runs them through Claude.
Shows you the parsed tasks — title, deps, priority, scope, agent_hints — for review.
Calls
record_tasksonly 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 idFor each task:
slice_files_for_tasknarrows the changed-files list to the task'sscope.compose_squad_workflowruns against that slice; ifagent_hintsis set, only those agents wake up.Phase 1 onward proceeds normally, just with much less context.
When done, the skill flips status to
doneviaupdate_task_status.
Configuration
Override defaults via .squad.yaml:
tasks:
path: .squad/tasks.json # default
enabled: true # set false to silence reads without deleting the fileWrites (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 doneThe 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-repoThe CLI maps verdict → review action deterministically:
Verdict | Score signal | GitHub | Bitbucket Cloud |
| — |
|
|
| — |
|
|
| weighted < |
|
|
| (opt-in floor) |
|
|
| passes threshold |
|
|
Platform auto-detection
--platform auto (default) parses git remote get-url origin:
github.com/<owner>/<repo>→ GitHubbitbucket.org/<workspace>/<repo>→ Bitbucket CloudAnything 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 |
|
Bitbucket Cloud |
|
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 MinorRepo 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 FIRSTWhen 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 bothOverride 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 presentDetection strategy (select_squad / slice_files_for_agent)
Three layers, in order of strength:
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.pyforfrom sqlalchemy) to avoid cross-stack false positives.Path hint — file path regex (e.g.
*Repository.cs,Migrations/,Controller.cs,api/,models/). Cheap, complementary.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_DIRis set, that path is used exclusively (the platform default is not consulted).Otherwise:
%APPDATA%\squad-mcp\agentson Windows,$XDG_CONFIG_HOME/squad-mcp/agentson Unix (falls back to~/.config/squad-mcp/agentsifXDG_CONFIG_HOMEis 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 toolsapply_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.
| Name | Required | Description | Default |
|---|---|---|---|
| reports | Yes | ||
| weights | No | ||
| threshold | No | ||
| min_score | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| user_prompt | Yes | ||
| files | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| user_prompt | Yes | ||
| plan | Yes | ||
| base_ref | No | ||
| staged_only | No | ||
| working_tree | No | ||
| read_content | No | ||
| mode | No | ||
| force_work_type | No | ||
| force_agents | No | ||
| risk_signals | No | ||
| include_hunks | No | ||
| max_hunk_bytes_per_file | No | ||
| include_language_supplements | No | ||
| min_files_per_secondary_language | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| prd_text | Yes | ||
| max_tasks | No | ||
| include_existing | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| user_prompt | Yes | ||
| base_ref | No | ||
| staged_only | No | ||
| working_tree | No | ||
| read_content | No | ||
| mode | No | ||
| run_mode | No | ||
| force_work_type | No | ||
| force_agents | No | ||
| risk_signals | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| base_ref | No | ||
| staged_only | No | ||
| working_tree | No | ||
| with_stats | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| task_id | Yes | ||
| subtasks | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| force | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| since | No | ||
| limit | No | ||
| agent | No | ||
| verdict | No | ||
| mode | No | ||
| invocation | No | ||
| work_type | No | ||
| aggregate | No | ||
| trend_days | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| status | No | ||
| agent | No | ||
| changed_files | No | ||
| limit | No |
TDQS
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.
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.
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.
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.
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.
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'.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| agent | No | ||
| changed_files | No | ||
| candidate_statuses | No | ||
| done_statuses | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| max_age_days | No | ||
| min_recurrence | No | ||
| dry_run | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| limit | No | ||
| agent | No | ||
| decision | No | ||
| changed_files | No | ||
| include_rendered | No | ||
| include_archived | No | ||
| include_summary | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| agent | Yes | ||
| finding | No | ||
| lesson | No | ||
| trigger | No | ||
| evidence | No | ||
| decision | Yes | ||
| severity | No | ||
| reason | No | ||
| pr | No | ||
| branch | No | ||
| scope | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| record | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| tasks | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| touches_auth | No | ||
| touches_money | No | ||
| touches_migration | No | ||
| files_count | No | ||
| loc_changed | No | ||
| new_module | No | ||
| api_contract_change | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| scores | Yes | ||
| weights | No | ||
| threshold | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| work_type | Yes | ||
| files | No | ||
| read_content | No | ||
| force_agents | No | ||
| workspace_root | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| agent | Yes | ||
| files | Yes | ||
| read_content | No | ||
| workspace_root | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| task_id | Yes | ||
| files | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace_root | Yes | ||
| task_id | Yes | ||
| subtask_id | No | ||
| status | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes |
TDQS
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.
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.
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.
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.
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.
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.
27 tool updates
v1.8.0- First observed
apply_consolidation_rules - First observed
classify_work_type - First observed
compose_advisory_bundle - First observed
compose_prd_parse - First observed
compose_squad_workflow - First observed
detect_changed_files - First observed
drain_journal - First observed
expand_task - First observed
get_agent_definition - First observed
init_local_config - First observed
list_agents - First observed
list_runs - First observed
list_tasks - First observed
next_task - First observed
prune_learnings - First observed
read_learnings - First observed
read_squad_config - First observed
record_learning - First observed
record_run - First observed
record_tasks - First observed
score_risk - First observed
score_rubric - First observed
select_squad - First observed
slice_files_for_agent - First observed
slice_files_for_task - First observed
update_task_status - First observed
validate_plan_text
TDQS
Scored across 27 tools
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.
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.
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.
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
Related MCP Connectors
Read-only AI coding tools for change verification, release readiness, capacity, and guidance.
AI-native git hosting — repos, PRs, issues, CI gates, and AI code review over MCP (60 tools).
Read-only, deterministic AI triage and readiness tools implementing Sophon's published rubrics.
A Model Context Protocol (MCP) application for automated GitHub PR analysis and issue management.…
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceMCP server for AI DevTool workflow, exposing tools and resources for code review, repository chat, and repository operations.1-
- AlicenseNot gradedqualityAmaintenanceAI code reviews and git activity digests with machine-readable risk scoring, available as an MCP server for use within an agent session.1MIT
- AlicenseNot gradedqualityCmaintenanceProvides MCP tools for AI agents to classify changes into autonomous or human review lanes, and to run shadow simulations over backlogs without shipping anything.MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for persistent code exploration and diff-aware review, exposing explore and review tools to map call paths, blast radius, and generate explainable risk-scored reports.22 npm2MIT