Lark Calendar & Tasks
Scanned@boyangwang
npx machina-cli add skill @boyangwang/lark-calendar --openclawLark 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 |
|---|---|---|
--title | ✅ | Event title |
--description | ❌ | Event description |
--start | ✅ | Start time (YYYY-MM-DD HH:MM:SS) |
--end | ✅ | End time (YYYY-MM-DD HH:MM:SS) |
--attendees | ❌ | Comma-separated names (auto-resolved to user_ids) |
--attendee-ids | ❌ | Comma-separated user_ids directly |
--location | ❌ | Event location |
--timezone | ❌ | Timezone (default: Asia/Singapore) |
--calendar | ❌ | 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 |
|---|---|---|
--title | ✅ | Task title |
--description | ❌ | Task description |
--due | ✅ | Due date (YYYY-MM-DD HH:MM:SS) |
--assignees | ❌ | Comma-separated names (auto-resolved) |
--assignee-ids | ❌ | Comma-separated user_ids directly |
--timezone | ❌ | 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 |
|---|---|---|
dgg163e1 | Boyang, by, 博洋 | Boss |
gb71g28b | RK | Leadership, R&D |
53gc5724 | Ding | Leadership, Operations |
217ec2c2 | Charline | HR |
f2bfd283 | 曾晓玲, xiaoling | HR |
f26fe45d | HH | Research |
45858f91 | zan, Eva | - |
7f79b6de | Issac | Operations |
1fb2547g | 王铁柱 | Operations |
e5997acd | 尼克, Nico | Operations |
438c3c1f | Ivan | Operations |
17g8bab2 | Dodo | R&D, Product |
73b45ec5 | 启超, QiChaoShi | R&D, Design |
d1978a39 | chenglin | R&D, Frontend |
ef6fc4a7 | 冠林, Green | R&D, Frontend |
b47fa8f2 | sixian, sx, Sixian-Yu | R&D, Frontend |
934fbf15 | jc, sagiri, 俊晨 | R&D, Backend |
8c4aad87 | 大明, daming | R&D, Backend |
ab87g5e1 | Emily Yobal | Intern |
55fa337f | jingda, 景达 | Intern |
333c7cf1 | 刘纪源, 纪源, 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
user_idformat (e.g.,dgg163e1), NOTopen_id(e.g.,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:
calendar:calendar— Read/write calendar ✅ (already enabled)calendar:calendar:readonly— Read calendar ✅ (already enabled)task:task:write— Write tasks ⚠️ (needs to be added for task creation)task:task:read— Read taskscontact:user.employee_id:readonly— Read user info ✅ (already enabled)
To add permissions:
- Go to Lark Open Platform
- Add scopes:
task:task:write,contact:contact:readonly(for dynamic employee lookup) - 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.
Overview
This skill enables full create, update, and delete operations for both Calendar Events and Tasks (Todos) in Lark (Feishu). It includes an employee directory to automatically resolve names to user_ids, simplifying attendee and assignee management. It uses a default calendar and timezone to streamline scheduling.
How This Skill Works
Utilizes Node scripts located under skills/lark-calendar/scripts to perform CRUD operations for events and tasks. Requires FEISHU_APP_ID and FEISHU_APP_SECRET to authenticate with Feishu, and resolves attendee names through the Employee Directory to user_ids, with an optional default calendar and Asia/Singapore timezone.
When to Use It
- Schedule a new meeting with colleagues by creating a calendar event and adding attendees
- Create a task with a due date and assign it to multiple users
- Update event or task details, such as title, time, or attendees
- List upcoming events or events within a date range for planning
- Manage attendees or task members by adding or removing participants
Quick Start
- Step 1: Set FEISHU_APP_ID and FEISHU_APP_SECRET in .secrets.env and confirm the default calendar and Asia/Singapore timezone
- Step 2: Create an event or task using the provided node scripts, supplying title, start/end or due, and attendees as names or IDs
- Step 3: Optionally manage attendees or task members with the respective manage-*.mjs scripts to add or remove participants
Best Practices
- Prefer using attendee-ids or assignee-ids when possible to skip name resolution
- Keep event titles and task descriptions concise and actionable
- Always validate start/end times and the timezone (default Asia/Singapore)
- Rely on the default calendar unless a specific calendar ID is required
- Maintain an up-to-date Employee Directory to ensure accurate name resolution
Example Use Cases
- Create an event titled 'Meeting with Team' from 2026-02-03 14:00 to 15:00 with attendees Boyang and RK
- Update an event's title to 'Updated Title' and shift the time to 15:00-16:00
- Create a task 'Review PR #123' due 2026-02-05 18:00 and assign to Boyang and jc
- Add attendees RK and jc to an existing event
- List events for the next 7 days