Gas City vs Gas Town, and the gastownhall upstreams¶
Reference only. DO NOT HACK. These are read-only learning sources. Per the Constitution, Bluefly owns composition, not implementation; it composes Gas City, learns from Gas Town, and never forks or rebuilds either. Manifest:
upstreams/upstreams.yaml. Pull the latest withscripts/upstreams.sh sync.
Gas City vs Gas Town: the actual difference¶
Gas Town (steveyegge/gastown, mirrored at gastownhall/gastown) came first. It is the
opinionated, batteries-included multi-agent orchestrator, the "Town": the Mayor (AI coordinator),
Rigs (project containers), Crew (your workspace), Polecats (worker agents), Hooks
(git-worktree persistence), Convoys (work units), Witness/Deacon/Dogs (watchdogs),
Refinery (Bors-style merge queue), Scheduler, Seance (session recovery), and Wasteland
(federation). CLI: gt.
Gas City (gastownhall/gascity) is the reusable infrastructure extracted from Gas Town into a
configurable SDK, its own README: "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." It is primitive-first: city.toml, runtime providers (tmux,
subprocess, exec, ACP, Kubernetes), beads-backed work, formulas/molecules, a controller/supervisor
loop, and packs/rigs. CLI: gc. Its "Coming from Gas Town?" guide explicitly says to map Town
concepts onto City primitives without porting the Town architecture literally.
So: Gas Town = the progenitor application (a finished factory). Gas City = the SDK/runtime generalized out of it (the toolkit to build your own). For Bluefly: build ABOVE Gas City; learn FROM Gas Town; port neither. This is exactly the Constitution's stance.
Gas Town (the app) ──extract reusable infra──▶ Gas City (the SDK/runtime) ◀── Bluefly composes here
How the org maps to the Constitution's domains¶
| Repo | Role | Domain | Relationship |
|---|---|---|---|
| gascity | Gas City SDK/runtime (gc), city/pack/formula/order/agent/bead |
runtime | compose |
| gascity-packs | opt-in packs (pack.toml) |
runtime | compose |
| beads | bd Dolt-backed graph issue tracker, the work ledger |
runtime | compose |
| go-mysql-server | SQL engine beneath Dolt | runtime | depend |
| gascity-otel | VictoriaMetrics+Logs+Grafana telemetry | governance (observability) | compose |
| gascity-project-dashboard | weekly repo-health metrics | governance | learn |
| gascity-dashboard | single-operator ambient dashboard → experience.surfaces.infra (administrator) | experience | compose |
| overwatch | "Gas Town Convoys" realtime monitor | experience | learn |
| tmux-adapter | WebSocket bridge exposing agents (+ conversation events) | network | learn |
| wasteland | wl DoltHub-federated work economy, the Wasteland-compatible target |
marketplace | compose |
| marketplace | Gas Town Hall Claude Code plugin marketplace | marketplace | learn |
| tim | "The Inference Mesh", p2p inference (spec) | network | watch |
| gastown | the reference app (gt) |
reference | learn, do not port |
| GasTown-Official-Docs · docs · community · website | docs/community | docs | learn |
The bolded rows are the ones the AMCS Factory Contract already names: runtime.implementation: gas-city,
runtime_install: { beads: bd, db: dolt, observability: gascity-otel }, the infra experience surface
(gascity-dashboard), and marketplace.reputation_metadata: wasteland-compatible.
How to set this up right (compose-first)¶
- Mirror the references, read-only:
scripts/upstreams.sh syncclones every repo into~/Sites/blueflyio/UPstreams-DO-NOT-HACK/gastownhall/. Never edit these clones; re-syncfor the latest. - Install the runtime from upstream, don't vendor a fork:
- Gas City:
brew install gastownhall/gascity/gascity(gc version). Needstmux,git,jq,dolt 2.0.7+,bd. - Beads:
brew install beads(bd initin a project; default embedded Dolt). - Telemetry: in
gascity-otel,docker compose up -dthensource setup.sh. - Federation (optional): grab the
wlbinary fromwastelandreleases;wl join. - Compose, never rebuild: a Bluefly Factory's
runtimedomain compiles into Gas City packs/formulas/orders (gascity-packsis the model forpack.tomlimports). Do not build your own scheduler/supervisor/ formula engine; those are Gas City's (and the Constitution forbids it). - Operator vocabulary: users speak
blu factory …(business API);gcstays the runtime API beneath. Gas Town'sgtis for learning the patterns, not for the Bluefly product surface. - Keep upstream and Bluefly separate: the mirror is
UPstreams-DO-NOT-HACK/; Bluefly composition lives in your own repos andfactory.yaml. The boundary is the whole point.
Setup checklist¶
- [ ]
scripts/upstreams.sh sync: mirror cloned, read-only - [ ]
brew install gastownhall/gascity/gascity+ deps (tmux git jq dolt bd) - [ ]
gc inita scratch city;bd inita project to learn the primitives - [ ]
gascity-otelup for observability - [ ] AMCS
factory.yamlruntimedomain references gascity/gascity-packs/beads (already wired) - [ ] Nothing in
UPstreams-DO-NOT-HACK/is edited