Docs Join alpha
Build

Autonomous loop

A skill on a heartbeat fires the cycle daily. You intervene through Sprout's in-app agent when you want a different call.

What you'll build

A skill that fires on its own clock and does real work without you. It reads state, decides, and acts. Two common shapes:

When you want a different call, you tell Sprout's in-app agent and it makes the change for you.

Pieces you'll combine

Build it

Three movements:

1. Author the run skill that does one cycle (read, decide, act).

Shell
skill.write({
name: "<Cycle name>",
description: "What one fire of the loop does.",
category: "home_agent",
prompt: `For {{input.child_name}} ({{input.child_id}}):
1. Read state (task.list, the latest analysis card, etc).
2. Decide what to do next.
3. Act: task.create, skill.invoke, skill.post_result.`,
handsReferenced: ["task_list", "skill_invoke"],
inputVariables: [{ name: "child_name" }, { name: "child_id" }]
})
# Returns { skillId: "<runSkillId>" }

2. Schedule it with heartbeat.create.

Shell
heartbeat.create({
name: "<Loop name>",
cron: "0 9 * * *",                  // daily at 9am
tz: "America/New_York",
runSkillId: "<runSkillId>",
skillInput: { child_name: "<name>", child_id: "<kidId>" }
})
# Returns { heartbeatId, chatId, nextFireAt }
# Cadence cap: 4 fires per 24h enforced server-side.

3. Intervene through Sprout's agent when you want a different call.

Parent app ยท Sprout agent
You: Cancel tomorrow morning's planned task. Move the journal to Saturday.
Sprout: Got it. Canceling the task and moving the journal to Saturday at 8am.

Sprout's in-app agent calls task.update or task.delete on your behalf based on your natural-language request.

When to use it

Tools touched

Recommended skills

Drop these into your library to compose with this pattern.

Morning brieftemplateNext-session plannertemplate

Seen in walkthroughs

Solar system learning loop Weekly family brief Chore + photo proof

Was this page helpful?