Board Skill
Unified kanban task board that replaces the reminder and progress skills.
Columns
- inbox: Untriaged items (agent-created proactive triggers)
- backlog: Triaged, not yet scheduled
- scheduled: Has a trigger time, waiting to fire
- in_progress: Being worked on
- waiting: Blocked on something
- done: Completed
- archived: Dismissed/expired/old done
Actions
view: Show the board. Optional filters: column, priority, label
add: Create a new item. Required: title. Optional: kind, trigger_time, priority, labels, goal_id, task_config, recurring
move: Move item to a column. Required: item_id, status (target column)
update: Edit an item. Required: item_id. Optional: title, priority, labels, trigger_time, kind
done: Mark complete. Required: item_id. Optional: result (completion note)
archive: Dismiss/archive an item. Required: item_id
detail: Show full item detail, including durable worker/attempt/lease/error state and result cost. Required: item_id
snooze: Reschedule trigger time. Required: item_id, time
Priority Levels
urgent > high > medium (default) > low
Item Kinds
nudge: A pre-written message/reminder delivered verbatim to the user. The title must address them directly.
task: Sub-agent work that runs autonomously under a durable lease with heartbeats and bounded retries, then stores its result. Put internal instructions in task_config.goal, not in a nudge.
User-facing nudge text
For a scheduled nudge, title is the exact notification text. Never store a plan for what the bot should say.
- BAD:
Daily check-in with Sam - ask about priorities and deadlines
- GOOD:
Hey Sam, what are your priorities and deadlines today? How are things going?
- BAD:
Send the user a reminder to take their medication
- GOOD:
Quick reminder to take your medication.
If the bot must gather data or perform work before messaging, use kind: "task" and put the work in task_config.goal.
Recurring vs one-off
The system supports both. Pick the right one:
- One-off: use
trigger_time — e.g. "remind me tomorrow at 9am" → trigger_time: "tomorrow 9am". Fires once, then done.
- Recurring: use the
recurring object — e.g. "remind me every day at 8am" → recurring: {"type":"daily","hour":8,"minute":0}. Automatically re-fires on each next occurrence forever until the user archives it.
If the user says any of these, they want recurring (never trigger_time):
| User says |
Use |
| "every day at 8am" / "daily at 8am" |
recurring: {"type":"daily","hour":8,"minute":0} |
| "every Monday at 9am" |
recurring: {"type":"weekly","hour":9,"minute":0,"dayOfWeek":1} |
| "every weekday at 9am" / "weekdays at 9am" |
recurring: {"type":"weekdays","hour":9,"minute":0} |
| "every weekend at 10am" / "weekends at 10am" |
recurring: {"type":"weekends","hour":10,"minute":0} |
dayOfWeek: 0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat.
hour is 24h: 8am=8, noon=12, 2pm=14, 8pm=20.
Never put "every day at 8am" as a string into trigger_time — use the recurring object.
1---2name: board3description: Manage the task board - view, create, move, prioritize, and track work items4---56# Board Skill78Unified kanban task board that replaces the reminder and progress skills.910## Columns11- **inbox**: Untriaged items (agent-created proactive triggers)12- **backlog**: Triaged, not yet scheduled13- **scheduled**: Has a trigger time, waiting to fire14- **in_progress**: Being worked on15- **waiting**: Blocked on something16- **done**: Completed17- **archived**: Dismissed/expired/old done1819## Actions20- `view`: Show the board. Optional filters: column, priority, label21- `add`: Create a new item. Required: title. Optional: kind, trigger_time, priority, labels, goal_id, task_config, recurring22- `move`: Move item to a column. Required: item_id, status (target column)23- `update`: Edit an item. Required: item_id. Optional: title, priority, labels, trigger_time, kind24- `done`: Mark complete. Required: item_id. Optional: result (completion note)25- `archive`: Dismiss/archive an item. Required: item_id26- `detail`: Show full item detail, including durable worker/attempt/lease/error state and result cost. Required: item_id27- `snooze`: Reschedule trigger time. Required: item_id, time2829## Priority Levels30urgent > high > medium (default) > low3132## Item Kinds33- `nudge`: A pre-written message/reminder delivered verbatim to the user. The `title` must address them directly.34- `task`: Sub-agent work that runs autonomously under a durable lease with heartbeats and bounded retries, then stores its result. Put internal instructions in `task_config.goal`, not in a nudge.3536### User-facing nudge text3738For a scheduled `nudge`, `title` is the exact notification text. Never store a plan for what the bot should say.3940- BAD: `Daily check-in with Sam - ask about priorities and deadlines`41- GOOD: `Hey Sam, what are your priorities and deadlines today? How are things going?`42- BAD: `Send the user a reminder to take their medication`43- GOOD: `Quick reminder to take your medication.`4445If the bot must gather data or perform work before messaging, use `kind: "task"` and put the work in `task_config.goal`.4647## Recurring vs one-off4849The system supports both. **Pick the right one:**5051- **One-off**: use `trigger_time` — e.g. "remind me tomorrow at 9am" → `trigger_time: "tomorrow 9am"`. Fires once, then done.52- **Recurring**: use the `recurring` object — e.g. "remind me every day at 8am" → `recurring: {"type":"daily","hour":8,"minute":0}`. Automatically re-fires on each next occurrence forever until the user archives it.5354If the user says any of these, they want **recurring** (never `trigger_time`):5556| User says | Use |57|---|---|58| "every day at 8am" / "daily at 8am" | `recurring: {"type":"daily","hour":8,"minute":0}` |59| "every Monday at 9am" | `recurring: {"type":"weekly","hour":9,"minute":0,"dayOfWeek":1}` |60| "every weekday at 9am" / "weekdays at 9am" | `recurring: {"type":"weekdays","hour":9,"minute":0}` |61| "every weekend at 10am" / "weekends at 10am" | `recurring: {"type":"weekends","hour":10,"minute":0}` |6263`dayOfWeek`: 0=Sun, 1=Mon, 2=Tue, 3=Wed, 4=Thu, 5=Fri, 6=Sat.6465`hour` is 24h: 8am=8, noon=12, 2pm=14, 8pm=20.6667**Never** put "every day at 8am" as a string into `trigger_time` — use the `recurring` object.