[
  {
    "type": "function",
    "function": {
      "name": "find_lessons",
      "description": "Search the licensed Scolavo curriculum for lessons on a topic. Returns compact hits, each with a lessonId, a title and a snippet showing the match. This is how you find something to teach: call it FIRST, pick ONE hit, then read that lesson with get_lesson. Do not call it repeatedly to browse.",
      "parameters": {
        "type": "object",
        "properties": {
          "q": {
            "type": "string",
            "description": "What to look for, in plain words — a topic, a term, a question."
          },
          "tier": {
            "type": "string",
            "description": "Restrict to one tier. Omit to search everything the licence covers.",
            "enum": [
              "primary",
              "middle",
              "high",
              "college",
              "topics"
            ]
          }
        },
        "required": [
          "q"
        ]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "get_lesson",
      "description": "Read one class-lesson — its cards carry the teaching text. Everything you teach must come from here: do not teach a lesson you have not read, and do not invent curriculum. Use detail:\"brief\" to check whether a lesson is the right one, then read it properly before teaching from it.",
      "parameters": {
        "type": "object",
        "properties": {
          "lessonId": {
            "type": "string",
            "description": "Lesson identifier, \"tier/subjectSlug/classNum\" (e.g. \"high/hs-mathematics-algebra/1\"). Copy one EXACTLY from a find_lessons hit — never assemble one yourself, because a guessed subject slug is the most common cause of a not-found error.",
            "pattern": "^(primary|middle|high|college|topics)/[a-z0-9-]+/[1-9][0-9]{0,2}$"
          },
          "detail": {
            "type": "string",
            "description": "\"brief\" for titles and structure only, \"standard\" (default) for the teaching text, \"full\" for every optional section.",
            "enum": [
              "brief",
              "standard",
              "full"
            ]
          }
        },
        "required": [
          "lessonId"
        ]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "get_quiz",
      "description": "The end-of-class quiz for one lesson, with answer keys, plus the mid-lesson checks that carry hints and rationale. Use it for retrieval practice AFTER you have taught the material. Never show the answer key to the learner.",
      "parameters": {
        "type": "object",
        "properties": {
          "lessonId": {
            "type": "string",
            "description": "Lesson identifier, \"tier/subjectSlug/classNum\" (e.g. \"high/hs-mathematics-algebra/1\"). Copy one EXACTLY from a find_lessons hit — never assemble one yourself, because a guessed subject slug is the most common cause of a not-found error.",
            "pattern": "^(primary|middle|high|college|topics)/[a-z0-9-]+/[1-9][0-9]{0,2}$"
          }
        },
        "required": [
          "lessonId"
        ]
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "list_subjects",
      "description": "The subjects this licence covers, with their class counts. Use it to answer \"what can you teach me?\". The list does not change during a conversation — ask once, then work from the answer.",
      "parameters": {
        "type": "object",
        "properties": {
          "tier": {
            "type": "string",
            "description": "Restrict to one tier. Omit for everything the licence covers.",
            "enum": [
              "primary",
              "middle",
              "high",
              "college",
              "topics"
            ]
          },
          "detail": {
            "type": "string",
            "description": "\"brief\" for names only, \"standard\" (default) to include class counts.",
            "enum": [
              "brief",
              "standard",
              "full"
            ]
          }
        },
        "required": []
      }
    }
  }
]