Gas Town stores agent work outside the chat session
Gas Town is designed for the point where several coding agents stop feeling like extra hands and start creating coordination work. A Mayor assigns tasks, project rigs contain workspaces, polecats act as workers, and git-backed hooks preserve identity and history after sessions end. Convoys group work, while Beads stores the underlying issues.
The larger system includes per-rig Witnesses, a town-wide Deacon, maintenance Dogs, and a Refinery that processes merge requests through verification gates. A scheduler can limit worker dispatch when providers impose rate limits. Session discovery can query prior agents for context. With 2 agents and one repo, a task file plus separate worktrees will usually be easier to understand.
Native setup brings at least 7 supporting tools
The current prerequisites name Git, Go, Beads, sqlite3, ICU development headers, tmux, and a coding-agent CLI. Dolt is also installed before the Linux and Windows paths, or supplied through Homebrew and Docker routes. gt install creates the headquarters, gt up starts long-lived services, and gt doctor --fix checks the result.
Platform details are unusually specific. macOS users are told to prefer Homebrew because a binary built with go install may be killed by Gatekeeper. Native Windows source builds need an MSYS2 environment for the ICU-backed CGO layer. Full tmux operation on Windows is directed toward WSL, with native shells described as a minimal CLI path. The Docker route supplies dependencies but still requires careful host-folder ownership and git identity settings.
What happened when we ran it
Our sandbox installed commit 649b832 in 125 seconds, pulling 651 Go packages. The build succeeded in 108 seconds. The checkout contained 1,563 files, about 488,579 source lines, and used 23.5 MB before dependencies. It had 11 CI workflow files, a Dockerfile, and a Compose file. There was no top-level tests directory, which is normal for Go projects that keep _test.go files beside source.
The Go test step ran for 45 seconds and exited 1. It reported 48 passed packages and 27 failed out of 75. The tail showed build failures for internal/tui/feed, internal/web, and internal/witness, along with other packages outside the displayed lines. Several packages, including internal/ui, internal/util, internal/wisp, and internal/workspace, passed.
The supplied tail does not include the compiler errors that caused those package builds to fail. We cannot attribute them to Go versions, system headers, generated code, or a product defect from this evidence. The useful finding is that installation and the main build completed in our unprivileged 3-CPU, 8 GB sandbox, while the full test command did not. A 27-package red result is too broad to dismiss as one flaky assertion.
Git hooks and databases make ordinary operations stateful
Persistence is Gas Town's selling point and its main risk. Project state lives across worktrees, hook branches, Beads data, and Dolt services. Open issue 4772 describes a repository containing committed .beads data and hooks. After Beads configured core.hooksPath, a later checkout reportedly imported 460 legacy issues into the live database without a visible prompt. The report was still marked for triage when fetched, so operators should test imported repositories before trusting normal checkout behavior.
Another open report, issue 4770, describes a Beads schema mismatch between a version embedded by Gas Town and the separately installed command. The reporter says databases were migrated beyond what that CLI would read. Back up the HQ, pin the related binaries together, and rehearse removal and restore with a disposable rig.
Docker reduces host dependencies while exposing trusted surfaces
The Compose path mounts an empty directory or existing HQ at /gt, builds the image, and starts the town inside a container. It supplies Go, Dolt, Beads, tmux, and other utilities. The dashboard port is published to the host. The README tells users to treat it as a trusted local-network surface and not point the mount at a workspace simultaneously used by a native installation.
That warning should shape deployment. Bind the dashboard conservatively, keep the HQ volume backed up, and separate test towns from working repositories. Private GitHub rigs may use gh auth login inside the container. Coding providers carry their own credentials and billing.
Multiple runtimes share state, though hooks differ
Claude Code is the default runtime, and the README lists presets for Codex, Gemini, Cursor, Copilot, Kiro, and several others. Claude uses settings hooks for mail and startup. Codex receives fallback commands after a session becomes ready and needs configuration to read CLAUDE.md as a project-document fallback. Copilot uses executable lifecycle hooks and autonomous mode, subject to an organization policy and paid seat.
Those differences mean a mixed fleet needs per-runtime acceptance tests. Confirm that each agent receives its assignment, writes to the intended worktree, reports completion, and survives a restart. Then test the Refinery against a deliberately failing merge request. Gas Town's abstractions are useful only when the runtime adapters preserve the same safety and handoff semantics.
August issue activity shows use, while the suite stays red
GitHub recorded 17,794 stars, 438 combined issues and pull requests, and a last push on August 19, 2026. Issue discussions continued through August 25. Latest release v1.2.1 was published on June 6 with precompiled binaries for Linux, macOS, and Windows. The release date alone looks older than the source activity, so it would be wrong to call the project abandoned.
Gas Town is one of the few projects attempting persistent multi-agent operations as an actual workspace system. The 233 seconds spent installing and building are less concerning than 27 failed test packages and open reports around hooks and schema state. Teams already suffering from agent coordination may justify a pilot. Everyone else should start with Beads or a tmux manager and add machinery only when simpler tracking has clearly failed.

