The fleet

Four resident agents live in this process, eighteen remote agents do not, and every one of them is reached through the same brief-and-answer interface.

Mushegh, the head

M.U.S.H.E.G.H. is the orchestrator. He plans, decomposes and delegates, decides what matters now, and sends out work that is already scoped and professionally explained. He is the live copilot and he manages the owner's day-to-day.

He is self-hosted. A Python brain holds the reasoning; device-side edge processes supply the audio and the laptop operations; a separate private gateway serves the React HUD and the iPhone voice route.

His own job is not development. Everything development goes to Bagadata: code, frontend, backend, database, engineering of every kind.

Bagadata, the development agent

Bagadata receives a brief that is already scoped, and his job is to make it bigger and more precise rather than to re-scope it. The expansion is his own and it is a proposal to the room, not a set of orders: the perspectives that must be covered, the acceptance criteria implied by each, the stack questions and the definition of done.

He then runs a room in which the seats argue with each other about the implementation plan, the steps, the tech stack, what is definitive, how progress is checked, how the tests run, and how the app looks from the owner's side, which is completeness, and from the user's side, which is comfort and smoothness. The conversation is multi-round and the seats see each other, so a disagreement becomes observable instead of being averaged away.

What the room settles becomes a master plan; what it disputes is recorded rather than smoothed away, because a plan that hides a dispute is a plan that hides a risk. He then gives each step to a seat, choosing by capability and by how close that seat's own opinion in the room was to the step's core idea, and the reason is written into the plan so the owner can disagree with it. He follows through: each step is executed and verified, and a step that fails is re-instructed with what actually went wrong, up to a round budget. He is the senior; the seats are typed by role rather than by tier.

His implementation lives in fleet/Bagadata/bagadata/. The old import paths in the brain are thin re-export shims kept so that a hundred working call sites did not break when the code moved house.

Hasan-Jalal, the authorisation plane

Hasan-Jalal is the full-time security employee, and he is the only agent that works 24/7 regardless of what happens. He decides whether an action is allowed before it happens, for every actor including Mushegh himself.

He tracks everything his hands can reach: any file, any process, any task, any function. He answers two kinds of request. A state question, what is the state of something, is answered from what he can actually see, and what he cannot see is said plainly rather than guessed at. A concern, I am worried about something, is answered with the ways it could go wrong and a standing security checklist, so the decision can be made with the risks written down.

His rule table holds 96 rules over 8 actors and 12 categories, keyed on an exact actor and category pair. His implementation lives in fleet/Hasan-Jalal/hasan_jalal/, and the brain keeps a shim at the old path.

Hugh, custody of the physical house

Hugh holds the physical house. His interlock is checked at the actuator, and the authorisation plane is the second opinion that agrees with it. A request above a declared ceiling is refused rather than trusted, and the refusal happens at the actuator even when the authorisation was valid.

The E-Stop cannot be cleared in software: no reset, no override, no administrative path. Only a device layer that physically observed a control can mint the reset, so a tripped E-Stop stays tripped until a person clears it.

Hugh is also a chess coach backed by Stockfish. The engine decides the move and the interlock holds the wall: a refusal at the interlock is a refusal whatever the engine said, and the engine has no privileged path to the arm. His implementation lives in fleet/Hugh/, with the interlock in fleet/Hugh/hugh/interlock.py and the coach in fleet/Hugh/chess.py.

Artaxias, the protocol desk

Artaxias owns the protocol desk. Seventy-four protocols are registered: eight authored routines and sixty-six maintenance probes. The maintenance family is read-only by default, and the two families are merged into the same registry, so every protocol resolves by name, by index and by codename through one resolver, is gated by the same password challenge and is audited the same way. A protocol on a parallel path would be a protocol with a different door.

The maintenance family covers update checks for every council seat, fleet agent versions, toolchain drift, health and reachability, integrity, configuration hygiene, the owner's machine and the protocol desk's own health. His implementation lives in fleet/Artaxias/artaxias/.

The council of twenty seats

The council is twenty seats with declared roles: implementers, reviewers, designers, a visual seat, a planner and a researcher. The table lives in fleet/Bagadata/bagadata/council19.py; src/mushegh/brain/council19.py is a thin re-export shim, which is why the module name is older than the seat count.

Each row carries its own measured state. Fifteen seats are measured, three are installed but cannot be driven unattended, and two cannot be installed on this host at all. The table records the reason for each rather than dropping the row, because a table that silently omits something the owner asked for reads as if it had been considered and rejected.

Credentials are scoped per provider. A seat receives the base process variables plus only the names its own provider declares, and never another seat's key. The values themselves resolve environment first, then Infisical, then age, and the module reads the environment rather than reaching for a secrets backend of its own.

A seat's argument shape is verified against that seat's own CLI: the top-level help and the subcommand's help, because a probe that reads only the top level cries wolf. A seat whose binary is not installed is reported rather than failed. Two rows once claimed flags their own help never showed, and both would have failed on their first real seating.

Three transports, one interface

The local transport reaches the four residents in this process. The agents are Python packages imported in-process, so the handoff costs a function call and loses nothing to serialisation, and the roster gained a third transport kind for them.

The a2a transport reaches nine agents on the OpenClaw gateway, over Agent2Agent JSON-RPC. Each is addressed as a peer name that is derived rather than configured, because a mismatch is a 401 rather than a misroute, and a misrouted brief is how a legal question reaches the media agent.

The hermes transport reaches nine Hermes profiles, which publish no A2A server. They are reached with the one-shot CLI against the profile home that holds that agent's charter, which is what selects the agent. The launcher is pinned rather than taken from PATH, because the one on PATH is a setup wrapper that dies when it cannot find its bootstrap interpreter.

The transports stay in the brain. The connectors in fleet/connectors/ are the fleet's view of them: which agents each one reaches, what it needs and what it refuses to do. A connector that re-implemented the endpoint would mean two places that read a credential and assemble a brief, and the one that disagreed silently would be the one that misdelivered the brief.

The rule every one of them keeps

A connector or a resident puts a brief to an agent and returns an answer. None of them retries a failed brief silently, falls back to a different agent, or returns an empty string as though it were an answer. An unreachable agent raises.

That is why a council can never weigh a refusal as an opinion, and it is the same rule the residents keep, which is the point of having one fleet rather than four conventions. It also means the roster is the single place where a failure is reported.

The residents

Four agents live in this process. Each has its own folder, its own package and its own code; the brain keeps a thin re-export shim at the old import path so that existing callers did not break when the code moved house.

AgentJobFolder
BagadataThe development agentfleet/Bagadata/
Hasan-JalalThe authorisation plane, and the 24/7 watchfleet/Hasan-Jalal/
HughCustody of the housefleet/Hugh/
ArtaxiasThe protocol deskfleet/Artaxias/

Three transports, one interface

Mushegh addresses every agent the same way, and the roster records which transport each one has rather than leaving a caller to keep a list.

TransportReachesHow
localThe four residents, in this process
Bagadata, Hasan-Jalal, Hugh and Artaxias are Python packages in this process, reached by an in-process call. It is the fastest transport there is and the only one that cannot lose context in serialisation, because there is no encoding step to lose it in.
src/mushegh/brain/agent_bridge.py
a2aNine agents on the OpenClaw gateway
Agent2Agent JSON-RPC. The peer name is derived rather than configured, because a mismatch is a 401 rather than a misroute, and a misrouted brief is how a legal question reaches the wrong desk.
src/mushegh/brain/a2a.py
hermesNine Hermes profiles
Hermes publishes no A2A server, so the honest transport is its one-shot CLI against the profile home holding that agent's charter. The launcher is pinned rather than taken from PATH, and no login shell is involved, so the brief is parsed once.
src/mushegh/brain/a2a.py

The connectors

The transports live in the brain, because that is where a credential is read and a brief is assembled. The fleet's view of them lives beside the residents: which agents each connector reaches, what it needs in order to be usable, and what it refuses to do. A connector that re-implemented the endpoint would mean two places assembling a brief, and the one that disagreed silently would be the one that misdelivered it.

ConnectorReachesImplementation
openclawThe nine A2A agents on the gatewayfleet/connectors/openclaw.py
hermesThe nine Hermes profiles, over their one-shot CLIfleet/connectors/hermes.py
rubenThe finance specialist, as a saved sessionfleet/connectors/ruben.py
The rule every one of them keeps. A connector or a resident puts a brief to an agent and returns an answer. None of them retries a failed brief silently, falls back to a different agent, or returns an empty string as though it were an answer. An unreachable agent raises. That is why a council can never weigh a refusal as an opinion.

Implementation sources

Repository paths below describe the implementation. They do not certify a running deployment or a configured external account.

  • fleet/README.md
  • fleet/Bagadata/bagadata/
  • fleet/Hasan-Jalal/hasan_jalal/
  • fleet/Hugh/hugh/
  • fleet/Artaxias/artaxias/
  • fleet/connectors/__init__.py
  • fleet/Bagadata/bagadata/pipeline.py
  • fleet/Hasan-Jalal/hasan_jalal/policy.py
  • fleet/Hugh/hugh/interlock.py
  • fleet/Artaxias/artaxias/protocols.py
  • fleet/Bagadata/PLAYBOOK-PROJECT.md
  • fleet/Bagadata/PLAYBOOK-PROMPTING.md

Agents and responsibilities · Architecture · Protocols · Security · Subsystem directory · Verification and known limits