| name | proactive-task-intelligence |
| description | Event-to-prep-task generation patterns for a family assistant — calendar scanning, leave-by calculation, prep task creation, smart ordering, and clarification-first workflow. Use when user says "prep tasks", "proactive tasks", "generate tasks from calendar", "leave by time", "anticipate tasks", "event prep", "task intelligence", or any proactive task generation activity. |
Proactive Task Intelligence Skill
Canonical patterns for anticipating, generating, ordering, and serving tasks proactively based on calendar events, upcoming commitments, and family context.
Core Principle
"Tasks are the operating system for this household." — direct feedback
The system doesn't just SERVE tasks — it ANTICIPATES, GENERATES, and ORDERS them. When ANY agent sees an upcoming event or commitment, it MUST generate related prep tasks automatically.
The Pattern: Anticipate → Generate → Order → Serve
Step 1: Calendar Scan (BOTH calendars required)
1. gcal_upcoming(days: 2) → personal events (family, medical, errands)
2. workiq-ask_work_iq("What meetings does Parent 1 have in the next 48 hours?") → work meetings
Personal calendar alone is NOT sufficient. Work meetings are invisible to Google Calendar.
Step 2: Event → Prep Task Mapping
| Event Type | Auto-Generate These Prep Tasks |
|---|
| Doctor/OB appointment | "Grab insurance cards" (high, due: event day), "Leave for [appt] by [time]" (drive time + 15 min) |
| Guest coming over | "Quick kitchen clean", "Tidy living room", "Clean guest bathroom", "Take out trash" (all due before arrival) |
| Home service visit | "Clear area around [thing]" (due: night before), "Be home by [time - 15 min]" |
| Kid activity | "Pack [kid's] bag/gear", "Leave for [activity] by [time]" |
| Housekeeping visit | "Pick up clutter", "Clear surfaces", "Gather laundry" (due: morning of or night before) |
| Birthday | "Send [name] happy birthday" (medium, due that day) |
| Work meeting with prep | "Review agenda for [meeting]", "Prep demo/materials" |
Step 3: Duplicate Check
Before creating ANY prep task:
- Search existing tasks by keyword:
list_tasks(status="pending")
- If a matching task already exists → skip creation
- Never create duplicates — this is a critical rule
Step 4: Task Creation
add_task(
title: "[specific, actionable title]",
category: "[appropriate category]",
priority: "[high for time-sensitive, medium otherwise]",
assignee: "parent1",
due_date: "[computed date BEFORE the event]",
notes: "Auto-generated by proactive task intelligence. Supports: [event name] at [time]. [Additional context]",
created_by: "[agent-name]",
surface: "human"
)
Rules for prep task creation:
- Due dates = early enough to act (not the event time itself)
- Include context in notes — why this task exists, what event it supports
- Use
depends_on when tasks have natural sequence
- Time-sensitive prep = high priority; nice-to-have = medium
- Always include
created_by and surface: "human"
Leave-By Time Calculation
For any appointment/activity with a known location:
- Verify starting location — if unknown, create a clarification task instead
get_drive_time(origin: "[location]", destination: "[event location]")
- Leave-by = Event Start - Drive Time - 15 min buffer
- Create task: "Leave for [event] by [calculated time]" with:
- priority: "high"
- notes: include address, drive time, event time
- due_date: event day
CRITICAL: Never calculate leave-by time without confirmed starting location. If unknown → clarification task.
Smart Task Ordering Algorithm
When determining what to serve next, evaluate ALL pending human-surface tasks:
- Time-locked (HIGHEST) — Hard deadlines in next 2 hours (leave-by, expiring tokens, appointment prep)
- Urgent + Due Today — 🔴 priority tasks due today
- High + Due Today — 🟠 priority tasks due today
- Dependencies met — Use
ready_tasks(surface="human") for unblocked tasks
- Location chaining — Same area as last completed task (minimize context switches)
- Energy matching — Match task difficulty to time of day (see
time-awareness skill)
- Quick-win momentum — When equal priority, serve shorter task first (builds momentum)
- Staleness bump — Tasks pending 3+ days get slight priority boost
Calendar-aware: Check upcoming events — don't suggest 2-hour tasks with a meeting in 45 min.
Clarification-First Rule (CRITICAL)
Before making ANY recommendation that depends on unknown state:
- Check if data exists. If not → STOP.
- Create clarification task:
add_task(
title: "[The question you need answered]",
category: "clarification",
priority: "high",
assignee: "parent1",
notes: "[Why the info is needed and what depends on it]",
created_by: "[agent-name]",
surface: "human"
)
- Block dependent work until clarification is answered.
Known Aspirational Data (NOT confirmed reality)
- Meal plan → planned meals, NOT purchased groceries
- Shopping list → items to buy, NOT items already bought
- Task list → things to do, NOT things already done
- Calendar → scheduled events, NOT confirmed attendance
Child Location Safety (CRITICAL)
The system MUST NEVER be the source of truth for a child's physical location.
When childcare is mentioned:
- Create pickup reminder task IMMEDIATELY
- NEVER state child location as current fact
- Ask for pickup time right away
- If pickup time known → time-locked reminder 30 min before
- NEVER use child location as planning input
Queue Visibility
Every nudge includes a footer: 📋 X pending | Y due today
- Count only
surface='human' tasks
- Never silence the queue — the primary assignee should feel the pending count at all times
- Use
task_summary(surface_filter="human") for coaching context
Anti-Patterns (NEVER Do These)
- ❌ Generate tasks without checking for duplicates first
- ❌ Calculate leave-by time without confirmed starting location
- ❌ Assume groceries are purchased because they're on the meal plan
- ❌ State a child's location as fact
- ❌ Suppress the pending task count
- ❌ Create prep tasks with vague titles ("Get ready for appointment")
- ❌ Skip calendar scan before serving tasks