gradeNot graded
search_coursesAnswer
Search the course catalogue by free text, subject area, term or credit limit. Returns the matching courses with their credits, the term they run in, and their prerequisites. Use this before adding anything, because the screen only shows part of the catalogue.
View tool JSON
{
"name": "search_courses",
"kind": "answer",
"impl": "imperative",
"description": "Search the course catalogue by free text, subject area, term or credit limit. Returns the matching courses with their credits, the term they run in, and their prerequisites. Use this before adding anything, because the screen only shows part of the catalogue.",
"inputSchema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Free text over code and name, e.g. \"rendering\""
},
"area": {
"type": "string",
"description": "maths, software, systems, data, theory, graphics, physics, general"
},
"term": {
"type": "number",
"description": "Only courses taught in this term, 1 to 6"
}
}
},
"page": "/cursus/"
}explain_requirementAnswer
Explain what a course requires: the full prerequisite chain, how deep it is, and which links are still missing from the current plan. The chain is not visible on the page.
View tool JSON
{
"name": "explain_requirement",
"kind": "answer",
"impl": "imperative",
"description": "Explain what a course requires: the full prerequisite chain, how deep it is, and which links are still missing from the current plan. The chain is not visible on the page.",
"inputSchema": {
"type": "object",
"properties": {
"course": {
"type": "string",
"description": "Course code, e.g. MLOPS-401"
}
},
"required": [
"course"
]
},
"page": "/cursus/"
}what_this_closesAction
Say what committing to a course would close off. Answers the question a timetable cannot: which specialisation tracks stop being completable if this course takes the slot, because of prerequisite chains and the credit cap in later terms. Use it before advising a choice.
View tool JSON
{
"name": "what_this_closes",
"kind": "act",
"impl": "imperative",
"description": "Say what committing to a course would close off. Answers the question a timetable cannot: which specialisation tracks stop being completable if this course takes the slot, because of prerequisite chains and the credit cap in later terms. Use it before advising a choice.",
"inputSchema": {
"type": "object",
"properties": {
"course": {
"type": "string",
"description": "Course code being considered"
},
"term": {
"type": "number",
"description": "Which term it would go in, 1 to 6"
}
},
"required": [
"course"
]
},
"page": "/cursus/"
}compare_optionsAction
Weigh two courses against each other for the same slot: what each one closes off, and what is lost either way. Use this when a student is choosing between two courses and the term has room for one — it is the question they actually ask, and it takes one call instead of two. Whichever is rejected is not merely unchosen: the slot is gone.
View tool JSON
{
"name": "compare_options",
"kind": "act",
"impl": "imperative",
"description": "Weigh two courses against each other for the same slot: what each one closes off, and what is lost either way. Use this when a student is choosing between two courses and the term has room for one — it is the question they actually ask, and it takes one call instead of two. Whichever is rejected is not merely unchosen: the slot is gone.",
"inputSchema": {
"type": "object",
"properties": {
"course_a": {
"type": "string",
"description": "One of the two course codes"
},
"course_b": {
"type": "string",
"description": "The other"
},
"term": {
"type": "number",
"description": "The term both would compete for, 1 to 6"
}
},
"required": [
"course_a",
"course_b"
]
},
"page": "/cursus/"
}plan_statusAnswer
The current plan: what is in it, per term, with credits, plus which specialisation tracks are still open and which are already closed off.
View tool JSON
{
"name": "plan_status",
"kind": "answer",
"impl": "imperative",
"description": "The current plan: what is in it, per term, with credits, plus which specialisation tracks are still open and which are already closed off.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/cursus/"
}add_courseAction
Add a course to the plan, in a given term. Checks the prerequisite chain, the timetable, the credit cap and which terms the course is taught in — and when one of those blocks it, the answer names what would unblock it.
View tool JSON
{
"name": "add_course",
"kind": "act",
"impl": "imperative",
"description": "Add a course to the plan, in a given term. Checks the prerequisite chain, the timetable, the credit cap and which terms the course is taught in — and when one of those blocks it, the answer names what would unblock it.",
"inputSchema": {
"type": "object",
"properties": {
"course": {
"type": "string",
"description": "Course code, e.g. CALC-101"
},
"term": {
"type": "number",
"description": "Term 1 to 6. Defaults to the first term it runs in."
}
},
"required": [
"course"
]
},
"page": "/cursus/"
}remove_courseAction
Remove a course from the plan. Checks what else in the plan depends on it first, and names those courses if there are any.
View tool JSON
{
"name": "remove_course",
"kind": "act",
"impl": "imperative",
"description": "Remove a course from the plan. Checks what else in the plan depends on it first, and names those courses if there are any.",
"inputSchema": {
"type": "object",
"properties": {
"course": {
"type": "string",
"description": "Course code"
}
},
"required": [
"course"
]
},
"page": "/cursus/"
}protect_trackAction
Hold a specialisation open. Once protected, any course that would close it is refused — including when the same person asks for it later. Use this when the student has said what they are not willing to give up, before exploring anything that might cost it. Pass protect: false to release it again.
View tool JSON
{
"name": "protect_track",
"kind": "act",
"impl": "imperative",
"description": "Hold a specialisation open. Once protected, any course that would close it is refused — including when the same person asks for it later. Use this when the student has said what they are not willing to give up, before exploring anything that might cost it. Pass protect: false to release it again.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"description": "Track id: data, systems, graphics or theory."
},
"protect": {
"type": "boolean",
"description": "True to protect (the default), false to release."
}
},
"required": [
"track"
]
},
"page": "/cursus/"
}propose_plan_for_trackAction
Work out what still has to be taken to complete a specialisation track, and in which terms. It proposes and does not add anything, so the whole route can be looked at before any of it is committed. Returns a concrete list, or — if it cannot be done from here — the course that blocks it and what it would cost to unblock. Track ids: data, systems, graphics, theory.
View tool JSON
{
"name": "propose_plan_for_track",
"kind": "act",
"impl": "imperative",
"description": "Work out what still has to be taken to complete a specialisation track, and in which terms. It proposes and does not add anything, so the whole route can be looked at before any of it is committed. Returns a concrete list, or — if it cannot be done from here — the course that blocks it and what it would cost to unblock. Track ids: data, systems, graphics, theory.",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"description": "data, systems, graphics or theory"
}
},
"required": [
"track"
]
},
"page": "/cursus/"
}explain_infeasibilityAction
When a specialisation cannot be completed, say exactly why: which course cannot be placed, which rule stops it, and what would have to be dropped to make room — with what each of those trades would close in turn. Use it instead of telling a student "it is not possible".
View tool JSON
{
"name": "explain_infeasibility",
"kind": "act",
"impl": "imperative",
"description": "When a specialisation cannot be completed, say exactly why: which course cannot be placed, which rule stops it, and what would have to be dropped to make room — with what each of those trades would close in turn. Use it instead of telling a student \"it is not possible\".",
"inputSchema": {
"type": "object",
"properties": {
"track": {
"type": "string",
"description": "data, systems, graphics or theory"
}
},
"required": [
"track"
]
},
"page": "/cursus/"
}list_actionsAnswer
Everything that has been done to this plan so far, in order, in plain language. Each entry has a step number that undo_to accepts.
View tool JSON
{
"name": "list_actions",
"kind": "answer",
"impl": "imperative",
"description": "Everything that has been done to this plan so far, in order, in plain language. Each entry has a step number that undo_to accepts.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/cursus/"
}share_planAction
Turn the plan into a link that can be sent to somebody — a tutor, an adviser, a friend who took the course last year. Nothing is stored: the link carries the actions themselves, and opening it replays them through the same rules, so a link cannot produce a plan this page would have refused to build.
View tool JSON
{
"name": "share_plan",
"kind": "act",
"impl": "imperative",
"description": "Turn the plan into a link that can be sent to somebody — a tutor, an adviser, a friend who took the course last year. Nothing is stored: the link carries the actions themselves, and opening it replays them through the same rules, so a link cannot produce a plan this page would have refused to build.",
"inputSchema": {
"type": "object",
"properties": {}
},
"page": "/cursus/"
}undo_toAction
Rewind the plan to how it was after a given step, discarding everything after it. Returns the plan that results, because after a rewind your idea of the state is out of date.
View tool JSON
{
"name": "undo_to",
"kind": "act",
"impl": "imperative",
"description": "Rewind the plan to how it was after a given step, discarding everything after it. Returns the plan that results, because after a rewind your idea of the state is out of date.",
"inputSchema": {
"type": "object",
"properties": {
"step": {
"type": "number",
"description": "Keep steps up to and including this one. 0 empties the plan."
}
},
"required": [
"step"
]
},
"page": "/cursus/"
}