wecom-cli is a tool provided by the plugin, not a terminal command: all operations are completed by calling this tool, and parameters should be passed using args , and it is forbidden to use it via command-line methods such as exec / shell / terminal.
⚠️ Prerequisite: Before calling wecom-cli for the first time, you must perform the prerequisite check according to the wecomcli-preflight skill to ensure the tool has been added to the whitelist.
WeCom To-do ManagementUse wecom-cli to manage WeCom to-dos.
Query and Locate
- The query scope is limited to records that already exist in the WeCom to-do system.
- You can query by creation time, deadline, completion status, and title/description keywords; keywords are literal matches, not semantic search.
- When the user asks "what to-dos do I have", "what unfinished to-dos are there", or "what to-dos are coming up", use
todo listto query records in the to-do system. - When deleting, completing, or updating, if the context does not have
todo_id, first usetodo listto locate it; if there is alreadytodo_idand the latest details or status need to be confirmed, usetodo get。
Interface Routing Table
[Important] Before performing any operation, you must first locate and fully read the reference document pointed to by the "Interface Routing Table", and then execute the command, to avoid parameter errors. It is strictly forbidden to guess and assemble parameters based only on the routing table description or your own memory.
| User Intent | Reference Location |
|---|---|
| Create a to-do (optional assignment) | references/todo-create.md |
| Delete a to-do / leave a to-do / remove from my to-dos | references/todo-delete.md |
| Complete the current user's own part / complete the entire to-do | references/todo-finish.md |
When there is already todo_id , confirm the to-do details and latest status |
references/todo-get.md |
| View the to-do list; filter by creation time, deadline, completion status, or keywords; locate to-dos for subsequent operations | references/todo-list.md |
| Modify the to-do content / assignee list / deadline (excluding participant status) | references/todo-update.md |
deadline Object Specification
The deadline of a to-do is uniformly expressed as a deadline object. When it involves "setting the deadline", "modifying the deadline", "clearing the deadline", or reading the deadline information of a to-do, handle it according to the specification in this section.
Structure
| Field | Type | Required | Semantics |
|---|---|---|---|
type |
string | Yes | Enum:date(date only; if the user does not mention a specific hour, minute, or second, then definitely choosedate) / datetime(the user mentioned a specific time) |
value |
string | Yes | type=date format when YYYY-MM-DD;type=datetime format when YYYY-MM-DD HH:mm:ss |
Semantics on the deadline / remind_at_deadline fields
- Set or modify
deadline: overall optional; if provided, its internaltypeandvalueare required. - Clear the already set deadline: update the
deadlinefield to an empty object{}; if the field is not updated, the original value remains unchanged. - As a return field: for a to-do with no deadline set, the
deadlinefield is not returned or isnull。 - Reminder timing (
remind_at_deadline):remind_at_deadlineanddeadlineform a pair and must appear together—withoutdeadlinepassingremind_at_deadlinealone will not take effect; do not pass it that way.remind_at_deadlineonly determines the remindertiming, at the input levelthere is no "turn off reminder" option(whether a reminder is actually sent is determined by the backend, and no reminder may be sent if conditions are not met; the returnedextra_infoshall prevail):remind_at_deadline=true(onlydeadline.type=datetimecan be passed) → atthe deadlineremind.remind_at_deadline=falseor not passed → remind according tothe backend default advance time(not turn off reminder)。deadline.type=dateor whendeadlineis not passed, do not passtrue。
When inferring from user input that deadline
a date/weekday directly limits a task or event in the to-do, it is also treated as the deadline. For example, for "Wednesday meeting, bring a laptop", Wednesday should be written into deadline。
- To-do reminder time = deadline: when the user explicitly wants a "scheduled-reminder to-do / to-do that reminds at a certain time / to-do reminder" and gives a specific time, the user's expected reminder time is
deadline.type=datetime, and passremind_at_deadline=true; if only a date is given or no reminder/deadline time is given, do not ask follow-up questions and do not passremind_at_deadline=true。 - Ordinary deadline: when only the deadline/expiration time is stated, or when the date on which the task occurs is given, fill in only
deadline, and do not passremind_at_deadline; in this case, remind according to the backend default advance time. - Time format: specific deadline/reminder time →
deadline.type=datetime、value="YYYY-MM-DD HH:mm:ss"; only deadline date →type=date、value="YYYY-MM-DD"。 - When no deadline/reminder or task occurrence time is mentioned:
deadlinedo not pass at all,remind_at_deadlinealso do not pass, and do not ask follow-up questions. - deadline at xx time, and remind yy in advance:
deadlinealways fill in the xx deadline time the user said; do not fill in the reminder time after the advance. The current input parameters cannot directly set "advance yy"; after creation/update, use the returnedextra_infoto determine whether the system reminder time exactly satisfies yy; if it does not, or there is noextra_inforeply:目前不支持直接创建您需要的提醒时间,已为您设置截止时间为 XX,请到企业微信待办功能中手动修改提醒时间。(XX fill in thisdeadline.value)
Example
{ "type": "date", "value": "2026-05-08" }
{ "type": "datetime", "value": "2026-05-08 09:00:00" }
Special note
- It is forbidden to display
todo_id(to-do ID) to the user.