Builtin Packs
Gas City ships with a small set of built-in packs. These packs are embedded in thegc binary and served from the user-global pack cache under
$GC_HOME/cache/repos/ (default ~/.gc/cache/repos/). Nothing is
materialized into the city; the binary pre-seeds the cache with its own
embedded content at each pack’s canonical pinned commit, so the pinned
imports below resolve offline.
Built-in packs are not implicit: nothing splices them into config composition
at load time. They compose only through explicit pinned imports in
pack.toml, which gc init writes for you:
gc init also writes a matching packs.lock. The canonical pin is served
offline from the binary’s embedded copy; pinning a bundled source at any
other commit makes it an ordinary remote import; gc import install
fetches that exact commit from git, so editing the pin always does what it
says. One exception: when a gc release moves the canonical core/bd/dolt
pin, the pins earlier releases wrote keep being served from the embedded
copy (they always meant “the built-in pack”, not that commit’s tree), so an
upgraded city keeps loading offline, and gc doctor lists them as a
warning. gc doctor --fix rewrites them to the current pin. Restart the
supervisor on the new binary (gc supervisor stop, then
gc supervisor start) before running gc doctor --fix: an older gc still
running does not know the new pin and fails with “locked but not cached”
until gc import install fetches it.
The bd entry is written only for cities using the bd beads provider (the
default); cities on other providers get only core. The bd pack pulls in
the dolt pack transitively via its own [imports.dolt], so dolt never
needs its own import. The gastown and gascity packs are also bundled but
never required — they arrive via the templates that use them (gc init
gastown/gascity options) or an explicit import.
The gascity template also writes a default rig import of the gascity pack’s
role agents (gc-roles, source .../gascity-packs/tree/main/gascity/roles),
pinned to the same commit as [imports.gc]. That subpack ships inside the
bundled gascity pack, so at that pin it resolves offline from the same
embedded copy; gc init and gc rig add never clone gascity-packs for it.
gc doctor --fix re-pins it together with [imports.gc] when a newer gc
moves the gascity pin.
Core Pack
The bundledcore pack contributes the baseline behavior that helps agents
operate in a Gas City workspace:
The
core pack deliberately ships no agents. Packs that need long-lived
utility workers define their own — for example, the gastown pack owns the
dog utility pool and the mol-shutdown-dance formula, and the dolt pack
ships its own separate dog agent for Dolt maintenance formulas.
Doctor Repair And Migration
gc doctor includes a fixable check named builtin-pack-imports. It flags
required built-in imports missing from the composed config and legacy
workspace.includes entries that point at the retired per-city
.gc/system/packs tree, and gc doctor --fix migrates the city: it strips
the legacy includes from city.toml, adds the missing pinned imports to
pack.toml (creating a minimal one for legacy cities), and refreshes
packs.lock plus the cache.
Config load re-seeds the user-global cache for canonically pinned bundled
sources, prunes any leftover .gc/system/packs tree, and emits a
once-per-city warning when a required built-in import is missing from the
composed config. Bundled sources pinned at non-canonical commits are left
to gc import install like any other remote import.
Inspect The Files
To inspect the exact core-pack files your city composes, resolve the import and look inside the cache:gc. They are useful
for learning and debugging, but local edits are not a stable customization
surface (the binary restores its embedded content). Put custom behavior in
your own city files or packs instead.
Related Commands
Some commands show the artifacts after the builtin packs are loaded:gc pack registry ... commands discover public registry entries. They do not
make the built-in core pack a registry dependency.