Brand-Varianten forken
Nimm eine kanonische Marken-Persona, forke sie in formal / casual / locale-spezifische Varianten ohne die Through-Line zu verlieren. Refine, Lineage, Distinctiveness im Durchlauf.
Marken-Teams pflegen typischerweise mehrere Voice-Varianten — einen seriösen B2B-Ton, einen verspielten Social-Ton, eine EN- und eine DE-Version. Handkuratiert sind das sechs Prompts, die synchron bleiben müssen. Forking macht daraus eine einzelne kanonische Persona mit einem nachverfolgten Variantenbaum.
1. Die kanonische Persona bauen
Beginn mit der autoritativsten Stimme — der, von der andere forken. Behandle ihre Soul + Self als „Brand-DNA"; Downstream-Varianten sollten diese Layer bewahren.
const brand = await client.personas.createPersona({
intent:
'Markenstimme für Moonborn — Character Consistency Engine. Wissenschaftlich, charakter-zentriert, technisch präzise. Editoriale Zurückhaltung. Mit konkretem Detail führen, Sales-Floskeln meiden.',
workspaceId: 'ws_...',
});Audit und Provokationstests laufen automatisch; ziele auf ≥ 4.0/5 im Audit, bevor du forkest. Falls niedriger, refine vor dem Hinzufügen von Varianten.
2. Eine formale Variante forken
POST /v1/personas/{id}/fork kopiert die Persona und schreibt die
Parent-Kante. Paare das mit einem refine-Argument, um im selben
Call eine Achsen-Transformation anzuwenden:
const formal = await client.personas.fork({
id: brand.id,
refine: {
mode: 'refine',
layer: 'mask',
axis: 'more-authoritative',
amount: 0.4,
},
note: 'Sales materials variant',
});Der Fork hält Soul + Self gelockt (die Brand-DNA) und schreibt nur die Mask neu. Audit läuft erneut gegen die neue Mask; Distinctiveness vergleicht die formale Variante gegen die kanonische (Custom-Baseline), um Drift in Richtung einer generischen Corporate-Stimme zu fangen.
3. Eine Casual-Variante forken
const casual = await client.personas.fork({
id: brand.id,
refine: {
mode: 'refine',
layer: 'mask',
axis: 'warmer',
amount: 0.45,
},
note: 'Social media + community variant',
});4. Eine deutsche Locale-Variante forken
Für Multi-Locale refine die Surface (Sprache + kulturelle Details), während Soul / Self / Mask gelockt bleiben:
const de = await client.personas.fork({
id: brand.id,
refine: {
mode: 'lock',
lockLayers: ['soul', 'self', 'mask'],
edits: {
'surface.language': 'de',
'surface.location': 'Berlin, Deutschland',
},
},
note: 'DE Locale-Variante',
});5. Das Varianten-Set auditieren
const lineage = await client.personas.getLineage({ id: brand.id });
console.log(lineage.children.map((c) => c.id));
// Driften die Varianten aufeinander zu?
const compare = await client.consistency.compareWithOrgPersonas({
personaId: formal.id,
threshold: 0.30,
});
console.log(compare.closest);Die compareWithOrgPersonas-Query gibt die nächste Persona nach
Voice-Fingerprint-Distance zurück. Wenn deine „formale" und
„casual"-Varianten gegeneinander < 0.15 scoren, sind sie während des
Refine kollabiert — der Achsen-Amount war zu klein, oder die
kanonische Mask hat schon zu viel Variabilität kodiert. Refork mit
einem größeren Amount oder refine stattdessen Soul (ein
Cascade-Mode-Edit).
6. Deploy
Jede Variante belichtet ihre eigene Persona-ID. Verdrahte jede ID mit dem passenden Kanal:
formal.id→ deine Sales-E-Mail-Automatisierung.casual.id→ dein Social-Inbox.de.id→ dein deutschsprachiger Support-Agent.
Über den OpenAI-kompatiblen Endpoint ist die Varianten-ID das
model-Feld:
import OpenAI from 'openai';
const oai = new OpenAI({
apiKey: process.env.MOONBORN_API_KEY,
baseURL: 'https://api.moonborn.co/v1/openai',
});
const reply = await oai.chat.completions.create({
model: `persona://${formal.id}`,
messages: [{ role: 'user', content: 'Erzähl mir von Moonborn.' }],
});Weiter
- Das Narrativ: Brand voice variants use case.
- Lineage-Governance: Voice variant lineage governance guide.
- Personas API → Fork.