- Go 93.2%
- TypeScript 4.9%
- Shell 1.5%
- JavaScript 0.2%
- Python 0.1%
|
Some checks failed
CI / Runner policy (push) Has been cancelled
CodeQL / Runner policy (push) Has been cancelled
Cyclomatic complexity / Report complexity (push) Has been cancelled
gc edge publish / Publish gc edge build (push) Has been cancelled
Go Vulnerability Scan / Runner policy (push) Has been cancelled
Notify Image Rebuilds / notify (push) Has been cancelled
Review Formulas / Runner policy (push) Has been cancelled
CI / Detect changes (push) Has been cancelled
CI / Preflight / static checks (push) Has been cancelled
CI / Preflight / unit cover (noncmdgc) (push) Has been cancelled
CI / Preflight / unit cover (cmd/gc 1 of 6) (push) Has been cancelled
CI / Preflight / unit cover (cmd/gc 2 of 6) (push) Has been cancelled
CI / Preflight / unit cover (cmd/gc 3 of 6) (push) Has been cancelled
CI / Preflight / unit cover (cmd/gc 4 of 6) (push) Has been cancelled
CI / Preflight / unit cover (cmd/gc 5 of 6) (push) Has been cancelled
CI / Preflight / unit cover (cmd/gc 6 of 6) (push) Has been cancelled
CI / Preflight / acceptance A (push) Has been cancelled
CI / Contract / bd CLI (minimum supported) (push) Has been cancelled
CI / Contract / acceptance A (bd current) (push) Has been cancelled
CI / Contract radar (gc HEAD x bd main HEAD) (push) Has been cancelled
CI / Preflight / generated artifacts (push) Has been cancelled
CI / Check (push) Has been cancelled
CI / Release config (push) Has been cancelled
CI / cmd/gc process / shard 1 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 10 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 11 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 12 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 2 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 3 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 4 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 5 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 6 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 7 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 8 of 12 (push) Has been cancelled
CI / cmd/gc process / shard 9 of 12 (push) Has been cancelled
CI / cmd/gc product metrics testhook (push) Has been cancelled
CI / Credential provider / Windows process tree (push) Has been cancelled
CI / Integration / packages-cmd-gc-integration (push) Has been cancelled
CI / Integration / packages-core-1-of-4 (push) Has been cancelled
CI / Integration / packages-core-2-of-4 (push) Has been cancelled
CI / Integration / packages-core-3-of-4 (push) Has been cancelled
CI / Integration / packages-core-4-of-4 (push) Has been cancelled
CI / Integration / packages-runtime-tmux-1-of-6 (push) Has been cancelled
CI / Integration / packages-runtime-tmux-2-of-6 (push) Has been cancelled
CI / Integration / packages-runtime-tmux-3-of-6 (push) Has been cancelled
CI / Integration / packages-runtime-tmux-4-of-6 (push) Has been cancelled
CI / Integration / packages-runtime-tmux-5-of-6 (push) Has been cancelled
CI / Integration / packages-runtime-tmux-6-of-6 (push) Has been cancelled
CI / Integration / rest-smoke-1-of-2 (push) Has been cancelled
CI / Integration / rest-smoke-2-of-2 (push) Has been cancelled
CI / Integration / bdstore (push) Has been cancelled
CI / Integration / rest-full-1-of-16 (push) Has been cancelled
CI / Integration / rest-full-10-of-16 (push) Has been cancelled
CI / Integration / rest-full-11-of-16 (push) Has been cancelled
CI / Integration / rest-full-12-of-16 (push) Has been cancelled
CI / Integration / rest-full-13-of-16 (push) Has been cancelled
CI / Integration / rest-full-14-of-16 (push) Has been cancelled
CI / Integration / rest-full-15-of-16 (push) Has been cancelled
CI / Integration / rest-full-16-of-16 (push) Has been cancelled
CI / Integration / rest-full-2-of-16 (push) Has been cancelled
CI / Integration / rest-full-3-of-16 (push) Has been cancelled
CI / Integration / rest-full-4-of-16 (push) Has been cancelled
CI / Integration / rest-full-5-of-16 (push) Has been cancelled
CI / Integration / rest-full-6-of-16 (push) Has been cancelled
CI / Integration / rest-full-7-of-16 (push) Has been cancelled
CI / Integration / rest-full-8-of-16 (push) Has been cancelled
CI / Integration / rest-full-9-of-16 (push) Has been cancelled
CI / Worker core (Claude) (push) Has been cancelled
CI / Worker core (Codex) (push) Has been cancelled
CI / Worker core (Gemini) (push) Has been cancelled
CI / Worker core summary (push) Has been cancelled
CI / Worker core phase 2 (Claude) (push) Has been cancelled
CI / Worker core phase 2 (Codex) (push) Has been cancelled
CI / Worker core phase 2 (Gemini) (push) Has been cancelled
CI / Worker core phase 2 summary (push) Has been cancelled
CI / Pack compatibility gate (push) Has been cancelled
CI / Dashboard SPA (push) Has been cancelled
CI / openclaw-bridge Node tests (push) Has been cancelled
CI / MCP mail conformance (push) Has been cancelled
CI / Docker session (push) Has been cancelled
CI / K8s session (push) Has been cancelled
CI / CI / preflight (push) Has been cancelled
CI / CI / integration (push) Has been cancelled
CI / CI / required (push) Has been cancelled
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Go Vulnerability Scan / Go module vulnerabilities (push) Has been cancelled
Review Formulas / review-formulas routing (push) Has been cancelled
Review Formulas / Integration / review-formulas (basic-1-of-2) (push) Has been cancelled
Review Formulas / Integration / review-formulas (basic-2-of-2) (push) Has been cancelled
Review Formulas / Integration / review-formulas (retries-1-of-2) (push) Has been cancelled
Review Formulas / Integration / review-formulas (retries-2-of-2) (push) Has been cancelled
Review Formulas / Integration / review-formulas (recovery) (push) Has been cancelled
Review Formulas / Integration / review-formulas (push) Has been cancelled
socketPath() used os.UserConfigDir() to find the herdr session-server socket. On darwin that returns $HOME/Library/Application Support and IGNORES XDG_CONFIG_HOME entirely (Go's XDG branch is Unix-only), while the herdr binary binds its sockets under $XDG_CONFIG_HOME or $HOME/.config. On macOS every liveness dial therefore hit a socket no herdr server ever binds: serverAlive() read false against a healthy server, every agent spawn failed at configure-server with 'did not become ready', each retry spawned a redundant herdr server that exited 'already running', and the reconciler could not start a single session. Measured live: a Go dial to ~/.config/herdr/sessions/ gc-scratch/herdr.sock succeeds while the Library path fails with ENOENT, and the spawned-server retry loop burns its full 10s budget every cycle. Resolve the config dir exactly as herdr does — XDG_CONFIG_HOME if set, else $HOME/.config, on every platform. The sandbox case ga-nqlb8q was fixing (XDG set while HOME points elsewhere) keeps working, because the env var wins here exactly as it wins in herdr. The prior comment claimed os.UserConfigDir() matches herdr's resolution 'on this platform'; that is true on Linux and false on macOS. Corrected, and pinned with a regression test that fails against the os.UserConfigDir() implementation on darwin. |
||
|---|---|---|
| .agents | ||
| .claude/skills/gascity-docs | ||
| .devcontainer | ||
| .githooks | ||
| .github | ||
| cmd | ||
| contrib | ||
| docs | ||
| engdocs | ||
| examples | ||
| internal | ||
| pkg/eventexport | ||
| plans | ||
| release-gates | ||
| schemas | ||
| scripts | ||
| specs/plans | ||
| test | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .golangci.yml | ||
| .goreleaser.yml | ||
| .mcp.json | ||
| .node-version | ||
| .nvmrc | ||
| .trivyignore-config | ||
| .trivyignore.yaml | ||
| AGENTS.md | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CODE_OF_CONDUCT.md | ||
| codecov.yml | ||
| CONTRIBUTING.md | ||
| deps.env | ||
| GEMINI.md | ||
| go.mod | ||
| go.sum | ||
| LICENSE | ||
| Makefile | ||
| mint.sh | ||
| README.md | ||
| RELEASING.md | ||
| renovate.json | ||
| repo-policy.py | ||
| schemas_embed.go | ||
| SECURITY.md | ||
| SUPPORT.md | ||
| taplo.toml | ||
| TESTING.md | ||
| TRACK3_CONTRACT.md | ||
Gas City
Composable orchestration infrastructure for multi-agent coding workflows.
Gas City is an orchestration-builder SDK for multi-agent systems. It extracts the reusable infrastructure from Gas Town into a configurable toolkit with runtime providers, work routing, formulas, orders, health patrol, and a declarative city configuration.
Sponsors
Coming from Gas Town?
Start with Coming from Gas Town?. It maps Town roles, commands, plugins, convoys, and directory habits onto Gas City's primitive-first model so experienced Gas Town users can ramp without trying to port the entire Town architecture literally.
What You Get
- Declarative city configuration in
city.toml - Multiple runtime providers: tmux, subprocess, exec, ACP, Kubernetes, and herdr
- Beads-backed work tracking, formulas, molecules, waits, and mail
- A controller/supervisor loop that reconciles desired state to running state
- Packs, overrides, and rig-scoped orchestration for multi-project setups
Quickstart
See the full install guide at docs/getting-started/installation.md.
Prerequisites
Gas City requires the following tools on your system. gc init and
gc start check for these automatically and report any that are missing.
| Dependency | Required | Min Version | Install (macOS) | Install (Linux) |
|---|---|---|---|---|
| tmux | Always | — | brew install tmux |
apt install tmux |
| git | Always | — | brew install git |
apt install git |
| jq | Always | — | brew install jq |
apt install jq |
| pgrep | Always | — | (included in macOS) | apt install procps |
| lsof | Always | — | (included in macOS) | apt install lsof |
| dolt | Beads provider bd |
2.1.0 or newer | brew install dolt |
releases |
| bd | Beads provider bd |
1.0.0 | releases | releases |
| flock | Beads provider bd |
— | brew install flock |
apt install util-linux |
| gh | Optional GitHub gates | — | brew install gh |
cli.github.com |
| claude / codex / gemini | Per provider | — | See provider docs | See provider docs |
tmux is the default session backend and the fallback, so it stays required even if you run agents on another backend. herdr is an optional alternative backend — see herdr Session Provider to enable it per-agent, per-rig, or city-wide.
The bd (beads) provider is the default. To use a file-based store instead
(no dolt/bd/flock needed), set GC_BEADS=file or add [beads] provider = "file"
to your city.toml.
Managed Dolt checks require a final Dolt 2.1.0 or newer. Older and
pre-release builds are below Gas City's managed bd/Dolt compatibility floor;
releases before 1.86.2 can also miss the upstream GC/writer deadlock fix in
dolthub/dolt commit ccf7bde206, which can hang dolt_backup sync under
heavy write load.
Install from Homebrew:
brew install gascity
gc version
Or build from source (requires make, Go 1.26.4+, and ICU for a transitive Dolt
CGO dependency — brew install icu4c on macOS, apt install libicu-dev on
Linux; on macOS the Makefile auto-detects the keg-only icu4c paths):
make install
gc init ~/bright-lights
cd ~/bright-lights
gc start
mkdir hello-world
cd hello-world
git init
gc rig add .
bd create "Create a script that prints hello world"
gc session attach mayor
Nix/Flox machines (ICU not on the default CGO path)
On NixOS / Flox-managed Linux toolchains, system include/lib dirs are not
searched, so the build fails with fatal error: unicode/uregex.h: No such file or directory. Point CGO at the Nix-store ICU dev headers + matching runtime
lib (pick the dev output whose propagated lib matches your gc/dolt link, to
avoid ICU version skew), and disable the Makefile's /usr/lib fallback so the
Nix and system toolchains don't get mixed:
# Re-resolve the dev header path if the store path changes:
# find /nix/store -maxdepth 3 -path '*icu4c*-dev/include/unicode/uregex.h'
# Match the lib to what your installed binary links: ldd $(which gc) | grep icu
ICU_DEV=/nix/store/dvhx24q4icrig4q1v1lp7kzi3izd5jmb-icu4c-76.1-dev
ICU_LIB=/nix/store/i4lj3w4yd9x9jbi7a1xhjqsr7bg8jq7p-icu4c-76.1
CGO_ENABLED=1 \
CGO_CPPFLAGS="-I$ICU_DEV/include" \
CGO_LDFLAGS="-L$ICU_LIB/lib" \
SYS_USR_CGO_FALLBACK=0 \
make build # or: go build -o bin/gc ./cmd/gc
CGO-backed tests (e.g. go test ./internal/beads) take the same three CGO_*
vars — no CGO_ENABLED=0 workaround needed once ICU is pointed at correctly.
For the longer walkthrough, start with Tutorial 01.
Documentation
📖 Read the docs online: docs.gascityhall.com
The docs now use a Mintlify structure rooted in docs/.
- Docs Home
- Installation
- Quickstart
- How Gas City Works
- Contributors
- Reference
- Architecture
- Design Docs
- Archive
Preview the docs locally:
make docs-dev
# or directly from the repo root
./mint.sh dev
Repository Map
| Path | What it contains |
|---|---|
cmd/gc/ |
CLI entrypoints, controller wiring, runtime assembly, and command handlers |
internal/runtime/ |
Runtime provider abstraction plus tmux, subprocess, exec, ACP, K8s, hybrid, and herdr implementations |
internal/config/ |
city.toml schema, validation, composition, packs, patches, and override resolution |
internal/beads/ |
Store abstraction and provider implementations for beads (work, mail, convoys) and waits |
internal/session/ |
Session bead metadata, wait lifecycle helpers, and session identity utilities |
internal/orders/ |
Order parsing and scanning for periodic dispatch |
internal/convergence/ |
Bounded iterative refinement loops and gate handling |
internal/api/ |
HTTP API handlers and resource views |
docs/ |
Mintlify docs site (tutorials, guides, reference) |
engdocs/ |
Contributor-facing architecture, design docs, proposals, and archive |
examples/ |
Example cities, packs, formulas, and reference topologies |
contrib/ |
Helper scripts, Dockerfiles, and integration support assets |
test/ |
Integration and support test packages |
Where to start
- CLI behavior —
cmd/gc/, then the command-specific helper it calls. - Runtime/provider work —
internal/runtime/runtime.goand the provider package you're changing. - Config and pack behavior —
internal/config/config.go,compose.go, andpack.go. - Work dispatch (sling) —
cmd/gc/cmd_sling.goandinternal/beads/. - Supervisor, sessions, wake/sleep —
cmd/gc/,internal/session/, andinternal/runtime/.
For the concepts these packages implement, see
How Gas City Works. For a deeper
package walkthrough, see
engdocs/contributors/codebase-map.md.
Contributing
Read CONTRIBUTING.md and engdocs/contributors/index.md before opening a PR.
Useful commands:
make setupmake checkmake check-docsmake test-integration
License
MIT