بنقرة واحدة
magic-calendar
// Create and manage calendar projects for scheduling, content planning, and event management. Use when user wants to create a calendar, schedule events, or build a content/publishing calendar.
// Create and manage calendar projects for scheduling, content planning, and event management. Use when user wants to create a calendar, schedule events, or build a content/publishing calendar.
Use when the user asks to create slides with a specific style, wants to see available PPT templates before creating, describes a custom template style, or wants to extract a template from an existing PPT project.
Core canvas design skill covering project management, multimedia principles, AI image generation, web image search, and design marker processing. Load for any canvas design task. CRITICAL - When user message contains [@design_canvas_project:...] or [@design_marker:...] mentions, or when the user wants to generate video/animation/clip on a canvas project, you MUST load this skill first before any operations.
Manage and optimize custom agent definition files (IDENTITY.md, AGENTS.md, SOUL.md, TOOLS.md). Also handles first-time employee initialization when .workspace/ has no IDENTITY.md. Use when users want to edit agent identity, modify workflow instructions, adjust personality, add/remove tools, optimize prompts, or initialize a new employee from scratch. Trigger signals: 'modify prompt', 'change identity', 'add tool', 'remove tool', 'optimize workflow', 'adjust personality', 'initialize employee', '修改提示词', '改身份', '加工具', '去掉工具', '优化能力', '调性格', '初始化员工', '创建员工'. Do NOT use for: skill creation (use skill-creator), skill searching (use find_skills tool).
Slide/PPT creation skill that provides complete slide creation, editing, and management capabilities. Use when users need to create slides, make presentations, edit slide content, or manage slide projects. CRITICAL - When user message contains [@slide_project:...] mention, you MUST load this skill first before any operations.
Create, modify, evaluate, package, and upload skills. Use when users want to create a skill from scratch, edit or optimize an existing skill, run evals to test a skill, benchmark skill performance, optimize a skill's description for better triggering accuracy, package a skill into a zip, or upload a skill to their skill library. Also use when user asks to "capture this workflow as a skill", "make a skill for X", "turn this into a reusable skill", "package this skill", or "upload to my skill library".
Use when the user wants to interact with DingTalk in any way — including but not limited to: sending messages or DING alerts; managing group chats; querying contacts or org structure; reading, creating, or editing DingTalk docs; managing cloud drive files; operating AI tables (aitable); handling OA approvals; reviewing attendance; managing todos; submitting daily/weekly reports (logs); querying AI meeting minutes; reading mail; browsing calendar events or booking meeting rooms.
| name | magic-calendar |
| description | Create and manage calendar projects for scheduling, content planning, and event management. Use when user wants to create a calendar, schedule events, or build a content/publishing calendar. |
Create and manage interactive calendar projects. Each calendar project is a folder containing index.html (visualization), magic.project.js (metadata and categories), and events/ (monthly event files). All data operations go through tools — do not manually read or edit these files.
1. Create project folder (shell_exec: mkdir)
2. setup_calendar_project → initialize calendar
3. manage_calendar → add categories (optional)
4. manage_calendar → add events (batch or one-by-one)
User request
├── Create new calendar → setup_calendar_project
├── Add event/schedule/plan → manage_calendar (add_event)
├── View/query events → manage_calendar (list_events)
├── Modify existing event → manage_calendar (update_event)
├── Delete/cancel event → manage_calendar (delete_event)
├── Add event category → manage_calendar (add_category)
└── View categories → manage_calendar (list_categories)
Initialize a calendar project in an existing folder. You must create the folder first via shell_exec.
| Param | Required | Type | Description |
|---|---|---|---|
project_path | yes | string | Existing folder path (relative to workspace). Name according to user's language |
calendar_name | yes | string | Calendar display name |
description | no | string | Calendar description |
timezone | no | string | IANA timezone identifier, default Asia/Shanghai |
initial_categories | no | string | JSON array string. Example: '[{"id":"publish","name":"Publish","color":"#4CAF50"}]' |
Manage calendar events and categories.
| Param | Type | Description |
|---|---|---|
action | string | add_event / list_events / update_event / delete_event / add_category / list_categories |
project_path | string | Calendar project folder path (relative to workspace) |
Only title + start are required. All other fields are optional with sensible defaults.
| Param | Required | Type | Description |
|---|---|---|---|
title | yes | string | Event title |
start | yes | string | YYYY-MM-DD HH:MM for timed events; YYYY-MM-DD for all-day events |
end | no | string | Same format as start. Default: timed +1h, all-day same day |
description | no | string | Event description |
location | no | string | Location |
status | no | string | confirmed (default) / tentative / cancelled / completed |
category | no | string | Category ID (must exist) |
recurrence | no | string | Recurrence rule as JSON string (see below) |
All filters are optional. No filters = return all events.
| Param | Type | Description |
|---|---|---|
date_from | string | Start date filter (YYYY-MM-DD) |
date_to | string | End date filter, inclusive (YYYY-MM-DD) |
category | string | Filter by category ID |
keyword | string | Search in title and description |
Partial update — only pass fields you want to change.
| Param | Required | Type | Description |
|---|---|---|---|
event_id | yes | string | Event ID (from add_event or list_events result) |
title | no | string | New title |
start | no | string | New start time |
end | no | string | New end time |
description | no | string | New description |
location | no | string | New location |
status | no | string | New status |
category | no | string | New category ID |
recurrence | no | string | New recurrence rule (JSON string) |
| Param | Required | Type | Description |
|---|---|---|---|
event_id | yes | string | Event ID |
| Param | Required | Type | Description |
|---|---|---|---|
category_id | yes | string | Alphanumeric identifier (e.g. meeting, publish) |
category_name | yes | string | Display name |
category_color | yes | string | Hex color (e.g. #4CAF50) |
No additional parameters.
Pass as JSON string in the recurrence parameter:
{"type": "daily", "interval": 1, "end_date": "2026-06-30"}
{"type": "weekly", "interval": 1, "days_of_week": [1, 3, 5]}
{"type": "monthly", "interval": 1, "day_of_month": 15, "end_date": "2026-12-31"}
type: daily / weekly / monthlyinterval: repeat every N days/weeks/months, default 1days_of_week: for weekly only, 1=Mon … 7=Sunday_of_month: for monthly, defaults to the day from startend_date: YYYY-MM-DD, omit for indefinitefrom sdk.tool import tool
# 1. Create project folder
tool.call("shell_exec", {"command": "mkdir -p .workspace/content-calendar"})
# 2. Setup calendar with initial categories
tool.call("setup_calendar_project", {
"project_path": "content-calendar",
"calendar_name": "Content Publishing Calendar",
"description": "30-day rolling content plan",
"initial_categories": '[{"id":"publish","name":"Publish","color":"#4CAF50"},{"id":"review","name":"Review","color":"#2196F3"}]'
})
# 3. Minimal event (title + start only)
tool.call("manage_calendar", {
"action": "add_event",
"project_path": "content-calendar",
"title": "Weekly standup",
"start": "2026-04-21 10:00"
})
# 4. Full event
tool.call("manage_calendar", {
"action": "add_event",
"project_path": "content-calendar",
"title": "Product review video",
"start": "2026-04-22 14:00",
"end": "2026-04-22 15:30",
"category": "publish",
"location": "Studio 3F",
"description": "30s vertical tutorial"
})
# 5. Recurring event
tool.call("manage_calendar", {
"action": "add_event",
"project_path": "content-calendar",
"title": "Content review meeting",
"start": "2026-04-21 09:00",
"recurrence": '{"type":"weekly","interval":1,"days_of_week":[1,3,5],"end_date":"2026-06-30"}'
})
# 6. All-day event (date-only start)
tool.call("manage_calendar", {
"action": "add_event",
"project_path": "content-calendar",
"title": "Product launch day",
"start": "2026-05-01",
"category": "publish"
})
from sdk.tool import tool
# Query by date range
result = tool.call("manage_calendar", {
"action": "list_events",
"project_path": "content-calendar",
"date_from": "2026-04-21",
"date_to": "2026-04-27"
})
print(result.content)
# Mark event as completed
tool.call("manage_calendar", {
"action": "update_event",
"project_path": "content-calendar",
"event_id": "evt_a7f3b2",
"status": "completed"
})
# Delete event
tool.call("manage_calendar", {
"action": "delete_event",
"project_path": "content-calendar",
"event_id": "evt_c3d4e5"
})
setup_calendar_project does not create folders; use shell_exec beforehandid when creating; use the returned ID for update/deleteYYYY-MM-DD HH:MM for timed events, YYYY-MM-DD for all-day. No seconds or timezone suffixes