PRD — Persona Studio & Authoring Tools¶
Doc owner: Justin Audience: Eng, Design, Product Status: v1 (February 2026) Depends on: prd.md (core platform), Portable_Persona_PRD.md (Cartridge spec), PRD 9 (Gateway API)
Implementation Status¶
| Section | Status | Notes |
|---|---|---|
| Persona Passport JSON format | ✅ Shipped | Sage and Echo as curated JSON files |
| 59K+ training examples (Sage) | ✅ Shipped | Hand-authored persona data |
| Relationship stage awareness | ✅ Shipped | Per-stage tone in persona passport |
| Persona memory (JSON + semantic) | ✅ Shipped | Dual storage for persona facts |
| Basic admin panel (/admin) | ✅ Shipped | Memory management only |
| Visual editor (Studio) | ❌ Not Shipped | No visual persona editing |
| Live preview chat | ❌ Not Shipped | No real-time persona testing |
| Consistency scoring (drift) | ❌ Not Shipped | No automated quality measurement |
| Version management UI | ❌ Not Shipped | Git-tracked only, no browsable history |
| Policy overlays (org/team/user) | ❌ Not Shipped | No overlay system |
| Brand consistency dashboard | ❌ Not Shipped | No enterprise persona monitoring |
| Consumer customization (vibe sliders) | ❌ Not Shipped | No user-facing persona tuning |
| Template library | ❌ Not Shipped | No pre-built persona templates |
| A/B testing for personas | ❌ Not Shipped | No variant comparison |
Note: This PRD is largely aspirational. The persona authoring infrastructure (JSON format, training data) exists, but no Studio tooling has been built.
References¶
This PRD uses standardized terminology, IDs, pricing, and model references defined in the companion documents:
| Document | What it Covers |
|---|---|
| REFERENCE_GLOSSARY_AND_IDS.md | Canonical terms: workflow vs miniapp vs superpower, ID formats |
| REFERENCE_PRICING.md | Canonical pricing: $7.99/mo + $50/yr, free tier limits |
| REFERENCE_MODEL_ROUTING.md | Pipeline stage → model tier mapping |
| REFERENCE_DEPENDENCY_GRAPH.md | PRD blocking relationships and priority order |
| REFERENCE_FEATURE_FLAGS.md | All feature flags by category |
| REFERENCE_TELEMETRY.md | Amplitude event catalog and gaps |
Executive Summary¶
Persona Studio is the visual tool for creating, editing, testing, and publishing Persona Passports (Cartridge v1.1). Today, personas are hand-authored JSON files with 59K+ training examples curated by the team. Persona Studio makes this process visual, testable, and eventually accessible to users and brands — anyone can create a companion personality without writing JSON.
Three audiences, one tool: 1. Ikiro team: Author and tune Sage, Echo, and future first-party personas with visual controls and consistency scoring 2. Enterprise (B2B): Brands create branded companions with tone, safety rules, and policy overlays — managed via the Gateway API (PRD 9) 3. Power users (future): Consumers customize their companion's personality within guardrails
1) What Exists Today¶
Current Persona Authoring¶
- Sage: 59K+ training examples in curated files, relationship stage awareness, continuation settings, persona memories JSON
- Echo: Separate persona with distinct voice, fewer training examples
- Format: Persona Passport (Cartridge v1.1) — JSON with tone, rules, examples, tool preferences, safety redirects
- Management: Manual JSON editing → deploy → test in conversation
- Admin panel:
/adminendpoint with basic persona memory management
Pain Points¶
- No visual editor — all changes require JSON editing
- No consistency scoring — can't measure if changes improved or degraded voice quality
- No A/B testing — can't compare persona variants against each other
- No version history UI — changes tracked in git but not browsable
- No preview — must deploy to test how a change affects responses
- No brand/enterprise tooling — every new persona requires engineering effort
2) Persona Studio Features¶
2.1 Visual Editor¶
Identity Panel: - Persona name, avatar, description - Owner assignment (user / org / brand / team) - Precedence slider (0-100) for overlay ordering
Style Controls:
- Tone selector: Dropdown with presets (friendly, concise, formal, playful, expert) + custom text
- Formality slider: Low ↔ Medium ↔ High (maps to Cartridge formality field)
- Emoji usage: None / Minimal / Regular toggle
- Slang level: None / Light / Heavy
- Response length: Terse / Medium / Verbose (injected as behavior rule)
Behavior Rules: - Do's list: Add/remove rules (max 10). Each is a short imperative: "clarify when ambiguous" - Don'ts list: Add/remove rules (max 10). "expose PII," "speculate schedules" - Safety redirects: Pattern + redirect text pairs. "medical|legal" → "I can't provide that…" - Visual validation: warns if do's and don'ts conflict
Training Examples: - Add example exchanges (user → assistant pairs, max 5) - Character counter (max 800 chars total) - Preview how examples affect response style - Import from conversation history: "this reply was perfect — use it as an example"
Tool Preferences:
- preferRecallBeforeAnswer toggle
- Future: per-superpower configuration (which superpowers this persona can access)
Relationship Stage Overrides (Ikiro-specific): - Per-stage tone adjustments (stranger: more careful, best_friend: more direct) - Continuation settings (probability, types) - Micro-ban configuration (PRD 3 integration)
2.2 Live Preview¶
Side-by-side chat panel where you test the persona in real-time:
[Left: Editor] [Right: Preview Chat]
┌──────────────────┐ ┌──────────────────┐
│ Tone: playful │ │ You: what's my │
│ Formality: low │ │ week look like? │
│ Emoji: minimal │ │ │
│ Do: clarify when │ │ Sage: ooh ok let │
│ ambiguous │ │ me check... your │
│ Don't: expose PII│ │ Thursday is chaos │
│ │ │ but Friday is wide │
│ [Save Draft] │ │ open 👀 │
│ [Publish] │ │ │
│ [Test Another] │ │ [Type message...] │
└──────────────────┘ └──────────────────┘
Preview uses the actual LLM with the current persona configuration — what you see is what users get.
Test scenarios (pre-built): - "Casual greeting" — tests tone - "Emotional disclosure" — tests empathy and safety - "Factual question" — tests helpfulness - "Angry user" — tests tone under pressure - "Request outside scope" — tests safety redirects
2.3 Consistency Scoring¶
Automated measurement of how well responses match the persona definition:
Drift score: Embedding similarity between generated responses and persona's ideal voice (from training examples). Computed on a set of 50 standardized test prompts.
- <5% drift: Excellent consistency
- 5-10% drift: Acceptable, monitor
- >10% drift: Alert — persona may need tuning
Rubric checks: Binary pass/fail on: - Does the response respect all behavior rules (do's and don'ts)? - Does the response match the formality level? - Does the response comply with safety redirects? - Is emoji usage within the configured range?
Scoring runs: - On every Publish (mandatory — blocks publish if drift >15%) - Nightly on all active personas (monitoring) - On demand from the Studio
2.4 Version Management¶
| Feature | Description |
|---|---|
| Version history | Every Publish creates a new version. List of versions with diff view. |
| Rollback | One-click rollback to any previous version. Takes effect immediately. |
| Draft mode | Edit without publishing. Preview and test before going live. |
| Diff view | Side-by-side comparison of any two versions — highlights changed fields. |
| Change notes | Optional text on each Publish explaining what changed. |
2.5 Import / Export¶
- Export: Download persona as Cartridge v1.1 JSON (portable)
- Import: Upload Cartridge JSON → validates against schema → loads into editor
- Clone: Duplicate an existing persona as starting point for a new one
- Template library: Pre-built persona templates (Support Agent, Tutor, Coach, Creative Writer)
3) Enterprise Features (B2B)¶
3.1 Policy Overlays (Org → Team → User)¶
Enterprise customers need per-org rules that override individual persona settings:
{
"org_id": "org_acme",
"policies": {
"behavior": {
"dont": ["discuss competitors by name", "provide pricing estimates"],
"required_disclaimers": ["This is AI-generated content"]
},
"safety_redirects": [
{"pattern": "refund|cancel", "redirect": "I can help you with that — let me connect you with our support team."}
],
"redact_mode": "strict",
"allowed_tools": ["calendar_query", "email_search"],
"blocked_tools": ["web_search"],
"max_response_length": 500
},
"precedence": 100 // Org always wins
}
Overlay resolution: Org (100) > Team (80) > User Persona (60) > Session Override (40). Conflicts: higher precedence wins. Don'ts are additive (merged, not replaced).
3.2 Brand Consistency Dashboard¶
- Drift score per persona: Trending graph over time
- Safety redirect trigger count: How often safety rules fire
- Policy compliance rate: % of responses that pass rubric checks
- Usage by team: Which teams use which personas, call volume
- Flagged responses: Responses that triggered safety or policy warnings
3.3 Audit Integration¶
Every persona change is logged:
{
"event": "persona.published",
"persona_id": "brand-support",
"version": "1.4",
"changed_by": "admin@acme.com",
"changes": ["updated tone to 'empathetic'", "added safety redirect for refund requests"],
"drift_score": 0.03,
"timestamp": "2026-02-15T10:00:00Z"
}
Accessible via GET /v1/audit?action=persona.*.
4) Consumer Customization (P2 — Future)¶
What Users Can Customize¶
- Vibe slider: Casual ↔ Structured (maps to formality)
- Humor level: Dry ↔ Chaotic
- Emoji preference: None / Some / Lots
- Proactive style: Hands-off ↔ On top of it
- Name: Change companion's display name
What Users Cannot Customize¶
- Safety redirects (hardcoded by Ikiro)
- Core identity (Sage is still Sage — can't make her "mean" or "seductive")
- Memory behavior (always remembers, always forgets when asked)
- Boundary enforcement (always respects "don't mention X")
UX¶
Simple sliders in the web portal "Settings" page. No JSON, no technical concepts. Each slider shows a preview response demonstrating the effect.
5) Data Model¶
-- Persona versions
CREATE TABLE persona_versions (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
persona_id TEXT NOT NULL,
version TEXT NOT NULL,
cartridge JSONB NOT NULL, -- Full Cartridge v1.1 JSON
drift_score FLOAT,
rubric_pass_rate FLOAT,
published_by TEXT,
change_notes TEXT,
is_active BOOLEAN DEFAULT false,
is_draft BOOLEAN DEFAULT false,
created_at TIMESTAMPTZ DEFAULT now(),
UNIQUE(persona_id, version)
);
-- Policy overlays (org/team level)
CREATE TABLE policy_overlays (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
org_id TEXT,
team_id TEXT,
policies JSONB NOT NULL,
precedence INTEGER CHECK (precedence BETWEEN 0 AND 100),
created_by TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
-- Consistency scoring history
CREATE TABLE persona_scores (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
persona_id TEXT NOT NULL,
version TEXT NOT NULL,
drift_score FLOAT NOT NULL,
rubric_results JSONB, -- {rule: pass/fail}
test_prompt_count INTEGER,
scored_at TIMESTAMPTZ DEFAULT now()
);
6) API Endpoints¶
| Endpoint | Auth | Purpose |
|---|---|---|
GET /personas |
Org | List all personas in org |
GET /personas/{id} |
Org | Get active persona (Cartridge JSON) |
GET /personas/{id}/versions |
Org | Version history |
POST /personas |
Org | Create new persona |
PUT /personas/{id}/draft |
Org | Save draft |
POST /personas/{id}/publish |
Org | Publish draft → active (runs consistency check) |
POST /personas/{id}/rollback/{version} |
Org | Rollback to version |
POST /personas/{id}/score |
Org | Run consistency scoring on demand |
GET /personas/{id}/scores |
Org | Scoring history |
POST /personas/{id}/preview |
Org | Send test message through persona (preview chat) |
GET /policies |
Org | List policy overlays |
PUT /policies/{id} |
Org Admin | Update policy overlay |
7) Phasing¶
Phase 1: Internal Studio (Weeks 1-3)¶
- Visual editor for Ikiro team (Sage/Echo tuning)
- Live preview chat panel
- Version management (publish, rollback, diff)
- Import/export Cartridge JSON
- Consistency scoring (drift + rubric)
Phase 2: Enterprise Studio (Weeks 4-6)¶
- Multi-tenant persona management
- Policy overlay editor
- Brand consistency dashboard
- Audit logging for persona changes
- Template library (Support, Tutor, Coach, Writer)
Phase 3: Consumer Customization (Weeks 7-10)¶
- Simplified vibe sliders in web portal
- Preview responses before applying
- Companion name customization
- Proactive style preferences
8) Success Metrics¶
| Metric | Target | Why |
|---|---|---|
| Persona creation time (internal) | <15 minutes | Studio is faster than JSON editing |
| Drift score (all active personas) | <10% | Consistency maintained |
| Enterprise persona publish → live | <5 minutes | Fast iteration for brands |
| Policy compliance rate | >98% | Overlays enforced correctly |
| Consumer customization adoption | >20% of users adjust settings | Personalization is valued |
Feature Flags & Gating¶
| Flag Key | Default | Purpose |
|---|---|---|
enable_persona_studio |
false |
Master switch for Studio UI |
enable_live_preview |
false |
Real-time persona testing chat panel |
enable_consistency_scoring |
false |
Automated drift and rubric checks |
max_drift_score_publish |
0.15 |
Block publish if drift exceeds threshold |
enable_policy_overlays |
false |
Org/team/user policy overlay system |
enable_consumer_customization |
false |
Vibe sliders for end users |
enable_persona_ab_testing |
false |
Variant comparison for personas |
enable_template_library |
false |
Pre-built persona templates |
See REFERENCE_FEATURE_FLAGS.md for the full catalog.
Telemetry¶
| Event | Trigger | Properties |
|---|---|---|
persona_draft_saved |
Author saves a draft | persona_id, changed_fields, author |
persona_published |
Draft published to active | persona_id, version, drift_score, rubric_pass_rate |
persona_rollback |
Version rolled back | persona_id, from_version, to_version |
persona_preview_sent |
Test message in preview chat | persona_id, test_scenario |
persona_consistency_scored |
Drift/rubric check completed | persona_id, drift_score, rubric_pass_rate |
policy_overlay_updated |
Org/team policy changed | org_id, overlay_level, changed_policies |
consumer_customization_changed |
User adjusts vibe slider | user_id, slider_name, old_value, new_value |
Needed but not yet tracked (all — Studio not shipped): All events above are speculative. Implementation should include these from day one.
See REFERENCE_TELEMETRY.md for the full event catalog.
Definition of Done¶
- Visual editor creates valid Cartridge v1.1 JSON from UI controls
- Live preview chat uses actual LLM with current persona config
- Consistency scoring runs on publish and blocks if drift >15%
- Version management supports publish, rollback, diff view, and change notes
- Import/export round-trips Cartridge JSON without data loss
- Policy overlays resolve correctly: Org (100) > Team (80) > User (60) > Session (40)
- Consumer vibe sliders map to Cartridge fields and show preview responses
- All Studio features gated by feature flags
- Telemetry tracks drafts, publishes, rollbacks, and scoring
- Persona creation time: <15 minutes for internal team (faster than JSON editing)
9) Open Questions¶
- Should persona changes propagate mid-conversation or only on next conversation?
- How do we handle persona A/B testing? (Two variants of Sage, 50/50 split)
- Should the consistency score block publish or just warn?
- How granular should consumer customization be? (More sliders = more confusion)
- Should enterprise customers be able to import their existing prompt libraries?
- How do we version policy overlays separately from persona versions?