Skip to main content

Overview

Personas describe who is asking — for example “CEO of a small enterprise” or “Freelancer”. They are separate from Assistants, which define which agent runs the conversation. A user picks a persona once (or per conversation) so the report writer receives name, email, profile free text, and optional structured gating answers. Navigate to Admin > Settings > Personas.
Personas are off by default. Turn them on under System Settings before end users see any persona UI. Admin CRUD remains available while the feature is off so you can seed personas first.

Feature flags

Two settings in Admin > Settings > System Settings > CORE control rollout:
If a deployment already has REQUIRED_PERSONAS=True from an earlier config, you must also set PERSONAS_ENABLED=True or the feature stays dark.

Behavior matrix

When the per-conversation Use persona toggle is off, identity still injects but persona gating nodes and the persona memory blob do not run.

Permissions

Persona admin routes require AI Managers (access_ai_admin) write access for create, update, delete, and gating-form generation. Any authenticated user may call GET /api/personas/choices/ when PERSONAS_ENABLED is on — the response uses a slim serializer (no operator-only fields).

Creating a persona

Gating form workflow

  1. Write a Gating prompt describing what to ask (checklist style works well).
  2. Click Generate form — an LLM builds structured gating_questions.
  3. Preview the form in the drawer before saving.
  4. Regenerate after changing the prompt; a stale-form warning appears if the prompt drifted during generation.
A persona can be active with an empty gating form ({}) if you never generate one or the gating prompt is blank (generation returns 400). Users can still select it; they only see the free-text field and any empty question list. Generate the form before requiring personas at login.

Graph steering

When graph_node_name is set and the conversation has persona pipeline enabled, Cypher generation receives steering text for that node. If graph_node_name is blank, no steering snippet is injected — even if cypher_instructions is set. Set the graph node name only after matching Persona nodes exist in your graph ontology.

Deployment checklist

1

Run migrations

Apply Django migrations so PERSONAS_ENABLED and REQUIRED_PERSONAS exist in the config table (common.0020_enable_persona_dashboard_settings).
2

Seed configuration

Run npm run config:seed (or add both keys in Django admin) so the flags appear in System Settings.
3

Create personas

Add at least one active persona and generate gating forms where needed.
4

Enable master flag

Set PERSONAS_ENABLED=True in System Settings > CORE.
5

Optional: require at login

Set REQUIRED_PERSONAS=True only after personas exist and forms are ready.