用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/johnalbertini14-glitch/openclaw-skills --skill remindme命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | remindme |
| description | ⏰ simple Telegram reminders for OpenClaw. cron, zero dependencies. |
| tags | ["cron","reminders","productivity","schedule","telegram","discord","slack","whatsapp","signal"] |
| metadata | {"openclaw":{"summary":"**Remind Me v2:** Schedule reminders anywhere. Natural language, native cron, zero dependencies.","emoji":"bell"}} |
| user-invocable | true |
| command-dispatch | prompt |
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 drink water in 10 minutes on telegram
/remindme standup tomorrow at 9am on discord
/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:
Scan the input for these patterns. Match top-to-bottom, first match wins for WHEN:
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 — look for tomorrow, next <day>, on <day>:
| 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 |
Unit conversion table (for everyMs and duration math):
| Unit | Milliseconds |
|---|---|
| 1 second | 1000 |
| 1 minute | 60000 |
| 1 hour | 3600000 |
| 1 day | 86400000 |
| 1 week | 604800000 |
If Layer 1 didn't match, check for these:
| 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 |
end of week, eow | Friday 5pm |
end of month, eom | Last day of month, 5pm |
morning | 9am |
afternoon | 2pm |
evening | 6pm |
tonight | 8pm |
midnight | 12am next day |
noon | 12pm |
If Layers 1-2 didn't match, the input likely references an event or holiday. Use your knowledge to resolve:
Holiday resolution — when the user says "before/after/on ":
Common fixed-date holidays (reference table):
| Holiday | Date |
|---|---|
| New Year's Day | Jan 1 |
| Valentine's Day | Feb 14 |
| St. Patrick's Day | Mar 17 |
| April Fools | Apr 1 |
| US Independence Day | Jul 4 |
| Halloween | Oct 31 |
| Christmas Eve | Dec 24 |
| Christmas | Dec 25 |
| New Year's Eve | Dec 31 |
Floating holidays (vary by year — compute or look up):
Cultural/religious events (if referenced, use your knowledge):
Event-relative patterns:
| Pattern | Resolution |
|---|---|
N days before <event> | event_date - N days |
N days after <event> | event_date + N days |
the day before <event> | event_date - 1 day |
the week of <event> | Monday of event's week, 9am |
on <event> | event_date, 9am |
If you still can't determine WHEN after all layers:
Timezone rule: ALWAYS use the user's local timezone (system timezone). Never default to UTC. If the user explicitly mentions a timezone (e.g. "at 9am EST"), use that instead.
One-shot → ISO 8601 timestamp with the user's local timezone offset.
Recurring (cron) → 5-field cron expression with tz set to the user's IANA timezone.
every day at 9am → expr: "0 9 * * *"every monday at 8:30am → expr: "30 8 * * 1"every weekday at 9am → expr: "0 9 * * 1-5"Recurring (interval) → kind: "every" with everyMs in milliseconds.
every 2 hours → everyMs: 7200000Before proceeding to Step 3, verify:
everyMs: 0).Reminders are useless if the user never sees them. The delivery channel determines WHERE the reminder appears when it fires.
Priority order:
channel: "last" to deliver to the last place the user interacted externally.cron.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
Recurring reminder:
{
"name": "Recurring: <short description>",
"schedule": {
"kind": "cron",
"expr": "<cron expression>",
"tz": "<IANA timezone>"
},
"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>",
Fixed-interval recurring reminder (e.g. "every 2 hours"):
{
"name": "Recurring: <short description>",
"schedule": {
"kind": "every",
"everyMs": <interval in milliseconds>
},
"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
}
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 it 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 if delivery has a transient issue.act:wait or loops for delays longer than 1 minute. Cron handles timing.deleteAfterRun.cron.list to check. Verify gateway was running at the scheduled time."last".references/TEMPLATES.md).See references/TEMPLATES.md for copy-paste templates and the Janitor auto-cleanup setup.