CRITICAL — Before starting, you MUST first use the Read tool to read ../lark-shared/SKILL.md, which contains authentication and permission handling
Command selection and progressive discovery (required reading)
Before executing any Task command, you must first confirm that the capability actually exists; it is forbidden to assemble or guess +<verb>:
- First precisely match the user's intent against the Shortcut table below. Only shortcuts explicitly listed in the table may be selected directly; when parameters are uncertain, read the corresponding reference or run the shortcut's
--help。 - When there is no exact match, or when it cannot be confirmed whether the current version supports it, first run
lark-cli task --help, and take the command list output by the current CLI as authoritative. - When a matching shortcut exists in help, use the complete shortcut token listed in help (for example
+create) to runlark-cli task <shortcut> --help, and then execute according to the actual flags. - When there is no matching shortcut in help, do not try a similar
+<verb>; select a native resource from help, runlark-cli task <resource> --helpto confirm the method, then runlark-cli schema task.<resource>.<method>to obtain the parameter structure, and finally calllark-cli task <resource> <method> ...。 - When encountering
unknown_subcommand, you must stop guessing or trying variants, and return to step 2 to rediscover the capability.
Shortcut names can only come from this Skill's Shortcut table or lark-cli task --help; native resource/method is based on level-by-level help, and parameter names, types, and nested structures are based on the method schema.
Task search tips: first distinguish whether the userspecifically specifies using the search skill, and whether they actually providequery keywords(such as task name, keyword, or fragment description). If the user specifically specifies using the search skill, or clearly provides task query keywords, then when the target istask, prioritize using
+search. If the user does not specifically specify using the search skill, and the intent contains no query keywords, only scope conditions (such as "since the beginning of this year", "completed", "created by me", or "followed by me"), and using+searchand+get-related-tasks/+get-my-taskscan both achieve the goal, you should prioritize using list-type capabilities rather than search-type capabilities. Among these, for "related to me / followed by me / created by me", prioritize considering+get-related-tasks; for lists of "assigned to me / my responsibility", prioritize considering+get-my-tasks. Do not mistake time-range terms themselves (such as "since the beginning of this year") forqueryand use search. Task search relevance tips:+searchCurrently does not automatically determine the relevance of search results to the search initiator. If the user explicitly requests searching for tasks "related to me", you must first identify the specific relationship, obtain the current user'sopen_id, and explicitly pass the corresponding--assignee(assignee),--creator(creator), or--follower(follower) filter condition; you cannot rely only onqueryand expect it to automatically return tasks related to the current user. Task list search tips: Task lists follow the same judgment logic. First, distinguish whether the user hasspecifically specified to use the search skill, and whether they have actually providedlist query keywords(e.g., list name, keyword, fragment description). If the user specifically specifies to use the search skill, or explicitly provides list query keywords, prioritize using+tasklist-search. If the user does not specifically specify to use the search skill, and there are no query keywords in the intent, only scope conditions (e.g., "task lists created by me", "lists created since the beginning of this year"), and using search or native list retrieval can both achieve the goal, prioritize using the nativetasklists.listinterface to retrieve lists (firstschema task.tasklists.list, thenlark-cli task tasklists list --as user ...), then perform local filtering and pagination control based on fields such ascreator、created_at. Intent distinction supplement: For expressions like "search for tasks I follow in Feishu since the beginning of this year", although they literally contain "search", if there are no actual query keywords and the essence is to limit "related to me + time range", prioritize+get-related-tasks; for expressions like "search for task lists created by me in Feishu", if there are no list keywords and the essence is to limit "list scope + creator", prioritize nativetasklists.listfollowed by filtering, rather than directly using a search-type shortcut. User identity recognition: In user identity scenarios, if the user mentions "me" (e.g., "assigned to me", "created by me"), by default obtain the current logged-in user'sopen_idas the corresponding parameter value. Terminology understanding — todo disambiguation (required reading):
- When the user mentions "todo / task",first determine the attribution, do not default to this skill.
- Go to lark-meeting for
minutes +todo(this skill is prohibited): the context contains Minutes / meeting minutes / minute_token / Minutes URL(/minutes/); or "create/modify a todo in a certain Minutes", "Minutes AI todo", "todo in meeting recording".- Go to this skill (lark-task): task lists, assigned to me, project todos, due date/reminder, subtasks, task list members; or the applink contains
client/todo/task?guid=; or explicitly says "Feishu Tasks", "Task Center", "my task list".- Prohibited: when the user wants to add a todo in Minutes,do notcall
task tasklists list、task +createor any task command to "find a list and then put the task". Friendly output: When outputting the execution result of a task (or list) to the user, it is recommended to also extract and output theurlfield (task link) from the command return result, so that the user can directly click to jump and view details.
Creation/update notes:
- Only when
due(due time) is set canrepeat_rule(recurrence rule) andreminder(reminder time) be set.- If both
start(start time) anddue(due time) are set, the start time must be less than or equal to the due time.- When using tenant_access_token (app identity), you cannot add task members across tenants.
Query notes:
- When outputting task details, if you need to render personnel fields such as assignee and creator, in addition to displaying
id(for example, open_id), you must also try to obtain and display the person's real name through other means (for example, calling the contacts skill), so that users can identify them more easily.- When outputting checklist details, if you need to render personnel fields such as owner, member, and role members, you must also, like when displaying task members, in addition to displaying
id, try to parse and display the corresponding person's real name.- When outputting task or checklist details, if you need to render fields such as creation time and due time, you need to use the local time zone to render them (format: 2006-01-02 15:04:05).
Task GUID definition: In the Task OpenAPI, the
guidused to update/operate on tasks is the task's globally unique identifier (GUID), not the client-displayed task number (for example,t104121/suite_entity_num). For a Feishu task applink (for example,.../client/todo/task?guid=...), you must use theguidparameter in the URL query as the task guid.
Shortest path to locate and modify a task from a task checklist:
- When the task checklist GUID is known, use it directly; do not search first. When the task checklist applink is known, take the
guidfrom the URL query as thetasklist_guid。- Only when there is only a checklist name or keyword and no GUID/applink, call
+tasklist-searchonce to resolve the target checklist.- Follow the native API rules: first execute
lark-cli schema task.tasklists.tasks, then executelark-cli task tasklists tasks --params '{"tasklist_guid":"<tasklist_guid>"}' --as user。- From the checklist task results, take the task's
guidand pass it directly to+updateor+complete; passing the client-displayed number (for example,t104121) is prohibited. These two shortcuts can also directly accept a task applink containingguid=.+updatereturnsupdated_fieldsand each task's server-sideconfirmedfield;+completereturnsstatus、completed_at、already_completed. When these fields have already confirmed the target state, do not routinely appendtasks get; query details again only when the server does not return the required fields or the user explicitly requests a complete review.
| Shortcut | Description |
|---|---|
+create |
create a task |
+update |
update task attributes |
+set-ancestor |
set or clear a task ancestor |
+comment |
add a comment to a task |
+complete |
mark a task as complete |
+reopen |
reopen a completed task |
+assign |
assign or remove task members |
+followers |
manage task followers |
+reminder |
manage task reminders |
+get-my-tasks |
List tasks assigned to me |
+get-related-tasks |
list tasks related to me |
+search |
search tasks |
+upload-attachment |
upload a local file as an attachment to a task |
+tasklist-create |
create a tasklist and optionally add tasks |
+tasklist-search |
search tasklists |
+tasklist-task-add |
add tasks to a tasklist |
+tasklist-members |
manage tasklist members |
API Resources
lark-cli schema task.<resource>.<method> # 调用 API 前必须先查看参数结构
lark-cli task <resource> <method> [flags] # 调用 API
Important: When using the native API, you must first run
schemato view the--data/--paramsparameter structure; do not guess the field format.
tasks
create— Create taskdelete— Delete taskget— Get task detailslist— List taskspatch— Update task
tasklists
add_members— Add checklist membercreate— Create checklistdelete— Delete checklistget— Get checklist detailslist— Get checklist listpatch— Update checklistremove_members— Remove checklist membertasks— Get checklist task list
subtasks
create— Create subtasklist— Get a task's subtask list
members
add— Add task memberremove— Remove task member
sections
create— Create custom sectiondelete— Delete custom sectionget— Get custom section detailslist— Get custom section listpatch— Update custom grouptasks— Get custom group task list
custom_fields
create— Create custom fieldget— Get custom field detailspatch— Update custom fieldlist— Get custom field listadd— Add custom field to resourceremove— Remove custom field from resource
custom_field_options
create— Create custom field optionpatch— Update custom field option
agent
update_agent_profile— Update the homepage content data of the task agent.register_agent— Register AI agent
agent_task_step_info
append_task_steps— Write task record.
Permission table
| Method | Required 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 |
custom_field_options.create |
task:custom_field:write |
custom_field_options.patch |
task:custom_field:write |
agent.update_agent_profile |
task:task:write |
agent.register_agent |
task:task:write |
agent_task_step_info.append_task_steps |
task:task:write |