Convoys

Convoys are the primary unit for tracking batched work across rigs.

Quick Start

# Create a convoy tracking some issues
gt convoy create "Feature X" gt-abc gt-def --notify overseer

# Check progress
gt convoy status hq-cv-abc

# List active convoys (the dashboard)
gt convoy list

# See all convoys including landed ones
gt convoy list --all

Concept

A convoy is a persistent tracking unit that monitors related issues across multiple rigs. When you kick off work - even a single issue - a convoy tracks it so you can see when it lands and what was included.

๐Ÿšš Convoy (hq-cv-abc)
                         โ”‚
            โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
            โ”‚            โ”‚            โ”‚
            โ–ผ            โ–ผ            โ–ผ
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚ gt-xyz  โ”‚  โ”‚ gt-def  โ”‚  โ”‚ bd-abc  โ”‚
       โ”‚ gastown โ”‚  โ”‚ gastown โ”‚  โ”‚  beads  โ”‚
       โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
            โ”‚            โ”‚            โ”‚
            โ–ผ            โ–ผ            โ–ผ
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
       โ”‚  nux    โ”‚  โ”‚ furiosa โ”‚  โ”‚  amber  โ”‚
       โ”‚(polecat)โ”‚  โ”‚(polecat)โ”‚  โ”‚(polecat)โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
                    "the swarm"
                    (ephemeral)

Convoy vs Swarm

ConceptPersistent?IDDescription
ConvoyYeshq-cv-Tracking unit. What you create, track, get notified about.
SwarmNoNoneEphemeral. "The workers currently on this convoy's issues."

When you "kick off a swarm", you're really:

  1. Creating a convoy (the tracking unit)
  2. Assigning polecats to the tracked issues
  3. The "swarm" is just those polecats while they're working

When issues close, the convoy lands and notifies you. The swarm dissolves.

Convoy Lifecycle

OPEN โ”€โ”€(all issues close)โ”€โ”€โ–บ LANDED/CLOSED
  โ†‘                              โ”‚
  โ””โ”€โ”€(add more issues)โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
       (auto-reopens)

StateDescription
openActive tracking, work in progress
closedAll tracked issues closed, notification sent

Adding issues to a closed convoy reopens it automatically.

Commands

Create a Convoy

# Track multiple issues across rigs
gt convoy create "Deploy v2.0" gt-abc bd-xyz --notify gastown/joe

# Track a single issue (still creates convoy for dashboard visibility)
gt convoy create "Fix auth bug" gt-auth-fix

# With default notification (from config)
gt convoy create "Feature X" gt-a gt-b gt-c

Add Issues

> Note: gt convoy add is not yet implemented. Use bd dep add directly:

# Add issue to existing convoy
bd dep add hq-cv-abc gt-new-issue --type=tracks

# Adding to closed convoy requires reopening first
bd update hq-cv-abc --status=open
bd dep add hq-cv-abc gt-followup-fix --type=tracks

Check Status

# Show issues and active workers (the swarm)
gt convoy status hq-abc

# All active convoys (the dashboard)
gt convoy status

Example output:

๐Ÿšš hq-cv-abc: Deploy v2.0

  Status:    โ—
  Progress:  2/4 completed
  Created:   2025-12-30T10:15:00-08:00

  Tracked Issues:
    โœ“ gt-xyz: Update API endpoint [task]
    โœ“ bd-abc: Fix validation [bug]
    โ—‹ bd-ghi: Update docs [task]
    โ—‹ gt-jkl: Deploy to prod [task]

List Convoys (Dashboard)

# Active convoys (default) - the primary attention view
gt convoy list

# All convoys including landed
gt convoy list --all

# Only landed convoys
gt convoy list --status=closed

# JSON output
gt convoy list --json

Example output:

Convoys

  ๐Ÿšš hq-cv-w3nm6: Feature X โ—
  ๐Ÿšš hq-cv-abc12: Bug fixes โ—

Use 'gt convoy status <id>' for detailed view.

Notifications

When a convoy lands (all tracked issues closed), subscribers are notified:

# Explicit subscriber
gt convoy create "Feature X" gt-abc --notify gastown/joe

# Multiple subscribers
gt convoy create "Feature X" gt-abc --notify mayor/ --notify --human

Notification content:

๐Ÿšš Convoy Landed: Deploy v2.0 (hq-cv-abc)

Issues (3):
  โœ“ gt-xyz: Update API endpoint
  โœ“ gt-def: Add validation
  โœ“ bd-abc: Update docs

Duration: 2h 15m

Auto-Convoy on Sling

When you sling a single issue without an existing convoy:

gt sling bd-xyz beads/amber

This auto-creates a convoy so all work appears in the dashboard:

  1. Creates convoy: "Work: bd-xyz"
  2. Tracks the issue
  3. Assigns the polecat

Even "swarm of one" gets convoy visibility.

Cross-Rig Tracking

Convoys live in town-level beads (hq-cv-* prefix) and can track issues from any rig:

# Track issues from multiple rigs
gt convoy create "Full-stack feature" \
  gt-frontend-abc \
  gt-backend-def \
  bd-docs-xyz

The tracks relation is:

  • Non-blocking: doesn't affect issue workflow
  • Additive: can add issues anytime
  • Cross-rig: convoy in hq-, issues in gt-, bd-, etc.

Convoy vs Rig Status

ViewScopeShows
gt convoy status [id]Cross-rigIssues tracked by convoy + workers
gt rig status <rig>Single rigAll workers in rig + their convoy membership

Use convoys for "what's the status of this batch of work?" Use rig status for "what's everyone in this rig working on?"

See Also