Manage the task board - view, create, move, prioritize, and track work items
Scanned 9/23/2026
Install to Claude Code
npx -y skills add tashfeenahmed/scallopbot --skill board --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Board?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/tashfeenahmed-board)More formats (shields.io, HTML) on the badges page.
---
name: board
description: Manage the task board - view, create, move, prioritize, and track work items
user-invocable: true
triggers: [board, kanban, tasks, todo, plate, "what's next", remind, reminder, schedule,
work items, priorities, progress, status, overview, "how am i doing"]
scripts:
run: "scripts/run.ts"
inputSchema:
type: object
properties:
action:
type: string
enum: [view, add, move, update, done, archive, detail, snooze]
description: "Action to perform on the board"
scope:
type: string
enum: [current, all]
description: "View scope. Defaults to naturally active work; use all for a complete durable inventory."
query:
type: string
description: "Natural topic/name from the user's request. Lets a relevant older item return without dumping unrelated history."
column:
type: string
enum: [inbox, backlog, scheduled, in_progress, waiting, done, archived]
description: "Filter by column (for view) or target column (for move)"
priority:
type: string
enum: [urgent, high, medium, low]
description: "Priority level (for add/update/view filter)"
label:
type: string
description: "Filter by label (for view)"
title:
type: string
description: "For kind=nudge, the exact message delivered to the user; write it directly to them, never as an instruction such as 'ask the user'. For kind=task, a short board label."
kind:
type: string
enum: [nudge, task]
description: "nudge=pre-written user-facing message, task=sub-agent work that requires task_config (for add/update)"
trigger_time:
type: string
description: "For ONE-OFF items only: 'in 30 min', 'tomorrow 9am', 'at 3pm', 'today 7pm'. For recurring schedules (every day / daily / every Monday / weekdays / weekends) use the `recurring` object instead — do NOT put 'every day at 8am' in trigger_time."
recurring:
type: object
description: "USE THIS for any user request containing 'every day', 'daily', 'every Monday/Tuesday/...', 'weekdays', or 'weekends'. Example: user says 'remind me every day at 8am to take vitamins' → pass recurring={type:'daily',hour:8,minute:0} and leave trigger_time unset. The item will automatically re-fire on the next occurrence after each trigger."
properties:
type:
type: string
enum: [daily, weekly, weekdays, weekends]
description: "daily=every day, weekly=one specific day of the week (requires dayOfWeek), weekdays=Mon-Fri, weekends=Sat-Sun"
hour:
type: integer
description: "Hour in 24h format (0-23). For '8am' use 8, for '8pm' use 20."
minute:
type: integer
description: "Minute (0-59)"
dayOfWeek:
type: integer
description: "Day of week for type='weekly': 0=Sunday, 1=Monday, 2=Tuesday, 3=Wednesday, 4=Thursday, 5=Friday, 6=Saturday"
labels:
type: array
items:
type: string
description: "Labels/tags (for add/update)"
goal_id:
type: string
description: "Link to a goal (for add/update)"
task_config:
type: object
description: "Sub-agent task config (for add with kind=task)"
properties:
goal:
type: string
tools:
type: array
items:
type: string
item_id:
type: string
description: "Item ID (for move/update/done/archive/detail/snooze)"
status:
type: string
enum: [inbox, backlog, scheduled, in_progress, waiting, done, archived]
description: "Target column (for move)"
result:
type: string
description: "Completion note (for done)"
time:
type: string
description: "New time for snooze, e.g. '1 hour', 'tomorrow 9am'"
required: [action]
metadata:
openclaw:
emoji: "📋"
safety:
localWrite: true
requires:
bins: []
---
# 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.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!