# Gas Town **Multi-agent orchestration system for Claude Code with persistent work tracking** ## Overview 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. ### What Problem Does This Solve? | Challenge | Gas Town Solution | | ------------------------------- | -------------------------------------------- | | Agents lose context on restart | Work persists in git-backed hooks | | Manual agent coordination | Built-in mailboxes, identities, and handoffs | | 4-10 agents become chaotic | Scale comfortably to 20-30 agents | | Work state lost in agent memory | Work state stored in Beads ledger | ### Architecture ```mermaid graph TB Mayor[The Mayor
AI Coordinator] Town[Town Workspace
~/gt/] Town --> Mayor Town --> Rig1[Rig: Project A] Town --> Rig2[Rig: Project B] Rig1 --> Crew1[Crew Member
Your workspace] Rig1 --> Hooks1[Hooks
Persistent storage] Rig1 --> Polecats1[Polecats
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 ``` ## Core Concepts ### The Mayor 🎩 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. ### Town 🏘️ Your workspace directory (e.g., `~/gt/`). Contains all projects, agents, and configuration. ### Rigs 🏗️ Project containers. Each rig wraps a git repository and manages its associated agents. ### Crew Members 👤 Your personal workspace within a rig. Where you do hands-on work. ### Polecats 🦨 Ephemeral worker agents that spawn, complete a task, and disappear. ### Hooks 🪝 Git worktree-based persistent storage for agent work. Survives crashes and restarts. ### Convoys 🚚 Work tracking units. Bundle multiple beads that get assigned to agents. ### Beads Integration 📿 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. ## Installation ### Prerequisites - **Go 1.23+** - [go.dev/dl](https://go.dev/dl/) - **Git 2.25+** - for worktree support - **beads (bd) 0.44.0+** - [github.com/steveyegge/beads](https://github.com/steveyegge/beads) (required for custom type support) - **sqlite3** - for convoy database queries (usually pre-installed on macOS/Linux) - **tmux 3.0+** - recommended for full experience - **Claude Code CLI** (default runtime) - [claude.ai/code](https://claude.ai/code) - **Codex CLI** (optional runtime) - [developers.openai.com/codex/cli](https://developers.openai.com/codex/cli) ### Setup ```bash # Install Gas Town $ brew install gastown # Homebrew (recommended) $ npm install -g @gastown/gt # npm $ go install github.com/steveyegge/gastown/cmd/gt@latest # From source # If using go install, 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 ``` ## Quick Start Guide ### Getting Started Run ```shell gt install ~/gt --git && cd ~/gt && gt config agent list && gt mayor attach ``` and tell the Mayor what you want to build! --- ### Basic Workflow ```mermaid 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 ``` ### Example: Feature Development ```bash # 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 ``` ## Common Workflows ### Mayor Workflow (Recommended) **Best for:** Coordinating complex, multi-issue work ```mermaid flowchart LR Start([Start Mayor]) --> Tell[Tell Mayor
what to build] Tell --> Creates[Mayor creates
convoy + agents] Creates --> Monitor[Monitor progress
via convoy list] Monitor --> Done{All done?} Done -->|No| Monitor Done -->|Yes| Review[Review work] ``` **Commands:** ```bash # 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 ``` ### Minimal Mode (No Tmux) Run individual runtime instances manually. Gas Town just tracks state. ```bash 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 ``` ### Beads Formula Workflow **Best for:** Predefined, repeatable processes Formulas are TOML-defined workflows stored in `.beads/formulas/`. **Example Formula** (`.beads/formulas/release.formula.toml`): ```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:** ```bash # 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 ``` ### Manual Convoy Workflow **Best for:** Direct control over work distribution ```bash # 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 ``` ## Runtime Configuration Gas Town supports multiple AI coding runtimes. Per-rig runtime settings are in `settings/config.json`. ```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`. ## Key Commands ### Workspace Management ```bash gt install # Initialize workspace gt rig add # Add project gt rig list # List projects gt crew add --rig # Create crew workspace ``` ### Agent Operations ```bash gt agents # List active agents gt sling # Assign work to agent gt sling --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` ### Convoy (Work Tracking) ```bash gt convoy create [issues...] # Create convoy with issues gt convoy list # List all convoys gt convoy show [id] # Show convoy details gt convoy add # Add issues to convoy ``` ### Configuration ```bash # 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 ``` ### Beads Integration ```bash bd formula list # List formulas bd cook # Execute formula bd mol pour # Create trackable instance bd mol list # List active instances ``` ## Cooking Formulas Gas Town includes built-in formulas for common workflows. See `.beads/formulas/` for available recipes. ## Dashboard Gas Town includes a web dashboard for monitoring: ```bash # 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 ## Advanced Concepts ### The Propulsion Principle 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 ### Hook Lifecycle ```mermaid 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) 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 ## Shell Completions ```bash # 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 ``` ## Project Roles | Role | Description | Primary Interface | | --------------- | ------------------ | -------------------- | | **Mayor** | AI coordinator | `gt mayor attach` | | **Human (You)** | Crew member | Your crew directory | | **Polecat** | Worker agent | Spawned by Mayor | | **Hook** | Persistent storage | Git worktree | | **Convoy** | Work tracker | `gt convoy` commands | ## Tips - **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 ## Troubleshooting ### Agents lose connection Check hooks are properly initialized: ```bash gt hooks list gt hooks repair ``` ### Convoy stuck Force refresh: ```bash gt convoy refresh ``` ### Mayor not responding Restart Mayor session: ```bash gt mayor detach gt mayor attach ``` ## License MIT License - see LICENSE file for details