Install
$ agentstack add skill-dropfan-claude-code-plugins-lark-calendar ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
> ⚙️ Cowork / Claude Desktop 执行环境说明(自动注入) > > 本技能依赖本地 lark-cli(@larksuite/cli,可用 command -v lark-cli 定位)及其 ~/.lark-cli 登录态(应用密钥存于 macOS keychain)。 > > 在 Cowork 中运行任何 lark-cli 命令时,必须在本地 macOS 上执行(使用 Desktop Commander 的 start_process / interact_with_process,或其它本地 shell 工具),不要用隔离的 Linux 沙箱 mcp__workspace__bash——沙箱里没有 lark-cli、也读不到 keychain。 > 执行前确保 npm 全局 bin 目录(npm prefix -g 输出目录下的 bin)在 PATH 中。 > > (在 Claude Code 中可忽略本说明,lark-cli 在本机 shell 直接可用。)
calendar (v4)
开始前先读 [../lark-shared/SKILL.md](../lark-shared/SKILL.md)(认证、权限处理)。
CRITICAL — 凡涉及预约日程/会议或查询/搜索会议室,第一步 MUST 读 [references/lark-calendar-schedule-meeting.md](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](references/lark-calendar-agenda.md) | 查看日程安排(默认今天) | | [+search-event](references/lark-calendar-search-event.md) | 按关键词、时间范围和参会人搜索日程, 仅返回 日程ID/主题/时间等信息,详情需走 events get | | [+meeting](references/lark-calendar-meeting.md) | 通过日程事件 ID 获取关联的视频会议信息(meetingid、meetingnote),日程开过视频会议才会有meeting_id | | [+create](references/lark-calendar-create.md) | 创建日程并邀请参会人(ISO 8601 时间) | | [+update](references/lark-calendar-update.md) | 更新既有日程字段,或独立增量添加/移除参会人和会议室 | | [+freebusy](references/lark-calendar-freebusy.md) | 查询用户主日历的忙闲信息和 RSVP 状态 | | [+room-find](references/lark-calendar-room-find.md) | 针对一个或多个明确的时间块查找可用会议室(无明确时间时禁止直接调用,需先走 +suggestion) | | [+rsvp](references/lark-calendar-rsvp.md) | 回复日程(接受/拒绝/待定) | | [+suggestion](references/lark-calendar-suggestion.md) | 根据非明确时间或一段时间范围,推荐多个可用时间块方案 |
前置条件路由
| 场景 | 前置要求 | |------|----------| | 预约日程/会议、查会议室 | 先读 [lark-calendar-schedule-meeting.md](references/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),不能脱离日程单独预定。
- 日程会议 ID(Meeting ID):日程的历史视频会议 ID,在日程上开过视频会议才会有。
术语映射
用户日常说的"帮我约个日历""查一下今天的日历",实际意图是针对日程(Event)的创建或查询,而非操作日历(Calendar)容器本身。自动将口语化的"日历"意图映射为"日程"操作。
意图路由
| 用户意图 | 路由到 | |----------|--------| | 查询过去的会议("昨天的会议""上周的会") | [../lark-vc/SKILL.md](../lark-vc/SKILL.md)(会议数据含即时会议,仅查日程会遗漏) | | 查询日历/日程或未来时间的会议 | 本 skill | | 按关键词搜索日程 | 本 skill(+search-event) | | 从日程获取关联的视频会议 ID 或用户绑定的会议纪要文档 | 本 skill(+meeting) | | 从日程进一步拿 AI 智能纪要 / 逐字稿 / 妙记产物 | 先 +meeting 取 meeting_id,再 [vc +detail](../lark-vc/references/lark-vc-detail.md) → [note +detail](../lark-note/references/lark-note-detail.md) / [minutes +detail](../lark-minutes/references/lark-minutes-detail.md) | | 预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间 | 先判断新建 vs 编辑,再进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md) |
任务类型分流
处理"预约/改约日程、添加/移除参会人、添加/更换会议室、调整时间"时,必须先判断新建 vs 编辑:
- 编辑已有日程的强信号:用户提到已存在的日程锚点(标题、时间段、
这个日程、这场会)并表达修改动作(添加、移除、改到、换会议室、调整时间)。默认走编辑流,绝不能按新建处理。 - 新建日程:用户表达新增意图("新约一个会""创建一个日程""安排一次会议"),且没有指向既有日程的修改动作。
时间推断规范
- 星期的定义:周一是一周的第一天,周日是最后一天。计算"下周一"等相对日期时,基于当前真实日期推算。
- 一天的范围:用户提到"明天""今天"等泛指某天时,时间范围应覆盖整天,不要自行缩减。
- 历史时间约束:不能预约已经完全过去的时间。唯一例外是"跨越当前时间"的日程(开始在过去、结束在未来)。
会议室规则
- 凡是"预定/查询/搜索可用会议室",都必须进入 [schedule-meeting 工作流](references/lark-calendar-schedule-meeting.md)。
+room-find的时间输入必须是确定时间块,不能是时间区间搜索。- 用户仅要求"查会议室"但未提供明确时间时,必须先调用
+suggestion获取可用时间块,再将时间块交给+room-find。严禁猜测时间盲目调用。 - 编辑已有日程时,"添加会议室"默认是增量语义,保留已有会议室;只有用户明确说"更换会议室""移除会议室"时才删除旧会议室。
API Resources
lark-cli calendar [flags]
calendars
create— 创建共享日历delete— 删除共享日历get— 查询日历信息list— 查询日历列表patch— 更新日历信息primary— 查询用户主日历search— 搜索日历
event.attendees
batch_delete— 删除日程参与人create— 添加日程参与人list— 获取日程参与人列表
events
create— 创建日程delete— 删除日程get— 获取日程instance_view— 查询日程视图patch— 更新日程share_info— 获取日程分享链接
freebusys
list— 查询主日历日程忙闲信息
不在本 skill 范围
- 查询过去的视频会议记录 → [lark-vc](../lark-vc/SKILL.md)
- 待办任务管理 → [lark-task](../lark-task/SKILL.md)
- 会议室物理设施管理 → 管理员后台
注意(强制性):
- 涉及日期(时间)字符串与时间戳的相互转换时,务必调用系统命令或脚本代码等外部工具进行处理,以确保转换的绝对准确。违者将导致严重的逻辑错误!
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: DropFan
- Source: DropFan/claude-code-plugins
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.