Skip to main content

Gas City Configuration

Schema for city.toml — the top-level configuration file for a Gas City instance.
Auto-generated — do not edit. Run go run ./cmd/genschema to regenerate.

City

City is the top-level configuration for a Gas City instance.
FieldTypeRequiredDefaultDescription
include[]stringInclude lists config fragment files to merge into this config. Processed by LoadWithIncludes; not recursive (fragments cannot include).
workspaceWorkspaceyesWorkspace holds city-level metadata (name, default provider).
providersmap[string]ProviderSpecProviders defines named provider presets for agent startup.
packsmap[string]PackSourcePacks defines named remote pack sources fetched via git.
agent[]AgentyesAgents lists all configured agents in this city.
rigs[]RigRigs lists external projects registered in the city.
patchesPatchesPatches holds targeted modifications applied after fragment merge.
beadsBeadsConfigBeads configures the bead store backend.
sessionSessionConfigSession configures the session provider backend.
mailMailConfigMail configures the mail provider backend.
eventsEventsConfigEvents configures the events provider backend.
doltDoltConfigDolt configures optional dolt server connection overrides.
formulasFormulasConfigFormulas configures formula directory settings.
daemonDaemonConfigDaemon configures controller daemon settings.
ordersOrdersConfigOrders configures order settings (skip list).
apiAPIConfigAPI configures the optional HTTP API server.
chat_sessionsChatSessionsConfigChatSessions configures chat session behavior (auto-suspend).
convergenceConvergenceConfigConvergence configures convergence loop limits.
service[]ServiceServices declares workspace-owned HTTP services mounted on the controller edge under /svc/{name}.
agent_defaultsAgentDefaultsAgentDefaults provides default values applied to all agents that don’t override them. Useful for setting city-wide model, wake_mode, and overlay allowlists.

ACPSessionConfig

ACPSessionConfig holds settings for the ACP session provider.
FieldTypeRequiredDefaultDescription
handshake_timeoutstring30sHandshakeTimeout is how long to wait for the ACP handshake to complete. Duration string (e.g., ”30s”, “1m”). Defaults to ”30s”.
nudge_busy_timeoutstring60sNudgeBusyTimeout is how long to wait for an agent to become idle before sending a new prompt. Duration string. Defaults to ”60s”.
output_buffer_linesinteger1000OutputBufferLines is the number of output lines to keep in the circular buffer for Peek. Defaults to 1000.

APIConfig

APIConfig configures the HTTP API server.
FieldTypeRequiredDefaultDescription
portintegerPort is the TCP port to listen on. Defaults to 9443; 0 = disabled.
bindstringBind is the address to bind the listener to. Defaults to “127.0.0.1”.
allow_mutationsbooleanAllowMutations overrides the default read-only behavior when bind is non-localhost. Set to true in containerized environments where the API must bind to 0.0.0.0 for health probes but mutations are still safe.

Agent

Agent defines a configured agent in the city.
FieldTypeRequiredDefaultDescription
namestringyesName is the unique identifier for this agent.
descriptionstringDescription is a human-readable description shown in MC’s session creation UI.
dirstringDir is the identity prefix for rig-scoped agents and the default working directory when WorkDir is not set.
work_dirstringWorkDir overrides the session working directory without changing the agent’s qualified identity. Relative paths resolve against city root and may use the same template placeholders as session_setup.
scopestringScope defines where this agent is instantiated: “city” (one per city) or “rig” (one per rig, the default). Only meaningful for pack-defined agents; inline agents in city.toml use Dir directly. Enum: city, rig
suspendedbooleanSuspended prevents the reconciler from spawning this agent. Toggle with gc agent suspend/resume.
pre_start[]stringPreStart is a list of shell commands run before session creation. Commands run on the target filesystem: locally for tmux, inside the pod/container for exec providers. Template variables same as session_setup.
prompt_templatestringPromptTemplate is the path to this agent’s prompt template file. Relative paths resolve against the city directory.
nudgestringNudge is text typed into the agent’s tmux session after startup. Used for CLI agents that don’t accept command-line prompts.
sessionstringSession overrides the session transport for this agent. "" (default) uses the city-level session provider (typically tmux). “acp” uses the Agent Client Protocol (JSON-RPC over stdio). The agent’s resolved provider must have supports_acp = true. Enum: acp
providerstringProvider names the provider preset to use for this agent.
start_commandstringStartCommand overrides the provider’s command for this agent.
args[]stringArgs overrides the provider’s default arguments.
prompt_modestringargPromptMode controls how prompts are delivered: “arg”, “flag”, or “none”. Enum: arg, flag, none
prompt_flagstringPromptFlag is the CLI flag used to pass prompts when prompt_mode is “flag”.
ready_delay_msintegerReadyDelayMs is milliseconds to wait after launch before considering the agent ready.
ready_prompt_prefixstringReadyPromptPrefix is the string prefix that indicates the agent is ready for input.
process_names[]stringProcessNames lists process names to look for when checking if the agent is running.
emits_permission_warningbooleanEmitsPermissionWarning indicates whether the agent emits permission prompts that should be suppressed.
envmap[string]stringEnv sets additional environment variables for the agent process.
poolPoolConfigPool configures elastic pool behavior. When set, the agent becomes a pool.
work_querystringWorkQuery is the shell command to find available work for this agent. Used by gc hook and available in prompt templates as {{.WorkQuery}}. Also used by the controller’s reconciler to detect pending work (WakeWork reason): non-empty output means work exists, which wakes sleeping sessions even without WakeConfig. Default for fixed agents: “bd ready —assignee=<qualified-name>”. Default for pool agents: “bd ready —label=pool:<qualified-name> —limit=1”. Override to integrate with external task systems.
sling_querystringSlingQuery is the command template to route a bead to this agent/pool. Used by gc sling to make a bead visible to the target’s work_query. The placeholder {} is replaced with the bead ID at runtime. Default for fixed agents: “bd update {} —assignee=<qualified-name>”. Default for pool agents: “bd update {} —add-label=pool:<qualified-name>”. Pool agents must set both sling_query and work_query, or neither.
idle_timeoutstringIdleTimeout is the maximum time an agent session can be inactive before the controller kills and restarts it. Duration string (e.g., “15m”, “1h”). Empty (default) disables idle checking.
install_agent_hooks[]stringInstallAgentHooks overrides workspace-level install_agent_hooks for this agent. When set, replaces (not adds to) the workspace default.
hooks_installedbooleanHooksInstalled overrides automatic hook detection. Set to true when hooks are manually installed (e.g., merged into the project’s own hook config) and auto-installation via install_agent_hooks is not desired. When true, the agent is treated as hook-enabled for startup behavior: no prime instruction in beacon and no delayed nudge. Interacts with install_agent_hooks — set this instead when hooks are pre-installed.
session_setup[]stringSessionSetup is a list of shell commands run after session creation. Each command is a template string supporting placeholders: {{.Session}}, {{.Agent}}, {{.AgentBase}}, {{.Rig}}, {{.RigRoot}}, {{.CityRoot}}, {{.CityName}}, {{.WorkDir}}. Commands run in gc’s process (not inside the agent session) via sh -c.
session_setup_scriptstringSessionSetupScript is the path to a script run after session_setup commands. Relative paths resolve against the city directory. The script receives context via environment variables (GC_SESSION plus existing GC_* vars).
session_live[]stringSessionLive is a list of shell commands that are safe to re-apply without restarting the agent. Run at startup (after session_setup) and re-applied on config change without triggering a restart. Must be idempotent. Typical use: tmux theming, keybindings, status bars. Same template placeholders as session_setup.
overlay_dirstringOverlayDir is a directory whose contents are recursively copied (additive) into the agent’s working directory at startup. Existing files are not overwritten. Relative paths resolve against the declaring config file’s directory (pack-safe).
default_sling_formulastringDefaultSlingFormula is the formula name automatically applied via —on when beads are slung to this agent, unless —no-formula is set. Example: “mol-polecat-work”
inject_fragments[]stringInjectFragments lists named template fragments to append to this agent’s rendered prompt. Fragments come from shared template directories across all loaded packs. Each name must match a {{ define “name” }} block.
attachbooleanAttach controls whether the agent’s session supports interactive attachment (e.g., tmux attach). When false, the agent can use a lighter runtime (subprocess instead of tmux). Defaults to true.
fallbackbooleanFallback marks this agent as a fallback definition. During pack composition, a non-fallback agent with the same name wins silently. When two fallbacks collide, the first loaded (depth-first) wins.
depends_on[]stringDependsOn lists agent names that must be awake before this agent wakes. Used for dependency-ordered startup and shutdown. Validated for cycles at config load time.
resume_commandstringResumeCommand is the full shell command to run when resuming this agent. Supports {{.SessionKey}} template variable. When set, takes precedence over the provider’s ResumeFlag/ResumeStyle. Example: “claude —resume {{.SessionKey}} —dangerously-skip-permissions”
wake_modestringWakeMode controls context freshness across sleep/wake cycles. “resume” (default): reuse provider session key for conversation continuity. “fresh”: start a new provider session on every wake (polecat pattern). Enum: resume, fresh

AgentDefaults

AgentDefaults provides default values applied to all agents that don’t explicitly override them.
FieldTypeRequiredDefaultDescription
modelstringModel is the default model name for agents (e.g., “claude-sonnet-4-6”). Agents with their own model override take precedence.
wake_modestringWakeMode is the default wake mode (“resume” or “fresh”). Enum: resume, fresh
allow_overlay[]stringAllowOverlay lists template fields that sessions may override at creation time (e.g., [“model”, “prompt”, “title”]).
allow_env_override[]stringAllowEnvOverride lists environment variable names that sessions may override at creation time. Names must match ^[A-Z][A-Z0-9_]{0,127}$.

AgentOverride

AgentOverride modifies a pack-stamped agent for a specific rig.
FieldTypeRequiredDefaultDescription
agentstringyesAgent is the name of the pack agent to override (required).
dirstringDir overrides the stamped dir (default: rig name).
work_dirstringWorkDir overrides the agent’s working directory without changing its qualified identity or rig association.
scopestringScope overrides the agent’s scope (“city” or “rig”).
suspendedbooleanSuspended sets the agent’s suspended state.
poolPoolOverridePool overrides pool configuration fields.
envmap[string]stringEnv adds or overrides environment variables.
env_remove[]stringEnvRemove lists env var keys to remove.
pre_start[]stringPreStart overrides the agent’s pre_start commands.
prompt_templatestringPromptTemplate overrides the prompt template path. Relative paths resolve against the city directory.
sessionstringSession overrides the session transport (“acp”).
providerstringProvider overrides the provider name.
start_commandstringStartCommand overrides the start command.
nudgestringNudge overrides the nudge text.
idle_timeoutstringIdleTimeout overrides the idle timeout duration string (e.g., ”30s”, “5m”, “1h”).
install_agent_hooks[]stringInstallAgentHooks overrides the agent’s install_agent_hooks list.
hooks_installedbooleanHooksInstalled overrides automatic hook detection.
session_setup[]stringSessionSetup overrides the agent’s session_setup commands.
session_setup_scriptstringSessionSetupScript overrides the agent’s session_setup_script path. Relative paths resolve against the city directory.
session_live[]stringSessionLive overrides the agent’s session_live commands.
overlay_dirstringOverlayDir overrides the agent’s overlay_dir path. Copies contents additively into the agent’s working directory at startup. Relative paths resolve against the city directory.
default_sling_formulastringDefaultSlingFormula overrides the default sling formula.
inject_fragments[]stringInjectFragments overrides the agent’s inject_fragments list.
pre_start_append[]stringPreStartAppend appends commands to the agent’s pre_start list (instead of replacing). Applied after PreStart if both are set.
session_setup_append[]stringSessionSetupAppend appends commands to the agent’s session_setup list.
session_live_append[]stringSessionLiveAppend appends commands to the agent’s session_live list.
install_agent_hooks_append[]stringInstallAgentHooksAppend appends to the agent’s install_agent_hooks list.
attachbooleanAttach overrides the agent’s attach setting.
depends_on[]stringDependsOn overrides the agent’s dependency list.
resume_commandstringResumeCommand overrides the agent’s resume_command template.
wake_modestringWakeMode overrides the agent’s wake mode (“resume” or “fresh”). Enum: resume, fresh
inject_fragments_append[]stringInjectFragmentsAppend appends to the agent’s inject_fragments list.

AgentPatch

AgentPatch modifies an existing agent identified by (Dir, Name).
FieldTypeRequiredDefaultDescription
dirstringyesDir is the targeting key (required with Name). Identifies the agent’s working directory scope. Empty for city-scoped agents.
namestringyesName is the targeting key (required). Must match an existing agent’s name.
work_dirstringWorkDir overrides the agent’s session working directory.
scopestringScope overrides the agent’s scope (“city” or “rig”).
suspendedbooleanSuspended overrides the agent’s suspended state.
poolPoolOverridePool overrides pool configuration fields.
envmap[string]stringEnv adds or overrides environment variables.
env_remove[]stringEnvRemove lists env var keys to remove after merging.
pre_start[]stringPreStart overrides the agent’s pre_start commands.
prompt_templatestringPromptTemplate overrides the prompt template path. Relative paths resolve against the city directory.
sessionstringSession overrides the session transport (“acp”).
providerstringProvider overrides the provider name.
start_commandstringStartCommand overrides the start command.
nudgestringNudge overrides the nudge text.
idle_timeoutstringIdleTimeout overrides the idle timeout. Duration string (e.g., ”30s”, “5m”, “1h”).
install_agent_hooks[]stringInstallAgentHooks overrides the agent’s install_agent_hooks list.
hooks_installedbooleanHooksInstalled overrides automatic hook detection.
session_setup[]stringSessionSetup overrides the agent’s session_setup commands.
session_setup_scriptstringSessionSetupScript overrides the agent’s session_setup_script path. Relative paths resolve against the city directory.
session_live[]stringSessionLive overrides the agent’s session_live commands.
overlay_dirstringOverlayDir overrides the agent’s overlay_dir path. Copies contents additively into the agent’s working directory at startup. Relative paths resolve against the city directory.
default_sling_formulastringDefaultSlingFormula overrides the default sling formula.
inject_fragments[]stringInjectFragments overrides the agent’s inject_fragments list.
attachbooleanAttach overrides the agent’s attach setting.
depends_on[]stringDependsOn overrides the agent’s dependency list.
resume_commandstringResumeCommand overrides the agent’s resume_command template.
wake_modestringWakeMode overrides the agent’s wake mode (“resume” or “fresh”). Enum: resume, fresh
pre_start_append[]stringPreStartAppend appends commands to the agent’s pre_start list (instead of replacing). Applied after PreStart if both are set.
session_setup_append[]stringSessionSetupAppend appends commands to the agent’s session_setup list.
session_live_append[]stringSessionLiveAppend appends commands to the agent’s session_live list.
install_agent_hooks_append[]stringInstallAgentHooksAppend appends to the agent’s install_agent_hooks list.
inject_fragments_append[]stringInjectFragmentsAppend appends to the agent’s inject_fragments list.

BeadsConfig

BeadsConfig holds bead store settings.
FieldTypeRequiredDefaultDescription
providerstringbdProvider selects the bead store backend: “bd” (default), “file”, or “exec:<script>” for a user-supplied script.

ChatSessionsConfig

ChatSessionsConfig configures chat session behavior.
FieldTypeRequiredDefaultDescription
idle_timeoutstringIdleTimeout is the duration after which a detached chat session is auto-suspended. Duration string (e.g., “30m”, “1h”). 0 = disabled.

ConvergenceConfig

ConvergenceConfig holds convergence loop limits.
FieldTypeRequiredDefaultDescription
max_per_agentinteger2MaxPerAgent is the maximum number of active convergence loops per agent. 0 means use default (2).
max_totalinteger10MaxTotal is the maximum total number of active convergence loops. 0 means use default (10).

DaemonConfig

DaemonConfig holds controller daemon settings.
FieldTypeRequiredDefaultDescription
patrol_intervalstring30sPatrolInterval is the health patrol interval. Duration string (e.g., ”30s”, “5m”, “1h”). Defaults to ”30s”.
max_restartsinteger5MaxRestarts is the maximum number of agent restarts within RestartWindow before the agent is quarantined. 0 means unlimited (no crash loop detection). Defaults to 5.
restart_windowstring1hRestartWindow is the sliding time window for counting restarts. Duration string (e.g., ”30s”, “5m”, “1h”). Defaults to “1h”.
shutdown_timeoutstring5sShutdownTimeout is the time to wait after sending Ctrl-C before force-killing agents during shutdown. Duration string (e.g., “5s”, ”30s”). Set to “0s” for immediate kill. Defaults to “5s”.
wisp_gc_intervalstringWispGCInterval is how often wisp GC runs. Duration string (e.g., “5m”, “1h”). Wisp GC is disabled unless both WispGCInterval and WispTTL are set.
wisp_ttlstringWispTTL is how long a closed molecule survives before being purged. Duration string (e.g., “24h”, “7d”). Wisp GC is disabled unless both WispGCInterval and WispTTL are set.
drift_drain_timeoutstring2mDriftDrainTimeout is the maximum time to wait for an agent to acknowledge a drain signal during a config-drift restart. If the agent doesn’t ack within this window, the controller force-kills and restarts it. Duration string (e.g., “2m”, “5m”). Defaults to “2m”.
observe_paths[]stringObservePaths lists extra directories to search for Claude JSONL session files (e.g., aimux session paths). The default search path (~/.claude/projects/) is always included.

DoltConfig

DoltConfig holds optional dolt server overrides.
FieldTypeRequiredDefaultDescription
portinteger0Port is the dolt server port. 0 means use ephemeral port allocation (hashed from city path). Set explicitly to override.
hoststringlocalhostHost is the dolt server hostname. Defaults to localhost.

EventsConfig

EventsConfig holds events provider settings.
FieldTypeRequiredDefaultDescription
providerstringProvider selects the events backend: “fake”, “fail”, “exec:<script>”, or "" (default: file-backed JSONL).

FormulasConfig

FormulasConfig holds formula directory settings.
FieldTypeRequiredDefaultDescription
dirstringformulasDir is the path to the formulas directory. Defaults to “formulas”.

K8sConfig

K8sConfig holds native K8s session provider settings.
FieldTypeRequiredDefaultDescription
namespacestringgcNamespace is the K8s namespace for agent pods. Default: “gc”.
imagestringImage is the container image for agents.
contextstringContext is the kubectl/kubeconfig context. Default: current.
cpu_requeststring500mCPURequest is the pod CPU request. Default: “500m”.
mem_requeststring1GiMemRequest is the pod memory request. Default: “1Gi”.
cpu_limitstring2CPULimit is the pod CPU limit. Default: “2”.
mem_limitstring4GiMemLimit is the pod memory limit. Default: “4Gi”.
prebakedbooleanPrebaked skips init container staging and EmptyDir volumes when true. Use with images built by gc build-image that have city content baked in.

MailConfig

MailConfig holds mail provider settings.
FieldTypeRequiredDefaultDescription
providerstringProvider selects the mail backend: “fake”, “fail”, “exec:<script>”, or "" (default: beadmail).

OptionChoice

OptionChoice is one allowed value for a “select” option.
FieldTypeRequiredDefaultDescription
valuestringyes
labelstringyes
flag_args[]stringyesFlagArgs are the CLI arguments injected when this choice is selected. json:”-” is intentional: FlagArgs must never appear in the public API DTO (security boundary — prevents clients from seeing internal CLI flags).

OrderOverride

OrderOverride modifies a scanned order’s scheduling fields.
FieldTypeRequiredDefaultDescription
namestringyesName is the order name to target (required).
rigstringRig scopes the override to a specific rig’s order. Empty matches city-level orders.
enabledbooleanEnabled overrides whether the order is active.
gatestringGate overrides the gate type.
intervalstringInterval overrides the cooldown interval. Go duration string.
schedulestringSchedule overrides the cron expression.
checkstringCheck overrides the condition gate check command.
onstringOn overrides the event gate event type.
poolstringPool overrides the target agent/pool.
timeoutstringTimeout overrides the per-order timeout. Go duration string.

OrdersConfig

OrdersConfig holds order settings.
FieldTypeRequiredDefaultDescription
skip[]stringSkip lists order names to exclude from scanning.
max_timeoutstringMaxTimeout is an operator hard cap on per-order timeouts. No order gets more than this duration. Go duration string (e.g., ”60s”). Empty means uncapped (no override).
overrides[]OrderOverrideOverrides apply per-order field overrides after scanning. Each override targets an order by name and optionally by rig.

PackSource

PackSource defines a remote pack repository.
FieldTypeRequiredDefaultDescription
sourcestringyesSource is the git repository URL.
refstringRef is the git ref to checkout (branch, tag, or commit). Defaults to HEAD.
pathstringPath is a subdirectory within the repo containing the pack files.

Patches

Patches holds all patch blocks from composition.
FieldTypeRequiredDefaultDescription
agent[]AgentPatchAgents targets agents by (dir, name).
rigs[]RigPatchRigs targets rigs by name.
providers[]ProviderPatchProviders targets providers by name.

PoolConfig

PoolConfig defines elastic pool parameters for an agent.
FieldTypeRequiredDefaultDescription
mininteger0Min is the minimum number of pool instances. Defaults to 0.
maxinteger0Max is the maximum number of pool instances. 0 means the pool is disabled (no instances will be created). -1 means unlimited (the check command’s output determines scale with no upper cap). Defaults to 0.
checkstringecho 1Check is a shell command whose output determines desired pool size. Defaults to “echo 1”.
drain_timeoutstring5mDrainTimeout is the maximum time to wait for a pool instance to finish its current work before force-killing it. Duration string (e.g., “5m”, “30m”, “1h”). Defaults to “5m”.
on_deathstringOnDeath is a shell command run when a pool instance dies. Default: unclaims in_progress beads assigned to the dead instance.
on_bootstringOnBoot is a shell command run once at controller startup for each pool. Default: unclaims all in_progress beads labeled for this pool.
namepoolstringNamepool is the path to a plain text file with one name per line. When set, pool instances use names from the file instead of numeric suffixes (e.g., “furiosa” instead of “polecat-1”). The path is resolved via adjustFragmentPath (relative to pack dir, absolute, or ”//” for city-root-relative). Requires a bounded pool (max > 0).

PoolOverride

PoolOverride modifies pool configuration fields.
FieldTypeRequiredDefaultDescription
minintegerMin overrides pool minimum instances.
maxintegerMax overrides pool maximum instances. 0 means the pool is disabled.
checkstringCheck overrides the pool check command.
drain_timeoutstringDrainTimeout overrides the drain timeout. Duration string (e.g., “5m”, “30m”, “1h”).
on_deathstringOnDeath overrides the on_death command.
on_bootstringOnBoot overrides the on_boot command.

ProviderOption

ProviderOption declares a single configurable option for a provider.
FieldTypeRequiredDefaultDescription
keystringyes
labelstringyes
typestringyes”select” only (v1)
defaultstringyes
choices[]OptionChoiceyes

ProviderPatch

ProviderPatch modifies an existing provider identified by Name.
FieldTypeRequiredDefaultDescription
namestringyesName is the targeting key (required). Must match an existing provider’s name.
commandstringCommand overrides the provider command.
args[]stringArgs overrides the provider args.
prompt_modestringPromptMode overrides prompt delivery mode. Enum: arg, flag, none
prompt_flagstringPromptFlag overrides the prompt flag.
ready_delay_msintegerReadyDelayMs overrides the ready delay in milliseconds.
envmap[string]stringEnv adds or overrides environment variables.
env_remove[]stringEnvRemove lists env var keys to remove.
_replacebooleanReplace replaces the entire provider block instead of deep-merging.

ProviderSpec

ProviderSpec defines a named provider’s startup parameters.
FieldTypeRequiredDefaultDescription
display_namestringDisplayName is the human-readable name shown in UI and logs.
commandstringCommand is the executable to run for this provider.
args[]stringArgs are default command-line arguments passed to the provider.
prompt_modestringargPromptMode controls how prompts are delivered: “arg”, “flag”, or “none”. Enum: arg, flag, none
prompt_flagstringPromptFlag is the CLI flag used when prompt_mode is “flag” (e.g. “—prompt”).
ready_delay_msintegerReadyDelayMs is milliseconds to wait after launch before the provider is considered ready.
ready_prompt_prefixstringReadyPromptPrefix is the string prefix that indicates the provider is ready for input.
process_names[]stringProcessNames lists process names to look for when checking if the provider is running.
emits_permission_warningbooleanEmitsPermissionWarning indicates whether the provider emits permission prompts.
envmap[string]stringEnv sets additional environment variables for the provider process.
path_checkstringPathCheck overrides the binary name used for PATH detection. When set, lookupProvider and detectProviderName use this instead of Command for exec.LookPath checks. Useful when Command is a shell wrapper (e.g. sh -c ’…’) but we need to verify the real binary is installed.
supports_acpbooleanSupportsACP indicates the binary speaks the Agent Client Protocol (JSON-RPC 2.0 over stdio). When an agent sets session = “acp”, its resolved provider must have SupportsACP = true.
supports_hooksbooleanSupportsHooks indicates the provider has an executable hook mechanism (settings.json, plugins, etc.) for lifecycle events.
instructions_filestringInstructionsFile is the filename the provider reads for project instructions (e.g., “CLAUDE.md”, “AGENTS.md”). Empty defaults to “AGENTS.md”.
resume_flagstringResumeFlag is the CLI flag for resuming a session by ID. Empty means the provider does not support resume. Examples: “—resume” (claude), “resume” (codex)
resume_stylestringResumeStyle controls how ResumeFlag is applied: “flag” → command —resume <key> (default) “subcommand” → command resume <key>
resume_commandstringResumeCommand is the full shell command to run when resuming a session. Supports {{.SessionKey}} template variable. When set, takes precedence over ResumeFlag/ResumeStyle. Example: “claude —resume {{.SessionKey}} —dangerously-skip-permissions”
session_id_flagstringSessionIDFlag is the CLI flag for creating a session with a specific ID. Enables the Generate & Pass strategy for session key management. Example: “—session-id” (claude)
permission_modesmap[string]stringPermissionModes maps permission mode names to CLI flags. Example: {“unrestricted”: “—dangerously-skip-permissions”, “plan”: “—permission-mode plan”} This is a config-only lookup table consumed by external clients (e.g., Mission Control) to populate permission mode dropdowns. Launch-time flag substitution is planned for a follow-up PR — currently no runtime code reads this field.
options_schema[]ProviderOptionOptionsSchema declares the configurable options this provider supports. Each option maps to CLI args via its Choices[].FlagArgs field. Serialized via a dedicated DTO (not directly to JSON) so FlagArgs stays server-side.

Rig

Rig defines an external project registered in the city.
FieldTypeRequiredDefaultDescription
namestringyesName is the unique identifier for this rig.
pathstringyesPath is the absolute filesystem path to the rig’s repository.
prefixstringPrefix overrides the auto-derived bead ID prefix for this rig.
suspendedbooleanSuspended prevents the reconciler from spawning agents in this rig. Toggle with gc rig suspend/resume.
formulas_dirstringFormulasDir is a rig-local formula directory (Layer 4). Overrides pack formulas for this rig by filename. Relative paths resolve against the city directory.
includes[]stringIncludes lists pack directories or URLs for this rig. Replaces the older pack/packs fields. Each entry is a local path, a git source//sub#ref URL, or a GitHub tree URL.
overrides[]AgentOverrideOverrides are per-agent patches applied after pack expansion.
default_sling_targetstringDefaultSlingTarget is the agent qualified name used when gc sling is invoked with only a bead ID (no explicit target). Resolved via resolveAgentIdentity. Example: “rig/polecat”

RigPatch

RigPatch modifies an existing rig identified by Name.
FieldTypeRequiredDefaultDescription
namestringyesName is the targeting key (required). Must match an existing rig’s name.
pathstringPath overrides the rig’s filesystem path.
prefixstringPrefix overrides the bead ID prefix.
suspendedbooleanSuspended overrides the rig’s suspended state.

Service

Service declares a workspace-owned HTTP service mounted under /svc/.
FieldTypeRequiredDefaultDescription
namestringyesName is the unique service identifier within a workspace.
kindstringKind selects how the service is implemented. Enum: workflow, proxy_process
publish_modestringPublishMode declares how the service is intended to be published. v0 supports private services and direct reuse of the API listener. Enum: private, direct
state_rootstringStateRoot overrides the managed service state root. Defaults to .gc/services/{name}. The path must stay within .gc/services/.
publicationServicePublicationConfigPublication declares generic publication intent. The platform decides whether and how that intent becomes a public route.
workflowServiceWorkflowConfigWorkflow configures controller-owned workflow services.
processServiceProcessConfigProcess configures controller-supervised proxy services.

ServiceProcessConfig

ServiceProcessConfig configures a controller-supervised local process that is reverse-proxied under /svc/.
FieldTypeRequiredDefaultDescription
command[]stringCommand is the argv used to start the local service process.
health_pathstringHealthPath, when set, is probed on the local listener before the service is marked ready.

ServicePublicationConfig

ServicePublicationConfig declares platform-neutral publication intent.
FieldTypeRequiredDefaultDescription
visibilitystringVisibility selects whether the service is private to the workspace, available publicly, or gated by tenant auth at the platform edge. Enum: private, public, tenant
hostnamestringHostname overrides the default hostname label derived from service.name.
allow_websocketsbooleanAllowWebSockets permits websocket upgrades on the published route.

ServiceWorkflowConfig

ServiceWorkflowConfig configures controller-owned workflow services.
FieldTypeRequiredDefaultDescription
contractstringContract selects the built-in workflow handler.

SessionConfig

SessionConfig holds session provider settings.
FieldTypeRequiredDefaultDescription
providerstringProvider selects the session backend: “fake”, “fail”, “subprocess”, “acp”, “exec:<script>”, “k8s”, or "" (default: tmux).
k8sK8sConfigK8s holds Kubernetes-specific settings for the native K8s provider.
acpACPSessionConfigACP holds settings for the ACP (Agent Client Protocol) session provider.
setup_timeoutstring10sSetupTimeout is the per-command/script timeout for session setup and pre_start commands. Duration string (e.g., ”10s”, ”30s”). Defaults to ”10s”.
nudge_ready_timeoutstring10sNudgeReadyTimeout is how long to wait for the agent to be ready before sending nudge text. Duration string. Defaults to ”10s”.
nudge_retry_intervalstring500msNudgeRetryInterval is the retry interval between nudge readiness polls. Duration string. Defaults to “500ms”.
nudge_lock_timeoutstring30sNudgeLockTimeout is how long to wait to acquire the per-session nudge lock. Duration string. Defaults to ”30s”.
debounce_msinteger500DebounceMs is the default debounce interval in milliseconds for send-keys. Defaults to 500.
display_msinteger5000DisplayMs is the default display duration in milliseconds for status messages. Defaults to 5000.
startup_timeoutstring60sStartupTimeout is how long to wait for each agent’s Start() call before treating it as failed. Duration string (e.g., ”60s”, “2m”). Defaults to ”60s”.
socketstringSocket specifies the tmux socket name for per-city isolation. When set, all tmux commands use “tmux -L <socket>” to connect to a dedicated server. When empty, defaults to the city name (workspace.name) — giving every city its own tmux server automatically. Set explicitly to override.
remote_matchstringRemoteMatch is a substring pattern for the hybrid provider to route sessions to the remote (K8s) backend. Sessions whose names contain this pattern go to K8s; all others stay local (tmux). Overridden by the GC_HYBRID_REMOTE_MATCH env var if set.

Workspace

Workspace holds city-level metadata and optional defaults that apply to all agents unless overridden per-agent.
FieldTypeRequiredDefaultDescription
namestringyesName is the human-readable name for this city.
providerstringProvider is the default provider name used by agents that don’t specify one.
start_commandstringStartCommand overrides the provider’s command for all agents.
suspendedbooleanSuspended controls whether the city is suspended. When true, all agents are effectively suspended: the reconciler won’t spawn them, and gc hook/prime return empty. Inherits downward — individual agent/rig suspended fields are checked independently.
session_templatestringSessionTemplate is a template string supporting placeholders: {{.City}}, {{.Agent}} (sanitized), {{.Dir}}, {{.Name}}. Controls tmux session naming. Default (empty): ”{{.Agent}}” — just the sanitized agent name. Per-city tmux socket isolation makes a city prefix unnecessary.
install_agent_hooks[]stringInstallAgentHooks lists provider names whose hooks should be installed into agent working directories. Agent-level overrides workspace-level (replace, not additive). Supported: “claude”, “codex”, “gemini”, “opencode”, “copilot”, “cursor”, “pi”, “omp”.
global_fragments[]stringGlobalFragments lists named template fragments injected into every agent’s rendered prompt. Applied before per-agent InjectFragments. Each name must match a {{ define “name” }} block from a pack’s prompts/shared/ directory.
includes[]stringIncludes lists pack directories or URLs to compose into this workspace. Replaces the older pack/packs fields. Each entry is a local path, a git source//sub#ref URL, or a GitHub tree URL.
default_rig_includes[]stringDefaultRigIncludes lists pack directories applied to new rigs when “gc rig add” is called without —include. Allows cities to define a default pack for all rigs.
Last modified on March 19, 2026