ワンクリックで
calendar
Record calendar events from natural language. Creates all-day events with no reminders.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Record calendar events from natural language. Creates all-day events with no reminders.
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
SOC 職業分類に基づく
Use this skill whenever the user wants to create, read, edit, or manipulate Word documents (.docx files). Triggers include: any mention of "Word doc", "word document", ".docx", or requests to produce professional documents with formatting like tables of contents, headings, page numbers, or letterheads. Also use when extracting or reorganizing content from .docx files, inserting or replacing images in documents, performing find-and-replace in Word files, working with tracked changes or comments, or converting content into a polished Word document. If the user asks for a "report", "memo", "letter", "template", or similar deliverable as a Word or .docx file, use this skill. Do NOT use for PDFs, spreadsheets, Google Docs, or general coding tasks unrelated to document generation.
Use this skill any time a .pptx file is involved in any way — as input, output, or both. This includes: creating slide decks, pitch decks, or presentations; reading, parsing, or extracting text from any .pptx file (even if the extracted content will be used elsewhere, like in an email or summary); editing, modifying, or updating existing presentations; combining or splitting slide files; working with templates, layouts, speaker notes, or comments. Trigger whenever the user mentions "deck," "slides," "presentation," or references a .pptx filename, regardless of what they plan to do with the content afterward. If a .pptx file needs to be opened, created, or touched, use this skill.
Use this skill any time a spreadsheet file is the primary input or output. This means any task where the user wants to: open, read, edit, or fix an existing .xlsx, .xlsm, .csv, or .tsv file (e.g., adding columns, computing formulas, formatting, charting, cleaning messy data); create a new spreadsheet from scratch or from other data sources; or convert between tabular file formats. Trigger especially when the user references a spreadsheet file by name or path — even casually (like "the xlsx in my downloads") — and wants something done to it or produced from it. Also trigger for cleaning or restructuring messy tabular data files (malformed rows, misplaced headers, junk data) into proper spreadsheets. The deliverable must be a spreadsheet file. Do NOT trigger when the primary deliverable is a Word document, HTML report, standalone Python script, database pipeline, or Google Sheets API integration, even if tabular data is involved.
Multi-memory self-improve: patterns, episodic log, skill updates.
Delegate coding tasks to Claude Code CLI for implementation
Transcribe voice/audio to text using Groq Whisper API
| name | calendar |
| description | Record calendar events from natural language. Creates all-day events with no reminders. |
| short_description | Record calendar events |
| keywords | calendar, schedule, event, 日历, 日程, 安排, 记录, 明天, 后天, 下周, 会议, 约会, 提醒 |
| category | utility |
| metadata | {"nanobot":{"emoji":"📅"}} |
Use this skill when the user wants to record something on a specific day.
Use the exec tool to run a short Python script that imports nanobot.storage.calendar_repository and creates the event directly in ~/.nanobot/system.db.
import sys
from pathlib import Path
# Ensure nanobot is importable
project_root = Path(__file__).resolve().parent if '__file__' in dir() else Path.cwd()
while project_root.name != 'nanobot-webui' and project_root.parent != project_root:
project_root = project_root.parent
if str(project_root) not in sys.path:
sys.path.insert(0, str(project_root))
from nanobot.storage.calendar_repository import get_calendar_repository
repo = get_calendar_repository()
# Optional deduplication: check for existing events on the same day
title = "<event title>"
start_time = "<YYYY-MM-DD>T00:00:00"
end_time = "<YYYY-MM-DD>T23:59:59"
existing = repo.get_events(start_time=start_time[:10], end_time=end_time[:10])
if any(e.get("title") == title for e in existing):
print(f"Event '{title}' already exists on {start_time[:10]}")
else:
event = repo.create_event({
"title": title,
"description": "",
"start_time": start_time,
"end_time": end_time,
"is_all_day": True,
"priority": "medium",
"reminders": [],
})
print(f"Created event: {event['id']} — {event['title']} on {event['start_time'][:10]}")
is_all_day must always be True.reminders must always be an empty list [].start_time and end_time should use ISO format (YYYY-MM-DDTHH:MM:SS).00:00:00 for start and 23:59:59 for end.is_all_day flag to display the event correctly; end_time is only a storage convenience.Convert relative expressions to absolute dates before creating the event:
| User says | Date handling |
|---|---|
| 今天 | today |
| 明天 | tomorrow |
| 后天 | day after tomorrow |
| 下周X | next week's corresponding weekday |
| 下个月X号 | same day next month |
| X月X号 | that specific date (current year) |
| YYYY-MM-DD | use as-is |
If the date is ambiguous, ask the user for clarification before creating the event.
User: 记录明天要开会
Action: Create an all-day event titled "开会" on tomorrow's date.
User: 后天下午去医院
Action: Create an all-day event titled "去医院" on the day after tomorrow.
User: 5月1号出去旅游
Action: Create an all-day event titled "出去旅游" on May 1st of the current year.
exec call fails, show the error to the user and suggest trying again.