Team operations across multiple players

Topic: Running multiple players (accounts) as one coordinated force Principle: Most per-player limits are not limits across players. Two accounts are not twice the work — they are twice the charge, twice the build slots, and a power-and-fire multiplier you cannot buy with a single account.


Why run more than one player

Many of the game’s hardest ceilings are per-player, and the chain rewards splitting work across accounts:

The cost is coordination and key hygiene. This playbook is how to get the multiplier without losing control (or your keys).


Setting up a team

Keys and accounts

Each player needs its own signing key. Derive them deterministically so you can recover the whole team from one seed:

One mnemonic → many independent players (supported pattern). Derive addresses at the Cosmos HD path m/44'/118'/0'/0/N (increment the final index N) and run the ordinary guild signup for each index. Each yields a fully independent on-chain player — its own planet, fleet, and inventory — all recoverable from the single seed. Index 0 is conventionally the primary. The chain imposes no link or cap between addresses derived from one seed (a large fleet can run entirely this way). After each signup, poll GET /structs/address/{address} (shape {address, playerId, permissions}) until playerId is assigned. See structs-onboarding.

Onboarding the team (proxy signup)

Bring each account onto the chain via the guild proxy flow (MsgGuildMembershipJoinProxy): sign GUILD{id}ADDRESS{addr}NONCE0, POST to the guild, poll /structs/address/{addr} for the player id. The flow is idempotent — re-running for an address that already joined returns resource_already_exists, which you treat as success (adopt the existing player), not a failure. So a team-onboarding loop can be safely retried. See structs-onboarding and integration-notes — Proxy signup.

Permissions and delegation

You do not need to expose every key’s full authority to coordinate them. Grant a low-trust worker key only the bits it needs:

This lets one orchestrator drive many players while keeping each grant minimal. See structs-permissions for the full delegation recipes.


Power sharing: substation-fed players

A team does not need every account to generate its own power. Concentrate generation and distribute capacity:

Watch the shared dependency: if the power player goes offline (load > capacity), every fed player can drop with it. Budget headroom and monitor the generator account first. See structs-energy for substations, allocations, and capacity budgeting.


Coordinated combat

Focus fire (the charge multiplier)

The decisive team tactic: concentrate many accounts’ attacks on one target in the same window. Because each player has its own charge bar, N strikers land N attacks per cycle on a single struct — collapsing an enemy Command Ship or generator far faster than any solo account, which is rate-limited to one attack per charge cycle.

Defensive coverage

Spread defenders across accounts and ambits. A built, online fleet struct (canDefend: true) can defend a teammate’s struct if co-located; planetary types cannot. Cross-ambit defenders still counter even when they can’t block. A team can blanket a key struct (a shared Command Ship, a refinery during its ore window) with counter coverage from every ambit at once. See combat.md — Assigning Defenders.

Raids as a team

When raiding, remember the raid is per-fleet and the attackerDefeated rule punishes a lost Command Ship while away. In a team raid, the striker fleets soften the defense and the raiding account completes the proof — but each raiding Command Ship must stay protected, or that fleet is defeated and sent home empty. Never send all Command Ships away at once: a fleet that leaves station strips its own planet’s shields until it returns.


Running a team through Structs Desktop

Everything above is executable with per-account structsd calls and a key per account. If you are running Structs Desktop, the structs_players MCP tool changes the setup cost enough to be worth knowing about: its virtual players are derived from the same mnemonic at different HD indices and joined to your guild with the guild fronting the join fee, so you need neither a new seed per account nor starting Alpha. MCP responses do not expose keys, but native sign modes let Rust custody the seed via the OS keychain and derive virtual-player keys per sign.

Command Use
roster / list Team overview: every player’s planet, fleet, struct count, resources
create {name, index?} Derive and register a new virtual player (next free HD index ≥ 1)
capacity How many more players the guild entry substation can actually power — check before creating
act {player, action, args} Act as one player, signed by its own key. PoW actions (mine/refine/raid) auto-complete
role {player, role} bait, productive, or raider
economy Planner: each productive player’s next step, mine → refine → send Alpha to primary → infuse reactor
profile List/show/fork/edit/assign behaviour profiles: loadout + capabilities + temperament + replication weight
variance Configure off / measured / human / wild choice variance; hard safety gates remain deterministic
infra Emits an exact infuse → allocate → substation → feed-pool sequence with dilution math (advisory; you execute it)
harvest / autobuild / autodefend / infuse Native economic loops
autoresponse / autoraid Native combat loops — defensive counter-fire and offensive target selection

All six loops can auto-sign once armed, but they are not the same decision. They stay off until enabled. Enabling an economic loop (harvest / autobuild / autodefend / infuse) is a Tier 1 standing grant under SAFETY.md — tell your commander it is running (briefing.md).

The two combat loops are Tier 2 at arming. autoresponse returns fire when you are raided; autoraid picks targets and raids them. Arming either with autonomy: auto commits your commander to machine-cadence combat. They default to autonomy: advise even after you enable them, so the honest sequence is: enable, inspect advice and the target board, populate the ally and protected vetoes, and only then discuss auto. advise is the evaluation gate. Never arm either one unasked.

The role split is a real strategic distinction, not a label. A productive player runs the flywheel and should be kept unraidable: shields up, ore refined promptly. A bait player deliberately lets ore pile up to draw raiders into your defended space. Because a raid can only ever take unrefined ore (see defense.md), a bait player’s maximum loss is bounded and known in advance — that is what makes the trade acceptable. The failure mode is a productive player drifting into accidental bait by leaving ore unrefined.

A raider profile is the expendable offensive arm. Current auto_raid dispatches players whose assigned profile grants the raids capability, never the primary; the legacy raider role maps to that built-in profile. Give one a refinery so seized ore can be converted before someone raids it back. Applied by hand, the rule is: never raid with the account you cannot afford to lose.

Team Ops command surfaces

Team Ops is organized as Command / Armada / Industry / War / Explore / System. Armada holds Roster, Squads, and Profiles; Industry holds Production/Infusions, Distribution, Work, Inventory, and Transactions; War holds tuning, targets, lists, incidents, and Live Raids. The customizable Terminal composes cards from these systems. Comms is Matrix-backed guild communication.

Fleet-wide sweeps and profile-weighted replication exist on the Team Ops/Tauri surface, not as new MCP tools. Replication admits births only within measured power/hash room and uses profile weights as a quota so the roster converges toward the desired mix. Autonomous rounds can deliberately birth fewer than the maximum available, while manual requests stay queued until room returns.

Industry’s Infusions controls are also Tauri/web-board handlers, not structs_players commands. They preview and gate infuse/defuse/migrate/cancel/restart actions against validator health, holder identity, and power headroom.

Before relying on a team defensively, run structs_intel {query:"raid_readiness", args:{only_gaps:true}}. It audits every possible Command-Ship ambit per roster fleet and classifies READY/PARTIAL/BLIND. During or after combat, use battle_log with category:"all" to include the full activity set, not only struct_attack.


Orchestration and safety


See Also