Save it as a skill
The Daily check-in works. Now you want today's chat to fit today's actual day. That's where a skill earns its keep: save the procedure once, your agent invokes it every morning to update the task with new context.
If the prompt is the same every weekday, you don't need a skill. task.create with a weekday schedule already handles that. Skills earn their keep when the content has to change between runs: today's chat reflects today's school day, this week's evening question reflects last week's themes, tomorrow's debrief mentions the test your kid mentioned today. Save the procedure as a skill once. Your agent invokes it on a cadence, pulls fresh context, and updates the task accordingly.
Two shapes a skill can take
Skills are tagged by where they make sense to run, not who runs them.
generic. The default. The skill only touches Sprout (read the family, list tasks, update a task, adjust gems, post a result). Either your home agent or Sprout's agent can run it. Most skills you save will be this shape.home_agent. Tag a skill this way when the procedure reaches outside Sprout: read your school portal, your calendar, your email, a folder on your machine, another skill that's specific to your home agent. Skills with home-context reads can't run inside Sprout's agent and the server refuses to invoke or heartbeat them; they only make sense when your home agent is the one driving.
For the example below, we tag home_agent because we read the school day before updating the task.
Write the skill
This skill refreshes today's Daily check-in to reflect what actually happened at school. Each morning your agent pulls today's school events from your home connector, finds the open check-in task, and rewrites conversationSpec.guidance so the kid is asked about the day they actually had.
The prompt is the procedure your agent reads when it invokes the skill. handsReferenced declares the MCP tools the procedure uses. inputVariables are the values you pass on each invocation.
skill.write({
name: "Refresh today's check-in",
description: "Pull today's school events and rewrite today's Daily check-in chat to match the actual day.",
category: "home_agent",
prompt: `For {{input.child_name}} ({{input.child_id}}) on {{input.today}}:
1. Read today's events for this kid from the school portal connector.
2. task.list({ assignedChildIds:[{{input.child_id}}], status:'open' });
find the open task named 'Daily check-in'.
3. Rewrite conversationSpec.guidance to fit today specifically.
If PE today, ask how PE went and what they tried.
If a test, ask how it felt and what was hardest.
If a field trip, ask the highlight and one thing they noticed.
Otherwise, keep the highlight / lowlight / tomorrow shape.
Warm, short, two or three questions.
4. task.update(taskId, {
conversationSpec: { goalType:'share', guidance: <your rewrite> }
}).`,
handsReferenced: ["task_list", "task_update"],
inputVariables: [
{ name: "child_name" },
{ name: "child_id" },
{ name: "today" }
]
})
# Returns: { skillId: "<skill>" }
# The skill is in your library now. Visible to your agent on every reconnect.Invoke the skill
Each morning, your agent reads the skill, fills in the inputs, and runs the procedure. One call.
skill.invoke({
skillId: "<skill>",
input: {
child_name: "Jay",
child_id: "<childId>",
today: "2026-05-23"
}
})
# Your agent reads the rendered prompt, pulls today's school day from the
# home connector, finds today's open check-in, and updates the guidance.
# By 5pm, Jay's chat asks about today, not the generic three questions.You can drive this on your own cadence (a morning cron in your agent) or hand the cadence to Sprout via a heartbeat. Either way, the procedure lives in one place: the skill.
What you have now
- Your agent is connected to Sprout.
- A daily task on your kid's iPad, on a weekday cadence.
- A saved skill in your family library that refreshes the task each morning with real context.