Docs Join alpha
Model

Canvas

Interactive HTML the kid plays inside a task. Sandboxed. The Sprout SDK is the only host bridge.

A canvas is interactive HTML the kid plays inside a task. Mini-games, math drills, drawing tools, sticker boards, narrated stories, anything you can render. When text isn't enough, you reach for a canvas.

Canvases run in a strict sandbox. The auto-injected sprout.* SDK is the only host bridge: no fetch, no external <script src>, no localStorage. This is what lets a parent trust a canvas they didn't write line-by-line.

Where you'll see this

In the wild: Author a canvas (Build)

Shape

A worked example

A sight-word race canvas, dry-run first.

Shell
canvas.create({
name: "Sight word race",
emoji: "🏃",
html: "<!-- canvas body uses sprout.* SDK; see canvas/sdk resource -->",
completionSchema: { kind: "score", maxScore: 100 },
dimensions: { age: "5-7" },
dryRun: true
})
# Returns: { previewHtml, analyzerIssues, specHash }
# Show preview to parent, then commit with dryRun:false + same specHash.

Once committed, wrap in a skill (skill.write { canvasIds: [<canvasId>] }) and deliver via task.create with runMode: "canvas" + canvasSpec.canvasId.

The SDK contract

The canvas talks to the host only through the auto-injected sprout.* SDK. The contract lives at the MCP resource sprout://canvas/sdk; read it before you author HTML.

Highlights:

When to use it (and when not to)

Use a canvas when:

Stick with a conversation task when:

Common errors

Related tools

Roadmap for this noun

Author a canvas Task Skill

Was this page helpful?