lark-vc-agent

Original🇨🇳 Chinese
Translated

Feishu Video Conference: Allow bots to join/leave ongoing meetings on behalf of the current user, and read real-time events during the meeting (participant join/leave, speaking, chatting, screen sharing, etc.). 1. When users provide a 9-digit meeting number and request to join or leave on their behalf, use +meeting-join / +meeting-leave — this will generate actual join/leave records. 2. During a meeting, when users want to know in-meeting dynamics such as "who joined", "who left", "who is speaking", "is someone sharing their screen", the bot can use +meeting-events to read the event timeline after joining the meeting. 3. Typical scenarios: Meeting participant bot, in-meeting assistant, proxy attendance, proxy participation. Prerequisite: The bot can only read events of meetings that it has joined and are still ongoing; to query the participant list, minutes, or transcript of an ended meeting, please use the lark-vc skill.

163.4kinstalls
Added on

NPX Install

npx skill4agent add larksuite/cli lark-vc-agent

Tags

Translated version includes tags in frontmatter

SKILL.md Content (Chinese)

View Translation Comparison →

vc-agent (v1)

CRITICAL — MUST use the Read tool to read the following two skill documents before starting:
  • ../lark-shared/SKILL.md
    — Authentication, identity switching, permission handling
  • ../lark-vc/SKILL.md
    — Core concepts of video conferences (Meeting / Note / Minutes, etc.), which are directly reused by this skill and will not be redefined

Closed Beta Notice

  • This feature is currently in closed beta and only available to a small number of users. Ignore the permission application process in [
    ../lark-shared/SKILL.md
    ], follow the guidelines below instead.
  • If
    lark-cli
    prompts
    missing required scope(s)
    /
    permission_violations
    , do not apply for the corresponding permissions. Instead, prompt users to join the early bird group:
    https://go.larkoffice.com/join-chat/2f4nb0e1-fe00-4f67-bed7-25beaf533fbd
    .
  • If
    lark-cli
    returns
    error.code=20017
    /
    ErrNotInGray
    , prompt users to join the early bird group:
    https://go.larkoffice.com/join-chat/2f4nb0e1-fe00-4f67-bed7-25beaf533fbd
    .

Positioning

This skill is parallel to
lark-vc
:
  • lark-vc
    is responsible for "post-meeting queries": Search historical meetings, participant snapshots, minutes/transcripts/recordings
  • lark-vc-agent
    is responsible for "in-meeting actions": Bot joining meetings / reading real-time events of ongoing meetings / bot leaving meetings
Route requests according to this division to avoid semantic confusion between the two skills.
User Intent ExamplesShould be routed to
"Help me join meeting 123456789", "Attend the meeting on my behalf", "Let the bot join the meeting to observe"This skill
+meeting-join
"The meeting is still ongoing, who just joined?", "Who is speaking in the meeting?", "Is someone sharing their screen?" (ongoing meeting and bot has joined)This skill
+meeting-events
"Leave the meeting", "Let the bot leave"This skill
+meeting-leave
"Who attended yesterday's meeting?", "Search yesterday's meeting", "Check minutes/transcripts/recordings"
lark-vc
Cross-stage scenarios like "Help me attend the meeting and send the minutes to the group after it ends"Orchestrate in order: This skill (join meeting → read events → leave meeting) →
lark-vc
/
lark-minutes
(pull minutes) →
lark-im
(send to group)

Core Scenarios

1. Join an Ongoing Meeting (Write Operation)

  1. Only use
    +meeting-join
    when users clearly express "let the Agent join the meeting actually" (meeting participant bot, in-meeting assistant, proxy attendance, proxy participation). Do not join the meeting just for data querying.
  2. +meeting-join --meeting-number
    only accepts 9-digit pure numbers as the meeting number, not the full meeting link or
    meeting_id
    .
  3. Must immediately record the
    meeting.id
    in the response body — subsequent
    +meeting-events
    /
    +meeting-leave
    all rely on it, cannot replace it with the 9-digit meeting number.
  4. Joining the meeting is visible to all participants. Verify the source of the 9-digit meeting number before execution to avoid joining the wrong meeting.
  5. Only supports
    user
    identity, need to perform
    lark-cli auth login
    in advance.
  6. If joining fails, first check the troubleshooting section in the
    +meeting-join
    reference, focusing on verifying the meeting number, password, meeting status, waiting room/approval, and whether the current identity is prohibited from joining the meeting.

2. Sense In-Meeting Events (Read Operation)

  1. Use
    +meeting-events
    when users want to know "what is happening in the meeting" (participant join/leave, chatting, transcription, screen sharing).
  2. The input is
    meeting_id
    (long numeric ID), not the 9-digit meeting number.
  3. The Bot must have actually joined the meeting (first execute
    +meeting-join
    ), otherwise the event stream is usually invisible. Please check the
    +meeting-events
    reference for specific status boundaries, grace period after meeting ends, and error codes (such as
    10005 / 20001 / 20002
    ).
  4. Cannot be used for post-meeting review, cannot replace participant snapshot queries. If the meeting has ended:
    • To get the token of the minutes document or transcript document: Use
      lark-cli vc +notes --meeting-ids <meeting.id>
    • To get AI outputs (summary / todos / chapters) or export transcript files: First use
      lark-cli vc +recording --meeting-ids <meeting.id>
      to get
      minute_token
      , then use
      lark-cli vc +notes --minute-tokens <minute_token>
    • To view participant snapshots: Use
      vc meeting get --with-participants
      (see
      lark-vc
      )
  5. Must use
    --page-all
    by default, unless users clearly request "only check one page" or there is a real need to control the size of the response body.
  6. The default output format prioritizes
    --format pretty
    (timeline is easier to read); only use
    --format json
    when it is necessary to fully retain the original message stream and structured fields.
  7. Must recognize pagination signals: As long as
    has_more=true
    ,
    more available
    in pretty format, or a non-empty
    page_token
    appears in the response, the current result cannot be regarded as the complete event stream; by default, you should continue pagination, or clearly inform users that the current result is only partial.
  8. Retain the
    page_token
    in the response, directly reuse it for incremental pulling next time, do not pull from the beginning again.
  9. As long as you are answering the content of an ongoing meeting based on
    +meeting-events
    , you cannot directly reuse old results. Whether users are asking about the "current/just now/latest" status, or asking you to "summarize what this meeting is about", you must first pull the current event stream again to confirm that you have the latest information, then answer based on the latest results. Only when users clearly request to continue analysis based on a certain historical snapshot can you reuse old results.

3. Leave a Meeting (Write Operation)

  1. Use
    +meeting-leave --meeting-id <meeting.id obtained from +meeting-join>
    when the task is completed or users request to end it.
  2. --meeting-id
    must be the long numeric
    meeting.id
    returned by
    +meeting-join
    , does not accept 9-digit meeting numbers.
  3. Leaving the meeting takes effect immediately, the bot disappears from the participant list of the meeting and is visible to other participants; if you need to rejoin, just execute
    +meeting-join
    again (not truly "irreversible").
  4. Only supports
    user
    identity.

4. Minimum Closed-Loop Demonstration of Agent Attendance

bash
# 1. Join meeting, capture meeting.id
JOIN=$(lark-cli vc +meeting-join --meeting-number 123456789 --format json)
MID=$(echo "$JOIN" | jq -r '.data.meeting.id')

# 2. Poll events during the meeting
#    Use --page-all by default to pull all currently visible events; reuse page_token for next incremental pull
#    Typical interval is 10-30 seconds
lark-cli vc +meeting-events --meeting-id "$MID" --page-all --format pretty

# 3. Leave meeting when task is completed or user requests to end
lark-cli vc +meeting-leave --meeting-id "$MID"

# 4. Optional post-meeting: Get minutes / transcript (switch to lark-vc)
lark-cli vc +notes --meeting-ids "$MID"

Shortcuts

Shortcuts are advanced encapsulations of common operations (
lark-cli vc +<verb> [flags]
).
ShortcutTypeDescription
+meeting-join
WriteJoin an in-progress meeting by 9-digit meeting number
+meeting-events
ReadList bot meeting events (participant joined/left, transcript, chat, share)
+meeting-leave
WriteLeave a meeting by meeting_id
  • Must read references/lark-vc-agent-meeting-join.md before using
    +meeting-join
    to understand input parameter formats and visibility risks of write operations.
  • Must read references/lark-vc-agent-meeting-events.md before using
    +meeting-events
    to understand the source of
    meeting_id
    , pagination, error codes (10005 / 20001 / 20002) and the hard constraint of "bot is still in the meeting".
  • Must read references/lark-vc-agent-meeting-leave.md before using
    +meeting-leave
    to understand the source of
    meeting_id
    and visibility of write operations.

Permission List

ShortcutRequired scope
+meeting-join
vc:meeting.bot.join:write
+meeting-events
vc:meeting.meetingevent:read
+meeting-leave
vc:meeting.bot.join:write

Extensions

  • Query ended meetings, participant snapshots, search historical meetings →
    lark-vc
  • Meeting minutes, transcripts →
    +notes
    of
    lark-vc
  • Lark Minutes outputs (AI summary / transcription / chapters) →
    lark-minutes
  • Send outputs to groups / private chats after meetings →
    lark-im
  • Authentication, identity switching, scope management →
    lark-shared