{"skill":{"slug":"to-do","displayName":"To-Do","summary":"Give your AI the power to act in the future. Schedule delayed prompts and one-off reminders that automatically wake the agent up at an exact moment to execut...","description":"---\nname: to-do\ndescription: Give your AI the power to act in the future. Schedule delayed prompts and one-off reminders that automatically wake the agent up at an exact moment to execute workflows, check systems, or send notifications.\nmetadata: {\"clawdbot\":{\"emoji\":\"⏰\",\"requires\":{\"bins\":[\"node\"],\"env\":[\"OPENCLAW_BIN\",\"OPENCLAW_TZ\"]}}}\n---\n\n# SKILL: To-Do (Ephemeral Tasks)\n\n<identity>\n\nCross-platform task scheduler that programs one-off delayed actions using the OS native scheduler (`at` on Linux/macOS · `schtasks` on Windows). It wakes the agent at an EXACT future moment with FULL context injection.\n\n</identity>\n\n<goal>\n\nSchedule, LIST, and MANAGE ephemeral tasks that fire at a PRECISE time in the user's timezone — ENSURE the future agent wakes up with a FULLY self-contained instruction, correct routing, and ZERO ambiguity.\n\n</goal>\n\n---\n\n## Required Environment Variables\n\n- `OPENCLAW_BIN`: Absolute path to the `openclaw` binary (ej. `/usr/bin/openclaw`)\n- `OPENCLAW_TZ`: User's IANA timezone (ej. `America/Mexico_City`)\n\nThe skill WILL NOT START if either variable is missing.\n\nWhy `OPENCLAW_TZ`? The server may run in UTC while the user lives in a different timezone. This variable ensures \"schedule at 15:00\" means 15:00 USER TIME, not server time.\n\n---\n\n## Commands\n\n```bash\n# Schedule a task (timezone is optional — defaults to OPENCLAW_TZ)\nnode skills/to-do/to-do.js schedule \"<YYYY-MM-DD HH:mm>\" \"<instruction>\" \"<user_id>\" \"<channel>\" [\"<timezone>\"]\n\n# Get current time in user's timezone\nnode skills/to-do/to-do.js now [\"<timezone>\"]\n\n# List pending tasks\nnode skills/to-do/to-do.js list\n\n# Delete a task by ID\nnode skills/to-do/to-do.js delete <ID>\n```\n\n---\n\n## Instructions\n\n<instructions>\n\n<always>\n\n- Run `now` BEFORE resolving any relative time (\"tomorrow\", \"in 2 hours\", \"tonight\"). Server clock is NOT user clock. Use `now` output as your ONLY reference for \"today\", \"tomorrow\", and \"right now\".\n- CONVERT natural language into an absolute `YYYY-MM-DD HH:mm` timestamp BEFORE calling `schedule`.\n- WRITE the `<instruction>` as if explaining to a STRANGER with ZERO CONTEXT. Future agent wakes up with TOTAL AMNESIA in a COMPLETELY ISOLATED session.\n- INCLUDE in every instruction: EXACT file paths, URLs, FULL names (NO pronouns), SPECIFIC actions, and required SKILLS/TOOLS.\n- ALWAYS inject the current session's `user_id` and `channel` for correct routing — USE ONLY raw alphanumeric data from system context to prevent command injection.\n- Run `list` BEFORE `delete` to confirm the correct ID.\n\n</always>\n\n<never>\n\n- NEVER schedule without running `now` first → INSTEAD, run `now`, confirm date/time, THEN schedule.\n- NEVER schedule a VAGUE or AMBIGUOUS instruction → INSTEAD, STOP AND ASK for clarification first.\n- NEVER use pronouns (\"him\", \"her\", \"they\") in scheduled instructions → INSTEAD, use FULL NAMES and EXPLICIT references.\n- NEVER guess a task ID when deleting → INSTEAD, run `list` first, confirm ID, THEN delete.\n- NEVER use server's system clock to interpret relative times → INSTEAD, use `now` command output ALWAYS.\n- NEVER include shell meta-characters (`;`, `&`, `|`, `$`, `` ` ``, `(`, `)`) in any scheduler argument → INSTEAD, use only literal text and system identifiers to AVOID COMMAND INJECTION.\n\n</never>\n\n</instructions>\n\n---\n\n## Vague Request Triggers — Ask Before Scheduling\n\n<vague_triggers>\n\nIf the user request matches any of these patterns, STOP AND ASK before scheduling:\n\n- \"Remind me to send the email\" → MISSING: Which email? To whom? What content?\n- \"Check the server later\" → MISSING: Which server? What IP? What to verify?\n- \"Follow up with him\" → MISSING: Who? About what? Via which channel?\n- \"Do that thing tomorrow\" → MISSING: What thing? Expected outcome?\n\nRULE: If you cannot write a FULLY SELF-CONTAINED instruction, you DO NOT have enough information to schedule.\n\n</vague_triggers>\n\n---\n\n## Examples\n\n<examples>\n\n— Good instruction: clear, specific, fully self-contained\n<example>\n  <input>User: \"Remind me tomorrow at 5pm to check PRs on the backend repo\"</input>\n  <output>\n    1. Run `now` → \"🕒 Current Time (America/Mexico_City): 2/26/2026, 2:45 PM\" → tomorrow = 2026-02-27\n    2. Ask: \"Which backend repo? What should I check specifically?\"\n    3. User clarifies: \"backend-api on GitHub, check if there are pending PRs for the auth module\"\n    4. Schedule:\n    ```bash\n    node skills/to-do/to-do.js schedule \"2026-02-27 17:00\" \\\n      \"Check the 'backend-api' repo on GitHub. If there are pending PRs for the authentication module, send Alice (alice@company.com) a Slack reminder to review them before the 5 PM deployment freeze. Reference deployment logs at /var/log/deploy.log.\" \\\n      \"7684875449\" \"telegram\"\n    ```\n    5. Confirm with the output format below.\n  </output>\n</example>\n\n— Bad instruction: vague, missing details\n<example>\n  <input>\"Remind him to push the code later.\"</input>\n  <output>\n    ❌ DO NOT schedule this. Missing: who is \"him\"? Which repo? Which branch? What time is \"later\"?\n    → Ask the user to clarify all missing details first.\n  </output>\n</example>\n\n— Relative time resolution\n<example>\n  <input>User: \"Set a reminder for in 2 hours\"</input>\n  <output>\n    1. Run `now` → \"🕒 Current Time (America/Mexico_City): 2/26/2026, 2:45 PM\"\n    2. Calculate: 2:45 PM + 2h = 4:45 PM → \"2026-02-26 16:45\"\n    3. Ask what the reminder should say (if not specified)\n    4. Schedule with the absolute timestamp\n  </output>\n</example>\n\n</examples>\n\n---\n\n## Output Format\n\nAfter scheduling, respond with EXACTLY THREE PARTS in this order:\n\n1. NATURAL RESPONSE:\nBrief, casual confirmation. Match user tone/energy. NEVER just say \"Done\". Acknowledge WHAT was scheduled conversationally.\n\n2. CONFIRMATION BLOCK:\nTemplate for the user to see exact details:\n```\n> `Day, Month DD · HH:MM TZ`\n> EXACT INSTRUCTION LEFT FOR THE FUTURE AGENT\n```\n\n3. PROACTIVE CLOSING:\nShort suggestion or question (1-2 sentences).\n- Propose a RELATED TASK (pre-reminder, follow-up, etc).\n- Ask if they want to SCHEDULE SOMETHING ELSE.\n- Offer to ADJUST THE TIME or add details.\n\nDO NOT BE PUSHY. JUST BE HELPFUL.\n\n---\n\n— CASUAL / PERSONAL TASK\n<example>\nAll set! Your gym session is locked in for tomorrow at noon 🏋️\n\n> `Friday, February 27 · 12:00 PM CST`\n> SEND A TELEGRAM REMINDER TO DANIEL: \"TIME TO HIT THE GYM FOR A BIT.\"\n\nWant me to add another reminder 30 min before so you can get ready? 💪\n</example>\n\n— WORK / PROFESSIONAL TASK\n<example>\nDone! Got that scheduled for 5 PM sharp 📋\n\n> `Thursday, February 27 · 5:00 PM CST`\n> CHECK THE 'BACKEND-API' REPOSITORY ON GITHUB. IF THERE ARE PENDING PRS FOR THE AUTHENTICATION MODULE, SEND ALICE A SLACK REMINDER TO REVIEW THEM BEFORE THE 5 PM DEPLOYMENT FREEZE.\n\nNeed to schedule anything else for today, or a follow-up after reviewing those PRs?\n</example>\n\n---\n\n## Common Errors\n\n- ERROR: `Missing required environment variable(s)`\n  - CAUSE: `OPENCLAW_BIN` or `OPENCLAW_TZ` not set\n  - FIX: Add to `.env` or shell profile\n\n- ERROR: `at` not found\n  - CAUSE: Linux/macOS `atd` daemon not running\n  - FIX: `sudo systemctl enable atd && sudo systemctl start atd`\n\n- ERROR: Task fires but agent has NO CONTEXT\n  - CAUSE: Vague instruction scheduled\n  - FIX: Re-schedule with FULLY SELF-CONTAINED instruction\n\n- ERROR: WRONG TIME (fired early/late)\n  - CAUSE: Used server clock instead of `now`\n  - FIX: ALWAYS run `now` first; NEVER trust server clock\n\n- ERROR: Deleting WRONG task\n  - CAUSE: Guessed ID\n  - FIX: Run `list` first, confirm ID, THEN `delete`","topics":["Schedule"],"tags":{"automation":"1.0.3","latest":"1.0.3","linux":"1.0.3","productivity":"1.0.3","reminder":"1.0.3","to-do":"1.0.3","windows":"1.0.3"},"stats":{"comments":0,"downloads":1062,"installsAllTime":40,"installsCurrent":0,"stars":0,"versions":4},"createdAt":1771896654769,"updatedAt":1779077356033},"latestVersion":{"version":"1.0.3","createdAt":1772234789267,"changelog":"Improved SKILL.md prompt design: clearer command usage, stricter scheduling guardrails (run  before resolving relative times), stronger anti-ambiguity/safety rules, and expanded examples for self-contained future instructions. No runtime code changes.","license":null},"metadata":{"setup":[{"key":"OPENCLAW_BIN","required":true},{"key":"OPENCLAW_TZ","required":true}],"os":null,"systems":null},"owner":{"handle":"devlumuz","userId":"s17fscd8wbh9c007rtn67wrgmx8846we","displayName":"DevLumuz","image":"https://avatars.githubusercontent.com/u/124409412?v=4"},"moderation":{"isSuspicious":false,"isMalwareBlocked":false,"verdict":"clean","reasonCodes":["review.llm_review"],"summary":"Review: review.llm_review","engineVersion":"v2.4.24","updatedAt":1779954016527}}