Core model

A Source is the real person. Their Ally is their persistent visual identity inside Kiduna — one Source → one canonical Ally → several states. Identity is stable; state is fluid: a state may change pose, gaze, expression, cheek sigil, and the celestial field behind the portrait — never who the Ally is. Style is Celestial Enamel: circular enamel portrait medallion, gold rim, deep-umber ground, the canonical palette only (sky = active/relational energy, gold solar, moon cream lunar, mint rare). Warm caricature with dignity — recognizable at 40px, eyes always visible.

The four states — same six Allies throughout
Ally state: OPEN

OPEN — available, welcoming, the default. Direct gaze, relaxed smile; sigil: open ring or four-point spark; field: sunrise discs, cream space, sky arcs.

Ally state: ENGAGED

ENGAGED — actively conversing or collaborating. Lively three-quarter, active eye contact; sigil: linked nodes; field: paired nodes, orbit lines, constellations.

Ally state: FOCUSED

FOCUSED — deliberately working. Gaze slightly beside the viewer toward the task; sigil: diamond compass; field: concentric rings, disciplined radial geometry.

Ally state: DREAMING

DREAMING — imagining, incubating. Gaze slightly upward, eyes visible; sigil: crescent cradling a star; field: open constellations, crescents, rare mint spark.

These four images are presentation cards. Production assets are one square image per Ally per state — mood labels live in UI, never inside the avatar asset.

Fallback — the celestial monogram

Sources who don't want a generated likeness get a Source-approved celestial monogram medallion — same gold rim, same palette, same sizes. This is also the placeholder before onboarding completes. In the Studio Field, any Ally or monogram sits inside the camel + moon-cream Source ring.

Behavior & governance — the short version

OPEN is the fallback. Explicit Source selection outranks automation; product-driven changes must reflect real in-product context (ENGAGED in an active exchange, FOCUSED in a work mode, DREAMING in labeled ideation) — never inferred from cameras, biometrics, or private behavior. Minimum dwell time between changes; reduced-motion gets a crossfade or nothing. Never communicate status through the avatar alone — pair with text (accessible name: "Ally for [name], [state]"). The Source approves the canonical Ally, every material identity change, and may revise, freeze, hide, or retire it. No unapproved cultural costuming, no status props by default, no photoreal/anime/emoji styles, no drifting identity through uncontrolled regeneration. Full spec: allies/ALLY-SYSTEM.md · generation workflow: allies/GENERATION-GUIDE.md · asset specs: allies/IMPLEMENTATION.md.