Skills lark-calendar
Create, update, and delete calendar events and tasks in Lark (Feishu). Includes employee directory for automatic name-to-user_id resolution.
install
source · Clone the upstream repo
git clone https://github.com/openclaw/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/boyangwang/lark-calendar" ~/.claude/skills/openclaw-skills-lark-calendar && rm -rf "$T"
OpenClaw · Install into ~/.openclaw/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/openclaw/skills "$T" && mkdir -p ~/.openclaw/skills && cp -r "$T/skills/boyangwang/lark-calendar" ~/.openclaw/skills/openclaw-skills-lark-calendar && rm -rf "$T"
manifest:
skills/boyangwang/lark-calendar/SKILL.mdsource content
Lark Calendar & Task Skill
Create, update, and delete calendar events and tasks in Lark (Feishu).
Overview
This skill provides full CRUD operations for:
- Calendar Events — meetings, appointments, schedules
- Tasks (Todo) — action items with deadlines
Configuration
Required Environment Variables (in
.secrets.env):
FEISHU_APP_ID=cli_a9f52a4ed7b8ded4 FEISHU_APP_SECRET=<your-app-secret>
Default Calendar:
feishu.cn_caF80RJxgGcbBGsQx64bCh@group.calendar.feishu.cn (Claw calendar)
Default Timezone:
Asia/Singapore
Quick Reference
Create Calendar Event
node skills/lark-calendar/scripts/create-event.mjs \ --title "Meeting with Team" \ --description "Discuss Q2 roadmap" \ --start "2026-02-03 14:00:00" \ --end "2026-02-03 15:00:00" \ --attendees "Boyang,RK" \ --location "Meeting Room A"
Parameters:
| Param | Required | Description |
|---|---|---|
| ✅ | Event title |
| ❌ | Event description |
| ✅ | Start time (YYYY-MM-DD HH:MM:SS) |
| ✅ | End time (YYYY-MM-DD HH:MM:SS) |
| ❌ | Comma-separated names (auto-resolved to user_ids) |
| ❌ | Comma-separated user_ids directly |
| ❌ | Event location |
| ❌ | Timezone (default: Asia/Singapore) |
| ❌ | Calendar ID (uses default if omitted) |
Update Calendar Event
node skills/lark-calendar/scripts/update-event.mjs \ --event-id "f9900f6b-b472-4b17-a818-7b5584abdc37_0" \ --title "Updated Title" \ --start "2026-02-03 15:00:00" \ --end "2026-02-03 16:00:00"
Delete Calendar Event
node skills/lark-calendar/scripts/delete-event.mjs \ --event-id "f9900f6b-b472-4b17-a818-7b5584abdc37_0"
List Calendar Events
# List events for next 7 days node skills/lark-calendar/scripts/list-events.mjs # List events in date range node skills/lark-calendar/scripts/list-events.mjs \ --start "2026-02-01" \ --end "2026-02-28"
Create Task
node skills/lark-calendar/scripts/create-task.mjs \ --title "Review PR #123" \ --description "Code review for authentication module" \ --due "2026-02-05 18:00:00" \ --assignees "Boyang,jc"
Parameters:
| Param | Required | Description |
|---|---|---|
| ✅ | Task title |
| ❌ | Task description |
| ✅ | Due date (YYYY-MM-DD HH:MM:SS) |
| ❌ | Comma-separated names (auto-resolved) |
| ❌ | Comma-separated user_ids directly |
| ❌ | Timezone (default: Asia/Singapore) |
Update Task
node skills/lark-calendar/scripts/update-task.mjs \ --task-id "35fc5310-a1b1-49c7-be75-be631d3079ee" \ --title "Updated Task" \ --due "2026-02-06 18:00:00"
Delete Task
node skills/lark-calendar/scripts/delete-task.mjs \ --task-id "35fc5310-a1b1-49c7-be75-be631d3079ee"
Manage Event Attendees
# Add attendees node skills/lark-calendar/scripts/manage-attendees.mjs \ --event-id "xxx" --add "RK,jc" # Remove attendees node skills/lark-calendar/scripts/manage-attendees.mjs \ --event-id "xxx" --remove "jc"
Manage Task Members
# Add members node skills/lark-calendar/scripts/manage-task-members.mjs \ --task-id "xxx" --add "RK,jc" # Remove members node skills/lark-calendar/scripts/manage-task-members.mjs \ --task-id "xxx" --remove "jc"
Employee Directory
Names are auto-resolved to Lark user_ids. Supported names:
| user_id | Names | Role |
|---|---|---|
| Boyang, by, 博洋 | Boss |
| RK | Leadership, R&D |
| Ding | Leadership, Operations |
| Charline | HR |
| 曾晓玲, xiaoling | HR |
| HH | Research |
| zan, Eva | - |
| Issac | Operations |
| 王铁柱 | Operations |
| 尼克, Nico | Operations |
| Ivan | Operations |
| Dodo | R&D, Product |
| 启超, QiChaoShi | R&D, Design |
| chenglin | R&D, Frontend |
| 冠林, Green | R&D, Frontend |
| sixian, sx, Sixian-Yu | R&D, Frontend |
| jc, sagiri, 俊晨 | R&D, Backend |
| 大明, daming | R&D, Backend |
| Emily Yobal | Intern |
| jingda, 景达 | Intern |
| 刘纪源, 纪源, Aiden | Intern |
Business Rules
- Boyang is always added as attendee to every calendar event (automatic)
- Timezone handling: Uses IANA identifiers (e.g.,
,Asia/Singapore
)Asia/Shanghai - Time format: Always
YYYY-MM-DD HH:MM:SS - user_id vs open_id: This skill uses
format (e.g.,user_id
), NOTdgg163e1
(e.g.,open_id
)ou_xxx
Programmatic Usage
import { createEvent, updateEvent, deleteEvent } from './skills/lark-calendar/lib/calendar.mjs'; import { createTask, updateTask, deleteTask } from './skills/lark-calendar/lib/task.mjs'; import { resolveNames } from './skills/lark-calendar/lib/employees.mjs'; // Create event const result = await createEvent({ title: 'Team Sync', description: 'Weekly standup', startTime: '2026-02-03 10:00:00', endTime: '2026-02-03 10:30:00', attendeeIds: ['dgg163e1', 'gb71g28b'], location: 'Zoom', timezone: 'Asia/Singapore' }); // Create task const task = await createTask({ title: 'Review document', description: 'Q2 planning doc', dueTime: '2026-02-05 18:00:00', assigneeIds: ['dgg163e1'], timezone: 'Asia/Singapore' });
Lark API Reference
Permissions Required
Ensure your Lark app has these scopes:
— Read/write calendar ✅ (already enabled)calendar:calendar
— Read calendar ✅ (already enabled)calendar:calendar:readonly
— Write tasks ⚠️ (needs to be added for task creation)task:task:write
— Read taskstask:task:read
— Read user info ✅ (already enabled)contact:user.employee_id:readonly
To add permissions:
- Go to Lark Open Platform
- Add scopes:
,task:task:write
(for dynamic employee lookup)contact:contact:readonly - Re-publish the app version
Note: Without
contact:contact:readonly, the skill uses a static fallback employee list. Update lib/employees.mjs when team changes.