Skip to main content

Mail Roadmap

Tracks the full Gastown mail feature set and when we expect to need each piece. Nothing here is speculative — every feature exists in Gastown production. The question is ordering.

Phase 1 — Basic Mail ✓

Minimum viable mail. Human ↔ agent conversation, agents check inbox in loop. Implemented.
FeatureStatus
Mail = bead with type “message”
gc mail send <to> -s "subject" -m "body"
gc mail inbox [agent]
gc mail read <id> (marks read, keeps open)
gc mail peek <id> (view without marking read)
from / to fields
Unread tracking via “read” label
Implicit “human” sender/recipient
Validate recipient exists

Phase 2 — Agent-to-Agent Coordination ✓

Implemented. Subject/body separation, threading, and reply.
FeatureStatus
Agent → agent mail
-s / --subject flag
Reply-to / threading via labels
gc mail reply <id> -s "..." -m "..."
gc mail thread <thread-id>

Phase 3 — Message Lifecycle ✓

Implemented. Read/unread toggle, archive, delete, count.
FeatureStatus
gc mail archive <id>
gc mail delete <id>
gc mail mark-read <id>
gc mail mark-unread <id>
gc mail count [agent]
Wisps (ephemeral, default)Deferred — needs patrol/cleanup
--permanent flagDeferred — needs wisps first
Pinned messagesDeferred — needs context cycling
Stale message archivalDeferred — needs session restart awareness

Phase 4 — Priority & Urgency

When health patrol exists and can act on priority.
FeatureStatus
Priority field in Message struct✓ (field exists, CLI not yet exposed)
CC field in Message struct✓ (field exists, CLI not yet exposed)
--urgent flagDeferred — needs priority CLI
Nudge on send (--notify)
Idle-aware notificationDeferred — needs tmux idle detection
Nudge enqueue for busy agentsDeferred — needs nudge queue
Priority-stratified inbox checkDeferred — needs priority CLI

Phase 5 — Routing & Groups

When multi-project and team packs exist.
FeatureWhy deferred
Queue messages (claiming)Needs ephemeral worker pools
gc mail claim / gc mail releaseQueue consumer commands
Announce/channel (broadcast)Needs subscriber concept
@group expansion (@town, @rig)Needs project scoping
CC recipients CLICC field exists; CLI support deferred
List addresses (fan-out)Needs messaging.json config

Phase 6 — Delivery Guarantees

When reliability matters at scale.
FeatureWhy deferred
Two-phase delivery (pending → acked)Needs delivery tracking
Idempotent ack with timestamp reuseNeeds two-phase first
Bounded concurrent acksOptimization for scale
--no-notify / suppress notifyNeeds nudge infrastructure
DND / muted agentsNeeds health config

Gastown Features We May Never Need

These exist in Gastown but may not apply to Gas City’s model.
FeatureReason
Legacy JSONL storageGas City is beads-only
Crew-specific inbox pathsNo hardcoded roles
gt mail searchNice to have, not essential
Message type field (task/scavenge/notification/reply)May not need structured types
Last modified on March 19, 2026