lark-calendar
SkillCommunityAudited: no issuesTranslated from ChineseThis skill enables AI agents to manage Lark calendars, including scheduling meetings, searching for events, and booking meeting rooms. It supports creating, updating, and viewing calendar events, as well as checking user availability and recommending meeting times.
npx skills add larksuite/cli/lark-calendarcalendar (v4)
Read ../lark-shared/SKILL.md before starting (authentication, permission handling).
CRITICAL, For any task involving scheduling meetings or querying/searching for meeting rooms, the first step MUST be to read references/lark-calendar-schedule-meeting.md. Do not skip this step to call APIs or Shortcuts directly!
Identity
Calendar operations use --as user by default (to view and manage the current user's calendar). --as bot can only access the bot's own (empty) calendar and will return empty results. Do not use the bot identity to query user calendars.
# BAD, bot identity querying user calendar, returns empty list
lark-cli calendar +agenda --as bot
# GOOD, user identity querying calendar
lark-cli calendar +agenda --as user
Shortcuts
| Shortcut | Description |
|---|---|
+agenda | View calendar agenda (defaults to today) |
+create | Create an event and invite attendees (ISO 8601 time) |
+update | Update existing event fields, or independently add/remove attendees and meeting rooms |
+freebusy | Query busy/free information and RSVP status of the user's primary calendar |
+room-find | Find available meeting rooms for one or more specific time blocks (do not call directly without a specific time; use +suggestion first) |
+rsvp | Respond to an event (accept/decline/tentative) |
+suggestion | Recommend multiple available time block options based on non-specific times or time ranges |
Prerequisite Routing
| Scenario | Prerequisite |
|---|---|
| Scheduling meetings, checking meeting rooms | Read lark-calendar-schedule-meeting.md first |
| Editing existing events | Locate the target event_id first; if it is a recurring event, you must locate the event_id of the specific instance (do not use the original recurring event ID) |
| Verification after delete/update | Wait 2 seconds before querying (API eventual consistency); do not inform the user that you waited |
| Calling any Shortcut | Read its corresponding reference document first |
Core Concepts
- Event Instance: A specific time instance of an expanded recurring event. When operating on a specific instance of a recurring event, you must first locate the
event_idof that instance. Do not use theevent_idof the original recurring event. - All-day Event: An event that occupies a full day without specific start and end times. The end date is included in the event duration.
- Time Block vs Time Range: A time block is a specific, determined continuous period (e.g., 14:00~15:00), while a time range is a general reference (e.g., "this afternoon").
+room-findmust be based on a specific time block and cannot be based on a vague range. - Room: "room" refers to a meeting room. A meeting room is a type of event participant (resource attendee) and cannot be booked independently of an event.
Terminology Mapping
When users say "help me book a calendar" or "check today's calendar," their actual intent is to create or query an Event, not to operate on the Calendar container itself. Automatically map colloquial "calendar" intents to "event" operations.
Intent Routing
| User Intent | Route to |
|---|---|
| Query past meetings ("yesterday's meeting", "last week's meeting") | ../lark-vc/SKILL.md (meeting data includes instant meetings; querying events only will miss these) |
| Query calendar/events or future meetings | This skill |
| Schedule/reschedule events, add/remove attendees, add/change meeting rooms, adjust time | Determine if it is a new creation or an edit, then enter the schedule-meeting workflow |
Task Type Diversion
When handling "schedule/reschedule events, add/remove attendees, add/change meeting rooms, adjust time," you must first determine if it is a new creation or an edit:
- Strong signals for editing an existing event: The user mentions an existing event anchor (title, time slot, "this event", "that meeting") and expresses a modification action (add, remove, change to, change meeting room, adjust time). Default to the edit flow; never treat it as a new creation.
- New event creation: The user expresses an intent to create something new ("book a new meeting", "create an event", "arrange a meeting") and there is no modification action pointing to an existing event.
Time Inference Standards
- Definition of a week: Monday is the first day of the week, and Sunday is the last. When calculating relative dates like "next Monday," base the calculation on the current real-world date.
- Range of a day: When a user mentions general terms like "tomorrow" or "today," the time range should cover the entire day. Do not shorten it yourself.
- Historical time constraint: You cannot schedule events for times that have already completely passed. The only exception is an event that "spans the current time" (starts in the past, ends in the future).
Meeting Room Rules
- For any "book/query/search for available meeting rooms," you must enter the schedule-meeting workflow.
- The time input for
+room-findmust be a specific time block, not a time range search. - If a user only asks to "check meeting rooms" without providing a specific time, you must first call
+suggestionto get available time blocks, then pass the time block to+room-find. It is strictly forbidden to guess a time and call blindly. - When editing an existing event, "adding a meeting room" is an incremental operation by default, preserving existing meeting rooms. Only delete old meeting rooms if the user explicitly says "change meeting room" or "remove meeting room."
API Resources
lark-cli calendar <resource> <method> [flags]
calendars
create, Create a shared calendardelete, Delete a shared calendarget, Query calendar informationlist, Query calendar listpatch, Update calendar informationprimary, Query user's primary calendarsearch, Search calendars
event.attendees
batch_delete, Delete event attendeescreate, Add event attendeeslist, Get event attendee list
events
create, Create an eventdelete, Delete an eventget, Get an eventinstance_view, Query event viewpatch, Update an eventsearch_event, Search events (returns only Event ID/Subject/Time; for details, useevents get)share_info, Get event share link
freebusys
list, Query primary calendar busy/free information
Out of Scope
- Querying past video meeting records → lark-vc
- Task management → lark-task
- Physical meeting room facility management → Admin console
Note (Mandatory):
- When involving the conversion between date (time) strings and timestamps, you must use system commands or script code and other external tools to ensure absolute accuracy. Failure to do so will result in severe logical errors!
calendar (v4)
开始前先读 ../lark-shared/SKILL.md(认证、权限处理)。
CRITICAL — 凡涉及预约日程/会议或查询/搜索会议室,第一步 MUST 读 references/lark-calendar-schedule-meeting.md。禁止跳过此步直接调用 API 或 Shortcut!
身份
日程操作默认使用 --as user(查看和管理当前用户的日程)。--as bot 只能访问 bot 自己的(空)日历,会拿到空结果——不要用 bot 身份查用户日程。
# BAD — bot 身份查用户日程,返回空列表
lark-cli calendar +agenda --as bot
# GOOD — user 身份查日程
lark-cli calendar +agenda --as user
Shortcuts
| Shortcut | 说明 |
|---|---|
+agenda | 查看日程安排(默认今天) |
+create | 创建日程并邀请参会人(ISO 8601 时间) |
+update | 更新既有日程字段,或独立增量添加/移除参会人和会议室 |
+freebusy | 查询用户主日历的忙闲信息和 RSVP 状态 |
+room-find | 针对一个或多个明确的时间块查找可用会议室(无明确时间时禁止直接调用,需先走 +suggestion) |
+rsvp | 回复日程(接受/拒绝/待定) |
+suggestion | 根据非明确时间或一段时间范围,推荐多个可用时间块方案 |
前置条件路由
| 场景 | 前置要求 |
|---|---|
| 预约日程/会议、查会议室 | 先读 lark-calendar-schedule-meeting.md |
| 编辑已有日程 | 先定位目标日程 event_id;若是重复性日程,必须定位到具体实例的 event_id(禁止使用原重复日程 ID) |
| 删除/修改后验证 | 等待 2 秒再查询(API 最终一致性),不要告知用户你等待了 |
| 调用任何 Shortcut | 先读其对应 reference 文档 |
核心概念
- 日程实例(Instance):重复性日程展开后的具体时间实例。操作重复日程的某次实例时,必须先定位该实例的
event_id,禁止使用原重复日程的event_id。 - 全天日程(All-day Event):只按日期占用、没有具体起止时刻的日程,结束日期是包含在日程时间内的。
- 时间块 vs 时间范围:时间块是具体确定的连续时间段(如
14:00~15:00),时间范围是泛指(如"今天下午")。+room-find必须基于确定时间块,不能基于模糊范围。 - 会议室(Room):"room"不是"房间",是"会议室"。会议室是日程的一种参与人(resource attendee),不能脱离日程单独预定。
术语映射
用户日常说的"帮我约个日历""查一下今天的日历",实际意图是针对**日程(Event)**的创建或查询,而非操作日历(Calendar)容器本身。自动将口语化的"日历"意图映射为"日程"操作。
意图路由
| 用户意图 | 路由到 |
|---|---|
| 查询过去的会议("昨天的会议""上周的会") | ../lark-vc/SKILL.md(会议数据含即时会议,仅查日程会遗漏) |
| 查询日历/日程或未来时间的会议 | 本 skill |
| 预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间 | 先判断新建 vs 编辑,再进入 schedule-meeting 工作流 |
任务类型分流
处理"预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间"时,必须先判断新建 vs 编辑:
- 编辑已有日程的强信号:用户提到已存在的日程锚点(标题、时间段、
这个日程、这场会)并表达修改动作(添加、移除、改到、换会议室、调整时间)。默认走编辑流,绝不能按新建处理。 - 新建日程:用户表达新增意图("新约一个会""创建一个日程""安排一次会议"),且没有指向既有日程的修改动作。
时间推断规范
- 星期的定义:周一是一周的第一天,周日是最后一天。计算"下周一"等相对日期时,基于当前真实日期推算。
- 一天的范围:用户提到"明天""今天"等泛指某天时,时间范围应覆盖整天,不要自行缩减。
- 历史时间约束:不能预约已经完全过去的时间。唯一例外是"跨越当前时间"的日程(开始在过去、结束在未来)。
会议室规则
- 凡是"预定/查询/搜索可用会议室",都必须进入 schedule-meeting 工作流。
+room-find的时间输入必须是确定时间块,不能是时间区间搜索。- 用户仅要求"查会议室"但未提供明确时间时,必须先调用
+suggestion获取可用时间块,再将时间块交给+room-find。严禁猜测时间盲目调用。 - 编辑已有日程时,"添加会议室"默认是增量语义,保留已有会议室;只有用户明确说"更换会议室""移除会议室"时才删除旧会议室。
API Resources
lark-cli calendar <resource> <method> [flags]
calendars
create— 创建共享日历delete— 删除共享日历get— 查询日历信息list— 查询日历列表patch— 更新日历信息primary— 查询用户主日历search— 搜索日历
event.attendees
batch_delete— 删除日程参与人create— 添加日程参与人list— 获取日程参与人列表
events
create— 创建日程delete— 删除日程get— 获取日程instance_view— 查询日程视图patch— 更新日程search_event— 搜索日程(仅返回 日程ID/主题/时间,详情需走events get)share_info— 获取日程分享链接
freebusys
list— 查询主日历日程忙闲信息
不在本 skill 范围
注意(强制性):
- 涉及日期(时间)字符串与时间戳的相互转换时,务必调用系统命令或脚本代码等外部工具进行处理,以确保转换的绝对准确。违者将导致严重的逻辑错误!
Installs
217,868First seen
Jun 10, 2026
Auto-fetched from GitHub .
Stats via skills.sh.
Skills similar to lark-calendar:
Installs
Installs
Installs