Model

Task

The kid-facing unit. A check-in chat, a chore, an interactive challenge. Every kid touchpoint is a task.

A task is the kid-facing unit in Sprout. It is the thing that shows up on the kid's iPad, the thing they tap into, the thing they complete. Every kid touchpoint: a chat, a chore, an interactive canvas, a camera proof: is a task or starts with one.

Tasks can stand alone (your agent creates one directly) or be governed by a skill that re-runs them or refreshes them over time. Most first-time builders ship a task before they ship a skill.

Where you'll see this

In the wild: Your first task

A worked example

A daily check-in conversation task. Read the family first to resolve the kid id, then ship the task.

Shell
task.create({
name: "Daily check-in",
assignChildIds: ["<childId>"],
runMode: "conversation",
conversationSpec: {
goalType: "share",
guidance: "Ask about one highlight from today, one lowlight, and one thing they're looking forward to. Listen well; reflect back. Keep it warm and short."
},
scheduleSpec: {
taskType: "schedule",
days: ["mon","tue","wed","thu","fri"],
startMinutes: 1020
},
rewardSpec: { gems: 3 }
})

That's it. No skill needed for the simple recurring shape. Same idea works for self_check (chores) and canvas (interactive activities) tasks: swap the spec object.

Shape

Every task has these key fields:

Earning vs playing

A task has two independent axes. Earning is when a play pays gems. Playing is whether the kid may open the task again at all. Conflating them is the most common authoring mistake.

Earning is carried by quests: offers, not payments. A scheduled task mints its earning quests automatically on each covered day (you never mint scheduled quests by hand); each quest is one earnable play whose gem price freezes at mint, so a mid-day rewardSpec edit never reprices today's offer: the new price applies from the next mint. Bonus earning beyond the schedule is minted on ask via quest.create, always bounded by the room the parent configured in policy.extras: the server clamps every grant.

Free play is the other axis: whether the kid may replay the task when nothing is earnable (off-schedule, or after today's quests are settled). Free play pays zero gems, always: an unpaid replay is not a missing payout, it is the design. Switch it with policy.freePlay.enabled. A live earning quest always wins: the kid earns before they free-play.

Either way the kid's cross-day progress is preserved. A task carries durable per-kid state: the canvas's journey checkpoint plus recent results, surfaced to your agent by task.describe. Free-play runs read and update that same journey: the switch decides whether extra plays are allowed once earning is done, never whether progress persists.

warningProgress lives on the task id, so rotate content in place: when a continuing journey advances (new words, next level), task.update the existing task rather than creating a new one: a fresh task id starts with empty history and orphans the kid's progress. Create separate tasks only for genuinely distinct stages whose histories should stand alone.

When to use it (and when not to)

Reach for a standalone task when:

Wrap it in a skill when:

Common errors

Related tools

Roadmap for this noun

Your first task Skill Canvas

Was this page helpful?