Builds and manages structs in Structs — construction, the build-order decision, activation/deactivation, movement, defense assignment, stealth, and generator infusion. Use when building a struct, deciding what to build next, activating/deactivating, moving the Command Ship, setting defenders, enabling stealth, or infusing a generator. Build times range ~17 min (Command Ship) to ~6.4 hr (World Engine) at D=3.
---
title: "Building structs: construct and position"
meta_description: "Turn power headroom and charge into capability: extractors, refineries, generators, and combat structs. Includes the full struct catalog."
name: structs-building
description: Builds and manages structs in Structs — construction, the build-order decision, activation/deactivation, movement, defense assignment, stealth, and generator infusion. Use when building a struct, deciding what to build next, activating/deactivating, moving the Command Ship, setting defenders, enabling stealth, or infusing a generator. Build times range ~17 min (Command Ship) to ~6.4 hr (World Engine) at D=3.
level: core
domain: building
---
# Building structs: construct and position
Building turns **power headroom + charge** into capability: extractors/refineries (production), generators (power), and combat/defense structs. Alpha Matter funds *power/infusion/trade*, not the build tx itself. The mechanics are simple — initiate, prove the work, it auto-activates — so the skill that matters is **deciding what to build, in what order, with the power to run it.**
Conventions (TX_FLAGS, `--` rule, the `-D 3` PoW policy, the per-player charge bar, one-tx-at-a-time) are in [`conventions.md`](https://structs.ai/skills/conventions).
## When to use it
- You have power headroom (and Alpha to infuse if you need more capacity) and want more infrastructure or military.
- Starting out and need the first base (Command Ship → extractor → refinery → power).
- Adding defense (shields, defenders, PDC) ahead of a refine window or a threat.
- Repositioning the Command Ship, assigning defenders, or stealthing a unit.
- Converting Alpha to power via generator infusion.
## Decisions
**Build-order by phase (beginner default):**
1. **Command Ship** (if you don't have one online) — required for *all* planet ops and your raid shield. Build in fleet, not on the planet.
2. **Ore Extractor → Ore Refinery** — start the production pipeline ([`structs-production`](https://structs.ai/skills/structs-production/SKILL)).
3. **Power** — a Reactor infusion or a Field Generator so the above stays online ([`structs-energy`](https://structs.ai/skills/structs-energy/SKILL)).
4. **Defense before your first big refine** — at least one shield struct; keep the Command Ship online.
5. **Expand** — more defense (Ore Bunkers/OSGs are unlimited now), then military.
**Always pre-check power.** Initiate needs headroom for **BuildDraw only**; complete then applies **PassiveDraw** (sequential — not summed). For equal draws (all current types), peak = one draw, not 2×. Use `scripts/power-budget.sh [player-id] --type [struct-type-id]` to project PassiveDraw after activation. If it won't fit, raise capacity first or the struct will materialize but never come online.
**Advanced considerations**:
- **Defense scaling**: Orbital Shield Generator and Ore Bunker are **unlimited per player** — stack them (power permitting) to drive your planetary shield well past a single set. Everything else is 1 per player.
- **What to build to kill what**: the Battleship is the armour-piercing answer to Tanks and to armoured power generators; planetary structs are tough (6/8/10 HP). Match builds to the threat — see [`structs-combat`](https://structs.ai/skills/structs-combat/SKILL).
- Decisions live in [`playbooks/phases/early-game`](https://structs.ai/playbooks/phases/early-game) and [`playbooks/meta/economy-of-force`](https://structs.ai/playbooks/meta/economy-of-force).
## Procedure
1. **Pre-check** — player online (capacity covers load); BuildDraw headroom; valid open slot (0-3 per ambit, correct ambit for the type); for planet builds: Command Ship online and fleet `onStation`. Run `scripts/power-budget.sh` to confirm headroom.
2. **Initiate** (CLI prompts — review type, ambit, slot; builds cost charge + power, not Alpha). `[operating-ambit]` is a lowercase string `space`/`air`/`land`/`water`, not a bitmask:
```
structsd tx structs struct-build-initiate TX_FLAGS -- [player-id] [struct-type-id] [operating-ambit] [slot]
```
3. **Compute (expedition, auto-completes + auto-activates)** — this is the documented `-y` exception.
**Approval Block** — struct id matches the build; you have power headroom for it to auto-activate; you accept the auto-activation landing minutes-to-hours later even if state shifts.
```bash
nohup structsd tx structs struct-build-compute -D 3 --from [key] --gas auto --gas-adjustment 1.5 -y -- [struct-id] \
> memory/jobs/build-[struct-id].log 2>&1 & echo $! > memory/jobs/build-[struct-id].pid
```
4. **Then** move / set defense / stealth as needed (below). No separate activate step — build-complete auto-activates. `struct-activate` is only for re-activating something you deactivated.
`struct-build-compute` performs the PoW and auto-submits `struct-build-complete`; you only call `struct-build-complete` directly if you hashed externally.
## Struct catalog (the numbers that drive decisions)
Full table: [knowledge/entities/struct-types](https://structs.ai/knowledge/entities/struct-types). Key current values:
| Group | HP | Build limit / player | Notes |
|-------|----|----|-------|
| Command Ship | 6 | 1 | movable; required for planet ops; build in fleet |
| Other fleet combat (IDs 2-13) | 3 | unlimited | ambit-locked; Battleship primary is armour-piercing |
| Ore Extractor / Refinery | 6 | 1 each | the production pipeline |
| Orbital Shield Generator | 6 | **unlimited** | shield-only → stack it |
| Ore Bunker | 6 | **unlimited** | raises planetary shield (raid PoW); does **not** vault ore; `canDefend: false` |
| Jamming Satellite / PDC | 6 | 1 each | shield + active defense |
| Field Generator | 8 | 1 | `armour` (DR 1); 2 kW/g |
| Continental Power Plant | 10 | 1 | `armour` (DR 1); 5 kW/g |
| World Engine | 10 | 1 | `armour` (DR 1); 10 kW/g |
Charge costs (from your **per-player** bar): build-initiate 8, trash 8, activate 2, defense-change 1, Command Ship move 3, stealth activate 2. Deactivate (single or batch) is free and works even while offline. Full charge table and PoW decay times: [knowledge/mechanics/building](https://structs.ai/knowledge/mechanics/building).
### Build times (initiation → D=3 complete, ~6 s/block)
| Struct | Type ID | Build Diff | Wait to D=3 |
|--------|---------|-----------|-------------|
| Command Ship | 1 | 200 | ~17 min |
| Starfighter | 3 | 250 | ~20 min |
| Ore Extractor / Refinery | 14 / 15 | 700 | ~57 min |
| PDC | 19 | 2,880 | ~3.7 hr |
| Ore Bunker | 18 | 3,600 | ~4.6 hr |
| World Engine | 22 | 5,000 | ~6.4 hr |
**Initiate early, compute later** — the age clock starts at initiation, and difficulty decays from 64 (fresh, impossible) to 1 (aged, instant). Batch-initiate, then compute in the background once it has decayed. **One compute at a time per key** (two concurrent computes on the same key collide on sequence numbers — one fails silently). Different keys run in parallel. See [hashing.md — fresh vs aged anchor](https://structs.ai/knowledge/mechanics/hashing#worked-example-fresh-vs-aged-anchor).
## Manage existing structs
- **Move (Command Ship only — it's the one movable struct):** `struct-move TX_FLAGS -- [cmd-ship-id] [new-ambit] [new-slot] [new-location]`. The chain rejects `struct-move` on any other struct.
- **Defense assignment:** `struct-defense-set TX_FLAGS -- [defender-id] [protected-id]` / `struct-defense-clear TX_FLAGS -- [defender-id]` (1 charge). Only fleet types (`canDefend: true`) can be assigned.
- **Stealth (Stealth Bomber, Submersible):** `struct-stealth-activate` / `struct-stealth-deactivate` (2 charge to activate).
- **Deactivate / re-activate:** `struct-deactivate` frees its power (free, and works even while you're offline — a recovery lever); `struct-activate` brings it back (2 charge, requires you online). Deactivate many at once with `struct-deactivate-batch -- [id1,id2,...]` (up to 65). Taking an Extractor/Refinery offline halts your pipeline (Tier 1).
- **Trash (Tier 2, IRREVERSIBLE):** `struct-trash TX_FLAGS -- [struct-id]` permanently destroys a **built** struct you own to free its slot (costs 8 charge, same as building it). There is no undo and nothing is refunded. To abort an **unfinished** build instead, use `struct-build-cancel`.
- **Generator infuse (Tier 2, IRREVERSIBLE):** `struct-generator-infuse TX_FLAGS -- [struct-id] [amount]ualpha`. Alpha Matter is annihilated into energy — no defusion, and a raided generator takes the infused matter with it. Always escalate; confirm the generator's defense posture first. See [`structs-energy`](https://structs.ai/skills/structs-energy/SKILL).
## Commands reference
| Action | CLI Command |
|--------|-------------|
| Initiate | `structsd tx structs struct-build-initiate TX_FLAGS -- [player-id] [type-id] [ambit] [slot]` |
| Compute (PoW + complete + activate) | `structsd tx structs struct-build-compute -D 3 TX_FLAGS_APPROVED -- [struct-id]` |
| Complete (manual, rare) | `structsd tx structs struct-build-complete TX_FLAGS -- [struct-id] [proof] [nonce]` |
| Cancel | `structsd tx structs struct-build-cancel TX_FLAGS -- [struct-id]` |
| Activate / Deactivate | `structsd tx structs struct-activate \| struct-deactivate TX_FLAGS -- [struct-id]` |
| Deactivate (batch, ≤65) | `structsd tx structs struct-deactivate-batch TX_FLAGS -- [id1,id2,...]` |
| Trash (destroy built struct, IRREVERSIBLE) | `structsd tx structs struct-trash TX_FLAGS -- [struct-id]` |
| Move (CMD ship) | `structsd tx structs struct-move TX_FLAGS -- [cmd-ship-id] [ambit] [slot] [location]` |
| Defense set / clear | `structsd tx structs struct-defense-set \| struct-defense-clear TX_FLAGS -- [defender-id] [protected-id]` |
| Stealth on / off | `structsd tx structs struct-stealth-activate \| struct-stealth-deactivate TX_FLAGS -- [struct-id]` |
| Generator infuse (Tier 2) | `structsd tx structs struct-generator-infuse TX_FLAGS -- [struct-id] [amount]ualpha` |
`TX_FLAGS` / `TX_FLAGS_APPROVED` per [`conventions.md`](https://structs.ai/skills/conventions). **Requires** [`structsd`](https://structs.ai/skills/structsd-install/SKILL) on PATH and a signing key.
## Verification
- `structsd query structs struct [id]` — status Online (or Built/Offline if power-starved).
- Struct appears in the planet/fleet struct list.
- After generator infuse: player `capacity` rises; broadcast ≠ success, so query to confirm.
## Errors
| Error | Cause | Fix |
|-------|-------|-----|
| "required charge X but player had Y" | Per-player charge bar too low | Wait; space actions by their cost (see conventions) |
| "capacity_exceeded" / power errors | BuildDraw or PassiveDraw won't fit | Infuse / deactivate / wait ([structs-energy](https://structs.ai/skills/structs-energy/SKILL)) |
| "power overload" / won't go online | Capacity < load + draw | Raise capacity or deactivate something ([structs-energy](https://structs.ai/skills/structs-energy/SKILL)) |
| "fleet not on station" | Fleet away | Recall via `fleet-move` |
| "Command Ship required" | CMD ship offline/missing | Build or re-activate it first |
| "invalid slot" / "invalid ambit" | Slot taken or wrong ambit | Slots 0-3 per ambit; check the type's `possibleAmbit` |
## See also
- [knowledge/entities/struct-types](https://structs.ai/knowledge/entities/struct-types) — full catalog (HP, charge, limits, weapons)
- [knowledge/mechanics/building](https://structs.ai/knowledge/mechanics/building) — PoW decay, charge table
- [playbooks/phases/early-game](https://structs.ai/playbooks/phases/early-game) / [playbooks/meta/economy-of-force](https://structs.ai/playbooks/meta/economy-of-force) — build priorities
- [structs-energy](https://structs.ai/skills/structs-energy/SKILL) — power for builds; [structs-combat](https://structs.ai/skills/structs-combat/SKILL) — what to build vs threats
- [awareness/async-operations](https://structs.ai/awareness/async-operations) — background PoW
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit decision point branches for charge gating, power capacity failures, fleet dependency, command ship requirements, slot limits, generator infusion escalation, revenue struct deactivation, and concurrent compute job conflicts; structured inputs section with external dependency callouts; added outcome signal section with verifiable completion criteria; preserved all original safety tier requirements and cli command fidelity.
builds and manages structs across all lifecycle phases: construction, activation, deactivation, movement, defense assignment, stealth toggles, and generator infusion. use this skill when initiating a struct build, computing proof-of-work hashes, activating or deactivating structs, repositioning structs between slots, configuring defense pairings, toggling stealth mode, or infusing generators with alpha matter. build times range from ~17 minutes (command ship) to ~6.4 hours (world engine). this skill automates the compute-to-activation pipeline and handles the charge economy that gates all struct actions.
player context: player id, current alpha matter balance, charge accumulation rate (1 per block, ~6 sec/block), list of active structs and their ids.
planet/fleet context: planet id, fleet status and location, occupied struct slots (0-3 per ambit: space, air, land, water), command ship online status.
struct type data: struct type id, build difficulty, power draw, operating ambit support (bitmask), slot limit per player (command ship 1x, pdc 1x).
external dependencies: structsd binary on PATH, configured signing key in ~/.structs/config/client.toml, local or remote node accessible at port 26657 (or custom --node flag).
struct ids: all entity ids containing dashes (e.g., 1-42, 5-10) must be passed after -- to prevent cli parser misinterpretation as flags.
approval requirements (see safety.md): struct-build-initiate (tier 0 for cheap structs, tier 1 for long pow), struct-build-compute (tier 1 + expedition auto-activation), struct-generator-infuse (tier 2, irreversible), struct-deactivate of revenue-bearing structs (tier 1).
check requirements
structsd query structs player [player-id]structsd query structs planet [planet-id]structsd query structs struct [command-ship-id] returns status Onlinestructsd query fleet [fleet-id] returns location matching planetinitiate build (cli prompts for confirmation, review struct type, slot, ambit, alpha cost before confirming)
structsd tx structs struct-build-initiate --from [key-name] --gas auto --gas-adjustment 1.5 -- [player-id] [struct-type-id] [operating-ambit] [slot]approval block before compute (mandatory escalation for long-pow structs: ore bunker, pdc, world engine)
proof-of-work compute (runs async, auto-submits struct-build-complete with hash, auto-activates struct)
structsd tx structs struct-build-compute -D 3 --from [key-name] --gas auto --gas-adjustment 1.5 -y -- [struct-id]memory/jobs/[struct-id].pid for later recall with kill <pid> if neededoptional post-activation actions
structsd tx structs struct-move --from [key-name] --gas auto --gas-adjustment 1.5 -- [struct-id] [new-ambit] [new-slot] [new-location]structsd tx structs struct-defense-set --from [key-name] --gas auto --gas-adjustment 1.5 -- [defender-struct-id] [protected-struct-id]structsd tx structs struct-stealth-activate --from [key-name] --gas auto --gas-adjustment 1.5 -- [struct-id]if struct type has build difficulty > 2880 (pdc, ore bunker, world engine): require tier 1 + expedition approval before launching compute. these long-pow builds tie up compute resources for 3-6 hours and auto-activate with no user prompt on completion. confirm player understands the time commitment and auto-activation risk.
if player has insufficient charge (< 8 for build actions, < 1 for reactivations): wait ~48 seconds (8 blocks) for charge to accumulate. charge is a gating mechanism, not a resource cost. if player has zero charge, re-queue the action.
if power capacity is exceeded (struct auto-activates but load + power-draw > capacity): auto-activation will fail. check power capacity with structsd query structs player [player-id] before launching compute. if headroom is insufficient, deactivate non-essential structs first or escalate to structs-energy skill to increase capacity.
if fleet is not on station: planet builds require fleet presence. if fleet is away, either wait for fleet return or use fleet-move skill to recall fleet. until fleet is on station, struct-build-initiate will fail.
if command ship is offline or missing: all planet builds require command ship online. if command ship is deactivated, use struct-activate to re-activate it. if not yet built, build command ship (type id 1) first.
if struct slot is occupied: each ambit supports 0-3 slots. if all slots are full, move existing structs to other ambits or deactivate non-essential structs to free a slot.
if generator infusion is requested (tier 2, irreversible): always escalate, regardless of autonomy level. alpha matter is annihilated in the conversion. there is no defusion. if the generator is raided, the infused matter falls with it. confirm the generator's defense posture before infusing.
if deactivating a revenue-bearing struct (extractor, refinery): deactivation halts the resource pipeline. confirm player understands the impact on passive income. tier 1 escalation required.
if two concurrent compute jobs are launched with the same signing key: both jobs may reach target difficulty simultaneously and submit transactions with conflicting sequence numbers. one fails silently, leaving the struct stuck in build status. rule: one key, one compute at a time. use separate signing keys for separate players, and sequence compute jobs for the same player.
if connection to node fails (connection refused on port 26657): verify local node is running or configure remote node in ~/.structs/config/client.toml or use --node flag (see TOOLS.md).
struct-build-initiate: transaction hash returned. struct appears in player struct list with status "built" (offline). struct-id is returned in tx output. age clock initialized at block timestamp.
struct-build-compute: transaction hash returned. struct-build-complete is auto-submitted with hash results. struct transitions to status "online" (auto-activated). no separate activation step needed.
struct-activate (re-activation only): transaction hash returned. struct transitions from offline to online. re-activation consumes 1 charge (wait ~6 sec if charge is insufficient).
struct-deactivate: transaction hash returned. struct transitions from online to offline. charge cost: 1 (wait ~6 sec if charge is insufficient).
struct-move: transaction hash returned. struct relocates to new ambit, slot, and location. charge cost: 8 (wait ~48 sec if charge is insufficient).
struct-defense-set: transaction hash returned. defender-struct-id is now assigned to protect protected-struct-id. charge cost: 1 per change (wait ~6 sec if charge is insufficient).
struct-stealth-activate / struct-stealth-deactivate: transaction hash returned. struct enters or exits stealth mode (reduces visibility on scanner, blocks offensive actions while active).
struct-generator-infuse: transaction hash returned. alpha matter amount is annihilated and infused into generator. generator becomes raidable. infusion is irreversible. charge cost: varies by amount (see mechanics/building).
verification: structsd query structs struct [struct-id] returns struct object with status field (online, built, offline, destroyed). struct appears in planet or fleet struct list. all transactions appear in chain after block confirmation (~6 sec per block).
user confirms struct is online: structsd query structs struct [struct-id] returns status "online" or "built" (if not yet auto-activated, or if manually re-activated).
struct appears in planet struct list: structsd query structs planet [planet-id] includes struct-id in the response with correct ambit and slot.
build times align with table expectations: command ship ~17 min, starfighter ~20 min, ore extractor ~57 min, pdc ~3.7 hr, ore bunker ~4.6 hr, world engine ~6.4 hr (all measured from initiation to compute completion, assuming -D 3 and 6 sec/block).
charge accumulates after each action: player's charge balance increases by 1 per block (~6 sec) after each struct action.
long-pow compute runs silently in background: process id logged to memory/jobs/[struct-id].pid. user can verify with ps aux | grep structsd or check chain for struct-build-complete tx.
move, defense, and stealth actions complete within ~48 sec (move, defend change) or ~6 sec (stealth toggle, re-activation).
generator infusion is visible on-chain: struct-generator-infuse tx confirms matter annihilation and generator now shows infused status.
no conflicting sequence number errors: only one compute job per key at a time prevents silent failures.