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.md
source 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:

ParamRequiredDescription
--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:

ParamRequiredDescription
--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_idNamesRole
dgg163e1
Boyang, by, 博洋Boss
gb71g28b
RKLeadership, R&D
53gc5724
DingLeadership, Operations
217ec2c2
CharlineHR
f2bfd283
曾晓玲, xiaolingHR
f26fe45d
HHResearch
45858f91
zan, Eva-
7f79b6de
IssacOperations
1fb2547g
王铁柱Operations
e5997acd
尼克, NicoOperations
438c3c1f
IvanOperations
17g8bab2
DodoR&D, Product
73b45ec5
启超, QiChaoShiR&D, Design
d1978a39
chenglinR&D, Frontend
ef6fc4a7
冠林, GreenR&D, Frontend
b47fa8f2
sixian, sx, Sixian-YuR&D, Frontend
934fbf15
jc, sagiri, 俊晨R&D, Backend
8c4aad87
大明, damingR&D, Backend
ab87g5e1
Emily YobalIntern
55fa337f
jingda, 景达Intern
333c7cf1
刘纪源, 纪源, AidenIntern

Business Rules

  1. Boyang is always added as attendee to every calendar event (automatic)
  2. Timezone handling: Uses IANA identifiers (e.g.,
    Asia/Singapore
    ,
    Asia/Shanghai
    )
  3. Time format: Always
    YYYY-MM-DD HH:MM:SS
  4. user_id vs open_id: This skill uses
    user_id
    format (e.g.,
    dgg163e1
    ), NOT
    open_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 tasks
  • contact:user.employee_id:readonly
    — Read user info ✅ (already enabled)

To add permissions:

  1. Go to Lark Open Platform
  2. Add scopes:
    task:task:write
    ,
    contact:contact:readonly
    (for dynamic employee lookup)
  3. 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.