gradeNot graded
canvas_describeAction
Report the current state of the canvas: what is drawn, how much, and who drew it. **It also reports anything the user drew themselves since you last called it**, so call it again before you draw and before you answer, for as long as the conversation continues.
View tool JSON
{
"name": "canvas_describe",
"kind": "act",
"impl": "imperative",
"description": "Report the current state of the canvas: what is drawn, how much, and who drew it. **It also reports anything the user drew themselves since you last called it**, so call it again before you draw and before you answer, for as long as the conversation continues.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
},
"page": "/canvas/"
}canvas_replanAction
Declare how the user's interruption changes what you are making. **Required after canvas_describe reports an interruption — every drawing tool stays refused until you call this.** The new plan must absorb what the user drew, not merely tolerate it. ⚠️ **Write all three fields in ENGLISH**, whatever language the conversation is in — this page shows them on the canvas, and the canvas is in English.
View tool JSON
{
"name": "canvas_replan",
"kind": "act",
"impl": "imperative",
"description": "Declare how the user's interruption changes what you are making. **Required after canvas_describe reports an interruption — every drawing tool stays refused until you call this.** The new plan must absorb what the user drew, not merely tolerate it. ⚠️ **Write all three fields in ENGLISH**, whatever language the conversation is in — this page shows them on the canvas, and the canvas is in English.",
"inputSchema": {
"type": "object",
"properties": {
"observed": {
"type": "string",
"description": "IN ENGLISH. What the user added, as you see it. e.g. \"two red wheels under the lion\""
},
"new_plan": {
"type": "string",
"description": "IN ENGLISH. What the whole picture will now become. e.g. \"a lion riding a wheeled car\""
},
"abandoning": {
"type": "string",
"description": "IN ENGLISH. The part of your earlier plan you are giving up. e.g. \"the four legs\""
}
},
"required": [
"observed",
"new_plan",
"abandoning"
]
},
"page": "/canvas/"
}canvas_batchAction
Draw many shapes in ONE call. shapes is an array; each item is {"kind":"stroke"|"circle"|"rect"|"text"} plus that shape's own fields, using the same names as the single-shape tools. ⚠️ **This is the normal way to draw** — every call costs the user seconds of waiting, so 30 shapes in one call beats 30 calls. They are laid down over a few seconds, and if the user draws meanwhile the rest is dropped — so send one part at a time (the mane, then the face), not a whole picture at once.
View tool JSON
{
"name": "canvas_batch",
"kind": "act",
"impl": "imperative",
"description": "Draw many shapes in ONE call. shapes is an array; each item is {\"kind\":\"stroke\"|\"circle\"|\"rect\"|\"text\"} plus that shape's own fields, using the same names as the single-shape tools. ⚠️ **This is the normal way to draw** — every call costs the user seconds of waiting, so 30 shapes in one call beats 30 calls. They are laid down over a few seconds, and if the user draws meanwhile the rest is dropped — so send one part at a time (the mane, then the face), not a whole picture at once.",
"inputSchema": {
"type": "object",
"properties": {
"shapes": {
"type": "array",
"description": "Up to 80 shapes, drawn in order. Each needs \"kind\" plus that kind's fields",
"items": {
"type": "object"
}
}
},
"required": [
"shapes"
]
},
"page": "/canvas/"
}canvas_strokeAction
Draw ONE polyline. ⚠️ Drawing more than one? Use canvas_batch and send them together. points is [[x,y],[x,y],...] where x and y are relative coordinates in 0-1. ⚠️ **Pass every point in one call. Do not call once per segment.** For a curve, list many points and send them together. Example: draw 6 whiskers in one call, not six. Each call costs a few seconds, so the number of calls is the wait the user sees.
View tool JSON
{
"name": "canvas_stroke",
"kind": "act",
"impl": "imperative",
"description": "Draw ONE polyline. ⚠️ Drawing more than one? Use canvas_batch and send them together. points is [[x,y],[x,y],...] where x and y are relative coordinates in 0-1. ⚠️ **Pass every point in one call. Do not call once per segment.** For a curve, list many points and send them together. Example: draw 6 whiskers in one call, not six. Each call costs a few seconds, so the number of calls is the wait the user sees.",
"inputSchema": {
"type": "object",
"properties": {
"points": {
"type": "array",
"description": "[[x,y],...] every value in 0-1",
"items": {
"type": "array",
"items": {
"type": "number"
}
}
},
"color": {
"type": "string",
"description": "CSS colour. Defaults to the current colour"
},
"width": {
"type": "number",
"description": "Line width in px. Optional"
}
},
"required": [
"points"
]
},
"page": "/canvas/"
}canvas_circleAction
Draw ONE circle. cx,cy are the centre in relative coordinates (0-1); r is the radius as a fraction of the width. ⚠️ Drawing several? Use canvas_batch instead.
View tool JSON
{
"name": "canvas_circle",
"kind": "act",
"impl": "imperative",
"description": "Draw ONE circle. cx,cy are the centre in relative coordinates (0-1); r is the radius as a fraction of the width. ⚠️ Drawing several? Use canvas_batch instead.",
"inputSchema": {
"type": "object",
"properties": {
"cx": {
"type": "number",
"description": "centre x, 0-1"
},
"cy": {
"type": "number",
"description": "centre y, 0-1"
},
"r": {
"type": "number",
"description": "radius, 0-1"
},
"color": {
"type": "string",
"description": "CSS colour"
},
"width": {
"type": "number",
"description": "line width"
},
"fill": {
"type": "boolean",
"description": "fill it in"
}
},
"required": [
"cx",
"cy",
"r"
]
},
"page": "/canvas/"
}canvas_rectAction
Draw ONE rectangle. x,y are the top-left corner in relative coordinates; w,h are width and height as fractions. ⚠️ Drawing several? Use canvas_batch instead.
View tool JSON
{
"name": "canvas_rect",
"kind": "act",
"impl": "imperative",
"description": "Draw ONE rectangle. x,y are the top-left corner in relative coordinates; w,h are width and height as fractions. ⚠️ Drawing several? Use canvas_batch instead.",
"inputSchema": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "top-left x, 0-1"
},
"y": {
"type": "number",
"description": "top-left y, 0-1"
},
"w": {
"type": "number",
"description": "width, 0-1"
},
"h": {
"type": "number",
"description": "height, 0-1"
},
"color": {
"type": "string",
"description": "CSS colour"
},
"width": {
"type": "number",
"description": "line width"
},
"fill": {
"type": "boolean",
"description": "fill it in"
}
},
"required": [
"x",
"y",
"w",
"h"
]
},
"page": "/canvas/"
}canvas_textAction
Place text. x,y are the left edge and vertical middle of the text, in relative coordinates. size is the height as a fraction (0.06 is a normal size). Write the text in English unless the user asked otherwise. Several at once? Use canvas_batch.
View tool JSON
{
"name": "canvas_text",
"kind": "act",
"impl": "imperative",
"description": "Place text. x,y are the left edge and vertical middle of the text, in relative coordinates. size is the height as a fraction (0.06 is a normal size). Write the text in English unless the user asked otherwise. Several at once? Use canvas_batch.",
"inputSchema": {
"type": "object",
"properties": {
"x": {
"type": "number",
"description": "x, 0-1"
},
"y": {
"type": "number",
"description": "y, 0-1"
},
"text": {
"type": "string",
"description": "the text to place"
},
"size": {
"type": "number",
"description": "text height, 0-1"
},
"color": {
"type": "string",
"description": "CSS colour"
}
},
"required": [
"x",
"y",
"text"
]
},
"page": "/canvas/"
}canvas_undoAction
Undo the most recently drawn item. It may be something the user drew, so do not call it repeatedly without saying so.
View tool JSON
{
"name": "canvas_undo",
"kind": "act",
"impl": "imperative",
"description": "Undo the most recently drawn item. It may be something the user drew, so do not call it repeatedly without saying so.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
},
"page": "/canvas/"
}canvas_clearAction
Erase the whole canvas. ⚠️ This also erases what the user drew. Only call it when the user has clearly asked for it.
View tool JSON
{
"name": "canvas_clear",
"kind": "act",
"impl": "imperative",
"description": "Erase the whole canvas. ⚠️ This also erases what the user drew. Only call it when the user has clearly asked for it.",
"inputSchema": {
"type": "object",
"properties": {},
"required": []
},
"page": "/canvas/"
}