SKILL.md
task (v2)
CRITICAL — 开始前 MUST 先用 Read 工具读取 [../lark-shared/SKILL.md](../lark-shared/SKILL.md),其中包含认证、权限处理
命令选择与渐进式发现(必读)
执行任何 Task 命令前,必须先确认能力真实存在,禁止根据用户意图自行拼接或猜测 +<verb>:
- 先将用户意图与下方 Shortcut 表精确匹配。只有表中明确列出的 shortcut 才可直接选择;参数不确定时读取对应 reference 或运行该 shortcut 的
--help。 - 没有精确匹配、或无法确认当前版本是否支持时,先运行
lark-cli task --help,以当前 CLI 输出的命令列表为准。 - help 中存在匹配 shortcut 时,使用 help 列出的完整 shortcut token(例如
+create)运行lark-cli task <shortcut> --help,再按真实 flag 执行。 - help 中没有匹配 shortcut 时,不得尝试相似的
+<verb>;从 help 中选择原生 resource,运行lark-cli task <resource> --help确认 method,再运行lark-cli schema task.<resource>.<method>获取参数结构,最后调用lark-cli task <resource> <method> ...。 - 遇到
unknown_subcommand时必须停止猜测或尝试变体,回到第 2 步重新发现能力。
shortcut 名称只能来自本 Skill 的 Shortcut 表或 lark-cli task --help;原生 resource/method 以逐级 help 为准,参数名、类型和嵌套结构以 method schema 为准。
任务搜索技巧:先区分用户是否特地指定使用搜索 skill,以及是否真的提供了查询关键字(例如任务名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了任务查询关键字,则目标是任务时优先使用
+search。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“今年以来”“已完成”“由我创建”“我关注的”),并且使用+search与+get-related-tasks/+get-my-tasks都能达到目的时,应优先使用列表型能力,而不是搜索型能力。其中,“与我相关 / 我关注的 / 由我创建”等优先考虑+get-related-tasks;“我负责的 / 分配给我”的列表优先考虑+get-my-tasks。不要把时间范围词(例如“今年以来”)本身误当成query去走搜索。
任务搜索相关性提示:+search当前不会自动判断搜索结果与搜索发起人的相关性。如果用户明确要求搜索“与我相关”的任务,必须先识别具体关系,获取当前用户的open_id,并显式传入对应的--assignee(负责人)、--creator(创建人)或--follower(关注人)过滤条件;不能只依赖query期待自动返回与当前用户相关的任务。
任务清单搜索技巧:任务清单也遵循同样的判断逻辑。先区分用户是否特地指定使用搜索 skill,以及是否真的提供了清单查询关键字(例如清单名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了清单查询关键字,则优先使用+tasklist-search。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“由我创建的任务清单”“今年以来创建的清单”),并且使用搜索或原生列取清单都能达到目的时,应优先使用原生tasklists.list接口列取清单(先schema task.tasklists.list,再lark-cli task tasklists list --as user ...),再按creator、created_at等字段做本地筛选和分页控制。
意图区分补充:像“搜索飞书中今年以来我关注的任务”这类表达,虽然字面带有“搜索”,但如果没有真正的查询关键字,且本质是在限定“与我相关 + 时间范围”,则应优先走+get-related-tasks;像“搜索飞书中由我创建的任务清单”这类表达,如果没有清单关键字,且本质是在限定“清单范围 + 创建者”,则应优先走原生tasklists.list后筛选,而不是直接走搜索型 shortcut。
用户身份识别:在用户身份(user identity)场景下,如果用户提到了“我”(例如“分配给我”、“由我创建”),请默认获取当前登录用户的open_id作为对应的参数值。
术语理解 — 待办 disambiguation(必读):
- 用户提到「待办 / todo / 任务」时,先判断归属,不要默认走本 skill。
- 走 [lark-meeting](../lark-meeting/SKILL.md) 的minutes +todo(禁止本 skill):上下文含 妙记 / 会议纪要 / minute_token / 妙记 URL(/minutes/);或「在某某妙记里新建/修改待办」「妙记 AI 待办」「会议录制里的待办」。
- 走本 skill(lark-task):任务清单、分配给我、项目待办、截止日期/提醒、子任务、任务清单成员;或 applink 含client/todo/task?guid=;或明确说「飞书任务」「任务中心」「我的任务清单」。
- 禁止:用户要在妙记里加待办时,不要调用task tasklists list、task +create或任何 task 命令去「找清单再放任务」。
友好输出:在输出任务(或清单)的执行结果给用户时,建议同时提取并输出命令返回结果中的url字段(任务链接),以便用户可以直接点击跳转查看详情。
创建/更新注意:
1. 只有在设置了due(截止时间)的情况下,才能设置repeat_rule(重复规则)和reminder(提醒时间)。
2. 若同时设置了start(开始时间)和due(截止时间),开始时间必须小于或等于截止时间。
3. 使用 tenantaccesstoken(应用身份)时,无法跨租户添加任务成员。
查询注意:
1. 在输出任务详情时,如果需要渲染负责人、创建人等人员字段,除了展示id(例如 open_id) 外,还必须通过其他方式(例如调用通讯录技能)尝试获取并展示这个人的真实名字,以便用户更容易识别。
2. 在输出清单详情时,如果需要渲染 owner、member、角色成员等人员字段,也必须像任务成员展示一样,除了展示id外,尽量解析并展示对应人员的真实名字。
3. 在输出任务或清单详情时,如果需要渲染创建时间、截止时间等字段,需要使用本地时区来渲染(格式为2006-01-02 15:04:05)。
Task GUID 定义:
Task OpenAPI 中用于更新/操作任务的guid是任务的全局唯一标识(GUID),不是客户端展示的任务编号(例如t104121/suiteentitynum)。
对于 Feishu 的任务 applink(例如.../client/todo/task?guid=...),必须使用 URL query 里的guid参数作为 task guid。
从任务清单定位并修改任务的最短路径:
1. 已知任务清单 GUID 时直接使用,不要先搜索;已知任务清单 applink 时,取 URL query 中的guid作为tasklist_guid。
2. 只有清单名称或关键词、没有 GUID/applink 时,才调用一次+tasklist-search解析目标清单。
3. 按原生 API 规则先执行lark-cli schema task.tasklists.tasks,再执行lark-cli task tasklists tasks --params '{"tasklistguid":"<tasklistguid>"}' --as user。
4. 从清单任务结果中取任务的guid,直接传给+update或+complete;禁止传客户端展示编号(例如t104121)。这两个 shortcut 也可直接接收包含guid=的任务 applink。
5.+update返回updatedfields和每个任务的服务端confirmed字段;+complete返回status、completedat、already_completed。这些字段已确认目标状态时,不要例行追加tasks get;仅在服务端未返回所需字段或用户明确要求完整复核时再查询详情。
| Shortcut | 说明 |
|---|---|
[+create](references/lark-task-create.md) |
create a task |
[+update](references/lark-task-update.md) |
update task attributes |
[+set-ancestor](references/lark-task-set-ancestor.md) |
set or clear a task ancestor |
[+comment](references/lark-task-comment.md) |
add a comment to a task |
[+complete](references/lark-task-complete.md) |
mark a task as complete |
[+reopen](references/lark-task-reopen.md) |
reopen a completed task |
[+assign](references/lark-task-assign.md) |
assign or remove task members |
[+followers](references/lark-task-followers.md) |
manage task followers |
[+reminder](references/lark-task-reminder.md) |
manage task reminders |
[+get-my-tasks](references/lark-task-get-my-tasks.md) |
List tasks assigned to me |
[+get-related-tasks](references/lark-task-get-related-tasks.md) |
list tasks related to me |
[+search](references/lark-task-search.md) |
search tasks |
[+upload-attachment](references/lark-task-upload-attachment.md) |
upload a local file as an attachment to a task |
[+tasklist-create](references/lark-task-tasklist-create.md) |
create a tasklist and optionally add tasks |
[+tasklist-search](references/lark-task-tasklist-search.md) |
search tasklists |
[+tasklist-task-add](references/lark-task-tasklist-task-add.md) |
add tasks to a tasklist |
[+tasklist-members](references/lark-task-tasklist-members.md) |
manage tasklist members |
API Resources
lark-cli schema task.<resource>.<method> # 调用 API 前必须先查看参数结构
lark-cli task <resource> <method> [flags] # 调用 API
重要:使用原生 API 时,必须先运行
schema查看--data/--params参数结构,不要猜测字段格式。
tasks
- create — 创建任务 - delete — 删除任务 - get — 获取任务详情 - list — 列取任务列表 - patch — 更新任务
tasklists
- addmembers — 添加清单成员 - create — 创建清单 - delete — 删除清单 - get — 获取清单详情 - list — 获取清单列表 - patch — 更新清单 - removemembers — 移除清单成员 - tasks — 获取清单任务列表
subtasks
- create — 创建子任务 - list — 获取任务的子任务列表
members
- add — 添加任务成员 - remove — 移除任务成员
sections
- create — 创建自定义分组 - delete — 删除自定义分组 - get — 获取自定义分组详情 - list — 获取自定义分组列表 - patch — 更新自定义分组 - tasks — 获取自定义分组任务列表
custom_fields
- create — 创建自定义字段 - get — 获取自定义字段详情 - patch — 更新自定义字段 - list — 获取自定义字段列表 - add — 将自定义字段加入资源 - remove — 将自定义字段移出资源
customfieldoptions
- create — 创建自定义字段选项 - patch — 更新自定义字段选项
agent
- updateagentprofile — 更新任务代理的主页内容数据。 - register_agent — 注册AI 智能体
agenttaskstep_info
- appendtasksteps — 写入任务记录。
权限表
| 方法 | 所需 scope |
|---|---|
tasks.create |
task:task:write |
tasks.delete |
task:task:write |
tasks.get |
task:task:read |
tasks.list |
task:task:read |
tasks.patch |
task:task:write |
tasklists.add_members |
task:tasklist:write |
tasklists.create |
task:tasklist:write |
tasklists.delete |
task:tasklist:write |
tasklists.get |
task:tasklist:read |
tasklists.list |
task:tasklist:read |
tasklists.patch |
task:tasklist:write |
tasklists.remove_members |
task:tasklist:write |
tasklists.tasks |
task:tasklist:read |
subtasks.create |
task:task:write |
subtasks.list |
task:task:read |
members.add |
task:task:write |
members.remove |
task:task:write |
sections.create |
task:section:write |
sections.delete |
task:section:write |
sections.get |
task:section:read |
sections.list |
task:section:read |
sections.patch |
task:section:write |
sections.tasks |
task:section:read |
custom_fields.create |
task:custom_field:write |
custom_fields.get |
task:custom_field:read |
custom_fields.patch |
task:custom_field:write |
custom_fields.list |
task:custom_field:read |
custom_fields.add |
task:custom_field:write |
custom_fields.remove |
task:custom_field:write |
customfieldoptions.create |
task:custom_field:write |
customfieldoptions.patch |
task:custom_field:write |
agent.updateagentprofile |
task:task:write |
agent.register_agent |
task:task:write |
agenttaskstepinfo.appendtask_steps |
task:task:write |