[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M714V6ZWNVAQW2BAHADPTYBW":3,"skill-same:01M714V6ZWNVAQW2BAHADPTYBW":70},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":50,"commitSha":51,"skillDirectory":52,"forksCount":14,"repositoryHtmlUrl":53,"repositoryHomepageUrl":6,"ownerHtmlUrl":54,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":55,"install":56,"resources":69},"01M714V6ZWNVAQW2BAHADPTYBW","todoist-automation",null,"Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio). Always search tools first for current schemas.","sapsapshen\u002Fai-memory-router","sapsapshen","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F20347959?v=4","01M6XDQEF1DP50DKF37H81J3J5","shenmian","01M6XDQEJPE41Y3DT2763X8ZJN",0,"MIT","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Ftodoist-automation\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"automation","todoist automation","todoist","via","first","task","bulk operations","filtering","for","automate","Tools","composio","2026","unknown","MCP","search","task management","projects","community","bulk","2026-11-10 10:12:30",false,"---\nname: todoist-automation\ndescription: \"Automate Todoist task management, projects, sections, filtering, and bulk operations via Rube MCP (Composio). Always search tools first for current schemas.\"\nrisk: unknown\nsource: community\ndate_added: \"2026-02-27\"\n---\n\n# Todoist Automation via Rube MCP\n\nAutomate Todoist operations including task creation and management, project organization, section management, filtering, and bulk task workflows through Composio's Todoist toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Todoist connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n3. If connection is not ACTIVE, follow the returned auth link to complete Todoist OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Tasks\n\n**When to use**: User wants to create, update, complete, reopen, or delete tasks\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List projects to find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List sections within a project for task placement [Optional]\n3. `TODOIST_CREATE_TASK` - Create a single task with content, due date, priority, labels [Required]\n4. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in one request [Alternative]\n5. `TODOIST_UPDATE_TASK` - Modify task properties (content, due date, priority, labels) [Optional]\n6. `TODOIST_CLOSE_TASK` - Mark a task as completed [Optional]\n7. `TODOIST_REOPEN_TASK` - Restore a previously completed task [Optional]\n8. `TODOIST_DELETE_TASK` - Permanently remove a task [Optional]\n\n**Key parameters for CREATE_TASK**:\n- `content`: Task title (supports markdown and hyperlinks)\n- `description`: Additional notes (do NOT put due dates here)\n- `project_id`: Alphanumeric project ID; omit to add to Inbox\n- `section_id`: Alphanumeric section ID for placement within a project\n- `parent_id`: Task ID for creating subtasks\n- `priority`: 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgent\n- `due_string`: Natural language date like `\"tomorrow at 3pm\"`, `\"every Friday at 9am\"`\n- `due_date`: Specific date `YYYY-MM-DD` format\n- `due_datetime`: Specific date+time in RFC3339 `YYYY-MM-DDTHH:mm:ssZ`\n- `labels`: Array of label name strings\n- `duration` + `duration_unit`: Task duration (e.g., `30` + `\"minute\"`)\n\n**Pitfalls**:\n- Only one `due_*` field can be used at a time (except `due_lang` which can accompany any)\n- Do NOT embed due dates in `content` or `description` -- use `due_string` field\n- Do NOT embed duration phrases like \"for 30 minutes\" in `due_string` -- use `duration` + `duration_unit`\n- `priority` in API: 1=normal, 4=urgent (opposite of Todoist UI display where p1=urgent)\n- Task IDs can be numeric or alphanumeric; use the format returned by the API\n- `CLOSE_TASK` marks complete; `DELETE_TASK` permanently removes -- they are different operations\n\n### 2. Manage Projects\n\n**When to use**: User wants to list, create, update, or inspect projects\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List all projects with metadata [Required]\n2. `TODOIST_GET_PROJECT` - Get details for a specific project by ID [Optional]\n3. `TODOIST_CREATE_PROJECT` - Create a new project with name, color, view style [Optional]\n4. `TODOIST_UPDATE_PROJECT` - Modify project properties [Optional]\n\n**Key parameters**:\n- `name`: Project name (required for creation)\n- `color`: Todoist palette color (e.g., `\"blue\"`, `\"red\"`, `\"green\"`, `\"charcoal\"`)\n- `view_style`: `\"list\"` or `\"board\"` layout\n- `parent_id`: Parent project ID for creating sub-projects\n- `is_favorite` \u002F `favorite`: Boolean to mark as favorite\n- `project_id`: Required for update and get operations\n\n**Pitfalls**:\n- Projects with similar names can lead to selecting the wrong project_id; always verify\n- `CREATE_PROJECT` uses `favorite` while `UPDATE_PROJECT` uses `is_favorite` -- different field names\n- Use the project `id` returned by API, not the `v2_id`, for downstream operations\n- Alphanumeric\u002FURL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available\n\n### 3. Manage Sections\n\n**When to use**: User wants to organize tasks within projects using sections\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List existing sections to avoid duplicates [Prerequisite]\n3. `TODOIST_CREATE_SECTION` - Create a new section in a project [Required]\n4. `TODOIST_UPDATE_SECTION` - Rename an existing section [Optional]\n5. `TODOIST_DELETE_SECTION` - Permanently remove a section [Optional]\n\n**Key parameters**:\n- `project_id`: Required -- the project to create the section in\n- `name`: Section name (required for creation)\n- `order`: Integer position within the project (lower values appear first)\n- `section_id`: Required for update and delete operations\n\n**Pitfalls**:\n- `CREATE_SECTION` requires `project_id` and `name` -- omitting project_id causes a 400 error\n- HTTP 400 \"project_id is invalid\" can occur if alphanumeric ID is used; prefer numeric ID\n- Deleting a section may move or regroup its tasks in non-obvious ways\n- Response may include both `id` and `v2_id`; store and reuse the correct identifier consistently\n- Always check existing sections first to avoid creating duplicates\n\n### 4. Search and Filter Tasks\n\n**When to use**: User wants to find tasks by criteria, view today's tasks, or get completed task history\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_TASKS` - Fetch incomplete tasks with optional filter query [Required]\n2. `TODOIST_GET_TASK` - Get full details of a specific task by ID [Optional]\n3. `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` - Retrieve completed tasks within a date range [Optional]\n4. `TODOIST_LIST_FILTERS` - List user's custom saved filters [Optional]\n\n**Key parameters for GET_ALL_TASKS**:\n- `filter`: Todoist filter syntax string\n  - Keywords: `today`, `tomorrow`, `overdue`, `no date`, `recurring`, `subtask`\n  - Priority: `p1` (urgent), `p2`, `p3`, `p4` (normal)\n  - Projects: `#ProjectName` (must exist in account)\n  - Labels: `@LabelName` (must exist in account)\n  - Date ranges: `7 days`, `-7 days`, `due before: YYYY-MM-DD`, `due after: YYYY-MM-DD`\n  - Search: `search: keyword` for content text search\n  - Operators: `&` (AND), `|` (OR), `!` (NOT)\n- `ids`: List of specific task IDs to retrieve\n\n**Key parameters for GET_COMPLETED_TASKS_BY_COMPLETION_DATE**:\n- `since`: Start date in RFC3339 format (e.g., `2024-01-01T00:00:00Z`)\n- `until`: End date in RFC3339 format\n- `project_id`, `section_id`, `parent_id`: Optional filters\n- `cursor`: Pagination cursor from previous response\n- `limit`: Max results per page (default 50)\n\n**Pitfalls**:\n- `GET_ALL_TASKS` returns ONLY incomplete tasks; use `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` for completed ones\n- Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors\n- Do NOT use `completed`, `!completed`, or `completed after` in GET_ALL_TASKS filter -- causes 400 error\n- `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` limits date range to approximately 3 months between `since` and `until`\n- Search uses `search: keyword` syntax within the filter, not a separate parameter\n\n### 5. Bulk Task Creation\n\n**When to use**: User wants to scaffold a project with multiple tasks at once\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - Find section IDs for task placement [Optional]\n3. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in a single request [Required]\n\n**Key parameters**:\n- `tasks`: Array of task objects, each requiring at minimum `content`\n- Each task object supports: `content`, `description`, `project_id`, `section_id`, `parent_id`, `priority`, `labels`, `due` (object with `string`, `date`, or `datetime`), `duration`, `order`\n\n**Pitfalls**:\n- Each task in the array must have at least the `content` field\n- The `due` field in bulk create is an object with nested fields (`string`, `date`, `datetime`, `lang`) -- different structure from CREATE_TASK's flat fields\n- All tasks can target different projects\u002Fsections within the same batch\n\n## Common Patterns\n\n### ID Resolution\nAlways resolve human-readable names to IDs before operations:\n- **Project name -> Project ID**: `TODOIST_GET_ALL_PROJECTS`, match by `name` field\n- **Section name -> Section ID**: `TODOIST_GET_ALL_SECTIONS` with `project_id`\n- **Task content -> Task ID**: `TODOIST_GET_ALL_TASKS` with `filter` or `search: keyword`\n\n### Pagination\n- `TODOIST_GET_ALL_TASKS`: Returns all matching incomplete tasks (no pagination needed)\n- `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE`: Uses cursor-based pagination; follow `cursor` from response until no more results\n- `TODOIST_GET_ALL_PROJECTS` and `TODOIST_GET_ALL_SECTIONS`: Return all results (no pagination)\n\n### Due Date Handling\n- Natural language: Use `due_string` (e.g., `\"tomorrow at 3pm\"`, `\"every Monday\"`)\n- Specific date: Use `due_date` in `YYYY-MM-DD` format\n- Specific datetime: Use `due_datetime` in RFC3339 format (`YYYY-MM-DDTHH:mm:ssZ`)\n- Only use ONE due field at a time (except `due_lang` which can accompany any)\n- Recurring tasks: Use natural language in `due_string` (e.g., `\"every Friday at 9am\"`)\n\n## Known Pitfalls\n\n### ID Formats\n- Task IDs can be numeric (`\"2995104339\"`) or alphanumeric (`\"6X4Vw2Hfmg73Q2XR\"`)\n- Project IDs similarly vary; prefer the format returned by the API\n- Some tools accept only numeric IDs; if 400 error occurs, try fetching the numeric `id` via GET_PROJECT\n- Response objects may contain both `id` and `v2_id`; use `id` for API operations\n\n### Priority Inversion\n- API priority: 1 = normal, 4 = urgent\n- Todoist UI display: p1 = urgent, p4 = normal\n- This is inverted; always clarify with the user which convention they mean\n\n### Filter Syntax\n- Filter terms must reference real entities in the user's account\n- `#NonExistentProject` or `@NonExistentLabel` will cause HTTP 400\n- Use `search: keyword` for text search, not bare keywords\n- Combine with `&` (AND), `|` (OR), `!` (NOT)\n- `completed` filters do NOT work on GET_ALL_TASKS endpoint\n\n### Rate Limits\n- Todoist API has rate limits; batch operations should use `BULK_CREATE_TASKS` where possible\n- Space out rapid sequential requests to avoid throttling\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List all projects | `TODOIST_GET_ALL_PROJECTS` | (none) |\n| Get project | `TODOIST_GET_PROJECT` | `project_id` |\n| Create project | `TODOIST_CREATE_PROJECT` | `name`, `color`, `view_style` |\n| Update project | `TODOIST_UPDATE_PROJECT` | `project_id`, `name`, `color` |\n| List sections | `TODOIST_GET_ALL_SECTIONS` | `project_id` |\n| Create section | `TODOIST_CREATE_SECTION` | `project_id`, `name`, `order` |\n| Update section | `TODOIST_UPDATE_SECTION` | `section_id`, `name` |\n| Delete section | `TODOIST_DELETE_SECTION` | `section_id` |\n| Get all tasks | `TODOIST_GET_ALL_TASKS` | `filter`, `ids` |\n| Get task | `TODOIST_GET_TASK` | `task_id` |\n| Create task | `TODOIST_CREATE_TASK` | `content`, `project_id`, `due_string`, `priority` |\n| Bulk create tasks | `TODOIST_BULK_CREATE_TASKS` | `tasks` (array) |\n| Update task | `TODOIST_UPDATE_TASK` | `task_id`, `content`, `due_string` |\n| Complete task | `TODOIST_CLOSE_TASK` | `task_id` |\n| Reopen task | `TODOIST_REOPEN_TASK` | `task_id` |\n| Delete task | `TODOIST_DELETE_TASK` | `task_id` |\n| Completed tasks | `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` | `since`, `until` |\n| List filters | `TODOIST_LIST_FILTERS` | `sync_token` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n","# Todoist Automation via Rube MCP\n\nAutomate Todoist operations including task creation and management, project organization, section management, filtering, and bulk task workflows through Composio's Todoist toolkit.\n\n## Prerequisites\n\n- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)\n- Active Todoist connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas\n\n## Setup\n\n**Get Rube MCP**: Add `https:\u002F\u002Frube.app\u002Fmcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.\n\n1. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds\n2. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `todoist`\n3. If connection is not ACTIVE, follow the returned auth link to complete Todoist OAuth\n4. Confirm connection status shows ACTIVE before running any workflows\n\n## Core Workflows\n\n### 1. Create and Manage Tasks\n\n**When to use**: User wants to create, update, complete, reopen, or delete tasks\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List projects to find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List sections within a project for task placement [Optional]\n3. `TODOIST_CREATE_TASK` - Create a single task with content, due date, priority, labels [Required]\n4. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in one request [Alternative]\n5. `TODOIST_UPDATE_TASK` - Modify task properties (content, due date, priority, labels) [Optional]\n6. `TODOIST_CLOSE_TASK` - Mark a task as completed [Optional]\n7. `TODOIST_REOPEN_TASK` - Restore a previously completed task [Optional]\n8. `TODOIST_DELETE_TASK` - Permanently remove a task [Optional]\n\n**Key parameters for CREATE_TASK**:\n- `content`: Task title (supports markdown and hyperlinks)\n- `description`: Additional notes (do NOT put due dates here)\n- `project_id`: Alphanumeric project ID; omit to add to Inbox\n- `section_id`: Alphanumeric section ID for placement within a project\n- `parent_id`: Task ID for creating subtasks\n- `priority`: 1 (normal) to 4 (urgent) -- note: Todoist UI shows p1=urgent, API p4=urgent\n- `due_string`: Natural language date like `\"tomorrow at 3pm\"`, `\"every Friday at 9am\"`\n- `due_date`: Specific date `YYYY-MM-DD` format\n- `due_datetime`: Specific date+time in RFC3339 `YYYY-MM-DDTHH:mm:ssZ`\n- `labels`: Array of label name strings\n- `duration` + `duration_unit`: Task duration (e.g., `30` + `\"minute\"`)\n\n**Pitfalls**:\n- Only one `due_*` field can be used at a time (except `due_lang` which can accompany any)\n- Do NOT embed due dates in `content` or `description` -- use `due_string` field\n- Do NOT embed duration phrases like \"for 30 minutes\" in `due_string` -- use `duration` + `duration_unit`\n- `priority` in API: 1=normal, 4=urgent (opposite of Todoist UI display where p1=urgent)\n- Task IDs can be numeric or alphanumeric; use the format returned by the API\n- `CLOSE_TASK` marks complete; `DELETE_TASK` permanently removes -- they are different operations\n\n### 2. Manage Projects\n\n**When to use**: User wants to list, create, update, or inspect projects\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - List all projects with metadata [Required]\n2. `TODOIST_GET_PROJECT` - Get details for a specific project by ID [Optional]\n3. `TODOIST_CREATE_PROJECT` - Create a new project with name, color, view style [Optional]\n4. `TODOIST_UPDATE_PROJECT` - Modify project properties [Optional]\n\n**Key parameters**:\n- `name`: Project name (required for creation)\n- `color`: Todoist palette color (e.g., `\"blue\"`, `\"red\"`, `\"green\"`, `\"charcoal\"`)\n- `view_style`: `\"list\"` or `\"board\"` layout\n- `parent_id`: Parent project ID for creating sub-projects\n- `is_favorite` \u002F `favorite`: Boolean to mark as favorite\n- `project_id`: Required for update and get operations\n\n**Pitfalls**:\n- Projects with similar names can lead to selecting the wrong project_id; always verify\n- `CREATE_PROJECT` uses `favorite` while `UPDATE_PROJECT` uses `is_favorite` -- different field names\n- Use the project `id` returned by API, not the `v2_id`, for downstream operations\n- Alphanumeric\u002FURL-style project IDs may cause HTTP 400 in some tools; use numeric ID if available\n\n### 3. Manage Sections\n\n**When to use**: User wants to organize tasks within projects using sections\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find the target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - List existing sections to avoid duplicates [Prerequisite]\n3. `TODOIST_CREATE_SECTION` - Create a new section in a project [Required]\n4. `TODOIST_UPDATE_SECTION` - Rename an existing section [Optional]\n5. `TODOIST_DELETE_SECTION` - Permanently remove a section [Optional]\n\n**Key parameters**:\n- `project_id`: Required -- the project to create the section in\n- `name`: Section name (required for creation)\n- `order`: Integer position within the project (lower values appear first)\n- `section_id`: Required for update and delete operations\n\n**Pitfalls**:\n- `CREATE_SECTION` requires `project_id` and `name` -- omitting project_id causes a 400 error\n- HTTP 400 \"project_id is invalid\" can occur if alphanumeric ID is used; prefer numeric ID\n- Deleting a section may move or regroup its tasks in non-obvious ways\n- Response may include both `id` and `v2_id`; store and reuse the correct identifier consistently\n- Always check existing sections first to avoid creating duplicates\n\n### 4. Search and Filter Tasks\n\n**When to use**: User wants to find tasks by criteria, view today's tasks, or get completed task history\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_TASKS` - Fetch incomplete tasks with optional filter query [Required]\n2. `TODOIST_GET_TASK` - Get full details of a specific task by ID [Optional]\n3. `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` - Retrieve completed tasks within a date range [Optional]\n4. `TODOIST_LIST_FILTERS` - List user's custom saved filters [Optional]\n\n**Key parameters for GET_ALL_TASKS**:\n- `filter`: Todoist filter syntax string\n  - Keywords: `today`, `tomorrow`, `overdue`, `no date`, `recurring`, `subtask`\n  - Priority: `p1` (urgent), `p2`, `p3`, `p4` (normal)\n  - Projects: `#ProjectName` (must exist in account)\n  - Labels: `@LabelName` (must exist in account)\n  - Date ranges: `7 days`, `-7 days`, `due before: YYYY-MM-DD`, `due after: YYYY-MM-DD`\n  - Search: `search: keyword` for content text search\n  - Operators: `&` (AND), `|` (OR), `!` (NOT)\n- `ids`: List of specific task IDs to retrieve\n\n**Key parameters for GET_COMPLETED_TASKS_BY_COMPLETION_DATE**:\n- `since`: Start date in RFC3339 format (e.g., `2024-01-01T00:00:00Z`)\n- `until`: End date in RFC3339 format\n- `project_id`, `section_id`, `parent_id`: Optional filters\n- `cursor`: Pagination cursor from previous response\n- `limit`: Max results per page (default 50)\n\n**Pitfalls**:\n- `GET_ALL_TASKS` returns ONLY incomplete tasks; use `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` for completed ones\n- Filter terms must reference ACTUAL EXISTING entities; arbitrary text causes HTTP 400 errors\n- Do NOT use `completed`, `!completed`, or `completed after` in GET_ALL_TASKS filter -- causes 400 error\n- `GET_COMPLETED_TASKS_BY_COMPLETION_DATE` limits date range to approximately 3 months between `since` and `until`\n- Search uses `search: keyword` syntax within the filter, not a separate parameter\n\n### 5. Bulk Task Creation\n\n**When to use**: User wants to scaffold a project with multiple tasks at once\n\n**Tool sequence**:\n1. `TODOIST_GET_ALL_PROJECTS` - Find target project ID [Prerequisite]\n2. `TODOIST_GET_ALL_SECTIONS` - Find section IDs for task placement [Optional]\n3. `TODOIST_BULK_CREATE_TASKS` - Create multiple tasks in a single request [Required]\n\n**Key parameters**:\n- `tasks`: Array of task objects, each requiring at minimum `content`\n- Each task object supports: `content`, `description`, `project_id`, `section_id`, `parent_id`, `priority`, `labels`, `due` (object with `string`, `date`, or `datetime`), `duration`, `order`\n\n**Pitfalls**:\n- Each task in the array must have at least the `content` field\n- The `due` field in bulk create is an object with nested fields (`string`, `date`, `datetime`, `lang`) -- different structure from CREATE_TASK's flat fields\n- All tasks can target different projects\u002Fsections within the same batch\n\n## Common Patterns\n\n### ID Resolution\nAlways resolve human-readable names to IDs before operations:\n- **Project name -> Project ID**: `TODOIST_GET_ALL_PROJECTS`, match by `name` field\n- **Section name -> Section ID**: `TODOIST_GET_ALL_SECTIONS` with `project_id`\n- **Task content -> Task ID**: `TODOIST_GET_ALL_TASKS` with `filter` or `search: keyword`\n\n### Pagination\n- `TODOIST_GET_ALL_TASKS`: Returns all matching incomplete tasks (no pagination needed)\n- `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE`: Uses cursor-based pagination; follow `cursor` from response until no more results\n- `TODOIST_GET_ALL_PROJECTS` and `TODOIST_GET_ALL_SECTIONS`: Return all results (no pagination)\n\n### Due Date Handling\n- Natural language: Use `due_string` (e.g., `\"tomorrow at 3pm\"`, `\"every Monday\"`)\n- Specific date: Use `due_date` in `YYYY-MM-DD` format\n- Specific datetime: Use `due_datetime` in RFC3339 format (`YYYY-MM-DDTHH:mm:ssZ`)\n- Only use ONE due field at a time (except `due_lang` which can accompany any)\n- Recurring tasks: Use natural language in `due_string` (e.g., `\"every Friday at 9am\"`)\n\n## Known Pitfalls\n\n### ID Formats\n- Task IDs can be numeric (`\"2995104339\"`) or alphanumeric (`\"6X4Vw2Hfmg73Q2XR\"`)\n- Project IDs similarly vary; prefer the format returned by the API\n- Some tools accept only numeric IDs; if 400 error occurs, try fetching the numeric `id` via GET_PROJECT\n- Response objects may contain both `id` and `v2_id`; use `id` for API operations\n\n### Priority Inversion\n- API priority: 1 = normal, 4 = urgent\n- Todoist UI display: p1 = urgent, p4 = normal\n- This is inverted; always clarify with the user which convention they mean\n\n### Filter Syntax\n- Filter terms must reference real entities in the user's account\n- `#NonExistentProject` or `@NonExistentLabel` will cause HTTP 400\n- Use `search: keyword` for text search, not bare keywords\n- Combine with `&` (AND), `|` (OR), `!` (NOT)\n- `completed` filters do NOT work on GET_ALL_TASKS endpoint\n\n### Rate Limits\n- Todoist API has rate limits; batch operations should use `BULK_CREATE_TASKS` where possible\n- Space out rapid sequential requests to avoid throttling\n\n## Quick Reference\n\n| Task | Tool Slug | Key Params |\n|------|-----------|------------|\n| List all projects | `TODOIST_GET_ALL_PROJECTS` | (none) |\n| Get project | `TODOIST_GET_PROJECT` | `project_id` |\n| Create project | `TODOIST_CREATE_PROJECT` | `name`, `color`, `view_style` |\n| Update project | `TODOIST_UPDATE_PROJECT` | `project_id`, `name`, `color` |\n| List sections | `TODOIST_GET_ALL_SECTIONS` | `project_id` |\n| Create section | `TODOIST_CREATE_SECTION` | `project_id`, `name`, `order` |\n| Update section | `TODOIST_UPDATE_SECTION` | `section_id`, `name` |\n| Delete section | `TODOIST_DELETE_SECTION` | `section_id` |\n| Get all tasks | `TODOIST_GET_ALL_TASKS` | `filter`, `ids` |\n| Get task | `TODOIST_GET_TASK` | `task_id` |\n| Create task | `TODOIST_CREATE_TASK` | `content`, `project_id`, `due_string`, `priority` |\n| Bulk create tasks | `TODOIST_BULK_CREATE_TASKS` | `tasks` (array) |\n| Update task | `TODOIST_UPDATE_TASK` | `task_id`, `content`, `due_string` |\n| Complete task | `TODOIST_CLOSE_TASK` | `task_id` |\n| Reopen task | `TODOIST_REOPEN_TASK` | `task_id` |\n| Delete task | `TODOIST_DELETE_TASK` | `task_id` |\n| Completed tasks | `TODOIST_GET_COMPLETED_TASKS_BY_COMPLETION_DATE` | `since`, `until` |\n| List filters | `TODOIST_LIST_FILTERS` | `sync_token` |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n",{"name":5,"risk":37,"source":42,"date_added":49,"description":7},"2026-02-27","main","7a38d8e7073e61c16eda85681cb32fb68a8657a5","skills-store\u002Fcopilot\u002Ftodoist-automation","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router","https:\u002F\u002Fgithub.com\u002Fsapsapshen","2026-04-14 21:12:12",{"source":8,"skillName":5,"commands":57,"prompt":67,"zipAvailable":68},[58,61,64],{"tool":59,"command":60},"npx","npx skills add sapsapshen\u002Fai-memory-router --skill todoist-automation",{"tool":62,"command":63},"bunx","bunx skills add sapsapshen\u002Fai-memory-router --skill todoist-automation",{"tool":65,"command":66},"pnpm","pnpm dlx skills add sapsapshen\u002Fai-memory-router --skill todoist-automation","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fcopilot\u002Ftodoist-automation\u002FSKILL.md",true,[],[71,94,120,130,143,160],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":82,"publishedAt":44},"01M71ATQRKG48SH06FQ697T5G9","wechat-search","Search WeChat Official Account articles using OpenClaw's web search and fetch capabilities with compliance-focused design.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fwechat-search-release\u002FSKILL.md",[77],{"categoryNo":78,"categoryName":79,"taxonomyType":80,"taxonomyTypeDesc":81},"01JBSEEDCAT000000000000037","律师与法务","PROFESSION","适用职业",[83,84,39,85,86,87,88,89,90,91,92,93],"wechat search","wechat","capabilities","openclaw","design","web search","compliance","web","official","fetch","with",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":44},"01M71ATNAVGZB35PFYM2GC5N00","trend-tap","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend tap', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-tap\u002FSKILL.md",[],[101,102,103,104,105,106,39,107,108,109,110,111,112,113,114,115,116,117,118,119],"trend","trend tap","tap","api keys","Bash","time","trending","hacker","aggregator","do","when","brew","live","data","google","install","read","across","api",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":44},"01M71ATJ9AM5KM15AA8PS302EB","trend-radar","Real-time trending topics aggregator across 7 platforms (X\u002FTwitter, Reddit, Google Trends, Hacker News, Zhihu, Bilibili, Weibo). Trigger: when user says 'trend', 'trends', 'trend pulse', '热点', '热搜', or asks what is trending\u002Fhot. Do NOT use web_search — this skill already fetches live data from all platforms with zero API keys.","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftrend-radar\u002FSKILL.md",[],[127,128,101,112,113,114,115,105,39,117,129,118,119,111,109,108,107,116,106,104],"trend radar","radar","pulse",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":44},"01M71ATGF095N3EJM9G8SD0BB5","tech-news-daily","每日科技新闻汇——从全球多个 RSS 源抓取最新科技新闻，翻译（英→中）、去重、排版成每日简报。当用户询问科技新闻、科技新鲜事、每日科技、技术动态、Daily Tech News 或类似表达时触发此技能。","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Ftech-news-daily\u002FSKILL.md",[],[137,138,139,140,141,142],"news","tech","tech news daily","daily","rss","翻译",{"skillNo":144,"name":145,"nameZh":6,"description":146,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":147,"categories":148,"keywords":152,"publishedAt":44},"01M71ATFAEAMQ17M70NQNY7SR8","summarize","Summarize URLs or files with the summarize CLI (web, PDFs, images, audio, YouTube).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsummarize\u002FSKILL.md",[149],{"categoryNo":150,"categoryName":151,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[145,90,153,154,155,93,112,156,157,158,103,159,116],"Audio","cli","youtube","images","https","files","pdfs",{"skillNo":161,"name":162,"nameZh":6,"description":163,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":164,"categories":165,"keywords":166,"publishedAt":44},"01M71ATDNS3R0M4H936PACQAWZ","sonoscli","Control Sonos speakers (discover\u002Fstatus\u002Fplay\u002Fvolume\u002Fgroup).","https:\u002F\u002Fgithub.com\u002Fsapsapshen\u002Fai-memory-router\u002Fblob\u002Fmain\u002Fskills-store\u002Fopenclaw\u002Fsonoscli\u002FSKILL.md",[],[162,167,168,169,116,170,157,171,172,173,174,175],"status","play","go","latest","github","discover","control","cmd","volume"]