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+.