🎁 Get the FREE AI Skills Starter Guide β€” Subscribe β†’
BytesAgainBytesAgain
πŸ¦€ ClawHub

Lark Calendar Litiao

by @litiao1224

Create, update, and delete calendar events and tasks in Lark (Feishu). Includes employee directory for automatic name-to-user_id resolution.

TERMINAL
clawhub install lark-calendar-litiao

πŸ“– About This Skill


name: lark-calendar-litiao description: Create, update, and delete calendar events and tasks in Lark (Feishu). Includes employee directory for automatic name-to-user_id resolution. version: 1.0.0 author: Claw AI

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=
    

    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

    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

  • Calendar Events API
  • Calendar Attendees API
  • Tasks API
  • 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.

    βš™οΈ Configuration

    Required Environment Variables (in .secrets.env):

    FEISHU_APP_ID=cli_a9f52a4ed7b8ded4
    FEISHU_APP_SECRET=
    

    Default Calendar: feishu.cn_caF80RJxgGcbBGsQx64bCh@group.calendar.feishu.cn (Claw calendar)

    Default Timezone: Asia/Singapore