CRITICAL — Before starting, you MUST first use the Read tool to read ../lark-shared/SKILL.md, which contains authentication and permission handling
Applicable Scenarios
- "Help me organize the to-dos from recent meetings" / "What needs to be done after the meeting"
- "Extract the action items from this meeting" / "What did we agree to do in the meeting"
- "Check the completion status of meeting to-dos" / "Have the meeting commitments been fulfilled"
- "Sync meeting to-dos to Feishu Tasks"
Prerequisites
Only supports user identity. Before execution, ensure authorization has been granted:
lark-cli auth login --domain vc,task,im
lark-cli auth login --domain vc,drive # 读取纪要文档正文
Workflow
{时间范围}
│
├── vc +search ──────────────► 会议列表(meeting_ids)
│
├── vc +notes ───────────────► 纪要文档 tokens
│
├── docs +fetch ─────────────► 读取纪要文档内容(提取待办)
│ 或
├── minutes minutes get ─────► 读取妙记 AI 产物(待办、总结)
│
▼
AI 分析提取待办列表
├── 我方待办(我答应做的)
└── 对方待办(对方承诺做的)
│
▼
im +messages-send ──► 发送确认请求到用户
│
▼
task +create ──► 确认后创建飞书任务
│
▼
base +record-upsert ──► 记录追踪状态
Mode 1: Batch Extraction (Specified Time Range)
Step 1: Determine the time range
Defaultpast 7 days. Inference rules: "today" → the current day, "this week" → this Monday to now, "yesterday" → all of yesterday.
Date conversion must call system commands (such as
date), do not calculate mentally.
Step 2: Query meeting records
lark-cli vc +search --start "<YYYY-MM-DD>" --end "<YYYY-MM-DD>" --format json --page-size 30
- The maximum search time range is 1 month; if exceeded, split the query
- When there is
page_token, you must continue paging and collect allidfields - Record each meeting's
meeting_id、subject、start_time
Step 3: Obtain minutes artifacts
# 批量获取会议纪要信息(单次最多 50 个 meeting_id)
lark-cli vc +notes --meeting-ids "id1,id2,...,idN"
The returned result includes:
note_doc_token— minutes document token (including AI summary and to-dos)verbatim_doc_token— transcript document tokenminute_token— Minutes token
For each meeting minutes, extract the to-do content:
Method A: Extract from the minutes document (recommended, richer content)
lark-cli docs +fetch --doc "<note_doc_token>"
Method B: Extract from Minutes AI artifacts (faster)
lark-cli minutes minutes get --params '{"minute_token": "<minute_token>"}'
lark-cli vc +notes --minute-tokens "<minute_token>"
Step 4: AI analyzes and extracts to-dos
After reading the minutes document content, the AI extracts two types of to-dos from it:
Our to-dos (what I promised others to do):
- Keyword patterns: "I will...", "I am responsible for...", "I will follow up...", "I will send it to you later...", "I will send an email later..."
- Extract: to-do content, involved parties, deadline hints
Their to-dos (what others promised to do):
- Keyword patterns: "He said...", "The other party promised...", "XX will provide...", "Will reply next week..."
- Extract: to-do content, promiser, deadline hints
Output format:
## 会议待办提取结果
### 会议:{会议主题}({日期})
#### 我方待办
| # | 待办内容 | 涉及对象 | 建议截止日 |
|---|---------|---------|-----------|
| 1 | 把报告发给张三 | 张三 | 本周五 |
#### 对方待办
| # | 待办内容 | 承诺人 | 建议截止日 |
|---|---------|--------|-----------|
| 1 | 提供设计稿 | 李四 | 下周三 |
Step 5: Send confirmation request
Send the extracted to-dos to the user via message for confirmation:
lark-cli im +messages-send --chat-id "<chat_id>" --msg-type interactive --content '<飞书卡片JSON>'
The card content includes:
- A brief description of each to-do
- "Confirm task creation" / "Skip" buttons
- "Confirm all" / "Skip all" quick actions
Step 6: Create Feishu tasks
After the user confirms, create a Feishu task for each to-do:
lark-cli task +create --summary "<待办内容>" --due "<截止日>" --description "来源会议:{会议主题}({日期})"
Step 7: Record tracking status
Record the to-do information into the multi-dimensional table (the Base table must be initialized first; see the "Data Initialization" section):
lark-cli base +record-upsert --table-id "<table_id>" --json '{"字段名":"值"}'
Mode 2: Single Meeting Extraction
When the user specifies a meeting:
# 通过会议标题搜索
lark-cli vc +search --keyword "<会议主题>" --start "<date>" --end "<date>"
The subsequent process is the same as Mode 1, but only this one meeting is processed.
Mode 3: Check Completion Status
Step 1: Retrieve tracking records
lark-cli base +record-list --table-id "<table_id>" --filter '...确认状态 = "已确认"'
Step 2: Check task status
lark-cli task +get-my-tasks --query "<待办关键词>"
Step 3: Verify "send email" type commitments
If the to-do content involves "sending an email", check whether the email has been sent:
lark-cli mail +messages-search --query "<邮件关键词>" --from "me"
Fallback note: If the user has not enabled Feishu Mail (the
Step 4: Update tracking status
lark-cli base +record-upsert --table-id "<table_id>" --json '{"字段名":"值"}'
Mode 4: Automatic Archiving
To-dos that remain incomplete for more than 14 days are automatically marked as "Archived":
lark-cli base +record-list --table-id "<table_id>" --filter '...确认状态 = "已确认" AND 创建时间 < 14天前'
Update each record's status to "Archived" and notify the user via Feishu message.
Data Initialization
On first use, create the Bitable tracking data:
Base Table Structure
Table name: Meeting To-Do Tracking
| Field Name | Type | Description |
|---|---|---|
| Meeting Topic | Text | Title of the source meeting |
| Meeting Date | Date | Meeting time |
| To-Do Content | Text | Extracted to-do description |
| To-Do Type | Single select | Our side's to-do / Other side's to-do |
| Owner/Committer | Text | Who will do it |
| Suggested Due Date | Date | Inferred from context |
| Confirmation Status | Single select | Pending confirmation / Confirmed / Skipped / Completed / Archived |
| Associated Task ID | Text | The task_id of the Feishu task |
| Meeting ID | Text | vc meeting_id |
| Creation Time | Date | Record creation time |
Initialization Command
# 1. 创建多维表格
# 注意:+table-create 可能部分成功,需捕获错误后用 +field-create 补字段
# 注意:连续创建字段会触发限流(错误码 800004135),每次调用间隔至少 1 秒
lark-cli base +table-create --name "会议待办追踪" --fields '[
{"name":"会议主题","type":"text"},
{"name":"会议日期","type":"datetime"},
{"name":"待办内容","type":"text"},
{"name":"待办类型","type":"select","multiple":false,"options":[{"name":"我方待办"},{"name":"对方待办"}]},
{"name":"负责人/承诺人","type":"text"},
{"name":"建议截止日","type":"datetime"},
{"name":"确认状态","type":"select","multiple":false,"options":[{"name":"待确认"},{"name":"已确认"},{"name":"已跳过"},{"name":"已完成"},{"name":"已归档"}]},
{"name":"关联任务ID","type":"text"},
{"name":"会议ID","type":"text"},
{"name":"创建时间","type":"datetime"}
]'
# 2. 记录 base_token 和 table_id 到后续使用
On first use, confirm with the user whether to create a tracking table. If the user already has a Base, an existing Base URL can be specified.
Rate Limit Handling: If +table-create partially fails due to rate limiting, the table will still be created successfully. In this case:
- Use
base +table-listto get the table_id- Use
base +field-create --table-id <id> --json '{"name":"字段名","type":"text"}'to add fields one by one, with an interval of 1-2 seconds between each
Learning Mode
When the user repeatedly rejects a certain type of to-do, record the rejection pattern:
- Add a "user preference" record in the Bitable
- On the next extraction, the AI automatically filters out similar types of to-dos
- Example: "meeting minutes type records" are repeatedly rejected → next time automatically skip "record meeting minutes" type to-dos
Permission Table
| Command | Required scope |
|---|---|
vc +search |
vc:meeting:read |
vc +notes |
vc:meeting:read |
minutes.minutes.get |
minutes:minutes:readonly |
docs +fetch |
docx:document:read |
task +create |
task:task:write |
task +get-my-tasks |
task:task:read |
im +messages-send |
im:message:send_as_bot |
base +record-list |
bitable:app:read |
base +record-upsert |
bitable:app:write |
mail +messages-search |
mail:mail:read |
Reference
lark-shared— Authentication, permissions (required reading)lark-vc—+search、+notesDetailed usagelark-minutes— Minutes basic informationlark-doc—+fetchDetailed usagelark-task—+create、+get-my-tasksDetailed usagelark-im—+messages-sendDetailed usagelark-base—+record-list、+record-upsertDetailed usagelark-mail—+messages-searchDetailed usagelark-workflow-meeting-summary— Meeting minutes summary (can be linked)