The rest of this page is one delta per capability — what changes when the
single-agent feature becomes shared infrastructure.
Context
The window is seeded automatically, per agent, from durable sources — you never hand-assemble it.- It starts from the agent’s role: a prompt template rendered with deployment data (city, rig, working directory, branch, custom variables).
- Its current work items and mail — all beads — flow in live as it works.
State
Durable state is first-class, not something you persist by hand. Everything is a bead: a stored work item with status, labels, relationships, and metadata, queried live (bd, gc) — never tracked
in status or lock files that go stale on a crash. Sessions come and go; the
beads remain.
Skills
You author a skill once at a scope, and Gas City materializes it to every eligible agent — no per-agent allow-lists, and the model decides when a skill applies.- Pick the scope:
skills/<name>/at pack level → shared with every agent in the city.agents/<role>/skills/<name>/at role level → only agents of that role (and all its pooled instances). On a name collision, the role-local skill wins.
- At startup Gas City symlinks the pack level and role level skill directories into
each agent’s provider-specific skill sink —
.claude/skills/,.agents/skills/(codex),.gemini/skills/,.opencode/skills/. List withgc skill list. - It places the files into each provider’s own convention; it doesn’t translate them. Providers whose convention isn’t confirmed (copilot, cursor, pi, omp) are skipped for now.
- No framework around skills: no per-agent allow-lists. Within a scope every eligible agent gets every skill; the model decides when one applies.
- MCP is list-only today (
gc mcp listshows what’s catalogued; you wire the servers yourself).
History
History is structured and queryable across every agent, not per-session files you manage yourself.Messaging
Agents that share no session still communicate, over two channels.Roles
A role is a folder, not a single subagent file.agents/<name>/ holds an agent.toml (provider, pool, timeouts) and a
prompt.template.md defining what that kind of agent does.
Identity
A specific running instance has a stable name you can address — across restarts.- Each live agent has a deterministic session name (e.g.
hello-world/pack.worker_furiosa), so you and other agents can message, wake, peek at, and resume exactly that one. - One role instantiates into many identities (a pool of
worker_furiosa,worker_nux, …). See them withgc session list. - Role (the kind), identity (the running instance), and pool (the set) are all facets of the single Agent primitive — see the six primitives.
See also
- The six primitives — the canonical model; start here.
- Coming from Gas Town
- Tutorial 04: Communication — mail and nudge.
- Config Reference