Open app
Moonborn — Developers

Brand voice variants

Lineage and fork-tree governance for brand teams that need formal vs casual, B2B vs B2C, or EN vs DE variants of the same brand persona — without losing the through-line.

The problem

Brand teams routinely need multiple voice variants of the same character: a formal version for sales materials, a casual one for social, a stricter regulatory version for finance, a German variant for the DACH region. Maintaining six system prompts that should all feel like "the same brand" is a slow drift into inconsistency — and a hidden quality risk every time someone tweaks one and forgets the others.

How Moonborn solves it

Personas are a versioned, forkable graph. Three capabilities do the heavy lifting:

  • Fork tree with attribution. Every variant is linked to its ancestor. The lineage view shows who forked what, when, and why.
  • Refine modes. Lock preserves a specific layer (Soul intact, edit Mask). Cascade lets you edit Soul and have Self/Mask/Surface regenerate from the new core. Manual fine-tunes a single field. Refine runs axis transforms — "darker," "warmer," "more authoritative" — against the existing persona.
  • Distinctiveness measurement. Cosine distance against a baseline (ChatGPT default, a brand baseline, or any other persona) ensures every variant still reads as you.

Workflow

  1. Generate the canonical brand persona.
  2. Fork it per variant.
  3. Refine each fork via the appropriate mode — usually a Mask refine for tone or a Surface refine for locale.
  4. Audit each variant against the canonical for distinctiveness.
  5. Deploy each behind its own persona ID (or via the OpenAI-compatible endpoint with model: "persona://<variant_id>").
const canonical = await client.personas.create({
 intent: 'Brand voice for Moonborn — Character Consistency Engine. Scholarly, character-centric, technically precise. Editorial restraint.',
});
 
const casual = await client.personas.fork(canonical.id, {
 refine: { mode: 'mask', axis: 'warmer', amount: 0.4 },
 note: 'Social media variant',
});
 
const formal = await client.personas.fork(canonical.id, {
 refine: { mode: 'mask', axis: 'more-authoritative', amount: 0.3 },
 note: 'Sales materials variant',
});
 
const tr = await client.personas.fork(canonical.id, {
 refine: { mode: 'surface', fields: { language: 'tr' } },
 note: 'Turkish locale',
});

Lineage as governance

The lineage view shows the full fork tree, the attribution chain, and the audit log for every edit. The audit log is immutable, hash-chained, and retained for at least a year — longer on Enterprise. Schema migrations across major persona versions are handled by a migration job, not by hand-editing rows.

For regulated industries, this turns "brand drift" into a metric and a queue, not a guess.

What this unlocks

  • A/B test brand voice variants in production without losing track of which is which.
  • Per-market localization with the four-layer model intact across locales — see Soul, Self, Mask, Surface.
  • Brand-guideline compliance via distinctiveness score thresholds. A variant that scores below the threshold against the canonical is flagged before it ships.

Tier

Pro tier or above for fork, refine, and distinctiveness measurement. Free tier supports read-only fork-tree viewing for shared marketplace personas.

Next