Skip to content

[Watch] Add /fleet parallel dispatch mode for squad watch --execute #775

@tamirdresher

Description

@tamirdresher

/fleet Parallel Dispatch for squad watch --execute

Summary

Add a --dispatch-mode flag to the execute capability that enables hybrid dispatch: /fleet for read-heavy work (triage, analysis, reviews) and the existing task tool for write-heavy work (code changes, PRs).

Benchmark Results (tested on real issues)

Metric Fleet (parallel) Sequential Improvement
Total time (4 issues) 116s 332s 2.9x faster
Per-issue avg ~29s ~83s 2.9x
Premium requests 12 (~3/track) ~16 ~25% cheaper
MCP startup overhead 1x (shared) 4x (per process) 4x less

Quality Validation

Fleet correctly triaged 4 real open issues with proper urgency classification:

  • 🔴 P0: DK8S on-call checklist — same-day action required
  • 🟡 P1: NPD stale PR — SLA already breached
  • 🟡 P1: Squad watch logging gaps — reliability issue
  • P2: Arxiv paper assessment — research task

Each track produced specific, actionable next steps — not generic summaries.

Key Finding: Fleet Ignores Custom Agents

When referencing @seven or @data in a /fleet prompt, Copilot CLI spawns generic explore agents, NOT the custom agents from .github/agents/. This means agent charters are NOT followed in fleet mode.

Implication: Fleet is ideal for read-only analysis but NOT for charter-driven code changes.

Proposed Design

Add --dispatch-mode to watch CLI flags:

// New flag in cli-entry.ts
const dispatchMode = args.includes('--dispatch-mode')
  ? args[args.indexOf('--dispatch-mode') + 1] as 'fleet' | 'task' | 'hybrid'
  : undefined;

Modify the execute capability to support three modes:

// In execute.ts
if (dispatchMode === 'fleet') {
  await executeViaFleet(batch, context);
} else if (dispatchMode === 'hybrid') {
  const { reads, writes } = classifyIssues(batch);
  if (reads.length) await executeViaFleet(reads, context);
  if (writes.length) await Promise.all(writes.map(i => executeOne(i, context)));
} else {
  // Default: existing Promise.all behavior (unchanged)
  await Promise.all(batch.map(i => executeOne(i, context)));
}

Issue classification by title keywords:

  • Read-heavy → fleet: research, review, analyze, investigate, audit, check, scan, assess, evaluate, fact-check, document, report
  • Write-heavy → task tool: fix, implement, create, build, refactor, add, update, migrate, deploy, feature

New files needed

  • packages/squad-cli/src/cli/commands/watch/capabilities/fleet-dispatch.ts — fleet dispatch capability
  • Update packages/squad-cli/src/cli/commands/watch/capabilities/execute.ts — add hybrid dispatch mode
  • Update packages/squad-cli/src/cli-entry.ts — add --dispatch-mode flag

How /fleet works (reference)

Blog: https://github.blog/ai-and-ml/github-copilot/run-multiple-agents-at-once-with-fleet-in-copilot-cli/

copilot -p "/fleet Execute these tracks in parallel:
  Track 1 (seven): Research issue #42
  Track 2 (q): Fact-check PR #43
  ..." --allow-all --no-ask-user --autopilot

Important gotchas:

  • Don't use -s (silent) flag — suppresses results
  • Write prompt to temp file — PowerShell splits multi-line CLI args
  • Custom agents ignored — fleet uses generic explore agents
  • Sub-agents share filesystem with no locking — need worktree isolation for writes

Relationship to PR #709

This builds on the watch capability plugin system from PR #709 (merged to dev). The execute capability already supports Promise.all parallelism — this adds fleet as an alternative dispatch mechanism for read-heavy work.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions