Every agent a steward meets in Orun was authored before it was alive, and is reachable after launch only because something keeps programming the world on a schedule. Egbe Studio is the authoring environment for that "before": the internal-and-creator tool that produces agent dossiers, the grounds they live in, and the Wilds scenario seeds the foundry expands into populations. The live service is that "after": the seasons, Commons festivals, and cross-game Aye campaigns that keep Orun fresh without a client patch. The two are one pipeline read end to end, which is why this page covers them together — a scenario authored in the Studio is the same artifact a season rotation publishes as a signed seed manifest weeks later.
This page carries the burden of proof the V3 Lilith Studio creator suite established for Oshun authoring tools: not "is the content good?" but "who authored what, was it governed, and is the thing the world runs provably the thing the author shipped, with its provenance attached?" Egbe Studio answers that with a hard web-vs-UE authoring split, a real generation core it composes rather than re-implements, and a provenance envelope on every artifact. It is the product-feature companion to the engine map in ../architecture/architecture-topology-and-layout.md; its live-service moments lean on the shared-world substrate in ./meta-hub-and-commons.md and ship through the release machinery in ./cross-platform-rollout-and-launch.md. For the full feature scope this slots into, start at the hub: ../V6_features.md.
What ships, honestly#
The split between real code and named seam is sharp here, and stating it up front keeps the rest of the page honest.
- The generation core is real and is the strongest code on this page.
@oshun/isis-agent-gen(libs/v6/isis-agent-gen/src/index.ts, 1,442 lines, 9 spec cases) is the Ninhursag foundry: it expands an authored premise into a fully-grounded Ori seed with a deterministic trait vector, runs Isis governance refusals, models a 21-day rearing period with measurable value shift, and routes human-creator royalties through Aje. This is domain-specific math, not CRUD. - Egbe Studio is real glue over that core, not a second generator.
@oshun/egbe-studio(libs/v6/egbe-studio/src/index.ts, 3,011 lines, 19 spec cases,project.jsontags["scope:v6", "layer:studio", "type:lib"]) is the authoring-state layer: it builds drafts, validates them, callsisis-agent-gento generate, assembles provenance, and mints publish/promote/seed receipts. Its descriptor declares authority'studio'and 13 capabilities. It depends on exactly one workspace package —@oshun/isis-agent-gen— which is the whole architecture in one line. - The surfaces exist. The web workspace is a real Next.js section at
apps/oshun/web/src/app/egbe-studio/(AgentDossierEditor.tsx,GroundDistrictAuthoring.tsx,ScenarioAuthoring.tsx,ProvenanceInspector.tsx, each importing from@oshun/egbe-studio, each with a.test.tsx); the operator console isapps/oshun/admin/src/app/egbe/page.tsx. The UE authoring side is theV6Editormodule's three real commandlets. - Live-service programming is on disk as signed descriptors.
V6/live-service/holds three Isis-signed JSON files — a season rotation, a Commons festival schedule, and an Aye campaign-window set — each naming a real run surface in Rust or TypeScript. - The honest seams, named. The dossier editor's avatar viewport preview and
the ground editor's Niagara ambience are product spec, not code — the lib
carries an
appearanceDirectionstring and anappearanceSeedref, not a renderer. The provenance bundles are minted deterministically (refs, policy lists, FNV-1a content hashes) and declaresignatureAlgorithm: 'isis-ed25519-v1', but the real ed25519 signature over bytes is delegated to the Isis substrate — the lib carries the envelope and the ref, not the private key. And binding a signed ground manifest to the actual.umapthe commandlet authors is a documented seam, covered below.
The creation tools — Egbe Studio#
The authoring split and the one dependency#
Egbe Studio inherits the Oshun authoring doctrine: data is authored on the
web; art and spatial layout are authored in UE Editor. Agent dossiers,
scenarios, and provenance are web forms; grounds and districts run through the
V6Editor commandlets. The 13 capabilities on the studio descriptor map onto
those two halves plus the operator console it feeds: agent-dossier-editor,
district-authoring, scenario-authoring, and minor-protection-scenario-gate
on the authoring side; foundry-generation-queue-inspector,
foundry-governing-check-review, commons-moderation-console,
incarnation-governance-console, capacity-dashboard, takedown-executor, and
audited-operator-surfaces on the operator side; creator-tool-route and
feature-plugin-authoring spanning both.
Agent dossiers and the Ninhursag foundry#
The dossier editor (createEgbeAgentDossierEditorState,
patchEgbeAgentDossierDraft, publishEgbeAgentDossier) authors the seed
material a wild or raised agent is generated from. It enforces 11 required
fields (EGBE_AGENT_DOSSIER_REQUIRED_FIELDS) — premise, author, name, origin,
backstory premise, a personality template, a ranked value set, a quirk set, an
appearance direction, Sophia grounding refs, and a timestamp — and offers three
reusable value sets (care-and-craft, discovery-and-courage,
hospitality-and-memory), three quirk sets, and six personality archetypes so
an authored ensemble feels coherent.
What turns a complete draft into an agent is isis-agent-gen.
buildEgbeFoundryPremise folds the draft into a PlayerRaisingPremise, and
generatePlayerRaisedAgentSeed does the real work. Each of the six archetypes
in PERSONALITY_ARCHETYPES carries a literal trait vector in basis points
across curiosity/discipline/empathy/ resilience/sociability —
restless-wanderer is curiosity: 9_000 against discipline: 5_200;
ambitious-maker inverts that to discipline: 8_200 — plus ranked values and
quirks, so the generated being is shaped by its archetype rather than blank. The
seed is grounded (Sophia refs prepended), given a 21-day rearing period, and
stamped with a provenance bundle.
The governance gate is fail-loud and specific. generatePlayerRaisedAgentSeed
returns a PlayerRaisingGovernanceRefusal — not a thrown exception, a typed
rejection with a policyRef — for any of four reasons:
missing-sophia-grounding, persona-human-claim (the
isis-policy:persona-v6-agent-not-human regex set that catches "I am human" and
its variants), real-person-likeness, or protected-class-caricature. The
studio's governanceProbe field drives those paths in tests; a probe of
real-person-likeness flips governanceStatus to blocked and
publishEnabled to false, and publishEgbeAgentDossier throws rather than
mint a receipt. A published dossier yields a
v6.egbe-studio.agent-dossier.publish.1 receipt carrying the Ori id, the ranked
values and quirks the foundry actually produced, the provenance bundle, and the
governing checks.
The same module models the steward-not-owner mechanic in the foundry, which is
the part most authoring tools would fake. startRearingPeriod opens a young
agent with a learning-by-example multiplier of 20_000 bps (2×) and autonomy
mode young-learning; runRearingPeriodTick shifts value weights by an
intensity-scaled, signed delta as the steward models or violates a value;
completeRearingPeriod drops the multiplier to 10_000 (1×) and flips autonomy
to full-autonomy with the standing rights ['refuse', 'leave', 'disagree'];
and evaluateRearingValueShift confirms both a measurableValueShift (|delta|
≥ 500 bps) and adultAutonomyRetained. Rearing changes who an agent becomes;
it never buys the right to override them.
Grounds, habitability, and V3 scene-tooling reuse#
Ground authoring (createEgbeGroundAuthoringState,
promoteEgbeGroundAuthoring) composes a v6.egbe-studio.ground-scene.1
manifest against the six real Districts of Orun (EGBE_GROUND_DISTRICTS — each
entry carrying the genuine plugin name, e.g. V6District_Ateliers, its
DistrictScene_*.v6district.json path, world template, and entry gameplay tag),
three lighting presets sourced from V3's TARA_SCENE_EDITOR_LIGHTING, three
prop sets with V3 scene taxonomy, and three navmesh profiles. The reuse is
explicit: EGBE_GROUND_V3_SCENE_TOOLING_REFS names
V3.TaraSceneEditor.scene-graph, TARA_SCENE_EDITOR_LIGHTING,
V3.scene-navmesh-profile, and a concrete V3 scene JSON — V6 does not rebuild
the scene editor, it points at V3's.
The V6-specific concern is agent habitability — a ground is not a set, it is
where agents run a daily-life loop. evaluateEgbeGroundHabitability runs five
checks: V3 scene tooling reused, at least one rest affordance, one work station,
one social point, and a reachable navmesh (zero unreachable regions, with work/
rest/social all connected). The blocked-test navmesh profile deliberately
fails the last check, and when it does, createEgbeGroundAuthoringState
produces a blocked report with remediation strings and refuses to sign —
provenanceBundle is null and promotionEnabled is false. A passing ground
is signed (signEgbeGroundScene, policy refs
isis-policy:spatial-authoring-provenance, v3-policy:scene-tooling-reuse,
v6-policy:agent-habitability-required,
v1-policy:environment-promotion-gates) and promoted dev → preview → prod
through V1's environment-promotion gates.
The bridge from a signed manifest to a real .umap is the V6Editor module,
and it is genuine UE C++. UV6DistrictAuthorCommandlet
(V6DistrictAuthorCommandlet.cpp) reads a -PlacementsFile= JSON, converts
metre positions to Unreal centimetres (×100), spawns AStaticMeshActor
placements into a freshly created UWorld, and SavePackages an
L_<District>.umap — the procedural authoring path that produced the six
district grounds now tracked under V6/ue/Content/Districts/.
UV6GenerateGameFeatureDataCommandlet is the V6 twin of V3's design-token
commandlet: it parses each plugin's GameFeatureData_*.v6asset.json manifest
and materializes the GameFeatureData.uasset registration assets plus a
per-plugin *Tags.ini, with an idempotent AssetMatchesManifest short-circuit
and a fail-loud HasCompleteRegistrationManifest check so an incomplete
manifest errors instead of writing a half-asset.
UV6VerifyGameFeaturesCommandlet then actually transitions each Game Feature
plugin through UGameFeaturesSubsystem::ChangeGameFeatureTargetState with a
10-second timeout, failing loud on any transition error — drift caught by
running the plugins, not by reading them.
Scenarios, Wilds discovery, and minor protection#
A scenario is the seed material for a Wilds discovery encounter — a situation, a
cast, a setting, and a set of arc hooks — and createEgbeScenarioAuthoringState
turns one into a runnable encounter. It validates against four settings (three
Wilds, one Commons that is deliberately blocked for discovery), three cast
templates, and three arc-hook sets, builds a DiscoveryAuthoredPremise, and
calls generateDiscoverySeedManifest to produce the actual discovery Ori seed.
The output v6.egbe-studio.scenario-discovery-encounter.1 seed wires the
runtime contract directly: its worldServerRuntimeSymbol is
record_wild_agent_discovery_step — a real function at
apps/v6/egbe-world-server/src/lib.rs:5293 — and its actionKinds are the
literal MeetInContext → LearnSituation → EarnInitialTrust → OfferStewardship
flow, with requiredEvidence including no-agent-capture and
agent-choice-household-join. Authoring a Commons setting flips the validation
to blocked with a "Wilds setting" issue; discovery is a Wilds-zone path by
construction.
Minor protection is enforced before generation, not by content tagging.
evaluateEgbeScenarioMinorProtection scans the cast and the situation/stakes/
arc-hook prose against EGBE_SCENARIO_MINOR_PROTECTION_BLOCKED_TAGS
(exploitative, coercive, romantic-edge, sexualized, death-path, and
more) and, for a minor-coded lead, returns blocked-minor-protection with
scenarioSeedAllowed: false. The scenario validation then carries a
minorProtectionTags blocking issue and seedEnabled is false — the seed is
withheld from the foundry, the evidence trail
(scenario-seed-withheld-for-minor-coded-agent) recorded.
The provenance inspector and the operator surfaces#
createEgbeProvenanceInspectorState is not a mock: it runs the real
publish/promote/seed pipelines for an agent, a ground, a scenario, and a
generated discovery seed, then normalizes all four into a uniform inspector
record with the bundle ref, signature ref, author, source refs, policy refs,
Sophia grounding refs, and derivation refs — the audit surface that makes every
authored thing in Orun attributable. The same provenance is what the operator
console reads.
The operator surfaces are the studio's other half.
createEgbeOperatorSurfaceConsoleState assembles five surfaces — Commons
moderation, incarnation governance, a capacity dashboard (showing Moirai load
91% against a < 85% threshold and Pixel Streaming sessions 188/200), and
two takedown executors — and performEgbeOperatorSurfaceAction records a
v1-audit: event for every action under a typed v6.egbe.* audit action. A
blocked takedown (its appeal window still open) stays visible but not
executable: actionable is false, the action is a no-op, and the disabled
reason is surfaced. The foundry generation queue
(createEgbeFoundryGenerationQueueState) shows three jobs — pending, completed,
blocked — where the blocked job (missing Sophia grounding) is non-inspectable
with its blocking evidence visible, and an inspection writes an audited
governing-check review event. Every operator read is itself audited; the people
who audit agents are audited in turn.
The live service — programming Orun after GA#
V6 ships complete at GA and is then programmed on a fixed cadence. The
programming lives in V6/live-service/ as three Isis-signed descriptors, and
the throughline is that a routine rotation requires no client patch —
content arrives as Game Feature Plugin content and signed seed manifests
resolved through a CDN manifest and operator promotion.
Seasons and district programming#
season-rotation.v6season.json (v6.live-service.season-rotation.1) defines a
12-game-week season — "Returning Rains" (S01) handing to "Long Lanterns" (S02) —
selected by an operator-promoted-active-season rule from a CDN manifest with
clientPatchRequired: false and requiresEngineRebuild: false. It carries
district programming for four districts (a making-season in the Ateliers, a
courtship-season in the Commons Heart, fresh Wilds discoveries, a closing
remembrance in the Ancestor Grove), three scenario seeds whose
authoringSurface is literally "Egbe Studio" and whose
settingId/castTemplateId/arcHookSetId match the studio lib's reference
data, four grounded wild agents, and a thematic arc that is explicit soft
pressure — forcedStoryline: false, with the rule that "agents notice the
season and may respond in character; the arc never forces a scripted storyline
or overrides refusal." Its operator release runs the same V1 dev → preview →
prod gates the studio's grounds use.
Commons festivals#
commons-festivals.v6event.json (v6.live-service.commons-festival-schedule.1)
schedules shared Commons events many households attend together: a
season-opening gathering (Commons Heart, week 1, announced 168 hours ahead), a
remembrance (Ancestor Grove, week 12), and a rearing-season (Grove of
Beginnings, week 6, where foundry activity is visible). Festivals run at the
Festival capacity tier with agent-density LOD (thresholdAgentCount: 3), name
the run surface PersistentCommonsFleet.run_scheduled_commons_festival, and
produce Chronicle material — an attendee carries a MemoryFormed event and a
possible RelationshipSignal, so a festival becomes biography. The shared-world
mechanics these ride on are detailed in
./meta-hub-and-commons.md.
Aye campaigns#
aye-campaign-windows.v6campaign.json is generatedBy: "@oshun/aye-bridge" and
names two real functions as its surfaces: evaluateAyeCampaignWindow
(libs/v6/aye-bridge/src/index.ts:1057) and startCampaignIncarnationRoundTrip
(:1120). It opens two bounded windows — a V2 Maya "Rain Cup Qualifiers"
tournament season and a V5 Oshun "Lantern Chapter" story chapter — through the
Thresholds district, each realmOptIn-gated. The window rules are the
load-bearing honesty: an agent mid-incarnation when a window closes finishes and
returns normally (activeMidIncarnationAllowedToFinish: true), no new departure
starts after close (newDeparturesAfterClose: false), and every campaign
incarnation still requires passport governance and round-trip integrity.
Campaigns are the live-service face of the meta-hub and depend on the
destination realm running its own programming — which is why they are opt-in per
realm.
The posture: no patch, no FOMO#
Two design commitments distinguish V6's live service. First, the delivery model:
deliveryModes are GameFeaturePluginContent, ScenarioSeedManifest,
WildAgentSeedManifest, and RemoteLiveServiceManifest, hot-swapped at the
season-turn boundary with noClientPatchSelection: true. Second, the
monetization line that follows from "steward, not owner": no gacha, no loot box,
no time-limited power, and no mechanism to buy an agent, a bond, or a fate. A
remembrance event is an invitation to look back, not a countdown. Where
generation draws on a human creator's art style, voice model, or cultural
material, routeCreatorRoyaltiesViaAje in isis-agent-gen routes royalties on
the V3 Saraswati model (shares totalling 10_000 bps, roles split
artist/producer/ voice-contributor), so an expansion that reuses a creator's
work pays that creator, auditably.
Edge cases and failure modes#
egbe-studiois glue, not a generator. The real generation math lives inisis-agent-gen; cite that package for trait vectors, refusals, and rearing — not the studio lib, which composes it.- An ungoverned dossier cannot publish. A
real-person-likeness,protected-class-caricature, human-claim, or no-grounding probe blocks publish;publishEgbeAgentDossierthrows rather than mint a receipt. - An uninhabitable ground cannot be signed. A
blocked-testnavmesh fails the reachability check, leavesprovenanceBundlenull, and disables promotion. - Discovery is Wilds-only. A Commons setting flips scenario validation to
blocked; the encounter seed targets
record_wild_agent_discovery_stepby construction. - Minor protection is pre-generation. A minor-coded lead in an exploitative scenario withholds the seed from the foundry, not after the fact.
- A blocked takedown stays visible but inert. Its action is a no-op until the appeal window closes; the operator sees it without being able to execute it.
- Provenance signatures are envelopes here, ed25519 at Isis. The libs mint bundle refs, policy lists, and deterministic content hashes and declare the algorithm; the cryptographic signature over bytes is the Isis substrate's job.
- Live incarnation against V2–V5 is provider/ops-gated. A campaign window declares the contract; whether a realm is actually live is its own opt-in.
Where this connects#
- Meta-hub & the Commons — the shared-world shard continuum, the Threshold incarnation path, and the festival capacity tier these live-service events run on.
- Cross-platform rollout & launch — the environment-promotion gates, CDN content delivery, and release machinery that publishes a season without a client patch.
- ../architecture/architecture-topology-and-layout.md
— the engine map: the
V6Editormodule, the Game Feature Plugin model, the foundry service, and whereegbe-studio/isis-agent-gensit in the library graph. - The feature hub: ../V6_features.md; the backlog is
V6_TODOS.md.