Files
praxis/.ciagent/PERSONAS.md
T
Praxis CI 48cbd4a2b3 docs(P00): complete pre-execution phase
---ci---
phase: 0
milestone: v0.1
status: complete
requirements:
  covered: [REQ-VOICE-01, REQ-VOICE-02, REQ-VOICE-03, REQ-VOICE-04, REQ-SCEN-01, REQ-STATE-01, REQ-LLM-01, REQ-LLM-02, REQ-DEBRIEF-01, REQ-ORCH-01, REQ-ORCH-02, REQ-SCEN-FMT-01, REQ-NFR-LAT-01, REQ-NFR-SAFE-01, REQ-NFR-COST-01]
  partial: []
---/ci---
2026-08-01 12:49:34 +00:00

5.5 KiB

Praxis — Persona Assessment

Generated: Phase 0 RESEARCH stage Project: Praxis (v0.1 foundation) Source: Research findings (.ciagent/RESEARCH.md) + config.json personas

Persona Roster

Active personas (4)

---
name: lead-developer
active: true
phase_specific: false
reason: Coordinates task decomposition across the voice-loop pipeline; resolves conflicts between backend/frontend/data personas. Required for every milestone.
domain: coordination
frameworks: [pipecat, react]
constraints: [pragmatic, latency-budget-aware (<600ms), voice-first-architecture]
territory: []
---
---
name: backend-engineer
active: true
phase_specific: false
reason: Owns the Pipecat server, Ollama Cloud direct API integration, Deepgram ASR service, guardrail layer, and scenario runtime (Pipecat Flows + YAML→Pydantic). Core of the v0.1 voice loop.
domain: backend
frameworks: [pipecat, pydantic, ollama, deepgram, cartesia, piper, sqlite]
constraints: [api-first, type-safe, latency-budget-aware, streaming-first, pluggable-interfaces-for-swap]
territory:
  - "**/server/**"
  - "**/pipecat/**"
  - "**/services/**"
  - "**/scenarios/**"
  - "**/guardrails/**"
  - "**/db/**"
  - "**/llm/**"
  - "**/asr/**"
  - "**/tts/**"
---
---
name: frontend-engineer
active: true
phase_specific: false
reason: Owns the React + WebRTC client via Pipecat client SDK — audio capture/playback, interruptibility UI, session display, debrief rendering. Voice-first UI constraints differ from typical web frontend.
domain: frontend
frameworks: [react, pipecat-client-sdk, webrtc]
constraints: [component-first, voice-first-ui, minimal-client-javascript, webRTC-audio-pipeline]
territory:
  - "**/client/**"
  - "**/ui/**"
  - "**/components/**"
  - "**/web/**"
---
---
name: data-engineer
active: true
phase_specific: false
reason: Owns SQLite schema (praxis.db), session-log migrations, scenario YAML→Pydantic schema definitions, and learner-state access layer. v0.1 data surface is small but schema-first discipline is still required.
domain: data
frameworks: [sqlite, pydantic, pydantic-ai]
constraints: [schema-first, type-safe, migration-driven, single-learner-no-auth]
territory:
  - "**/migrations/**"
  - "**/schema/**"
  - "**/models/**"
  - "**/db/**"
  - "**/scenarios/*.yaml"
---

Deactivated personas (0)

No default personas are deactivated for v0.1. All four default personas have relevant territory.

Custom personas (proposed for later milestones — NOT v0.1)

---
name: voice-engineer
active: false
phase_specific: false
reason: PROPOSED for v0.2+ when latency tuning, accent modeling, and multi-voice personas become central. v0.1 uses Pipecat's built-in voice pipeline (Silero VAD + Deepgram + Cartesia/Piper), so a dedicated voice-engineer is not warranted yet.
domain: voice
frameworks: [webrtc, silero-vad, audio-codecs]
constraints: [sub-600ms-latency, accent-robustness, audio-quality-vs-latency-tradeoff]
territory: []
---
---
name: ml-engineer
active: false
phase_specific: false
reason: PROPOSED for v0.3+ when fine-tuning Ollama models on Canadian English / role-play data becomes relevant. v0.1 uses off-the-shelf cloud models — no ML training in scope.
domain: ml
frameworks: [ollama, pytorch, axolotl]
constraints: [open-weights, cost-bounded-fine-tuning]
territory: []
---

Framework Alignment (overrides from config.json defaults)

The default config.json personas had empty frameworks[]. Research identified the actual v0.1 stack, so frameworks are now populated above:

Persona Frameworks (research-aligned)
lead-developer pipecat, react
backend-engineer pipecat, pydantic, ollama, deepgram, cartesia, piper, sqlite
frontend-engineer react, pipecat-client-sdk, webrtc
data-engineer sqlite, pydantic, pydantic-ai

Territory Alignment

Default config.json territory globs were generic (**/server/**, **/client/**, etc.). Research refined them to match the v0.1 Pipecat-based architecture — see territory: fields above. Notable additions:

  • backend-engineer now owns **/pipecat/**, **/scenarios/**, **/guardrails/**, **/llm/**, **/asr/**, **/tts/** (voice-loop service boundaries)
  • data-engineer now owns **/scenarios/*.yaml (scenario schema authorship)

Constraint Alignment

Default config.json constraints were generic. Research added project-specific constraints:

  • All personas: latency-budget-aware (<600ms) — the binding v0.1 NFR
  • backend-engineer: streaming-first, pluggable-interfaces-for-swap (D-014/D-019/D-020 require swappable TTS/LLM/guardrail layers)
  • frontend-engineer: voice-first-ui, webRTC-audio-pipeline, minimal-client-javascript
  • data-engineer: single-learner-no-auth (D-007)

Phase-Specific Personas

None for v0.1. No personas are created for a specific phase and removed after — the four active personas span the whole milestone. The proposed voice-engineer and ml-engineer are for later milestones, not phase-specific.

Notes for EXECUTE stage

  • Territory enforcement mode: warn (per config.json personas.territory_enforcement)
  • The backend-engineer owns the majority of v0.1 task surface (Pipecat server + all service integrations)
  • The frontend-engineer's surface is smaller but has the R2/R4 latency risk (WebRTC audio pipeline + TTS playback)
  • The data-engineer's surface is the smallest (one SQLite schema + one YAML scenario) but is on the critical path (scenario definition blocks scenario runtime)