PARACOSM AGENTOS | API Reference v0.9.1035
Home Simulation API Docs GitHub npm
Home Simulation API Docs GitHub npm AgentOS Discord
paracosm - v0.9.1035
    Preparing search index...

    Class WorldModel

    A compiled, runnable world. Wraps a ScenarioPackage with convenience methods for simulating single leaders or running a batch.

    Construct via WorldModel.fromJson (compile from raw JSON) or WorldModel.fromScenario (wrap an already-compiled scenario, e.g. marsScenario).

    The underlying scenario is exposed via WorldModel.scenario as an escape hatch for callers that want the raw ScenarioPackage.

    import { WorldModel } from 'paracosm';
    import worldJson from './my-world.json' with { type: 'json' };

    const wm = await WorldModel.fromJson(worldJson, { provider: 'anthropic' });
    const artifact = await wm.simulate({ actor: leader, maxTurns: 6, seed: 42 });
    const wm = await WorldModel.fromJson(worldJson);
    const trunk = await wm.simulate({
    actor: visionary,
    maxTurns: 6, seed: 42, captureSnapshots: true,
    });
    const branch = await (await wm.forkFromArtifact(trunk, 3)).simulate({
    actor: pragmatist,
    maxTurns: 6,
    seed: 42,
    });
    // branch.metadata.forkedFrom === { parentRunId: trunk.metadata.runId, atTurn: 3 }
    import { marsScenario } from 'paracosm';
    import { WorldModel } from 'paracosm';

    const wm = WorldModel.fromScenario(marsScenario);
    const artifact = await wm.simulate({ actor: leader, maxTurns: 8 });
    Index
    • Run N leaders through this world in parallel via runBatch. scenarios is fixed to [this.scenario]; supply leaders, turns, seed, and any other BatchConfig fields.

      For N-scenarios-×-M-leaders sweeps that span multiple worlds, call runBatch directly with an explicit scenarios array.

      Parameters

      • options: WorldModelBatchOptions

      Returns Promise<BatchManifest>

    • Construct a new WorldModel positioned at the snapshot's turn. The new WorldModel has no prior run of its own; calling .simulate() on it resumes from the snapshot's kernel state, optionally with a different leader, seed, or custom events.

      metadata.forkedFrom on the subsequent .simulate() call's returned RunArtifact is set to { parentRunId: snapshot.parentRunId, atTurn: snapshot.kernel.turn }.

      The opts argument is accepted for API symmetry but not consumed at fork time; the caller passes opts.leader / opts.seed / opts.customEvents through to the subsequent .simulate() call directly. A future spec may fold this into a single-call API.

      Parameters

      Returns Promise<WorldModel>

      Error when snapshot.kernel.scenarioId !== this.scenario.id.

    • Convenience: pulls the kernel snapshot at atTurn from artifact.scenarioExtensions.kernelSnapshotsPerTurn (populated when the parent run was created with captureSnapshots: true) and calls WorldModel.fork with it.

      Parameters

      • artifact: {
            aborted?: boolean;
            assumptions?: string[];
            citations?: { context: string; doi?: string; text: string; url: string }[];
            cost?: {
                breakdown?: Record<string, number>;
                cachedReadTokens?: number;
                cacheSavingsUSD?: number;
                inputTokens?: number;
                llmCalls?: number;
                outputTokens?: number;
                totalUSD: number;
            };
            decisions?: {
                actor?: string;
                choice: string;
                outcome?: | "risky_success"
                | "risky_failure"
                | "conservative_success"
                | "conservative_failure";
                rationale?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[];
            disclaimer?: string;
            finalState?: {
                capacities?: Record<string, number>;
                environment?: Record<string, string | number | boolean>;
                metrics: Record<string, number>;
                politics?: Record<string, string | number | boolean>;
                scenarioExtensions?: Record<string, unknown>;
                statuses?: Record<string, string | boolean>;
            };
            finalSwarm?: {
                agents: {
                    age?: number;
                    agentId: string;
                    alive: boolean;
                    childrenIds?: string[];
                    department: string;
                    featured?: boolean;
                    generation?: number;
                    marsborn?: boolean;
                    mood?: string;
                    name: string;
                    partnerId?: string;
                    psychScore?: number;
                    rank?: "junior"
                    | "senior"
                    | "lead"
                    | "chief";
                    role: string;
                    shortTermMemory?: string[];
                }[];
                births?: number;
                deaths?: number;
                morale?: number;
                population: number;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
                turn: number;
            };
            fingerprint?: Record<string, string | number>;
            forgedTools?: {
                approved: boolean;
                confidence?: number;
                department?: string;
                description?: string;
                name: string;
            }[];
            intervention?: {
                adherenceProfile?: { expected: number; risks?: string[] };
                category?: string;
                description: string;
                duration?: { unit: string; value: number };
                id: string;
                mechanism?: string;
                name: string;
                scenarioExtensions?: Record<string, unknown>;
                targetBehaviors?: string[];
            };
            leveragePoints?: string[];
            metadata: {
                completedAt?: string;
                forkedFrom?: { atTurn: number; parentRunId: string };
                mode: "turn-loop" | "batch-trajectory" | "batch-point";
                runId: string;
                scenario: { id: string; name: string; version?: string };
                scenarioExtensions?: Record<string, unknown>;
                seed?: number;
                startedAt: string;
            };
            overview?: string;
            providerError?: | {
                actionUrl?: string;
                kind: "unknown"
                | "auth"
                | "quota"
                | "rate_limit"
                | "network";
                message: string;
                provider: string;
            }
            | null;
            riskFlags?: {
                detail: string;
                label: string;
                scenarioExtensions?: Record<string, unknown>;
                severity: "low" | "medium" | "high";
            }[];
            scenarioExtensions?: Record<string, unknown>;
            specialistNotes?: {
                confidence?: number;
                detail?: {
                    citations?: {
                        context: string;
                        doi?: string;
                        text: string;
                        url: string;
                    }[];
                    openQuestions?: string[];
                    opportunities?: {
                        description: string;
                        impact: "low"
                        | "medium"
                        | "high";
                    }[];
                    recommendedActions?: string[];
                    risks?: {
                        description: string;
                        severity: "low"
                        | "medium"
                        | "high"
                        | "critical";
                    }[];
                };
                domain: string;
                scenarioExtensions?: Record<string, unknown>;
                summary: string;
                trajectory?: "positive" | "negative" | "neutral" | "mixed";
            }[];
            subject?: {
                conditions?: string[];
                id: string;
                markers?: {
                    category?: string;
                    id: string;
                    interpretation?: string;
                    value?: string;
                }[];
                name: string;
                personality?: Record<string, number>;
                profile?: Record<string, unknown>;
                scenarioExtensions?: Record<string, unknown>;
                signals?: {
                    label: string;
                    recordedAt?: string;
                    unit?: string;
                    value: string | number;
                }[];
            };
            trajectory?: {
                points?: {
                    metrics: Record<string, number>;
                    scenarioExtensions?: Record<string, unknown>;
                    time: number;
                }[];
                timepoints?: {
                    confidence?: number;
                    highlightMetrics?: {
                        color?: string;
                        direction?: "up"
                        | "down"
                        | "stable";
                        label: string;
                        value: string;
                    }[];
                    label: string;
                    narrative?: string;
                    reasoning?: string;
                    scenarioExtensions?: Record<string, unknown>;
                    score?: { label: string; max: number; min: number; value: number };
                    time: number;
                    worldSnapshot?: {
                        capacities?: Record<string, number>;
                        environment?: Record<string, (...) | (...) | (...) | (...)>;
                        metrics: Record<string, number>;
                        politics?: Record<string, (...) | (...) | (...) | (...)>;
                        scenarioExtensions?: Record<string, unknown>;
                        statuses?: Record<string, (...) | (...) | (...)>;
                    };
                }[];
                timeUnit: { plural: string; singular: string };
            };
        }
        • Optionalaborted?: boolean
        • Optionalassumptions?: string[]

          Assumptions held true during the simulation.

        • Optionalcitations?: { context: string; doi?: string; text: string; url: string }[]
        • Optionalcost?: {
              breakdown?: Record<string, number>;
              cachedReadTokens?: number;
              cacheSavingsUSD?: number;
              inputTokens?: number;
              llmCalls?: number;
              outputTokens?: number;
              totalUSD: number;
          }
          • Optionalbreakdown?: Record<string, number>

            Per-site / per-model breakdown: { director: 0.12, departments: 0.34 }.

          • OptionalcachedReadTokens?: number
          • OptionalcacheSavingsUSD?: number
          • OptionalinputTokens?: number
          • OptionalllmCalls?: number
          • OptionaloutputTokens?: number
          • totalUSD: number
        • Optionaldecisions?: {
              actor?: string;
              choice: string;
              outcome?:
                  | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
              rationale?: string;
              reasoning?: string;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
          }[]

          Every decision made during the run — one per commander choice in turn-loop.

        • Optionaldisclaimer?: string

          Scenario-supplied disclaimer (digital-twin simulations use this for medical / professional caveats).

        • OptionalfinalState?: {
              capacities?: Record<string, number>;
              environment?: Record<string, string | number | boolean>;
              metrics: Record<string, number>;
              politics?: Record<string, string | number | boolean>;
              scenarioExtensions?: Record<string, unknown>;
              statuses?: Record<string, string | boolean>;
          }
          • Optionalcapacities?: Record<string, number>

            Capacity constraints: life support, housing, budget.

          • Optionalenvironment?: Record<string, string | number | boolean>

            Environmental conditions: weather, radiation, depth, altitude.

          • metrics: Record<string, number>

            Numeric gauges: food, power, population, morale, VO2max, whatever.

          • Optionalpolitics?: Record<string, string | number | boolean>

            Political/social pressures. Values may be numeric or categorical.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalstatuses?: Record<string, string | boolean>

            Categorical state: governance status, alignment, phase.

        • OptionalfinalSwarm?: {
              agents: {
                  age?: number;
                  agentId: string;
                  alive: boolean;
                  childrenIds?: string[];
                  department: string;
                  featured?: boolean;
                  generation?: number;
                  marsborn?: boolean;
                  mood?: string;
                  name: string;
                  partnerId?: string;
                  psychScore?: number;
                  rank?: "junior" | "senior" | "lead" | "chief";
                  role: string;
                  shortTermMemory?: string[];
              }[];
              births?: number;
              deaths?: number;
              morale?: number;
              population: number;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
              turn: number;
          }

          Final agent-swarm roster at end-of-run. Pairs with finalState: the world snapshot is the macro view (metrics, statuses), the swarm snapshot is the micro view (every agent's role, mood, family edges, memory). Populated in turn-loop runs that exercised the swarm. Use WorldModel.swarm() for the live equivalent during a run.

          • agents: {
                age?: number;
                agentId: string;
                alive: boolean;
                childrenIds?: string[];
                department: string;
                featured?: boolean;
                generation?: number;
                marsborn?: boolean;
                mood?: string;
                name: string;
                partnerId?: string;
                psychScore?: number;
                rank?: "junior" | "senior" | "lead" | "chief";
                role: string;
                shortTermMemory?: string[];
            }[]

            Every agent in the swarm at snapshot time, alive or dead.

          • Optionalbirths?: number

            Number of births this turn.

          • Optionaldeaths?: number

            Number of deaths this turn.

          • Optionalmorale?: number

            Aggregate morale 0..1 (population-weighted).

          • population: number

            Aggregate counts derived from agents.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • time: number

            Scenario time at snapshot (years/quarters/ticks per scenario).

          • turn: number

            Turn number this snapshot was taken at (0-indexed).

        • Optionalfingerprint?: Record<string, string | number>

          Loose classification scores. Paracosm heritage; scenarios may extend.

        • OptionalforgedTools?: {
              approved: boolean;
              confidence?: number;
              department?: string;
              description?: string;
              name: string;
          }[]
        • Optionalintervention?: {
              adherenceProfile?: { expected: number; risks?: string[] };
              category?: string;
              description: string;
              duration?: { unit: string; value: number };
              id: string;
              mechanism?: string;
              name: string;
              scenarioExtensions?: Record<string, unknown>;
              targetBehaviors?: string[];
          }

          Intervention being tested on the subject.

        • OptionalleveragePoints?: string[]

          Actionable leverage points for consumers of the artifact.

        • metadata: {
              completedAt?: string;
              forkedFrom?: { atTurn: number; parentRunId: string };
              mode: "turn-loop" | "batch-trajectory" | "batch-point";
              runId: string;
              scenario: { id: string; name: string; version?: string };
              scenarioExtensions?: Record<string, unknown>;
              seed?: number;
              startedAt: string;
          }

          Required. Identifies the run + scenario + mode.

          • OptionalcompletedAt?: string
          • OptionalforkedFrom?: { atTurn: number; parentRunId: string }

            When this run was produced by forking a prior run, records the parent run-id + the turn at which the fork happened. Consumers walking a fork chain follow this link transitively through stored artifacts. Omitted for fresh (non-forked) runs.

            Added in 0.7.x with the WorldModel.fork() API. Additive + optional; no COMPILE_SCHEMA_VERSION bump required.

          • mode: "turn-loop" | "batch-trajectory" | "batch-point"
          • runId: string

            Unique identifier for this run. UUID, slug, or host-assigned id.

          • scenario: { id: string; name: string; version?: string }
            • id: string
            • name: string
            • Optionalversion?: string

              Scenario version; not artifact version. Optional.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalseed?: number

            Absent for non-deterministic runs (LLM-only synthesis without a seeded kernel).

          • startedAt: string
        • Optionaloverview?: string

          Short headline summary. Digital-twin overview, paracosm verdict's summary, a game's end-of-run narrator line.

        • OptionalproviderError?:
              | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null
        • OptionalriskFlags?: {
              detail: string;
              label: string;
              scenarioExtensions?: Record<string, unknown>;
              severity: "low" | "medium" | "high";
          }[]

          Risk callouts. Maps to digital-twin risk_flags after camelCase rename.

        • OptionalscenarioExtensions?: Record<string, unknown>
        • OptionalspecialistNotes?: {
              confidence?: number;
              detail?: {
                  citations?: {
                      context: string;
                      doi?: string;
                      text: string;
                      url: string;
                  }[];
                  openQuestions?: string[];
                  opportunities?: { description: string; impact: "low"
                  | "medium"
                  | "high" }[];
                  recommendedActions?: string[];
                  risks?: {
                      description: string;
                      severity: "low" | "medium" | "high" | "critical";
                  }[];
              };
              domain: string;
              scenarioExtensions?: Record<string, unknown>;
              summary: string;
              trajectory?: "positive" | "negative" | "neutral" | "mixed";
          }[]

          Specialist analyses across domains. Flat list; multiple entries per domain/turn OK.

        • Optionalsubject?: {
              conditions?: string[];
              id: string;
              markers?: {
                  category?: string;
                  id: string;
                  interpretation?: string;
                  value?: string;
              }[];
              name: string;
              personality?: Record<string, number>;
              profile?: Record<string, unknown>;
              scenarioExtensions?: Record<string, unknown>;
              signals?: {
                  label: string;
                  recordedAt?: string;
                  unit?: string;
                  value: string | number;
              }[];
          }

          Subject being simulated (person, character, organism, vessel, etc.).

        • Optionaltrajectory?: {
              points?: {
                  metrics: Record<string, number>;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              timepoints?: {
                  confidence?: number;
                  highlightMetrics?: {
                      color?: string;
                      direction?: "up"
                      | "down"
                      | "stable";
                      label: string;
                      value: string;
                  }[];
                  label: string;
                  narrative?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  score?: { label: string; max: number; min: number; value: number };
                  time: number;
                  worldSnapshot?: {
                      capacities?: Record<string, number>;
                      environment?: Record<string, (...) | (...) | (...) | (...)>;
                      metrics: Record<string, number>;
                      politics?: Record<string, (...) | (...) | (...) | (...)>;
                      scenarioExtensions?: Record<string, unknown>;
                      statuses?: Record<string, (...) | (...) | (...)>;
                  };
              }[];
              timeUnit: { plural: string; singular: string };
          }

          Labeled trajectory of the simulation. trajectory.points for sparklines, trajectory.timepoints for rich labeled snapshots. Both optional; at least one populated in turn-loop and batch-trajectory modes.

          • Optionalpoints?: {
                metrics: Record<string, number>;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[]

            Lightweight per-sample metric records; good for sparklines.

          • Optionaltimepoints?: {
                confidence?: number;
                highlightMetrics?: {
                    color?: string;
                    direction?: "up" | "down" | "stable";
                    label: string;
                    value: string;
                }[];
                label: string;
                narrative?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                score?: { label: string; max: number; min: number; value: number };
                time: number;
                worldSnapshot?: {
                    capacities?: Record<string, number>;
                    environment?: Record<string, (...) | (...) | (...) | (...)>;
                    metrics: Record<string, number>;
                    politics?: Record<string, (...) | (...) | (...) | (...)>;
                    scenarioExtensions?: Record<string, unknown>;
                    statuses?: Record<string, (...) | (...) | (...)>;
                };
            }[]

            Rich labeled snapshots with narrative + score; good for timepoint cards.

          • timeUnit: { plural: string; singular: string }
      • atTurn: number
      • opts: ForkOptions = {}

      Returns Promise<WorldModel>

      Error when the artifact has no embedded per-turn snapshots (parent wasn't run with captureSnapshots: true) or when atTurn is out of range of the available snapshots.

    • Simulate an intervention applied to a subject within this world.

      Sugar over WorldModel.simulate that names the digital-twin pattern: a subject (a person, organization, system, or biological entity) is held constant, an intervention (a treatment, policy, or action) is applied, and the leader drives the run. The returned RunArtifact carries subject and intervention for traceability.

      Parameters

      • opts: InterveneOptions

        Options bag containing the subject, intervention, actor, and normal simulation settings.

      Returns Promise<
          {
              aborted?: boolean;
              assumptions?: string[];
              citations?: { context: string; doi?: string; text: string; url: string }[];
              cost?: {
                  breakdown?: Record<string, number>;
                  cachedReadTokens?: number;
                  cacheSavingsUSD?: number;
                  inputTokens?: number;
                  llmCalls?: number;
                  outputTokens?: number;
                  totalUSD: number;
              };
              decisions?: {
                  actor?: string;
                  choice: string;
                  outcome?: | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
                  rationale?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              disclaimer?: string;
              finalState?: {
                  capacities?: Record<string, number>;
                  environment?: Record<string, string | number | boolean>;
                  metrics: Record<string, number>;
                  politics?: Record<string, string | number | boolean>;
                  scenarioExtensions?: Record<string, unknown>;
                  statuses?: Record<string, string | boolean>;
              };
              finalSwarm?: {
                  agents: {
                      age?: number;
                      agentId: string;
                      alive: boolean;
                      childrenIds?: string[];
                      department: string;
                      featured?: boolean;
                      generation?: number;
                      marsborn?: boolean;
                      mood?: string;
                      name: string;
                      partnerId?: string;
                      psychScore?: number;
                      rank?: "junior"
                      | "senior"
                      | "lead"
                      | "chief";
                      role: string;
                      shortTermMemory?: string[];
                  }[];
                  births?: number;
                  deaths?: number;
                  morale?: number;
                  population: number;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
                  turn: number;
              };
              fingerprint?: Record<string, string | number>;
              forgedTools?: {
                  approved: boolean;
                  confidence?: number;
                  department?: string;
                  description?: string;
                  name: string;
              }[];
              intervention?: {
                  adherenceProfile?: { expected: number; risks?: string[] };
                  category?: string;
                  description: string;
                  duration?: { unit: string; value: number };
                  id: string;
                  mechanism?: string;
                  name: string;
                  scenarioExtensions?: Record<string, unknown>;
                  targetBehaviors?: string[];
              };
              leveragePoints?: string[];
              metadata: {
                  completedAt?: string;
                  forkedFrom?: { atTurn: number; parentRunId: string };
                  mode: "turn-loop" | "batch-trajectory" | "batch-point";
                  runId: string;
                  scenario: { id: string; name: string; version?: string };
                  scenarioExtensions?: Record<string, unknown>;
                  seed?: number;
                  startedAt: string;
              };
              overview?: string;
              providerError?: | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null;
              riskFlags?: {
                  detail: string;
                  label: string;
                  scenarioExtensions?: Record<string, unknown>;
                  severity: "low" | "medium" | "high";
              }[];
              scenarioExtensions?: Record<string, unknown>;
              specialistNotes?: {
                  confidence?: number;
                  detail?: {
                      citations?: {
                          context: string;
                          doi?: (...) | (...);
                          text: string;
                          url: string;
                      }[];
                      openQuestions?: string[];
                      opportunities?: { description: string; impact: (...)
                      | (...)
                      | (...) }[];
                      recommendedActions?: string[];
                      risks?: { description: string; severity: (...) | (...) | (...) | (...) }[];
                  };
                  domain: string;
                  scenarioExtensions?: Record<string, unknown>;
                  summary: string;
                  trajectory?: "positive" | "negative" | "neutral" | "mixed";
              }[];
              subject?: {
                  conditions?: string[];
                  id: string;
                  markers?: {
                      category?: string;
                      id: string;
                      interpretation?: string;
                      value?: string;
                  }[];
                  name: string;
                  personality?: Record<string, number>;
                  profile?: Record<string, unknown>;
                  scenarioExtensions?: Record<string, unknown>;
                  signals?: {
                      label: string;
                      recordedAt?: string;
                      unit?: string;
                      value: string | number;
                  }[];
              };
              trajectory?: {
                  points?: {
                      metrics: Record<string, number>;
                      scenarioExtensions?: Record<string, unknown>;
                      time: number;
                  }[];
                  timepoints?: {
                      confidence?: number;
                      highlightMetrics?: {
                          color?: (...)
                          | (...);
                          direction?: (...) | (...) | (...) | (...);
                          label: string;
                          value: string;
                      }[];
                      label: string;
                      narrative?: string;
                      reasoning?: string;
                      scenarioExtensions?: Record<string, unknown>;
                      score?: { label: string; max: number; min: number; value: number };
                      time: number;
                      worldSnapshot?: {
                          capacities?: Record<(...), (...)>;
                          environment?: Record<(...), (...)>;
                          metrics: Record<string, number>;
                          politics?: Record<(...), (...)>;
                          scenarioExtensions?: Record<(...), (...)>;
                          statuses?: Record<(...), (...)>;
                      };
                  }[];
                  timeUnit: { plural: string; singular: string };
              };
          },
      >

      RunArtifact with subject and intervention populated.

      import { WorldModel } from 'paracosm';

      const wm = await WorldModel.fromJson(scenarioJson);
      const artifact = await wm.intervene({
      subject: { id: 'company', kind: 'organization', attributes: { headcount: 100 } },
      intervention: { id: 'layoff', kind: 'policy', description: '25% RIF', parameters: { percent: 25 } },
      actor: leader,
      maxTurns: 4,
      });
      console.log(artifact.subject, artifact.intervention);
    • Quickstart: generate N contextual HEXACO leaders for this world and run them in parallel against the same seed. Leaders are produced by a structured-output LLM call (Zod schema with HEXACO bounds); each run is a direct runSimulation call so captureSnapshots: true flows through verbatim and the results are fork-eligible.

      Unlike batch, this path assumes one scenario and same-seed runs across leaders: the entire product value is "same seed, different HEXACO, see divergence".

      Parameters

      Returns Promise<WorldModelQuickstartResult>

      const wm = await WorldModel.fromPrompt({ seedText });
      const { actors, artifacts } = await wm.quickstart({ actorCount: 3 });
      artifacts.forEach((a, i) => console.log(actors[i].name, a.fingerprint));
    • Re-execute the kernel transitions captured in artifact and report whether today's kernel produces the same snapshots. The audit use case named in the 2026-04-23 positioning spec is now a single API call; pillar 2 (Reproducible) is verifiable in code rather than promised in copy.

      Implementation re-runs the deterministic between-turn progression hook from each recorded snapshot to the next, captures fresh snapshots, and compares the fresh kernelSnapshotsPerTurn array to the input artifact's via canonical JSON. matches=true proves the kernel is byte-equal-deterministic for this artifact's transitions.

      Required preconditions on artifact:

      • scenarioExtensions.kernelSnapshotsPerTurn populated.
      • decisions[] populated.
      • metadata.scenario.id matches this WorldModel's scenario.

      Parameters

      • artifact: {
            aborted?: boolean;
            assumptions?: string[];
            citations?: { context: string; doi?: string; text: string; url: string }[];
            cost?: {
                breakdown?: Record<string, number>;
                cachedReadTokens?: number;
                cacheSavingsUSD?: number;
                inputTokens?: number;
                llmCalls?: number;
                outputTokens?: number;
                totalUSD: number;
            };
            decisions?: {
                actor?: string;
                choice: string;
                outcome?: | "risky_success"
                | "risky_failure"
                | "conservative_success"
                | "conservative_failure";
                rationale?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[];
            disclaimer?: string;
            finalState?: {
                capacities?: Record<string, number>;
                environment?: Record<string, string | number | boolean>;
                metrics: Record<string, number>;
                politics?: Record<string, string | number | boolean>;
                scenarioExtensions?: Record<string, unknown>;
                statuses?: Record<string, string | boolean>;
            };
            finalSwarm?: {
                agents: {
                    age?: number;
                    agentId: string;
                    alive: boolean;
                    childrenIds?: string[];
                    department: string;
                    featured?: boolean;
                    generation?: number;
                    marsborn?: boolean;
                    mood?: string;
                    name: string;
                    partnerId?: string;
                    psychScore?: number;
                    rank?: "junior"
                    | "senior"
                    | "lead"
                    | "chief";
                    role: string;
                    shortTermMemory?: string[];
                }[];
                births?: number;
                deaths?: number;
                morale?: number;
                population: number;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
                turn: number;
            };
            fingerprint?: Record<string, string | number>;
            forgedTools?: {
                approved: boolean;
                confidence?: number;
                department?: string;
                description?: string;
                name: string;
            }[];
            intervention?: {
                adherenceProfile?: { expected: number; risks?: string[] };
                category?: string;
                description: string;
                duration?: { unit: string; value: number };
                id: string;
                mechanism?: string;
                name: string;
                scenarioExtensions?: Record<string, unknown>;
                targetBehaviors?: string[];
            };
            leveragePoints?: string[];
            metadata: {
                completedAt?: string;
                forkedFrom?: { atTurn: number; parentRunId: string };
                mode: "turn-loop" | "batch-trajectory" | "batch-point";
                runId: string;
                scenario: { id: string; name: string; version?: string };
                scenarioExtensions?: Record<string, unknown>;
                seed?: number;
                startedAt: string;
            };
            overview?: string;
            providerError?: | {
                actionUrl?: string;
                kind: "unknown"
                | "auth"
                | "quota"
                | "rate_limit"
                | "network";
                message: string;
                provider: string;
            }
            | null;
            riskFlags?: {
                detail: string;
                label: string;
                scenarioExtensions?: Record<string, unknown>;
                severity: "low" | "medium" | "high";
            }[];
            scenarioExtensions?: Record<string, unknown>;
            specialistNotes?: {
                confidence?: number;
                detail?: {
                    citations?: {
                        context: string;
                        doi?: string;
                        text: string;
                        url: string;
                    }[];
                    openQuestions?: string[];
                    opportunities?: {
                        description: string;
                        impact: "low"
                        | "medium"
                        | "high";
                    }[];
                    recommendedActions?: string[];
                    risks?: {
                        description: string;
                        severity: "low"
                        | "medium"
                        | "high"
                        | "critical";
                    }[];
                };
                domain: string;
                scenarioExtensions?: Record<string, unknown>;
                summary: string;
                trajectory?: "positive" | "negative" | "neutral" | "mixed";
            }[];
            subject?: {
                conditions?: string[];
                id: string;
                markers?: {
                    category?: string;
                    id: string;
                    interpretation?: string;
                    value?: string;
                }[];
                name: string;
                personality?: Record<string, number>;
                profile?: Record<string, unknown>;
                scenarioExtensions?: Record<string, unknown>;
                signals?: {
                    label: string;
                    recordedAt?: string;
                    unit?: string;
                    value: string | number;
                }[];
            };
            trajectory?: {
                points?: {
                    metrics: Record<string, number>;
                    scenarioExtensions?: Record<string, unknown>;
                    time: number;
                }[];
                timepoints?: {
                    confidence?: number;
                    highlightMetrics?: {
                        color?: string;
                        direction?: "up"
                        | "down"
                        | "stable";
                        label: string;
                        value: string;
                    }[];
                    label: string;
                    narrative?: string;
                    reasoning?: string;
                    scenarioExtensions?: Record<string, unknown>;
                    score?: { label: string; max: number; min: number; value: number };
                    time: number;
                    worldSnapshot?: {
                        capacities?: Record<string, number>;
                        environment?: Record<string, (...) | (...) | (...) | (...)>;
                        metrics: Record<string, number>;
                        politics?: Record<string, (...) | (...) | (...) | (...)>;
                        scenarioExtensions?: Record<string, unknown>;
                        statuses?: Record<string, (...) | (...) | (...)>;
                    };
                }[];
                timeUnit: { plural: string; singular: string };
            };
        }

        The stored RunArtifact to replay.

        • Optionalaborted?: boolean
        • Optionalassumptions?: string[]

          Assumptions held true during the simulation.

        • Optionalcitations?: { context: string; doi?: string; text: string; url: string }[]
        • Optionalcost?: {
              breakdown?: Record<string, number>;
              cachedReadTokens?: number;
              cacheSavingsUSD?: number;
              inputTokens?: number;
              llmCalls?: number;
              outputTokens?: number;
              totalUSD: number;
          }
          • Optionalbreakdown?: Record<string, number>

            Per-site / per-model breakdown: { director: 0.12, departments: 0.34 }.

          • OptionalcachedReadTokens?: number
          • OptionalcacheSavingsUSD?: number
          • OptionalinputTokens?: number
          • OptionalllmCalls?: number
          • OptionaloutputTokens?: number
          • totalUSD: number
        • Optionaldecisions?: {
              actor?: string;
              choice: string;
              outcome?:
                  | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
              rationale?: string;
              reasoning?: string;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
          }[]

          Every decision made during the run — one per commander choice in turn-loop.

        • Optionaldisclaimer?: string

          Scenario-supplied disclaimer (digital-twin simulations use this for medical / professional caveats).

        • OptionalfinalState?: {
              capacities?: Record<string, number>;
              environment?: Record<string, string | number | boolean>;
              metrics: Record<string, number>;
              politics?: Record<string, string | number | boolean>;
              scenarioExtensions?: Record<string, unknown>;
              statuses?: Record<string, string | boolean>;
          }
          • Optionalcapacities?: Record<string, number>

            Capacity constraints: life support, housing, budget.

          • Optionalenvironment?: Record<string, string | number | boolean>

            Environmental conditions: weather, radiation, depth, altitude.

          • metrics: Record<string, number>

            Numeric gauges: food, power, population, morale, VO2max, whatever.

          • Optionalpolitics?: Record<string, string | number | boolean>

            Political/social pressures. Values may be numeric or categorical.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalstatuses?: Record<string, string | boolean>

            Categorical state: governance status, alignment, phase.

        • OptionalfinalSwarm?: {
              agents: {
                  age?: number;
                  agentId: string;
                  alive: boolean;
                  childrenIds?: string[];
                  department: string;
                  featured?: boolean;
                  generation?: number;
                  marsborn?: boolean;
                  mood?: string;
                  name: string;
                  partnerId?: string;
                  psychScore?: number;
                  rank?: "junior" | "senior" | "lead" | "chief";
                  role: string;
                  shortTermMemory?: string[];
              }[];
              births?: number;
              deaths?: number;
              morale?: number;
              population: number;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
              turn: number;
          }

          Final agent-swarm roster at end-of-run. Pairs with finalState: the world snapshot is the macro view (metrics, statuses), the swarm snapshot is the micro view (every agent's role, mood, family edges, memory). Populated in turn-loop runs that exercised the swarm. Use WorldModel.swarm() for the live equivalent during a run.

          • agents: {
                age?: number;
                agentId: string;
                alive: boolean;
                childrenIds?: string[];
                department: string;
                featured?: boolean;
                generation?: number;
                marsborn?: boolean;
                mood?: string;
                name: string;
                partnerId?: string;
                psychScore?: number;
                rank?: "junior" | "senior" | "lead" | "chief";
                role: string;
                shortTermMemory?: string[];
            }[]

            Every agent in the swarm at snapshot time, alive or dead.

          • Optionalbirths?: number

            Number of births this turn.

          • Optionaldeaths?: number

            Number of deaths this turn.

          • Optionalmorale?: number

            Aggregate morale 0..1 (population-weighted).

          • population: number

            Aggregate counts derived from agents.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • time: number

            Scenario time at snapshot (years/quarters/ticks per scenario).

          • turn: number

            Turn number this snapshot was taken at (0-indexed).

        • Optionalfingerprint?: Record<string, string | number>

          Loose classification scores. Paracosm heritage; scenarios may extend.

        • OptionalforgedTools?: {
              approved: boolean;
              confidence?: number;
              department?: string;
              description?: string;
              name: string;
          }[]
        • Optionalintervention?: {
              adherenceProfile?: { expected: number; risks?: string[] };
              category?: string;
              description: string;
              duration?: { unit: string; value: number };
              id: string;
              mechanism?: string;
              name: string;
              scenarioExtensions?: Record<string, unknown>;
              targetBehaviors?: string[];
          }

          Intervention being tested on the subject.

        • OptionalleveragePoints?: string[]

          Actionable leverage points for consumers of the artifact.

        • metadata: {
              completedAt?: string;
              forkedFrom?: { atTurn: number; parentRunId: string };
              mode: "turn-loop" | "batch-trajectory" | "batch-point";
              runId: string;
              scenario: { id: string; name: string; version?: string };
              scenarioExtensions?: Record<string, unknown>;
              seed?: number;
              startedAt: string;
          }

          Required. Identifies the run + scenario + mode.

          • OptionalcompletedAt?: string
          • OptionalforkedFrom?: { atTurn: number; parentRunId: string }

            When this run was produced by forking a prior run, records the parent run-id + the turn at which the fork happened. Consumers walking a fork chain follow this link transitively through stored artifacts. Omitted for fresh (non-forked) runs.

            Added in 0.7.x with the WorldModel.fork() API. Additive + optional; no COMPILE_SCHEMA_VERSION bump required.

          • mode: "turn-loop" | "batch-trajectory" | "batch-point"
          • runId: string

            Unique identifier for this run. UUID, slug, or host-assigned id.

          • scenario: { id: string; name: string; version?: string }
            • id: string
            • name: string
            • Optionalversion?: string

              Scenario version; not artifact version. Optional.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalseed?: number

            Absent for non-deterministic runs (LLM-only synthesis without a seeded kernel).

          • startedAt: string
        • Optionaloverview?: string

          Short headline summary. Digital-twin overview, paracosm verdict's summary, a game's end-of-run narrator line.

        • OptionalproviderError?:
              | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null
        • OptionalriskFlags?: {
              detail: string;
              label: string;
              scenarioExtensions?: Record<string, unknown>;
              severity: "low" | "medium" | "high";
          }[]

          Risk callouts. Maps to digital-twin risk_flags after camelCase rename.

        • OptionalscenarioExtensions?: Record<string, unknown>
        • OptionalspecialistNotes?: {
              confidence?: number;
              detail?: {
                  citations?: {
                      context: string;
                      doi?: string;
                      text: string;
                      url: string;
                  }[];
                  openQuestions?: string[];
                  opportunities?: { description: string; impact: "low"
                  | "medium"
                  | "high" }[];
                  recommendedActions?: string[];
                  risks?: {
                      description: string;
                      severity: "low" | "medium" | "high" | "critical";
                  }[];
              };
              domain: string;
              scenarioExtensions?: Record<string, unknown>;
              summary: string;
              trajectory?: "positive" | "negative" | "neutral" | "mixed";
          }[]

          Specialist analyses across domains. Flat list; multiple entries per domain/turn OK.

        • Optionalsubject?: {
              conditions?: string[];
              id: string;
              markers?: {
                  category?: string;
                  id: string;
                  interpretation?: string;
                  value?: string;
              }[];
              name: string;
              personality?: Record<string, number>;
              profile?: Record<string, unknown>;
              scenarioExtensions?: Record<string, unknown>;
              signals?: {
                  label: string;
                  recordedAt?: string;
                  unit?: string;
                  value: string | number;
              }[];
          }

          Subject being simulated (person, character, organism, vessel, etc.).

        • Optionaltrajectory?: {
              points?: {
                  metrics: Record<string, number>;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              timepoints?: {
                  confidence?: number;
                  highlightMetrics?: {
                      color?: string;
                      direction?: "up"
                      | "down"
                      | "stable";
                      label: string;
                      value: string;
                  }[];
                  label: string;
                  narrative?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  score?: { label: string; max: number; min: number; value: number };
                  time: number;
                  worldSnapshot?: {
                      capacities?: Record<string, number>;
                      environment?: Record<string, (...) | (...) | (...) | (...)>;
                      metrics: Record<string, number>;
                      politics?: Record<string, (...) | (...) | (...) | (...)>;
                      scenarioExtensions?: Record<string, unknown>;
                      statuses?: Record<string, (...) | (...) | (...)>;
                  };
              }[];
              timeUnit: { plural: string; singular: string };
          }

          Labeled trajectory of the simulation. trajectory.points for sparklines, trajectory.timepoints for rich labeled snapshots. Both optional; at least one populated in turn-loop and batch-trajectory modes.

          • Optionalpoints?: {
                metrics: Record<string, number>;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[]

            Lightweight per-sample metric records; good for sparklines.

          • Optionaltimepoints?: {
                confidence?: number;
                highlightMetrics?: {
                    color?: string;
                    direction?: "up" | "down" | "stable";
                    label: string;
                    value: string;
                }[];
                label: string;
                narrative?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                score?: { label: string; max: number; min: number; value: number };
                time: number;
                worldSnapshot?: {
                    capacities?: Record<string, number>;
                    environment?: Record<string, (...) | (...) | (...) | (...)>;
                    metrics: Record<string, number>;
                    politics?: Record<string, (...) | (...) | (...) | (...)>;
                    scenarioExtensions?: Record<string, unknown>;
                    statuses?: Record<string, (...) | (...) | (...)>;
                };
            }[]

            Rich labeled snapshots with narrative + score; good for timepoint cards.

          • timeUnit: { plural: string; singular: string }

      Returns Promise<WorldModelReplayResult>

      Replay result: { artifact, matches, divergence }.

      WorldModelReplayError when preconditions fail.

    • Run a single simulation through this world with the given leader. Delegates to runSimulation with scenario pinned to this instance.

      keyPersonnel is optional for parity with the underlying API; most callers pass [] or omit it. The returned RunArtifact is the universal Zod-validated contract exported from paracosm/schema.

      When this WorldModel was produced by WorldModel.fork or WorldModel.forkFromArtifact, the pending _resumeFrom + _forkedFrom context is threaded into the underlying runSimulation via the internal _resumeFrom / _forkedFrom fields on RunOptions. Both are cleared after simulate() consumes them so a second simulate() on the same WorldModel does not double-apply.

      Parameters

      Returns Promise<
          {
              aborted?: boolean;
              assumptions?: string[];
              citations?: { context: string; doi?: string; text: string; url: string }[];
              cost?: {
                  breakdown?: Record<string, number>;
                  cachedReadTokens?: number;
                  cacheSavingsUSD?: number;
                  inputTokens?: number;
                  llmCalls?: number;
                  outputTokens?: number;
                  totalUSD: number;
              };
              decisions?: {
                  actor?: string;
                  choice: string;
                  outcome?: | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
                  rationale?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              disclaimer?: string;
              finalState?: {
                  capacities?: Record<string, number>;
                  environment?: Record<string, string | number | boolean>;
                  metrics: Record<string, number>;
                  politics?: Record<string, string | number | boolean>;
                  scenarioExtensions?: Record<string, unknown>;
                  statuses?: Record<string, string | boolean>;
              };
              finalSwarm?: {
                  agents: {
                      age?: number;
                      agentId: string;
                      alive: boolean;
                      childrenIds?: string[];
                      department: string;
                      featured?: boolean;
                      generation?: number;
                      marsborn?: boolean;
                      mood?: string;
                      name: string;
                      partnerId?: string;
                      psychScore?: number;
                      rank?: "junior"
                      | "senior"
                      | "lead"
                      | "chief";
                      role: string;
                      shortTermMemory?: string[];
                  }[];
                  births?: number;
                  deaths?: number;
                  morale?: number;
                  population: number;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
                  turn: number;
              };
              fingerprint?: Record<string, string | number>;
              forgedTools?: {
                  approved: boolean;
                  confidence?: number;
                  department?: string;
                  description?: string;
                  name: string;
              }[];
              intervention?: {
                  adherenceProfile?: { expected: number; risks?: string[] };
                  category?: string;
                  description: string;
                  duration?: { unit: string; value: number };
                  id: string;
                  mechanism?: string;
                  name: string;
                  scenarioExtensions?: Record<string, unknown>;
                  targetBehaviors?: string[];
              };
              leveragePoints?: string[];
              metadata: {
                  completedAt?: string;
                  forkedFrom?: { atTurn: number; parentRunId: string };
                  mode: "turn-loop" | "batch-trajectory" | "batch-point";
                  runId: string;
                  scenario: { id: string; name: string; version?: string };
                  scenarioExtensions?: Record<string, unknown>;
                  seed?: number;
                  startedAt: string;
              };
              overview?: string;
              providerError?: | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null;
              riskFlags?: {
                  detail: string;
                  label: string;
                  scenarioExtensions?: Record<string, unknown>;
                  severity: "low" | "medium" | "high";
              }[];
              scenarioExtensions?: Record<string, unknown>;
              specialistNotes?: {
                  confidence?: number;
                  detail?: {
                      citations?: {
                          context: string;
                          doi?: (...) | (...);
                          text: string;
                          url: string;
                      }[];
                      openQuestions?: string[];
                      opportunities?: { description: string; impact: (...)
                      | (...)
                      | (...) }[];
                      recommendedActions?: string[];
                      risks?: { description: string; severity: (...) | (...) | (...) | (...) }[];
                  };
                  domain: string;
                  scenarioExtensions?: Record<string, unknown>;
                  summary: string;
                  trajectory?: "positive" | "negative" | "neutral" | "mixed";
              }[];
              subject?: {
                  conditions?: string[];
                  id: string;
                  markers?: {
                      category?: string;
                      id: string;
                      interpretation?: string;
                      value?: string;
                  }[];
                  name: string;
                  personality?: Record<string, number>;
                  profile?: Record<string, unknown>;
                  scenarioExtensions?: Record<string, unknown>;
                  signals?: {
                      label: string;
                      recordedAt?: string;
                      unit?: string;
                      value: string | number;
                  }[];
              };
              trajectory?: {
                  points?: {
                      metrics: Record<string, number>;
                      scenarioExtensions?: Record<string, unknown>;
                      time: number;
                  }[];
                  timepoints?: {
                      confidence?: number;
                      highlightMetrics?: {
                          color?: (...)
                          | (...);
                          direction?: (...) | (...) | (...) | (...);
                          label: string;
                          value: string;
                      }[];
                      label: string;
                      narrative?: string;
                      reasoning?: string;
                      scenarioExtensions?: Record<string, unknown>;
                      score?: { label: string; max: number; min: number; value: number };
                      time: number;
                      worldSnapshot?: {
                          capacities?: Record<(...), (...)>;
                          environment?: Record<(...), (...)>;
                          metrics: Record<string, number>;
                          politics?: Record<(...), (...)>;
                          scenarioExtensions?: Record<(...), (...)>;
                          statuses?: Record<(...), (...)>;
                      };
                  }[];
                  timeUnit: { plural: string; singular: string };
              };
          },
      >

    • Capture a WorldModelSnapshot of the state at the end of this WorldModel's most recent simulate() call. Requires simulate(..., { captureSnapshots: true }) on that prior call; throws with a clear pointer otherwise.

      The returned snapshot is plain JSON-safe; serialize to disk with JSON.stringify and reload with JSON.parse + fork().

      Returns WorldModelSnapshot

      Error when this WorldModel has never run simulate(), or when the last simulate() did not set captureSnapshots: true.

    • Compile a world model from prompt, brief, or document text (with an optional domain hint and source URL). Delegates to compileFromSeed: the LLM proposes a scenario draft against DraftScenarioSchema, validates it, then routes it into the existing compileScenario pipeline so the seedText research grounding and hook generation stages still fire. JSON stays the canonical contract; this wrapper only makes unstructured source material a first-class authoring input.

      Parameters

      • seed: CompileFromSeedInput
      • options: CompileFromSeedOptions = {}

      Returns Promise<WorldModel>

      const wm = await WorldModel.fromPrompt({
      seedText: 'Q3 board brief: the company needs to decide between...',
      domainHint: 'corporate strategic decision',
      }, { provider: 'anthropic' });
      const result = await wm.quickstart({ actorCount: 3 });
    • Final agent-swarm snapshot from a RunArtifact, or undefined if the run did not produce one (e.g., batch-point modes that bypass the turn loop). Equivalent to reading artifact.finalSwarm directly; provided so consumers have a single import surface for swarm access.

      Parameters

      • artifact: {
            aborted?: boolean;
            assumptions?: string[];
            citations?: { context: string; doi?: string; text: string; url: string }[];
            cost?: {
                breakdown?: Record<string, number>;
                cachedReadTokens?: number;
                cacheSavingsUSD?: number;
                inputTokens?: number;
                llmCalls?: number;
                outputTokens?: number;
                totalUSD: number;
            };
            decisions?: {
                actor?: string;
                choice: string;
                outcome?: | "risky_success"
                | "risky_failure"
                | "conservative_success"
                | "conservative_failure";
                rationale?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[];
            disclaimer?: string;
            finalState?: {
                capacities?: Record<string, number>;
                environment?: Record<string, string | number | boolean>;
                metrics: Record<string, number>;
                politics?: Record<string, string | number | boolean>;
                scenarioExtensions?: Record<string, unknown>;
                statuses?: Record<string, string | boolean>;
            };
            finalSwarm?: {
                agents: {
                    age?: number;
                    agentId: string;
                    alive: boolean;
                    childrenIds?: string[];
                    department: string;
                    featured?: boolean;
                    generation?: number;
                    marsborn?: boolean;
                    mood?: string;
                    name: string;
                    partnerId?: string;
                    psychScore?: number;
                    rank?: "junior"
                    | "senior"
                    | "lead"
                    | "chief";
                    role: string;
                    shortTermMemory?: string[];
                }[];
                births?: number;
                deaths?: number;
                morale?: number;
                population: number;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
                turn: number;
            };
            fingerprint?: Record<string, string | number>;
            forgedTools?: {
                approved: boolean;
                confidence?: number;
                department?: string;
                description?: string;
                name: string;
            }[];
            intervention?: {
                adherenceProfile?: { expected: number; risks?: string[] };
                category?: string;
                description: string;
                duration?: { unit: string; value: number };
                id: string;
                mechanism?: string;
                name: string;
                scenarioExtensions?: Record<string, unknown>;
                targetBehaviors?: string[];
            };
            leveragePoints?: string[];
            metadata: {
                completedAt?: string;
                forkedFrom?: { atTurn: number; parentRunId: string };
                mode: "turn-loop" | "batch-trajectory" | "batch-point";
                runId: string;
                scenario: { id: string; name: string; version?: string };
                scenarioExtensions?: Record<string, unknown>;
                seed?: number;
                startedAt: string;
            };
            overview?: string;
            providerError?: | {
                actionUrl?: string;
                kind: "unknown"
                | "auth"
                | "quota"
                | "rate_limit"
                | "network";
                message: string;
                provider: string;
            }
            | null;
            riskFlags?: {
                detail: string;
                label: string;
                scenarioExtensions?: Record<string, unknown>;
                severity: "low" | "medium" | "high";
            }[];
            scenarioExtensions?: Record<string, unknown>;
            specialistNotes?: {
                confidence?: number;
                detail?: {
                    citations?: {
                        context: string;
                        doi?: string;
                        text: string;
                        url: string;
                    }[];
                    openQuestions?: string[];
                    opportunities?: {
                        description: string;
                        impact: "low"
                        | "medium"
                        | "high";
                    }[];
                    recommendedActions?: string[];
                    risks?: {
                        description: string;
                        severity: "low"
                        | "medium"
                        | "high"
                        | "critical";
                    }[];
                };
                domain: string;
                scenarioExtensions?: Record<string, unknown>;
                summary: string;
                trajectory?: "positive" | "negative" | "neutral" | "mixed";
            }[];
            subject?: {
                conditions?: string[];
                id: string;
                markers?: {
                    category?: string;
                    id: string;
                    interpretation?: string;
                    value?: string;
                }[];
                name: string;
                personality?: Record<string, number>;
                profile?: Record<string, unknown>;
                scenarioExtensions?: Record<string, unknown>;
                signals?: {
                    label: string;
                    recordedAt?: string;
                    unit?: string;
                    value: string | number;
                }[];
            };
            trajectory?: {
                points?: {
                    metrics: Record<string, number>;
                    scenarioExtensions?: Record<string, unknown>;
                    time: number;
                }[];
                timepoints?: {
                    confidence?: number;
                    highlightMetrics?: {
                        color?: string;
                        direction?: "up"
                        | "down"
                        | "stable";
                        label: string;
                        value: string;
                    }[];
                    label: string;
                    narrative?: string;
                    reasoning?: string;
                    scenarioExtensions?: Record<string, unknown>;
                    score?: { label: string; max: number; min: number; value: number };
                    time: number;
                    worldSnapshot?: {
                        capacities?: Record<string, number>;
                        environment?: Record<string, (...) | (...) | (...) | (...)>;
                        metrics: Record<string, number>;
                        politics?: Record<string, (...) | (...) | (...) | (...)>;
                        scenarioExtensions?: Record<string, unknown>;
                        statuses?: Record<string, (...) | (...) | (...)>;
                    };
                }[];
                timeUnit: { plural: string; singular: string };
            };
        }
        • Optionalaborted?: boolean
        • Optionalassumptions?: string[]

          Assumptions held true during the simulation.

        • Optionalcitations?: { context: string; doi?: string; text: string; url: string }[]
        • Optionalcost?: {
              breakdown?: Record<string, number>;
              cachedReadTokens?: number;
              cacheSavingsUSD?: number;
              inputTokens?: number;
              llmCalls?: number;
              outputTokens?: number;
              totalUSD: number;
          }
          • Optionalbreakdown?: Record<string, number>

            Per-site / per-model breakdown: { director: 0.12, departments: 0.34 }.

          • OptionalcachedReadTokens?: number
          • OptionalcacheSavingsUSD?: number
          • OptionalinputTokens?: number
          • OptionalllmCalls?: number
          • OptionaloutputTokens?: number
          • totalUSD: number
        • Optionaldecisions?: {
              actor?: string;
              choice: string;
              outcome?:
                  | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
              rationale?: string;
              reasoning?: string;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
          }[]

          Every decision made during the run — one per commander choice in turn-loop.

        • Optionaldisclaimer?: string

          Scenario-supplied disclaimer (digital-twin simulations use this for medical / professional caveats).

        • OptionalfinalState?: {
              capacities?: Record<string, number>;
              environment?: Record<string, string | number | boolean>;
              metrics: Record<string, number>;
              politics?: Record<string, string | number | boolean>;
              scenarioExtensions?: Record<string, unknown>;
              statuses?: Record<string, string | boolean>;
          }
          • Optionalcapacities?: Record<string, number>

            Capacity constraints: life support, housing, budget.

          • Optionalenvironment?: Record<string, string | number | boolean>

            Environmental conditions: weather, radiation, depth, altitude.

          • metrics: Record<string, number>

            Numeric gauges: food, power, population, morale, VO2max, whatever.

          • Optionalpolitics?: Record<string, string | number | boolean>

            Political/social pressures. Values may be numeric or categorical.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalstatuses?: Record<string, string | boolean>

            Categorical state: governance status, alignment, phase.

        • OptionalfinalSwarm?: {
              agents: {
                  age?: number;
                  agentId: string;
                  alive: boolean;
                  childrenIds?: string[];
                  department: string;
                  featured?: boolean;
                  generation?: number;
                  marsborn?: boolean;
                  mood?: string;
                  name: string;
                  partnerId?: string;
                  psychScore?: number;
                  rank?: "junior" | "senior" | "lead" | "chief";
                  role: string;
                  shortTermMemory?: string[];
              }[];
              births?: number;
              deaths?: number;
              morale?: number;
              population: number;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
              turn: number;
          }

          Final agent-swarm roster at end-of-run. Pairs with finalState: the world snapshot is the macro view (metrics, statuses), the swarm snapshot is the micro view (every agent's role, mood, family edges, memory). Populated in turn-loop runs that exercised the swarm. Use WorldModel.swarm() for the live equivalent during a run.

          • agents: {
                age?: number;
                agentId: string;
                alive: boolean;
                childrenIds?: string[];
                department: string;
                featured?: boolean;
                generation?: number;
                marsborn?: boolean;
                mood?: string;
                name: string;
                partnerId?: string;
                psychScore?: number;
                rank?: "junior" | "senior" | "lead" | "chief";
                role: string;
                shortTermMemory?: string[];
            }[]

            Every agent in the swarm at snapshot time, alive or dead.

          • Optionalbirths?: number

            Number of births this turn.

          • Optionaldeaths?: number

            Number of deaths this turn.

          • Optionalmorale?: number

            Aggregate morale 0..1 (population-weighted).

          • population: number

            Aggregate counts derived from agents.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • time: number

            Scenario time at snapshot (years/quarters/ticks per scenario).

          • turn: number

            Turn number this snapshot was taken at (0-indexed).

        • Optionalfingerprint?: Record<string, string | number>

          Loose classification scores. Paracosm heritage; scenarios may extend.

        • OptionalforgedTools?: {
              approved: boolean;
              confidence?: number;
              department?: string;
              description?: string;
              name: string;
          }[]
        • Optionalintervention?: {
              adherenceProfile?: { expected: number; risks?: string[] };
              category?: string;
              description: string;
              duration?: { unit: string; value: number };
              id: string;
              mechanism?: string;
              name: string;
              scenarioExtensions?: Record<string, unknown>;
              targetBehaviors?: string[];
          }

          Intervention being tested on the subject.

        • OptionalleveragePoints?: string[]

          Actionable leverage points for consumers of the artifact.

        • metadata: {
              completedAt?: string;
              forkedFrom?: { atTurn: number; parentRunId: string };
              mode: "turn-loop" | "batch-trajectory" | "batch-point";
              runId: string;
              scenario: { id: string; name: string; version?: string };
              scenarioExtensions?: Record<string, unknown>;
              seed?: number;
              startedAt: string;
          }

          Required. Identifies the run + scenario + mode.

          • OptionalcompletedAt?: string
          • OptionalforkedFrom?: { atTurn: number; parentRunId: string }

            When this run was produced by forking a prior run, records the parent run-id + the turn at which the fork happened. Consumers walking a fork chain follow this link transitively through stored artifacts. Omitted for fresh (non-forked) runs.

            Added in 0.7.x with the WorldModel.fork() API. Additive + optional; no COMPILE_SCHEMA_VERSION bump required.

          • mode: "turn-loop" | "batch-trajectory" | "batch-point"
          • runId: string

            Unique identifier for this run. UUID, slug, or host-assigned id.

          • scenario: { id: string; name: string; version?: string }
            • id: string
            • name: string
            • Optionalversion?: string

              Scenario version; not artifact version. Optional.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalseed?: number

            Absent for non-deterministic runs (LLM-only synthesis without a seeded kernel).

          • startedAt: string
        • Optionaloverview?: string

          Short headline summary. Digital-twin overview, paracosm verdict's summary, a game's end-of-run narrator line.

        • OptionalproviderError?:
              | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null
        • OptionalriskFlags?: {
              detail: string;
              label: string;
              scenarioExtensions?: Record<string, unknown>;
              severity: "low" | "medium" | "high";
          }[]

          Risk callouts. Maps to digital-twin risk_flags after camelCase rename.

        • OptionalscenarioExtensions?: Record<string, unknown>
        • OptionalspecialistNotes?: {
              confidence?: number;
              detail?: {
                  citations?: {
                      context: string;
                      doi?: string;
                      text: string;
                      url: string;
                  }[];
                  openQuestions?: string[];
                  opportunities?: { description: string; impact: "low"
                  | "medium"
                  | "high" }[];
                  recommendedActions?: string[];
                  risks?: {
                      description: string;
                      severity: "low" | "medium" | "high" | "critical";
                  }[];
              };
              domain: string;
              scenarioExtensions?: Record<string, unknown>;
              summary: string;
              trajectory?: "positive" | "negative" | "neutral" | "mixed";
          }[]

          Specialist analyses across domains. Flat list; multiple entries per domain/turn OK.

        • Optionalsubject?: {
              conditions?: string[];
              id: string;
              markers?: {
                  category?: string;
                  id: string;
                  interpretation?: string;
                  value?: string;
              }[];
              name: string;
              personality?: Record<string, number>;
              profile?: Record<string, unknown>;
              scenarioExtensions?: Record<string, unknown>;
              signals?: {
                  label: string;
                  recordedAt?: string;
                  unit?: string;
                  value: string | number;
              }[];
          }

          Subject being simulated (person, character, organism, vessel, etc.).

        • Optionaltrajectory?: {
              points?: {
                  metrics: Record<string, number>;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              timepoints?: {
                  confidence?: number;
                  highlightMetrics?: {
                      color?: string;
                      direction?: "up"
                      | "down"
                      | "stable";
                      label: string;
                      value: string;
                  }[];
                  label: string;
                  narrative?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  score?: { label: string; max: number; min: number; value: number };
                  time: number;
                  worldSnapshot?: {
                      capacities?: Record<string, number>;
                      environment?: Record<string, (...) | (...) | (...) | (...)>;
                      metrics: Record<string, number>;
                      politics?: Record<string, (...) | (...) | (...) | (...)>;
                      scenarioExtensions?: Record<string, unknown>;
                      statuses?: Record<string, (...) | (...) | (...)>;
                  };
              }[];
              timeUnit: { plural: string; singular: string };
          }

          Labeled trajectory of the simulation. trajectory.points for sparklines, trajectory.timepoints for rich labeled snapshots. Both optional; at least one populated in turn-loop and batch-trajectory modes.

          • Optionalpoints?: {
                metrics: Record<string, number>;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[]

            Lightweight per-sample metric records; good for sparklines.

          • Optionaltimepoints?: {
                confidence?: number;
                highlightMetrics?: {
                    color?: string;
                    direction?: "up" | "down" | "stable";
                    label: string;
                    value: string;
                }[];
                label: string;
                narrative?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                score?: { label: string; max: number; min: number; value: number };
                time: number;
                worldSnapshot?: {
                    capacities?: Record<string, number>;
                    environment?: Record<string, (...) | (...) | (...) | (...)>;
                    metrics: Record<string, number>;
                    politics?: Record<string, (...) | (...) | (...) | (...)>;
                    scenarioExtensions?: Record<string, unknown>;
                    statuses?: Record<string, (...) | (...) | (...)>;
                };
            }[]

            Rich labeled snapshots with narrative + score; good for timepoint cards.

          • timeUnit: { plural: string; singular: string }

      Returns
          | {
              agents: {
                  age?: number;
                  agentId: string;
                  alive: boolean;
                  childrenIds?: string[];
                  department: string;
                  featured?: boolean;
                  generation?: number;
                  marsborn?: boolean;
                  mood?: string;
                  name: string;
                  partnerId?: string;
                  psychScore?: number;
                  rank?: "junior"
                  | "senior"
                  | "lead"
                  | "chief";
                  role: string;
                  shortTermMemory?: string[];
              }[];
              births?: number;
              deaths?: number;
              morale?: number;
              population: number;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
              turn: number;
          }
          | undefined

      • {
            agents: {
                age?: number;
                agentId: string;
                alive: boolean;
                childrenIds?: string[];
                department: string;
                featured?: boolean;
                generation?: number;
                marsborn?: boolean;
                mood?: string;
                name: string;
                partnerId?: string;
                psychScore?: number;
                rank?: "junior" | "senior" | "lead" | "chief";
                role: string;
                shortTermMemory?: string[];
            }[];
            births?: number;
            deaths?: number;
            morale?: number;
            population: number;
            scenarioExtensions?: Record<string, unknown>;
            time: number;
            turn: number;
        }
        • agents: {
              age?: number;
              agentId: string;
              alive: boolean;
              childrenIds?: string[];
              department: string;
              featured?: boolean;
              generation?: number;
              marsborn?: boolean;
              mood?: string;
              name: string;
              partnerId?: string;
              psychScore?: number;
              rank?: "junior" | "senior" | "lead" | "chief";
              role: string;
              shortTermMemory?: string[];
          }[]

          Every agent in the swarm at snapshot time, alive or dead.

        • Optionalbirths?: number

          Number of births this turn.

        • Optionaldeaths?: number

          Number of deaths this turn.

        • Optionalmorale?: number

          Aggregate morale 0..1 (population-weighted).

        • population: number

          Aggregate counts derived from agents.

        • OptionalscenarioExtensions?: Record<string, unknown>
        • time: number

          Scenario time at snapshot (years/quarters/ticks per scenario).

        • turn: number

          Turn number this snapshot was taken at (0-indexed).

      • undefined
      const result = await wm.simulate(leader, { maxTurns: 6 });
      const swarm = WorldModel.swarm(result);
      if (swarm) {
      console.log(`T${swarm.turn}: ${swarm.population} agents`);
      for (const a of swarm.agents) console.log(` ${a.name} · ${a.department} · ${a.mood}`);
      }
    • Group the swarm by department. Returns a map keyed by department label; values are the (alive + dead) agents in that department, preserving insertion order from the snapshot. Delegates to import('paracosm/swarm').swarmByDepartment.

      Useful for org-chart-style summaries: "Engineering: 18 agents (15 alive). Lead: Maria Chen."

      Parameters

      • artifact: {
            aborted?: boolean;
            assumptions?: string[];
            citations?: { context: string; doi?: string; text: string; url: string }[];
            cost?: {
                breakdown?: Record<string, number>;
                cachedReadTokens?: number;
                cacheSavingsUSD?: number;
                inputTokens?: number;
                llmCalls?: number;
                outputTokens?: number;
                totalUSD: number;
            };
            decisions?: {
                actor?: string;
                choice: string;
                outcome?: | "risky_success"
                | "risky_failure"
                | "conservative_success"
                | "conservative_failure";
                rationale?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[];
            disclaimer?: string;
            finalState?: {
                capacities?: Record<string, number>;
                environment?: Record<string, string | number | boolean>;
                metrics: Record<string, number>;
                politics?: Record<string, string | number | boolean>;
                scenarioExtensions?: Record<string, unknown>;
                statuses?: Record<string, string | boolean>;
            };
            finalSwarm?: {
                agents: {
                    age?: number;
                    agentId: string;
                    alive: boolean;
                    childrenIds?: string[];
                    department: string;
                    featured?: boolean;
                    generation?: number;
                    marsborn?: boolean;
                    mood?: string;
                    name: string;
                    partnerId?: string;
                    psychScore?: number;
                    rank?: "junior"
                    | "senior"
                    | "lead"
                    | "chief";
                    role: string;
                    shortTermMemory?: string[];
                }[];
                births?: number;
                deaths?: number;
                morale?: number;
                population: number;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
                turn: number;
            };
            fingerprint?: Record<string, string | number>;
            forgedTools?: {
                approved: boolean;
                confidence?: number;
                department?: string;
                description?: string;
                name: string;
            }[];
            intervention?: {
                adherenceProfile?: { expected: number; risks?: string[] };
                category?: string;
                description: string;
                duration?: { unit: string; value: number };
                id: string;
                mechanism?: string;
                name: string;
                scenarioExtensions?: Record<string, unknown>;
                targetBehaviors?: string[];
            };
            leveragePoints?: string[];
            metadata: {
                completedAt?: string;
                forkedFrom?: { atTurn: number; parentRunId: string };
                mode: "turn-loop" | "batch-trajectory" | "batch-point";
                runId: string;
                scenario: { id: string; name: string; version?: string };
                scenarioExtensions?: Record<string, unknown>;
                seed?: number;
                startedAt: string;
            };
            overview?: string;
            providerError?: | {
                actionUrl?: string;
                kind: "unknown"
                | "auth"
                | "quota"
                | "rate_limit"
                | "network";
                message: string;
                provider: string;
            }
            | null;
            riskFlags?: {
                detail: string;
                label: string;
                scenarioExtensions?: Record<string, unknown>;
                severity: "low" | "medium" | "high";
            }[];
            scenarioExtensions?: Record<string, unknown>;
            specialistNotes?: {
                confidence?: number;
                detail?: {
                    citations?: {
                        context: string;
                        doi?: string;
                        text: string;
                        url: string;
                    }[];
                    openQuestions?: string[];
                    opportunities?: {
                        description: string;
                        impact: "low"
                        | "medium"
                        | "high";
                    }[];
                    recommendedActions?: string[];
                    risks?: {
                        description: string;
                        severity: "low"
                        | "medium"
                        | "high"
                        | "critical";
                    }[];
                };
                domain: string;
                scenarioExtensions?: Record<string, unknown>;
                summary: string;
                trajectory?: "positive" | "negative" | "neutral" | "mixed";
            }[];
            subject?: {
                conditions?: string[];
                id: string;
                markers?: {
                    category?: string;
                    id: string;
                    interpretation?: string;
                    value?: string;
                }[];
                name: string;
                personality?: Record<string, number>;
                profile?: Record<string, unknown>;
                scenarioExtensions?: Record<string, unknown>;
                signals?: {
                    label: string;
                    recordedAt?: string;
                    unit?: string;
                    value: string | number;
                }[];
            };
            trajectory?: {
                points?: {
                    metrics: Record<string, number>;
                    scenarioExtensions?: Record<string, unknown>;
                    time: number;
                }[];
                timepoints?: {
                    confidence?: number;
                    highlightMetrics?: {
                        color?: string;
                        direction?: "up"
                        | "down"
                        | "stable";
                        label: string;
                        value: string;
                    }[];
                    label: string;
                    narrative?: string;
                    reasoning?: string;
                    scenarioExtensions?: Record<string, unknown>;
                    score?: { label: string; max: number; min: number; value: number };
                    time: number;
                    worldSnapshot?: {
                        capacities?: Record<string, number>;
                        environment?: Record<string, (...) | (...) | (...) | (...)>;
                        metrics: Record<string, number>;
                        politics?: Record<string, (...) | (...) | (...) | (...)>;
                        scenarioExtensions?: Record<string, unknown>;
                        statuses?: Record<string, (...) | (...) | (...)>;
                    };
                }[];
                timeUnit: { plural: string; singular: string };
            };
        }
        • Optionalaborted?: boolean
        • Optionalassumptions?: string[]

          Assumptions held true during the simulation.

        • Optionalcitations?: { context: string; doi?: string; text: string; url: string }[]
        • Optionalcost?: {
              breakdown?: Record<string, number>;
              cachedReadTokens?: number;
              cacheSavingsUSD?: number;
              inputTokens?: number;
              llmCalls?: number;
              outputTokens?: number;
              totalUSD: number;
          }
          • Optionalbreakdown?: Record<string, number>

            Per-site / per-model breakdown: { director: 0.12, departments: 0.34 }.

          • OptionalcachedReadTokens?: number
          • OptionalcacheSavingsUSD?: number
          • OptionalinputTokens?: number
          • OptionalllmCalls?: number
          • OptionaloutputTokens?: number
          • totalUSD: number
        • Optionaldecisions?: {
              actor?: string;
              choice: string;
              outcome?:
                  | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
              rationale?: string;
              reasoning?: string;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
          }[]

          Every decision made during the run — one per commander choice in turn-loop.

        • Optionaldisclaimer?: string

          Scenario-supplied disclaimer (digital-twin simulations use this for medical / professional caveats).

        • OptionalfinalState?: {
              capacities?: Record<string, number>;
              environment?: Record<string, string | number | boolean>;
              metrics: Record<string, number>;
              politics?: Record<string, string | number | boolean>;
              scenarioExtensions?: Record<string, unknown>;
              statuses?: Record<string, string | boolean>;
          }
          • Optionalcapacities?: Record<string, number>

            Capacity constraints: life support, housing, budget.

          • Optionalenvironment?: Record<string, string | number | boolean>

            Environmental conditions: weather, radiation, depth, altitude.

          • metrics: Record<string, number>

            Numeric gauges: food, power, population, morale, VO2max, whatever.

          • Optionalpolitics?: Record<string, string | number | boolean>

            Political/social pressures. Values may be numeric or categorical.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalstatuses?: Record<string, string | boolean>

            Categorical state: governance status, alignment, phase.

        • OptionalfinalSwarm?: {
              agents: {
                  age?: number;
                  agentId: string;
                  alive: boolean;
                  childrenIds?: string[];
                  department: string;
                  featured?: boolean;
                  generation?: number;
                  marsborn?: boolean;
                  mood?: string;
                  name: string;
                  partnerId?: string;
                  psychScore?: number;
                  rank?: "junior" | "senior" | "lead" | "chief";
                  role: string;
                  shortTermMemory?: string[];
              }[];
              births?: number;
              deaths?: number;
              morale?: number;
              population: number;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
              turn: number;
          }

          Final agent-swarm roster at end-of-run. Pairs with finalState: the world snapshot is the macro view (metrics, statuses), the swarm snapshot is the micro view (every agent's role, mood, family edges, memory). Populated in turn-loop runs that exercised the swarm. Use WorldModel.swarm() for the live equivalent during a run.

          • agents: {
                age?: number;
                agentId: string;
                alive: boolean;
                childrenIds?: string[];
                department: string;
                featured?: boolean;
                generation?: number;
                marsborn?: boolean;
                mood?: string;
                name: string;
                partnerId?: string;
                psychScore?: number;
                rank?: "junior" | "senior" | "lead" | "chief";
                role: string;
                shortTermMemory?: string[];
            }[]

            Every agent in the swarm at snapshot time, alive or dead.

          • Optionalbirths?: number

            Number of births this turn.

          • Optionaldeaths?: number

            Number of deaths this turn.

          • Optionalmorale?: number

            Aggregate morale 0..1 (population-weighted).

          • population: number

            Aggregate counts derived from agents.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • time: number

            Scenario time at snapshot (years/quarters/ticks per scenario).

          • turn: number

            Turn number this snapshot was taken at (0-indexed).

        • Optionalfingerprint?: Record<string, string | number>

          Loose classification scores. Paracosm heritage; scenarios may extend.

        • OptionalforgedTools?: {
              approved: boolean;
              confidence?: number;
              department?: string;
              description?: string;
              name: string;
          }[]
        • Optionalintervention?: {
              adherenceProfile?: { expected: number; risks?: string[] };
              category?: string;
              description: string;
              duration?: { unit: string; value: number };
              id: string;
              mechanism?: string;
              name: string;
              scenarioExtensions?: Record<string, unknown>;
              targetBehaviors?: string[];
          }

          Intervention being tested on the subject.

        • OptionalleveragePoints?: string[]

          Actionable leverage points for consumers of the artifact.

        • metadata: {
              completedAt?: string;
              forkedFrom?: { atTurn: number; parentRunId: string };
              mode: "turn-loop" | "batch-trajectory" | "batch-point";
              runId: string;
              scenario: { id: string; name: string; version?: string };
              scenarioExtensions?: Record<string, unknown>;
              seed?: number;
              startedAt: string;
          }

          Required. Identifies the run + scenario + mode.

          • OptionalcompletedAt?: string
          • OptionalforkedFrom?: { atTurn: number; parentRunId: string }

            When this run was produced by forking a prior run, records the parent run-id + the turn at which the fork happened. Consumers walking a fork chain follow this link transitively through stored artifacts. Omitted for fresh (non-forked) runs.

            Added in 0.7.x with the WorldModel.fork() API. Additive + optional; no COMPILE_SCHEMA_VERSION bump required.

          • mode: "turn-loop" | "batch-trajectory" | "batch-point"
          • runId: string

            Unique identifier for this run. UUID, slug, or host-assigned id.

          • scenario: { id: string; name: string; version?: string }
            • id: string
            • name: string
            • Optionalversion?: string

              Scenario version; not artifact version. Optional.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalseed?: number

            Absent for non-deterministic runs (LLM-only synthesis without a seeded kernel).

          • startedAt: string
        • Optionaloverview?: string

          Short headline summary. Digital-twin overview, paracosm verdict's summary, a game's end-of-run narrator line.

        • OptionalproviderError?:
              | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null
        • OptionalriskFlags?: {
              detail: string;
              label: string;
              scenarioExtensions?: Record<string, unknown>;
              severity: "low" | "medium" | "high";
          }[]

          Risk callouts. Maps to digital-twin risk_flags after camelCase rename.

        • OptionalscenarioExtensions?: Record<string, unknown>
        • OptionalspecialistNotes?: {
              confidence?: number;
              detail?: {
                  citations?: {
                      context: string;
                      doi?: string;
                      text: string;
                      url: string;
                  }[];
                  openQuestions?: string[];
                  opportunities?: { description: string; impact: "low"
                  | "medium"
                  | "high" }[];
                  recommendedActions?: string[];
                  risks?: {
                      description: string;
                      severity: "low" | "medium" | "high" | "critical";
                  }[];
              };
              domain: string;
              scenarioExtensions?: Record<string, unknown>;
              summary: string;
              trajectory?: "positive" | "negative" | "neutral" | "mixed";
          }[]

          Specialist analyses across domains. Flat list; multiple entries per domain/turn OK.

        • Optionalsubject?: {
              conditions?: string[];
              id: string;
              markers?: {
                  category?: string;
                  id: string;
                  interpretation?: string;
                  value?: string;
              }[];
              name: string;
              personality?: Record<string, number>;
              profile?: Record<string, unknown>;
              scenarioExtensions?: Record<string, unknown>;
              signals?: {
                  label: string;
                  recordedAt?: string;
                  unit?: string;
                  value: string | number;
              }[];
          }

          Subject being simulated (person, character, organism, vessel, etc.).

        • Optionaltrajectory?: {
              points?: {
                  metrics: Record<string, number>;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              timepoints?: {
                  confidence?: number;
                  highlightMetrics?: {
                      color?: string;
                      direction?: "up"
                      | "down"
                      | "stable";
                      label: string;
                      value: string;
                  }[];
                  label: string;
                  narrative?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  score?: { label: string; max: number; min: number; value: number };
                  time: number;
                  worldSnapshot?: {
                      capacities?: Record<string, number>;
                      environment?: Record<string, (...) | (...) | (...) | (...)>;
                      metrics: Record<string, number>;
                      politics?: Record<string, (...) | (...) | (...) | (...)>;
                      scenarioExtensions?: Record<string, unknown>;
                      statuses?: Record<string, (...) | (...) | (...)>;
                  };
              }[];
              timeUnit: { plural: string; singular: string };
          }

          Labeled trajectory of the simulation. trajectory.points for sparklines, trajectory.timepoints for rich labeled snapshots. Both optional; at least one populated in turn-loop and batch-trajectory modes.

          • Optionalpoints?: {
                metrics: Record<string, number>;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[]

            Lightweight per-sample metric records; good for sparklines.

          • Optionaltimepoints?: {
                confidence?: number;
                highlightMetrics?: {
                    color?: string;
                    direction?: "up" | "down" | "stable";
                    label: string;
                    value: string;
                }[];
                label: string;
                narrative?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                score?: { label: string; max: number; min: number; value: number };
                time: number;
                worldSnapshot?: {
                    capacities?: Record<string, number>;
                    environment?: Record<string, (...) | (...) | (...) | (...)>;
                    metrics: Record<string, number>;
                    politics?: Record<string, (...) | (...) | (...) | (...)>;
                    scenarioExtensions?: Record<string, unknown>;
                    statuses?: Record<string, (...) | (...) | (...)>;
                };
            }[]

            Rich labeled snapshots with narrative + score; good for timepoint cards.

          • timeUnit: { plural: string; singular: string }

      Returns Record<string, SwarmAgent[]>

    • Build a family-tree adjacency map from the swarm: parent agentId → list of direct-descendant agentIds. Edge direction is parent→child; walk the map recursively to render multi-generation trees. Founders (no parent in the swarm) are the roots. Delegates to import('paracosm/swarm').swarmFamilyTree.

      Returns an empty object when the run produced no swarm or the scenario does not track family edges.

      Parameters

      • artifact: {
            aborted?: boolean;
            assumptions?: string[];
            citations?: { context: string; doi?: string; text: string; url: string }[];
            cost?: {
                breakdown?: Record<string, number>;
                cachedReadTokens?: number;
                cacheSavingsUSD?: number;
                inputTokens?: number;
                llmCalls?: number;
                outputTokens?: number;
                totalUSD: number;
            };
            decisions?: {
                actor?: string;
                choice: string;
                outcome?: | "risky_success"
                | "risky_failure"
                | "conservative_success"
                | "conservative_failure";
                rationale?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[];
            disclaimer?: string;
            finalState?: {
                capacities?: Record<string, number>;
                environment?: Record<string, string | number | boolean>;
                metrics: Record<string, number>;
                politics?: Record<string, string | number | boolean>;
                scenarioExtensions?: Record<string, unknown>;
                statuses?: Record<string, string | boolean>;
            };
            finalSwarm?: {
                agents: {
                    age?: number;
                    agentId: string;
                    alive: boolean;
                    childrenIds?: string[];
                    department: string;
                    featured?: boolean;
                    generation?: number;
                    marsborn?: boolean;
                    mood?: string;
                    name: string;
                    partnerId?: string;
                    psychScore?: number;
                    rank?: "junior"
                    | "senior"
                    | "lead"
                    | "chief";
                    role: string;
                    shortTermMemory?: string[];
                }[];
                births?: number;
                deaths?: number;
                morale?: number;
                population: number;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
                turn: number;
            };
            fingerprint?: Record<string, string | number>;
            forgedTools?: {
                approved: boolean;
                confidence?: number;
                department?: string;
                description?: string;
                name: string;
            }[];
            intervention?: {
                adherenceProfile?: { expected: number; risks?: string[] };
                category?: string;
                description: string;
                duration?: { unit: string; value: number };
                id: string;
                mechanism?: string;
                name: string;
                scenarioExtensions?: Record<string, unknown>;
                targetBehaviors?: string[];
            };
            leveragePoints?: string[];
            metadata: {
                completedAt?: string;
                forkedFrom?: { atTurn: number; parentRunId: string };
                mode: "turn-loop" | "batch-trajectory" | "batch-point";
                runId: string;
                scenario: { id: string; name: string; version?: string };
                scenarioExtensions?: Record<string, unknown>;
                seed?: number;
                startedAt: string;
            };
            overview?: string;
            providerError?: | {
                actionUrl?: string;
                kind: "unknown"
                | "auth"
                | "quota"
                | "rate_limit"
                | "network";
                message: string;
                provider: string;
            }
            | null;
            riskFlags?: {
                detail: string;
                label: string;
                scenarioExtensions?: Record<string, unknown>;
                severity: "low" | "medium" | "high";
            }[];
            scenarioExtensions?: Record<string, unknown>;
            specialistNotes?: {
                confidence?: number;
                detail?: {
                    citations?: {
                        context: string;
                        doi?: string;
                        text: string;
                        url: string;
                    }[];
                    openQuestions?: string[];
                    opportunities?: {
                        description: string;
                        impact: "low"
                        | "medium"
                        | "high";
                    }[];
                    recommendedActions?: string[];
                    risks?: {
                        description: string;
                        severity: "low"
                        | "medium"
                        | "high"
                        | "critical";
                    }[];
                };
                domain: string;
                scenarioExtensions?: Record<string, unknown>;
                summary: string;
                trajectory?: "positive" | "negative" | "neutral" | "mixed";
            }[];
            subject?: {
                conditions?: string[];
                id: string;
                markers?: {
                    category?: string;
                    id: string;
                    interpretation?: string;
                    value?: string;
                }[];
                name: string;
                personality?: Record<string, number>;
                profile?: Record<string, unknown>;
                scenarioExtensions?: Record<string, unknown>;
                signals?: {
                    label: string;
                    recordedAt?: string;
                    unit?: string;
                    value: string | number;
                }[];
            };
            trajectory?: {
                points?: {
                    metrics: Record<string, number>;
                    scenarioExtensions?: Record<string, unknown>;
                    time: number;
                }[];
                timepoints?: {
                    confidence?: number;
                    highlightMetrics?: {
                        color?: string;
                        direction?: "up"
                        | "down"
                        | "stable";
                        label: string;
                        value: string;
                    }[];
                    label: string;
                    narrative?: string;
                    reasoning?: string;
                    scenarioExtensions?: Record<string, unknown>;
                    score?: { label: string; max: number; min: number; value: number };
                    time: number;
                    worldSnapshot?: {
                        capacities?: Record<string, number>;
                        environment?: Record<string, (...) | (...) | (...) | (...)>;
                        metrics: Record<string, number>;
                        politics?: Record<string, (...) | (...) | (...) | (...)>;
                        scenarioExtensions?: Record<string, unknown>;
                        statuses?: Record<string, (...) | (...) | (...)>;
                    };
                }[];
                timeUnit: { plural: string; singular: string };
            };
        }
        • Optionalaborted?: boolean
        • Optionalassumptions?: string[]

          Assumptions held true during the simulation.

        • Optionalcitations?: { context: string; doi?: string; text: string; url: string }[]
        • Optionalcost?: {
              breakdown?: Record<string, number>;
              cachedReadTokens?: number;
              cacheSavingsUSD?: number;
              inputTokens?: number;
              llmCalls?: number;
              outputTokens?: number;
              totalUSD: number;
          }
          • Optionalbreakdown?: Record<string, number>

            Per-site / per-model breakdown: { director: 0.12, departments: 0.34 }.

          • OptionalcachedReadTokens?: number
          • OptionalcacheSavingsUSD?: number
          • OptionalinputTokens?: number
          • OptionalllmCalls?: number
          • OptionaloutputTokens?: number
          • totalUSD: number
        • Optionaldecisions?: {
              actor?: string;
              choice: string;
              outcome?:
                  | "risky_success"
                  | "risky_failure"
                  | "conservative_success"
                  | "conservative_failure";
              rationale?: string;
              reasoning?: string;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
          }[]

          Every decision made during the run — one per commander choice in turn-loop.

        • Optionaldisclaimer?: string

          Scenario-supplied disclaimer (digital-twin simulations use this for medical / professional caveats).

        • OptionalfinalState?: {
              capacities?: Record<string, number>;
              environment?: Record<string, string | number | boolean>;
              metrics: Record<string, number>;
              politics?: Record<string, string | number | boolean>;
              scenarioExtensions?: Record<string, unknown>;
              statuses?: Record<string, string | boolean>;
          }
          • Optionalcapacities?: Record<string, number>

            Capacity constraints: life support, housing, budget.

          • Optionalenvironment?: Record<string, string | number | boolean>

            Environmental conditions: weather, radiation, depth, altitude.

          • metrics: Record<string, number>

            Numeric gauges: food, power, population, morale, VO2max, whatever.

          • Optionalpolitics?: Record<string, string | number | boolean>

            Political/social pressures. Values may be numeric or categorical.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalstatuses?: Record<string, string | boolean>

            Categorical state: governance status, alignment, phase.

        • OptionalfinalSwarm?: {
              agents: {
                  age?: number;
                  agentId: string;
                  alive: boolean;
                  childrenIds?: string[];
                  department: string;
                  featured?: boolean;
                  generation?: number;
                  marsborn?: boolean;
                  mood?: string;
                  name: string;
                  partnerId?: string;
                  psychScore?: number;
                  rank?: "junior" | "senior" | "lead" | "chief";
                  role: string;
                  shortTermMemory?: string[];
              }[];
              births?: number;
              deaths?: number;
              morale?: number;
              population: number;
              scenarioExtensions?: Record<string, unknown>;
              time: number;
              turn: number;
          }

          Final agent-swarm roster at end-of-run. Pairs with finalState: the world snapshot is the macro view (metrics, statuses), the swarm snapshot is the micro view (every agent's role, mood, family edges, memory). Populated in turn-loop runs that exercised the swarm. Use WorldModel.swarm() for the live equivalent during a run.

          • agents: {
                age?: number;
                agentId: string;
                alive: boolean;
                childrenIds?: string[];
                department: string;
                featured?: boolean;
                generation?: number;
                marsborn?: boolean;
                mood?: string;
                name: string;
                partnerId?: string;
                psychScore?: number;
                rank?: "junior" | "senior" | "lead" | "chief";
                role: string;
                shortTermMemory?: string[];
            }[]

            Every agent in the swarm at snapshot time, alive or dead.

          • Optionalbirths?: number

            Number of births this turn.

          • Optionaldeaths?: number

            Number of deaths this turn.

          • Optionalmorale?: number

            Aggregate morale 0..1 (population-weighted).

          • population: number

            Aggregate counts derived from agents.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • time: number

            Scenario time at snapshot (years/quarters/ticks per scenario).

          • turn: number

            Turn number this snapshot was taken at (0-indexed).

        • Optionalfingerprint?: Record<string, string | number>

          Loose classification scores. Paracosm heritage; scenarios may extend.

        • OptionalforgedTools?: {
              approved: boolean;
              confidence?: number;
              department?: string;
              description?: string;
              name: string;
          }[]
        • Optionalintervention?: {
              adherenceProfile?: { expected: number; risks?: string[] };
              category?: string;
              description: string;
              duration?: { unit: string; value: number };
              id: string;
              mechanism?: string;
              name: string;
              scenarioExtensions?: Record<string, unknown>;
              targetBehaviors?: string[];
          }

          Intervention being tested on the subject.

        • OptionalleveragePoints?: string[]

          Actionable leverage points for consumers of the artifact.

        • metadata: {
              completedAt?: string;
              forkedFrom?: { atTurn: number; parentRunId: string };
              mode: "turn-loop" | "batch-trajectory" | "batch-point";
              runId: string;
              scenario: { id: string; name: string; version?: string };
              scenarioExtensions?: Record<string, unknown>;
              seed?: number;
              startedAt: string;
          }

          Required. Identifies the run + scenario + mode.

          • OptionalcompletedAt?: string
          • OptionalforkedFrom?: { atTurn: number; parentRunId: string }

            When this run was produced by forking a prior run, records the parent run-id + the turn at which the fork happened. Consumers walking a fork chain follow this link transitively through stored artifacts. Omitted for fresh (non-forked) runs.

            Added in 0.7.x with the WorldModel.fork() API. Additive + optional; no COMPILE_SCHEMA_VERSION bump required.

          • mode: "turn-loop" | "batch-trajectory" | "batch-point"
          • runId: string

            Unique identifier for this run. UUID, slug, or host-assigned id.

          • scenario: { id: string; name: string; version?: string }
            • id: string
            • name: string
            • Optionalversion?: string

              Scenario version; not artifact version. Optional.

          • OptionalscenarioExtensions?: Record<string, unknown>
          • Optionalseed?: number

            Absent for non-deterministic runs (LLM-only synthesis without a seeded kernel).

          • startedAt: string
        • Optionaloverview?: string

          Short headline summary. Digital-twin overview, paracosm verdict's summary, a game's end-of-run narrator line.

        • OptionalproviderError?:
              | {
                  actionUrl?: string;
                  kind: "unknown"
                  | "auth"
                  | "quota"
                  | "rate_limit"
                  | "network";
                  message: string;
                  provider: string;
              }
              | null
        • OptionalriskFlags?: {
              detail: string;
              label: string;
              scenarioExtensions?: Record<string, unknown>;
              severity: "low" | "medium" | "high";
          }[]

          Risk callouts. Maps to digital-twin risk_flags after camelCase rename.

        • OptionalscenarioExtensions?: Record<string, unknown>
        • OptionalspecialistNotes?: {
              confidence?: number;
              detail?: {
                  citations?: {
                      context: string;
                      doi?: string;
                      text: string;
                      url: string;
                  }[];
                  openQuestions?: string[];
                  opportunities?: { description: string; impact: "low"
                  | "medium"
                  | "high" }[];
                  recommendedActions?: string[];
                  risks?: {
                      description: string;
                      severity: "low" | "medium" | "high" | "critical";
                  }[];
              };
              domain: string;
              scenarioExtensions?: Record<string, unknown>;
              summary: string;
              trajectory?: "positive" | "negative" | "neutral" | "mixed";
          }[]

          Specialist analyses across domains. Flat list; multiple entries per domain/turn OK.

        • Optionalsubject?: {
              conditions?: string[];
              id: string;
              markers?: {
                  category?: string;
                  id: string;
                  interpretation?: string;
                  value?: string;
              }[];
              name: string;
              personality?: Record<string, number>;
              profile?: Record<string, unknown>;
              scenarioExtensions?: Record<string, unknown>;
              signals?: {
                  label: string;
                  recordedAt?: string;
                  unit?: string;
                  value: string | number;
              }[];
          }

          Subject being simulated (person, character, organism, vessel, etc.).

        • Optionaltrajectory?: {
              points?: {
                  metrics: Record<string, number>;
                  scenarioExtensions?: Record<string, unknown>;
                  time: number;
              }[];
              timepoints?: {
                  confidence?: number;
                  highlightMetrics?: {
                      color?: string;
                      direction?: "up"
                      | "down"
                      | "stable";
                      label: string;
                      value: string;
                  }[];
                  label: string;
                  narrative?: string;
                  reasoning?: string;
                  scenarioExtensions?: Record<string, unknown>;
                  score?: { label: string; max: number; min: number; value: number };
                  time: number;
                  worldSnapshot?: {
                      capacities?: Record<string, number>;
                      environment?: Record<string, (...) | (...) | (...) | (...)>;
                      metrics: Record<string, number>;
                      politics?: Record<string, (...) | (...) | (...) | (...)>;
                      scenarioExtensions?: Record<string, unknown>;
                      statuses?: Record<string, (...) | (...) | (...)>;
                  };
              }[];
              timeUnit: { plural: string; singular: string };
          }

          Labeled trajectory of the simulation. trajectory.points for sparklines, trajectory.timepoints for rich labeled snapshots. Both optional; at least one populated in turn-loop and batch-trajectory modes.

          • Optionalpoints?: {
                metrics: Record<string, number>;
                scenarioExtensions?: Record<string, unknown>;
                time: number;
            }[]

            Lightweight per-sample metric records; good for sparklines.

          • Optionaltimepoints?: {
                confidence?: number;
                highlightMetrics?: {
                    color?: string;
                    direction?: "up" | "down" | "stable";
                    label: string;
                    value: string;
                }[];
                label: string;
                narrative?: string;
                reasoning?: string;
                scenarioExtensions?: Record<string, unknown>;
                score?: { label: string; max: number; min: number; value: number };
                time: number;
                worldSnapshot?: {
                    capacities?: Record<string, number>;
                    environment?: Record<string, (...) | (...) | (...) | (...)>;
                    metrics: Record<string, number>;
                    politics?: Record<string, (...) | (...) | (...) | (...)>;
                    scenarioExtensions?: Record<string, unknown>;
                    statuses?: Record<string, (...) | (...) | (...)>;
                };
            }[]

            Rich labeled snapshots with narrative + score; good for timepoint cards.

          • timeUnit: { plural: string; singular: string }

      Returns Record<string, string[]>

    scenario: ScenarioPackage

    The underlying compiled scenario. Exposed so callers can reuse the same compiled package across custom integrations.