Skip to content

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 with scripts/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)

  1. Mirror the references, read-only: scripts/upstreams.sh sync clones every repo into ~/Sites/blueflyio/UPstreams-DO-NOT-HACK/gastownhall/. Never edit these clones; re-sync for the latest.
  2. Install the runtime from upstream, don't vendor a fork:
  3. Gas City: brew install gastownhall/gascity/gascity (gc version). Needs tmux, git, jq, dolt 2.0.7+, bd.
  4. Beads: brew install beads (bd init in a project; default embedded Dolt).
  5. Telemetry: in gascity-otel, docker compose up -d then source setup.sh.
  6. Federation (optional): grab the wl binary from wasteland releases; wl join.
  7. Compose, never rebuild: a Bluefly Factory's runtime domain compiles into Gas City packs/formulas/orders (gascity-packs is the model for pack.toml imports). Do not build your own scheduler/supervisor/ formula engine; those are Gas City's (and the Constitution forbids it).
  8. Operator vocabulary: users speak blu factory … (business API); gc stays the runtime API beneath. Gas Town's gt is for learning the patterns, not for the Bluefly product surface.
  9. Keep upstream and Bluefly separate: the mirror is UPstreams-DO-NOT-HACK/; Bluefly composition lives in your own repos and factory.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 init a scratch city; bd init a project to learn the primitives
  • [ ] gascity-otel up for observability
  • [ ] AMCS factory.yaml runtime domain references gascity/gascity-packs/beads (already wired)
  • [ ] Nothing in UPstreams-DO-NOT-HACK/ is edited