Open app
Moonborn — Developers

Persona editing

Four edit modes — Lock, Cascade, Manual, Refine — and how each interacts with the four-layer schema.

A persona isn't frozen at generation. The product surface exposes four named edit modes; the API surface (PATCH /v1/personas/{id} and POST /v1/personas/{id}/refine) packages them as parameters.

Lock

"Don't touch the Soul. I want a different surface."

Lock preserves one or more layers while regenerating the rest. Use it when the core character is right but the demographics need to move (e.g. relocating a persona from Istanbul to Berlin without changing who they are inside).

await client.personas.refine(personaId, {
  mode: 'lock',
  lockLayers: ['soul', 'self', 'mask'],
});

Lock accepts artificial inconsistency: the Mask might be written for a 33-year-old in Istanbul, the new Surface puts them in Berlin at 41 — the audit will flag the mismatch with a warning, but it ships.

Cascade

"Soul changes. Everything downstream must follow."

Cascade is the destructive variant: edit Soul, regenerate Self → Mask → Surface in order, each constrained by the new Soul. Audit re-runs.

await client.personas.refine(personaId, {
  mode: 'cascade',
  layer: 'soul',
  edits: { wound: 'a sibling who left the country' },
});

The fingerprint is recomputed at the end. Use Cascade when the character's core needs to shift; never use it for cosmetic edits.

Manual

"Change one field. Leave the rest."

Manual edits a single field via direct write — no LLM call. The persona's version number bumps; the lineage tree records a manual edit.

await client.personas.refine(personaId, {
  mode: 'manual',
  edits: { 'mask.signaturePhrases': ['fine', 'fair point'] },
});

Manual is the fastest edit mode. It's also the riskiest — there's no audit pass before the change lands. Reserve for cosmetic fixes (typos, missing fields, name spellings).

Refine

"Make this persona darker / warmer / more authoritative."

Refine applies an axis transform — an LLM-as-prompter rewrites a layer along a named axis. Built-in axes: darker, warmer, colder, more-authoritative, more-vulnerable, more-playful. Custom axes via consistency.refine.axes.{name}.prompt config.

await client.personas.refine(personaId, {
  mode: 'refine',
  layer: 'mask',
  axis: 'warmer',
  amount: 0.4, // 0..1
});

The audit checks the refined persona against the original baseline — too far is a flagged outcome, the user accepts or rejects.

Versioning

Every edit creates a new persona version (the persona-versions feature owns this). The full history is reachable via GET /v1/personas/{id}/versions, diffable, and rollback-able. See Lineage + fork tree for the cross-persona view.

Tier

All four modes are Free-and-up. Custom Refine axes are Pro+.