openapi: 3.1.0
info:
  title: Legal Ed Skills Hub
  description: Progressively discover and load pedagogical AI skills for legal education.
    Start with the personas list, drill into a persona for its skill inventory, then
    fetch individual skill instructions and reference materials as needed.
  version: 1.0.0
servers:
- url: https://harvard-lil.github.io/lawskills-hub
paths:
  /actions/personas.json:
    get:
      operationId: listPersonas
      summary: List all available personas
      description: Returns a lightweight index of all personas in the Legal Ed Skills
        Hub. Each entry includes the persona id, display label, headline, and number
        of skills. Use a persona id to fetch its full detail.
      responses:
        '200':
          description: Persona index
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaIndex'
  /actions/personas/{persona_id}.json:
    get:
      operationId: getPersona
      summary: Get full detail for one persona
      description: Returns a persona's design principles, pedagogical objective, tone,
        and a list of available skills with descriptions. Use a skill name to fetch
        its full instructions.
      parameters:
      - name: persona_id
        in: path
        required: true
        schema:
          type: string
          enum: &id001
          - professor
          - student
          - pro-se
          - cle
          - skill-developer
        description: Persona identifier
      responses:
        '200':
          description: Persona detail with skill listing
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PersonaDetail'
  /actions/skills/{persona_id}/{skill_name}.json:
    get:
      operationId: getSkill
      summary: Get full skill instructions
      description: Returns the complete skill instructions (the SKILL.md body) for
        one skill, plus metadata and a list of available reference documents. Follow
        the skill_body instructions to assist the user.
      parameters:
      - name: persona_id
        in: path
        required: true
        schema:
          type: string
          enum: *id001
        description: Persona identifier
      - name: skill_name
        in: path
        required: true
        schema:
          type: string
          enum:
          - client-email-coach
          - development-plan
          - exam-answer-eval
          - feedback-coach
          - issue-interview
          - research-coach
          - skill-creator
          - skill-reviewer
          - skill-tester
          - socratic-tutor
          - syllabus-evidence-based
          - syllabus-traditional
          - topic-curriculum
          - understanding-check
        description: Skill name (unique within a persona)
      responses:
        '200':
          description: Full skill content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SkillDetail'
  /actions/skills/{persona_id}/{skill_name}/references/{ref_name}.json:
    get:
      operationId: getReference
      summary: Get a skill's reference document
      description: Returns the content of a reference markdown document that accompanies
        a skill. Only fetch when the skill instructions direct you to.
      parameters:
      - name: persona_id
        in: path
        required: true
        schema:
          type: string
          enum: *id001
        description: Persona identifier
      - name: skill_name
        in: path
        required: true
        schema:
          type: string
          enum:
          - client-email-coach
          - development-plan
          - exam-answer-eval
          - feedback-coach
          - issue-interview
          - research-coach
          - skill-creator
          - skill-reviewer
          - skill-tester
          - socratic-tutor
          - syllabus-evidence-based
          - syllabus-traditional
          - topic-curriculum
          - understanding-check
        description: Skill name (unique within a persona)
      - name: ref_name
        in: path
        required: true
        schema:
          type: string
          enum:
          - rubric-schema
          - syllabus-research-protocol
        description: Reference document name (without .md extension)
      responses:
        '200':
          description: Reference document content
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ReferenceDetail'
components:
  schemas:
    PersonaIndex:
      type: object
      properties:
        description:
          type: string
        personas:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
                description: Persona identifier
              label:
                type: string
                description: Display name
              description:
                type: string
                description: 'When this persona applies: describes the type of user
                  and tasks this persona handles. Use this to match against the user''s
                  question.'
              objective:
                type: string
                description: The persona's core pedagogical objective and constraint
              skill_count:
                type: integer
                description: Number of available skills
    PersonaDetail:
      type: object
      properties:
        id:
          type: string
        label:
          type: string
        headline:
          type: string
        pitch:
          type: string
        design:
          type: object
          description: 'Pedagogical design: objective, principles, tone, success criteria'
          properties:
            objective:
              type: string
            principles:
              type: array
              items:
                type: string
            tone:
              type: string
            success:
              type: string
        skills:
          type: array
          description: Available skills — fetch one by name to get full instructions
          items:
            type: object
            properties:
              name:
                type: string
              description:
                type: string
              version:
                type: string
              status:
                type: string
                enum:
                - preview
                - official
                description: Release status of the skill
              has_references:
                type: boolean
              reference_count:
                type: integer
        usage_hint:
          type: string
    SkillDetail:
      type: object
      properties:
        name:
          type: string
        description:
          type: string
        version:
          type: string
        status:
          type: string
          enum:
          - preview
          - official
          description: Release status of the skill
        persona:
          type: string
        skill_body:
          type: string
          description: Complete skill instructions in markdown. Follow these to assist
            the user.
        references:
          type: array
          description: Reference documents available for this skill
          items:
            type: object
            properties:
              name:
                type: string
              fetch_path:
                type: string
                description: Path to fetch reference content
        usage_hint:
          type: string
    ReferenceDetail:
      type: object
      properties:
        name:
          type: string
        skill:
          type: string
        persona:
          type: string
        content:
          type: string
          description: Full markdown content of the reference document
