bylarksuite· 47 skills
飞书任务:管理任务、清单和任务智能体。创建待办任务、查看和更新任务状态、拆分子任务、组织任务清单、分配协作成员、上传任务附件、注册或注销任务智能体、更新任务智能体的主页数据、写入智能体任务记录。当用户需要创建待办事项、查看任务列表、跟踪任务进度、管理项目清单或给他人分配任务、为任务上传附件文件、注册注销任务智能体、更新智能体主页数据、写入任务记录时使用。
$npx -y skills add larksuite/cli --skill lark-taskInstalls into the current project.
Run `npx skills use "https://github.com/larksuite/cli" --skill "larksuite/cli/lark-task"` and follow the generated skill instructions now. Read its complete output, redirecting it to a temporary file first if necessary. Resolve relative paths from the supporting-files directory it provides.
Use the skills in "https://github.com/larksuite/cli" that are relevant to the current task. Run `npx skills add "https://github.com/larksuite/cli"` and select the relevant skills, then follow their instructions.
| 1 | # task (v2) |
| 2 | |
| 3 | **CRITICAL — 开始前 MUST 先用 Read 工具读取 [`../lark-shared/SKILL.md`](../lark-shared/SKILL.md),其中包含认证、权限处理** |
| 4 | |
| 5 | > **任务搜索技巧**:先区分用户是否**特地指定使用搜索 skill**,以及是否真的提供了**查询关键字**(例如任务名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了任务查询关键字,则目标是**任务**时优先使用 `+search`。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“今年以来”“已完成”“由我创建”“我关注的”),并且使用 `+search` 与 `+get-related-tasks` / `+get-my-tasks` 都能达到目的时,应优先使用列表型能力,而不是搜索型能力。其中,“与我相关 / 我关注的 / 由我创建”等优先考虑 `+get-related-tasks`;“我负责的 / 分配给我”的列表优先考虑 `+get-my-tasks`。不要把时间范围词(例如“今年以来”)本身误当成 `query` 去走搜索。 |
| 6 | > **任务搜索相关性提示**:`+search` 当前不会自动判断搜索结果与搜索发起人的相关性。如果用户明确要求搜索“与我相关”的任务,必须先识别具体关系,获取当前用户的 `open_id`,并显式传入对应的 `--assignee`(负责人)、`--creator`(创建人)或 `--follower`(关注人)过滤条件;不能只依赖 `query` 期待自动返回与当前用户相关的任务。 |
| 7 | > **任务清单搜索技巧**:任务清单也遵循同样的判断逻辑。先区分用户是否**特地指定使用搜索 skill**,以及是否真的提供了**清单查询关键字**(例如清单名称、关键词、片段描述)。如果用户特地指定使用搜索 skill,或明确给出了清单查询关键字,则优先使用 `+tasklist-search`。如果用户没有特地指定使用搜索 skill,且意图里没有查询关键字,只有范围条件(例如“由我创建的任务清单”“今年以来创建的清单”),并且使用搜索或原生列取清单都能达到目的时,应优先使用原生 `tasklists.list` 接口列取清单(先 `schema task.tasklists.list`,再 `lark-cli task tasklists list --as user ...`),再按 `creator`、`created_at` 等字段做本地筛选和分页控制。 |
| 8 | > **意图区分补充**:像“搜索飞书中今年以来我关注的任务”这类表达,虽然字面带有“搜索”,但如果没有真正的查询关键字,且本质是在限定“与我相关 + 时间范围”,则应优先走 `+get-related-tasks`;像“搜索飞书中由我创建的任务清单”这类表达,如果没有清单关键字,且本质是在限定“清单范围 + 创建者”,则应优先走原生 `tasklists.list` 后筛选,而不是直接走搜索型 shortcut。 |
| 9 | > **用户身份识别**:在用户身份(user identity)场景下,如果用户提到了“我”(例如“分配给我”、“由我创建”),请默认获取当前登录用户的 `open_id` 作为对应的参数值。 |
| 10 | > **术语理解 — 待办 disambiguation(必读)**: |
| 11 | > - 用户提到「待办 / todo / 任务」时,**先判断归属**,不要默认走本 skill。 |
| 12 | > - **走 [lark-minutes](../lark-minutes/SKILL.md) 的 `minutes +todo`**(禁止本 skill):上下文含 **妙记 / 会议纪要 / minute_token / 妙记 URL**(`/minutes/`);或「在某某妙记里新建/修改待办」「妙记 AI 待办」「会议录制里的待办」。 |
| 13 | > - **走本 skill(lark-task)**:任务清单、分配给我、项目待办、截止日期/提醒、子任务、任务清单成员;或 applink 含 `client/todo/task?guid=`;或明确说「飞书任务」「任务中心」「我的任务清单」。 |
| 14 | > - **禁止**:用户要在妙记里加待办时,**不要**调用 `task tasklists list`、`task +create` 或任何 task 命令去「找清单再放任务」。 |
| 15 | > **友好输出**:在输出任务(或清单)的执行结果给用户时,建议同时提取并输出命令返回结果中的 `url` 字段(任务链接),以便用户可以直接点击跳转查看详情。 |
| 16 | |
| 17 | > **创建/更新注意**: |
| 18 | > 1. 只有在设置了 `due`(截止时间)的情况下,才能设置 `repeat_rule`(重复规则)和 `reminder`(提醒时间)。 |
| 19 | > 2. 若同时设置了 `start`(开始时间)和 `due`(截止时间),开始时间必须小于或等于截止时间。 |
| 20 | > 3. 使用 tenant_access_token(应用身份)时,无法跨租户添加任务成员。 |
| 21 | |
| 22 | > **查询注意**: |
| 23 | > 1. 在输出任务详情时,如果需要渲染负责人、创建人等人员字段,除了展示 `id` (例如 open_id) 外,还必须通过其他方式(例如调用通讯录技能)尝试获取并展示这个人的真实名字,以便用户更容易识别。 |
| 24 | > 2. 在输出清单详情时,如果需要渲染 owner、member、角色成员等人员字段,也必须像任务成员展示一样,除了展示 `id` 外,尽量解析并展示对应人员的真实名字。 |
| 25 | > 3. 在输出任务或清单详情时,如果需要渲染创建时间、截止时间等字段,需要使用本地时区来渲染(格式为2006-01-02 15:04:05)。 |
| 26 | |
| 27 | > **Task GUID 定义**: |
| 28 | > Task OpenAPI 中用于更新/操作任务的 `guid` 是任务的全局唯一标识(GUID),不是客户端展示的任务编号(例如 `t104121` / `suite_entity_num`)。 |
| 29 | > 对于 Feishu 的任务 applink(例如 `.../client/todo/task?guid=...`),必须使用 URL query 里的 `guid` 参数作为 task guid。 |
| 30 | |
| 31 | > **从任务清单定位并修改任务的最短路径**: |
| 32 | > 1. 已知任务清单 GUID 时直接使用,不要先搜索;已知任务清单 applink 时,取 URL query 中的 `guid` 作为 `tasklist_guid`。 |
| 33 | > 2. 只有清单名称或关键词、没有 GUID/applink 时,才调用一次 `+tasklist-search` 解析目标清单。 |
| 34 | > 3. 按原生 API 规则先执行 `lark-cli schema task.tasklists.tasks`,再执行 `lark-cli task tasklists tasks --params '{"tasklist_guid":"<tasklist_guid>"}' --as user`。 |
| 35 | > 4. 从清单任务结果中取任务的 `guid`,直接传给 `+update` 或 `+complete`;禁止传客户端展示编号(例如 `t104121`)。这两个 shortcut 也可直接接收包含 `guid=` 的任务 applink。 |
| 36 | > 5. `+update` 返回 `updated_fields` 和每个任务的服务端 `confirmed` 字段;`+complete` 返回 `status`、`completed_at`、`already_completed`。这些字段已确认目标状态时,不要例行追加 `tasks get`;仅在服务端未返回所需字段或用户明确要求完整复核时再查询详情。 |
| 37 | |
| 38 | | Shortcut | 说明 | |
| 39 | |----------|------| |
| 40 | | [`+create`](references/lark-task-create.md) | create a task | |
| 41 | | [`+update`](references/lark-task-update.md) | update task attributes | |
| 42 | | [`+set-ancestor`](references/lark-task-set-ancestor.md) | set or clear a task ancestor | |
| 43 | | [`+comment`](references/lark-task-comment.md) | add a comment to a task | |
| 44 | | [`+complete`](references/lark-task-complete.md) | mark a task as complete | |
| 45 | | [`+reopen`](references/lark-task-reopen.md) | reopen a completed task | |
| 46 | | [`+assign`](references/lark-task-assign.md) | assign or remove task members | |
| 47 | | [`+followers`](references/lark-task-followers.md) | manage task followers | |
| 48 | | [`+reminder`](references/lark-task-reminder.md) | manage task reminders | |
| 49 | | [`+get-my-tasks`](references/lark-task-get-my-tasks.md) | List tasks assigned to me | |
| 50 | | [`+get-related-tasks`](references/lark-task-get-related-tasks.md) | list tasks related to me | |
| 51 | | [`+search`](references/lark-task-search.md) | search tasks | |
| 52 | | [`+upload-attachment`](references/lark-task-upload-attachment.md) | upload a local file as an attachment to a task | |
| 53 | | [`+tasklist-create`](references/lark-task-tasklist-create.md) | create a tasklist and optionally add tasks | |
| 54 | | [`+tasklist-search`](references/lark-task-tasklist-search.md) | search tasklists | |
| 55 | | [`+tasklist-task-add`](references/lark-task-tasklist-task-add.md) | add tasks to a tasklist | |
| 56 | | [`+tasklist-members`](references/lark-task-tasklist-members.md) | manage tasklist members | |
| 57 | |
| 58 | ## API Resources |
| 59 | |
| 60 | ```bash |
| 61 | lark-cli schema task.<resource>.<method> # 调用 API 前必须先查看参数结构 |
| 62 | lark-cli task <resource> <method> [flags] # 调用 API |
| 63 | ``` |
| 64 | |
| 65 | > **重要**:使用原生 API 时,必须先运行 `schema` 查看 `--data` / `--params` 参数结构,不要猜测字段格式。 |
| 66 | |
| 67 | ### tasks |
| 68 | |
| 69 | - `create` — 创建任务 |
| 70 | - `delete` — 删除任务 |
| 71 | - `get` — 获取任务详情 |
| 72 | - `list` — 列取任务列表 |
| 73 | - `patch` — 更新任务 |
| 74 | |
| 75 | ### tasklists |
| 76 | |
| 77 | - `add_members` — 添加清单成员 |
| 78 | - `create` — 创建清单 |
| 79 | - `delete` — 删除清单 |
| 80 | - `get` — 获取清单详情 |
| 81 | - `list` — 获取清单列表 |
| 82 | - `patch` — 更新清单 |
| 83 | - `remove_members` — 移除清单成员 |
| 84 | - `tasks` — 获取清单任务列表 |
| 85 | |
| 86 | ### subtasks |
| 87 | |
| 88 | - `create` — 创建子任务 |
| 89 | - `list` — 获取任务的子任务列表 |
| 90 | |
| 91 | ### members |
| 92 | |
| 93 | - `add` — 添加任务成员 |
| 94 | - `remove` — 移除任务成员 |
| 95 | |
| 96 | ### sections |
| 97 | |
| 98 | - `create` — 创建自定义分组 |
| 99 | - `delete` — 删除自定义分组 |
| 100 | - `get` — 获取自定义分组详情 |
| 101 | - `list` — 获取自定义分组列表 |
| 102 | - `patch` — 更新自定义分组 |
| 103 | - `tasks` — 获取自定义分组任务列表 |
| 104 | |
| 105 | ### custom_fields |
| 106 | |
| 107 | - `create` — 创建自定义字段 |
| 108 | - `get` — 获取自定义字段详情 |
| 109 | - `patch` — 更新自定义字段 |
| 110 | - `list` — 获取自定义字段列表 |
| 111 | - `add` — 将自定义字段加入资源 |
| 112 | - `remove` — 将自定义字段移出资源 |
| 113 | |
| 114 | ### custom_field_options |
| 115 | |
| 116 | - `create` — 创建自定义字段选项 |
| 117 | - `patch` — 更新自定义字段选项 |
| 118 | |
| 119 | ### agent |
| 120 | |
| 121 | - `update_agent_profile` — 更新任务代理的主页内容数据。 |
| 122 | - `register_agent` — 注册AI 智能体 |
| 123 | |
| 124 | ### agent_task_step_info |
| 125 | |
| 126 | - `append_task_steps` — 写入任务记录。 |
| 127 | |
| 128 | ## 权限表 |
| 129 | |
| 130 | | 方法 | 所需 scope | |
| 131 | |------|-----------| |
| 132 | | `tasks.create` | `task:task:write` | |
| 133 | | `tasks.delete` | `task:task:write` | |
| 134 | | `tasks.get` | `task:task:read` | |
| 135 | | `tasks.list` | `task:task:read` | |
| 136 | | `tasks.patch` | `task:task:write` | |
| 137 | | `tasklists.add_members` | `task:tasklist:write` | |
| 138 | | `tasklists.create` | `task:tasklist:write` | |
| 139 | | `tasklists.delete` | `task:tasklist:write` | |
| 140 | | `tasklists.get` | `task:tasklist:read` | |
| 141 | | `tasklists.list` | `task:tasklist:read` | |
| 142 | | `tasklists.patch` | `task:tasklist:write` | |
| 143 | | `tasklists.remove_members` | `task:tasklist:write` | |
| 144 | | `tasklists.tasks` | `task:tasklist:read` | |
| 145 | | `subtasks.create` | `task:task:write` | |
| 146 | | `subtasks.list` | `task:task:read` | |
| 147 | | `members.add` | `task:task:write` | |
| 148 | | `members.remove` | `task:task:write` | |
| 149 | | `sections.create` | `task:section:write` | |
| 150 | | `sections.delete` | `task:section:write` | |
| 151 | | `sections.get` | `task:section:read` | |
| 152 | | `sections.list` | `task:section:read` | |
| 153 | | `sections.patch` | `task:section:write` | |
| 154 | | `sections.tasks` | `task:section:read` | |
| 155 | | `custom_fields.create` | `task:custom_field:write` | |
| 156 | | `custom_fields.get` | `task:custom_field:read` | |
| 157 | | `custom_fields.patch` | `task:custom_field:write` | |
| 158 | | `custom_fields.list` | `task:custom_field:read` | |
| 159 | | `custom_fields.add` | `task:custom_field:write` | |
| 160 | | `custom_fields.remove` | `task:custom_field:write` | |
| 161 | | `custom_field_options.create` | `task:custom_field:write` | |
| 162 | | `custom_field_options.patch` | `task:custom_field:write` | |
| 163 | | `agent.update_agent_profile` | `task:task:write` | |
| 164 | | `agent.register_agent` | `task:task:write` | |
| 165 | | `agent_task_step_info.append_task_steps` | `task:task:write` | |