Generate an ordered list of daily study tasks tailored to the learner's current week focus, recent performance, and available time.
Invoke this skill each time a learner runs /jp-today. It reads the learner's profile and current week plan to produce a concrete, time-bounded task list for today.
| Parameter | Type | Required | Description |
|---|---|---|---|
user_profile | object | yes | Full user record from storage/users.json |
current_week | object | yes | Current week object from the study plan (output of build-study-plan) |
recent_progress | object | yes | User's progress record from storage/progress.json |
available_minutes | integer | yes | Time the learner has today (defaults to user_profile.daily_minutes) |
An ordered array of task objects:
| Field | Type | Description |
|---|---|---|
task_id | string | Unique ID for today's session: {type}_{content_ref}_{YYYYMMDD} |
type | string | Task type: "vocab", "grammar", "listening", "shadowing", "speaking" |
content_ref | string | ID of the item in data/*.json to use |
estimated_minutes | integer | Time allocation for this task |
priority | string | "core" (must do) or "bonus" (if time allows) |
Time is distributed proportionally to the week's focus_area:
Round to nearest 5-minute block. Any remainder becomes bonus time.
Tasks are ordered to optimize learning flow:
If yesterday's daily_state.carry_forward_recommendation exists, prepend a short review task targeting those weak points before the warm-up.
select-vocab-items with recent_mistakes from progressselect-grammar-items with current week focusgenerate-listening-drill matching topic and levelgenerate-shadowing-drill from the same listening itemgenerate-speaking-prompt matching topicInput:
{
"user_profile": { "level": "N5", "daily_minutes": 30, "focus_topics": ["travel"] },
"current_week": { "week_index": 3, "focus_area": "vocab+listening", "target_vocab_count": 7 },
"recent_progress": { "recurring_mistakes": [{"pattern": "は vs が"}] },
"available_minutes": 30
}
Output:
[
{ "task_id": "vocab_003_20260413", "type": "vocab", "content_ref": "vocab_003", "estimated_minutes": 10, "priority": "core" },
{ "task_id": "listen_001_20260413", "type": "listening", "content_ref": "listen_001", "estimated_minutes": 15, "priority": "core" },
{ "task_id": "speak_001_20260413", "type": "speaking", "content_ref": "speak_001", "estimated_minutes": 5, "priority": "bonus" }
]