Skip to content
vic

steveyegge/gastown

Gas Town - multi-agent workspace manager

steveyegge/gastown.json
{
"createdAt": "2025-12-16T00:33:33Z",
"defaultBranch": "main",
"description": "Gas Town - multi-agent workspace manager",
"fullName": "steveyegge/gastown",
"homepage": "",
"language": "Go",
"name": "gastown",
"pushedAt": "2026-01-20T01:40:04Z",
"stargazersCount": 4723,
"topics": [],
"updatedAt": "2026-01-20T01:40:08Z",
"url": "https://github.com/steveyegge/gastown"
}

Multi-agent orchestration system for Claude Code with persistent work tracking

Gas Town is a workspace manager that lets you coordinate multiple Claude Code agents working on different tasks. Instead of losing context when agents restart, Gas Town persists work state in git-backed hooks, enabling reliable multi-agent workflows.

ChallengeGas Town Solution
Agents lose context on restartWork persists in git-backed hooks
Manual agent coordinationBuilt-in mailboxes, identities, and handoffs
4-10 agents become chaoticScale comfortably to 20-30 agents
Work state lost in agent memoryWork state stored in Beads ledger
graph TB
Mayor[The Mayor<br/>AI Coordinator]
Town[Town Workspace<br/>~/gt/]
Town --> Mayor
Town --> Rig1[Rig: Project A]
Town --> Rig2[Rig: Project B]
Rig1 --> Crew1[Crew Member<br/>Your workspace]
Rig1 --> Hooks1[Hooks<br/>Persistent storage]
Rig1 --> Polecats1[Polecats<br/>Worker agents]
Rig2 --> Crew2[Crew Member]
Rig2 --> Hooks2[Hooks]
Rig2 --> Polecats2[Polecats]
Hooks1 -.git worktree.-> GitRepo1[Git Repository]
Hooks2 -.git worktree.-> GitRepo2[Git Repository]
style Mayor fill:#e1f5ff
style Town fill:#f0f0f0
style Rig1 fill:#fff4e1
style Rig2 fill:#fff4e1

Your primary AI coordinator. The Mayor is a Claude Code instance with full context about your workspace, projects, and agents. Start here - just tell the Mayor what you want to accomplish.

Your workspace directory (e.g., ~/gt/). Contains all projects, agents, and configuration.

Project containers. Each rig wraps a git repository and manages its associated agents.

Your personal workspace within a rig. Where you do hands-on work.

Ephemeral worker agents that spawn, complete a task, and disappear.

Git worktree-based persistent storage for agent work. Survives crashes and restarts.

Work tracking units. Bundle multiple beads that get assigned to agents.

Git-backed issue tracking system that stores work state as structured data.

Bead IDs (also called issue IDs) use a prefix + 5-character alphanumeric format (e.g., gt-abc12, hq-x7k2m). The prefix indicates the item’s origin or rig. Commands like gt sling and gt convoy accept these IDs to reference specific work items. The terms “bead” and “issue” are used interchangeably—beads are the underlying data format, while issues are the work items stored as beads.

New to Gas Town? See the [Glossary]!(docs/glossary.md) for a complete guide to terminology and concepts.

Terminal window
# Install Gas Town
go install github.com/steveyegge/gastown/cmd/gt@latest
# Add Go binaries to PATH (add to ~/.zshrc or ~/.bashrc)
export PATH="$PATH:$HOME/go/bin"
# Create workspace with git initialization
gt install ~/gt --git
cd ~/gt
# Add your first project
gt rig add myproject https://github.com/you/repo.git
# Create your crew workspace
gt crew add yourname --rig myproject
cd myproject/crew/yourname
# Start the Mayor session (your main interface)
gt mayor attach

Run

Terminal window
gt install ~/gt --git &&
cd ~/gt &&
gt config agent list &&
gt mayor attach

and tell the Mayor what you want to build!


sequenceDiagram
participant You
participant Mayor
participant Convoy
participant Agent
participant Hook
You->>Mayor: Tell Mayor what to build
Mayor->>Convoy: Create convoy with beads
Mayor->>Agent: Sling bead to agent
Agent->>Hook: Store work state
Agent->>Agent: Complete work
Agent->>Convoy: Report completion
Mayor->>You: Summary of progress
Terminal window
# 1. Start the Mayor
gt mayor attach
# 2. In Mayor session, create a convoy with bead IDs
gt convoy create "Feature X" gt-abc12 gt-def34 --notify --human
# 3. Assign work to an agent
gt sling gt-abc12 myproject
# 4. Track progress
gt convoy list
# 5. Monitor agents
gt agents

Best for: Coordinating complex, multi-issue work

flowchart LR
Start([Start Mayor]) --> Tell[Tell Mayor<br/>what to build]
Tell --> Creates[Mayor creates<br/>convoy + agents]
Creates --> Monitor[Monitor progress<br/>via convoy list]
Monitor --> Done{All done?}
Done -->|No| Monitor
Done -->|Yes| Review[Review work]

Commands:

Terminal window
# Attach to Mayor
gt mayor attach
# In Mayor, create convoy and let it orchestrate
gt convoy create "Auth System" gt-x7k2m gt-p9n4q --notify
# Track progress
gt convoy list

Run individual runtime instances manually. Gas Town just tracks state.

Terminal window
gt convoy create "Fix bugs" gt-abc12 # Create convoy (sling auto-creates if skipped)
gt sling gt-abc12 myproject # Assign to worker
claude --resume # Agent reads mail, runs work (Claude)
# or: codex # Start Codex in the workspace
gt convoy list # Check progress

Best for: Predefined, repeatable processes

Formulas are TOML-defined workflows stored in .beads/formulas/.

Example Formula (.beads/formulas/release.formula.toml):

description = "Standard release process"
formula = "release"
version = 1
[vars.version]
description = "The semantic version to release (e.g., 1.2.0)"
required = true
[[steps]]
id = "bump-version"
title = "Bump version"
description = "Run ./scripts/bump-version.sh {{version}}"
[[steps]]
id = "run-tests"
title = "Run tests"
description = "Run make test"
needs = ["bump-version"]
[[steps]]
id = "build"
title = "Build"
description = "Run make build"
needs = ["run-tests"]
[[steps]]
id = "create-tag"
title = "Create release tag"
description = "Run git tag -a v{{version}} -m 'Release v{{version}}'"
needs = ["build"]
[[steps]]
id = "publish"
title = "Publish"
description = "Run ./scripts/publish.sh"
needs = ["create-tag"]

Execute:

Terminal window
# List available formulas
bd formula list
# Run a formula with variables
bd cook release --var version=1.2.0
# Create formula instance for tracking
bd mol pour release --var version=1.2.0

Best for: Direct control over work distribution

Terminal window
# Create convoy manually
gt convoy create "Bug Fixes" --human
# Add issues to existing convoy
gt convoy add hq-cv-abc gt-m3k9p gt-w5t2x
# Assign to specific agents
gt sling gt-m3k9p myproject/my-agent
# Check status
gt convoy show

Gas Town supports multiple AI coding runtimes. Per-rig runtime settings are in settings/config.json.

{
"runtime": {
"provider": "codex",
"command": "codex",
"args": [],
"prompt_mode": "none"
}
}

Notes:

  • Claude uses hooks in .claude/settings.json for mail injection and startup.
  • For Codex, set project_doc_fallback_filenames = ["CLAUDE.md"] in ~/.codex/config.toml so role instructions are picked up.
  • For runtimes without hooks (e.g., Codex), Gas Town sends a startup fallback after the session is ready: gt prime, optional gt mail check --inject for autonomous roles, and gt nudge deacon session-started.
Terminal window
gt install <path> # Initialize workspace
gt rig add <name> <repo> # Add project
gt rig list # List projects
gt crew add <name> --rig <rig> # Create crew workspace
Terminal window
gt agents # List active agents
gt sling <bead-id> <rig> # Assign work to agent
gt sling <bead-id> <rig> --agent cursor # Override runtime for this sling/spawn
gt mayor attach # Start Mayor session
gt mayor start --agent auggie # Run Mayor with a specific agent alias
gt prime # Context recovery (run inside existing session)

Built-in agent presets: claude, gemini, codex, cursor, auggie, amp

Terminal window
gt convoy create <name> [issues...] # Create convoy with issues
gt convoy list # List all convoys
gt convoy show [id] # Show convoy details
gt convoy add <convoy-id> <issue-id...> # Add issues to convoy
Terminal window
# Set custom agent command
gt config agent set claude-glm "claude-glm --model glm-4"
gt config agent set codex-low "codex --thinking low"
# Set default agent
gt config default-agent claude-glm
# View config
gt config show
Terminal window
bd formula list # List formulas
bd cook <formula> # Execute formula
bd mol pour <formula> # Create trackable instance
bd mol list # List active instances

Gas Town includes built-in formulas for common workflows. See .beads/formulas/ for available recipes.

Gas Town includes a web dashboard for monitoring:

Terminal window
# Start dashboard
gt dashboard --port 8080
# Open in browser
open http://localhost:8080

Features:

  • Real-time agent status
  • Convoy progress tracking
  • Hook state visualization
  • Configuration management

Gas Town uses git hooks as a propulsion mechanism. Each hook is a git worktree with:

  1. Persistent state - Work survives agent restarts
  2. Version control - All changes tracked in git
  3. Rollback capability - Revert to any previous state
  4. Multi-agent coordination - Shared through git
stateDiagram-v2
[*] --> Created: Agent spawned
Created --> Active: Work assigned
Active --> Suspended: Agent paused
Suspended --> Active: Agent resumed
Active --> Completed: Work done
Completed --> Archived: Hook archived
Archived --> [*]

MEOW (Mayor-Enhanced Orchestration Workflow)

Section titled “MEOW (Mayor-Enhanced Orchestration Workflow)”

MEOW is the recommended pattern:

  1. Tell the Mayor - Describe what you want
  2. Mayor analyzes - Breaks down into tasks
  3. Convoy creation - Mayor creates convoy with beads
  4. Agent spawning - Mayor spawns appropriate agents
  5. Work distribution - Beads slung to agents via hooks
  6. Progress monitoring - Track through convoy status
  7. Completion - Mayor summarizes results
Terminal window
# Bash
gt completion bash > /etc/bash_completion.d/gt
# Zsh
gt completion zsh > "${fpath[1]}/_gt"
# Fish
gt completion fish > ~/.config/fish/completions/gt.fish
RoleDescriptionPrimary Interface
MayorAI coordinatorgt mayor attach
Human (You)Crew memberYour crew directory
PolecatWorker agentSpawned by Mayor
HookPersistent storageGit worktree
ConvoyWork trackergt convoy commands
  • Always start with the Mayor - It’s designed to be your primary interface
  • Use convoys for coordination - They provide visibility across agents
  • Leverage hooks for persistence - Your work won’t disappear
  • Create formulas for repeated tasks - Save time with Beads recipes
  • Monitor the dashboard - Get real-time visibility
  • Let the Mayor orchestrate - It knows how to manage agents

Check hooks are properly initialized:

Terminal window
gt hooks list
gt hooks repair

Force refresh:

Terminal window
gt convoy refresh <convoy-id>

Restart Mayor session:

Terminal window
gt mayor detach
gt mayor attach

MIT License - see LICENSE file for details