- name
- reminder
- description
- Create one-time reminder tasks using OpenClaw cron. User specifies reminder time and task content in natural language via Discord, and the task result will be sent back through Discord.
- metadata
Reminder Skill
Create one-time reminder tasks using OpenClaw cron.
Usage
When user says "remind me to XXX in 30 seconds" or "remind me at 3pm", I create a cron job that executes the task and returns the result when the time comes.
Parameter Configuration
Fixed Parameters
--session main- Use main session to inherit Discord context--system-event- System event payload for main session--channel discord- Discord channel--announce- Send result directly to Discord--delete-after-run- Delete task after execution
Dynamic Parameters (from current session context)
Use session_status tool to get current session's deliveryContext:
--agent- Get fromdeliveryContext.accountId(e.g.,machu)--to- Get fromdeliveryContext.to(e.g.,channel:1476104553148452958)
How to get:
# Get current session info
session_status
# Output contains deliveryContext:
# {
# "channel": "discord",
# "to": "channel:1476104553148452958",
# "accountId": "machu"
# }Time Parsing
Parse user input time, support:
- Relative time:
30 seconds,1 minute,30 minutes,2 hours,1 day - Absolute time:
3pm,9am today,12pm tomorrow
Convert to ISO 8601 format for cron.
Usage Example
User says "remind me to check weather in 30 seconds":
# 1. Get current session's deliveryContext
session_status
# Assume output:
# {
# "deliveryContext": {
# "channel": "discord",
# "to": "channel:1476104553148452958",
# "accountId": "machu"
# }
# }
# 2. Calculate time 30 seconds later
date -u -d "+30 seconds" +"%Y-%m-%dT%H:%M:%SZ"
# Result: 2026-02-26T13:30:00Z
# 3. Create cron job (using main session + system-event)
openclaw cron add \
--name "reminder-weather" \
--at "2026-02-26T13:30:00Z" \
--session main \
--system-event "Check Beijing weather" \
--agent machu \
--announce \
--channel discord \
--to "channel:1476104553148452958" \
--delete-after-runTask Content (SECURITY)
User-specified task content must be sanitized before passing to cron:
- Validation Method: REJECT dangerous patterns (not escape)
The script rejects any input containing: - Command substitution: $(), backticks ` ` - Shell metacharacters: ;, |, &, >, < - Double quotes: " (breaks CLI quoting) - Newlines: \ (can inject multiple commands) - Dangerous command prefixes: sudo, rm, wget, curl, bash`, etc.
- Sanitization Script:
Use scripts/sanitize-message.sh to validate input:
./scripts/sanitize-message.sh "user's task content"
# Exit code 0 = safe, non-zero = rejected- If rejected: Tell user the task contains invalid characters and ask them to rephrase without: $() ` ; | & > < " or dangerous commands.
Confirmation Reply
After creating the task, reply to user to confirm:
- "OK, will remind you in X minutes/to do XXX"
- Don't tell user the specific cron command
Notes
- Time must be in the future, not the past
- Task content should be concise and clear
- If time exceeds 48 hours, suggest using calendar
- Always use
--session main+--system-eventfor reliable Discord delivery - Validate task content with sanitize-message.sh before creating job