Install
openclaw skills install openclaw-reminderCreate 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.
openclaw skills install openclaw-reminderCreate one-time reminder tasks using OpenClaw cron.
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.
--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 executionUse session_status tool to get current session's deliveryContext:
--agent - Get from deliveryContext.accountId (e.g., machu)--to - Get from deliveryContext.to (e.g., channel:1476104553148452958)How to get:
# Get current session info
session_status
# Output contains deliveryContext:
# {
# "channel": "discord",
# "to": "channel:1476104553148452958",
# "accountId": "machu"
# }
Parse user input time, support:
30 seconds, 1 minute, 30 minutes, 2 hours, 1 day3pm, 9am today, 12pm tomorrowConvert to ISO 8601 format for cron.
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-run
User-specified task content must be sanitized before passing to cron:
Validation Method: REJECT dangerous patterns (not escape)
The script rejects any input containing:
$(), backticks `;, |, &, >, <" (breaks CLI quoting)\n (can inject multiple commands)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.
After creating the task, reply to user to confirm:
--session main + --system-event for reliable Discord delivery