Reminder and Calendar Event Skill
This skill intelligently creates reminders and calendar events from natural language input.
When to Use
Activate this skill when users:
- Explicitly request to set a reminder ("Remind me...", "Set a reminder...")
- Mention future tasks with time information ("I have a meeting at 3 PM")
- Express a need to remember something ("Don't forget...", "I need to...")
- Discuss upcoming events or appointments with time details
When this skill is triggered, you are responsible for actually calling the shell script, not just explaining how to do it.
Usage Instructions
Step 1: Parse User Input
Analyze the user's message to extract (there may be multiple sets):
- Title: A short description of the thing to remember
- Message: Detailed information (optional, can be the same as the title)
- Time: When the reminder should trigger
Key Point: Immediately proceed to Step 2 (call the tool) after completing this parsing. Do not stop at just the parsing stage.
Step 2: Create Reminder
For each identified reminder,
you must use the Bash tool to call
and have it execute the
script to send the reminder and calendar event request.
Important: Don't just state that a reminder will be created—actually call this script.
Script Paths:
- Relative to the skill directory:
- Absolute path: Determined by the installation location of HeadlessKnight
Script Parameters:
- --title: Concise summary (e.g., "Team Meeting", "Call Mom")
- --message: Additional details or context
- --time: Must be one of the following English formats:
- Relative time (English): "in 10 seconds", "in 30 minutes", "in 2 hours", "in 1 day", "in 2 weeks", "in 1 month", "in 1 year"
- Absolute time: ISO format, e.g., "2025-11-24T15:30:00"
- ⚠️ Prohibited: Do not pass Chinese time formats like "十秒", "一小时", etc. You must convert them to English first
Execution Method:
- Use the Bash tool to call the script, do not simulate or just explain it
- Ensure the parameter is converted to English format (follow the conversion rules in the "Time Parsing Guide" below)
- Command format:
node /path/to/create-reminder.js --title="标题" --message="消息" --time="时间"
Step 3: Actually Call the Script
After calling, check the script's output. The script will return confirmation information, including the reminder ID and scheduled time.
Step 4: Confirm Creation
Based on the script's output, confirm to the user that the reminder has been created. Inform the user:
- What was set up
- When it will trigger
- A system notification will automatically appear at the specified time (handled by the CCCore daemon)
Examples
Example 1: Single Reminder
User: "30 分钟后提醒我给 John 打电话"
What You Should Do:
- Parse input: Title="给 John 打电话", Time="in 30 minutes"
- Actually call the script (don't just explain):
bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="给 John 打电话" --message="给 John 打电话" --time="in 30 minutes"
- Wait for the script to return results
- Tell the user: "✅ Reminder set, you will receive a notification in 30 minutes"
Example 2: Multiple Events
User: "我今天下午 2 点有个会,5 点前需要提交报告"
What You Should Do:
-
Identify two events
-
Actually call the script twice:
First Reminder:
bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="会议" --message="参加预定会议" --time="2025-11-24T14:00:00"
Second Reminder:
bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="提交报告" --message="提交报告" --time="2025-11-24T17:00:00"
-
Wait for both scripts to return results
-
Confirm that both reminders have been created
Example 3: Relative Time
User: "别让我忘了 45 分钟后把蛋糕从烤箱拿出来!"
What You Should Do:
- Parse input: Title="把蛋糕从烤箱拿出来", Time="in 45 minutes"
- Actually call the script:
bash
node ${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js --title="把蛋糕从烤箱拿出来" --message="从烤箱取出蛋糕" --time="in 45 minutes"
- Wait for the script to return results
- Tell the user: "✅ I will remind you in 45 minutes"
Time Parsing Guide
⚠️ Critical Reminder: The create-reminder.js script only accepts English time formats. If you pass a Chinese time format, the script will return an error.
Relative Time Conversion
Mandatory: Users may express time in Chinese—you must convert it to English format before calling the script.
Chinese to English Conversion Rules (Must Follow)
Step 1: Convert Chinese numerals to Arabic numerals:
- "十" → 10, "一" → 1, "二" → 2, "三" → 3, "四" → 4, "五" → 5, "六" → 6, "七" → 7, "八" → 8, "九" → 9
- "两" / "二" → 2, "半" → 0.5 (use 30 for 30 minutes)
- "十秒" → 10 seconds, "一分钟" → 1 minute, "两小时" → 2 hours, "三周" → 3 weeks, "四个月" → 4 months, "五年" → 5 years
Step 2: Convert Chinese time units to English words:
- "秒" / "秒后" → "seconds"
- "分钟" / "分钟后" / "分" → "minutes"
- "小时" / "小时后" / "钟头" → "hours"
- "天" / "天后" → "days"
- "周" / "星期" / "周后" → "weeks" (Note: 1 week = 7 days)
- "月" / "个月" / "月后" → "months" (Note: 1 month is calculated as 30 days)
- "年" / "年后" → "years" (Note: 1 year is calculated as 365 days)
Step 3: Combine into the format required by the script:
"in {number} {English unit}"
- Chinese: "十秒后" → Arabic numerals: "10秒" → English: "seconds" → Final format:
- Chinese: "半小时后" → Arabic numerals: "30分钟" → English: "minutes" → Final format:
Specific Conversion Examples (Full Process)
-
User says: "十秒后提醒我"
- Parse: Time part = "十秒后"
- Convert numeral: "十" → 10
- Convert unit: "秒" → "seconds"
- Final parameter passed to script:
-
User says: "半小时后提醒"
- Parse: Time part = "半小时后"
- Convert numeral: "半" → 30 (minutes)
- Convert unit: "小时" → "minutes"
- Final parameter passed to script:
-
User says: "2小时后提醒"
- Parse: Time part = "2小时后"
- Convert numeral: 2 (already a numeral)
- Convert unit: "小时" → "hours"
- Final parameter passed to script:
-
User says: "一周后提醒我"
- Parse: Time part = "一周后"
- Convert numeral: "一" → 1
- Convert unit: "周" → "weeks"
- Final parameter passed to script:
-
User says: "三个月后提醒"
- Parse: Time part = "三个月后"
- Convert numeral: "三" → 3
- Convert unit: "个月" → "months"
- Final parameter passed to script:
-
User says: "明年这个时候提醒我"
- Parse: Time part = "一年后"
- Convert numeral: "一" → 1
- Convert unit: "年" → "years"
- Final parameter passed to script:
-
User says: "明天下午3点"
- This is not a relative time format, use the absolute time rules below and convert to ISO format
Relative Time Formats
- "in X seconds": Second-level reminders
- "in X minutes": Minute-level reminders
- "in X hours": Hour-level reminders
- "in X days": Day-level reminders
- "in X weeks": Week-level reminders (1 week = 7 days)
- "in X months": Month-level reminders (1 month = 30 days)
- "in X years": Year-level reminders (1 year = 365 days)
Absolute Time
Convert natural language to ISO format:
- "今天下午 3 点" → Calculate the ISO datetime for 3 PM on the current day
- "明天上午 9 点" → Calculate the ISO datetime for 9 AM the next day
- "下周一下午 2 点" → Calculate the ISO datetime for 2 PM next Monday
Current Context
Always consider:
- Today's date: Check system context for current date/time
- User's time zone: Use local time for calculations
- Default time: If no time is specified, ask the user or suggest a reasonable default
Additional Features
List Active Reminders
When users ask "What reminders do I have?" or "Show my upcoming events", you can view them by:
- Using the CCCore client command:
cccore-client list-reminders
- Or inform the user that reminders have been created and stored in CCCore
Cancel Reminders
When users want to cancel a specific reminder, use the CCCore client command:
cccore-client cancel-reminder <reminder-id>
- You need to provide the specific reminder ID
Important Notes
-
Must Call the Script: This is not optional! When a user requests a reminder, you
must actually use the Bash tool to call the
script. If you only explain what you will do without actually calling the script, the user will not receive the reminder.
-
Time Format Must Be English: ⚠️
Critical: Regardless of the language the user inputs, the
parameter passed to the script
must be in English format:
- ✅ Correct formats (English): , , , , , , ,
- ❌ Incorrect formats (Chinese): , , , , ,
- If you pass a Chinese time format, the script will return an error and the reminder will not be created!
- Must follow the "Time Parsing Guide" for conversion
-
Depends on CCCore: This script communicates with the CCCore daemon via Socket IPC. Ensure:
- The CCCore daemon is running
- The Socket file exists and is accessible
- If the script returns an error "CCCore daemon not running", prompt the user to start CCCore
-
System Notifications: Reminders will appear as system-level alerts, handled by the CCCore daemon. This process is fully automated—you do not need to manually trigger notifications.
-
Persistence: Reminders are stored in CCCore's data file (
~/.cccore-reminders/reminders.json
) and persist after restarts.
-
Multiple Reminders: If the user mentions multiple events, call the script separately for each event to create reminders.
-
Confirmation: Wait for the script to return results before confirming what was created and when it will trigger.
-
Script Path: The absolute path of the script is
${CLAUDE_PLUGIN_ROOT}/skills/reminder/create-reminder.js
, executed using the
command.
Troubleshooting and Common Issues
Reminder Not Created?
If the user says they didn't receive the reminder, possible causes:
-
Script Not Called: Check if Claude Code actually used the Bash tool to execute the script. If you don't see the script execution, this is the problem.
-
CCCore Daemon Not Running: The script depends on the CCCore daemon.
- Check if the Socket file exists
- Prompt the user to start the CCCore daemon
- Verify the Socket path is correct
-
Incorrect Time Format (Most Common Cause): ⚠️ Check if the
parameter passed to the script is in English format:
- ✅ Correct formats (English): , , , , , , ,
- ❌ Incorrect formats (Chinese): , , , , ,
- If the script returns an error like "Invalid time format", it's definitely because the time format is not in English
- Solution: Follow the "Time Parsing Guide" for conversion
-
Time Conversion Failure: If you can't convert Chinese time to English:
- Ask the user to express the time more clearly
- Provide examples: "Please use formats like 'in 10 seconds', 'in 30 minutes', 'in 2 hours', 'in 1 week', 'in 3 months', or 'in 1 year'"
- Refer to the conversion rules in the "Time Parsing Guide"
-
Missing Parameters: Ensure all required parameters are provided:
,
,
Time Parsing Failed
If the script returns an error (usually due to incorrect time format):
- First check if you passed a Chinese time format (this will cause errors)
- You should have already converted it to English format following the "Time Parsing Guide"
- If you have difficulty converting, ask the user for clarification
- Suggest the user use English formats such as "in 30 minutes", "in 2 hours", "in 1 day", "in 2 weeks", "in 1 month", "in 1 year" or specific times like "2025-11-24T15:30:00"
- Provide examples of valid time formats
Reminder Created but No Notification Appeared
- Check if the CCCore daemon is running properly
- Check if system notifications are enabled in settings
- macOS: System Settings > Notifications
- Windows: Settings > System > Notifications
- Linux: Ensure is installed
- Check the reminder data file:
~/.cccore-reminders/reminders.json