rpi5/openclaw/skills/remindme/SKILL.md
⏰ simple Telegram reminders for OpenClaw. cron, zero dependencies.
npx skillsauth add nsimonfr/nic-os remindmeInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Set reminders on any channel using natural language. No setup. No dependencies.
/remindme drink water in 10 minutes
/remindme standup tomorrow at 9am
/remindme call mom next monday at 6pm
/remindme in 2 hours turn off oven
/remindme check deployment in 30s
/remindme every day at 9am standup
/remindme every friday at 5pm week recap
/remindme list
/remindme cancel <jobId>
When the user triggers /remindme, determine the intent:
cron.list and show active reminder jobs.<jobId> → call cron.remove with that jobId.Extract three things: WHAT (the message), WHEN (the time), RECURRENCE (one-shot or recurring).
Follow this decision tree in order — stop at the first match:
Relative durations — look for in <number> <unit>:
| Pattern | Duration |
|---|---|
| in Ns, in N seconds, in N sec | N seconds |
| in Nm, in N min, in N minutes | N minutes |
| in Nh, in N hours, in N hr | N hours |
| in Nd, in N days | N * 24 hours |
| in Nw, in N weeks | N * 7 days |
Absolute clock times — look for at <time>:
| Pattern | Meaning |
|---|---|
| at HH:MM, at H:MMam/pm | Today at that time (or tomorrow if past) |
| at Ham/pm, at HH | Today at that hour |
Named days:
| Pattern | Meaning |
|---|---|
| tomorrow | Next calendar day, default 9am |
| tonight | Today at 8pm (or now+1h if past 8pm) |
| next monday..sunday | The coming occurrence of that weekday, default 9am |
| on <day> | Same as next <day> |
Recurring — look for every <pattern>:
| Pattern | Cron/Interval |
|---|---|
| every Nm/Nh/Nd | kind: "every", everyMs: N * unit_ms |
| every day at <time> | kind: "cron", expr: "M H * * *" |
| every <weekday> at <time> | kind: "cron", expr: "M H * * DOW" |
| every weekday at <time> | kind: "cron", expr: "M H * * 1-5" |
| every weekend at <time> | kind: "cron", expr: "M H * * 0,6" |
| every hour | kind: "every", everyMs: 3600000 |
| Phrase | Resolves to |
|---|---|
| in a bit, in a minute, shortly | 30 minutes |
| in a while | 1 hour |
| later, later today | 3 hours |
| end of day, eod | Today 5pm |
| morning | 9am |
| afternoon | 2pm |
| evening | 6pm |
| tonight | 8pm |
| noon | 12pm |
Use your knowledge to resolve holiday/event-relative phrases. If unsure, ask the user to confirm.
If you still can't determine WHEN, ask the user. Never silently pick a default time.
Timezone rule: ALWAYS use the user's local timezone (Europe/Paris for this instance). Never default to UTC.
One-shot → ISO 8601 timestamp with the user's local timezone offset.
Recurring (cron) → 5-field cron expression with tz set to Europe/Paris.
every day at 9am → expr: "0 9 * * *"every monday at 8:30am → expr: "30 8 * * 1"Recurring (interval) → kind: "every" with everyMs in milliseconds.
Before calling cron.add, verify:
everyMs: 0).Priority order:
channel: "last" → last external channel usedcron.addOne-shot reminder:
{
"name": "Reminder: <short description>",
"schedule": {
"kind": "at",
"at": "<ISO 8601 timestamp>"
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "REMINDER: <the user's reminder message>. Deliver this reminder to the user now."
},
"delivery": {
"mode": "announce",
"channel": "<detected channel>",
"to": "<detected target>",
"bestEffort": true
},
"deleteAfterRun": true
}
Recurring reminder:
{
"name": "Recurring: <short description>",
"schedule": {
"kind": "cron",
"expr": "<cron expression>",
"tz": "Europe/Paris"
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "RECURRING REMINDER: <the user's reminder message>. Deliver this reminder to the user now."
},
"delivery": {
"mode": "announce",
"channel": "<detected channel>",
"to": "<detected target>",
"bestEffort": true
}
}
Fixed-interval recurring:
{
"name": "Recurring: <short description>",
"schedule": {
"kind": "every",
"everyMs": 3600000
},
"sessionTarget": "isolated",
"wakeMode": "now",
"payload": {
"kind": "agentTurn",
"message": "RECURRING REMINDER: <the user's reminder message>. Deliver this reminder to the user now."
},
"delivery": {
"mode": "announce",
"channel": "last",
"bestEffort": true
}
}
After cron.add succeeds, reply with:
Reminder set!
"<reminder message>"
<friendly time description> (<ISO timestamp or cron expression>)
Will deliver to: <channel>
Job ID: <jobId> (use "/remindme cancel <jobId>" to remove)
deleteAfterRun: true for one-shot reminders. Omit for recurring.delivery.mode: "announce" — without this, the user never sees the reminder.sessionTarget: "isolated" — reminders run in their own session.wakeMode: "now" — ensures immediate delivery at the scheduled time.delivery.bestEffort: true — prevents job failure on transient delivery issues.act:wait or loops for delays longer than 1 minute.Europe/Paris timezone unless the user specifies another.cron.list to check. Verify gateway was running at the scheduled time./remindme list then cancel old ones.databases
Query today's Immich "on this day" memories and print a summary picoclaw can relay. Use when the user asks about Immich memories, on-this-day, or a recap of past photos from today's date.
documentation
Promote items from Wiki/Inbox into curated Wiki/Pages, merging or creating as Wiki/Schema dictates
development
Audit the LLM Wiki for orphans, broken links, duplicates, and stale facts; write a report page
documentation
Drop a URL or pasted note into the LLM Wiki Inbox in AFFiNE