BluCity Operator Contract¶
1. Purpose¶
This contract defines how Bluefly Agents and operators interact with BluCity and Gas City safely, consistently, durably, and through supported interfaces.
The goal is not merely to run Agents. The goal is to operate a durable engineering system where:
- work survives Sessions;
- Agents coordinate without human message relay;
- source, work state, runtime, storage, and documentation have explicit authorities;
- Mountains provide durable mission context;
- Convoys coordinate related work;
- Beads represent executable work;
- Mail carries Agent-to-Agent communication;
- Events and Feed expose what is happening;
- receipts prove outcomes;
- humans make decisions instead of carrying operational state.
The operating rule is:
Agents operate against durable work and published contracts, not dashboards, transcripts, guessed endpoints, or session memory.
BluCity is Bluefly's source-controlled composition of Gas City. Gas City is Bluefly's durable orchestration and multi-agent work substrate.
2. Canonical Authority Model¶
Always distinguish authority by concern.
| Concern | Authority |
|---|---|
| Source, branches, merge requests, CI, releases | GitLab |
| Durable work and orchestration | Gas City / Beads |
| Mission and work coordination | Gas City / BluCity operating model |
| Runtime truth | Declared runtime authority |
| Durable storage, backup, recovery artifacts | Declared durable storage authority |
| Secrets | 1Password |
| Infrastructure desired state | Governed IaC |
| Evergreen engineering documentation | Canonical documentation authority |
| Business/product decisions | Designated human authority |
These authorities are intentionally separate.
SOURCE != WORK_STATE
WORK_STATE != RUNTIME
RUNTIME != SOURCE
STORAGE != SOURCE
DOCUMENTATION != WORK_STATE
CHAT != AUTHORITY
AGENT_MEMORY != AUTHORITY
DASHBOARD != API_CONTRACT
MAIL != WORK_STATE
SESSION != DURABILITY
Do not promote one layer into another because it is convenient.
3. Gas City Core Primitives¶
Every Agent interacting with BluCity must understand Gas City's canonical primitive vocabulary.
| Primitive | Question | Meaning |
|---|---|---|
| Agent | WHO | Configured execution behavior |
| Bead | WHAT | Durable unit of work |
| Formula | HOW | Reusable executable method |
| Rig | WHERE | Registered external project context |
| Pack | CONFIGURES | Portable configuration bundle |
| Event | OBSERVE | Execution/activity notification |
These meanings must not be redefined for Bluefly convenience.
Gas City's six primitives are the foundation. They are not the entire BluCity operating model.
4. Required BluCity Operating Concepts¶
Every Bluefly Agent must also understand the higher-level orchestration and coordination concepts used by BluCity.
Required concepts include: City, Mountain, Convoy, Bead, Formula, Order, Agent, Session, Provider, Rig, Pack, Event, Feed, Hook, Sling, Mail, Escalation, Patrol, Audit Log, Doctor, runtime/controller behavior, receipts, verification.
Not every concept above is a Gas City core primitive. That distinction matters. It does not make the supporting concept optional or unimportant.
5. Gas City Core vs Bluefly Roles¶
Gas City core is role-agnostic. Names such as BLU, Mayor, Harbormaster, Forge, Drupal, Foundry, Refinery, Sentinel, Witness, Deacon, Polecat, Dog, Crew may exist as:
- Bluefly-defined Agent roles;
- imported Pack roles;
- compatibility roles;
- operational roles.
They are not Gas City primitives.
Correct: Agent = Gas City primitive. Mayor = configured Agent role. Witness = configured Agent role. Refinery = configured Agent role.
Incorrect: Mayor = Gas City primitive.
Gas Town-style names may remain where current Packs or Bluefly configuration legitimately use them. Do not preserve terminology merely for nostalgia. Do not delete useful roles merely because their names originated elsewhere.
There is one durable orchestration authority: Gas City.
6. City¶
A City is a Gas City deployment context. It combines:
- portable configuration;
- root Pack composition;
- City deployment configuration;
- registered Rigs;
- provider/runtime choices;
- machine-local bindings;
- runtime state.
Bluefly's Gas City composition is BluCity. BluCity is not a new orchestration primitive. It is Bluefly's source-controlled Gas City composition.
City identity must be explicit. Do not infer City identity solely from: hostname, user account, filesystem path, cloud provider, one machine, one deployment target.
7. Mountain¶
A Mountain is a durable higher-level objective, mission, initiative, or outcome. A Mountain answers: What major outcome are we trying to achieve?
A Mountain may span multiple Convoys, multiple Rigs, multiple Formulas, multiple Beads, multiple Agents, multiple repositories, multiple execution environments, multiple releases.
Examples: restore and converge BluCity; complete a customer migration; deliver a product capability; eliminate an MR estate; complete a release program; modernize a Drupal platform; execute a security remediation program.
A Mountain is not one giant task. Do not flatten a mission into a single oversized Bead.
Conceptually:
MOUNTAIN -> CONVOYS -> BEADS -> AGENTS -> SESSIONS
A Mountain should make it possible to determine:
MOUNTAIN_ID=
OBJECTIVE=
OWNER=
STATUS=
CONVOYS=
RIGS=
DEPENDENCIES=
BLOCKERS=
ACCEPTANCE=
EVIDENCE=
If Mountain is implemented through Bluefly composition or a Pack rather than Gas City core, document that provenance separately. Its operational role remains required.
8. Convoy¶
A Convoy is a coordinated group of related work moving toward a shared outcome. A Convoy answers: Which pieces of work must move together?
Convoys are useful when work spans multiple Beads, multiple Agents, multiple Rigs, source + CI + runtime, implementation + verification, or multiple repositories.
Example:
MOUNTAIN: BluCity production convergence
CONVOY: deployment architecture repair
BEADS: preserve durable work state
parameterize City root
converge Rig bindings
repair deployment contract
release
deploy
verify
A Convoy should expose:
CONVOY_ID=
MOUNTAIN=
OBJECTIVE=
OWNER=
BEADS=
RIGS=
STATUS=
BLOCKERS=
ACCEPTANCE=
Convoy grouping does not replace Bead dependencies. Beads remain the executable work graph. Convoys provide coordinated work grouping.
9. Bead¶
A Bead is the durable executable unit of work. Meaningful work should have durable identity. A Bead should make it possible to determine:
WORK_ID=
MOUNTAIN=
CONVOY=
OWNER=
AGENT=
RIG=
STATUS=
DEPENDENCIES=
BLOCKED_BY=
SOURCE_PROJECT=
ACCEPTANCE=
EVIDENCE=
VERIFIER=
NEXT_ACTION=
Chat messages may communicate work. They do not replace Beads. Mail may communicate work. It does not replace Beads. Session memory does not replace Beads. A Session ending must not make work disappear.
10. Formula¶
A Formula is a reusable executable method. Use a Formula when a repeatable process should become durable work that Gas City can drive.
Examples: Drupal Site Template manufacturing; release convergence; repository reconciliation; deployment verification; backup verification; security release gate; fresh-install proof; migration acceptance.
A Formula is not merely documentation. Executing a Formula should materialize or drive durable work.
Distinguish: Pack = what reusable behavior/configuration is available. Formula = how a repeatable job is performed.
GluLess (Goal · Limits · Utilities) is not a Formula and not a seventh Gas City primitive. When executable acceptance is required, import the gluless Pack and use Formula v2 gluless-prove so [steps.check] mode = "exec" runs the GluLess CLI; orchestrator-owned workflow-finalize stays Gas City's. Do not add [[gluless]] to city.toml. Do not fork Gas City. Cedar / ContractPlane remain authority engines; Limits bind later and do not replace them. Exact CLI: cli-resources-reference.md.
Do not build a custom Bluefly workflow engine when a Formula owns the behavior.
11. Order¶
An Order defines when repeatable execution should occur, where supported by the installed Gas City version. Orders may represent: scheduled work; recurring Formula execution; event-triggered work; periodic maintenance; operational checks.
Do not invent a separate Bluefly scheduling abstraction for behavior Gas City already owns. Infrastructure schedulers may still be correct for infrastructure concerns outside Gas City's authority.
Order check triggers and Order exec run operator-configured commands, not sandboxed ones. Command construction (secret handling, sh -c interpolation) is governed by gas-city-command-execution-trust-boundaries.md.
12. Rig¶
A Rig is an external project registered with a City. It normally represents a Git/project execution context with: project working context; Bead namespace; Agent scope; project-specific work.
A Rig is not a generic organizational folder. Do not automatically create one Rig for every repository. A project should normally become a Rig when Agents need independent Gas City work/execution context. Consider:
- Do Agents execute work directly against this project?
- Does it need its own Bead namespace?
- Does it require Rig-scoped Agents?
- Does it have independent release/source activity?
- Does Gas City need to route work into it independently?
If none apply, a separate Rig may not be justified.
Provision Rigs through supported Gas City mechanisms. Do not manufacture runtime metadata just to make a Rig appear healthy.
A Rig path must be a working checkout. It is not a bare repository and not a Git URL. Portable Rig identity (name, and prefix where required) belongs in source-controlled city.toml. Machine-local path bindings belong in .gc/site.toml. Do not put host paths in portable source. Topology detail: gas-city-deployment-wiring.md. Current bound-Rig counts, broken Rigs, and checkout locations are catalog/runtime evidence, not this contract.
Before mutating endpoint, Rig, or Beads state: identify the listener/PID; identify the exact config and data directory; query the explicit host/port; prove known Beads; inspect installed gc <command> --help; compare current docs.gascity.com; abort if the operation would initialize or replace authority unintentionally.
13. Pack¶
A Pack is portable Gas City configuration. A Pack may provide: Agents; role definitions; prompts; Formulas; Orders; commands; doctor checks; overlays; skills; integration configuration; reusable assets.
Bluefly should prefer CONFIGURE -> IMPORT -> COMPOSE before PATCH -> FORK -> BUILD.
Reusable GluLess attachment ships as the gluless Pack (GitHub blueflyio/gluless pack/), not as city sprawl. Import the pack; do not invent city-local [[gluless]] keys.
Do not duplicate upstream Pack behavior into unrelated Bluefly code simply because that behavior is needed.
14. Agent¶
An Agent is configured execution behavior. An Agent may define: identity; role; provider; prompt; scope; working behavior; concurrency; startup behavior; Session policy.
An Agent does not own source. An Agent does not own durable work. An Agent executes against those authorities.
Agent startup commands, pre_start, and session_setup/session_setup_script/session_live are trusted-operator command surfaces, not sandboxes — see gas-city-command-execution-trust-boundaries.md for what may and may not reach them (never bead/mail/PR text interpolated into a shell command).
15. Session¶
A Session is disposable execution capacity. This is a hard Bluefly rule:
Session death must not equal work loss.
If Claude closes, SSH disconnects, a provider crashes, a laptop shuts down, or an Agent restarts — the work must survive.
Durability belongs in: Mountains; Convoys; Beads; GitLab; receipts; durable evidence; declared storage authority. Not in the Session transcript.
16. Provider¶
A provider supplies execution capacity for an Agent. Providers may include supported coding or automation runtimes.
Correct relationship:
Mountain -> Convoy -> Bead -> Agent -> Session -> Provider -> Execution
Providers execute. They do not own work. Provider availability must never become the durability mechanism.
Provider scripts (session, beads, mail, events) are trusted operator code invoked by direct exec, not sh -c, with request data passed as stdin/argv — never as an interpolated shell string. Full surface-by-surface trust model: gas-city-command-execution-trust-boundaries.md.
17. Hook¶
A Hook represents the relationship between work and an Agent/Session, where supported by the current Gas City model. Operationally, Hooks answer: what work is assigned; what work is claimable; what Agent is attached; what Session is carrying it.
Target behavior:
Bead -> Hook / assignment -> Agent -> Session -> execution
Hooks are not a substitute for Bead ownership.
18. Sling¶
Where supported, Sling is the dispatch operation that sends work into the orchestration system. Sling is transport/dispatch. Beads remain durable work.
A successful Sling operation does not itself prove: execution started; work completed; acceptance passed.
gc sling//sling runs on trusted operator/pack config, but the command output it returns is caller-visible — never route that returned text back into another shell command. See gas-city-command-execution-trust-boundaries.md.
19. Mail¶
Mail is durable Agent-to-Agent communication. Mail is a required BluCity operating concept because:
Thomas must not be the message bus.
Mail should support direct coordination such as: MAYOR -> BLU, BLU -> REFINERY, SENTINEL -> MAYOR, REFINERY -> BLU, BLU -> MAYOR, MAYOR -> WITNESS, WITNESS -> MAYOR, HARBORMASTER -> MAYOR.
Mail may carry: work handoffs; evidence; dependency discoveries; source decisions; runtime findings; verification requests; receipts; escalations; completion notices.
Distinguish: BEAD = durable executable work. MAIL = durable communication about work.
A useful Mail envelope should reference durable context:
FROM=
TO=
MOUNTAIN=
CONVOY=
BEAD=
RIG=
SUBJECT=
OBSERVED=
REQUESTED_ACTION=
ACCEPTANCE=
REPLY_REQUIRED=
If Mail creates new executable work: CREATE_OR_UPDATE_BEAD. If Mail changes a dependency: UPDATE_BEAD_GRAPH. If Mail carries evidence: ATTACH_OR_REFERENCE_EVIDENCE. If another Agent must act: ROUTE_TO_OWNER.
Mail transports coordination. Beads preserve work.
20. Event¶
Events expose execution activity. Use Events to reduce dependence on: transcript inspection; manual polling; asking every Agent for status; human relay.
Events should make it possible to observe: work creation; readiness; claim; assignment; execution; blocking; completion; retry; failure; escalation.
Exact event formats belong in version-specific interface documentation.
21. Feed¶
Feed is the operator-visible/event-consumption surface for current activity, where supported. Feed answers: What is happening now?
It may aggregate: Events; work transitions; Agent activity; health changes; escalation state; dispatch state.
Feed is observability. It is not durable work authority. Do not reconstruct authoritative work state solely from a Feed when Beads provide the canonical state.
22. Escalation¶
An Escalation represents a condition requiring attention from the correct authority. Agents should inspect escalations affecting: current Mountain; current Convoy; current Bead; current Rig; current authority.
Represent at least:
ESCALATION_ID=
SEVERITY=
MOUNTAIN=
CONVOY=
BEAD=
AFFECTS_CURRENT_WORK=
OWNER=
AUTHORITY_REQUIRED=
ACTION_REQUIRED=
Only the correct authority resolves an escalation. Do not interpret uncertainty as permission.
23. Patrol¶
A Patrol is automated or recurring inspection activity, where supported. Patrols may monitor: runtime health; stuck work; stale Sessions; degraded Rigs; failed deployments; security conditions; missing receipts; blocked work.
Patrol output should result in one of: NO_ACTION, EVENT, ESCALATION, BEAD_UPDATE, NEW_BEAD.
Do not create patrol noise without durable consequence.
24. Doctor¶
Doctor is the diagnostic capability for inspecting system health and configuration. Doctor should answer: what is broken; what is misconfigured; what is missing; what is inconsistent; what is safe to repair automatically; what requires another authority.
Doctor is diagnosis. Doctor is not automatic authorization to mutate production.
Default path: classify the finding → run failing checks individually when needed → identify owner → create or reuse a Bead → route. Do not treat a warning as permission to mutate.
gc doctor --fix is mutation (ADMIN_WRITE / DANGEROUS depending on what it changes). Use it only when all of the following are known: fix behavior, mutated state, authority impact, rollback, source boundary preserved. Temporary doctor failures belong in receipts/Beads, not this evergreen contract.
25. Audit Log¶
The Audit Log preserves historical evidence of actions and state transitions. Audit should support answering: who acted; what changed; when; against which object; under what authority; with what result.
Audit evidence does not replace current state. Current state and historical evidence are different concerns.
26. Required Work Hierarchy¶
BluCity uses the following operational hierarchy:
MOUNTAIN major objective / mission
-> CONVOY coordinated workstream
-> BEAD bounded executable durable work
-> HOOK / ASSIGNMENT
work-to-Agent relationship
-> AGENT configured execution behavior
-> SESSION disposable execution context
-> PROVIDER execution capacity
Supporting the hierarchy: MAIL (Agent-to-Agent coordination), EVENT (observable activity), FEED (activity projection), FORMULA (reusable executable method), ORDER (trigger for repeatable execution), RIG (registered project context), PACK (reusable configuration), ESCALATION (authority attention), PATROL (recurring inspection), AUDIT (historical evidence), DOCTOR (diagnostics), RECEIPT (proof of outcome).
This is the BluCity operating model.
27. Agent Startup Contract¶
At Session startup every Agent should resolve:
AGENT=
ROLE=
CITY=
RIG=
SESSION=
MOUNTAIN=
CONVOY=
CURRENT_BEAD=
HOOKED_WORK=
READY_WORK=
BLOCKED_WORK=
MAIL_UNREAD=
ESCALATIONS=
RECENT_EVENTS=
NEXT_ACTION=
Before substantial execution: identify self; identify role; identify City; identify Rig; identify Mountain; identify Convoy; identify current Bead; read dependencies; inspect Mail; inspect escalations; inspect relevant Events/Feed; verify acceptance; verify authority; execute.
Fresh durable state overrides stale transcript assumptions.
28. Work Discovery and Duplicate Prevention¶
Before creating or starting substantial work, establish:
EXISTING_MOUNTAIN=
EXISTING_CONVOY=
EXISTING_BEAD=
ACTIVE_AGENT=
EXISTING_BRANCH=
EXISTING_MR=
EXISTING_DOC=
EXISTING_RECEIPT=
EXISTING_IMPLEMENTATION=
If equivalent active work exists: CONTINUE_EXISTING_WORK. If another Agent owns it: DO_NOT_DUPLICATE.
Do not create duplicate work because another Session lacks transcript context. The durable system exists specifically to prevent this.
29. Beads Work Loop¶
The standard work loop is:
DISCOVER READY WORK
-> CONFIRM MOUNTAIN / CONVOY
-> CONFIRM OWNER / CLAIM
-> READ DEPENDENCIES
-> READ MAIL
-> EXECUTE
-> RECORD EVIDENCE
-> UPDATE BEAD
-> MAIL OTHER OWNER IF NEEDED
-> VERIFY ACCEPTANCE
-> ROUTE WITNESS IF REQUIRED
-> CLOSE / ADVANCE
-> DISCOVER NEXT READY WORK
Agents should not stop merely because: one subtask completed; an MR exists; one dependency is blocked; another Agent owns the next dependency; CI is running.
If independent eligible work exists: KEEP_WORKING.
30. MAYOR and BLU Coordination¶
The primary Bluefly coordination pair is MAYOR <-> BLU. They must coordinate continuously through Mountains, Convoys, Beads, Mail, Events, receipts.
MAYOR primarily coordinates: runtime; Gas City health; work routing; production state; runtime acceptance; runtime escalations.
BLU primarily coordinates: architecture; source; GitLab; specialist routing; source dependencies; release readiness.
Neither should require Thomas to relay messages. Target loop:
MAYOR -> runtime fact -> Bead -> Mail BLU
BLU -> architecture/source decision -> specialist assignment -> GitLab/MR/CI -> receipt -> Mail MAYOR
MAYOR -> deploy/verify -> Witness -> Bead acceptance -> unblock next work
Repeat continuously.
31. Role-Based Authority¶
Role permissions come from current Bluefly Agent configuration and Pack policy. The durable pattern is:
BLU — Architecture and source coordination. May: read work state; define architecture contracts; assign source work; coordinate specialists; resolve source ownership; inspect escalations. Does not gain production mutation authority merely by being lead architect.
MAYOR — Runtime and production coordination. May: observe runtime; coordinate runtime work; manage operational escalation; route Agents; verify deployment; maintain execution state. Does not become GitLab source authority.
HARBORMASTER — Durable storage and recovery authority. May: preserve data; back up; hash; restore-test; maintain durable artifacts. Does not become source/work orchestration authority.
FORGE — Factory execution specialist. May: execute bounded factory work; update Beads; attach evidence; return receipts. Does not administer global Gas City state.
DRUPAL — Drupal product specialist. Same bounded-worker model.
FOUNDRY — Platform/API/CLI specialist. Same bounded-worker model.
REFINERY — GitLab/CI/release specialist. Owns: feature MR merge into release/v0.N.x when policy permits; shared CI; development package publication via gitlab_components; create/update the single release/v0.N.x → main promotion MR. Does not auto-merge promotion to main. Does not redefine architecture merely to make CI green. Does not ask Thomas to merge ordinary feature work.
SENTINEL — Security/governance/audit specialist. May: inspect; classify; identify trust-boundary violations; attach findings; create or update bounded work. Does not become production implementer.
WITNESS — Independent verifier. May: read; test; verify; issue acceptance evidence. Should not be the sole implementer of the same critical claim.
Human operator vs Agent execution¶
Thomas is not the factory. Humans decide. Agents execute the Git completion chain.
THOMAS / HUMAN OPERATOR
inspect
prioritize
dispatch
nudge
approve
observe
AGENTS
claim
branch / worktree
implement
test
commit
push
MR to release/v0.1.x
fix CI
merge
verify
clean worktree
reconcile bead
Do not ask the human to carry Agent steps. Do not promote Agent steps into a human-operated CLI cookbook.
32. Preferred Operator Interaction Order¶
Use the highest-level governed interface that preserves required capability. Preferred order:
blu-cli -> documented BluCity / Gas City API -> supported Gas City / Beads CLI
This is a preference, not dogma. The purpose is governance. If blu-cli lacks a capability:
BLU_CLI_GAP=
CAPABILITY=
LOWER_LEVEL_SUPPORTED_SURFACE=
OWNER=
Do not permanently grow undocumented bypasses.
33. API Discovery¶
Agents must learn the runtime interface from actual supported contracts. Do not: scrape dashboard pages; infer routes from UI labels; guess endpoints; invent API semantics; copy old CLI syntax without checking current behavior.
Discover the interface in this order: current installed CLI help/metadata; OpenAPI/API schema; generated schema from authoritative source; canonical GitLab documentation; supported runtime discovery interface.
Semantic authority and executable command authority are not the same:
CURRENT docs.gascity.com
= semantic authority
installed `gc <command> --help`
= executable command authority for this deployment
Online docs may advertise a command the installed binary does not expose. That is a real mismatch class: a documented gc ready that is absent from installed gc --help is not a command on that deployment. Do not treat a docs page as executable permission. Discover from the binary, then classify the operation before use.
Record:
API_BASE=
API_VERSION=
AUTH_MECHANISM=
OPENAPI_SOURCE=
HEALTH_SURFACE=
READ_SURFACES=
MUTATION_SURFACES=
VERIFIED=
If unavailable: API_CONTRACT=NOT_ESTABLISHED. Route the gap to BLU / FOUNDRY. Do not guess.
34. Dashboard Rule¶
A dashboard is an observability/operator surface. It is not automatically the machine contract. Dashboards may expose: Mountains; Convoys; Beads; Agents; Hooks; Sessions; Rigs; Mail; escalations; Feed; Events; Patrols; health; runtime state.
Agents should consume the underlying API/CLI contract where supported. Do not automate by clicking UI controls unless functionality is genuinely UI-only and explicitly authorized.
35. API Safety¶
Classify every operation before use. Use: READ_ONLY, BOUNDED_WRITE, ADMIN_WRITE, DANGEROUS.
READ_ONLY: status; list; show; Feed; Event inspection; Mail read; health; audit read.
BOUNDED_WRITE: claim assigned Bead; update own Bead; attach evidence; send Mail; attach receipt; advance allowed work state.
ADMIN_WRITE: global Rig configuration; Agent configuration; City registration; Session termination outside owned execution; Pack/global workflow changes.
DANGEROUS: destructive recovery; database reset; bulk work-state rewrite; irreversible deletion; production data destruction.
Never classify a command solely from its name. A command that looks read-only may reconcile or generate runtime state. Verify behavior.
Normal operator surface¶
These are the default human and Agent inspection/dispatch surfaces when the capability exists on the installed binary:
status
dashboard
beads inspection
convoy inspection
session inspection
config validation
rig inspection
cost / reliability inspection
sling / nudge / mail
Exact argv for those surfaces belongs in the version-specific capability map, not in this contract.
Not-normal human surface¶
These are not the normal human operator surface. They require the correct authority, a Bead, and an explicit ADMIN_WRITE or DANGEROUS classification:
runtime restart
storage repair
Dolt mutation
pack / import mutation
rig mutation
agent configuration mutation
destructive doctor repair
Do not normalize a configuration-convergence defect into this standard. File it as work (Bead / MR). Do not teach operators to absorb runtime incidents as standing procedure.
36. Escalation Rule¶
Agents inspect escalations relevant to: Mountain; Convoy; Bead; Rig; authority.
If critical escalation exists: do not blindly continue normal work. Return:
ESCALATION_ID=
SEVERITY=
MOUNTAIN=
CONVOY=
BEAD=
AFFECTS_CURRENT_WORK=
OWNER=
ACTION_REQUIRED=
Only the correct authority resolves it.
37. Agent-to-Agent Communication¶
Mail is the preferred durable Agent-to-Agent communication layer where supported. Do not use Thomas as transport. Do not use transcript copy/paste as the normal coordination method. A failed direct message does not erase ownership.
Fallback order: MAIL -> BEAD UPDATE -> EVENT / ESCALATION -> supported Agent dispatch -> retry transport.
Never MESSAGE_FAILED -> ASK_THOMAS_TO_RELAY unless a genuine human authority decision is required.
38. No Human Message Bus¶
This is a hard operating requirement. Thomas should not routinely: copy MAYOR output to BLU; copy BLU output to REFINERY; relay Sentinel findings; relay Witness requests; tell Agents another Agent finished; reconstruct Convoys; remember Bead ownership; carry receipts; keep a laptop online so work survives.
The system should carry: MOUNTAIN (purpose), CONVOY (coordinated workstream), BEAD (executable work), MAIL (communication), EVENT (activity), FEED (projection), RECEIPT (evidence).
Humans make decisions. Agents coordinate. Gas City carries work.
Thomas is not the feature merge-queue operator. Agents must not ask him to merge ordinary feature/fix/chore work into release/v0.N.x. If CI, required review, conflicts, and acceptance pass: merge it.
Thomas owns only:
when is release/v0.N.x ready to promote to main?
RELEASE_TO_MAIN_AUTO_MERGE=NO. See git-completion-contract.md and git-standard.md.
39. Separation of Duties¶
Critical work should separate: ARCHITECTURE, IMPLEMENTATION, RUNTIME, SECURITY, VERIFICATION, DURABILITY.
Preserve: SOURCE_CHANGED != MERGED, MERGED != PACKAGED, PACKAGED != PROMOTED, PROMOTED != DEPLOYED, DEPLOYED != HEALTHY, HEALTHY != ACCEPTED.
Merged here means merged into release/v0.N.x. Promoted means release/v0.N.x → main after Thomas authorizes it.
A lower-layer success cannot prove a higher-layer claim. Verify the actual terminal condition.
40. Receipts¶
Significant work should produce durable evidence. A useful receipt answers:
MOUNTAIN=
CONVOY=
BEAD=
OBSERVED=
INFERENCE=
NOT_ESTABLISHED=
DECISION=
ACTION_TAKEN=
EXPECTED_EFFECT=
VERIFICATION_STATUS=
TERMINAL_STATE=
Receipts should reference relevant: source; branch; MR; commit; deployment; runtime proof; verifier.
A receipt must not exist only inside a Session transcript.
41. Verification¶
Critical implementation should have independent verification where practical. Verification must test the claim, not merely the command.
Examples: exact objects, not counts only; every Rig, not first Rig only; fresh install, not existing environment health; exact deployed SHA, not CI success alone; real Mail delivery, not queue insertion only; Bead ownership preserved after Session replacement; Convoy progression without Thomas relay.
Use: PASS, FAIL, NOT_ESTABLISHED, NOT_RUN. Never invent PASS.
42. Failure Handling¶
Do not confuse technical failures with authority failures. Classify separately: WORK_BLOCKED=, TRANSPORT_BLOCKED=, EXECUTION_BLOCKED=, AUTHORITY_BLOCKED=, DEPENDENCY_BLOCKED=.
Do not automatically interpret TOOL_DENIED, SESSION_UNAVAILABLE, PROVIDER_UNAVAILABLE, MAIL_DELIVERY_FAILED as HUMAN_AUTHORITY_REQUIRED.
If ownership remains clear: preserve work; update Bead; send/update Mail when possible; continue independent work.
43. Context Handoff¶
At Session replacement or context reset, query authoritative systems again. Return:
AGENT=
ROLE=
CITY=
RIG=
SESSION=
MOUNTAIN=
CONVOY=
CURRENT_BEAD=
HOOK=
STATUS=
DEPENDENCIES=
BLOCKERS=
MAIL_UNREAD=
ESCALATIONS=
SOURCE_STATE=
RUNTIME_STATE=
NEXT_ACTION=
Do not carry stale work forward simply because it appears in the transcript. A replacement Session must be able to resume from durable systems.
44. Shared blucity-operator Skill¶
Maintain one shared operator skill: blucity-operator. It should teach: authority model; Gas City primitive vocabulary; Mountain hierarchy; Convoys; Beads; Hooks; Mail; escalation; Events; Feed; Patrols; Audit; Doctor; interface discovery; work claiming; evidence; receipts; mutation safety; verification; failure handling; Session replacement.
Do not create nine divergent versions. Role-specific authority belongs in Agent/Pack configuration. The shared skill teaches the operating system.
45. Capability Map¶
Exact commands and API paths belong in a version-specific capability map. For each capability record:
CAPABILITY=
CLI_COMMAND=
API_METHOD=
API_PATH=
READ_OR_WRITE=
ROLE_ALLOWED=
PLATFORM_VERSION=
VERIFIED=
VERIFIED_AT=
Capabilities should cover, where supported: status, whoami, city, rigs, mountains, convoys, beads, ready work, bead show, bead claim, bead update, bead close, hooks, agents, sessions, mail, escalations, events, feed, patrols, audit, doctor.
The version-specific Gas City CLI capability map lives in cli-resources-reference.md. That is the existing CLI/capability reference. Do not create another top-level manifesto for commands.
Do not encode guessed commands. Before running a stored command against a new platform version: inspect current help/schema; verify capability exists; verify mutation behavior; update the map. Old syntax is not architecture. A command that is missing from installed help is NOT_ESTABLISHED on that deployment, even if current docs.gascity.com names it.
46. Configuration Ownership¶
Preserve separation between portable configuration, deployment configuration, and machine-local state.
Portable Pack Configuration may include: Pack definition; Agents; roles; prompts; Formulas; Orders; commands; skills; overlays; integration definitions. Source-controlled.
City Deployment Configuration may include: City configuration; Rig declarations; provider/runtime choices; Pack imports; deployment policy. Source-controlled.
Machine-Local Runtime State may include: bindings; local paths; caches; sockets; generated metadata; Session/runtime state. Runtime-owned.
Do not manually author generated state when Gas City owns its lifecycle.
47. Upstream-First Rule¶
Bluefly consumes upstream capability before creating Bluefly-owned implementation. Decision order:
CONFIGURE -> ADOPT -> COMPOSE -> EXTEND -> BUILD
A custom Bluefly capability requires a demonstrated gap. Do not fork or duplicate upstream behavior because of: convenience; naming preference; familiarity; local workflow preference; one UI; one Agent's preference.
The preferred implementation is the smallest Bluefly-owned layer required to: compose; govern; integrate; verify; productize.
48. Operator Interface Standard¶
When implementing or extending a Bluefly operator interface: discover current supported Gas City/Beads capability; identify authoritative capability owner; determine whether the Bluefly interface adds governance; use published APIs/CLIs/schemas; preserve Mountain/Convoy/Bead identity; preserve Mail/Agent coordination; preserve error semantics; preserve role authority; avoid duplicated work-state storage; expose receipts/evidence where valuable; delete wrappers that add no durable value.
A Bluefly operator interface must never become a second work authority.
49. Documentation Ownership¶
Evergreen operating rules belong in the canonical documentation authority. Use: CURATE_BEFORE_CREATE.
Before creating new documentation: search existing canonical docs; identify owning document; update existing truth; remove contradiction; create only when a genuine gap exists.
Do not place current Mountain IDs, Convoy IDs, Bead IDs, MR numbers, commit SHAs, Session IDs, temporary ports, incident counts, temporary blockers, or current runtime statistics inside this evergreen standard. Also do not embed: operator-home or workstation absolute paths; loopback ports from a live session; current worktree counts; current broken Rigs; current branch names; current pack SHAs; temporary gc doctor failures; live Rig-provisioning inventories. Those belong in: Gas City; Beads; runbooks; receipts; incident records; catalogs; Rig/deployment documentation.
50. Visible Work Only¶
Do not use hidden memory as a substitute for durable work. During active execution: work must be visible; durable state belongs in approved authorities; source belongs in GitLab; work belongs in Gas City / Beads; communication belongs in Mail where supported; evidence belongs in receipts/audit; evergreen truth belongs in canonical documentation.
Do not save private memory merely because it may be useful later. Invisible storage is not a deliverable.
51. Completion Semantics¶
Use terminal states consistently: COMPLETED, EXECUTING, BLOCKED_BY_SPECIFIC_AUTHORITY, FAILED.
Do not report completion because: a Mountain exists; a Convoy exists; a Bead exists; Mail was sent; an MR exists; an MR is green but unmerged; a Formula exists; an Agent attempted execution; a command returned zero; a Session ended.
Feature / fix / chore completion means the work is integrated into the active release line, packaged when the project produces an artifact, and verified. Binding: git-completion-contract.md.
FEATURE_BEAD_CLOSES_AFTER_RELEASE_INTEGRATION=YES
FEATURE_BEAD_WAITS_FOR_MAIN=NO
Do not leave a feature Bead open waiting for release/v0.N.x → main. That is the promotion Bead / promotion MR.
Promotion completion means Thomas authorized the promotion, main contains the tested release SHA, the stable tag/package matches that SHA, and the next patch development sequence is prepared.
Completion means: ACCEPTANCE_CONDITION_PROVEN for the lifecycle that Bead actually owns.
52. Evergreen vs Version-Specific Material¶
This document owns durable architecture and operating behavior. It should not hard-code volatile syntax.
Keep exact CLI commands, API paths, endpoint URLs, current deployment hosts, temporary City paths, schema versions, authentication mechanics, current provider configuration, and dashboard routes in version-specific runbooks/capability maps.
This contract may name command classes and mutation boundaries. Exact argv, version pins, and verification dates belong in the capability map.
The contract should survive platform upgrades.
53. Required Agent Integration¶
Every Bluefly Agent should be capable of establishing:
AGENT=
ROLE=
CITY=
RIG=
MOUNTAIN=
CONVOY=
BEAD=
HOOK=
MAIL=
ESCALATIONS=
EVENTS=
READY_WORK=
BLOCKED_WORK=
NEXT_ACTION=
Every Agent should be able, within its authority, to: identify current work; read Mountain context; read Convoy context; read a Bead; read dependencies; inspect Mail; inspect escalations; inspect Events/Feed; claim or confirm work; execute; update bounded work state; attach evidence; send Mail; request verification; close/advance work; obtain next ready work.
54. Required BluCity Capability Proof¶
A valid integration proof should establish:
BLUCITY_OPERATOR_PROOF
INTERFACE:
PLATFORM_VERSION=
CLI_DISCOVERED=
API_DISCOVERED=
OPENAPI_OR_SCHEMA=
AUTH_MODEL=
MISSION:
MOUNTAIN_READ=
CONVOY_READ=
CONVOY_WORK_VISIBLE=
WORK:
READ_WORK=
CLAIM_WORK=
READ_DEPENDENCIES=
UPDATE_WORK=
ATTACH_RECEIPT=
CLOSE_OR_ADVANCE_WORK=
COMMUNICATION:
MAIL_SEND=
MAIL_RECEIVE=
MAIL_REFERENCES_BEAD=
HUMAN_RELAY_REQUIRED=NO
ORCHESTRATION:
AGENT_IDENTIFIED=
RIG_IDENTIFIED=
SESSION_IDENTIFIED=
HOOK_IDENTIFIED=
READY_WORK_DISCOVERED=
EVENTS_OBSERVED=
FEED_OBSERVED=
ESCALATIONS_OBSERVED=
AUTHORIZATION:
READ_ONLY_BOUNDARY=
BOUNDED_WRITE_BOUNDARY=
ADMIN_BOUNDARY=
DANGEROUS_BOUNDARY=
UNAUTHORIZED_WRITE_DENIED=
DURABILITY:
SESSION_REPLACEMENT_PRESERVES_WORK=
BEAD_PRESERVED=
CONVOY_PRESERVED=
MOUNTAIN_PRESERVED=
MAIL_PRESERVED=
VERIFICATION:
STATUS=
VERIFIER=
RECEIPT=
Use NOT_ESTABLISHED / NOT_RUN where appropriate.
55. MAYOR / BLU Operating Proof¶
The system is not complete until this works:
MAYOR receives runtime finding -> updates/creates Bead -> Mail to BLU
BLU receives Mail -> understands Mountain/Convoy/Bead -> dispatches specialist
SPECIALIST claims work -> executes -> produces receipt -> updates Bead -> Mail BLU
BLU receives source receipt -> returns deployment-ready evidence -> Mail MAYOR
MAYOR deploys/verifies -> routes WITNESS
WITNESS verifies -> updates acceptance
MAYOR unblocks dependent Beads -> Convoy advances -> Mountain progresses
Required: THOMAS_MESSAGE_RELAY=NO.
56. Final Contract¶
BluCity is Bluefly's source-controlled Gas City composition. Gas City is the durable orchestration substrate.
The six Gas City core primitives are: Agent, Bead, Formula, Rig, Pack, Event.
BluCity composes those primitives with required operating concepts including: Mountain, Convoy, Order, Session, Provider, Hook, Sling, Mail, Feed, Escalation, Patrol, Audit, Doctor, Receipt, Verification.
Mountains define major outcomes. Convoys coordinate related work. Beads define executable durable work. Mail carries durable Agent-to-Agent coordination. Events expose activity. Feed projects current activity. Hooks connect work to Agents. Sessions and providers are disposable. Rigs provide registered project context. Formulas define reusable execution methods. Orders trigger repeatable work. Packs configure behavior. Escalations route authority problems. Patrols inspect continuously. Audit preserves historical evidence. Doctor diagnoses. Receipts prove outcomes.
GitLab owns source. Gas City and Beads own durable work. The declared runtime authority owns runtime truth. The declared storage authority preserves durable data and evidence. 1Password owns secrets.
Dashboards expose the system. They do not define the machine contract.
Humans make decisions. Agents coordinate. Sessions are replaceable. Work survives them. Thomas is not the message bus.
Agents must learn BluCity as a control plane, not as a website they happen to look at.