Extracts work items as Beads and bundles them into Convoys for Gastown multi-agent execution.
This skill extracts work items from the project and structures them as Gastown Beads and Convoys.
Use this skill when:
project/
├── .gt/
│ ├── beads/
│ │ ├── gt-abc12.json # Individual work items
│ │ ├── gt-def34.json
│ │ └── ...
│ └── convoys/
│ ├── convoy-001.json # Bundled work assignments
│ └── ...
└── [existing project files]
Scan for work items in:
GitHub Issues (most authoritative)
gh issue list --state open --json number,title,body,labels
PRD Documents
docs/*.md with user storiesdocs/PRD*.md filesTODO Comments in Source Code
// TODO:, # TODO:, /* TODO */// FIXME:, // HACK:, // XXX:Existing Roadmap Outputs
scopecraft/EPICS_AND_STORIES.md (from Stage 2)scopecraft/OPEN_QUESTIONS.mdBacklog Files
BACKLOG.md, TODO.mddocs/backlog/, docs/roadmap/{
"$schema": "bead-v1",
"id": "gt-abc12",
"title": "Add user authentication",
"type": "feature",
"complexity": "L",
"priority": "high",
"status": "pending",
"dependencies": [],
"acceptance_criteria": [
"User can sign up with email",
"User can sign in with Google OAuth",
"Session persists across page refresh"
],
"evidence": {
"source": "docs/PRD-auth.md",
"line": 42,
"extracted": "2026-01-27T10:00:00Z"
},
"metadata": {
"epic": "User Management",
"labels": ["auth", "security"]
}
}
| Type | Description | Source Indicators |
|---|---|---|
feature | New functionality | PRDs, user stories, feature requests |
bug | Defect fix | FIXME comments, bug issues |
chore | Maintenance, refactoring | HACK comments, tech debt |
docs | Documentation | README updates, API docs |
spike | Research/investigation | Questions, unknowns |
| Size | Description | Typical Effort |
|---|---|---|
XS | Trivial change | < 1 hour |
S | Small task | 1-4 hours |
M | Medium task | 1-2 days |
L | Large task | 3-5 days |
XL | Epic-sized | 1-2 weeks |
Bead IDs follow Gastown convention: gt-<5-char-alphanumeric>
gt-abc12, gt-xyz99, gt-m4n5pGenerate unique IDs:
import random
import string
def generate_bead_id():
chars = string.ascii_lowercase + string.digits
return f"gt-{''.join(random.choices(chars, k=5))}"
Every bead must have:
gt-xxxxx format| Rule | Requirement |
|---|---|
| Size | 3-7 beads per convoy (optimal batch) |
| Coherence | Related beads grouped together |
| Dependencies | Respect bead dependency order |
| Parallelization | Independent convoys can run concurrently |
By Epic
By Dependency Chain
By Skill
By Size
{
"$schema": "convoy-v1",
"id": "convoy-001",
"name": "Authentication Sprint",
"description": "Implement core user authentication features",
"beads": ["gt-abc12", "gt-def34", "gt-ghi56"],
"assigned_to": null,
"status": "pending",
"created": "2026-01-27T10:00:00Z",
"metadata": {
"epic": "User Management",
"estimated_days": 5
}
}
Convoy IDs: convoy- + 3-digit number
convoy-001, convoy-002, etc.Every convoy must have:
.gt/beads/mkdir -p .gt/beads .gt/convoys
For each source:
.gt/beads/gt-xxxxx.json.gt/convoys/convoy-xxx.jsonpython plugins/lisa/hooks/validate.py --stage structure
| Gate | Requirement |
|---|---|
beads_extracted | At least 1 bead created |
beads_have_criteria | All beads have acceptance_criteria array |
beads_have_sources | All beads have evidence.source |
beads_valid_ids | All IDs match gt-[a-z0-9]{5} pattern |
| Gate | Requirement |
|---|---|
convoy_created | At least 1 convoy created |
convoy_size_valid | All convoys have 3-7 beads |
convoy_beads_exist | All referenced bead IDs exist in .gt/beads/ |
After structure completes, Gastown Mayor can:
.gt/memory/semantic.json for project context.gt/beads/*.json for available workBead: pending -> in_progress -> completed | blocked
Convoy: pending -> assigned -> in_progress -> completed
See templates/ directory for JSON templates:
templates/bead.json - Bead templatetemplates/convoy.json - Convoy template