Skip to content

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

Closed

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions