User Story
As a developer
I want the AgentBlueprint schema fully defined
So that Interview Agents can be instantiated from blueprint configuration
Acceptance Criteria
AgentBlueprint Structure
class AgentBlueprint(BaseModel):
id: str # agent_{ulid}
name: str
description: str
mission: str # NEW: What this agent is trying to achieve
target_interviewees: IntervieweeSpec
persona: PersonaSpec
goals: list[GoalSpec]
questions: list[QuestionSpec]
question_flow: QuestionFlowSpec
rubric_field_mapping: list[str] # NEW: Which shared rubric fields this agent populates
system_prompt: str # Human-readable for debugging/transparency
exit_conditions: ExitConditions # NEW: When to exit interview
config: AgentConfig
design_rationale: DesignRationale
NEW: ExitConditions
class ExitConditions(BaseModel):
required_fields_threshold: float = 1.0 # % of required rubric fields captured
max_turns: int = 30 # Safety net
graceful_closing: bool = True # Natural wrap-up vs. abrupt stop
Interview agents exit when:
- Primary: All required rubric fields captured (or marked Unknown/TODO)
- Secondary: LLM assessment ("Have I missed anything?")
- Safety: Max turn limit reached
IntervieweeSpec
PersonaSpec
GoalSpec
QuestionSpec
QuestionFlowSpec
AgentConfig
DesignRationale
Definition of Done
🤖 Generated with Claude Code
User Story
As a developer
I want the AgentBlueprint schema fully defined
So that Interview Agents can be instantiated from blueprint configuration
Acceptance Criteria
AgentBlueprint Structure
NEW: ExitConditions
Interview agents exit when:
IntervieweeSpec
roles: Target roles for this agentdepartments: Target departmentsexpertise_areas: Required expertisecount_target: How many interviewsselection_criteria: How to choose intervieweesPersonaSpec
role: Agent's role identitytone: Communication toneexpertise: List of expertise areascommunication_style: How agent communicatesrapport_building_approach: Strategy for rapporthandling_reluctance: Strategy for reluctant intervieweesGoalSpec
id: Unique goal identifiergoal: Goal descriptionpriority: 1 = highestsuccess_criteria: List of criteriarelated_questions: Question IDs that support this goalQuestionSpec
id: Unique question identifierquestion: The question textpurpose: Why ask this questioncategory: rapport | discovery | probing | sensitive | closingsequence_position: Order in flowprobing_triggers: When to probe deeperfollow_up_questions: Follow-up question textsskip_conditions: When to skip this questionexpected_rubric_fields: Which rubric fields this question elicitsQuestionFlowSpec
opening_sequence: Question IDs for openingcore_sequence: Main interview questionssensitive_sequence: Sensitive topic questionsclosing_sequence: Wrap-up questionsbranching_rules: {condition, goto_question}AgentConfig
model: LLM model identifiermax_turns: Maximum conversation turnsestimated_duration_minutes: Expected interview lengthtemperature: LLM temperature (default 0.7)recording_enabled: BooleanDesignRationale
understanding: What Architect understoodassumptions: List of assumptions madekey_considerations: Factors considereddesign_choices: List of {choice, rationale}potential_challenges: Anticipated issuesDefinition of Done
🤖 Generated with Claude Code